Allow custom RuleDefinitions in PackageLoadingTestCase. This enables certain tests for rules that are not implemented in the core tool, e.g. for Skylark tests. -- MOS_MIGRATED_REVID=116600082
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java index 869343a..50c7951 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java
@@ -20,6 +20,7 @@ import com.google.common.collect.Sets; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; +import com.google.devtools.build.lib.analysis.RuleDefinition; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.packages.ConstantRuleVisibility; @@ -55,6 +56,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.UUID; @@ -65,18 +67,33 @@ public abstract class PackageLoadingTestCase extends FoundationTestCase { private static final int GLOBBING_THREADS = 7; - + protected ConfiguredRuleClassProvider ruleClassProvider; protected SkyframeExecutor skyframeExecutor; @Before public final void initializeSkyframeExecutor() throws Exception { - ruleClassProvider = TestRuleClassProvider.getRuleClassProvider(); + List<RuleDefinition> extraRules = getExtraRules(); + if (!extraRules.isEmpty()) { + ConfiguredRuleClassProvider.Builder builder = new ConfiguredRuleClassProvider.Builder(); + TestRuleClassProvider.addStandardRules(builder); + for (RuleDefinition def : extraRules) { + builder.addRuleDefinition(def); + } + ruleClassProvider = builder.build(); + } else { + ruleClassProvider = TestRuleClassProvider.getRuleClassProvider(); + } skyframeExecutor = createSkyframeExecutor(getEnvironmentExtensions(), Preprocessor.Factory.Supplier.NullSupplier.INSTANCE, ConstantRuleVisibility.PUBLIC, ""); setUpSkyframe(parsePackageCacheOptions()); } + /** Allows subclasses to augment the {@link RuleDefinition}s available in this test. */ + protected List<RuleDefinition> getExtraRules() { + return ImmutableList.of(); + } + protected SkyframeExecutor createSkyframeExecutor( Iterable<EnvironmentExtension> environmentExtensions, Preprocessor.Factory.Supplier preprocessorFactorySupplier,