diff options
author | Dmitry Lomov <dslomov@google.com> | 2016-02-26 12:54:27 +0000 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2016-02-28 17:04:17 +0000 |
commit | b8101f57681f292a9ec312a9cbbc84ac4ec0668d (patch) | |
tree | b5478c1ace551d6c1ee090e87d83c0d30ab73347 /src/test/java/com/google | |
parent | 7af1c3394766af41bd990322b1c52507cd6b78de (diff) |
Skylark aspects should always output to bin directory.
--
MOS_MIGRATED_REVID=115659763
Diffstat (limited to 'src/test/java/com/google')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java | 49 |
1 files changed, 49 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 e81fffb29b..b8489b90e3 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; @@ -531,6 +532,54 @@ 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"); + } + } + + @Test public void testAspectFragmentAccessSuccess() throws Exception { getConfiguredTargetForAspectFragment( "ctx.fragments.cpp.compiler", "'cpp'", "", "", ""); |