aboutsummaryrefslogtreecommitdiffstats
path: root/abi-check-plugin
diff options
context:
space:
mode:
authorIlpo Ruotsalainen <ilpo.ruotsalainen@oath.com>2018-11-30 17:36:25 +0100
committerIlpo Ruotsalainen <ilpo.ruotsalainen@oath.com>2018-11-30 17:36:25 +0100
commite871b324d74f1bd1f2da580dd8cad3ea9b28ae43 (patch)
treecdd3b5c12fa034b39c698a6380423ff3923355c0 /abi-check-plugin
parent17e253beea8436a2952ca5104fddde2699f042e9 (diff)
Add more unit tests.
Diffstat (limited to 'abi-check-plugin')
-rw-r--r--abi-check-plugin/src/main/java/com/yahoo/abicheck/mojo/AbiCheck.java12
-rw-r--r--abi-check-plugin/src/test/java/com/yahoo/abicheck/mojo/AbiCheckTest.java47
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");
+ }
}