Merge "Convert to Mockito: NativeDeviceTest"
diff --git a/javatests/com/android/tradefed/device/metric/LogcatOnFailureCollectorTest.java b/javatests/com/android/tradefed/device/metric/LogcatOnFailureCollectorTest.java
index b338ed2..e721708 100644
--- a/javatests/com/android/tradefed/device/metric/LogcatOnFailureCollectorTest.java
+++ b/javatests/com/android/tradefed/device/metric/LogcatOnFailureCollectorTest.java
@@ -17,6 +17,20 @@
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 import com.android.ddmlib.IDevice;
 import com.android.tradefed.config.ConfigurationDef;
@@ -33,7 +47,6 @@
 import com.android.tradefed.result.TestDescription;
 import com.android.tradefed.util.IRunUtil;
 
-import org.easymock.EasyMock;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -45,14 +58,14 @@
 @RunWith(JUnit4.class)
 public class LogcatOnFailureCollectorTest {
     private TestableLogcatOnFailureCollector mCollector;
-    private ITestInvocationListener mMockListener;
-    private ITestDevice mMockDevice;
-    private ITestDevice mNullMockDevice;
+    @Mock ITestInvocationListener mMockListener;
+    @Mock ITestDevice mMockDevice;
+    @Mock ITestDevice mNullMockDevice;
 
     private ITestInvocationListener mTestListener;
     private IInvocationContext mContext;
-    private ILogcatReceiver mMockReceiver;
-    private IRunUtil mMockRunUtil;
+    @Mock ILogcatReceiver mMockReceiver;
+    @Mock IRunUtil mMockRunUtil;
 
     private class TestableLogcatOnFailureCollector extends LogcatOnFailureCollector {
 
@@ -84,58 +97,59 @@
 
     @Before
     public void setUp() throws Exception {
-        mMockDevice = EasyMock.createMock(ITestDevice.class);
-        mNullMockDevice = EasyMock.createMock(ITestDevice.class);
-        mMockListener = EasyMock.createMock(ITestInvocationListener.class);
-        mMockReceiver = EasyMock.createMock(ILogcatReceiver.class);
-        mMockRunUtil = EasyMock.createMock(IRunUtil.class);
+        MockitoAnnotations.initMocks(this);
+
         mCollector = new TestableLogcatOnFailureCollector();
         mContext = new InvocationContext();
         mContext.addAllocatedDevice(ConfigurationDef.DEFAULT_DEVICE_NAME, mMockDevice);
         mContext.addAllocatedDevice("second_null_device", mNullMockDevice);
 
-        EasyMock.expect(mMockDevice.getSerialNumber()).andStubReturn("serial");
-        EasyMock.expect(mMockDevice.getIDevice()).andStubReturn(EasyMock.createMock(IDevice.class));
-        EasyMock.expect(mMockDevice.getDeviceState()).andStubReturn(TestDeviceState.ONLINE);
+        when(mMockDevice.getSerialNumber()).thenReturn("serial");
+        when(mMockDevice.getIDevice()).thenReturn(mock(IDevice.class));
+        when(mMockDevice.getDeviceState()).thenReturn(TestDeviceState.ONLINE);
 
-        EasyMock.expect(mNullMockDevice.getIDevice()).andStubReturn(new NullDevice("null-dev"));
+        when(mNullMockDevice.getIDevice()).thenReturn(new NullDevice("null-dev"));
     }
 
     @Test
     public void testCollect() throws Exception {
-        EasyMock.expect(mMockDevice.getApiLevel()).andReturn(20);
-        mMockReceiver.start();
-        mMockReceiver.clear();
-        mMockReceiver.stop();
-        mMockListener.testRunStarted(
-                EasyMock.eq("runName"), EasyMock.eq(1), EasyMock.eq(0), EasyMock.anyLong());
-        TestDescription test = new TestDescription("class", "test");
-        mMockListener.testStarted(EasyMock.eq(test), EasyMock.anyLong());
-        mMockListener.testFailed(EasyMock.eq(test), (String) EasyMock.anyObject());
-        mMockListener.testEnded(
-                EasyMock.eq(test),
-                EasyMock.anyLong(),
-                EasyMock.<HashMap<String, Metric>>anyObject());
-        mMockListener.testRunEnded(0L, new HashMap<String, Metric>());
-        // Buffer at testRunStarted
-        EasyMock.expect(mMockReceiver.getLogcatData())
-                .andReturn(new ByteArrayInputStreamSource("aaa".getBytes()));
-        // Buffer to be logged
-        EasyMock.expect(mMockReceiver.getLogcatData(EasyMock.anyInt(), EasyMock.eq(3)))
-                .andReturn(new ByteArrayInputStreamSource("aaabbb".getBytes()));
-        mMockListener.testLog(
-                EasyMock.eq("class#test-serial-logcat-on-failure"),
-                EasyMock.eq(LogDataType.LOGCAT),
-                EasyMock.anyObject());
+        when(mMockDevice.getApiLevel()).thenReturn(20);
 
-        EasyMock.replay(mMockListener, mMockDevice, mMockReceiver, mNullMockDevice);
+        TestDescription test = new TestDescription("class", "test");
+
+        // Buffer at testRunStarted
+        when(mMockReceiver.getLogcatData())
+                .thenReturn(new ByteArrayInputStreamSource("aaa".getBytes()));
+        // Buffer to be logged
+        when(mMockReceiver.getLogcatData(Mockito.anyInt(), Mockito.eq(3)))
+                .thenReturn(new ByteArrayInputStreamSource("aaabbb".getBytes()));
+
         mTestListener = mCollector.init(mContext, mMockListener);
         mTestListener.testRunStarted("runName", 1);
         mTestListener.testStarted(test);
         mTestListener.testFailed(test, "I failed");
         mTestListener.testEnded(test, new HashMap<String, Metric>());
         mTestListener.testRunEnded(0L, new HashMap<String, Metric>());
-        EasyMock.verify(mMockListener, mMockDevice, mMockReceiver, mNullMockDevice);
+
+        verify(mMockReceiver).start();
+        verify(mMockReceiver).clear();
+        verify(mMockReceiver).stop();
+        verify(mMockListener)
+                .testRunStarted(
+                        Mockito.eq("runName"), Mockito.eq(1), Mockito.eq(0), Mockito.anyLong());
+        verify(mMockListener).testStarted(Mockito.eq(test), Mockito.anyLong());
+        verify(mMockListener).testFailed(Mockito.eq(test), (String) Mockito.any());
+        verify(mMockListener)
+                .testEnded(
+                        Mockito.eq(test),
+                        Mockito.anyLong(),
+                        Mockito.<HashMap<String, Metric>>any());
+        verify(mMockListener).testRunEnded(0L, new HashMap<String, Metric>());
+        verify(mMockListener)
+                .testLog(
+                        Mockito.eq("class#test-serial-logcat-on-failure"),
+                        Mockito.eq(LogDataType.LOGCAT),
+                        Mockito.any());
         // Ensure the callback went through
         assertTrue(mCollector.mOnTestStartCalled);
         assertTrue(mCollector.mOnTestFailCalled);
@@ -147,31 +161,34 @@
      */
     @Test
     public void testCollect_legacy() throws Exception {
-        EasyMock.expect(mMockDevice.getApiLevel()).andReturn(18);
-        mMockListener.testRunStarted(
-                EasyMock.eq("runName"), EasyMock.eq(1), EasyMock.eq(0), EasyMock.anyLong());
-        TestDescription test = new TestDescription("class", "test");
-        mMockListener.testStarted(EasyMock.eq(test), EasyMock.anyLong());
-        mMockListener.testFailed(EasyMock.eq(test), (String) EasyMock.anyObject());
-        mMockListener.testEnded(
-                EasyMock.eq(test),
-                EasyMock.anyLong(),
-                EasyMock.<HashMap<String, Metric>>anyObject());
-        mMockListener.testRunEnded(0L, new HashMap<String, Metric>());
-        mMockDevice.executeShellCommand(EasyMock.eq("logcat -t 5000"), EasyMock.anyObject());
-        mMockListener.testLog(
-                EasyMock.eq("class#test-serial-logcat-on-failure"),
-                EasyMock.eq(LogDataType.LOGCAT),
-                EasyMock.anyObject());
+        when(mMockDevice.getApiLevel()).thenReturn(18);
 
-        EasyMock.replay(mMockListener, mMockDevice, mMockReceiver, mNullMockDevice);
+        TestDescription test = new TestDescription("class", "test");
+
         mTestListener = mCollector.init(mContext, mMockListener);
         mTestListener.testRunStarted("runName", 1);
         mTestListener.testStarted(test);
         mTestListener.testFailed(test, "I failed");
         mTestListener.testEnded(test, new HashMap<String, Metric>());
         mTestListener.testRunEnded(0L, new HashMap<String, Metric>());
-        EasyMock.verify(mMockListener, mMockDevice, mMockReceiver, mNullMockDevice);
+
+        verify(mMockListener)
+                .testRunStarted(
+                        Mockito.eq("runName"), Mockito.eq(1), Mockito.eq(0), Mockito.anyLong());
+        verify(mMockListener).testStarted(Mockito.eq(test), Mockito.anyLong());
+        verify(mMockListener).testFailed(Mockito.eq(test), (String) Mockito.any());
+        verify(mMockListener)
+                .testEnded(
+                        Mockito.eq(test),
+                        Mockito.anyLong(),
+                        Mockito.<HashMap<String, Metric>>any());
+        verify(mMockListener).testRunEnded(0L, new HashMap<String, Metric>());
+        verify(mMockDevice).executeShellCommand(Mockito.eq("logcat -t 5000"), Mockito.any());
+        verify(mMockListener)
+                .testLog(
+                        Mockito.eq("class#test-serial-logcat-on-failure"),
+                        Mockito.eq(LogDataType.LOGCAT),
+                        Mockito.any());
         // Ensure the callback went through
         assertTrue(mCollector.mOnTestStartCalled);
         assertTrue(mCollector.mOnTestFailCalled);
@@ -180,65 +197,34 @@
     @Test
     public void testCollect_noRuns() throws Exception {
         // If there was no runs, nothing should be done.
-        EasyMock.replay(mMockListener, mMockDevice, mMockReceiver, mNullMockDevice);
+
         mTestListener = mCollector.init(mContext, mMockListener);
-        EasyMock.verify(mMockListener, mMockDevice, mMockReceiver, mNullMockDevice);
+
         assertFalse(mCollector.mOnTestStartCalled);
         assertFalse(mCollector.mOnTestFailCalled);
     }
 
     @Test
     public void testCollect_multiRun() throws Exception {
-        EasyMock.expect(mMockDevice.getApiLevel()).andStubReturn(20);
-        mMockReceiver.start();
-        EasyMock.expectLastCall().times(2);
-        mMockReceiver.clear();
-        EasyMock.expectLastCall().times(2);
-        mMockReceiver.stop();
-        EasyMock.expectLastCall().times(2);
-        mMockListener.testRunStarted(
-                EasyMock.eq("runName"), EasyMock.eq(1), EasyMock.eq(0), EasyMock.anyLong());
+        when(mMockDevice.getApiLevel()).thenReturn(20);
+
         TestDescription test = new TestDescription("class", "test");
         TestDescription test2 = new TestDescription("class2", "test2");
-        mMockListener.testStarted(EasyMock.eq(test), EasyMock.anyLong());
-        mMockListener.testFailed(EasyMock.eq(test), (String) EasyMock.anyObject());
-        mMockListener.testEnded(
-                EasyMock.eq(test),
-                EasyMock.anyLong(),
-                EasyMock.<HashMap<String, Metric>>anyObject());
-        mMockListener.testRunEnded(0L, new HashMap<String, Metric>());
-        // Buffer at testRunStarted
-        EasyMock.expect(mMockReceiver.getLogcatData())
-                .andReturn(new ByteArrayInputStreamSource("aaa".getBytes()));
-        // Buffer to be logged
-        EasyMock.expect(mMockReceiver.getLogcatData(EasyMock.anyInt(), EasyMock.eq(3)))
-                .andReturn(new ByteArrayInputStreamSource("aaabbb".getBytes()));
-        mMockListener.testLog(
-                EasyMock.eq("class#test-serial-logcat-on-failure"),
-                EasyMock.eq(LogDataType.LOGCAT),
-                EasyMock.anyObject());
 
-        mMockListener.testRunStarted(
-                EasyMock.eq("runName2"), EasyMock.eq(1), EasyMock.eq(0), EasyMock.anyLong());
-        mMockListener.testStarted(EasyMock.eq(test2), EasyMock.anyLong());
-        mMockListener.testFailed(EasyMock.eq(test2), (String) EasyMock.anyObject());
-        mMockListener.testEnded(
-                EasyMock.eq(test2),
-                EasyMock.anyLong(),
-                EasyMock.<HashMap<String, Metric>>anyObject());
-        mMockListener.testRunEnded(0L, new HashMap<String, Metric>());
         // Buffer at testRunStarted
-        EasyMock.expect(mMockReceiver.getLogcatData())
-                .andReturn(new ByteArrayInputStreamSource("aaa".getBytes()));
+        when(mMockReceiver.getLogcatData())
+                .thenReturn(new ByteArrayInputStreamSource("aaa".getBytes()));
         // Buffer to be logged
-        EasyMock.expect(mMockReceiver.getLogcatData(EasyMock.anyInt(), EasyMock.eq(3)))
-                .andReturn(new ByteArrayInputStreamSource("aaabbb".getBytes()));
-        mMockListener.testLog(
-                EasyMock.eq("class2#test2-serial-logcat-on-failure"),
-                EasyMock.eq(LogDataType.LOGCAT),
-                EasyMock.anyObject());
+        when(mMockReceiver.getLogcatData(Mockito.anyInt(), Mockito.eq(3)))
+                .thenReturn(new ByteArrayInputStreamSource("aaabbb".getBytes()));
 
-        EasyMock.replay(mMockListener, mMockDevice, mMockReceiver, mNullMockDevice);
+        // Buffer at testRunStarted
+        when(mMockReceiver.getLogcatData())
+                .thenReturn(new ByteArrayInputStreamSource("aaa".getBytes()));
+        // Buffer to be logged
+        when(mMockReceiver.getLogcatData(Mockito.anyInt(), Mockito.eq(3)))
+                .thenReturn(new ByteArrayInputStreamSource("aaabbb".getBytes()));
+
         mTestListener = mCollector.init(mContext, mMockListener);
         mTestListener.testRunStarted("runName", 1);
         mTestListener.testStarted(test);
@@ -251,7 +237,41 @@
         mTestListener.testFailed(test2, "I failed");
         mTestListener.testEnded(test2, new HashMap<String, Metric>());
         mTestListener.testRunEnded(0L, new HashMap<String, Metric>());
-        EasyMock.verify(mMockListener, mMockDevice, mMockReceiver, mNullMockDevice);
+        verify(mMockReceiver, times(2)).start();
+        verify(mMockReceiver, times(2)).clear();
+        verify(mMockReceiver, times(2)).stop();
+        verify(mMockListener)
+                .testRunStarted(
+                        Mockito.eq("runName"), Mockito.eq(1), Mockito.eq(0), Mockito.anyLong());
+        verify(mMockListener).testStarted(Mockito.eq(test), Mockito.anyLong());
+        verify(mMockListener).testFailed(Mockito.eq(test), (String) Mockito.any());
+        verify(mMockListener)
+                .testEnded(
+                        Mockito.eq(test),
+                        Mockito.anyLong(),
+                        Mockito.<HashMap<String, Metric>>any());
+        // verify testRunEnded for both runs with times(2)
+        verify(mMockListener, times(2)).testRunEnded(0L, new HashMap<String, Metric>());
+        verify(mMockListener)
+                .testLog(
+                        Mockito.eq("class#test-serial-logcat-on-failure"),
+                        Mockito.eq(LogDataType.LOGCAT),
+                        Mockito.any());
+        verify(mMockListener)
+                .testRunStarted(
+                        Mockito.eq("runName2"), Mockito.eq(1), Mockito.eq(0), Mockito.anyLong());
+        verify(mMockListener).testStarted(Mockito.eq(test2), Mockito.anyLong());
+        verify(mMockListener).testFailed(Mockito.eq(test2), (String) Mockito.any());
+        verify(mMockListener)
+                .testEnded(
+                        Mockito.eq(test2),
+                        Mockito.anyLong(),
+                        Mockito.<HashMap<String, Metric>>any());
+        verify(mMockListener)
+                .testLog(
+                        Mockito.eq("class2#test2-serial-logcat-on-failure"),
+                        Mockito.eq(LogDataType.LOGCAT),
+                        Mockito.any());
         // Ensure the callback went through
         assertTrue(mCollector.mOnTestStartCalled);
         assertTrue(mCollector.mOnTestFailCalled);