diff options
author | 2018-03-28 08:51:32 -0700 | |
---|---|---|
committer | 2018-03-28 08:53:10 -0700 | |
commit | f6d2881825f8b42331263abfa47da9ebe5f951ba (patch) | |
tree | e0d6ee28af39489e3a865ced2a7dc1f7dd60ca13 /src/test | |
parent | 3a61eb654b2ee4da0a1a749ec48adbc06aa42aee (diff) |
Make deprecated ObjcProvider fields return empty sets when --incompatible_disable_objc_provider_resources is true.
This involves propagating SkylarkSemantics to all ObjcProvider constructors.
RELNOTES: Introduce --incompatible_disable_objc_provider_resources to turn off all resource-related fields of the Objc provider.
PiperOrigin-RevId: 190778491
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java | 39 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/rules/objc/ObjcSkylarkTest.java | 86 |
2 files changed, 103 insertions, 22 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java index 0996bb4318..5c1f6b7ba5 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcProviderTest.java @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertWithMessage; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.rules.objc.ObjcProvider.Key; +import com.google.devtools.build.lib.syntax.SkylarkSemantics; import com.google.devtools.build.lib.vfs.PathFragment; import java.lang.reflect.Field; import java.lang.reflect.Modifier; @@ -33,15 +34,19 @@ import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class ObjcProviderTest { + private static ObjcProvider.Builder objcProviderBuilder() { + return new ObjcProvider.Builder(SkylarkSemantics.DEFAULT_SEMANTICS); + } + @Test public void emptyProvider() { - ObjcProvider empty = new ObjcProvider.Builder().build(); + ObjcProvider empty = objcProviderBuilder().build(); assertThat(empty.get(ObjcProvider.SDK_DYLIB)).isEmpty(); } @Test public void onlyPropagatesProvider() { - ObjcProvider onlyPropagates = new ObjcProvider.Builder() + ObjcProvider onlyPropagates = objcProviderBuilder() .add(ObjcProvider.SDK_DYLIB, "foo") .build(); assertThat(onlyPropagates.get(ObjcProvider.SDK_DYLIB)).containsExactly("foo"); @@ -49,10 +54,10 @@ public class ObjcProviderTest { @Test public void onlyNonPropagatesProvider() { - ObjcProvider dep = new ObjcProvider.Builder() + ObjcProvider dep = objcProviderBuilder() .add(ObjcProvider.SDK_DYLIB, "foo") .build(); - ObjcProvider notPropagates = new ObjcProvider.Builder() + ObjcProvider notPropagates = objcProviderBuilder() .addTransitiveWithoutPropagating(ImmutableList.of(dep)) .build(); assertThat(notPropagates.get(ObjcProvider.SDK_DYLIB)).containsExactly("foo"); @@ -60,10 +65,10 @@ public class ObjcProviderTest { @Test public void propagatesAndNonPropagatesProvider() { - ObjcProvider dep = new ObjcProvider.Builder() + ObjcProvider dep = objcProviderBuilder() .add(ObjcProvider.SDK_DYLIB, "foo") .build(); - ObjcProvider provider = new ObjcProvider.Builder() + ObjcProvider provider = objcProviderBuilder() .addTransitiveWithoutPropagating(ImmutableList.of(dep)) .add(ObjcProvider.SDK_DYLIB, "bar") .build(); @@ -72,14 +77,14 @@ public class ObjcProviderTest { @Test public void doesNotPropagate() { - ObjcProvider dep = new ObjcProvider.Builder() + ObjcProvider dep = objcProviderBuilder() .add(ObjcProvider.SDK_DYLIB, "foo") .build(); - ObjcProvider provider = new ObjcProvider.Builder() + ObjcProvider provider = objcProviderBuilder() .addTransitiveWithoutPropagating(ImmutableList.of(dep)) .add(ObjcProvider.SDK_DYLIB, "bar") .build(); - ObjcProvider depender = new ObjcProvider.Builder() + ObjcProvider depender = objcProviderBuilder() .addTransitiveAndPropagate(provider) .build(); assertThat(depender.get(ObjcProvider.SDK_DYLIB)).containsExactly("bar"); @@ -91,17 +96,17 @@ public class ObjcProviderTest { PathFragment propagatedInclude = PathFragment.create("propagated_path"); ObjcProvider strictDep = - new ObjcProvider.Builder() + objcProviderBuilder() .addForDirectDependents(ObjcProvider.INCLUDE, strictInclude) .build(); ObjcProvider propagatedDep = - new ObjcProvider.Builder().add(ObjcProvider.INCLUDE, propagatedInclude).build(); + objcProviderBuilder().add(ObjcProvider.INCLUDE, propagatedInclude).build(); ObjcProvider provider = - new ObjcProvider.Builder() + objcProviderBuilder() .addTransitiveAndPropagate(ImmutableList.of(strictDep, propagatedDep)) .build(); - ObjcProvider depender = new ObjcProvider.Builder().addTransitiveAndPropagate(provider).build(); + ObjcProvider depender = objcProviderBuilder().addTransitiveAndPropagate(provider).build(); assertThat(provider.get(ObjcProvider.INCLUDE)) .containsExactly(strictInclude, propagatedInclude); @@ -114,17 +119,17 @@ public class ObjcProviderTest { PathFragment propagatedInclude = PathFragment.create("propagated_path"); ObjcProvider strictDep = - new ObjcProvider.Builder() + objcProviderBuilder() .addForDirectDependents(ObjcProvider.INCLUDE, strictInclude) .build(); ObjcProvider propagatedDep = - new ObjcProvider.Builder().add(ObjcProvider.INCLUDE, propagatedInclude).build(); + objcProviderBuilder().add(ObjcProvider.INCLUDE, propagatedInclude).build(); ObjcProvider provider = - new ObjcProvider.Builder() + objcProviderBuilder() .addTransitiveAndPropagate(ImmutableList.of(strictDep, propagatedDep)) .build(); - ObjcProvider depender = new ObjcProvider.Builder().addTransitiveAndPropagate(provider).build(); + ObjcProvider depender = objcProviderBuilder().addTransitiveAndPropagate(provider).build(); assertThat(provider.include().toCollection()) .containsExactly(strictInclude.toString(), propagatedInclude.toString()); 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 20a32ce795..7a63720693 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 @@ -30,6 +30,7 @@ import com.google.devtools.build.lib.rules.apple.AppleToolchain; import com.google.devtools.build.lib.rules.apple.DottedVersion; import com.google.devtools.build.lib.syntax.SkylarkDict; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; +import com.google.devtools.build.lib.syntax.SkylarkSemantics; import com.google.devtools.build.lib.vfs.PathFragment; import java.util.List; import org.junit.Test; @@ -41,6 +42,10 @@ import org.junit.runners.JUnit4; */ @RunWith(JUnit4.class) public class ObjcSkylarkTest extends ObjcRuleTestCase { + private static ObjcProvider.Builder objcProviderBuilder() { + return new ObjcProvider.Builder(SkylarkSemantics.DEFAULT_SEMANTICS); + } + @Test public void testSkylarkRuleCanDependOnNativeAppleRule() throws Exception { scratch.file("examples/rule/BUILD"); @@ -855,9 +860,9 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase { ObjcProvider skylarkProvider = skylarkTarget.get(ObjcProvider.SKYLARK_CONSTRUCTOR); ObjcProvider skylarkProviderDirectDepender = - new ObjcProvider.Builder().addTransitiveAndPropagate(skylarkProvider).build(); - ObjcProvider skylarkProviderIndirectDepender = - new ObjcProvider.Builder().addTransitiveAndPropagate(skylarkProviderDirectDepender).build(); + objcProviderBuilder().addTransitiveAndPropagate(skylarkProvider).build(); + ObjcProvider skylarkProviderIndirectDepender = + objcProviderBuilder().addTransitiveAndPropagate(skylarkProviderDirectDepender).build(); assertThat(skylarkProvider.get(ObjcProvider.INCLUDE)) .containsExactly(PathFragment.create("path1"), PathFragment.create("path2")); @@ -1347,7 +1352,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase { } @Test - public void testDisableObjcProviderResources() throws Exception { + public void testDisableObjcProviderResourcesWrite() throws Exception { scratch.file("examples/rule/BUILD"); scratch.file( "examples/rule/apple_rules.bzl", @@ -1378,7 +1383,7 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase { } @Test - public void testEnabledObjcProviderResources() throws Exception { + public void testEnabledObjcProviderResourcesWrite() throws Exception { scratch.file("examples/rule/BUILD"); scratch.file( "examples/rule/apple_rules.bzl", @@ -1406,6 +1411,77 @@ public class ObjcSkylarkTest extends ObjcRuleTestCase { assertThat(objcProvider.get(ObjcProvider.XIB)).isNotNull(); } + @Test + public void testDisableObjcProviderResourcesRead() throws Exception { + scratch.file("examples/rule/BUILD"); + scratch.file( + "examples/rule/apple_rules.bzl", + "def my_rule_impl(ctx):", + " dep = ctx.attr.deps[0]", + " objc_provider = dep[apple_common.Objc]", + " return struct(strings=str(objc_provider.strings))", + "my_rule = rule(implementation = my_rule_impl,", + " attrs = {", + " 'deps': attr.label_list(providers = ['objc'])})"); + + scratch.file("examples/apple_skylark/foo.strings"); + scratch.file("examples/apple_skylark/bar.a"); + scratch.file( + "examples/apple_skylark/BUILD", + "package(default_visibility = ['//visibility:public'])", + "load('//examples/rule:apple_rules.bzl', 'my_rule')", + "my_rule(", + " name='my_target',", + " deps=[':bundle_lib'],", + ")", + "objc_import(", + " name='bundle_lib',", + " archives = ['bar.a'],", + " strings=['foo.strings'],", + ")"); + + setSkylarkSemanticsOptions("--incompatible_disable_objc_provider_resources=true"); + ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target"); + + assertThat(skylarkTarget.get("strings")).isEqualTo("depset([])"); + } + + @Test + public void testEnabledObjcProviderResourcesRead() throws Exception { + scratch.file("examples/rule/BUILD"); + scratch.file( + "examples/rule/apple_rules.bzl", + "def my_rule_impl(ctx):", + " dep = ctx.attr.deps[0]", + " objc_provider = dep[apple_common.Objc]", + " return struct(strings=str(objc_provider.strings))", + "my_rule = rule(implementation = my_rule_impl,", + " attrs = {", + " 'deps': attr.label_list(providers = ['objc'])})"); + + scratch.file("examples/apple_skylark/foo.strings"); + scratch.file("examples/apple_skylark/bar.a"); + scratch.file( + "examples/apple_skylark/BUILD", + "package(default_visibility = ['//visibility:public'])", + "load('//examples/rule:apple_rules.bzl', 'my_rule')", + "my_rule(", + " name='my_target',", + " deps=[':bundle_lib'],", + ")", + "objc_import(", + " name='bundle_lib',", + " archives = ['bar.a'],", + " strings=['foo.strings'],", + ")"); + + setSkylarkSemanticsOptions("--incompatible_disable_objc_provider_resources=false"); + ConfiguredTarget skylarkTarget = getConfiguredTarget("//examples/apple_skylark:my_target"); + + assertThat(skylarkTarget.get("strings")) + .isEqualTo("depset([<source file examples/apple_skylark/foo.strings>])"); + } + private void checkSkylarkRunMemleaksWithExpectedValue(boolean expectedValue) throws Exception { scratch.file("examples/rule/BUILD"); scratch.file( |