diff options
author | John Cater <jcater@google.com> | 2018-06-14 02:24:57 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-06-14 02:26:18 -0700 |
commit | d79e977c87ea46855c219cb7dcbde0e3fde4bcf9 (patch) | |
tree | 7b967abf32849eeb1a774f0bbbaf467907060c0a /src/test/java/com/google/devtools/build/lib/skylark | |
parent | 3a5780d020517342137ef48ca3fbad1df69e9f33 (diff) |
Allow Skylark rules to specify whether targets can add execution platform constraints.
Closes #5341.
Change-Id: Ib74e59fec48102469a5039e045e3f3d0e0d86d8c
PiperOrigin-RevId: 200526448
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/skylark')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java index e1029ecf0a..dc1a170f40 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java @@ -39,6 +39,7 @@ import com.google.devtools.build.lib.packages.PredicateWithMessage; import com.google.devtools.build.lib.packages.RequiredProviders; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType; +import com.google.devtools.build.lib.packages.RuleClass.ExecutionPlatformConstraintsAllowed; import com.google.devtools.build.lib.packages.SkylarkAspectClass; import com.google.devtools.build.lib.packages.SkylarkDefinedAspect; import com.google.devtools.build.lib.packages.SkylarkInfo; @@ -1625,6 +1626,51 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase { } @Test + public void testRuleAddExecutionConstraints() throws Exception { + registerDummyUserDefinedFunction(); + scratch.file("test/BUILD", "toolchain_type(name = 'my_toolchain_type')"); + evalAndExport( + "r1 = rule(", + " implementation = impl,", + " toolchains=['//test:my_toolchain_type'],", + " exec_compatible_with=['//constraint:cv1', '//constraint:cv2'],", + ")"); + RuleClass c = ((SkylarkRuleFunction) lookup("r1")).getRuleClass(); + assertThat(c.getExecutionPlatformConstraints()) + .containsExactly(makeLabel("//constraint:cv1"), makeLabel("//constraint:cv2")); + } + + @Test + public void testTargetsCanAddExecutionPlatformConstraints() throws Exception { + registerDummyUserDefinedFunction(); + scratch.file("test/BUILD", "toolchain_type(name = 'my_toolchain_type')"); + evalAndExport( + "r1 = rule(impl, ", + " toolchains=['//test:my_toolchain_type'],", + " execution_platform_constraints_allowed=True,", + ")"); + RuleClass c = ((SkylarkRuleFunction) lookup("r1")).getRuleClass(); + assertThat(c.executionPlatformConstraintsAllowed()) + .isEqualTo(ExecutionPlatformConstraintsAllowed.PER_TARGET); + } + + @Test + public void testTargetsCanAddExecutionPlatformConstraints_attrAlreadyDefined() throws Exception { + registerDummyUserDefinedFunction(); + scratch.file("test/BUILD", "toolchain_type(name = 'my_toolchain_type')"); + ev.setFailFast(false); + evalAndExport( + "r1 = rule(impl, ", + " attrs = {", + " 'exec_compatible_with': attr.label_list(),", + " },", + " toolchains=['//test:my_toolchain_type'],", + " execution_platform_constraints_allowed=True,", + ")"); + ev.assertContainsError("Rule should not already define the attribute \"exec_compatible_with\""); + } + + @Test public void testRuleFunctionReturnsNone() throws Exception { scratch.file("test/rule.bzl", "def _impl(ctx):", |