145416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciapackage com.xtremelabs.robolectric.shadows; 245416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 345416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport android.content.ContentResolver; 445416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport android.database.*; 545416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport android.net.Uri; 645416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport android.os.Bundle; 745416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport com.xtremelabs.robolectric.Robolectric; 845416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport com.xtremelabs.robolectric.WithTestDefaultsRunner; 945416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport org.junit.Test; 1045416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport org.junit.runner.RunWith; 1145416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport org.mockito.Mockito; 1245416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 1345416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport java.lang.reflect.Method; 1445416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport java.util.HashMap; 1545416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 1645416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport static org.hamcrest.CoreMatchers.*; 1745416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport static org.junit.Assert.assertThat; 1845416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciaimport static org.mockito.Mockito.*; 1945416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 2045416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia@RunWith(WithTestDefaultsRunner.class) 2145416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garciapublic class CursorWrapperTest { 2245416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 2345416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia private class ForwardVerifier { 2445416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 2545416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia final Cursor mockCursor; 2645416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia final CursorWrapper cursorWrapper; 2745416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia final HashMap<String, Method> cursorMethod; 2845416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 2945416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia public ForwardVerifier() { 3045416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia mockCursor = mock(Cursor.class); 3145416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia cursorWrapper = new CursorWrapper(mockCursor); 3245416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia cursorMethod = new HashMap<String, Method>(); 3345416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 3445416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia // This works because no two methods in the Cursor interface have the same name 3545416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia for (Method m : Cursor.class.getMethods()) { 3645416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia cursorMethod.put(m.getName(), m); 3745416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia } 3845416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia } 3945416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 4045416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia public void verifyForward(String methodName, Object... params) throws Exception { 4145416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia assertThat(cursorMethod.keySet(), hasItem(methodName)); 4245416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 4345416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia Method method = cursorMethod.get(methodName); 4445416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia method.invoke(cursorWrapper, params); 4545416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia method.invoke(verify(mockCursor, times(1)), params); 4645416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia Mockito.verifyNoMoreInteractions(mockCursor); 4745416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia } 4845416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 4945416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia } 5045416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 5145416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia @Test 5245416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia public void testCursorMethodsAreForwarded() throws Exception { 5345416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia ForwardVerifier v = new ForwardVerifier(); 5445416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 5545416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("close"); 5645416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("copyStringToBuffer", 1, mock(CharArrayBuffer.class)); 5745416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("deactivate"); 5845416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getBlob", 2); 5945416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getColumnCount"); 6045416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getColumnIndex", "foo"); 6145416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getColumnIndexOrThrow", "foo"); 6245416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getColumnName", 3); 6345416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getColumnNames"); 6445416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getCount"); 6545416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getDouble", 12); 6645416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getExtras"); 6745416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getFloat", 4); 6845416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getInt", 5); 6945416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getLong", 6); 7045416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getPosition"); 7145416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getShort", 7); 7245416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getString", 8); 7345416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("getWantsAllOnMoveCalls"); 7445416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("isAfterLast"); 7545416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("isBeforeFirst"); 7645416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("isClosed"); 7745416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("isFirst"); 7845416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("isLast"); 7945416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("isNull", 10); 8045416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("move", 11); 8145416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("moveToFirst"); 8245416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("moveToLast"); 8345416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("moveToNext"); 8445416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("moveToPosition", 13); 8545416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("moveToPrevious"); 8645416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("registerContentObserver", mock(ContentObserver.class)); 8745416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("registerDataSetObserver", mock(DataSetObserver.class)); 8845416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("requery"); 8945416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("respond", mock(Bundle.class)); 9045416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("setNotificationUri", mock(ContentResolver.class), mock(Uri.class)); 9145416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("unregisterContentObserver", mock(ContentObserver.class)); 9245416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia v.verifyForward("unregisterDataSetObserver", mock(DataSetObserver.class)); 9345416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 9445416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia } 9545416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 9645416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia @Test 9745416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia public void getWrappedCursor() { 9845416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia Cursor mockCursor = mock(Cursor.class); 9945416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia CursorWrapper cursorWrapper = new CursorWrapper(mockCursor); 10045416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia ShadowCursorWrapper shadow = Robolectric.shadowOf(cursorWrapper); 10145416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 10245416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia assertThat(shadow.getWrappedCursor(), is(sameInstance(mockCursor))); 10345416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia } 10445416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia 10545416dcb93425cc62d7848c1afa55f68825ec6e4Diego Garcia} 106