Skip to content

Commit

Permalink
Add GradleDependencyConfiguration.overrides()
Browse files Browse the repository at this point in the history
  • Loading branch information
adam-wyluda committed Aug 16, 2013
1 parent 986e0c6 commit b06516f
Show file tree
Hide file tree
Showing 2 changed files with 144 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;

/**
Expand All @@ -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).
Expand All @@ -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<String, GradleDependencyConfiguration> BY_NAME_MAP =
new HashMap<String, GradleDependencyConfiguration>();
private static final Map<String, GradleDependencyConfiguration> BY_MAVEN_SCOPE_MAP =
private static final Map<String, GradleDependencyConfiguration> BY_MAVEN_SCOPE_MAP =
new HashMap<String, GradleDependencyConfiguration>();
}

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<GradleDependencyConfiguration> extendsList = new ArrayList<GradleDependencyConfiguration>();

private GradleDependencyConfiguration(String name, String mavenScope)
{
Expand All @@ -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.
*
Expand All @@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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 <a
* href="http://www.gradle.org/docs/current/userguide/userguide_single.html#tab:configurations">Java plugin
* configurations</a>.
*
* @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<GradleDependencyConfiguration> shouldOverride = new ArrayList<GradleDependencyConfiguration>();
Collections.addAll(shouldOverride, all);

List<GradleDependencyConfiguration> shouldNotOverride = new ArrayList<GradleDependencyConfiguration>();
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);
}
}
}
}

0 comments on commit b06516f

Please sign in to comment.