diff options
author | 2017-07-13 18:53:07 +0200 | |
---|---|---|
committer | 2017-07-14 10:51:53 +0200 | |
commit | 8002b6205e004721f771df20d1d8c1402c03964e (patch) | |
tree | b873d47e8df0b512ebab7a5f3b8bb1c435470c63 /src/test/java/com/google/devtools/build/lib/skylark | |
parent | e5d95fb510ae056c8650b5bb450ec5dc7c7eeb3b (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.java | 63 |
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( |