diff options
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java index 25c53ac660..2859878b69 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java @@ -20,10 +20,12 @@ import static com.google.devtools.build.lib.rules.objc.BundleableFile.BUNDLE_PAT import static org.junit.Assert.fail; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Iterables; import com.google.common.collect.ObjectArrays; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.util.ActionsTestUtil; import com.google.devtools.build.lib.analysis.ConfiguredTarget; +import com.google.devtools.build.lib.packages.SkylarkInfo; import com.google.devtools.build.lib.rules.apple.AppleToolchain; import com.google.devtools.build.lib.rules.apple.DottedVersion; import com.google.devtools.build.lib.rules.objc.ObjcCommandLineOptions.ObjcCrosstoolMode; @@ -1257,6 +1259,55 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase { assertThat(skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR)).isNotNull(); } + @Test + public void testMultiArchSplitTransition() throws Exception { + scratch.file("examples/rule/BUILD"); + scratch.file( + "examples/rule/apple_rules.bzl", + "def my_rule_impl(ctx):", + " return_kwargs = {}", + " for cpu_value in ctx.split_attr.deps:", + " for child_target in ctx.split_attr.deps[cpu_value]:", + " return_kwargs[cpu_value] = struct(objc=child_target.objc)", + " return struct(**return_kwargs)", + "my_rule = rule(implementation = my_rule_impl,", + " attrs = {", + " 'deps': attr.label_list(cfg=apple_common.multi_arch_split, providers=[['objc']]),", + " 'platform_type': attr.string(mandatory=True),", + " 'minimum_os_version': attr.string(mandatory=True)},", + " fragments = ['apple'],", + ")"); + scratch.file("examples/apple_skylark/a.cc"); + scratch.file( + "examples/apple_skylark/BUILD", + "package(default_visibility = ['//visibility:public'])", + "load('/examples/rule/apple_rules', 'my_rule')", + "my_rule(", + " name = 'my_target',", + " deps = [':lib'],", + " platform_type = 'ios',", + " minimum_os_version='2.2'", + ")", + "objc_library(", + " name = 'lib',", + " srcs = ['a.m'],", + " hdrs = ['a.h']", + ")"); + + useConfiguration("--ios_multi_cpus=armv7,arm64"); + ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target"); + ObjcProvider armv7Objc = ((SkylarkInfo) skylarkTarget.get("ios_armv7")) + .getValue("objc", ObjcProvider.class); + ObjcProvider arm64Objc = ((SkylarkInfo) skylarkTarget.get("ios_arm64")) + .getValue("objc", ObjcProvider.class); + assertThat(armv7Objc).isNotNull(); + assertThat(arm64Objc).isNotNull(); + assertThat(Iterables.getOnlyElement(armv7Objc.getObjcLibraries()).getExecPathString()) + .contains("ios_armv7"); + assertThat(Iterables.getOnlyElement(arm64Objc.getObjcLibraries()).getExecPathString()) + .contains("ios_arm64"); + } + private void checkSkylarkRunMemleaksWithExpectedValue(boolean expectedValue) throws Exception { scratch.file("examples/rule/BUILD"); scratch.file( |