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() {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObjectConstructor.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObjectConstructor.java
index 7666e2c..0854822 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObjectConstructor.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObjectConstructor.java
@@ -60,14 +60,14 @@
}
/**
- * Create a native Declared Provider({@link SkylarkClassObject} constructor)
+ * Create a native Declared Provider ({@link SkylarkClassObject} constructor)
*/
public static SkylarkClassObjectConstructor createNative(String name) {
return new SkylarkClassObjectConstructor(name);
}
/**
- * Create a Skylark-defined Declared Provider({@link SkylarkClassObject} constructor)
+ * Create a Skylark-defined Declared Provider ({@link SkylarkClassObject} constructor)
*
* Needs to be exported later.
*/
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java
index 190a46b..776dfa6 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkNativeModule.java
@@ -43,7 +43,6 @@
+ "The following functions are also available:")
public class SkylarkNativeModule {
- // TODO(bazel-team): shouldn't we return a SkylarkList instead?
@SkylarkSignature(
name = "glob",
objectType = SkylarkNativeModule.class,