Merge "Update dexmaker"
am: e0c976f125
Change-Id: I7394d5286715bad744e1cfcedbe7f183bbd4436e
diff --git a/README.version b/README.version
index ce2cdcd..29832cf 100644
--- a/README.version
+++ b/README.version
@@ -1,5 +1,5 @@
URL: https://github.com/linkedin/dexmaker/
-Version: master (d4959c215e3e2a92b478ddc72a2692cb40f3efd3)
+Version: master (fce01046a9519f8c1e5fd826fe5169eb600710ad)
License: Apache 2.0
Description:
Dexmaker is a Java-language API for doing compile time or runtime code generation targeting the Dalvik VM. Unlike cglib or ASM, this library creates Dalvik .dex files instead of Java .class files.
diff --git a/dexmaker-mockito-inline-tests/src/androidTest/java/com/android/dx/mockito/tests b/dexmaker-mockito-inline-tests/src/androidTest/java/com/android/dx/mockito/tests
new file mode 120000
index 0000000..f13e9f0
--- /dev/null
+++ b/dexmaker-mockito-inline-tests/src/androidTest/java/com/android/dx/mockito/tests
@@ -0,0 +1 @@
+../../../../../../../../dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests
\ No newline at end of file
diff --git a/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/DexmakerStackTraceCleaner.java b/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/DexmakerStackTraceCleaner.java
index 2757a9e..883f77b 100644
--- a/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/DexmakerStackTraceCleaner.java
+++ b/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/DexmakerStackTraceCleaner.java
@@ -39,6 +39,7 @@
&& !className.startsWith("java.lang.reflect.Proxy")
&& !(className.startsWith("com.android.dx.mockito.")
// Do not clean unit tests
+ && !className.startsWith("com.android.dx.mockito.tests")
&& !className.startsWith("com.android.dx.mockito.inline.tests"))
// dalvik interface proxies
diff --git a/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/InvocationHandlerAdapter.java b/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/InvocationHandlerAdapter.java
index 0c9af71..5d01a1e 100644
--- a/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/InvocationHandlerAdapter.java
+++ b/dexmaker-mockito-inline/src/main/java/com/android/dx/mockito/inline/InvocationHandlerAdapter.java
@@ -18,6 +18,7 @@
import org.mockito.internal.creation.DelegatingMethod;
import org.mockito.internal.debugging.LocationImpl;
+import org.mockito.internal.exceptions.VerificationAwareInvocation;
import org.mockito.internal.invocation.ArgumentsProcessor;
import org.mockito.internal.progress.SequenceNumber;
import org.mockito.invocation.Invocation;
@@ -123,7 +124,7 @@
/**
* Invocation on a proxy
*/
- private class ProxyInvocation implements Invocation {
+ private class ProxyInvocation implements Invocation, VerificationAwareInvocation {
private final Object proxy;
private final Method method;
private final Object[] rawArgs;
diff --git a/dexmaker-mockito-inline-tests/src/androidTest/java/com/android/dx/mockito/inline/tests/CleanStackTrace.java b/dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/CleanStackTrace.java
similarity index 78%
rename from dexmaker-mockito-inline-tests/src/androidTest/java/com/android/dx/mockito/inline/tests/CleanStackTrace.java
rename to dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/CleanStackTrace.java
index e90145f..81a3b95 100644
--- a/dexmaker-mockito-inline-tests/src/androidTest/java/com/android/dx/mockito/inline/tests/CleanStackTrace.java
+++ b/dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/CleanStackTrace.java
@@ -14,11 +14,12 @@
* limitations under the License.
*/
-package com.android.dx.mockito.inline.tests;
+package com.android.dx.mockito.tests;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -28,7 +29,7 @@
}
public static class TestClass {
- public final String returnA() {
+ public String returnA() {
return "A";
}
}
@@ -38,7 +39,7 @@
}
@Test
- public void cleanStackTraceProxy() {
+ public void cleanStackTraceAbstractClass() {
TestAbstractClass t = mock(TestAbstractClass.class);
try {
@@ -54,7 +55,7 @@
}
@Test
- public void cleanStackTraceInline() {
+ public void cleanStackTraceRegularClass() {
TestClass t = mock(TestClass.class);
try {
@@ -63,8 +64,15 @@
try {
throw new Exception();
} catch (Exception here) {
- assertEquals(here.getStackTrace()[0].getMethodName(), verifyLocation
- .getStackTrace()[1].getMethodName());
+ // Depending on the mock maker TestClass.returnA might be in the stack trace or not
+ for (int i = 0; i < 2; i++) {
+ if (verifyLocation.getStackTrace()[i].getMethodName().equals(here
+ .getStackTrace()[0].getMethodName())) {
+ return;
+ }
+ }
+
+ fail();
}
}
}
diff --git a/dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/MockTests.java b/dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/GeneralMocking.java
similarity index 74%
rename from dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/MockTests.java
rename to dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/GeneralMocking.java
index 1102b71..6f824f2 100644
--- a/dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/MockTests.java
+++ b/dexmaker-mockito-tests/src/androidTest/java/com/android/dx/mockito/tests/GeneralMocking.java
@@ -20,17 +20,18 @@
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.exceptions.base.MockitoException;
+import org.mockito.exceptions.verification.NoInteractionsWanted;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
@RunWith(AndroidJUnit4.class)
-public class MockTests {
+public class GeneralMocking {
public static class TestClass {
public String returnA() {
return "A";
@@ -86,34 +87,23 @@
}
@Test
- public void cleanStackTraceProxy() {
+ public void verifyAdditionalInvocations() {
TestClass t = mock(TestClass.class);
+ t.returnA();
+ t.returnA();
+
try {
- verify(t).returnA();
- } catch (Throwable verifyLocation) {
+ verifyNoMoreInteractions(t);
+ } catch (NoInteractionsWanted e) {
try {
throw new Exception();
} catch (Exception here) {
- assertEquals(here.getStackTrace()[0].getMethodName(), verifyLocation
- .getStackTrace()[0].getMethodName());
+ // The error message should indicate where the additional invocations have been made
+ assertTrue(e.getMessage(),
+ e.getMessage().contains(here.getStackTrace()[0].getMethodName()));
}
- }
- }
- @Test
- public void cleanStackTraceInterface() {
- TestInterface t = mock(TestInterface.class);
-
- try {
- verify(t).returnA();
- } catch (Throwable verifyLocation) {
- try {
- throw new Exception();
- } catch (Exception here) {
- assertEquals(here.getStackTrace()[0].getMethodName(), verifyLocation
- .getStackTrace()[0].getMethodName());
- }
}
}
}
diff --git a/dexmaker-mockito/src/main/java/com/android/dx/mockito/InvocationHandlerAdapter.java b/dexmaker-mockito/src/main/java/com/android/dx/mockito/InvocationHandlerAdapter.java
index 6a6dc72..bab9265 100644
--- a/dexmaker-mockito/src/main/java/com/android/dx/mockito/InvocationHandlerAdapter.java
+++ b/dexmaker-mockito/src/main/java/com/android/dx/mockito/InvocationHandlerAdapter.java
@@ -20,6 +20,7 @@
import org.mockito.internal.creation.DelegatingMethod;
import org.mockito.internal.debugging.LocationImpl;
+import org.mockito.internal.exceptions.VerificationAwareInvocation;
import org.mockito.internal.invocation.ArgumentsProcessor;
import org.mockito.internal.progress.SequenceNumber;
import org.mockito.invocation.Invocation;
@@ -80,7 +81,7 @@
/**
* Invocation on a proxy
*/
- private class ProxyInvocation implements Invocation {
+ private class ProxyInvocation implements Invocation, VerificationAwareInvocation {
private final Object proxy;
private final Method method;
private final Object[] rawArgs;