Home | History | Annotate | Download | only in shadows
      1 // Copyright 2010 Google Inc. All Rights Reserved.
      2 
      3 package com.xtremelabs.robolectric.shadows;
      4 
      5 import static org.junit.Assert.assertEquals;
      6 import static org.mockito.Mockito.mock;
      7 import static org.mockito.Mockito.verify;
      8 import static org.mockito.Mockito.verifyNoMoreInteractions;
      9 
     10 import android.database.DataSetObserver;
     11 import android.view.View;
     12 import android.widget.ArrayAdapter;
     13 import android.widget.ListView;
     14 import android.widget.TextView;
     15 
     16 import com.xtremelabs.robolectric.R;
     17 import com.xtremelabs.robolectric.Robolectric;
     18 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
     19 
     20 import org.junit.Assert;
     21 import org.junit.Before;
     22 import org.junit.Test;
     23 import org.junit.runner.RunWith;
     24 
     25 import java.util.ArrayList;
     26 import java.util.Arrays;
     27 import java.util.List;
     28 
     29 @RunWith(WithTestDefaultsRunner.class)
     30 public class ArrayAdapterTest {
     31     private ArrayAdapter<Integer> arrayAdapter;
     32 
     33     @Before public void setUp() throws Exception {
     34         List<Integer> list = new ArrayList<Integer>();
     35         list.add(1);
     36         list.add(2);
     37         list.add(3);
     38 
     39         arrayAdapter = new ArrayAdapter<Integer>(Robolectric.application, 0, list);
     40     }
     41 
     42     @Test
     43     public void verifyContext() {
     44         assertEquals(Robolectric.application, arrayAdapter.getContext());
     45     }
     46 
     47     @Test
     48     public void verifyListContent() {
     49         assertEquals(3, arrayAdapter.getCount());
     50         assertEquals(new Integer(1), arrayAdapter.getItem(0));
     51         assertEquals(new Integer(2), arrayAdapter.getItem(1));
     52         assertEquals(new Integer(3), arrayAdapter.getItem(2));
     53     }
     54 
     55     @Test
     56     public void usesTextViewResourceIdToSetTextWithinListItemView() throws Exception {
     57         ListView parent = new ListView(Robolectric.application);
     58         ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(Robolectric.application, R.layout.main, R.id.title, new String[] { "first value" });
     59         View listItemView = arrayAdapter.getView(0, null, parent);
     60         TextView titleTextView = (TextView) listItemView.findViewById(R.id.title);
     61         assertEquals("first value", titleTextView.getText().toString());
     62     }
     63 
     64     @Test
     65     public void hasTheCorrectConstructorResourceIDs() {
     66         ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(Robolectric.application, R.id.title, new String[] { "first value" });
     67 
     68         //this assertion may look a little backwards since R.id.title is labeled
     69         //textViewResourceId in the constructor parameter list, but the output is correct.
     70         Assert.assertTrue(Robolectric.shadowOf(arrayAdapter).getResourceId()==R.id.title);
     71         Assert.assertTrue(Robolectric.shadowOf(arrayAdapter).getTextViewResourceId()!=R.id.title);
     72         Assert.assertTrue(Robolectric.shadowOf(arrayAdapter).getTextViewResourceId()==0);
     73 
     74         ArrayAdapter<String> arrayAdapter2 = new ArrayAdapter<String>(Robolectric.application, R.id.title);
     75 
     76         //this assertion may look a little backwards since R.id.title is labeled
     77         //textViewResourceId in the constructor parameter list, but the output is correct.
     78         Assert.assertTrue(Robolectric.shadowOf(arrayAdapter2).getResourceId()==R.id.title);
     79         Assert.assertTrue(Robolectric.shadowOf(arrayAdapter2).getTextViewResourceId()!=R.id.title);
     80         Assert.assertTrue(Robolectric.shadowOf(arrayAdapter2).getTextViewResourceId()==0);
     81 
     82         ArrayAdapter<String> arrayAdapter3 = new ArrayAdapter<String>(Robolectric.application, R.id.title, Arrays.asList(new String[] { "first value" }));
     83 
     84         //this assertion may look a little backwards since R.id.title is labeled
     85         //textViewResourceId in the constructor parameter list, but the output is correct.
     86         Assert.assertTrue(Robolectric.shadowOf(arrayAdapter3).getResourceId()==R.id.title);
     87         Assert.assertTrue(Robolectric.shadowOf(arrayAdapter3).getTextViewResourceId()!=R.id.title);
     88         Assert.assertTrue(Robolectric.shadowOf(arrayAdapter3).getTextViewResourceId()==0);
     89     }
     90 
     91     @Test
     92     public void shouldClear() throws Exception {
     93         arrayAdapter.clear();
     94         assertEquals(0, arrayAdapter.getCount());
     95     }
     96 
     97     @Test
     98     public void test_remove() throws Exception {
     99         Integer firstItem = arrayAdapter.getItem(0);
    100         assertEquals(3, arrayAdapter.getCount());
    101         assertEquals(new Integer(1), firstItem);
    102 
    103         arrayAdapter.remove(firstItem);
    104 
    105         assertEquals(2, arrayAdapter.getCount());
    106         assertEquals(new Integer(2), arrayAdapter.getItem(0));
    107         assertEquals(new Integer(3), arrayAdapter.getItem(1));
    108     }
    109 
    110     @Test
    111     public void testRemoveNotifiesDataSetObservers() {
    112         DataSetObserver observer = mock(DataSetObserver.class);
    113         arrayAdapter.registerDataSetObserver(observer);
    114         Integer firstItem = arrayAdapter.getItem(0);
    115 
    116         arrayAdapter.remove(firstItem);
    117 
    118         verify(observer).onChanged();
    119     }
    120 
    121     @Test
    122     public void testClearNotifiesDataSetObservers() {
    123         DataSetObserver observer = mock(DataSetObserver.class);
    124         arrayAdapter.registerDataSetObserver(observer);
    125 
    126         arrayAdapter.clear();
    127 
    128         verify(observer).onChanged();
    129     }
    130 
    131     @Test
    132     public void testAddNotifiesDataSetObservers() {
    133         DataSetObserver observer = mock(DataSetObserver.class);
    134         arrayAdapter.registerDataSetObserver(observer);
    135 
    136         arrayAdapter.add(27);
    137 
    138         verify(observer).onChanged();
    139     }
    140 
    141     @Test
    142     public void testInsertNotifiesDataSetObservers() {
    143         DataSetObserver observer = mock(DataSetObserver.class);
    144         arrayAdapter.registerDataSetObserver(observer);
    145 
    146         arrayAdapter.insert(27, 1);
    147 
    148         verify(observer).onChanged();
    149     }
    150 
    151     @Test
    152     public void testInsertDoesNotNotifyDataSetObserversWhenDisabled() {
    153         DataSetObserver observer = mock(DataSetObserver.class);
    154         arrayAdapter.registerDataSetObserver(observer);
    155 
    156         arrayAdapter.setNotifyOnChange(false);
    157         arrayAdapter.insert(27, 1);
    158 
    159         verifyNoMoreInteractions(observer);
    160     }
    161 }
    162