Replace `createMock(BuildableContext.class)` with `new FakeBuildableContext()`. 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/android/DexProducedFromJavaLibraryThatContainsClassFilesTest.java b/test/com/facebook/buck/android/DexProducedFromJavaLibraryThatContainsClassFilesTest.java index 4d2f5bf..84e62f6 100644 --- a/test/com/facebook/buck/android/DexProducedFromJavaLibraryThatContainsClassFilesTest.java +++ b/test/com/facebook/buck/android/DexProducedFromJavaLibraryThatContainsClassFilesTest.java
@@ -27,7 +27,7 @@ import com.facebook.buck.model.BuildTarget; import com.facebook.buck.rules.AbiRule; import com.facebook.buck.rules.BuildContext; -import com.facebook.buck.rules.BuildableContext; +import com.facebook.buck.rules.FakeBuildableContext; import com.facebook.buck.rules.Sha1HashCode; import com.facebook.buck.step.ExecutionContext; import com.facebook.buck.step.Step; @@ -62,7 +62,7 @@ expect(accumulateClassNames.getJavaLibraryRule()).andReturn(javaLibraryRule); BuildContext context = createMock(BuildContext.class); - BuildableContext buildableContext = createMock(BuildableContext.class); + FakeBuildableContext buildableContext = new FakeBuildableContext(); replayAll(); @@ -107,16 +107,19 @@ verifyAll(); resetAll(); - buildableContext.recordArtifact(Paths.get("bar.dex.jar")); Sha1HashCode abiKey = new Sha1HashCode("f7f34ed13b881c6c6f663533cde4a436ea84435e"); expect(accumulateClassNames.getAbiKey()).andReturn(abiKey); - buildableContext.addMetadata(AbiRule.ABI_KEY_FOR_DEPS_ON_DISK_METADATA, abiKey.getHash()); - buildableContext.addMetadata(AbiRule.ABI_KEY_ON_DISK_METADATA, abiKey.getHash()); replayAll(); Step recordArtifactAndMetadataStep = steps.get(3); int exitCode = recordArtifactAndMetadataStep.execute(executionContext); assertEquals(0, exitCode); + assertTrue("The generated .dex.jar file should be in the set of recorded artifacts.", + buildableContext.getRecordedArtifacts().contains(Paths.get("bar.dex.jar"))); + buildableContext.assertContainsMetadataMapping(AbiRule.ABI_KEY_FOR_DEPS_ON_DISK_METADATA, + abiKey.getHash()); + buildableContext.assertContainsMetadataMapping(AbiRule.ABI_KEY_ON_DISK_METADATA, + abiKey.getHash()); verifyAll(); } @@ -128,7 +131,7 @@ ImmutableSortedMap.<String, HashCode>of()); BuildContext context = createMock(BuildContext.class); - BuildableContext buildableContext = createMock(BuildableContext.class); + FakeBuildableContext buildableContext = new FakeBuildableContext(); replayAll(); @@ -165,13 +168,15 @@ Sha1HashCode abiKey = new Sha1HashCode(AbiWriterProtocol.EMPTY_ABI_KEY); expect(accumulateClassNames.getAbiKey()).andReturn(abiKey); - buildableContext.addMetadata(AbiRule.ABI_KEY_FOR_DEPS_ON_DISK_METADATA, abiKey.getHash()); - buildableContext.addMetadata(AbiRule.ABI_KEY_ON_DISK_METADATA, abiKey.getHash()); replayAll(); Step recordArtifactAndMetadataStep = steps.get(2); int exitCode = recordArtifactAndMetadataStep.execute(executionContext); assertEquals(0, exitCode); + buildableContext.assertContainsMetadataMapping(AbiRule.ABI_KEY_FOR_DEPS_ON_DISK_METADATA, + abiKey.getHash()); + buildableContext.assertContainsMetadataMapping(AbiRule.ABI_KEY_ON_DISK_METADATA, + abiKey.getHash()); verifyAll(); }
diff --git a/test/com/facebook/buck/java/AccumulateClassNamesTest.java b/test/com/facebook/buck/java/AccumulateClassNamesTest.java index 9c1dbcf..1a20f62 100644 --- a/test/com/facebook/buck/java/AccumulateClassNamesTest.java +++ b/test/com/facebook/buck/java/AccumulateClassNamesTest.java
@@ -28,8 +28,8 @@ import com.facebook.buck.rules.BuildRule; import com.facebook.buck.rules.BuildRuleResolver; import com.facebook.buck.rules.BuildRuleType; -import com.facebook.buck.rules.BuildableContext; import com.facebook.buck.rules.FakeAbstractBuildRuleBuilderParams; +import com.facebook.buck.rules.FakeBuildableContext; import com.facebook.buck.rules.OnDiskBuildInfo; import com.facebook.buck.rules.Sha1HashCode; import com.facebook.buck.step.ExecutionContext; @@ -88,7 +88,7 @@ // Mock out objects so getBuildSteps() can be invoked. BuildContext buildContext = createMock(BuildContext.class); - BuildableContext buildableContext = createMock(BuildableContext.class); + FakeBuildableContext buildableContext = new FakeBuildableContext(); // Create the build steps. replayAll(); @@ -119,20 +119,16 @@ ImmutableSortedMap<String, HashCode> classNames = ImmutableSortedMap.of(); accumulateClassNamesStep.setClassNamesForTesting(classNames); - resetAll(); - String expectedAbiKey = AbiWriterProtocol.EMPTY_ABI_KEY; - buildableContext.addMetadata(AbiRule.ABI_KEY_ON_DISK_METADATA, expectedAbiKey); - replayAll(); - // Invoke the recordAbiStep and ensure the correct data is recorded. Step recordAbiStep = steps.get(3); int exitCode = recordAbiStep.execute(context); + String expectedAbiKey = AbiWriterProtocol.EMPTY_ABI_KEY; + buildableContext.assertContainsMetadataMapping(AbiRule.ABI_KEY_ON_DISK_METADATA, + expectedAbiKey); assertEquals(0, exitCode); assertEquals("Should be the empty ABI key because the classNames map is empty.", new Sha1HashCode(expectedAbiKey), accumulateClassNames.getAbiKey()); - - verifyAll(); } @Test
diff --git a/test/com/facebook/buck/rules/BUCK b/test/com/facebook/buck/rules/BUCK index 7ee4b12..160c7e5 100644 --- a/test/com/facebook/buck/rules/BUCK +++ b/test/com/facebook/buck/rules/BUCK
@@ -14,6 +14,7 @@ deps = [ '//lib:guava', '//lib:jsr305', + '//lib:junit', '//src/com/facebook/buck/model:model', '//src/com/facebook/buck/parser:rule_pattern', '//src/com/facebook/buck/rules:build_rule',
diff --git a/test/com/facebook/buck/rules/FakeBuildableContext.java b/test/com/facebook/buck/rules/FakeBuildableContext.java index 1a90c48..f932fbf 100644 --- a/test/com/facebook/buck/rules/FakeBuildableContext.java +++ b/test/com/facebook/buck/rules/FakeBuildableContext.java
@@ -16,6 +16,10 @@ package com.facebook.buck.rules; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; @@ -58,4 +62,11 @@ public ImmutableSet<Path> getRecordedArtifacts() { return ImmutableSet.copyOf(artifacts); } + + public void assertContainsMetadataMapping(String key, String value) { + assertNotNull(key); + assertNotNull(value); + assertTrue(metadata.containsKey(key)); + assertEquals(value, metadata.get(key)); + } }