aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/testutil
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/testutil')
-rw-r--r--src/test/java/com/google/devtools/build/lib/testutil/BazelPackageBuilderHelperForTesting.java70
-rw-r--r--src/test/java/com/google/devtools/build/lib/testutil/PackageFactoryBuilderFactoryForBazelUnitTests.java27
-rw-r--r--src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java2
3 files changed, 57 insertions, 42 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/BazelPackageBuilderHelperForTesting.java b/src/test/java/com/google/devtools/build/lib/testutil/BazelPackageBuilderHelperForTesting.java
index 2bd6cf6d8e..6f9cd6170f 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/BazelPackageBuilderHelperForTesting.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/BazelPackageBuilderHelperForTesting.java
@@ -17,18 +17,16 @@ import com.google.common.base.Function;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
+import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.RuleClassProvider;
import com.google.devtools.build.lib.packages.Target;
-import com.google.devtools.build.lib.skyframe.PackageFunction;
import com.google.devtools.build.lib.skyframe.packages.BazelPackageLoader;
import com.google.devtools.build.lib.skyframe.packages.PackageLoader;
import com.google.devtools.build.lib.syntax.SkylarkSemantics;
-import com.google.devtools.build.lib.vfs.Path;
-import com.google.devtools.build.lib.vfs.PathFragment;
/**
* A Package.Builder.Helper for use in tests that a sanity check with {@link BazelPackageLoader} for
@@ -36,9 +34,12 @@ import com.google.devtools.build.lib.vfs.PathFragment;
*/
public class BazelPackageBuilderHelperForTesting implements Package.Builder.Helper {
private final RuleClassProvider ruleClassProvider;
+ private final BlazeDirectories directories;
- public BazelPackageBuilderHelperForTesting(RuleClassProvider ruleClassProvider) {
+ public BazelPackageBuilderHelperForTesting(
+ RuleClassProvider ruleClassProvider, BlazeDirectories directories) {
this.ruleClassProvider = ruleClassProvider;
+ this.directories = directories;
}
@Override
@@ -66,23 +67,14 @@ public class BazelPackageBuilderHelperForTesting implements Package.Builder.Help
RuleClassProvider ruleClassProvider,
SkylarkSemantics skylarkSemantics) {
PackageIdentifier pkgId = pkg.getPackageIdentifier();
- if (pkgId.equals(Label.EXTERNAL_PACKAGE_IDENTIFIER)
- || !pkg.getPackageIdentifier().getRepository().isMain()
- || PackageFunction.isDefaultsPackage(pkg.getPackageIdentifier())) {
- // TODO(nharmata): Support these packages.
- return;
- }
- int numNameSegments = pkg.getNameFragment().segmentCount();
- PathFragment fullFilenameFragment = pkg.getFilename().asFragment();
- int numFullFilenameFragmentSegments = fullFilenameFragment.segmentCount();
- Path workspaceRoot = pkg.getFilename().getFileSystem().getPath(
- fullFilenameFragment.subFragment(
- 0,
- numFullFilenameFragmentSegments - (numNameSegments + 1)));
- PackageLoader packageLoader = BazelPackageLoader.builder(workspaceRoot)
- .setSkylarkSemantics(skylarkSemantics)
- .setRuleClassProvider(ruleClassProvider)
- .build();
+ PackageLoader packageLoader =
+ BazelPackageLoader.builder(
+ directories.getWorkspace(),
+ directories.getInstallBase(),
+ directories.getOutputBase())
+ .setSkylarkSemantics(skylarkSemantics)
+ .setRuleClassProvider(ruleClassProvider)
+ .build();
Package newlyLoadedPkg;
try {
newlyLoadedPkg = packageLoader.loadPackage(pkg.getPackageIdentifier());
@@ -97,17 +89,31 @@ public class BazelPackageBuilderHelperForTesting implements Package.Builder.Help
ImmutableSet.copyOf(
Iterables.transform(newlyLoadedPkg.getTargets().values(), TARGET_TO_LABEL));
if (!targetsInPkg.equals(targetsInNewlyLoadedPkg)) {
- throw new IllegalStateException(String.format(
- "The Package for %s had a different set of targets (<targetsInPkg> - "
- + "<targetsInNewlyLoadedPkg> = %s, <targetsInNewlyLoadedPkg> - <targetsInPkg> = %s) when "
- + "loaded normally during execution of the current test than it did when loaded via "
- + "BazelPackageLoader (done automatically by the BazelPackageBuilderHelperForTesting "
- + "hook). This either means: (i) Skyframe package loading semantics have diverged from "
- + "BazelPackageLoader semantics (ii) The test in question is doing something that "
- + "confuses BazelPackageBuilderHelperForTesting.",
- pkgId,
- Sets.difference(targetsInPkg, targetsInNewlyLoadedPkg),
- Sets.difference(targetsInNewlyLoadedPkg, targetsInPkg)));
+ Sets.SetView<Label> unsatisfied = Sets.difference(targetsInPkg, targetsInNewlyLoadedPkg);
+ if (pkgId.compareTo(PackageIdentifier.createInMainRepo("tools/defaults")) == 0
+ && unsatisfied.isEmpty()) {
+ // The tools/defaults package is populated from command-line options
+ // (=configuration fragments) which the user specifies in tests using
+ // BuildViewTestCase.useConfiguration().
+ // We'd like PackageLoader to work as much as possible without duplicating the entire
+ // configuration of Bazel, so we prefer not to pass these flags to PackageLoader.
+ // As a result, the contents of tools/defaults might differ.
+ // As long as PackageLoader returns a superset of what Bazel returns, everything should load
+ // fine.
+ return;
+ }
+ Sets.SetView<Label> unexpected = Sets.difference(targetsInNewlyLoadedPkg, targetsInPkg);
+ throw new IllegalStateException(
+ String.format(
+ "The Package for %s had a different set of targets (<targetsInPkg> - "
+ + "<targetsInNewlyLoadedPkg> = %s, <targetsInNewlyLoadedPkg> - <targetsInPkg> = "
+ + "%s) when loaded normally during execution of the current test than it did "
+ + "when loaded via BazelPackageLoader (done automatically by the "
+ + "BazelPackageBuilderHelperForTesting hook). This either means: (i) Skyframe "
+ + "package loading semantics have diverged from "
+ + "BazelPackageLoader semantics (ii) The test in question is doing something "
+ + "that confuses BazelPackageBuilderHelperForTesting.",
+ pkgId, unsatisfied, unexpected));
}
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/PackageFactoryBuilderFactoryForBazelUnitTests.java b/src/test/java/com/google/devtools/build/lib/testutil/PackageFactoryBuilderFactoryForBazelUnitTests.java
index 04e8e03710..5cb3772266 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/PackageFactoryBuilderFactoryForBazelUnitTests.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/PackageFactoryBuilderFactoryForBazelUnitTests.java
@@ -13,6 +13,8 @@
// limitations under the License.
package com.google.devtools.build.lib.testutil;
+import com.google.devtools.build.lib.analysis.BlazeDirectories;
+import com.google.devtools.build.lib.packages.BuilderFactoryForTesting;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.RuleClassProvider;
@@ -20,11 +22,10 @@ import com.google.devtools.build.lib.skyframe.packages.PackageFactoryBuilderWith
import com.google.devtools.build.lib.vfs.FileSystem;
/**
- * A {@link PackageFactory.BuilderFactoryForTesting} implementation that injects a
- * {@link BazelPackageBuilderHelperForTesting}.
+ * A {@link BuilderFactoryForTesting} implementation that injects a {@link
+ * BazelPackageBuilderHelperForTesting}.
*/
-class PackageFactoryBuilderFactoryForBazelUnitTests
- extends PackageFactory.BuilderFactoryForTesting {
+class PackageFactoryBuilderFactoryForBazelUnitTests implements BuilderFactoryForTesting {
static final PackageFactoryBuilderFactoryForBazelUnitTests INSTANCE =
new PackageFactoryBuilderFactoryForBazelUnitTests();
@@ -32,17 +33,25 @@ class PackageFactoryBuilderFactoryForBazelUnitTests
}
@Override
- public PackageFactoryBuilderWithSkyframeForTesting builder() {
- return new PackageFactoryBuilderForBazelUnitTests();
+ public PackageFactoryBuilderWithSkyframeForTesting builder(BlazeDirectories directories) {
+ return new PackageFactoryBuilderForBazelUnitTests(directories);
}
private static class PackageFactoryBuilderForBazelUnitTests
extends PackageFactoryBuilderWithSkyframeForTesting {
+
+ private final BlazeDirectories directories;
+
+ public PackageFactoryBuilderForBazelUnitTests(BlazeDirectories directories) {
+ this.directories = directories;
+ }
+
@Override
public PackageFactory build(RuleClassProvider ruleClassProvider, FileSystem fs) {
- Package.Builder.Helper packageBuilderHelperForTesting = doChecksForTesting
- ? new BazelPackageBuilderHelperForTesting(ruleClassProvider)
- : Package.Builder.DefaultHelper.INSTANCE;
+ Package.Builder.Helper packageBuilderHelperForTesting =
+ doChecksForTesting
+ ? new BazelPackageBuilderHelperForTesting(ruleClassProvider, directories)
+ : Package.Builder.DefaultHelper.INSTANCE;
return new PackageFactory(
ruleClassProvider,
platformSetRegexps,
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
index d7abdf6e9c..7a592463d0 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/TestConstants.java
@@ -15,7 +15,7 @@
package com.google.devtools.build.lib.testutil;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.packages.PackageFactory.BuilderFactoryForTesting;
+import com.google.devtools.build.lib.packages.BuilderFactoryForTesting;
import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;