diff options
author | Dmitry Lomov <dslomov@google.com> | 2016-04-22 12:50:12 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2016-04-22 13:20:30 +0000 |
commit | 33481d7be9fecd54c52a6e535f90718cde198020 (patch) | |
tree | 642c5c777b4af76ef7536e9796e686f9cb1030f2 /src/test/java/com/google/devtools | |
parent | 899416d11209288f7eafe57729ec8f07b23537e1 (diff) |
Skylark aspects should always output to bin directory.
--
MOS_MIGRATED_REVID=120539216
Diffstat (limited to 'src/test/java/com/google/devtools')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java | 50 |
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 |