blob: 6d47c14ce4189e11e2dd62c7a7bf51d425d5274d [file] [log] [blame]
package com.xtremelabs.robolectric.shadows;
import android.content.ContentResolver;
import android.database.*;
import android.net.Uri;
import android.os.Bundle;
import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.WithTestDefaultsRunner;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import java.lang.reflect.Method;
import java.util.HashMap;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.*;
@RunWith(WithTestDefaultsRunner.class)
public class CursorWrapperTest {
private class ForwardVerifier {
final Cursor mockCursor;
final CursorWrapper cursorWrapper;
final HashMap<String, Method> cursorMethod;
public ForwardVerifier() {
mockCursor = mock(Cursor.class);
cursorWrapper = new CursorWrapper(mockCursor);
cursorMethod = new HashMap<String, Method>();
// This works because no two methods in the Cursor interface have the same name
for (Method m : Cursor.class.getMethods()) {
cursorMethod.put(m.getName(), m);
}
}
public void verifyForward(String methodName, Object... params) throws Exception {
assertThat(cursorMethod.keySet(), hasItem(methodName));
Method method = cursorMethod.get(methodName);
method.invoke(cursorWrapper, params);
method.invoke(verify(mockCursor, times(1)), params);
Mockito.verifyNoMoreInteractions(mockCursor);
}
}
@Test
public void testCursorMethodsAreForwarded() throws Exception {
ForwardVerifier v = new ForwardVerifier();
v.verifyForward("close");
v.verifyForward("copyStringToBuffer", 1, mock(CharArrayBuffer.class));
v.verifyForward("deactivate");
v.verifyForward("getBlob", 2);
v.verifyForward("getColumnCount");
v.verifyForward("getColumnIndex", "foo");
v.verifyForward("getColumnIndexOrThrow", "foo");
v.verifyForward("getColumnName", 3);
v.verifyForward("getColumnNames");
v.verifyForward("getCount");
v.verifyForward("getDouble", 12);
v.verifyForward("getExtras");
v.verifyForward("getFloat", 4);
v.verifyForward("getInt", 5);
v.verifyForward("getLong", 6);
v.verifyForward("getPosition");
v.verifyForward("getShort", 7);
v.verifyForward("getString", 8);
v.verifyForward("getWantsAllOnMoveCalls");
v.verifyForward("isAfterLast");
v.verifyForward("isBeforeFirst");
v.verifyForward("isClosed");
v.verifyForward("isFirst");
v.verifyForward("isLast");
v.verifyForward("isNull", 10);
v.verifyForward("move", 11);
v.verifyForward("moveToFirst");
v.verifyForward("moveToLast");
v.verifyForward("moveToNext");
v.verifyForward("moveToPosition", 13);
v.verifyForward("moveToPrevious");
v.verifyForward("registerContentObserver", mock(ContentObserver.class));
v.verifyForward("registerDataSetObserver", mock(DataSetObserver.class));
v.verifyForward("requery");
v.verifyForward("respond", mock(Bundle.class));
v.verifyForward("setNotificationUri", mock(ContentResolver.class), mock(Uri.class));
v.verifyForward("unregisterContentObserver", mock(ContentObserver.class));
v.verifyForward("unregisterDataSetObserver", mock(DataSetObserver.class));
}
@Test
public void getWrappedCursor() {
Cursor mockCursor = mock(Cursor.class);
CursorWrapper cursorWrapper = new CursorWrapper(mockCursor);
ShadowCursorWrapper shadow = Robolectric.shadowOf(cursorWrapper);
assertThat(shadow.getWrappedCursor(), is(sameInstance(mockCursor)));
}
}