Merge "Add mockito-inline for host tests" am: e64ea0b85e am: 2f4a87c5c2
am: 3fb6123bd1

Change-Id: Idd26b2685f681dab1274b171cc6b9b3d3d73acec
diff --git a/Android.bp b/Android.bp
index 257539c..03d57ee 100644
--- a/Android.bp
+++ b/Android.bp
@@ -67,6 +67,13 @@
     sdk_version: "16",
 }
 
+// Compatibility library for old name of host target
+java_library_host {
+    name: "mockito-inline",
+    static_libs: ["mockito"],
+    java_resource_dirs: ["subprojects/inline/src/main/resources"],
+}
+
 // Main target for dependent projects. Bundles all the run-time dependencies
 // needed to run Mockito tests on the device.
 java_library_static {
diff --git a/subprojects/inline/inline.gradle b/subprojects/inline/inline.gradle
new file mode 100644
index 0000000..be10361
--- /dev/null
+++ b/subprojects/inline/inline.gradle
@@ -0,0 +1,10 @@
+description = "Mockito preconfigured inline mock maker (intermediate and to be superseeded by automatic usage in a future version)"
+
+apply from: "$rootDir/gradle/java-library.gradle"
+
+dependencies {
+    compile project.rootProject
+    testCompile libraries.junit4
+}
+
+tasks.javadoc.enabled = false
diff --git a/subprojects/inline/src/main/resources/mockito-extensions/org.mockito.plugins.MockMaker b/subprojects/inline/src/main/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000..ca6ee9c
--- /dev/null
+++ b/subprojects/inline/src/main/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline
\ No newline at end of file
diff --git a/subprojects/inline/src/test/java/org/mockitoinline/FinalClassMockingTest.java b/subprojects/inline/src/test/java/org/mockitoinline/FinalClassMockingTest.java
new file mode 100644
index 0000000..0f2ea78
--- /dev/null
+++ b/subprojects/inline/src/test/java/org/mockitoinline/FinalClassMockingTest.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2017 Mockito contributors
+ * This program is made available under the terms of the MIT License.
+ */
+package org.mockitoinline;
+
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class FinalClassMockingTest {
+
+    @Test
+    public void no_exception_while_mocking_final_class() throws Exception {
+        Mockito.mock(FinalClass.class);
+    }
+
+    private static final class FinalClass {
+
+    }
+
+}
diff --git a/subprojects/inline/src/test/java/org/mockitoinline/PluginTest.java b/subprojects/inline/src/test/java/org/mockitoinline/PluginTest.java
new file mode 100644
index 0000000..19526db
--- /dev/null
+++ b/subprojects/inline/src/test/java/org/mockitoinline/PluginTest.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2017 Mockito contributors
+ * This program is made available under the terms of the MIT License.
+ */
+package org.mockitoinline;
+
+import org.junit.Test;
+import org.mockito.internal.configuration.plugins.Plugins;
+import org.mockito.internal.creation.bytebuddy.InlineByteBuddyMockMaker;
+
+import static org.junit.Assert.*;
+
+public class PluginTest {
+
+    @Test
+    public void plugin_type_should_be_inline() throws Exception {
+        assertTrue(Plugins.getMockMaker() instanceof InlineByteBuddyMockMaker);
+    }
+
+}
diff --git a/subprojects/inline/src/test/java/org/mockitoinline/StubbingLocationTest.java b/subprojects/inline/src/test/java/org/mockitoinline/StubbingLocationTest.java
new file mode 100644
index 0000000..8476006
--- /dev/null
+++ b/subprojects/inline/src/test/java/org/mockitoinline/StubbingLocationTest.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2017 Mockito contributors
+ * This program is made available under the terms of the MIT License.
+ */
+package org.mockitoinline;
+
+import java.util.Collections;
+import java.util.Set;
+import org.junit.Test;
+import org.mockito.internal.invocation.finder.AllInvocationsFinder;
+import org.mockito.stubbing.Stubbing;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class StubbingLocationTest {
+
+    @Test
+    public void stubbing_location_should_be_the_correct_point() {
+        ConcreteClass mock = mock(ConcreteClass.class);
+        String frame;
+        // Initializing 'frame' at the method parameter point is to gain the exact line number of the stubbing point.
+        when(mock.concreteMethod(frame = Thread.currentThread().getStackTrace()[1].toString())).thenReturn("");
+        mock.concreteMethod(frame);
+        Set<Stubbing> stubbings = AllInvocationsFinder.findStubbings(Collections.singleton(mock));
+        assertEquals(1, stubbings.size());
+        String location = stubbings.iterator().next().getInvocation().getLocation().toString();
+        assertEquals("-> at " + frame, location);
+    }
+
+    static final class ConcreteClass {
+        String concreteMethod(String s) {
+            throw new RuntimeException(s);
+        }
+    }
+
+}
diff --git a/update_source.sh b/update_source.sh
index 122fb3b..12f1a36 100755
--- a/update_source.sh
+++ b/update_source.sh
@@ -25,6 +25,7 @@
     LICENSE
     src
     subprojects/android
+    subprojects/inline
     "
 
 EXCLUDE="