aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/skylark
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2016-11-11 11:18:48 +0000
committerGravatar Klaus Aehlig <aehlig@google.com>2016-11-11 12:53:45 +0000
commit9b2fc5cd6d4b85df9e8db1a3963898a1bf3518c8 (patch)
tree3249be228978e9eb85e75cae486994f8cb3e35fe /src/test/java/com/google/devtools/build/lib/skylark
parent034ad044740c950bfa7518055cfb666817c9bb09 (diff)
Do not crash when aspects provide duplicate things.
-- MOS_MIGRATED_REVID=138860974
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.java72
1 files changed, 72 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 cad9704538..0188b1e4c7 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
@@ -560,6 +560,78 @@ public class SkylarkAspectsTest extends AnalysisTestCase {
assertContainsEvent("MyAspect from //test:aspect.bzl is not an aspect");
}
+
+ @Test
+ public void duplicateOutputGroups() throws Exception {
+ scratch.file(
+ "test/aspect.bzl",
+ "def _impl(target, ctx):",
+ " f = ctx.new_file('f.txt')",
+ " ctx.file_action(f, 'f')",
+ " return struct(output_groups = { 'duplicate' : set([f]) })",
+ "",
+ "MyAspect = aspect(implementation=_impl)",
+ "def _rule_impl(ctx):",
+ " g = ctx.new_file('g.txt')",
+ " ctx.file_action(g, 'g')",
+ " return struct(output_groups = { 'duplicate' : set([g]) })",
+ "my_rule = rule(_rule_impl)",
+ "def _noop(ctx):",
+ " pass",
+ "rbase = rule(_noop, attrs = { 'dep' : attr.label(aspects = [MyAspect]) })"
+ );
+ scratch.file(
+ "test/BUILD",
+ "load(':aspect.bzl', 'my_rule', 'rbase')",
+ "my_rule(name = 'xxx')",
+ "rbase(name = 'yyy', dep = ':xxx')"
+ );
+
+ reporter.removeHandler(failFastHandler);
+ try {
+ AnalysisResult result = update("//test:yyy");
+ assertThat(keepGoing()).isTrue();
+ assertThat(result.hasError()).isTrue();
+ } catch (ViewCreationFailedException e) {
+ // expect to fail.
+ }
+ assertContainsEvent("ERROR /workspace/test/BUILD:3:1: Output group duplicate provided twice");
+ }
+
+ @Test
+ public void duplicateSkylarkProviders() throws Exception {
+ scratch.file(
+ "test/aspect.bzl",
+ "def _impl(target, ctx):",
+ " return struct(duplicate = 'x')",
+ "",
+ "MyAspect = aspect(implementation=_impl)",
+ "def _rule_impl(ctx):",
+ " return struct(duplicate = 'y')",
+ "my_rule = rule(_rule_impl)",
+ "def _noop(ctx):",
+ " pass",
+ "rbase = rule(_noop, attrs = { 'dep' : attr.label(aspects = [MyAspect]) })"
+ );
+ scratch.file(
+ "test/BUILD",
+ "load(':aspect.bzl', 'my_rule', 'rbase')",
+ "my_rule(name = 'xxx')",
+ "rbase(name = 'yyy', dep = ':xxx')"
+ );
+
+ reporter.removeHandler(failFastHandler);
+ try {
+ AnalysisResult result = update("//test:yyy");
+ assertThat(keepGoing()).isTrue();
+ assertThat(result.hasError()).isTrue();
+ } catch (ViewCreationFailedException e) {
+ // expect to fail.
+ }
+ assertContainsEvent("ERROR /workspace/test/BUILD:3:1: Provider duplicate provided twice");
+ }
+
+
@Test
public void topLevelAspectDoesNotExist() throws Exception {
scratch.file("test/aspect.bzl", "");