From b06516fdf8632ff6b5af58fb83eb593dc259f678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Wy=C5=82uda?= Date: Fri, 16 Aug 2013 23:42:55 +0200 Subject: [PATCH] Add GradleDependencyConfiguration.overrides() --- .../model/GradleDependencyConfiguration.java | 63 ++++++++++--- .../GradleDependencyConfigurationTest.java | 93 +++++++++++++++++++ 2 files changed, 144 insertions(+), 12 deletions(-) create mode 100644 api/src/test/java/org/jboss/forge/addon/gradle/projects/model/GradleDependencyConfigurationTest.java diff --git a/api/src/main/java/org/jboss/forge/addon/gradle/projects/model/GradleDependencyConfiguration.java b/api/src/main/java/org/jboss/forge/addon/gradle/projects/model/GradleDependencyConfiguration.java index 16ac214..ba470c2 100644 --- a/api/src/main/java/org/jboss/forge/addon/gradle/projects/model/GradleDependencyConfiguration.java +++ b/api/src/main/java/org/jboss/forge/addon/gradle/projects/model/GradleDependencyConfiguration.java @@ -6,7 +6,10 @@ */ package org.jboss.forge.addon.gradle.projects.model; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -19,7 +22,7 @@ public enum GradleDependencyConfiguration COMPILE("compile", "compile"), RUNTIME("runtime", "runtime"), TEST_COMPILE("testCompile", "test"), - TEST_RUNTIME("testRuntime", "test"), + TEST_RUNTIME("testRuntime", "runtime"), /** * Direct dependency configuration (which doesn't have defined version and config). @@ -29,27 +32,25 @@ public enum GradleDependencyConfiguration /** * Dependency configuration not defined in {@link GradleDependencyConfiguration}. */ - OTHER("", "compile"); + OTHER("", null); private static class ConfigContainer { private static final Map BY_NAME_MAP = new HashMap(); - private static final Map BY_MAVEN_SCOPE_MAP = + private static final Map BY_MAVEN_SCOPE_MAP = new HashMap(); } - - static { - ConfigContainer.BY_MAVEN_SCOPE_MAP.put("compile", COMPILE); - ConfigContainer.BY_MAVEN_SCOPE_MAP.put("provided", COMPILE); - ConfigContainer.BY_MAVEN_SCOPE_MAP.put("runtime", RUNTIME); - ConfigContainer.BY_MAVEN_SCOPE_MAP.put("test", TEST_COMPILE); - ConfigContainer.BY_MAVEN_SCOPE_MAP.put("system", COMPILE); - ConfigContainer.BY_MAVEN_SCOPE_MAP.put("import", COMPILE); + + static + { + fillMavenScopeMap(); + configureExtends(); } private final String name; private final String mavenScope; + private final List extendsList = new ArrayList(); private GradleDependencyConfiguration(String name, String mavenScope) { @@ -68,6 +69,25 @@ public String toMavenScope() return mavenScope; } + /** + * Defines partial ordering (in a mathematical sense) relation for configurations. + */ + public boolean overrides(GradleDependencyConfiguration config) + { + if (config == this) + { + return true; + } + for (GradleDependencyConfiguration extendsConfig : extendsList) + { + if (extendsConfig.overrides(config)) + { + return true; + } + } + return false; + } + /** * Searches map for config with specified name. * @@ -85,6 +105,25 @@ public static GradleDependencyConfiguration fromName(String name) */ public static GradleDependencyConfiguration fromMavenScope(String mavenScope) { - return ConfigContainer.BY_MAVEN_SCOPE_MAP.get(mavenScope); + GradleDependencyConfiguration config = ConfigContainer.BY_MAVEN_SCOPE_MAP.get(mavenScope); + return config != null ? config : OTHER; + } + + private static void fillMavenScopeMap() + { + ConfigContainer.BY_MAVEN_SCOPE_MAP.put("compile", COMPILE); + ConfigContainer.BY_MAVEN_SCOPE_MAP.put("provided", COMPILE); + ConfigContainer.BY_MAVEN_SCOPE_MAP.put("runtime", RUNTIME); + ConfigContainer.BY_MAVEN_SCOPE_MAP.put("test", TEST_COMPILE); + ConfigContainer.BY_MAVEN_SCOPE_MAP.put("system", COMPILE); + ConfigContainer.BY_MAVEN_SCOPE_MAP.put("import", COMPILE); + } + + private static void configureExtends() + { + // http://www.gradle.org/docs/current/userguide/userguide_single.html#tab:configurations + Collections.addAll(RUNTIME.extendsList, COMPILE); + Collections.addAll(TEST_COMPILE.extendsList, COMPILE); + Collections.addAll(TEST_RUNTIME.extendsList, RUNTIME, TEST_COMPILE); } } diff --git a/api/src/test/java/org/jboss/forge/addon/gradle/projects/model/GradleDependencyConfigurationTest.java b/api/src/test/java/org/jboss/forge/addon/gradle/projects/model/GradleDependencyConfigurationTest.java new file mode 100644 index 0000000..e2d8f68 --- /dev/null +++ b/api/src/test/java/org/jboss/forge/addon/gradle/projects/model/GradleDependencyConfigurationTest.java @@ -0,0 +1,93 @@ +/* + * Copyright 2013 Red Hat, Inc. and/or its affiliates. + * + * Licensed under the Eclipse Public License version 1.0, available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.jboss.forge.addon.gradle.projects.model; + +import static org.jboss.forge.addon.gradle.projects.model.GradleDependencyConfiguration.COMPILE; +import static org.jboss.forge.addon.gradle.projects.model.GradleDependencyConfiguration.DIRECT; +import static org.jboss.forge.addon.gradle.projects.model.GradleDependencyConfiguration.OTHER; +import static org.jboss.forge.addon.gradle.projects.model.GradleDependencyConfiguration.RUNTIME; +import static org.jboss.forge.addon.gradle.projects.model.GradleDependencyConfiguration.TEST_COMPILE; +import static org.jboss.forge.addon.gradle.projects.model.GradleDependencyConfiguration.TEST_RUNTIME; +import static org.junit.Assert.fail; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import org.junit.Test; + +/** + * Overrides tests are based on Java plugin + * configurations. + * + * @author Adam WyƂuda + */ +public class GradleDependencyConfigurationTest +{ + @Test + public void testCompileOverrides() + { + assertOverridesOnly(COMPILE, COMPILE); + } + + @Test + public void testRuntimeOverrides() + { + assertOverridesOnly(RUNTIME, RUNTIME, COMPILE); + } + + @Test + public void testTestCompileOverrides() + { + assertOverridesOnly(TEST_COMPILE, TEST_COMPILE, COMPILE); + } + + @Test + public void testTestRuntimeOverrides() + { + assertOverridesOnly(TEST_RUNTIME, TEST_RUNTIME, TEST_COMPILE, RUNTIME, COMPILE); + } + + @Test + public void testDirectOverrides() + { + assertOverridesOnly(DIRECT, DIRECT); + } + + @Test + public void testOtherOverrides() + { + assertOverridesOnly(OTHER, OTHER); + } + + private void assertOverridesOnly(GradleDependencyConfiguration config, GradleDependencyConfiguration... all) + { + List shouldOverride = new ArrayList(); + Collections.addAll(shouldOverride, all); + + List shouldNotOverride = new ArrayList(); + Collections.addAll(shouldNotOverride, GradleDependencyConfiguration.values()); + shouldNotOverride.removeAll(shouldOverride); + + for (GradleDependencyConfiguration oneOfAll : shouldOverride) + { + if (!config.overrides(oneOfAll)) + { + fail(config.toString() + " is not overriding " + oneOfAll); + } + } + + for (GradleDependencyConfiguration oneOfAll : shouldNotOverride) + { + if (config.overrides(oneOfAll)) + { + fail(config.toString() + " overrides " + oneOfAll); + } + } + } +}