diff options
author | dbabkin <dbabkin@google.com> | 2018-01-16 02:30:04 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-01-16 02:31:23 -0800 |
commit | 5bd53cb609480ca896ca2d011f415b424c63ce63 (patch) | |
tree | a498f1ad057795c230adb6a7e538273dd8e648ec /src/test/java/com | |
parent | 68371172ae9012a1b368d05c4a0d6483812fcd42 (diff) |
Create function createJavaInfo with new API. Implement JavaSourceJarsProvider.
Added tests for checking JavaSourceJarsProvider state.
All other providers will be implemented in next CLs.
previous CL with JavaCompilationArgsProvider implementation is https://github.com/bazelbuild/bazel/commit/32dff21d00ad7d1bdf50e8761d675a6e7e002de9
RELNOTES:none
PiperOrigin-RevId: 182028182
Diffstat (limited to 'src/test/java/com')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java | 220 |
1 files changed, 212 insertions, 8 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 646f8f42cd..68b36082e9 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 @@ -1515,15 +1515,8 @@ public class JavaSkylarkApiTest extends BuildViewTestCase { ")"); assertNoEvents(); - ConfiguredTarget myRuleTarget = getConfiguredTarget("//foo:my_skylark_rule"); - Info info = - myRuleTarget.get(new SkylarkKey(Label.parseAbsolute("//foo:extension.bzl"), "result")); - - @SuppressWarnings("unchecked") - JavaInfo javaInfo = (JavaInfo) info.getValue("property"); - JavaCompilationArgsProvider javaCompilationArgsProvider = - javaInfo.getProvider(JavaCompilationArgsProvider.class); + fetchJavaInfo().getProvider(JavaCompilationArgsProvider.class); assertThat( @@ -1809,6 +1802,217 @@ public class JavaSkylarkApiTest extends BuildViewTestCase { .containsExactly("foo/my_skylark_rule_lib.jar", "foo/libmy_java_lib_direct-hjar.jar"); } + @Test + public void testJavaInfoJavaSourceJarsProviderWithSourceJars() throws Exception { + scratch.file( + "foo/extension.bzl", + "result = provider()", + "def _impl(ctx):", + " javaInfo = JavaInfo(", + " output_jar = ctx.file.output_jar,", + " use_ijar = False,", + " source_jars = ctx.files.source_jars", + " )", + " return [result(property = javaInfo)]", + "my_rule = rule(", + " implementation = _impl,", + " attrs = {", + " 'dep' : attr.label_list(), ", + " 'output_jar' : attr.label(allow_single_file=True), ", + " 'source_jars' : attr.label_list(allow_files=['.jar']),", + " }", + ")"); + + scratch.file( + "foo/BUILD", + "load(':extension.bzl', 'my_rule')", + "java_library(name = 'my_java_lib_direct', srcs = ['java/A.java'])", + "my_rule(name = 'my_skylark_rule',", + " output_jar = 'my_skylark_rule_lib.jar',", + " dep = [':my_java_lib_direct'],", + " source_jars = ['my_skylark_rule_src.jar']", + ")"); + assertNoEvents(); + + JavaSourceJarsProvider sourceJarsProvider = + fetchJavaInfo().getProvider(JavaSourceJarsProvider.class); + + assertThat(prettyJarNames(sourceJarsProvider.getSourceJars())) + .containsExactly("foo/my_skylark_rule_src.jar"); + + assertThat(prettyJarNames(sourceJarsProvider.getTransitiveSourceJars())) + .containsExactly("foo/my_skylark_rule_src.jar"); + } + + @Test + public void testJavaInfoJavaSourceJarsProviderWithDeps() throws Exception { + scratch.file( + "foo/extension.bzl", + "result = provider()", + "def _impl(ctx):", + " dp = [dep[java_common.provider] for dep in ctx.attr.dep]", + " javaInfo = JavaInfo(", + " output_jar = ctx.file.output_jar,", + " use_ijar = False,", + " deps = dp", + " )", + " return [result(property = javaInfo)]", + "my_rule = rule(", + " implementation = _impl,", + " attrs = {", + " 'dep' : attr.label_list(), ", + " 'output_jar' : attr.label(allow_single_file=True), ", + " }", + ")"); + + scratch.file( + "foo/BUILD", + "load(':extension.bzl', 'my_rule')", + "java_library(name = 'my_java_lib_direct', srcs = ['java/A.java'])", + "my_rule(name = 'my_skylark_rule',", + " output_jar = 'my_skylark_rule_lib.jar',", + " dep = [':my_java_lib_direct']", + ")"); + assertNoEvents(); + + JavaSourceJarsProvider sourceJarsProvider = + fetchJavaInfo().getProvider(JavaSourceJarsProvider.class); + + assertThat(prettyJarNames(sourceJarsProvider.getSourceJars())).isEmpty(); + + assertThat(prettyJarNames(sourceJarsProvider.getTransitiveSourceJars())) + .containsExactly("foo/libmy_java_lib_direct-src.jar"); + } + + @Test + public void testJavaInfoJavaSourceJarsProviderAndRuntimeDeps() throws Exception { + scratch.file( + "foo/extension.bzl", + "result = provider()", + "def _impl(ctx):", + " dp = [dep[java_common.provider] for dep in ctx.attr.dep]", + " javaInfo = JavaInfo(", + " output_jar = ctx.file.output_jar,", + " use_ijar = False,", + " runtime_deps = dp", + " )", + " return [result(property = javaInfo)]", + "my_rule = rule(", + " implementation = _impl,", + " attrs = {", + " 'dep' : attr.label_list(), ", + " 'output_jar' : attr.label(allow_single_file=True), ", + " }", + ")"); + + scratch.file( + "foo/BUILD", + "load(':extension.bzl', 'my_rule')", + "java_library(name = 'my_java_lib_direct', srcs = ['java/A.java'])", + "my_rule(name = 'my_skylark_rule',", + " output_jar = 'my_skylark_rule_lib.jar',", + " dep = [':my_java_lib_direct']", + ")"); + assertNoEvents(); + + JavaSourceJarsProvider sourceJarsProvider = + fetchJavaInfo().getProvider(JavaSourceJarsProvider.class); + + assertThat(prettyJarNames(sourceJarsProvider.getSourceJars())).isEmpty(); + + assertThat(prettyJarNames(sourceJarsProvider.getTransitiveSourceJars())) + .containsExactly("foo/libmy_java_lib_direct-src.jar"); + } + + @Test + public void testCreateJavaInfoWithJavaSourceJarsProviderAndTransitiveDeps() throws Exception { + scratch.file( + "foo/extension.bzl", + "result = provider()", + "def _impl(ctx):", + " dp = [dep[java_common.provider] for dep in ctx.attr.dep]", + " javaInfo = JavaInfo(", + " output_jar = ctx.file.output_jar,", + " use_ijar = False,", + " deps = dp", + " )", + " return [result(property = javaInfo)]", + "my_rule = rule(", + " implementation = _impl,", + " attrs = {", + " 'dep' : attr.label_list(), ", + " 'output_jar' : attr.label(allow_single_file=True), ", + " }", + ")"); + + scratch.file( + "foo/BUILD", + "load(':extension.bzl', 'my_rule')", + "java_library(name = 'my_java_lib_transitive', srcs = ['java/B.java'])", + "java_library(name = 'my_java_lib_direct',", + " srcs = ['java/A.java'],", + " deps = [':my_java_lib_transitive'])", + "my_rule(name = 'my_skylark_rule',", + " output_jar = 'my_skylark_rule_lib.jar',", + " dep = [':my_java_lib_direct']", + ")"); + assertNoEvents(); + + JavaSourceJarsProvider sourceJarsProvider = + fetchJavaInfo().getProvider(JavaSourceJarsProvider.class); + + assertThat(prettyJarNames(sourceJarsProvider.getSourceJars())).isEmpty(); + + assertThat(prettyJarNames(sourceJarsProvider.getTransitiveSourceJars())) + .containsExactly( + "foo/libmy_java_lib_direct-src.jar", "foo/libmy_java_lib_transitive-src.jar"); + } + + @Test + public void testCreateJavaInfoWithJavaSourceJarsProviderAndTransitiveRuntimeDeps() + throws Exception { + scratch.file( + "foo/extension.bzl", + "result = provider()", + "def _impl(ctx):", + " dp = [dep[java_common.provider] for dep in ctx.attr.dep]", + " javaInfo = JavaInfo(", + " output_jar = ctx.file.output_jar,", + " use_ijar = False,", + " runtime_deps = dp", + " )", + " return [result(property = javaInfo)]", + "my_rule = rule(", + " implementation = _impl,", + " attrs = {", + " 'dep' : attr.label_list(), ", + " 'output_jar' : attr.label(allow_single_file=True), ", + " }", + ")"); + + scratch.file( + "foo/BUILD", + "load(':extension.bzl', 'my_rule')", + "java_library(name = 'my_java_lib_transitive', srcs = ['java/B.java'])", + "java_library(name = 'my_java_lib_direct',", + " srcs = ['java/A.java'],", + " deps = [':my_java_lib_transitive'])", + "my_rule(name = 'my_skylark_rule',", + " output_jar = 'my_skylark_rule_lib.jar',", + " dep = [':my_java_lib_direct']", + ")"); + assertNoEvents(); + + JavaSourceJarsProvider sourceJarsProvider = + fetchJavaInfo().getProvider(JavaSourceJarsProvider.class); + + assertThat(prettyJarNames(sourceJarsProvider.getSourceJars())).isEmpty(); + + assertThat(prettyJarNames(sourceJarsProvider.getTransitiveSourceJars())) + .containsExactly( + "foo/libmy_java_lib_direct-src.jar", "foo/libmy_java_lib_transitive-src.jar"); + } + private JavaInfo fetchJavaInfo() throws LabelSyntaxException { ConfiguredTarget myRuleTarget = getConfiguredTarget("//foo:my_skylark_rule"); Info info = |