1// Copyright 2010 Google Inc. All Rights Reserved. 2 3package com.xtremelabs.robolectric.shadows; 4 5import static org.junit.Assert.assertEquals; 6import static org.mockito.Mockito.mock; 7import static org.mockito.Mockito.verify; 8import static org.mockito.Mockito.verifyNoMoreInteractions; 9 10import android.database.DataSetObserver; 11import android.view.View; 12import android.widget.ArrayAdapter; 13import android.widget.ListView; 14import android.widget.TextView; 15 16import com.xtremelabs.robolectric.R; 17import com.xtremelabs.robolectric.Robolectric; 18import com.xtremelabs.robolectric.WithTestDefaultsRunner; 19 20import org.junit.Assert; 21import org.junit.Before; 22import org.junit.Test; 23import org.junit.runner.RunWith; 24 25import java.util.ArrayList; 26import java.util.Arrays; 27import java.util.List; 28 29@RunWith(WithTestDefaultsRunner.class) 30public 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