diff options
author | 2016-04-15 12:16:04 +0000 | |
---|---|---|
committer | 2016-04-15 14:08:33 +0000 | |
commit | 4321b677c0846e905702ff8fd1a38c00404b675f (patch) | |
tree | 37967482aed55de37242100b26e462e7a1488501 /src/test/java/com/google/devtools/build | |
parent | 907dbbfee014a5a7b88450a93c2cef877ebda4b6 (diff) |
Expose __init__.py filenames to Skylark
This is important for packaging Python code in a way which is compatible
with the way Bazel builds its standard runfiles directory.
Refs #671
--
Change-Id: Ica2adab481cfecabb84b608cd952b0cae5a8653c
Reviewed-on: https://bazel-review.googlesource.com/#/c/2900/
MOS_MIGRATED_REVID=119945845
Diffstat (limited to 'src/test/java/com/google/devtools/build')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java index 61a6ba8d31..d475322d4e 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java @@ -921,4 +921,50 @@ public class SkylarkRuleContextTest extends SkylarkTestCase { + "in the WORKSPACE file (for repository 'foo')"); } } + + @Test + public void testAccessingRunfiles() throws Exception { + scratch.file("test/a.py"); + scratch.file("test/b.py"); + scratch.file("test/__init__.py"); + scratch.file( + "test/rule.bzl", + "def _impl(ctx):", + " return", + "skylark_rule = rule(", + " implementation = _impl,", + " attrs = {", + " 'dep': attr.label(),", + " },", + ")"); + scratch.file( + "test/BUILD", + "load('/test/rule', 'skylark_rule')", + "py_library(name = 'lib', srcs = ['a.py', 'b.py'])", + "skylark_rule(name = 'foo', dep = ':lib')", + "py_library(name = 'lib_with_init', srcs = ['a.py', 'b.py', '__init__.py'])", + "skylark_rule(name = 'foo_with_init', dep = ':lib_with_init')"); + + SkylarkRuleContext ruleContext = createRuleContext("//test:foo"); + Object filenames = + evalRuleContextCode( + ruleContext, "[f.short_path for f in ruleContext.attr.dep.default_runfiles.files]"); + assertThat(filenames).isInstanceOf(SkylarkList.class); + SkylarkList filenamesList = (SkylarkList) filenames; + assertThat(filenamesList).containsExactly("test/a.py", "test/b.py").inOrder(); + Object emptyFilenames = + evalRuleContextCode( + ruleContext, "list(ruleContext.attr.dep.default_runfiles.empty_filenames)"); + assertThat(emptyFilenames).isInstanceOf(SkylarkList.class); + SkylarkList emptyFilenamesList = (SkylarkList) emptyFilenames; + assertThat(emptyFilenamesList).containsExactly("test/__init__.py").inOrder(); + + SkylarkRuleContext ruleWithInitContext = createRuleContext("//test:foo_with_init"); + Object noEmptyFilenames = + evalRuleContextCode( + ruleWithInitContext, "list(ruleContext.attr.dep.default_runfiles.empty_filenames)"); + assertThat(noEmptyFilenames).isInstanceOf(SkylarkList.class); + SkylarkList noEmptyFilenamesList = (SkylarkList) noEmptyFilenames; + assertThat(noEmptyFilenamesList).containsExactly().inOrder(); + } } |