diff options
Diffstat (limited to 'abi-check-plugin/src')
-rw-r--r-- | abi-check-plugin/src/main/java/com/yahoo/abicheck/mojo/AbiCheck.java | 12 | ||||
-rw-r--r-- | abi-check-plugin/src/test/java/com/yahoo/abicheck/mojo/AbiCheckTest.java | 47 |
2 files changed, 53 insertions, 6 deletions
diff --git a/abi-check-plugin/src/main/java/com/yahoo/abicheck/mojo/AbiCheck.java b/abi-check-plugin/src/main/java/com/yahoo/abicheck/mojo/AbiCheck.java index 345a0aa194e..bd52bcfa1ad 100644 --- a/abi-check-plugin/src/main/java/com/yahoo/abicheck/mojo/AbiCheck.java +++ b/abi-check-plugin/src/main/java/com/yahoo/abicheck/mojo/AbiCheck.java @@ -166,7 +166,7 @@ public class AbiCheck extends AbstractMojo { writeSpec(signatures, specFileName); } else { Map<String, JavaClassSignature> abiSpec = readSpec(specFileName); - if (!compareSignatures(abiSpec, signatures)) { + if (!compareSignatures(abiSpec, signatures, getLog())) { throw new MojoFailureException("ABI spec mismatch"); } } @@ -175,11 +175,11 @@ public class AbiCheck extends AbstractMojo { } } - private boolean compareSignatures(Map<String, JavaClassSignature> expected, - Map<String, JavaClassSignature> actual) { + static boolean compareSignatures(Map<String, JavaClassSignature> expected, + Map<String, JavaClassSignature> actual, Log log) { return SetMatcher.compare(expected.keySet(), actual.keySet(), - item -> matchingClasses(item, expected.get(item), actual.get(item), getLog()), - item -> getLog().error(String.format("Missing class: %s", item)), - item -> getLog().error(String.format("Extra class: %s", item))); + item -> matchingClasses(item, expected.get(item), actual.get(item), log), + item -> log.error(String.format("Missing class: %s", item)), + item -> log.error(String.format("Extra class: %s", item))); } } diff --git a/abi-check-plugin/src/test/java/com/yahoo/abicheck/mojo/AbiCheckTest.java b/abi-check-plugin/src/test/java/com/yahoo/abicheck/mojo/AbiCheckTest.java index 57fc607346c..4de6f186800 100644 --- a/abi-check-plugin/src/test/java/com/yahoo/abicheck/mojo/AbiCheckTest.java +++ b/abi-check-plugin/src/test/java/com/yahoo/abicheck/mojo/AbiCheckTest.java @@ -3,8 +3,10 @@ package com.yahoo.abicheck.mojo; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import com.google.common.collect.ImmutableMap; import com.yahoo.abicheck.Public; import com.yahoo.abicheck.classtree.ClassFileTree; import com.yahoo.abicheck.signature.JavaClassSignature; @@ -12,6 +14,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.Map; +import org.apache.maven.plugin.logging.Log; import org.junit.jupiter.api.Test; import root.Root; import root.sub.Sub; @@ -57,4 +60,48 @@ public class AbiCheckTest { // PublicSignatureCollectorTest verifies actual signatures, no need to duplicate here } + + @Test + public void testCompareSignatures() { + Log log = mock(Log.class); + + JavaClassSignature signatureA = new JavaClassSignature( + "java.lang.Object", + Collections.emptySet(), + Collections.singletonList("public"), + Collections.singleton("public void foo()"), + Collections.singleton("public int bar")); + JavaClassSignature signatureB = new JavaClassSignature( + "java.lang.Exception", + Collections.singleton("java.lang.Runnable"), + Collections.singletonList("protected"), + Collections.singleton("public void foo(int)"), + Collections.singleton("public boolean bar")); + + Map<String, JavaClassSignature> expected = ImmutableMap.<String, JavaClassSignature>builder() + .put("test.Missing", signatureA) + .put("test.A", signatureA) + .put("test.B", signatureB) + .build(); + + Map<String, JavaClassSignature> actual = ImmutableMap.<String, JavaClassSignature>builder() + .put("test.A", signatureA) + .put("test.Extra", signatureA) + .put("test.B", signatureA) + .build(); + + assertThat(AbiCheck.compareSignatures(expected, actual, log), equalTo(false)); + + verify(log).error("Missing class: test.Missing"); + verify(log).error("Extra class: test.Extra"); + verify(log) + .error("Class test.B: Expected superclass java.lang.Exception, found java.lang.Object"); + verify(log).error("Class test.B: Missing interface java.lang.Runnable"); + verify(log).error("Class test.B: Missing attribute protected"); + verify(log).error("Class test.B: Extra attribute public"); + verify(log).error("Class test.B: Missing method public void foo(int)"); + verify(log).error("Class test.B: Extra method public void foo()"); + verify(log).error("Class test.B: Missing field public boolean bar"); + verify(log).error("Class test.B: Extra field public int bar"); + } } |