diff options
10 files changed, 167 insertions, 134 deletions
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.java index bed7610e82f..441d7b5a7b8 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.java @@ -1,6 +1,7 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.plugin.mojo; +import com.yahoo.container.plugin.util.Artifacts; import org.apache.maven.model.Build; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Component; diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleTestBundleMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleTestBundleMojo.java index ddf382b02dc..98176e62b93 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleTestBundleMojo.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleTestBundleMojo.java @@ -1,6 +1,8 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.container.plugin.mojo; +import com.yahoo.container.plugin.util.Artifacts; +import com.yahoo.container.plugin.util.TestBundleDependencyScopeTranslator; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; @@ -10,8 +12,8 @@ import org.codehaus.plexus.archiver.jar.JarArchiver; import java.nio.file.Path; import java.nio.file.Paths; -import static com.yahoo.container.plugin.mojo.TestBundleUtils.archiveFile; -import static com.yahoo.container.plugin.mojo.TestBundleUtils.manifestFile; +import static com.yahoo.container.plugin.util.TestBundleUtils.archiveFile; +import static com.yahoo.container.plugin.util.TestBundleUtils.manifestFile; /** * @author bjorncs diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateBundleClassPathMappingsMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateBundleClassPathMappingsMojo.java index 4d5b0e327d5..e94e05512aa 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateBundleClassPathMappingsMojo.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateBundleClassPathMappingsMojo.java @@ -5,6 +5,7 @@ import com.google.common.base.Preconditions; import com.yahoo.container.plugin.bundle.AnalyzeBundle; import com.yahoo.container.plugin.osgi.ProjectBundleClassPaths; import com.yahoo.container.plugin.osgi.ProjectBundleClassPaths.BundleClasspathMapping; +import com.yahoo.container.plugin.util.Artifacts; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java index be71c9c149f..892eb9aac05 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java @@ -8,6 +8,7 @@ import com.yahoo.container.plugin.classanalysis.PackageTally; import com.yahoo.container.plugin.osgi.ExportPackages; import com.yahoo.container.plugin.osgi.ExportPackages.Export; import com.yahoo.container.plugin.osgi.ImportPackages.Import; +import com.yahoo.container.plugin.util.Artifacts; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Mojo; diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateTestBundleOsgiManifestMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateTestBundleOsgiManifestMojo.java index 0d4b4dbc8a4..819b47aa417 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateTestBundleOsgiManifestMojo.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateTestBundleOsgiManifestMojo.java @@ -6,6 +6,8 @@ import com.yahoo.container.plugin.classanalysis.ClassFileMetaData; import com.yahoo.container.plugin.classanalysis.PackageTally; import com.yahoo.container.plugin.osgi.ExportPackages.Export; import com.yahoo.container.plugin.osgi.ImportPackages; +import com.yahoo.container.plugin.util.Artifacts; +import com.yahoo.container.plugin.util.TestBundleDependencyScopeTranslator; import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.Mojo; @@ -18,7 +20,7 @@ import java.util.Map; import java.util.stream.Stream; import static com.yahoo.container.plugin.bundle.AnalyzeBundle.exportedPackagesAggregated; -import static com.yahoo.container.plugin.mojo.TestBundleUtils.outputDirectory; +import static com.yahoo.container.plugin.util.TestBundleUtils.outputDirectory; import static com.yahoo.container.plugin.osgi.ExportPackages.exportsByPackageName; import static com.yahoo.container.plugin.osgi.ImportPackages.calculateImports; import static com.yahoo.container.plugin.util.Files.allDescendantFiles; diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/Artifacts.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/Artifacts.java index 0dbed043de0..fc771e23fa7 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/Artifacts.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/Artifacts.java @@ -1,5 +1,5 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.container.plugin.mojo; +package com.yahoo.container.plugin.util; import org.apache.maven.artifact.Artifact; import org.apache.maven.project.MavenProject; @@ -12,16 +12,16 @@ import java.util.List; * @author Tony Vaagenes * @author ollivir */ -class Artifacts { +public class Artifacts { interface ScopeTranslator { String scopeOf(Artifact artifact); } - static class NoopScopeTranslator implements ScopeTranslator { + private static class NoopScopeTranslator implements ScopeTranslator { @Override public String scopeOf(Artifact artifact) { return artifact.getScope(); } } - static class ArtifactSet { + public static class ArtifactSet { private final List<Artifact> jarArtifactsToInclude; private final List<Artifact> jarArtifactsProvided; @@ -36,22 +36,22 @@ class Artifacts { this.nonJarArtifacts = nonJarArtifacts; } - List<Artifact> getJarArtifactsToInclude() { + public List<Artifact> getJarArtifactsToInclude() { return jarArtifactsToInclude; } - List<Artifact> getJarArtifactsProvided() { + public List<Artifact> getJarArtifactsProvided() { return jarArtifactsProvided; } - List<Artifact> getNonJarArtifacts() { + public List<Artifact> getNonJarArtifacts() { return nonJarArtifacts; } } - static ArtifactSet getArtifacts(MavenProject project) { return getArtifacts(project, new NoopScopeTranslator()); } + public static ArtifactSet getArtifacts(MavenProject project) { return getArtifacts(project, new NoopScopeTranslator()); } - static ArtifactSet getArtifacts(MavenProject project, ScopeTranslator scopeTranslator) { + public static ArtifactSet getArtifacts(MavenProject project, ScopeTranslator scopeTranslator) { List<Artifact> jarArtifactsToInclude = new ArrayList<>(); List<Artifact> jarArtifactsProvided = new ArrayList<>(); List<Artifact> nonJarArtifactsToInclude = new ArrayList<>(); @@ -76,7 +76,7 @@ class Artifacts { return new ArtifactSet(jarArtifactsToInclude, jarArtifactsProvided, nonJarArtifactsToInclude); } - static Collection<Artifact> getArtifactsToInclude(MavenProject project) { + public static Collection<Artifact> getArtifactsToInclude(MavenProject project) { return getArtifacts(project, new NoopScopeTranslator()).getJarArtifactsToInclude(); } } diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslator.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/TestBundleDependencyScopeTranslator.java index 9ad0a0e34ba..04ede59e2fe 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslator.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/TestBundleDependencyScopeTranslator.java @@ -1,5 +1,5 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.container.plugin.mojo; +package com.yahoo.container.plugin.util; import org.apache.maven.artifact.Artifact; @@ -18,14 +18,14 @@ import static java.util.stream.Collectors.toList; * * Dependencies of scope 'test' are by default translated to 'compile'. Dependencies of other scopes are kept as is. * - * Default scope translation can be overridden through a comma-separated configuration string. + * Default scope translation for 'test' scope dependencies can be overridden through a comma-separated configuration string. * Each substring is a triplet on the form [groupId]:[artifactId]:[scope]. * Scope translation overrides affects all transitive dependencies. * The ordering of the triplets determines the priority - only the first matching override will affect a given dependency. * * @author bjorncs */ -class TestBundleDependencyScopeTranslator implements Artifacts.ScopeTranslator { +public class TestBundleDependencyScopeTranslator implements Artifacts.ScopeTranslator { private static final Logger log = Logger.getLogger(TestBundleDependencyScopeTranslator.class.getName()); @@ -37,7 +37,7 @@ class TestBundleDependencyScopeTranslator implements Artifacts.ScopeTranslator { @Override public String scopeOf(Artifact artifact) { return Objects.requireNonNull(dependencyScopes.get(artifact)); } - static TestBundleDependencyScopeTranslator from(Map<String, Artifact> dependencies, String rawConfig) { + public static TestBundleDependencyScopeTranslator from(Map<String, Artifact> dependencies, String rawConfig) { List<DependencyOverride> dependencyOverrides = toDependencyOverrides(rawConfig); Map<Artifact, String> dependencyScopes = new HashMap<>(); for (Artifact dependency : dependencies.values()) { @@ -72,12 +72,10 @@ class TestBundleDependencyScopeTranslator implements Artifacts.ScopeTranslator { private static String getScopeForDependency( Artifact dependency, List<DependencyOverride> overrides, Map<String, Artifact> otherArtifacts) { String oldScope = dependency.getScope(); + if (!oldScope.equals(Artifact.SCOPE_TEST)) return oldScope; for (DependencyOverride override : overrides) { for (Artifact dependent : dependencyTrailOf(dependency, otherArtifacts)) { if (override.isForArtifact(dependent)) { - // This translation is not always correct for artifacts having 'runtime' scope dependencies. - // If such dependencies are overridden to 'compile' scope, its 'runtime' dependencies will get - // scope 'compile' instead of 'runtime'. log.fine(() -> String.format( "Overriding scope of '%s'; scope '%s' overridden to '%s'", dependency.getId(), oldScope, override.scope)); @@ -85,11 +83,10 @@ class TestBundleDependencyScopeTranslator implements Artifacts.ScopeTranslator { } } } - String newScope = defaultScopeTranslationOf(oldScope); log.fine(() -> String.format( - "Using default scope translation for '%s'; scope '%s' translated to '%s'", - dependency.getId(), oldScope, newScope)); - return newScope; + "Using default scope translation for '%s'; scope 'test' translated to 'compile'", + dependency.getId())); + return Artifact.SCOPE_COMPILE; } private static List<Artifact> dependencyTrailOf(Artifact artifact, Map<String, Artifact> otherArtifacts) { @@ -100,10 +97,6 @@ class TestBundleDependencyScopeTranslator implements Artifacts.ScopeTranslator { .collect(toList()); } - private static String defaultScopeTranslationOf(String scope) { - return scope.equals(Artifact.SCOPE_TEST) ? Artifact.SCOPE_COMPILE : scope; - } - private static class DependencyOverride { final String groupId; final String artifactId; diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleUtils.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/TestBundleUtils.java index 9a3fc89bbd5..b8824952995 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleUtils.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/TestBundleUtils.java @@ -1,5 +1,5 @@ // Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.container.plugin.mojo; +package com.yahoo.container.plugin.util; import org.apache.maven.project.MavenProject; @@ -10,14 +10,14 @@ import java.util.jar.JarFile; /** * @author bjorncs */ -class TestBundleUtils { +public class TestBundleUtils { private TestBundleUtils() {} - static Path outputDirectory(MavenProject project) { return targetDirectory(project).resolve("test-bundle/"); } + public static Path outputDirectory(MavenProject project) { return targetDirectory(project).resolve("test-bundle/"); } - static Path manifestFile(MavenProject project) { return outputDirectory(project).resolve(JarFile.MANIFEST_NAME); } + public static Path manifestFile(MavenProject project) { return outputDirectory(project).resolve(JarFile.MANIFEST_NAME); } - static Path archiveFile(MavenProject project) { + public static Path archiveFile(MavenProject project) { return targetDirectory(project).resolve(project.getBuild().getFinalName() + "-tests.jar"); } diff --git a/bundle-plugin/src/test/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslatorTest.java b/bundle-plugin/src/test/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslatorTest.java deleted file mode 100644 index c0e1c9b4b9a..00000000000 --- a/bundle-plugin/src/test/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslatorTest.java +++ /dev/null @@ -1,101 +0,0 @@ -// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.container.plugin.mojo; - - -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.DefaultArtifact; -import org.apache.maven.artifact.handler.DefaultArtifactHandler; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -import static org.junit.Assert.assertEquals; - -/** - * @author bjorncs - */ -public class TestBundleDependencyScopeTranslatorTest { - - private static final String GROUP_ID = "com.test"; - - @Test - public void findsAllTestProvidedDependencies() { - Map<String, Artifact> artifacts = new TreeMap<>(); - Artifact a = createArtifact(artifacts, "a", "compile", List.of()); - Artifact aa = createArtifact(artifacts, "a-a", "compile", List.of("a")); - Artifact ab = createArtifact(artifacts, "a-b", "runtime", List.of("a")); - Artifact aba = createArtifact(artifacts, "a-b-a", "runtime", List.of("a", "a-b")); - Artifact ac = createArtifact(artifacts, "a-c", "runtime", List.of("a")); - Artifact ad = createArtifact(artifacts, "a-d", "compile", List.of("a")); - Artifact ada = createArtifact(artifacts, "a-d-a", "compile", List.of("a", "a-d")); - Artifact adb = createArtifact(artifacts, "a-d-b", "compile", List.of("a", "a-d")); - Artifact b = createArtifact(artifacts, "b", "provided", List.of()); - Artifact ba = createArtifact(artifacts, "b-a", "provided", List.of("b")); - Artifact bb = createArtifact(artifacts, "b-b", "provided", List.of("b")); - Artifact c = createArtifact(artifacts, "c", "runtime", List.of()); - Artifact ca = createArtifact(artifacts, "c-a", "runtime", List.of("c")); - Artifact d = createArtifact(artifacts, "d", "test", List.of()); - Artifact da = createArtifact(artifacts, "d-a", "test", List.of("d")); - Artifact daa = createArtifact(artifacts, "d-a-a", "test", List.of("d", "d-a")); - Artifact db = createArtifact(artifacts, "d-b", "test", List.of("d")); - Artifact dc = createArtifact(artifacts, "d-c", "test", List.of("d")); - Artifact dca = createArtifact(artifacts, "d-c-a", "test", List.of("d", "d-c")); - - String configString = - "com.test:a-d:compile," + - "com.test:a:provided," + - "com.test:d-a:test," + - "com.test:d-c:compile," + - "com.test:d:runtime"; - TestBundleDependencyScopeTranslator translator = TestBundleDependencyScopeTranslator.from(artifacts, configString); - assertScope(translator, a, "provided"); - assertScope(translator, aa, "provided"); - assertScope(translator, ab, "provided"); - assertScope(translator, aba, "provided"); - assertScope(translator, ac, "provided"); - assertScope(translator, ad, "compile"); - assertScope(translator, ada, "compile"); - assertScope(translator, adb, "compile"); - assertScope(translator, b, "provided"); - assertScope(translator, ba, "provided"); - assertScope(translator, bb, "provided"); - assertScope(translator, c, "runtime"); - assertScope(translator, ca, "runtime"); - assertScope(translator, d, "runtime"); - assertScope(translator, da, "test"); - assertScope(translator, daa, "test"); - assertScope(translator, db, "runtime"); - assertScope(translator, dc, "compile"); - assertScope(translator, dca, "compile"); - } - - private static Artifact createArtifact( - Map<String, Artifact> artifacts, String artifactId, String scope, List<String> transitiveDependents) { - Artifact artifact = createArtifact(artifactId, scope, transitiveDependents); - artifacts.put(simpleId(artifactId), artifact); - return artifact; - } - - private static Artifact createArtifact(String artifactId, String scope, List<String> transitiveDependents) { - Artifact artifact = new DefaultArtifact( - GROUP_ID, artifactId, "1.0", scope, "jar", /*classifier*/null, new DefaultArtifactHandler("jar")); - List<String> dependencyTrail = new ArrayList<>(); - dependencyTrail.add(GROUP_ID + "my-project:container-plugin:1-SNAPSHOT"); - transitiveDependents.forEach(dependent -> dependencyTrail.add(fullId(dependent))); - dependencyTrail.add(fullId(artifactId)); - artifact.setDependencyTrail(dependencyTrail); - return artifact; - } - - private static void assertScope( - TestBundleDependencyScopeTranslator translator, Artifact artifact, String expectedScope) { - assertEquals(expectedScope, translator.scopeOf(artifact)); - } - - private static String fullId(String artifactId) { return simpleId(artifactId) + ":jar:1.0"; } - private static String simpleId(String artifactId) { return GROUP_ID + ":" + artifactId; } - -}
\ No newline at end of file diff --git a/bundle-plugin/src/test/java/com/yahoo/container/plugin/util/TestBundleDependencyScopeTranslatorTest.java b/bundle-plugin/src/test/java/com/yahoo/container/plugin/util/TestBundleDependencyScopeTranslatorTest.java new file mode 100644 index 00000000000..e01477eb22a --- /dev/null +++ b/bundle-plugin/src/test/java/com/yahoo/container/plugin/util/TestBundleDependencyScopeTranslatorTest.java @@ -0,0 +1,134 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.container.plugin.util; + + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.DefaultArtifact; +import org.apache.maven.artifact.handler.DefaultArtifactHandler; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import static org.junit.Assert.assertEquals; + +/** + * @author bjorncs + */ +public class TestBundleDependencyScopeTranslatorTest { + + private static final String GROUP_ID = "com.test"; + + @Test + public void test_dependencies_are_translated_to_compile_scope_by_default() { + Map<String, Artifact> artifacts = new TreeMap<>(); + Artifact a = createArtifact(artifacts, "a", "test", List.of()); + Artifact aa = createArtifact(artifacts, "a-a", "test", List.of("a")); + Artifact ab = createArtifact(artifacts, "a-b", "test", List.of("a")); + Artifact aba = createArtifact(artifacts, "a-b-a", "test", List.of("a", "a-b")); + + TestBundleDependencyScopeTranslator translator = TestBundleDependencyScopeTranslator.from(artifacts, null); + assertScope(translator, a, "compile"); + assertScope(translator, aa, "compile"); + assertScope(translator, ab, "compile"); + assertScope(translator, aba, "compile"); + + } + + @Test + public void non_test_scope_dependencies_keep_original_scope() { + Map<String, Artifact> artifacts = new TreeMap<>(); + Artifact a = createArtifact(artifacts, "a", "provided", List.of()); + Artifact aa = createArtifact(artifacts, "a-a", "provided", List.of("a")); + Artifact ab = createArtifact(artifacts, "a-b", "provided", List.of("a")); + Artifact b = createArtifact(artifacts, "b", "runtime", List.of()); + Artifact ba = createArtifact(artifacts, "b-a", "runtime", List.of("b")); + Artifact c = createArtifact(artifacts, "c", "test", List.of()); + Artifact ca = createArtifact(artifacts, "c-a", "test", List.of("c")); + + TestBundleDependencyScopeTranslator translator = TestBundleDependencyScopeTranslator.from(artifacts, null); + assertScope(translator, a, "provided"); + assertScope(translator, aa, "provided"); + assertScope(translator, ab, "provided"); + assertScope(translator, b, "runtime"); + assertScope(translator, ba, "runtime"); + assertScope(translator, c, "compile"); + assertScope(translator, ca, "compile"); + } + + @Test + public void ordering_in_config_string_determines_translation() { + Map<String, Artifact> artifacts = new TreeMap<>(); + Artifact a = createArtifact(artifacts, "a", "test", List.of()); + Artifact aa = createArtifact(artifacts, "a-a", "test", List.of("a")); + { + String configString = + "com.test:a-a:runtime," + + "com.test:a:test,"; + TestBundleDependencyScopeTranslator translator = TestBundleDependencyScopeTranslator.from(artifacts, configString); + assertScope(translator, a, "test"); + assertScope(translator, aa, "runtime"); + } + { + String configString = + "com.test:a:test," + + "com.test:a-a:runtime"; + TestBundleDependencyScopeTranslator translator = TestBundleDependencyScopeTranslator.from(artifacts, configString); + assertScope(translator, a, "test"); + assertScope(translator, aa, "test"); + } + } + + @Test + public void transitive_non_test_dependencies_of_test_dependencies_keep_original_scope() { + Map<String, Artifact> artifacts = new TreeMap<>(); + Artifact a = createArtifact(artifacts, "a", "test", List.of()); + Artifact aa = createArtifact(artifacts, "a-a", "test", List.of("a")); + Artifact ab = createArtifact(artifacts, "a-b", "test", List.of("a")); + Artifact aba = createArtifact(artifacts, "a-b-a", "compile", List.of("a", "a-b")); + Artifact ac = createArtifact(artifacts, "a-c", "runtime", List.of("a")); + Artifact b = createArtifact(artifacts, "b", "test", List.of()); + Artifact ba = createArtifact(artifacts, "b-a", "test", List.of("b")); + Artifact bb = createArtifact(artifacts, "b-b", "provided", List.of("b")); + + String configString = "com.test:a:provided"; + TestBundleDependencyScopeTranslator translator = TestBundleDependencyScopeTranslator.from(artifacts, configString); + assertScope(translator, a, "provided"); + assertScope(translator, aa, "provided"); + assertScope(translator, ab, "provided"); + assertScope(translator, aba, "compile"); + assertScope(translator, ac, "runtime"); + assertScope(translator, b, "compile"); + assertScope(translator, ba, "compile"); + assertScope(translator, bb, "provided"); + } + + private static Artifact createArtifact( + Map<String, Artifact> artifacts, String artifactId, String scope, List<String> transitiveDependents) { + Artifact artifact = createArtifact(artifactId, scope, transitiveDependents); + artifacts.put(simpleId(artifactId), artifact); + return artifact; + } + + private static Artifact createArtifact(String artifactId, String scope, List<String> transitiveDependents) { + Artifact artifact = new DefaultArtifact( + GROUP_ID, artifactId, "1.0", scope, "jar", /*classifier*/null, new DefaultArtifactHandler("jar")); + List<String> dependencyTrail = new ArrayList<>(); + dependencyTrail.add(GROUP_ID + "my-project:container-plugin:1-SNAPSHOT"); + transitiveDependents.forEach(dependent -> dependencyTrail.add(fullId(dependent))); + dependencyTrail.add(fullId(artifactId)); + artifact.setDependencyTrail(dependencyTrail); + return artifact; + } + + private static void assertScope( + TestBundleDependencyScopeTranslator translator, Artifact artifact, String expectedScope) { + assertEquals(expectedScope, translator.scopeOf(artifact)); + } + + private static String fullId(String artifactId) { return simpleId(artifactId) + ":jar:1.0"; } + private static String simpleId(String artifactId) { return GROUP_ID + ":" + artifactId; } + +}
\ No newline at end of file |