blob: 9dbecdbdc16248e6370d00247b5901d89eec720c [file] [log] [blame]
package com.xtremelabs.robolectric.shadows;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsSpinner;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Gallery;
import android.widget.Spinner;
import android.widget.TextView;
import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.WithTestDefaultsRunner;
import org.hamcrest.core.IsNull;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
@RunWith(WithTestDefaultsRunner.class)
public class AbsSpinnerTest {
private Context context;
private AdapterView adapterView;
private Spinner spinner;
private ShadowAbsSpinner shadowSpinner;
private ArrayAdapter<String> arrayAdapter;
@Before
public void setUp() throws Exception {
context = new Activity();
adapterView = new Gallery(context);
spinner = new Spinner(context);
shadowSpinner = (ShadowAbsSpinner) Robolectric.shadowOf(spinner);
String [] testItems = {"foo", "bar"};
arrayAdapter = new MyArrayAdapter(this.context, testItems);
}
@Test
public void shouldHaveAdapterViewCommonBehavior() throws Exception {
AdapterViewBehavior.shouldActAsAdapterView(adapterView);
}
@Test
public void checkSetAdapter() {
spinner.setAdapter(arrayAdapter);
}
@Test
public void getSelectedItemShouldReturnCorrectValue(){
spinner.setAdapter(arrayAdapter);
spinner.setSelection(0);
assertThat((String) spinner.getSelectedItem(), equalTo("foo"));
assertThat((String) spinner.getSelectedItem(), not(equalTo("bar")));
spinner.setSelection(1);
assertThat((String) spinner.getSelectedItem(), equalTo("bar"));
assertThat((String) spinner.getSelectedItem(), not(equalTo("foo")));
}
@Test
public void getSelectedItemShouldReturnNull_NoAdapterSet(){
assertThat(spinner.getSelectedItem(), nullValue());
}
@Test (expected = IndexOutOfBoundsException.class)
public void getSelectedItemShouldThrowException_EmptyArray(){
spinner.setAdapter(new MyArrayAdapter(context, new String[]{}));
spinner.getSelectedItem();
}
@Test
public void setSelectionWithAnimatedTransition() {
spinner.setAdapter(arrayAdapter);
spinner.setSelection(0, true);
assertThat((String) spinner.getSelectedItem(), equalTo("foo"));
assertThat((String) spinner.getSelectedItem(), not(equalTo("bar")));
assertThat(shadowSpinner.isAnimatedTransition(), equalTo(true));
}
@Test
public void testGetSelectedView_noAdapter() {
assertThat(spinner.getSelectedView(), nullValue());
}
@Test
public void testGetSelectedView_noSelection() {
spinner.setAdapter(arrayAdapter);
spinner.setSelection(AdapterView.INVALID_POSITION);
assertThat(spinner.getSelectedView(), nullValue());
}
@Test
public void testGetSelectedView_default() {
spinner.setAdapter(arrayAdapter);
assertThat(((TextView) spinner.getSelectedView()).getText().toString(),
equalTo("foo"));
}
@Test
public void testGetSelectedView_changed() {
spinner.setAdapter(arrayAdapter);
spinner.setSelection(1);
assertThat(((TextView) spinner.getSelectedView()).getText().toString(),
equalTo("bar"));
}
private static class MyArrayAdapter extends ArrayAdapter<String> {
public MyArrayAdapter(Context context, String[] testItems) {
super(context, android.R.layout.simple_spinner_item, testItems);
}
@Override public View getView(int position, View convertView, ViewGroup parent) {
TextView textView = new TextView(getContext());
textView.setText(getItem(position));
return textView;
}
}
}