Replace `createMock(OnDiskBuildInfo.class)` with `new FakeOnDiskBuildInfo()`.
Summary: As promised, I am trying to address my abuse of mocks by replacing them with fakes.
Test Plan: Sandcastle builds.
diff --git a/test/com/facebook/buck/java/AccumulateClassNamesTest.java b/test/com/facebook/buck/java/AccumulateClassNamesTest.java
index 8354b73..87a7c83 100644
--- a/test/com/facebook/buck/java/AccumulateClassNamesTest.java
+++ b/test/com/facebook/buck/java/AccumulateClassNamesTest.java
@@ -30,6 +30,7 @@
import com.facebook.buck.rules.BuildRuleType;
import com.facebook.buck.rules.FakeAbstractBuildRuleBuilderParams;
import com.facebook.buck.rules.FakeBuildableContext;
+import com.facebook.buck.rules.FakeOnDiskBuildInfo;
import com.facebook.buck.rules.OnDiskBuildInfo;
import com.facebook.buck.rules.Sha1HashCode;
import com.facebook.buck.step.ExecutionContext;
@@ -37,7 +38,6 @@
import com.facebook.buck.step.TestExecutionContext;
import com.facebook.buck.testutil.MoreAsserts;
import com.facebook.buck.util.ProjectFilesystem;
-import com.google.common.base.Optional;
import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedMap;
@@ -135,17 +135,17 @@
public void testInitializeFromDisk() throws IOException {
BuildTarget buildTarget = new BuildTarget("//foo", "bar");
JavaLibraryRule javaRule = new FakeJavaLibraryRule(buildTarget);
-
AccumulateClassNames accumulateClassNames = new AccumulateClassNames(buildTarget, javaRule);
- OnDiskBuildInfo onDiskBuildInfo = createMock(OnDiskBuildInfo.class);
+ ProjectFilesystem projectFilesystem = createMock(ProjectFilesystem.class);
List<String> lines = ImmutableList.of(
"com/example/Bar 087b7707a5f8e0a2adf5652e3cd2072d89a197dc",
"com/example/Baz 62b1c2510840c0de55c13f66065a98a719be0f19",
"com/example/Foo e4fccb7520b7795e632651323c63217c9f59f72a");
- expect(onDiskBuildInfo.getOutputFileContentsByLine(accumulateClassNames)).andReturn(lines);
- expect(onDiskBuildInfo.getHash(AbiRule.ABI_KEY_ON_DISK_METADATA))
- .andReturn(Optional.of(new Sha1HashCode("f7d6d1efa11c8ceef36cc56b0ec6c3a20ddbf19f")));
+ expect(projectFilesystem.readLines(Paths.get("buck-out/gen/foo/bar.classes.txt")))
+ .andReturn(lines);
+ OnDiskBuildInfo onDiskBuildInfo = new FakeOnDiskBuildInfo(buildTarget, projectFilesystem)
+ .putMetadata(AbiRule.ABI_KEY_ON_DISK_METADATA, "f7d6d1efa11c8ceef36cc56b0ec6c3a20ddbf19f");
replayAll();
accumulateClassNames.initializeFromDisk(onDiskBuildInfo);
diff --git a/test/com/facebook/buck/rules/AbstractCachingBuildRuleTest.java b/test/com/facebook/buck/rules/AbstractCachingBuildRuleTest.java
index 57f7ce4..fc17c2c 100644
--- a/test/com/facebook/buck/rules/AbstractCachingBuildRuleTest.java
+++ b/test/com/facebook/buck/rules/AbstractCachingBuildRuleTest.java
@@ -165,8 +165,8 @@
expect(context.getProjectRoot()).andReturn(createMock(Path.class));
// Configure the OnDiskBuildInfo.
- OnDiskBuildInfo onDiskBuildInfo = createMock(OnDiskBuildInfo.class);
- expect(onDiskBuildInfo.getRuleKey()).andReturn(Optional.<RuleKey>absent());
+ ProjectFilesystem projectFilesystem = createMock(ProjectFilesystem.class);
+ OnDiskBuildInfo onDiskBuildInfo = new FakeOnDiskBuildInfo(buildTarget, projectFilesystem);
expect(context.createOnDiskBuildInfoFor(buildTarget)).andReturn(onDiskBuildInfo);
// Configure the BuildInfoRecorder.
@@ -248,19 +248,20 @@
/* ruleKeyWithoutDeps */ capture(new Capture<RuleKey>())))
.andReturn(buildInfoRecorder);
+ ProjectFilesystem projectFilesystem = createMock(ProjectFilesystem.class);
// Populate the metadata that should be read from disk.
- OnDiskBuildInfo onDiskBuildInfo = createMock(OnDiskBuildInfo.class);
- // The RuleKey on disk should be different from the current RuleKey in memory, so reverse() it.
- expect(onDiskBuildInfo.getRuleKey()).andReturn(
- Optional.of(reverse(buildRule.getRuleKey())));
- // However, the RuleKey not including the deps in memory should be the same as the one on disk.
- expect(onDiskBuildInfo.getRuleKeyWithoutDeps()).andReturn(
- Optional.of(new RuleKey(TestAbstractCachingBuildRule.RULE_KEY_WITHOUT_DEPS_HASH)));
- // Similarly, the ABI key for the deps in memory should be the same as the one on disk.
- expect(onDiskBuildInfo.getHash(AbiRule.ABI_KEY_FOR_DEPS_ON_DISK_METADATA)).andReturn(
- Optional.of(new Sha1HashCode(TestAbstractCachingBuildRule.ABI_KEY_FOR_DEPS_HASH)));
- expect(onDiskBuildInfo.getValue(AbiRule.ABI_KEY_ON_DISK_METADATA)).andReturn(
- Optional.of("At some point, this method call should go away."));
+ OnDiskBuildInfo onDiskBuildInfo = new FakeOnDiskBuildInfo(buildTarget, projectFilesystem)
+ // The RuleKey on disk should be different from the current RuleKey in memory, so reverse()
+ // it.
+ .setRuleKey(reverse(buildRule.getRuleKey()))
+ // However, the RuleKey not including the deps in memory should be the same as the one on
+ // disk.
+ .setRuleKeyWithoutDeps(new RuleKey(TestAbstractCachingBuildRule.RULE_KEY_WITHOUT_DEPS_HASH))
+ // Similarly, the ABI key for the deps in memory should be the same as the one on disk.
+ .putMetadata(AbiRule.ABI_KEY_FOR_DEPS_ON_DISK_METADATA,
+ TestAbstractCachingBuildRule.ABI_KEY_FOR_DEPS_HASH)
+ .putMetadata(AbiRule.ABI_KEY_ON_DISK_METADATA,
+ "At some point, this method call should go away.");
// This metadata must be added to the buildInfoRecorder so that it is written as part of
// writeMetadataToDisk().
diff --git a/test/com/facebook/buck/rules/BUCK b/test/com/facebook/buck/rules/BUCK
index 5c72a7e..f8eefad 100644
--- a/test/com/facebook/buck/rules/BUCK
+++ b/test/com/facebook/buck/rules/BUCK
@@ -7,6 +7,7 @@
'FakeBuildableContext.java',
'FakeBuildRule.java',
'FakeBuildRuleParams.java',
+ 'FakeOnDiskBuildInfo.java',
'FakeRuleKeyBuilderFactory.java',
'FakeTestRule.java',
'NonCheckingBuildRuleFactoryParams.java',
diff --git a/test/com/facebook/buck/rules/FakeOnDiskBuildInfo.java b/test/com/facebook/buck/rules/FakeOnDiskBuildInfo.java
new file mode 100644
index 0000000..99926ae
--- /dev/null
+++ b/test/com/facebook/buck/rules/FakeOnDiskBuildInfo.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2013-present Facebook, Inc.
+ *
+ * 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.facebook.buck.rules;
+
+import com.facebook.buck.model.BuildTarget;
+import com.facebook.buck.util.ProjectFilesystem;
+import com.google.common.base.Optional;
+import com.google.common.collect.Maps;
+
+import java.util.Map;
+
+import javax.annotation.Nullable;
+
+public class FakeOnDiskBuildInfo extends OnDiskBuildInfo {
+
+ @Nullable private RuleKey ruleKey;
+ @Nullable private RuleKey ruleKeyWithoutDeps;
+ private Map<String, String> metadata = Maps.newHashMap();
+
+ public FakeOnDiskBuildInfo(BuildTarget target, ProjectFilesystem projectFilesystem) {
+ super(target, projectFilesystem);
+ }
+
+ /** @return this */
+ public FakeOnDiskBuildInfo setRuleKey(@Nullable RuleKey ruleKey) {
+ this.ruleKey = ruleKey;
+ return this;
+ }
+
+ @Override
+ public Optional<RuleKey> getRuleKey() {
+ return Optional.fromNullable(ruleKey);
+ }
+
+ /** @return this */
+ public FakeOnDiskBuildInfo setRuleKeyWithoutDeps(@Nullable RuleKey ruleKeyWithoutDeps) {
+ this.ruleKeyWithoutDeps = ruleKeyWithoutDeps;
+ return this;
+ }
+
+ @Override
+ public Optional<RuleKey> getRuleKeyWithoutDeps() {
+ return Optional.fromNullable(ruleKeyWithoutDeps);
+ }
+
+ /** @return this */
+ public FakeOnDiskBuildInfo putMetadata(String key, String value) {
+ this.metadata.put(key, value);
+ return this;
+ }
+
+ @Override
+ public Optional<String> getValue(String key) {
+ return Optional.fromNullable(metadata.get(key));
+ }
+}