diff options
author | 2016-11-11 11:18:48 +0000 | |
---|---|---|
committer | 2016-11-11 12:53:45 +0000 | |
commit | 9b2fc5cd6d4b85df9e8db1a3963898a1bf3518c8 (patch) | |
tree | 3249be228978e9eb85e75cae486994f8cb3e35fe /src/test/java/com/google/devtools/build/lib/skylark | |
parent | 034ad044740c950bfa7518055cfb666817c9bb09 (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.java | 72 |
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", ""); |