summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleContainerPluginMojo.java1
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AssembleTestBundleMojo.java6
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateBundleClassPathMappingsMojo.java1
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java1
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateTestBundleOsgiManifestMojo.java4
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/util/Artifacts.java (renamed from bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/Artifacts.java)20
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/util/TestBundleDependencyScopeTranslator.java (renamed from bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslator.java)23
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/util/TestBundleUtils.java (renamed from bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/TestBundleUtils.java)10
-rw-r--r--bundle-plugin/src/test/java/com/yahoo/container/plugin/mojo/TestBundleDependencyScopeTranslatorTest.java101
-rw-r--r--bundle-plugin/src/test/java/com/yahoo/container/plugin/util/TestBundleDependencyScopeTranslatorTest.java134
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