GeneratedProjectTests are a bit refactored. A new API is added to BuildRuleBuilder to define dependencies between rules. -- MOS_MIGRATED_REVID=85887994
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/BuildRuleBuilder.java b/src/test/java/com/google/devtools/build/lib/testutil/BuildRuleBuilder.java index 9f770c5..cd8a202 100644 --- a/src/test/java/com/google/devtools/build/lib/testutil/BuildRuleBuilder.java +++ b/src/test/java/com/google/devtools/build/lib/testutil/BuildRuleBuilder.java
@@ -19,12 +19,13 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Lists; +import com.google.common.collect.Multimap; import com.google.devtools.build.lib.packages.RuleClass; import java.util.Collection; import java.util.HashMap; -import java.util.List; import java.util.Map; /** @@ -51,7 +52,7 @@ public class BuildRuleBuilder { protected final RuleClass ruleClass; protected final String ruleName; - private Map<String, List<String>> multiValueAttributes; + private Multimap<String, String> multiValueAttributes; private Map<String, Object> singleValueAttributes; protected Map<String, RuleClass> ruleClassMap; @@ -72,7 +73,7 @@ public BuildRuleBuilder(String ruleClass, String ruleName, Map<String, RuleClass> ruleClassMap) { this.ruleClass = ruleClassMap.get(ruleClass); this.ruleName = ruleName; - this.multiValueAttributes = new HashMap<>(); + this.multiValueAttributes = LinkedHashMultimap.create(); this.singleValueAttributes = new HashMap<>(); this.ruleClassMap = ruleClassMap; } @@ -90,42 +91,12 @@ /** * Sets the value of a list type attribute */ - public BuildRuleBuilder setMultiValueAttribute(String attrName, String... value) { - Preconditions.checkState(!multiValueAttributes.containsKey(attrName), - "attribute '" + attrName + "' already set"); - multiValueAttributes.put(attrName, Lists.newArrayList(value)); + public BuildRuleBuilder addMultiValueAttributes(String attrName, String... value) { + multiValueAttributes.putAll(attrName, Lists.newArrayList(value)); return this; } /** - * Set the srcs attribute. - */ - public BuildRuleBuilder setSources(String... sources) { - return setMultiValueAttribute("srcs", sources); - } - - /** - * Set the deps attribute. - */ - public BuildRuleBuilder setDeps(String... deps) { - return setMultiValueAttribute("deps", deps); - } - - /** - * Set the resources attribute. - */ - public BuildRuleBuilder setResources(String... resources) { - return setMultiValueAttribute("resources", resources); - } - - /** - * Set the data attribute. - */ - public BuildRuleBuilder setData(String... data) { - return setMultiValueAttribute("data", data); - } - - /** * Generate the rule * * @return a string representation of the rule. @@ -134,7 +105,7 @@ StringBuilder sb = new StringBuilder(); sb.append(ruleClass.getName()).append("("); printNormal(sb, "name", ruleName); - for (Map.Entry<String, List<String>> entry : multiValueAttributes.entrySet()) { + for (Map.Entry<String, Collection<String>> entry : multiValueAttributes.asMap().entrySet()) { printArray(sb, entry.getKey(), entry.getValue()); } for (Map.Entry<String, Object> entry : singleValueAttributes.entrySet()) { @@ -144,7 +115,7 @@ return sb.toString(); } - private void printArray(StringBuilder sb, String attr, List<String> values) { + private void printArray(StringBuilder sb, String attr, Collection<String> values) { if (values == null || values.isEmpty()) { return; } @@ -172,7 +143,7 @@ * Turns iterable of {a b c} into string "['a', 'b', 'c']", appends to * supplied StringBuilder. */ - private void printList(StringBuilder sb, List<String> elements) { + private void printList(StringBuilder sb, Collection<String> elements) { sb.append("["); Joiner.on(",").appendTo(sb, Iterables.transform(elements, new Function<String, String>() { @@ -199,4 +170,32 @@ public Collection<BuildRuleBuilder> getRulesToGenerate() { return ImmutableList.of(); } + + /** + * Returns a {@link Dependency} of this {@link BuildRuleBuilder} using attrName. + */ + public Dependency dependsVia(String attrName) { + return new Dependency(this, attrName); + } + + /** + * Representing a {@link BuildRuleBuilder} depending on an other rule via a certain attribute. + */ + public class Dependency { + private BuildRuleBuilder buildRuleBuilder; + private String attrName; + + private Dependency(BuildRuleBuilder buildRuleBuilder, String attrName) { + this.buildRuleBuilder = buildRuleBuilder; + this.attrName = attrName; + } + + /** + * Returns this {@link BuildRuleBuilder} with a new dependency on otherRule. + */ + public BuildRuleBuilder on(BuildRuleBuilder otherRule) { + buildRuleBuilder.addMultiValueAttributes(attrName, otherRule.ruleName); + return buildRuleBuilder; + } + } }
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/BuildRuleWithDefaultsBuilder.java b/src/test/java/com/google/devtools/build/lib/testutil/BuildRuleWithDefaultsBuilder.java index 4af7ad1..042ebe3 100644 --- a/src/test/java/com/google/devtools/build/lib/testutil/BuildRuleWithDefaultsBuilder.java +++ b/src/test/java/com/google/devtools/build/lib/testutil/BuildRuleWithDefaultsBuilder.java
@@ -122,7 +122,7 @@ } if (label != null) { if (attrType == Type.LABEL_LIST || attrType == Type.OUTPUT_LIST) { - setMultiValueAttribute(attribute.getName(), label); + addMultiValueAttributes(attribute.getName(), label); } else { setSingleValueAttribute(attribute.getName(), label); } @@ -152,7 +152,7 @@ } public BuildRuleWithDefaultsBuilder popuplateStringListAttribute(Attribute attribute) { - setMultiValueAttribute(attribute.getName(), "x"); + addMultiValueAttributes(attribute.getName(), "x"); return this; }