Add an AnalysisMock for Bazel; all the analysis action tests pass.
Change-Id: I83a280d53272972bace811b1493825b5dc48a4d2
--
MOS_MIGRATED_REVID=87608375
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BazelAnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/BazelAnalysisMock.java
new file mode 100644
index 0000000..be20313
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/analysis/BazelAnalysisMock.java
@@ -0,0 +1,89 @@
+// Copyright 2015 Google Inc. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.analysis;
+
+import com.google.common.base.Functions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.io.ByteStreams;
+import com.google.devtools.build.lib.analysis.config.ConfigurationFactory;
+import com.google.devtools.build.lib.analysis.util.AnalysisMock;
+import com.google.devtools.build.lib.bazel.rules.BazelConfiguration;
+import com.google.devtools.build.lib.bazel.rules.BazelConfigurationCollection;
+import com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider;
+import com.google.devtools.build.lib.packages.util.MockToolsConfig;
+import com.google.devtools.build.lib.rules.cpp.CppConfigurationLoader;
+import com.google.devtools.build.lib.rules.java.JavaConfigurationLoader;
+import com.google.devtools.build.lib.rules.java.JvmConfigurationLoader;
+import com.google.devtools.build.lib.rules.objc.ObjcConfigurationLoader;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.Collection;
+
+public class BazelAnalysisMock extends AnalysisMock {
+ public static final AnalysisMock INSTANCE = new BazelAnalysisMock();
+
+ @Override
+ public void setupMockClient(MockToolsConfig config) throws IOException {
+ config.create("tools/jdk/BUILD",
+ "package(default_visibility=['//visibility:public'])",
+ "java_toolchain(name = 'toolchain', encoding = 'UTF-8', source_version = '8', ",
+ " target_version = '8')",
+ "filegroup(name = 'jdk-null')",
+ "filegroup(name = 'jdk-default', srcs = [':java'], path = 'jdk/jre')",
+ "filegroup(name = 'jdk', srcs = [':jdk-default', ':jdk-null'])",
+ "filegroup(name='langtools', srcs=['jdk/lib/tools.jar'])",
+ "filegroup(name='bootclasspath', srcs=['jdk/jre/lib/rt.jar'])",
+ "filegroup(name='java', srcs = ['jdk/jre/bin/java'])",
+ "exports_files(['JavaBuilder_deploy.jar','SingleJar_deploy.jar',",
+ " 'JavaBuilderCanary_deploy.jar', 'ijar'])");
+ config.create("tools/cpp/BUILD",
+ "filegroup(name = 'toolchain', srcs = [':cc-compiler-local', ':empty'])",
+ "cc_toolchain(name = 'cc-compiler-local', all_files = ':empty', compiler_files = ':empty',",
+ "cpu = 'local', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ",
+ " linker_files = ':empty',",
+ "objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',)",
+ "cc_toolchain(name = 'cc-compiler-darwin', all_files = ':empty', ",
+ " compiler_files = ':empty',",
+ "cpu = 'local', dwp_files = ':empty', dynamic_runtime_libs = [':empty'], ",
+ " linker_files = ':empty',",
+ "objcopy_files = ':empty', static_runtime_libs = [':empty'], strip_files = ':empty',)");
+ config.create("tools/cpp/CROSSTOOL", readFromResources("MOCK_CROSSTOOL"));
+ }
+
+ public static String readFromResources(String filename) {
+ try (InputStream in = BazelAnalysisMock.class.getClassLoader().getResourceAsStream(filename)) {
+ return new String(ByteStreams.toByteArray(in), StandardCharsets.UTF_8);
+ } catch (IOException e) {
+ // This should never happen.
+ throw new AssertionError(e);
+ }
+ }
+
+ @Override
+ public ConfigurationFactory createConfigurationFactory() {
+ return new ConfigurationFactory(new BazelConfigurationCollection(),
+ new BazelConfiguration.Loader(),
+ new CppConfigurationLoader(Functions.<String>identity()),
+ new JvmConfigurationLoader(BazelRuleClassProvider.JAVA_CPU_SUPPLIER),
+ new JavaConfigurationLoader(BazelRuleClassProvider.JAVA_CPU_SUPPLIER),
+ new ObjcConfigurationLoader());
+ }
+
+ @Override
+ public Collection<String> getOptionOverrides() {
+ return ImmutableList.of();
+ }
+}
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockToolsConfig.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockToolsConfig.java
index fcf9b6f..0ea49bf 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockToolsConfig.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockToolsConfig.java
@@ -48,7 +48,9 @@
@Nullable Path runfilesDirectoryOpt) {
this.rootDirectory = rootDirectory;
this.realFileSystem = realFileSystem;
- if (runfilesDirectoryOpt == null) {
+ if (!realFileSystem) {
+ this.runfilesDirectory = null;
+ } else if (runfilesDirectoryOpt == null) {
this.runfilesDirectory = rootDirectory.getRelative(BlazeTestUtils.runfilesDir());
} else {
this.runfilesDirectory = runfilesDirectoryOpt;
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 28ca6bf..85205a6 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
@@ -44,7 +44,8 @@
/**
* Name of a class with an INSTANCE field of type AnalysisMock to be used for analysis tests.
*/
- public static final String TEST_ANALYSIS_MOCK = "DOES-NOT-WORK-YET";
+ public static final String TEST_ANALYSIS_MOCK =
+ "com.google.devtools.build.lib.analysis.BazelAnalysisMock";
/**
* Directory where we can find bazel's Java tests, relative to a test's runfiles directory.