aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/skylark
diff options
context:
space:
mode:
authorGravatar vladmos <vladmos@google.com>2017-07-13 18:53:07 +0200
committerGravatar László Csomor <laszlocsomor@google.com>2017-07-14 10:51:53 +0200
commit8002b6205e004721f771df20d1d8c1402c03964e (patch)
treeb873d47e8df0b512ebab7a5f3b8bb1c435470c63 /src/test/java/com/google/devtools/build/lib/skylark
parente5d95fb510ae056c8650b5bb450ec5dc7c7eeb3b (diff)
Fix rules that provide both 'executable' and 'files'
PiperOrigin-RevId: 161821800
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/skylark')
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java63
1 files changed, 54 insertions, 9 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
index d539354696..49030266ac 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java
@@ -704,16 +704,16 @@ public class SkylarkRuleImplementationFunctionsTest extends SkylarkTestCase {
@Test
public void testRunfilesBadMapGenericType() throws Exception {
checkErrorContains(
- "expected type 'string' for 'symlinks' key " + "but got type 'int' instead",
+ "expected type 'string' for 'symlinks' key but got type 'int' instead",
"ruleContext.runfiles(symlinks = {123: ruleContext.files.srcs[0]})");
checkErrorContains(
- "expected type 'File' for 'symlinks' value " + "but got type 'int' instead",
+ "expected type 'File' for 'symlinks' value but got type 'int' instead",
"ruleContext.runfiles(symlinks = {'some string': 123})");
checkErrorContains(
- "expected type 'string' for 'root_symlinks' key " + "but got type 'int' instead",
+ "expected type 'string' for 'root_symlinks' key but got type 'int' instead",
"ruleContext.runfiles(root_symlinks = {123: ruleContext.files.srcs[0]})");
checkErrorContains(
- "expected type 'File' for 'root_symlinks' value " + "but got type 'int' instead",
+ "expected type 'File' for 'root_symlinks' value but got type 'int' instead",
"ruleContext.runfiles(root_symlinks = {'some string': 123})");
}
@@ -844,7 +844,7 @@ public class SkylarkRuleImplementationFunctionsTest extends SkylarkTestCase {
public void testNoSuchProviderErrorMessage() throws Exception {
checkErrorContains(
createRuleContext("//foo:bar"),
- "target (rule class of 'java_library') " + "doesn't have provider 'my_provider'.",
+ "target (rule class of 'java_library') doesn't have provider 'my_provider'.",
"ruleContext.attr.srcs[0].my_provider");
}
@@ -1345,7 +1345,7 @@ public class SkylarkRuleImplementationFunctionsTest extends SkylarkTestCase {
} catch (AssertionError expected) {
assertThat(expected)
.hasMessageThat()
- .contains("Object of type Target doesn't " + "contain declared provider unused_provider");
+ .contains("Object of type Target doesn't contain declared provider unused_provider");
}
}
@@ -1391,7 +1391,7 @@ public class SkylarkRuleImplementationFunctionsTest extends SkylarkTestCase {
assertThat(expected)
.hasMessageThat()
.contains(
- "Type Target only supports indexing " + "by object constructors, got string instead");
+ "Type Target only supports indexing by object constructors, got string instead");
}
}
@@ -1421,7 +1421,7 @@ public class SkylarkRuleImplementationFunctionsTest extends SkylarkTestCase {
} catch (AssertionError expected) {
assertThat(expected)
.hasMessageThat()
- .contains("Object of type Target doesn't " + "contain declared provider unused_provider");
+ .contains("Object of type Target doesn't contain declared provider unused_provider");
}
}
@@ -1504,7 +1504,7 @@ public class SkylarkRuleImplementationFunctionsTest extends SkylarkTestCase {
assertThat(expected)
.hasMessageThat()
.contains(
- "Type Target only supports querying by object " + "constructors, got string instead");
+ "Type Target only supports querying by object constructors, got string instead");
}
}
@@ -1728,6 +1728,51 @@ public class SkylarkRuleImplementationFunctionsTest extends SkylarkTestCase {
getConfiguredTarget("//test:silly");
}
+ @Test
+ public void testExecutable() throws Exception {
+ scratch.file(
+ "test/foo.bzl",
+ "def _impl(ctx):",
+ " return DefaultInfo(",
+ " files=depset(ctx.files.one),",
+ " executable=ctx.files.two[0],",
+ " )",
+ "foo_rule = rule(",
+ " implementation = _impl,",
+ " attrs = {",
+ " 'one': attr.label_list(allow_files=True),",
+ " 'two': attr.label_list(allow_files=True),",
+ " }",
+ ")"
+ );
+ scratch.file(
+ "test/bar.bzl",
+ "def _impl(ctx):",
+ " provider = ctx.attr.deps[0][DefaultInfo]",
+ " return struct(",
+ " provider = provider,",
+ " files_to_run = provider.files_to_run,",
+ " )",
+ "bar_rule = rule(",
+ " implementation = _impl,",
+ " attrs = {",
+ " 'deps': attr.label_list(allow_files=True),",
+ " }",
+ ")");
+ scratch.file(
+ "test/BUILD",
+ "load(':foo.bzl', 'foo_rule')",
+ "load(':bar.bzl', 'bar_rule')",
+ "foo_rule(name = 'dep_rule', one = ['one.txt'], two = ['two.txt'])",
+ "bar_rule(name = 'my_rule', deps = [':dep_rule'])");
+ ConfiguredTarget configuredTarget = getConfiguredTarget("//test:my_rule");
+
+ List<Artifact> filesToRun = ((FilesToRunProvider) configuredTarget.get("files_to_run"))
+ .getFilesToRun().toList();
+ assertThat(filesToRun.get(0).getFilename()).isEqualTo("one.txt");
+ assertThat(filesToRun.get(1).getFilename()).isEqualTo("two.txt");
+ }
+
private void setupThrowFunction(BuiltinFunction func) throws Exception {
throwFunction = func;
throwFunction.configure(