aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test
diff options
context:
space:
mode:
authorGravatar mstaib <mstaib@google.com>2018-06-11 17:03:36 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-11 17:05:50 -0700
commit34982e7b6df72053e9ee4de54324fdfacb3b00d4 (patch)
tree4e11ff6f5f6ebb8deb10ee912ed302e2ce1e157d /src/test
parentb689036a6b203a1eb9bbd22738a1c7fbe949243f (diff)
Enable mock rules to set their types.
This enables, e.g., TEST rules to be created. RELNOTES: None. PiperOrigin-RevId: 200138491
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/com/google/devtools/build/lib/analysis/util/MockRule.java48
1 files changed, 34 insertions, 14 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/MockRule.java b/src/test/java/com/google/devtools/build/lib/analysis/util/MockRule.java
index 1534202f4c..934f4bb937 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/MockRule.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/MockRule.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.analysis.util;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.BaseRuleClasses;
import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory;
@@ -22,6 +23,7 @@ import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.RuleClass;
+import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
import java.util.Arrays;
/**
@@ -106,35 +108,44 @@ public interface MockRule extends RuleDefinition {
private final String name;
private final MockRuleCustomBehavior customBehavior;
private final Class<? extends RuleConfiguredTargetFactory> factory;
- private final Class<? extends RuleDefinition> ancestor;
+ private final ImmutableList<Class<? extends RuleDefinition>> ancestors;
+ private final RuleClassType type;
/** The default {@link RuleConfiguredTargetFactory} for this rule class. */
private static final Class<? extends RuleConfiguredTargetFactory> DEFAULT_FACTORY =
MockRuleDefaults.DefaultConfiguredTargetFactory.class;
/** The default {@link RuleDefinition} for this rule class. */
- private static final Class<? extends RuleDefinition> DEFAULT_ANCESTOR =
- BaseRuleClasses.RootRule.class;
+ private static final ImmutableList<Class<? extends RuleDefinition>> DEFAULT_ANCESTORS =
+ ImmutableList.of(BaseRuleClasses.RootRule.class);
State(String ruleClassName, MockRuleCustomBehavior customBehavior,
Class<? extends RuleConfiguredTargetFactory> factory,
- Class<? extends RuleDefinition> ancestor) {
+ ImmutableList<Class<? extends RuleDefinition>> ancestors,
+ RuleClassType type) {
this.name = Preconditions.checkNotNull(ruleClassName);
this.customBehavior = Preconditions.checkNotNull(customBehavior);
this.factory = factory;
- this.ancestor = ancestor;
+ this.ancestors = ancestors;
+ this.type = type;
}
public static class Builder {
private Class<? extends RuleConfiguredTargetFactory> factory = DEFAULT_FACTORY;
- private Class<? extends RuleDefinition> ancestor = DEFAULT_ANCESTOR;
+ private ImmutableList<Class<? extends RuleDefinition>> ancestors = DEFAULT_ANCESTORS;
+ private RuleClassType type = RuleClassType.NORMAL;
public Builder factory(Class<? extends RuleConfiguredTargetFactory> factory) {
this.factory = factory;
return this;
}
- public Builder ancestor(Class<? extends RuleDefinition> ancestor) {
- this.ancestor = ancestor;
+ public Builder ancestor(Class<? extends RuleDefinition>... ancestor) {
+ this.ancestors = ImmutableList.copyOf(ancestor);
+ return this;
+ }
+
+ public Builder type(RuleClassType type) {
+ this.type = type;
return this;
}
@@ -148,7 +159,7 @@ public interface MockRule extends RuleDefinition {
}
private State build(String ruleClassName, MockRuleCustomBehavior customBehavior) {
- return new State(ruleClassName, customBehavior, factory, ancestor);
+ return new State(ruleClassName, customBehavior, factory, ancestors, type);
}
}
}
@@ -165,13 +176,22 @@ public interface MockRule extends RuleDefinition {
/**
* Sets a custom ancestor {@link RuleDefinition} for this mock rule.
*
- * <p>If not set, {@link State#DEFAULT_ANCESTOR} is used.
+ * <p>If not set, {@link State#DEFAULT_ANCESTORS} is used.
*/
- static State.Builder ancestor(Class<? extends RuleDefinition> ancestor) {
+ static State.Builder ancestor(Class<? extends RuleDefinition>... ancestor) {
return new State.Builder().ancestor(ancestor);
}
/**
+ * Sets a custom {@link RuleClassType} for this mock rule.
+ *
+ * <p>If not set, {@link RuleClassType#NORMAL} is used.
+ */
+ static State.Builder type(RuleClassType type) {
+ return new State.Builder().type(type);
+ }
+
+ /**
* Returns a new {@link State} for this rule class with custom attributes. This is a convenience
* method for lambda definitions:
*
@@ -214,7 +234,7 @@ public interface MockRule extends RuleDefinition {
@Override
default RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment environment) {
State state = define();
- if (state.ancestor == State.DEFAULT_ANCESTOR) {
+ if (State.DEFAULT_ANCESTORS.equals(state.ancestors)) {
MockRuleDefaults.DEFAULT_ATTRIBUTES.stream().forEach(builder::add);
}
state.customBehavior.customize(builder, environment);
@@ -231,9 +251,9 @@ public interface MockRule extends RuleDefinition {
State state = define();
return RuleDefinition.Metadata.builder()
.name(state.name)
- .type(RuleClass.Builder.RuleClassType.NORMAL)
+ .type(state.type)
.factoryClass(state.factory)
- .ancestors(state.ancestor)
+ .ancestors(state.ancestors)
.build();
}
}