aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2015-10-30 15:50:01 +0000
committerGravatar Florian Weikert <fwe@google.com>2015-11-02 16:53:19 +0000
commitc15ba2e54d0e17fe894bfeadb21228e0a76e9e40 (patch)
treed555d4802586c654771f646d2a04e11d3385256f /src/test/java/com/google/devtools/build
parent1b175c478156b20c7e1a77200a5e7717a945d9f2 (diff)
Implement propagation along dependencies for Skylark aspects.
-- MOS_MIGRATED_REVID=106694515
Diffstat (limited to 'src/test/java/com/google/devtools/build')
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/AspectDefinitionTest.java2
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java5
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/TestAspects.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkAspectsTest.java84
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");