aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java
diff options
context:
space:
mode:
authorGravatar dbabkin <dbabkin@google.com>2018-03-06 08:28:26 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-06 08:30:40 -0800
commitbb64d2f299e39788f7d1e80fb1e3c92536e498a2 (patch)
tree693f720372f98b0fbb9ccdb12345303ccf15fa9a /src/test/java
parent27b8cc3f4a06e781a92cf2087476af5d51c06b1b (diff)
Implement support for sourceFiles parameter in JavaInfo constructor.
RELNOTES:none PiperOrigin-RevId: 188026038
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java139
1 files changed, 120 insertions, 19 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java
index c0e9ade55e..cee3396af3 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Info;
import com.google.devtools.build.lib.packages.SkylarkProvider.SkylarkKey;
import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar;
+import com.google.devtools.build.lib.testutil.TestConstants;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -32,6 +33,9 @@ import org.junit.runners.JUnit4;
@RunWith(JUnit4.class)
public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
+ private static final String HOST_JAVA_RUNTIME_LABEL =
+ TestConstants.TOOLS_REPOSITORY + "//tools/jdk:current_host_java_runtime";
+
@Test
public void buildHelperCreateJavaInfoWithOutputJarOnly() throws Exception {
ruleBuilder().build();
@@ -40,7 +44,8 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
"load(':extension.bzl', 'my_rule')",
"my_rule(",
" name = 'my_skylark_rule',",
- " output_jar = 'my_skylark_rule_lib.jar'",
+ " output_jar = 'my_skylark_rule_lib.jar',",
+ " source_jars = ['my_skylark_rule_src.jar']",
")");
assertNoEvents();
@@ -88,7 +93,8 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
"load(':extension.bzl', 'my_rule')",
"my_rule(",
" name = 'my_skylark_rule',",
- " output_jar = 'my_skylark_rule_lib.jar'",
+ " output_jar = 'my_skylark_rule_lib.jar',",
+ " source_jars = ['my_skylark_rule_src.jar']",
")");
assertNoEvents();
@@ -167,6 +173,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
"java_library(name = 'my_java_lib_direct', srcs = ['java/A.java'])",
"my_rule(name = 'my_skylark_rule',",
" output_jar = 'my_skylark_rule_lib.jar',",
+ " source_jars = ['my_skylark_rule_src.jar'],",
" dep = [':my_java_lib_direct']",
")");
assertNoEvents();
@@ -212,6 +219,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
"java_library(name = 'my_java_lib_direct', srcs = ['java/A.java'])",
"my_rule(name = 'my_skylark_rule',",
" output_jar = 'my_skylark_rule_lib.jar',",
+ " source_jars = ['my_skylark_rule_src.jar'],",
" dep_runtime = [':my_java_lib_direct']",
")");
assertNoEvents();
@@ -260,6 +268,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
"java_library(name = 'my_java_lib_direct', srcs = ['java/A.java'])",
"my_rule(name = 'my_skylark_rule',",
" output_jar = 'my_skylark_rule_lib.jar',",
+ " source_jars = ['my_skylark_rule_src.jar'],",
" dep = [':my_java_lib_direct']",
")");
assertNoEvents();
@@ -319,6 +328,67 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
}
@Test
+ public void buildHelperCreateJavaInfoWithSourcesFiles() throws Exception {
+ ruleBuilder().withSourceFiles().build();
+
+ scratch.file(
+ "foo/BUILD",
+ "load(':extension.bzl', 'my_rule')",
+ "my_rule(",
+ " name = 'my_skylark_rule',",
+ " output_jar = 'my_skylark_rule_lib.jar',",
+ " sources = ['ClassA.java', 'ClassB.java', 'ClassC.java', 'ClassD.java'],",
+ ")");
+ assertNoEvents();
+
+ JavaRuleOutputJarsProvider javaRuleOutputJarsProvider =
+ fetchJavaInfo().getProvider(JavaRuleOutputJarsProvider.class);
+
+ assertThat(prettyArtifactNames(javaRuleOutputJarsProvider.getAllSrcOutputJars()))
+ .containsExactly("foo/my_skylark_rule_lib-src.jar");
+
+ JavaSourceJarsProvider sourceJarsProvider =
+ fetchJavaInfo().getProvider(JavaSourceJarsProvider.class);
+
+ assertThat(prettyArtifactNames(sourceJarsProvider.getSourceJars()))
+ .containsExactly("foo/my_skylark_rule_lib-src.jar");
+
+ assertThat(prettyArtifactNames(sourceJarsProvider.getTransitiveSourceJars()))
+ .containsExactly("foo/my_skylark_rule_lib-src.jar");
+ }
+
+ @Test
+ public void buildHelperCreateJavaInfoWithSourcesFilesAndSourcesJars() throws Exception {
+ ruleBuilder().withSourceFiles().build();
+
+ scratch.file(
+ "foo/BUILD",
+ "load(':extension.bzl', 'my_rule')",
+ "my_rule(",
+ " name = 'my_skylark_rule',",
+ " output_jar = 'my_skylark_rule_lib.jar',",
+ " sources = ['ClassA.java', 'ClassB.java', 'ClassC.java', 'ClassD.java'],",
+ " source_jars = ['my_skylark_rule_src-A.jar']",
+ ")");
+ assertNoEvents();
+
+ JavaRuleOutputJarsProvider javaRuleOutputJarsProvider =
+ fetchJavaInfo().getProvider(JavaRuleOutputJarsProvider.class);
+
+ assertThat(prettyArtifactNames(javaRuleOutputJarsProvider.getAllSrcOutputJars()))
+ .containsExactly("foo/my_skylark_rule_lib-src.jar");
+
+ JavaSourceJarsProvider sourceJarsProvider =
+ fetchJavaInfo().getProvider(JavaSourceJarsProvider.class);
+
+ assertThat(prettyArtifactNames(sourceJarsProvider.getSourceJars()))
+ .containsExactly("foo/my_skylark_rule_lib-src.jar");
+
+ assertThat(prettyArtifactNames(sourceJarsProvider.getTransitiveSourceJars()))
+ .containsExactly("foo/my_skylark_rule_lib-src.jar");
+ }
+
+ @Test
public void buildHelperCreateJavaInfoSourceJarsProviderWithDeps() throws Exception {
ruleBuilder().build();
scratch.file(
@@ -327,6 +397,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
"java_library(name = 'my_java_lib_direct', srcs = ['java/A.java'])",
"my_rule(name = 'my_skylark_rule',",
" output_jar = 'my_skylark_rule_lib.jar',",
+ " source_jars = ['my_skylark_rule_src.jar'],",
" dep = [':my_java_lib_direct']",
")");
assertNoEvents();
@@ -334,10 +405,11 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
JavaSourceJarsProvider sourceJarsProvider =
fetchJavaInfo().getProvider(JavaSourceJarsProvider.class);
- assertThat(prettyArtifactNames(sourceJarsProvider.getSourceJars())).isEmpty();
+ assertThat(prettyArtifactNames(sourceJarsProvider.getSourceJars()))
+ .containsExactly("foo/my_skylark_rule_src.jar");
assertThat(prettyArtifactNames(sourceJarsProvider.getTransitiveSourceJars()))
- .containsExactly("foo/libmy_java_lib_direct-src.jar");
+ .containsExactly("foo/my_skylark_rule_src.jar", "foo/libmy_java_lib_direct-src.jar");
}
@Test
@@ -349,6 +421,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
"java_library(name = 'my_java_lib_direct', srcs = ['java/A.java'])",
"my_rule(name = 'my_skylark_rule',",
" output_jar = 'my_skylark_rule_lib.jar',",
+ " source_jars = ['my_skylark_rule_src.jar'],",
" dep_runtime = [':my_java_lib_direct']",
")");
assertNoEvents();
@@ -356,10 +429,11 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
JavaSourceJarsProvider sourceJarsProvider =
fetchJavaInfo().getProvider(JavaSourceJarsProvider.class);
- assertThat(prettyArtifactNames(sourceJarsProvider.getSourceJars())).isEmpty();
+ assertThat(prettyArtifactNames(sourceJarsProvider.getSourceJars()))
+ .containsExactly("foo/my_skylark_rule_src.jar");
assertThat(prettyArtifactNames(sourceJarsProvider.getTransitiveSourceJars()))
- .containsExactly("foo/libmy_java_lib_direct-src.jar");
+ .containsExactly("foo/my_skylark_rule_src.jar", "foo/libmy_java_lib_direct-src.jar");
}
@Test
@@ -374,6 +448,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
" deps = [':my_java_lib_transitive'])",
"my_rule(name = 'my_skylark_rule',",
" output_jar = 'my_skylark_rule_lib.jar',",
+ " source_jars = ['my_skylark_rule_src.jar'],",
" dep = [':my_java_lib_direct']",
")");
assertNoEvents();
@@ -381,11 +456,14 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
JavaSourceJarsProvider sourceJarsProvider =
fetchJavaInfo().getProvider(JavaSourceJarsProvider.class);
- assertThat(prettyArtifactNames(sourceJarsProvider.getSourceJars())).isEmpty();
+ assertThat(prettyArtifactNames(sourceJarsProvider.getSourceJars()))
+ .containsExactly("foo/my_skylark_rule_src.jar");
assertThat(prettyArtifactNames(sourceJarsProvider.getTransitiveSourceJars()))
.containsExactly(
- "foo/libmy_java_lib_direct-src.jar", "foo/libmy_java_lib_transitive-src.jar");
+ "foo/my_skylark_rule_src.jar",
+ "foo/libmy_java_lib_direct-src.jar",
+ "foo/libmy_java_lib_transitive-src.jar");
}
@Test
@@ -401,6 +479,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
" deps = [':my_java_lib_transitive'])",
"my_rule(name = 'my_skylark_rule',",
" output_jar = 'my_skylark_rule_lib.jar',",
+ " source_jars = ['my_skylark_rule_src.jar'],",
" dep = [':my_java_lib_direct']",
")");
assertNoEvents();
@@ -408,11 +487,14 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
JavaSourceJarsProvider sourceJarsProvider =
fetchJavaInfo().getProvider(JavaSourceJarsProvider.class);
- assertThat(prettyArtifactNames(sourceJarsProvider.getSourceJars())).isEmpty();
+ assertThat(prettyArtifactNames(sourceJarsProvider.getSourceJars()))
+ .containsExactly("foo/my_skylark_rule_src.jar");
assertThat(prettyArtifactNames(sourceJarsProvider.getTransitiveSourceJars()))
.containsExactly(
- "foo/libmy_java_lib_direct-src.jar", "foo/libmy_java_lib_transitive-src.jar");
+ "foo/my_skylark_rule_src.jar",
+ "foo/libmy_java_lib_direct-src.jar",
+ "foo/libmy_java_lib_transitive-src.jar");
}
/**
@@ -426,6 +508,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
"load(':extension.bzl', 'my_rule')",
"my_rule(name = 'my_skylark_rule',",
" output_jar = 'my_skylark_rule_lib.jar',",
+ " source_jars = ['my_skylark_rule_src.jar']",
")");
assertNoEvents();
@@ -434,9 +517,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
assertThat(exportsProvider.getTransitiveExports()).isEmpty();
}
- /**
- * Test exports adds dependencies to JavaCompilationArgsProvider.
- */
+ /** Test exports adds dependencies to JavaCompilationArgsProvider. */
@Test
public void buildHelperCreateJavaInfoExportProviderExportsDepsAdded() throws Exception {
ruleBuilder().build();
@@ -456,6 +537,11 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
assertThat(exportsProvider.getTransitiveExports()).isEmpty();
+ JavaSourceJarsProvider javaSourceJarsProvider =
+ javaInfo.getProvider(JavaSourceJarsProvider.class);
+
+ assertThat(javaSourceJarsProvider.getSourceJars()).isEmpty();
+
JavaCompilationArgsProvider javaCompilationArgsProvider =
javaInfo.getProvider(JavaCompilationArgsProvider.class);
@@ -670,6 +756,7 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
private class RuleBuilder{
private boolean useIJar = false;
private boolean neverLink = false;
+ private boolean sourceFiles = false;
private RuleBuilder withIJar() {
useIJar = true;
@@ -681,27 +768,35 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
return this;
}
+ private RuleBuilder withSourceFiles() {
+ sourceFiles = true;
+ return this;
+ }
+
private void build() throws Exception {
- if (useIJar) {
+ if (useIJar || sourceFiles) {
writeBuildFileForJavaToolchain();
}
String[] lines = {
"result = provider()",
"def _impl(ctx):",
+ " ctx.actions.write(ctx.outputs.output_jar, 'JavaInfo API Test', is_executable=False) ",
" dp = [dep[java_common.provider] for dep in ctx.attr.dep]",
" dp_runtime = [dep[java_common.provider] for dep in ctx.attr.dep_runtime]",
" dp_exports = [dep[java_common.provider] for dep in ctx.attr.dep_exports]",
" javaInfo = JavaInfo(",
- " output_jar = ctx.file.output_jar, ",
+ " output_jar = ctx.outputs.output_jar, ",
useIJar ? " use_ijar = True," : " use_ijar = False,",
neverLink ? " neverlink = True," : "",
" source_jars = ctx.files.source_jars,",
+ " sources = ctx.files.sources,",
" deps = dp,",
" runtime_deps = dp_runtime,",
" exports = dp_exports,",
- useIJar ? " actions = ctx.actions," : "",
- useIJar ? " java_toolchain = ctx.attr._toolchain" : "",
+ useIJar || sourceFiles ? " actions = ctx.actions," : "",
+ useIJar || sourceFiles ? " java_toolchain = ctx.attr._toolchain," : "",
+ sourceFiles ? " host_javabase = ctx.attr._host_javabase," : "",
" )",
" return [result(property = javaInfo)]",
"my_rule = rule(",
@@ -710,11 +805,17 @@ public class JavaInfoSkylarkApiTest extends BuildViewTestCase {
" 'dep' : attr.label_list(),",
" 'dep_runtime' : attr.label_list(),",
" 'dep_exports' : attr.label_list(),",
- " 'output_jar' : attr.label(allow_single_file=True),",
+ " 'output_jar' : attr.output(default=None, mandatory=True),",
" 'source_jars' : attr.label_list(allow_files=['.jar']),",
- useIJar
+ " 'sources' : attr.label_list(allow_files=['.java']),",
+ useIJar || sourceFiles
? " '_toolchain': attr.label(default = Label('//java/com/google/test:toolchain')),"
: "",
+ sourceFiles
+ ? " '_host_javabase': attr.label(default = Label('"
+ + HOST_JAVA_RUNTIME_LABEL
+ + "')),"
+ : "",
" }",
")"
};