aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2017-06-21 23:57:33 +0200
committerGravatar Philipp Wollermann <philwo@google.com>2017-06-22 12:43:31 +0200
commit21a01ff03f3dd817bd7bba52b9b3b8c81c49cde6 (patch)
tree3cc874741ff1475654935a627724d639c7a168c5 /src/test/java/com/google/devtools/build/lib
parentbf2e2d8003a2418941404741fce82f1e51b3b28b (diff)
Fix source jars no longer being exposed to Skylark from java_library.
Regression test added for java_library. Unfortunately, due to the nature of the skylark provider, similar regression tests should probably be added to every Java providing rule. In the long term, the better solution is to expose JavaProvider directly and remove JavaSkylarkApiProvider. Fixes #3238 PiperOrigin-RevId: 159748655
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib')
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java67
1 files changed, 67 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
index 34d2af525e..65463927c3 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
@@ -25,7 +25,11 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.packages.SkylarkClassObject;
import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor.SkylarkKey;
+import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
+import com.google.devtools.build.lib.syntax.SkylarkList;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.junit.Test;
@@ -37,6 +41,69 @@ import org.junit.runners.JUnit4;
*/
@RunWith(JUnit4.class)
public class JavaSkylarkApiTest extends BuildViewTestCase {
+
+ @Test
+ public void testExposesJavaSkylarkApiProvider() throws Exception {
+ scratch.file(
+ "java/test/BUILD",
+ "load(':extension.bzl', 'my_rule')",
+ "java_library(",
+ " name = 'dep',",
+ " srcs = [ 'Dep.java'],",
+ ")",
+ "my_rule(",
+ " name = 'my',",
+ " dep = ':dep',",
+ ")");
+ scratch.file(
+ "java/test/extension.bzl",
+ "result = provider()",
+ "def impl(ctx):",
+ " depj = ctx.attr.dep.java",
+ " return [result(",
+ " source_jars = depj.source_jars,",
+ " transitive_deps = depj.transitive_deps,",
+ " transitive_runtime_deps = depj.transitive_runtime_deps,",
+ " transitive_source_jars = depj.transitive_source_jars,",
+ " outputs = depj.outputs.jars,",
+ " )]",
+ "my_rule = rule(impl, attrs = { 'dep' : attr.label() })");
+
+ ConfiguredTarget configuredTarget = getConfiguredTarget("//java/test:my");
+ SkylarkClassObject skylarkClassObject =
+ configuredTarget.get(
+ new SkylarkKey(Label.parseAbsolute("//java/test:extension.bzl"), "result"));
+
+ SkylarkNestedSet sourceJars = ((SkylarkNestedSet) skylarkClassObject.getValue("source_jars"));
+ SkylarkNestedSet transitiveDeps =
+ ((SkylarkNestedSet) skylarkClassObject.getValue("transitive_deps"));
+ SkylarkNestedSet transitiveRuntimeDeps =
+ ((SkylarkNestedSet) skylarkClassObject.getValue("transitive_runtime_deps"));
+ SkylarkNestedSet transitiveSourceJars =
+ ((SkylarkNestedSet) skylarkClassObject.getValue("transitive_source_jars"));
+ SkylarkList<OutputJar> outputJars =
+ ((SkylarkList<OutputJar>) skylarkClassObject.getValue("outputs"));
+
+ assertThat(artifactFilesNames(sourceJars.toCollection(Artifact.class)))
+ .containsExactly("libdep-src.jar");
+ assertThat(artifactFilesNames(transitiveDeps.toCollection(Artifact.class)))
+ .containsExactly("libdep-hjar.jar");
+ assertThat(artifactFilesNames(transitiveRuntimeDeps.toCollection(Artifact.class)))
+ .containsExactly("libdep.jar");
+ assertThat(artifactFilesNames(transitiveSourceJars.toCollection(Artifact.class)))
+ .containsExactly("libdep-src.jar");
+ assertThat(outputJars).hasSize(1);
+ assertThat(outputJars.get(0).getClassJar().getFilename()).isEqualTo("libdep.jar");
+ }
+
+ private static Collection<String> artifactFilesNames(Collection<Artifact> artifacts) {
+ List<String> result = new ArrayList<>();
+ for (Artifact artifact : artifacts) {
+ result.add(artifact.getFilename());
+ }
+ return result;
+ }
+
@Test
public void testJavaPlugin() throws Exception {
scratch.file(