diff options
Diffstat (limited to 'src/test/java/com/google/devtools')
6 files changed, 78 insertions, 27 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java index b4b055aee0..461738eb7f 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java @@ -17,6 +17,7 @@ import static com.google.devtools.build.lib.packages.Attribute.attr; import static org.junit.Assert.fail; import com.google.devtools.build.lib.packages.AspectDefinition; +import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Type; import com.google.devtools.build.lib.syntax.Label; @@ -46,7 +47,7 @@ public class AspectDefinitionTest { } @Override - public Aspect create(ConfiguredTarget base, RuleContext context) { + public Aspect create(ConfiguredTarget base, RuleContext context, AspectParameters parameters) { throw new IllegalStateException(); } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java index 7d17a98cb5..02b4f3e1dc 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectTest.java @@ -137,4 +137,18 @@ public class AspectTest extends AnalysisTestCase { assertThat(a.getProvider(TestAspects.RuleInfo.class).getData()) .containsExactly("aspect //a:b", "rule //a:a"); } + + @Test + public void informationFromBaseRulePassedToAspect() throws Exception { + setRules(new TestAspects.BaseRule(), new TestAspects.HonestRule(), + new TestAspects.AspectRequiringProviderRule()); + + pkg("a", + "aspect_requiring_provider(name='a', foo=[':b'], baz='hello')", + "honest(name='b', foo=[])"); + + ConfiguredTarget a = getConfiguredTarget("//a:a"); + assertThat(a.getProvider(TestAspects.RuleInfo.class).getData()) + .containsExactly("rule //a:a", "aspect //a:b data hello"); + } } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java index 5365728bea..2906961e7b 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectValueTest.java @@ -17,6 +17,7 @@ import com.google.common.testing.EqualsTester; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.util.AnalysisTestCase; import com.google.devtools.build.lib.analysis.util.TestAspects; +import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.skyframe.AspectValue; import com.google.devtools.build.lib.syntax.Label; @@ -51,18 +52,26 @@ public class AspectValueTest extends AnalysisTestCase { Label l1 = Label.parseAbsolute("//a:l1"); Label l1b = Label.parseAbsolute("//a:l1"); Label l2 = Label.parseAbsolute("//a:l2"); + AspectParameters i1 = new AspectParameters.Builder() + .addAttribute("foo", "bar") + .build(); + AspectParameters i2 = new AspectParameters.Builder() + .addAttribute("foo", "baz") + .build(); Class<? extends ConfiguredAspectFactory> a1 = TestAspects.AttributeAspect.class; Class<? extends ConfiguredAspectFactory> a2 = TestAspects.ExtraAttributeAspect.class; new EqualsTester() - .addEqualityGroup(AspectValue.key(l1, c1, a1), AspectValue.key(l1b, c1, a1)) - .addEqualityGroup(AspectValue.key(l2, c1, a1)) - .addEqualityGroup(AspectValue.key(l1, c2, a1)) - .addEqualityGroup(AspectValue.key(l2, c2, a1)) - .addEqualityGroup(AspectValue.key(l1, c1, a2)) - .addEqualityGroup(AspectValue.key(l2, c1, a2)) - .addEqualityGroup(AspectValue.key(l1, c2, a2)) - .addEqualityGroup(AspectValue.key(l2, c2, a2)) + .addEqualityGroup(AspectValue.key(l1, c1, a1, null), AspectValue.key(l1b, c1, a1, null)) + .addEqualityGroup(AspectValue.key(l1, c1, a1, i1)) + .addEqualityGroup(AspectValue.key(l1, c1, a1, i2)) + .addEqualityGroup(AspectValue.key(l2, c1, a1, null)) + .addEqualityGroup(AspectValue.key(l1, c2, a1, null)) + .addEqualityGroup(AspectValue.key(l2, c2, a1, null)) + .addEqualityGroup(AspectValue.key(l1, c1, a2, null)) + .addEqualityGroup(AspectValue.key(l2, c1, a2, null)) + .addEqualityGroup(AspectValue.key(l1, c2, a2, null)) + .addEqualityGroup(AspectValue.key(l2, c2, a2, null)) .addEqualityGroup(l1) // A random object .testEquals(); } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java index fc5b156dca..e149cb8693 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java @@ -116,7 +116,7 @@ public class DependencyResolverTest extends AnalysisTestCase { new TargetAndConfiguration(target, getTargetConfiguration()), getHostConfiguration(), aspectDefinition, - ImmutableSet.<ConfigMatchingProvider>of()); + null, ImmutableSet.<ConfigMatchingProvider>of()); } @SafeVarargs @@ -199,15 +199,15 @@ public class DependencyResolverTest extends AnalysisTestCase { BuildConfiguration host = getHostConfiguration(); BuildConfiguration target = getTargetConfiguration(); - ImmutableSet<Class<? extends ConfiguredAspectFactory>> twoAspects = - ImmutableSet.<Class<? extends ConfiguredAspectFactory>>of( - TestAspects.SimpleAspect.class, TestAspects.AttributeAspect.class); - ImmutableSet<Class<? extends ConfiguredAspectFactory>> inverseAspects = - ImmutableSet.<Class<? extends ConfiguredAspectFactory>>of( - TestAspects.AttributeAspect.class, TestAspects.SimpleAspect.class); - ImmutableSet<Class<? extends ConfiguredAspectFactory>> differentAspects = - ImmutableSet.<Class<? extends ConfiguredAspectFactory>>of( - TestAspects.AttributeAspect.class, TestAspects.ErrorAspect.class); + ImmutableSet<AspectWithParameters> twoAspects = ImmutableSet.of( + new AspectWithParameters(TestAspects.SimpleAspect.class), + new AspectWithParameters(TestAspects.AttributeAspect.class)); + ImmutableSet<AspectWithParameters> inverseAspects = ImmutableSet.of( + new AspectWithParameters(TestAspects.AttributeAspect.class), + new AspectWithParameters(TestAspects.SimpleAspect.class)); + ImmutableSet<AspectWithParameters> differentAspects = ImmutableSet.of( + new AspectWithParameters(TestAspects.AttributeAspect.class), + new AspectWithParameters(TestAspects.ErrorAspect.class)); new EqualsTester() .addEqualityGroup( 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 7f7d05b052..7068278951 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 @@ -84,6 +84,7 @@ import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.events.StoredEventHandler; import com.google.devtools.build.lib.exec.ExecutionOptions; +import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition; import com.google.devtools.build.lib.packages.AttributeMap; import com.google.devtools.build.lib.packages.ConstantRuleVisibility; @@ -861,9 +862,9 @@ public abstract class BuildViewTestCase extends FoundationTestCase { * Gets a derived Artifact for testing in the subdirectory of the {@link * BuildConfiguration#getBinDirectory()} corresponding to the package of {@code owner}, * where the given artifact belongs to the given ConfiguredTarget together with the given Aspect. - * So to specify a file foo/foo.o owned by target //foo:foo with an apsect from FooAspect, + * So to specify a file foo/foo.o owned by target //foo:foo with an aspect from FooAspect, * {@code packageRelativePath} should just be "foo.o", and aspectOfOwner should be - * FooAspect.class. This method is necessary when an Apsect of the target, not the target itself, + * FooAspect.class. This method is necessary when an Aspect of the target, not the target itself, * is creating an Artifact. */ protected Artifact getBinArtifact(String packageRelativePath, ConfiguredTarget owner, @@ -871,7 +872,8 @@ public abstract class BuildViewTestCase extends FoundationTestCase { return getPackageRelativeDerivedArtifact(packageRelativePath, owner.getConfiguration().getBinDirectory(), (AspectValue.AspectKey) AspectValue.key( - owner.getLabel(), owner.getConfiguration(), creatingAspectFactory).argument()); + owner.getLabel(), owner.getConfiguration(), creatingAspectFactory, + AspectParameters.EMPTY).argument()); } /** @@ -930,7 +932,8 @@ public abstract class BuildViewTestCase extends FoundationTestCase { return getPackageRelativeDerivedArtifact(packageRelativePath, owner.getConfiguration().getGenfilesDirectory(), (AspectValue.AspectKey) AspectValue.key( - owner.getLabel(), owner.getConfiguration(), creatingAspectFactory).argument()); + owner.getLabel(), owner.getConfiguration(), creatingAspectFactory, + AspectParameters.EMPTY).argument()); } /** diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java index bf564fb225..ffea8bcc9f 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java @@ -22,6 +22,8 @@ import static com.google.devtools.build.lib.packages.Type.NODEP_LABEL_LIST; import static com.google.devtools.build.lib.packages.Type.STRING; import static com.google.devtools.build.lib.packages.Type.STRING_LIST; +import com.google.common.base.Function; +import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.Aspect; import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory; @@ -39,6 +41,8 @@ import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.AspectDefinition; +import com.google.devtools.build.lib.packages.AspectParameters; +import com.google.devtools.build.lib.packages.Rule; import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.RuleClass.Builder; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; @@ -131,11 +135,16 @@ public class TestAspects { */ public abstract static class BaseAspect implements ConfiguredAspectFactory { @Override - public Aspect create(ConfiguredTarget base, RuleContext ruleContext) { + public Aspect create(ConfiguredTarget base, RuleContext ruleContext, + AspectParameters parameters) { + String information = parameters.isEmpty() + ? "" + : " data " + Iterables.getFirst(parameters.getAttribute("baz"), null); return new Aspect.Builder(getClass().getName()) .addProvider( AspectInfo.class, - new AspectInfo(collectAspectData("aspect " + ruleContext.getLabel(), ruleContext))) + new AspectInfo(collectAspectData("aspect " + ruleContext.getLabel() + information, + ruleContext))) .build(); } } @@ -215,7 +224,8 @@ public class TestAspects { */ public static class ErrorAspect implements ConfiguredAspectFactory { @Override - public Aspect create(ConfiguredTarget base, RuleContext ruleContext) { + public Aspect create(ConfiguredTarget base, RuleContext ruleContext, + AspectParameters parameters) { ruleContext.ruleError("Aspect error"); return null; } @@ -290,11 +300,25 @@ public class TestAspects { * A rule that defines an {@link AspectRequiringProvider} on one of its attributes. */ public static class AspectRequiringProviderRule implements RuleDefinition { + + private static final class TestAspectParametersExtractor implements + Function<Rule, AspectParameters> { + @Override + public AspectParameters apply(Rule rule) { + if (rule.isAttrDefined("baz", STRING)) { + return new AspectParameters.Builder().addAttribute("baz", + rule.getAttributeContainer().getAttr("baz").toString()).build(); + } + return AspectParameters.EMPTY; + } + } + @Override public RuleClass build(Builder builder, RuleDefinitionEnvironment environment) { return builder .add(attr("foo", LABEL_LIST).allowedFileTypes(FileTypeSet.ANY_FILE) - .aspect(AspectRequiringProvider.class)) + .aspect(AspectRequiringProvider.class, new TestAspectParametersExtractor())) + .add(attr("baz", STRING)) .build(); } |