aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-05-02 16:26:39 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-05-03 10:44:40 +0200
commitf969734be768e7e941bbc3a7ed98c30908e2b261 (patch)
tree016fa1af773e260ca63a2f28f5b696e1116d8959 /src/test
parent430aca72c4e52f51d530df027ee2a4c0cfb6da40 (diff)
Implement OutputGroupInfo provider.
Work towards #2894. RELNOTES: None. PiperOrigin-RevId: 154829065
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java4
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java202
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java84
3 files changed, 263 insertions, 27 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index a41b3b6c20..866830fa63 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -666,7 +666,7 @@ public abstract class BuildViewTestCase extends FoundationTestCase {
protected Action getGeneratingActionInOutputGroup(
ConfiguredTarget target, String outputName, String outputGroupName) {
NestedSet<Artifact> outputGroup =
- target.getProvider(OutputGroupProvider.class).getOutputGroup(outputGroupName);
+ OutputGroupProvider.get(target).getOutputGroup(outputGroupName);
return getGeneratingAction(outputName, outputGroup, "outputGroup/" + outputGroupName);
}
@@ -1401,7 +1401,7 @@ public abstract class BuildViewTestCase extends FoundationTestCase {
protected NestedSet<Artifact> getOutputGroup(
TransitiveInfoCollection target, String outputGroup) {
- OutputGroupProvider provider = target.getProvider(OutputGroupProvider.class);
+ OutputGroupProvider provider = OutputGroupProvider.get(target);
return provider == null
? NestedSetBuilder.<Artifact>emptySet(Order.STABLE_ORDER)
: provider.getOutputGroup(outputGroup);
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 a52ee89a5a..59b637e3fa 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
@@ -421,13 +421,46 @@ public class SkylarkAspectsTest extends AnalysisTestCase {
update(ImmutableList.of("test/aspect.bzl%MyAspect"), "//test:xxx");
assertThat(getLabelsToBuild(analysisResult)).containsExactly("//test:xxx");
AspectValue aspectValue = analysisResult.getAspects().iterator().next();
- OutputGroupProvider outputGroupProvider =
- aspectValue.getConfiguredAspect().getProvider(OutputGroupProvider.class);
+ OutputGroupProvider outputGroupProvider = OutputGroupProvider.get(
+ aspectValue.getConfiguredAspect());
+
assertThat(outputGroupProvider).isNotNull();
NestedSet<Artifact> names = outputGroupProvider.getOutputGroup("my_result");
assertThat(names).isNotEmpty();
- NestedSet<Artifact> expectedSet = getConfiguredTarget("//test:xxx")
- .getProvider(OutputGroupProvider.class)
+ NestedSet<Artifact> expectedSet = OutputGroupProvider.get(getConfiguredTarget("//test:xxx"))
+ .getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL);
+ assertThat(names).containsExactlyElementsIn(expectedSet);
+ }
+
+ @Test
+ public void aspectWithOutputGroupsDeclaredProvider() throws Exception {
+ scratch.file(
+ "test/aspect.bzl",
+ "def _impl(target, ctx):",
+ " f = target[OutputGroupInfo]._hidden_top_level" + INTERNAL_SUFFIX,
+ " return [OutputGroupInfo(my_result = f)]",
+ "",
+ "MyAspect = aspect(",
+ " implementation=_impl,",
+ ")");
+ scratch.file(
+ "test/BUILD",
+ "java_library(",
+ " name = 'xxx',",
+ " srcs = ['A.java'],",
+ ")");
+
+ AnalysisResult analysisResult =
+ update(ImmutableList.of("test/aspect.bzl%MyAspect"), "//test:xxx");
+ assertThat(getLabelsToBuild(analysisResult)).containsExactly("//test:xxx");
+ AspectValue aspectValue = analysisResult.getAspects().iterator().next();
+ OutputGroupProvider outputGroupProvider = OutputGroupProvider.get(
+ aspectValue.getConfiguredAspect());
+
+ assertThat(outputGroupProvider).isNotNull();
+ NestedSet<Artifact> names = outputGroupProvider.getOutputGroup("my_result");
+ assertThat(names).isNotEmpty();
+ NestedSet<Artifact> expectedSet = OutputGroupProvider.get(getConfiguredTarget("//test:xxx"))
.getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL);
assertThat(names).containsExactlyElementsIn(expectedSet);
}
@@ -465,12 +498,53 @@ public class SkylarkAspectsTest extends AnalysisTestCase {
.containsExactly("//test:xxx");
AspectValue aspectValue = analysisResult.getAspects().iterator().next();
OutputGroupProvider outputGroupProvider =
- aspectValue.getConfiguredAspect().getProvider(OutputGroupProvider.class);
+ OutputGroupProvider.get(aspectValue.getConfiguredAspect());
assertThat(outputGroupProvider).isNotNull();
NestedSet<Artifact> names = outputGroupProvider.getOutputGroup("my_result");
assertThat(names).isNotEmpty();
- NestedSet<Artifact> expectedSet = getConfiguredTarget("//test:xxx")
- .getProvider(OutputGroupProvider.class)
+ NestedSet<Artifact> expectedSet = OutputGroupProvider.get(getConfiguredTarget("//test:xxx"))
+ .getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL);
+ assertThat(names).containsExactlyElementsIn(expectedSet);
+ }
+
+ @Test
+ public void aspectWithOutputGroupsAsListDeclaredProvider() throws Exception {
+ scratch.file(
+ "test/aspect.bzl",
+ "def _impl(target, ctx):",
+ " g = target[OutputGroupInfo]._hidden_top_level" + INTERNAL_SUFFIX,
+ " return [OutputGroupInfo(my_result= [ f for f in g])]",
+ "",
+ "MyAspect = aspect(",
+ " implementation=_impl,",
+ ")");
+ scratch.file(
+ "test/BUILD",
+ "java_library(",
+ " name = 'xxx',",
+ " srcs = ['A.java'],",
+ ")");
+
+ AnalysisResult analysisResult =
+ update(ImmutableList.of("test/aspect.bzl%MyAspect"), "//test:xxx");
+ assertThat(
+ transform(
+ analysisResult.getTargetsToBuild(),
+ new Function<ConfiguredTarget, String>() {
+ @Nullable
+ @Override
+ public String apply(ConfiguredTarget configuredTarget) {
+ return configuredTarget.getLabel().toString();
+ }
+ }))
+ .containsExactly("//test:xxx");
+ AspectValue aspectValue = analysisResult.getAspects().iterator().next();
+ OutputGroupProvider outputGroupProvider =
+ OutputGroupProvider.get(aspectValue.getConfiguredAspect());
+ assertThat(outputGroupProvider).isNotNull();
+ NestedSet<Artifact> names = outputGroupProvider.getOutputGroup("my_result");
+ assertThat(names).isNotEmpty();
+ NestedSet<Artifact> expectedSet = OutputGroupProvider.get(getConfiguredTarget("//test:xxx"))
.getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL);
assertThat(names).containsExactlyElementsIn(expectedSet);
}
@@ -863,6 +937,69 @@ public class SkylarkAspectsTest extends AnalysisTestCase {
}
@Test
+ public void outputGroupsFromOneAspect() throws Exception {
+ scratch.file(
+ "test/aspect.bzl",
+ "def _a1_impl(target, ctx):",
+ " f = ctx.new_file(target.label.name + '_a1.txt')",
+ " ctx.file_action(f, 'f')",
+ " return struct(output_groups = { 'a1_group' : depset([f]) })",
+ "",
+ "a1 = aspect(implementation=_a1_impl, attr_aspects = ['dep'])",
+ "def _rule_impl(ctx):",
+ " if not ctx.attr.dep:",
+ " return struct()",
+ " og = {k:ctx.attr.dep.output_groups[k] for k in ctx.attr.dep.output_groups}",
+ " return struct(output_groups = og)",
+ "my_rule1 = rule(_rule_impl, attrs = { 'dep' : attr.label(aspects = [a1]) })"
+ );
+ scratch.file(
+ "test/BUILD",
+ "load(':aspect.bzl', 'my_rule1')",
+ "my_rule1(name = 'base')",
+ "my_rule1(name = 'xxx', dep = ':base')"
+ );
+
+
+ AnalysisResult analysisResult = update("//test:xxx");
+ OutputGroupProvider outputGroupProvider =
+ OutputGroupProvider.get(Iterables.getOnlyElement(analysisResult.getTargetsToBuild()));
+ assertThat(getOutputGroupContents(outputGroupProvider, "a1_group"))
+ .containsExactly("test/base_a1.txt");
+ }
+
+ @Test
+ public void outputGroupsDeclaredProviderFromOneAspect() throws Exception {
+ scratch.file(
+ "test/aspect.bzl",
+ "def _a1_impl(target, ctx):",
+ " f = ctx.new_file(target.label.name + '_a1.txt')",
+ " ctx.file_action(f, 'f')",
+ " return [OutputGroupInfo(a1_group = depset([f]))]",
+ "",
+ "a1 = aspect(implementation=_a1_impl, attr_aspects = ['dep'])",
+ "def _rule_impl(ctx):",
+ " if not ctx.attr.dep:",
+ " return struct()",
+ " return [OutputGroupInfo(a1_group = ctx.attr.dep[OutputGroupInfo].a1_group)]",
+ "my_rule1 = rule(_rule_impl, attrs = { 'dep' : attr.label(aspects = [a1]) })"
+ );
+ scratch.file(
+ "test/BUILD",
+ "load(':aspect.bzl', 'my_rule1')",
+ "my_rule1(name = 'base')",
+ "my_rule1(name = 'xxx', dep = ':base')"
+ );
+
+
+ AnalysisResult analysisResult = update("//test:xxx");
+ OutputGroupProvider outputGroupProvider =
+ OutputGroupProvider.get(Iterables.getOnlyElement(analysisResult.getTargetsToBuild()));
+ assertThat(getOutputGroupContents(outputGroupProvider, "a1_group"))
+ .containsExactly("test/base_a1.txt");
+ }
+
+ @Test
public void outputGroupsFromTwoAspects() throws Exception {
scratch.file(
"test/aspect.bzl",
@@ -896,15 +1033,60 @@ public class SkylarkAspectsTest extends AnalysisTestCase {
AnalysisResult analysisResult = update("//test:yyy");
OutputGroupProvider outputGroupProvider =
- Iterables
- .getOnlyElement(analysisResult.getTargetsToBuild())
- .getProvider(OutputGroupProvider.class);
+ OutputGroupProvider.get(Iterables.getOnlyElement(analysisResult.getTargetsToBuild()));
+ assertThat(getOutputGroupContents(outputGroupProvider, "a1_group"))
+ .containsExactly("test/base_a1.txt");
+ assertThat(getOutputGroupContents(outputGroupProvider, "a2_group"))
+ .containsExactly("test/xxx_a2.txt");
+ }
+
+ @Test
+ public void outputGroupsDeclaredProvidersFromTwoAspects() throws Exception {
+ scratch.file(
+ "test/aspect.bzl",
+ "def _a1_impl(target, ctx):",
+ " f = ctx.new_file(target.label.name + '_a1.txt')",
+ " ctx.file_action(f, 'f')",
+ " return [OutputGroupInfo(a1_group = depset([f]))]",
+ "",
+ "a1 = aspect(implementation=_a1_impl, attr_aspects = ['dep'])",
+ "def _rule_impl(ctx):",
+ " if not ctx.attr.dep:",
+ " return struct()",
+ " og = dict()",
+ " dep_og = ctx.attr.dep[OutputGroupInfo]",
+ " if hasattr(dep_og, 'a1_group'):",
+ " og['a1_group'] = dep_og.a1_group",
+ " if hasattr(dep_og, 'a2_group'):",
+ " og['a2_group'] = dep_og.a2_group",
+ " return [OutputGroupInfo(**og)]",
+ "my_rule1 = rule(_rule_impl, attrs = { 'dep' : attr.label(aspects = [a1]) })",
+ "def _a2_impl(target, ctx):",
+ " g = ctx.new_file(target.label.name + '_a2.txt')",
+ " ctx.file_action(g, 'f')",
+ " return [OutputGroupInfo(a2_group = depset([g]))]",
+ "",
+ "a2 = aspect(implementation=_a2_impl, attr_aspects = ['dep'])",
+ "my_rule2 = rule(_rule_impl, attrs = { 'dep' : attr.label(aspects = [a2]) })");
+ scratch.file(
+ "test/BUILD",
+ "load(':aspect.bzl', 'my_rule1', 'my_rule2')",
+ "my_rule1(name = 'base')",
+ "my_rule1(name = 'xxx', dep = ':base')",
+ "my_rule2(name = 'yyy', dep = ':xxx')"
+ );
+
+
+ AnalysisResult analysisResult = update("//test:yyy");
+ OutputGroupProvider outputGroupProvider =
+ OutputGroupProvider.get(Iterables.getOnlyElement(analysisResult.getTargetsToBuild()));
assertThat(getOutputGroupContents(outputGroupProvider, "a1_group"))
.containsExactly("test/base_a1.txt");
assertThat(getOutputGroupContents(outputGroupProvider, "a2_group"))
.containsExactly("test/xxx_a2.txt");
}
+
@Test
public void duplicateOutputGroupsFromTwoAspects() throws Exception {
scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
index 52dcc451a6..02abf93947 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
@@ -175,8 +175,7 @@ public class SkylarkIntegrationTest extends BuildViewTestCase {
"cc_binary(name = 'lib', data = ['a.txt'])",
"my_rule(name='my', dep = ':lib')");
NestedSet<Artifact> hiddenTopLevelArtifacts =
- getConfiguredTarget("//test/skylark:lib")
- .getProvider(OutputGroupProvider.class)
+ OutputGroupProvider.get(getConfiguredTarget("//test/skylark:lib"))
.getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL);
ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
SkylarkNestedSet result =
@@ -184,11 +183,40 @@ public class SkylarkIntegrationTest extends BuildViewTestCase {
.getProvider(SkylarkProviders.class)
.getValue("result");
assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
- assertThat(myTarget.getProvider(OutputGroupProvider.class).getOutputGroup("my_group"))
+ assertThat(OutputGroupProvider.get(myTarget).getOutputGroup("my_group"))
.containsExactlyElementsIn(hiddenTopLevelArtifacts);
}
@Test
+ public void testOutputGroupsDeclaredProvider() throws Exception {
+ scratch.file(
+ "test/skylark/extension.bzl",
+ "def _impl(ctx):",
+ " f = ctx.attr.dep[OutputGroupInfo]._hidden_top_level" + INTERNAL_SUFFIX,
+ " return struct(result = f, ",
+ " providers = [OutputGroupInfo(my_group = f)])",
+ "my_rule = rule(implementation = _impl,",
+ " attrs = { 'dep' : attr.label() })");
+ scratch.file(
+ "test/skylark/BUILD",
+ "load('/test/skylark/extension', 'my_rule')",
+ "cc_binary(name = 'lib', data = ['a.txt'])",
+ "my_rule(name='my', dep = ':lib')");
+ NestedSet<Artifact> hiddenTopLevelArtifacts =
+ OutputGroupProvider.get(getConfiguredTarget("//test/skylark:lib"))
+ .getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL);
+ ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
+ SkylarkNestedSet result =
+ (SkylarkNestedSet) myTarget
+ .getProvider(SkylarkProviders.class)
+ .getValue("result");
+ assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
+ assertThat(OutputGroupProvider.get(myTarget).getOutputGroup("my_group"))
+ .containsExactlyElementsIn(hiddenTopLevelArtifacts);
+ }
+
+
+ @Test
public void testOutputGroupsAsDictionary() throws Exception {
scratch.file(
"test/skylark/extension.bzl",
@@ -210,15 +238,13 @@ public class SkylarkIntegrationTest extends BuildViewTestCase {
"cc_binary(name = 'lib', data = ['a.txt'])",
"my_rule(name='my', dep = ':lib')");
NestedSet<Artifact> hiddenTopLevelArtifacts =
- getConfiguredTarget("//test/skylark:lib")
- .getProvider(OutputGroupProvider.class)
+ OutputGroupProvider.get(getConfiguredTarget("//test/skylark:lib"))
.getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL);
ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
- SkylarkProviders skylarkProviders = myTarget
- .getProvider(SkylarkProviders.class);
+ SkylarkProviders skylarkProviders = myTarget.getProvider(SkylarkProviders.class);
SkylarkNestedSet result = (SkylarkNestedSet) skylarkProviders.getValue("result");
assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
- assertThat(myTarget.getProvider(OutputGroupProvider.class).getOutputGroup("my_group"))
+ assertThat(OutputGroupProvider.get(myTarget).getOutputGroup("my_group"))
.containsExactlyElementsIn(hiddenTopLevelArtifacts);
assertThat(skylarkProviders.getValue("has_key1")).isEqualTo(Boolean.TRUE);
assertThat(skylarkProviders.getValue("has_key2")).isEqualTo(Boolean.FALSE);
@@ -247,15 +273,14 @@ public class SkylarkIntegrationTest extends BuildViewTestCase {
"cc_binary(name = 'lib', data = ['a.txt'])",
"my_rule(name='my', dep = ':lib')");
NestedSet<Artifact> hiddenTopLevelArtifacts =
- getConfiguredTarget("//test/skylark:lib")
- .getProvider(OutputGroupProvider.class)
+ OutputGroupProvider.get(getConfiguredTarget("//test/skylark:lib"))
.getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL);
ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
SkylarkProviders skylarkProviders = myTarget
.getProvider(SkylarkProviders.class);
SkylarkNestedSet result = (SkylarkNestedSet) skylarkProviders.getValue("result");
assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
- assertThat(myTarget.getProvider(OutputGroupProvider.class).getOutputGroup("my_group"))
+ assertThat(OutputGroupProvider.get(myTarget).getOutputGroup("my_group"))
.containsExactlyElementsIn(hiddenTopLevelArtifacts);
}
@@ -276,18 +301,47 @@ public class SkylarkIntegrationTest extends BuildViewTestCase {
"cc_binary(name = 'lib', data = ['a.txt'])",
"my_rule(name='my', dep = ':lib')");
NestedSet<Artifact> hiddenTopLevelArtifacts =
- getConfiguredTarget("//test/skylark:lib")
- .getProvider(OutputGroupProvider.class)
+ OutputGroupProvider.get(getConfiguredTarget("//test/skylark:lib"))
.getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL);
ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
SkylarkNestedSet result =
(SkylarkNestedSet) myTarget.getProvider(SkylarkProviders.class).getValue("result");
assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
- assertThat(myTarget.getProvider(OutputGroupProvider.class).getOutputGroup("my_group"))
+ assertThat(OutputGroupProvider.get(myTarget).getOutputGroup("my_group"))
.containsExactlyElementsIn(hiddenTopLevelArtifacts);
- assertThat(myTarget.getProvider(OutputGroupProvider.class).getOutputGroup("my_empty_group"))
+ assertThat(OutputGroupProvider.get(myTarget).getOutputGroup("my_empty_group"))
.isEmpty();
}
+
+ @Test
+ public void testOutputGroupsDeclaredProviderWithList() throws Exception {
+ scratch.file(
+ "test/skylark/extension.bzl",
+ "def _impl(ctx):",
+ " f = ctx.attr.dep[OutputGroupInfo]._hidden_top_level" + INTERNAL_SUFFIX,
+ " g = list(f)",
+ " return struct(result = f, ",
+ " providers = [OutputGroupInfo(my_group = g, my_empty_group = [])])",
+ "my_rule = rule(implementation = _impl,",
+ " attrs = { 'dep' : attr.label() })");
+ scratch.file(
+ "test/skylark/BUILD",
+ "load('/test/skylark/extension', 'my_rule')",
+ "cc_binary(name = 'lib', data = ['a.txt'])",
+ "my_rule(name='my', dep = ':lib')");
+ NestedSet<Artifact> hiddenTopLevelArtifacts =
+ OutputGroupProvider.get(getConfiguredTarget("//test/skylark:lib"))
+ .getOutputGroup(OutputGroupProvider.HIDDEN_TOP_LEVEL);
+ ConfiguredTarget myTarget = getConfiguredTarget("//test/skylark:my");
+ SkylarkNestedSet result =
+ (SkylarkNestedSet) myTarget.getProvider(SkylarkProviders.class).getValue("result");
+ assertThat(result.getSet(Artifact.class)).containsExactlyElementsIn(hiddenTopLevelArtifacts);
+ assertThat(OutputGroupProvider.get(myTarget).getOutputGroup("my_group"))
+ .containsExactlyElementsIn(hiddenTopLevelArtifacts);
+ assertThat(OutputGroupProvider.get(myTarget).getOutputGroup("my_empty_group"))
+ .isEmpty();
+ }
+
@Test
public void testStackTraceErrorInFunction() throws Exception {
runStackTraceTest(