aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Brian Silverman <bsilver16384@gmail.com>2016-04-15 12:16:04 +0000
committerGravatar Dmitry Lomov <dslomov@google.com>2016-04-15 14:08:33 +0000
commit4321b677c0846e905702ff8fd1a38c00404b675f (patch)
tree37967482aed55de37242100b26e462e7a1488501 /src/test/java/com/google/devtools/build
parent907dbbfee014a5a7b88450a93c2cef877ebda4b6 (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.java46
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();
+ }
}