diff options
author | dbabkin <dbabkin@google.com> | 2018-03-06 08:28:26 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-03-06 08:30:40 -0800 |
commit | bb64d2f299e39788f7d1e80fb1e3c92536e498a2 (patch) | |
tree | 693f720372f98b0fbb9ccdb12345303ccf15fa9a /src/test/java/com/google/devtools/build/lib | |
parent | 27b8cc3f4a06e781a92cf2087476af5d51c06b1b (diff) |
Implement support for sourceFiles parameter in JavaInfo constructor.
RELNOTES:none
PiperOrigin-RevId: 188026038
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoSkylarkApiTest.java | 139 |
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 + + "'))," + : "", " }", ")" }; |