summaryrefslogtreecommitdiffstats
path: root/abi-check-plugin/src/test/java/com/yahoo/abicheck/mojo/AbiCheckTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'abi-check-plugin/src/test/java/com/yahoo/abicheck/mojo/AbiCheckTest.java')
-rw-r--r--abi-check-plugin/src/test/java/com/yahoo/abicheck/mojo/AbiCheckTest.java47
1 files changed, 47 insertions, 0 deletions
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");
+ }
}