blob: 7597c538f68a46288070df4d3c5469747297f084 [file] [log] [blame]
// Copyright 2010 Google Inc. All Rights Reserved.
package com.xtremelabs.robolectric.shadows;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import android.database.DataSetObserver;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.xtremelabs.robolectric.R;
import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.WithTestDefaultsRunner;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@RunWith(WithTestDefaultsRunner.class)
public class ArrayAdapterTest {
private ArrayAdapter<Integer> arrayAdapter;
@Before public void setUp() throws Exception {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
arrayAdapter = new ArrayAdapter<Integer>(Robolectric.application, 0, list);
}
@Test
public void verifyContext() {
assertEquals(Robolectric.application, arrayAdapter.getContext());
}
@Test
public void verifyListContent() {
assertEquals(3, arrayAdapter.getCount());
assertEquals(new Integer(1), arrayAdapter.getItem(0));
assertEquals(new Integer(2), arrayAdapter.getItem(1));
assertEquals(new Integer(3), arrayAdapter.getItem(2));
}
@Test
public void usesTextViewResourceIdToSetTextWithinListItemView() throws Exception {
ListView parent = new ListView(Robolectric.application);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(Robolectric.application, R.layout.main, R.id.title, new String[] { "first value" });
View listItemView = arrayAdapter.getView(0, null, parent);
TextView titleTextView = (TextView) listItemView.findViewById(R.id.title);
assertEquals("first value", titleTextView.getText().toString());
}
@Test
public void hasTheCorrectConstructorResourceIDs() {
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(Robolectric.application, R.id.title, new String[] { "first value" });
//this assertion may look a little backwards since R.id.title is labeled
//textViewResourceId in the constructor parameter list, but the output is correct.
Assert.assertTrue(Robolectric.shadowOf(arrayAdapter).getResourceId()==R.id.title);
Assert.assertTrue(Robolectric.shadowOf(arrayAdapter).getTextViewResourceId()!=R.id.title);
Assert.assertTrue(Robolectric.shadowOf(arrayAdapter).getTextViewResourceId()==0);
ArrayAdapter<String> arrayAdapter2 = new ArrayAdapter<String>(Robolectric.application, R.id.title);
//this assertion may look a little backwards since R.id.title is labeled
//textViewResourceId in the constructor parameter list, but the output is correct.
Assert.assertTrue(Robolectric.shadowOf(arrayAdapter2).getResourceId()==R.id.title);
Assert.assertTrue(Robolectric.shadowOf(arrayAdapter2).getTextViewResourceId()!=R.id.title);
Assert.assertTrue(Robolectric.shadowOf(arrayAdapter2).getTextViewResourceId()==0);
ArrayAdapter<String> arrayAdapter3 = new ArrayAdapter<String>(Robolectric.application, R.id.title, Arrays.asList(new String[] { "first value" }));
//this assertion may look a little backwards since R.id.title is labeled
//textViewResourceId in the constructor parameter list, but the output is correct.
Assert.assertTrue(Robolectric.shadowOf(arrayAdapter3).getResourceId()==R.id.title);
Assert.assertTrue(Robolectric.shadowOf(arrayAdapter3).getTextViewResourceId()!=R.id.title);
Assert.assertTrue(Robolectric.shadowOf(arrayAdapter3).getTextViewResourceId()==0);
}
@Test
public void shouldClear() throws Exception {
arrayAdapter.clear();
assertEquals(0, arrayAdapter.getCount());
}
@Test
public void test_remove() throws Exception {
Integer firstItem = arrayAdapter.getItem(0);
assertEquals(3, arrayAdapter.getCount());
assertEquals(new Integer(1), firstItem);
arrayAdapter.remove(firstItem);
assertEquals(2, arrayAdapter.getCount());
assertEquals(new Integer(2), arrayAdapter.getItem(0));
assertEquals(new Integer(3), arrayAdapter.getItem(1));
}
@Test
public void testRemoveNotifiesDataSetObservers() {
DataSetObserver observer = mock(DataSetObserver.class);
arrayAdapter.registerDataSetObserver(observer);
Integer firstItem = arrayAdapter.getItem(0);
arrayAdapter.remove(firstItem);
verify(observer).onChanged();
}
@Test
public void testClearNotifiesDataSetObservers() {
DataSetObserver observer = mock(DataSetObserver.class);
arrayAdapter.registerDataSetObserver(observer);
arrayAdapter.clear();
verify(observer).onChanged();
}
@Test
public void testAddNotifiesDataSetObservers() {
DataSetObserver observer = mock(DataSetObserver.class);
arrayAdapter.registerDataSetObserver(observer);
arrayAdapter.add(27);
verify(observer).onChanged();
}
@Test
public void testInsertNotifiesDataSetObservers() {
DataSetObserver observer = mock(DataSetObserver.class);
arrayAdapter.registerDataSetObserver(observer);
arrayAdapter.insert(27, 1);
verify(observer).onChanged();
}
@Test
public void testInsertDoesNotNotifyDataSetObserversWhenDisabled() {
DataSetObserver observer = mock(DataSetObserver.class);
arrayAdapter.registerDataSetObserver(observer);
arrayAdapter.setNotifyOnChange(false);
arrayAdapter.insert(27, 1);
verifyNoMoreInteractions(observer);
}
}