Home | History | Annotate | Download | only in shadows
      1 package org.robolectric.shadows;
      2 
      3 import static org.assertj.core.api.Assertions.assertThat;
      4 import static org.mockito.Mockito.mock;
      5 import static org.mockito.Mockito.times;
      6 import static org.mockito.Mockito.verify;
      7 
      8 import android.content.ContentResolver;
      9 import android.database.CharArrayBuffer;
     10 import android.database.ContentObserver;
     11 import android.database.Cursor;
     12 import android.database.CursorWrapper;
     13 import android.database.DataSetObserver;
     14 import android.net.Uri;
     15 import android.os.Bundle;
     16 import java.lang.reflect.Method;
     17 import java.util.HashMap;
     18 import org.junit.Test;
     19 import org.junit.runner.RunWith;
     20 import org.mockito.Mockito;
     21 import org.robolectric.RobolectricTestRunner;
     22 import org.robolectric.Shadows;
     23 
     24 @RunWith(RobolectricTestRunner.class)
     25 public class ShadowCursorWrapperTest {
     26 
     27   private static class ForwardVerifier {
     28 
     29     final Cursor mockCursor;
     30     final CursorWrapper cursorWrapper;
     31     final HashMap<String, Method> cursorMethod;
     32 
     33     public ForwardVerifier() {
     34       mockCursor = mock(Cursor.class);
     35       cursorWrapper = new CursorWrapper(mockCursor);
     36       cursorMethod = new HashMap<>();
     37 
     38       // This works because no two methods in the Cursor interface have the same name
     39       for (Method m : Cursor.class.getMethods()) {
     40         cursorMethod.put(m.getName(), m);
     41       }
     42     }
     43 
     44     public void verifyForward(String methodName, Object... params) throws Exception {
     45       assertThat(cursorMethod.keySet()).contains(methodName);
     46 
     47       Method method = cursorMethod.get(methodName);
     48       method.invoke(cursorWrapper, params);
     49       method.invoke(verify(mockCursor, times(1)), params);
     50       Mockito.verifyNoMoreInteractions(mockCursor);
     51     }
     52 
     53   }
     54 
     55   @Test
     56   public void testCursorMethodsAreForwarded() throws Exception {
     57     ForwardVerifier v = new ForwardVerifier();
     58 
     59     v.verifyForward("close");
     60     v.verifyForward("copyStringToBuffer", 1, mock(CharArrayBuffer.class));
     61     v.verifyForward("deactivate");
     62     v.verifyForward("getBlob", 2);
     63     v.verifyForward("getColumnCount");
     64     v.verifyForward("getColumnIndex", "foo");
     65     v.verifyForward("getColumnIndexOrThrow", "foo");
     66     v.verifyForward("getColumnName", 3);
     67     v.verifyForward("getColumnNames");
     68     v.verifyForward("getCount");
     69     v.verifyForward("getDouble", 12);
     70     v.verifyForward("getExtras");
     71     v.verifyForward("getFloat", 4);
     72     v.verifyForward("getInt", 5);
     73     v.verifyForward("getLong", 6);
     74     v.verifyForward("getPosition");
     75     v.verifyForward("getShort", 7);
     76     v.verifyForward("getString", 8);
     77     v.verifyForward("getType", 9);
     78     v.verifyForward("getWantsAllOnMoveCalls");
     79     v.verifyForward("isAfterLast");
     80     v.verifyForward("isBeforeFirst");
     81     v.verifyForward("isClosed");
     82     v.verifyForward("isFirst");
     83     v.verifyForward("isLast");
     84     v.verifyForward("isNull", 10);
     85     v.verifyForward("move", 11);
     86     v.verifyForward("moveToFirst");
     87     v.verifyForward("moveToLast");
     88     v.verifyForward("moveToNext");
     89     v.verifyForward("moveToPosition", 13);
     90     v.verifyForward("moveToPrevious");
     91     v.verifyForward("registerContentObserver", mock(ContentObserver.class));
     92     v.verifyForward("registerDataSetObserver", mock(DataSetObserver.class));
     93     v.verifyForward("requery");
     94     v.verifyForward("respond", mock(Bundle.class));
     95     v.verifyForward("setNotificationUri", mock(ContentResolver.class), mock(Uri.class));
     96     v.verifyForward("unregisterContentObserver", mock(ContentObserver.class));
     97     v.verifyForward("unregisterDataSetObserver", mock(DataSetObserver.class));
     98 
     99   }
    100 
    101   @Test
    102   public void getWrappedCursor() {
    103     Cursor mockCursor = mock(Cursor.class);
    104     CursorWrapper cursorWrapper = new CursorWrapper(mockCursor);
    105     ShadowCursorWrapper shadow = Shadows.shadowOf(cursorWrapper);
    106 
    107     assertThat(shadow.getWrappedCursor()).isSameAs(mockCursor);
    108   }
    109 
    110 }
    111