diff options
author | 2018-04-13 10:29:11 -0700 | |
---|---|---|
committer | 2018-04-13 10:30:26 -0700 | |
commit | 28daf76e8f86370b9276a3e248d4c2eddf275d44 (patch) | |
tree | 439c1394fdb77b7cafd32454d12fb0812e1669e5 /src/test/java/com/google/devtools/build/lib/rules/objc | |
parent | d60bb5c4131ea7b389b8cef8faaa0983d191e583 (diff) |
Adding toolchain support for j2objc protos
Ran into an issue where it wasn't possible to add protos to blacklist for j2objc toolchain and was getting duplicate symbols for the descriptor protos.
This change should make it consistent with the other proto rules which use a toolchain. Was able to remove bespoke and uncustomizable proto blacklist for j2objc.
Closes #4064.
PiperOrigin-RevId: 192787964
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/rules/objc')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java index 2e96850a9b..d632a3c030 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java @@ -917,6 +917,88 @@ public class BazelJ2ObjcLibraryTest extends J2ObjcLibraryTest { } @Test + public void testProtoToolchainForJ2ObjcFlag() throws Exception { + useConfiguration("--proto_toolchain_for_j2objc=//tools/j2objc:alt_j2objc_proto_toolchain"); + + scratch.file("tools/j2objc/proto_plugin_binary"); + scratch.file("tools/j2objc/alt_proto_runtime.h"); + scratch.file("tools/j2objc/alt_proto_runtime.m"); + scratch.file("tools/j2objc/some_blacklisted_proto.proto"); + + scratch.overwriteFile( + "tools/j2objc/BUILD", + "package(default_visibility=['//visibility:public'])", + "exports_files(['j2objc_deploy.jar'])", + "filegroup(", + " name = 'j2objc_wrapper',", + " srcs = ['j2objc_wrapper.py'],", + ")", + "filegroup(", + " name = 'blacklisted_protos',", + " srcs = ['some_blacklisted_proto.proto'],", + ")", + "filegroup(", + " name = 'j2objc_header_map',", + " srcs = ['j2objc_header_map.py'],", + ")", + "proto_lang_toolchain(", + " name = 'alt_j2objc_proto_toolchain',", + " command_line = '--PLUGIN_j2objc_out=file_dir_mapping,generate_class_mappings:$(OUT)',", + " plugin = ':alt_proto_plugin',", + " runtime = ':alt_proto_runtime',", + " blacklisted_protos = [':blacklisted_protos'],", + ")", + j2ObjcCompatibleProtoLibrary( + " name = 'blacklisted_proto_library',", + " srcs = ['some_blacklisted_proto.proto'],"), + "objc_library(", + " name = 'alt_proto_runtime',", + " hdrs = ['alt_proto_runtime.h'],", + " srcs = ['alt_proto_runtime.m'],", + ")", + "filegroup(", + " name = 'alt_proto_plugin',", + " srcs = ['proto_plugin_binary']", + ")"); + + scratch.file("java/com/google/dummy/test/proto/test.java"); + scratch.file("java/com/google/dummy/test/proto/test.proto"); + scratch.file( + "java/com/google/dummy/test/proto/BUILD", + "package(default_visibility=['//visibility:public'])", + j2ObjcCompatibleProtoLibrary( + " name = 'test_proto',", + " srcs = ['test.proto'],", + " deps = ['//tools/j2objc:blacklisted_proto_library'],"), + "", + "java_library(", + " name = 'test',", + " srcs = ['test.java'],", + " deps = [':test_proto'])", + "", + "j2objc_library(", + " name = 'transpile',", + " deps = ['test'])"); + + ConfiguredTarget j2objcLibraryTarget = + getConfiguredTarget("//java/com/google/dummy/test/proto:transpile"); + ObjcProvider provider = j2objcLibraryTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR); + assertThat(Artifact.toRootRelativePaths(provider.get(ObjcProvider.LIBRARY))) + .containsExactly( + TestConstants.TOOLS_REPOSITORY_PATH_PREFIX + + "third_party/java/j2objc/libjre_core_lib.a", + "tools/j2objc/libalt_proto_runtime.a", + "java/com/google/dummy/test/proto/libtest_j2objc.a", + "java/com/google/dummy/test/proto/libtest_proto_j2objc.a"); + assertThat(Artifact.toRootRelativePaths(provider.get(ObjcProvider.HEADER))) + .containsExactly( + TestConstants.TOOLS_REPOSITORY_PATH_PREFIX + "third_party/java/j2objc/jre_core.h", + "tools/j2objc/alt_proto_runtime.h", + "java/com/google/dummy/test/proto/test.j2objc.pb.h", + "java/com/google/dummy/test/proto/_j2objc/test/java/com/google/dummy/test/proto/test.h"); + } + + @Test public void testJ2ObjcDeadCodeRemovalActionWithOptFlag() throws Exception { useConfiguration("--j2objc_dead_code_removal"); addSimpleJ2ObjcLibraryWithEntryClasses(); |