Add an actions provider for testing Skylark rules.
The new provider gathers actions generated by any Skylark-based RuleConfiguredTarget, so long as the rule definition has _skylark_test=True set. For the moment this flag is under the user's control, but the intention is that it will be set by a test runner.
--
MOS_MIGRATED_REVID=134687396
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 53aabfa..9fcb2c4 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -476,6 +476,7 @@
private String name;
private final RuleClassType type;
private final boolean skylark;
+ private boolean skylarkTestable = false;
private boolean documented;
private boolean publicByDefault = false;
private boolean binaryOutput = true;
@@ -589,6 +590,7 @@
name,
skylark,
skylarkExecutable,
+ skylarkTestable,
documented,
publicByDefault,
binaryOutput,
@@ -662,6 +664,12 @@
return this;
}
+ public Builder setSkylarkTestable() {
+ Preconditions.checkState(skylark, "Cannot set skylarkTestable on a non-Skylark rule");
+ skylarkTestable = true;
+ return this;
+ }
+
/**
* Sets the policy for the case where the configuration is missing required fragments (see
* {@link #requiresConfigurationFragments}).
@@ -953,6 +961,7 @@
private final boolean isSkylark;
private final boolean skylarkExecutable;
+ private final boolean skylarkTestable;
private final boolean documented;
private final boolean publicByDefault;
private final boolean binaryOutput;
@@ -1063,6 +1072,7 @@
String name,
boolean isSkylark,
boolean skylarkExecutable,
+ boolean skylarkTestable,
boolean documented,
boolean publicByDefault,
boolean binaryOutput,
@@ -1086,6 +1096,7 @@
this.isSkylark = isSkylark;
this.targetKind = name + " rule";
this.skylarkExecutable = skylarkExecutable;
+ this.skylarkTestable = skylarkTestable;
this.documented = documented;
this.publicByDefault = publicByDefault;
this.binaryOutput = binaryOutput;
@@ -1886,7 +1897,7 @@
return ruleDefinitionEnvironmentHashCode;
}
- /** Returns true if this RuleClass is a skylark-defined RuleClass. */
+ /** Returns true if this RuleClass is a Skylark-defined RuleClass. */
public boolean isSkylark() {
return isSkylark;
}
@@ -1900,6 +1911,14 @@
}
/**
+ * Returns true if this RuleClass is Skylark-defined and is subject to analysis-time
+ * tests.
+ */
+ public boolean isSkylarkTestable() {
+ return skylarkTestable;
+ }
+
+ /**
* Returns true if this rule class outputs a default executable for every rule.
*/
public boolean outputsDefaultExecutable() {