aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/skylark
diff options
context:
space:
mode:
authorGravatar John Cater <jcater@google.com>2018-06-14 02:24:57 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-14 02:26:18 -0700
commitd79e977c87ea46855c219cb7dcbde0e3fde4bcf9 (patch)
tree7b967abf32849eeb1a774f0bbbaf467907060c0a /src/test/java/com/google/devtools/build/lib/skylark
parent3a5780d020517342137ef48ca3fbad1df69e9f33 (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.java46
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):",