1 package org.robolectric.shadows; 2 3 import static com.google.common.truth.Truth.assertThat; 4 import static org.junit.Assert.assertEquals; 5 6 import android.app.Application; 7 import android.view.View; 8 import android.widget.ArrayAdapter; 9 import android.widget.ListView; 10 import android.widget.TextView; 11 import androidx.test.core.app.ApplicationProvider; 12 import androidx.test.ext.junit.runners.AndroidJUnit4; 13 import java.util.ArrayList; 14 import java.util.Collections; 15 import java.util.List; 16 import org.junit.Before; 17 import org.junit.Test; 18 import org.junit.runner.RunWith; 19 import org.robolectric.R; 20 import org.robolectric.Shadows; 21 22 @RunWith(AndroidJUnit4.class) 23 public class ShadowArrayAdapterTest { 24 private ArrayAdapter<Integer> arrayAdapter; 25 private Application context; 26 setUp()27 @Before public void setUp() throws Exception { 28 List<Integer> list = new ArrayList<>(); 29 list.add(1); 30 list.add(2); 31 list.add(3); 32 33 context = ApplicationProvider.getApplicationContext(); 34 arrayAdapter = new ArrayAdapter<>(context, 0, list); 35 } 36 37 @Test verifyContext()38 public void verifyContext() { 39 assertThat(arrayAdapter.getContext()).isSameInstanceAs(context); 40 } 41 42 @Test 43 @SuppressWarnings("BoxedPrimitiveConstructor") verifyListContent()44 public void verifyListContent() { 45 assertEquals(3, arrayAdapter.getCount()); 46 assertEquals(Integer.valueOf(1), arrayAdapter.getItem(0)); 47 assertEquals(Integer.valueOf(2), arrayAdapter.getItem(1)); 48 assertEquals(Integer.valueOf(3), arrayAdapter.getItem(2)); 49 } 50 51 @Test usesTextViewResourceIdToSetTextWithinListItemView()52 public void usesTextViewResourceIdToSetTextWithinListItemView() { 53 ListView parent = new ListView(context); 54 ArrayAdapter<String> arrayAdapter = 55 new ArrayAdapter<>(context, R.layout.main, R.id.title, new String[] {"first value"}); 56 View listItemView = arrayAdapter.getView(0, null, parent); 57 TextView titleTextView = listItemView.findViewById(R.id.title); 58 assertEquals("first value", titleTextView.getText().toString()); 59 } 60 61 @Test hasTheCorrectConstructorResourceIDs()62 public void hasTheCorrectConstructorResourceIDs() { 63 ArrayAdapter<String> arrayAdapter = 64 new ArrayAdapter<>(context, R.id.title, new String[] {"first value"}); 65 66 //this assertion may look a little backwards since R.id.title is labeled 67 //textViewResourceId in the constructor parameter list, but the output is correct. 68 assertThat(Shadows.shadowOf(arrayAdapter).getResourceId()).isEqualTo(R.id.title); 69 assertThat(Shadows.shadowOf(arrayAdapter).getTextViewResourceId()).isNotEqualTo(R.id.title); 70 assertThat(Shadows.shadowOf(arrayAdapter).getTextViewResourceId()).isEqualTo(0); 71 72 ArrayAdapter<String> arrayAdapter2 = new ArrayAdapter<>(context, R.id.title); 73 74 //this assertion may look a little backwards since R.id.title is labeled 75 //textViewResourceId in the constructor parameter list, but the output is correct. 76 assertThat(Shadows.shadowOf(arrayAdapter2).getResourceId()).isEqualTo(R.id.title); 77 assertThat(Shadows.shadowOf(arrayAdapter2).getTextViewResourceId()).isNotEqualTo(R.id.title); 78 assertThat(Shadows.shadowOf(arrayAdapter2).getTextViewResourceId()).isEqualTo(0); 79 80 ArrayAdapter<String> arrayAdapter3 = 81 new ArrayAdapter<>(context, R.id.title, Collections.singletonList("first value")); 82 83 //this assertion may look a little backwards since R.id.title is labeled 84 //textViewResourceId in the constructor parameter list, but the output is correct. 85 assertThat(Shadows.shadowOf(arrayAdapter3).getResourceId()).isEqualTo(R.id.title); 86 assertThat(Shadows.shadowOf(arrayAdapter3).getTextViewResourceId()).isNotEqualTo(R.id.title); 87 assertThat(Shadows.shadowOf(arrayAdapter3).getTextViewResourceId()).isEqualTo(0); 88 } 89 90 @Test shouldClear()91 public void shouldClear() { 92 arrayAdapter.clear(); 93 assertEquals(0, arrayAdapter.getCount()); 94 } 95 96 @Test 97 @SuppressWarnings("BoxedPrimitiveConstructor") test_remove()98 public void test_remove() { 99 Integer firstItem = arrayAdapter.getItem(0); 100 assertEquals(3, arrayAdapter.getCount()); 101 assertEquals(Integer.valueOf(1), firstItem); 102 103 arrayAdapter.remove(firstItem); 104 105 assertEquals(2, arrayAdapter.getCount()); 106 assertEquals(Integer.valueOf(2), arrayAdapter.getItem(0)); 107 assertEquals(Integer.valueOf(3), arrayAdapter.getItem(1)); 108 } 109 } 110