aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar Francois-Rene Rideau <tunes@google.com>2016-01-30 04:25:58 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-02-01 09:45:59 +0000
commit1bae01f41ba32c0872fbedc3101fe56bed87ef11 (patch)
treead1e88ad684e05931db5d0c4d725f0ecdcd83a72 /src/test/java/com/google/devtools
parentd41017b5d6c24733eeb76d5181e86ef734603809 (diff)
Fix wrapping of GlobList into SkylarkList
Make sure to wrap a GlobList into a MutableList in convertToSkylark. Indeed, GlobList is somehow a SkylarkValue, but is not actually acceptable as a Skylark value. Until this is cleaned up, tweak convertToSkylark. Also, robustify ClassObject by eagerly calling convertToSkylark on values. -- MOS_MIGRATED_REVID=113421790
Diffstat (limited to 'src/test/java/com/google/devtools')
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleImplementationFunctionsTest.java36
1 files changed, 36 insertions, 0 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 68178db8ec..10c7a6c685 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
@@ -26,6 +26,7 @@ import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.util.ActionsTestUtil;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.Runfiles;
import com.google.devtools.build.lib.analysis.actions.FileWriteAction;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
@@ -954,6 +955,41 @@ public class SkylarkRuleImplementationFunctionsTest extends SkylarkTestCase {
assertContainsEvent("native.glob() can only be called during the loading phase");
}
+ @Test
+ public void testImplicitOutputsFromGlob() throws Exception {
+ scratch.file("test/glob.bzl",
+ "def _impl(ctx):",
+ " outs = ctx.outputs",
+ " for i in ctx.attr.srcs:",
+ " o = getattr(outs, 'foo_' + i.label.name)",
+ " ctx.file_action(",
+ " output = o,",
+ " content = 'hoho')",
+ "",
+ "def _foo(attr_map):",
+ " outs = {}",
+ " for i in attr_map.srcs:",
+ " outs['foo_' + i.name] = i.name + '.out'",
+ " return outs",
+ "",
+ "glob_rule = rule(",
+ " attrs = {",
+ " 'srcs': attr.label_list(allow_files = True),",
+ " },",
+ " outputs = _foo,",
+ " implementation = _impl,",
+ ")");
+ scratch.file("test/a.bar", "a");
+ scratch.file("test/b.bar", "b");
+ scratch.file("test/BUILD",
+ "load('/test/glob', 'glob_rule')",
+ "glob_rule(name = 'my_glob', srcs = glob(['*.bar']))");
+ ConfiguredTarget ct = getConfiguredTarget("//test:my_glob");
+ assertThat(ct).isNotNull();
+ assertThat(getGeneratingAction(getBinArtifact("a.bar.out", ct))).isNotNull();
+ assertThat(getGeneratingAction(getBinArtifact("b.bar.out", ct))).isNotNull();
+ }
+
private void setupThrowFunction(BuiltinFunction func) throws Exception {
throwFunction = func;
throwFunction.configure(