aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/skylark
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2016-04-22 12:50:12 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-04-22 13:20:30 +0000
commit33481d7be9fecd54c52a6e535f90718cde198020 (patch)
tree642c5c777b4af76ef7536e9796e686f9cb1030f2 /src/test/java/com/google/devtools/build/lib/skylark
parent899416d11209288f7eafe57729ec8f07b23537e1 (diff)
Skylark aspects should always output to bin directory.
-- MOS_MIGRATED_REVID=120539216
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/skylark')
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java
index 2d546bf70e..4d0514873f 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java
@@ -15,6 +15,7 @@ package com.google.devtools.build.lib.skylark;
import static com.google.common.collect.Iterables.transform;
import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assert.fail;
import com.google.common.base.Function;
@@ -747,6 +748,55 @@ public class SkylarkAspectsTest extends AnalysisTestCase {
}
+ @Test
+ public void aspectOutputsToBinDirectory() throws Exception {
+ scratch.file("foo/extension.bzl",
+ "def _aspect_impl(target, ctx):",
+ " file = ctx.new_file('aspect-output-' + target.label.name)",
+ " ctx.file_action(file, 'data')",
+ " return struct(aspect_file = file)",
+ "my_aspect = aspect(_aspect_impl)",
+ "def _rule_impl(ctx):",
+ " pass",
+ "rule_bin_out = rule(_rule_impl, output_to_genfiles=False)",
+ "rule_gen_out = rule(_rule_impl, output_to_genfiles=True)",
+ "def _main_rule_impl(ctx):",
+ " s = set()",
+ " for d in ctx.attr.deps:",
+ " s = s | set([d.aspect_file])",
+ " return struct(aspect_files = s)",
+ "main_rule = rule(_main_rule_impl,",
+ " attrs = { 'deps' : attr.label_list(aspects = [my_aspect]) },",
+ ")"
+ );
+
+ scratch.file("foo/BUILD",
+ "load('extension', 'rule_bin_out', 'rule_gen_out', 'main_rule')",
+ "rule_bin_out(name = 'rbin')",
+ "rule_gen_out(name = 'rgen')",
+ "main_rule(name = 'main', deps = [':rbin', ':rgen'])"
+ );
+ AnalysisResult analysisResult = update(ImmutableList.<String>of(), "//foo:main");
+ ConfiguredTarget target = analysisResult.getTargetsToBuild().iterator().next();
+ NestedSet<Artifact> aspectFiles =
+ ((SkylarkNestedSet) target.getProvider(SkylarkProviders.class).getValue("aspect_files"))
+ .getSet(Artifact.class);
+ assertThat(transform(aspectFiles, new Function<Artifact, String>() {
+ @Override
+ public String apply(Artifact artifact) {
+ return artifact.getFilename();
+ }
+ })).containsExactly("aspect-output-rbin", "aspect-output-rgen");
+ for (Artifact aspectFile : aspectFiles) {
+ String rootPath = aspectFile.getRoot().getExecPath().toString();
+ assertWithMessage("Artifact %s should not be in genfiles", aspectFile)
+ .that(rootPath).doesNotContain("genfiles");
+ assertWithMessage("Artifact %s should be in bin", aspectFile)
+ .that(rootPath).endsWith("bin");
+ }
+ }
+
+
@RunWith(JUnit4.class)
public static final class WithKeepGoing extends SkylarkAspectsTest {
@Override