diff options
Diffstat (limited to 'src/test/java/com/google/devtools')
4 files changed, 87 insertions, 10 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 09dd5e2b8f..b81f2f260a 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 @@ -34,7 +34,7 @@ public class AspectDefinitionTest { * A dummy aspect factory. Is there to demonstrate how to define aspects and so that we can test * {@code attributeAspect}. */ - public static final class TestAspectFactory implements ConfiguredAspectFactory { + public static final class TestAspectFactory implements ConfiguredNativeAspectFactory { private final AspectDefinition definition; /** 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 67889a8fbd..1a7a24c490 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 @@ -27,7 +27,6 @@ import com.google.devtools.build.lib.analysis.util.TestAspects; import com.google.devtools.build.lib.analysis.util.TestAspects.AspectRequiringRule; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.AspectDefinition; -import com.google.devtools.build.lib.packages.AspectFactory; import com.google.devtools.build.lib.packages.AspectParameters; import com.google.devtools.build.lib.packages.Attribute; import com.google.devtools.build.lib.packages.NativeAspectClass; @@ -111,9 +110,7 @@ public class DependencyResolverTest extends AnalysisTestCase { private ListMultimap<Attribute, Dependency> dependentNodeMap( String targetName, Class<? extends ConfiguredAspectFactory> aspect) throws Exception { AspectDefinition aspectDefinition = - aspect == null - ? null - : AspectFactory.Util.create(new NativeAspectClass(aspect)).getDefinition(); + aspect == null ? null : new NativeAspectClass(aspect).getDefinition(); Target target = packageManager.getTarget(reporter, Label.parseAbsolute(targetName)); return dependencyResolver.dependentNodeMap( new TargetAndConfiguration(target, getTargetConfiguration()), 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 433cb22b09..1b2ffbbab6 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 @@ -26,7 +26,7 @@ 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; +import com.google.devtools.build.lib.analysis.ConfiguredNativeAspectFactory; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleConfiguredTargetBuilder; @@ -133,7 +133,7 @@ public class TestAspects { /** * A base class for mock aspects to reduce boilerplate. */ - public abstract static class BaseAspect implements ConfiguredAspectFactory { + public abstract static class BaseAspect implements ConfiguredNativeAspectFactory { @Override public Aspect create(ConfiguredTarget base, RuleContext ruleContext, AspectParameters parameters) { @@ -222,7 +222,7 @@ public class TestAspects { /** * An aspect that raises an error. */ - public static class ErrorAspect implements ConfiguredAspectFactory { + public static class ErrorAspect implements ConfiguredNativeAspectFactory { @Override public Aspect create(ConfiguredTarget base, RuleContext ruleContext, AspectParameters parameters) { 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 aa5ab30c60..7633d4fde5 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 @@ -21,8 +21,12 @@ import com.google.common.collect.ImmutableList; import com.google.common.eventbus.EventBus; import com.google.devtools.build.lib.analysis.BuildView.AnalysisResult; import com.google.devtools.build.lib.analysis.ConfiguredTarget; +import com.google.devtools.build.lib.analysis.SkylarkProviders; import com.google.devtools.build.lib.analysis.ViewCreationFailedException; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; +import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.skyframe.AspectValue; +import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import javax.annotation.Nullable; @@ -42,7 +46,7 @@ public class SkylarkAspectsTest extends BuildViewTestCase { AnalysisResult analysisResult = update( ImmutableList.of("//test:xxx"), - ImmutableList.<String>of("test/aspect.bzl%MyAspect"), + ImmutableList.of("test/aspect.bzl%MyAspect"), false, LOADING_PHASE_THREADS, true, @@ -58,6 +62,82 @@ public class SkylarkAspectsTest extends BuildViewTestCase { } })) .containsExactly("//test:xxx"); + assertThat( + transform( + analysisResult.getAspects(), + new Function<AspectValue, String>() { + @Nullable + @Override + public String apply(AspectValue aspectValue) { + return String.format( + "%s(%s)", + aspectValue.getAspect().getName(), + aspectValue.getLabel().toString()); + } + })) + .containsExactly("test/aspect.bzl%MyAspect(//test:xxx)"); + } + + public void testAspectPropagating() throws Exception { + scratch.file( + "test/aspect.bzl", + "def _impl(target, ctx):", + " s = set([target.label])", + " for i in ctx.attr.deps:", + " s += i.target_labels", + " return struct(target_labels = s)", + "", + "MyAspect = aspect(", + " implementation=_impl,", + " attr_aspects=['deps'],", + ")"); + scratch.file( + "test/BUILD", + "java_library(", + " name = 'yyy',", + ")", + "java_library(", + " name = 'xxx',", + " srcs = ['A.java'],", + " deps = [':yyy'],", + ")"); + + AnalysisResult analysisResult = + update( + ImmutableList.of("//test:xxx"), + ImmutableList.of("test/aspect.bzl%MyAspect"), + false, + LOADING_PHASE_THREADS, + true, + new EventBus()); + 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(); + SkylarkProviders skylarkProviders = aspectValue.getAspect().getProvider(SkylarkProviders.class); + assertThat(skylarkProviders).isNotNull(); + Object names = skylarkProviders.getValue("target_labels"); + assertThat(names).isInstanceOf(SkylarkNestedSet.class); + assertThat( + transform( + (SkylarkNestedSet) names, + new Function<Object, String>() { + @Nullable + @Override + public String apply(Object o) { + assertThat(o).isInstanceOf(Label.class); + return o.toString(); + } + })) + .containsExactly("//test:xxx", "//test:yyy"); } public void testAspectFailingExecution() throws Exception { @@ -85,7 +165,7 @@ public class SkylarkAspectsTest extends BuildViewTestCase { "ERROR /workspace/test/BUILD:1:1: in java_library rule //test:xxx: \n" + "Traceback (most recent call last):\n" + "\tFile \"/workspace/test/BUILD\", line 1\n" - + "\t\tMyAspect(...)\n" + + "\t\ttest/aspect.bzl%MyAspect(...)\n" + "\tFile \"/workspace/test/aspect.bzl\", line 2, in _impl\n" + "\t\t1 / 0\n" + "integer division by zero"); |