1 package com.xtremelabs.robolectric.shadows; 2 3 4 import android.app.Activity; 5 import android.content.Context; 6 import android.view.View; 7 import android.view.ViewGroup; 8 import android.widget.AbsSpinner; 9 import android.widget.AdapterView; 10 import android.widget.ArrayAdapter; 11 import android.widget.Gallery; 12 import android.widget.Spinner; 13 import android.widget.TextView; 14 15 import com.xtremelabs.robolectric.Robolectric; 16 import com.xtremelabs.robolectric.WithTestDefaultsRunner; 17 18 import org.hamcrest.core.IsNull; 19 import org.junit.Before; 20 import org.junit.Test; 21 import org.junit.runner.RunWith; 22 23 import static org.hamcrest.CoreMatchers.*; 24 import static org.junit.Assert.assertThat; 25 26 @RunWith(WithTestDefaultsRunner.class) 27 public class AbsSpinnerTest { 28 private Context context; 29 private AdapterView adapterView; 30 private Spinner spinner; 31 private ShadowAbsSpinner shadowSpinner; 32 private ArrayAdapter<String> arrayAdapter; 33 34 @Before 35 public void setUp() throws Exception { 36 context = new Activity(); 37 adapterView = new Gallery(context); 38 spinner = new Spinner(context); 39 shadowSpinner = (ShadowAbsSpinner) Robolectric.shadowOf(spinner); 40 String [] testItems = {"foo", "bar"}; 41 arrayAdapter = new MyArrayAdapter(this.context, testItems); 42 } 43 44 @Test 45 public void shouldHaveAdapterViewCommonBehavior() throws Exception { 46 AdapterViewBehavior.shouldActAsAdapterView(adapterView); 47 } 48 49 @Test 50 public void checkSetAdapter() { 51 spinner.setAdapter(arrayAdapter); 52 } 53 54 @Test 55 public void getSelectedItemShouldReturnCorrectValue(){ 56 spinner.setAdapter(arrayAdapter); 57 spinner.setSelection(0); 58 assertThat((String) spinner.getSelectedItem(), equalTo("foo")); 59 assertThat((String) spinner.getSelectedItem(), not(equalTo("bar"))); 60 61 spinner.setSelection(1); 62 assertThat((String) spinner.getSelectedItem(), equalTo("bar")); 63 assertThat((String) spinner.getSelectedItem(), not(equalTo("foo"))); 64 } 65 66 @Test 67 public void getSelectedItemShouldReturnNull_NoAdapterSet(){ 68 assertThat(spinner.getSelectedItem(), nullValue()); 69 } 70 71 @Test (expected = IndexOutOfBoundsException.class) 72 public void getSelectedItemShouldThrowException_EmptyArray(){ 73 spinner.setAdapter(new MyArrayAdapter(context, new String[]{})); 74 spinner.getSelectedItem(); 75 } 76 77 @Test 78 public void setSelectionWithAnimatedTransition() { 79 spinner.setAdapter(arrayAdapter); 80 spinner.setSelection(0, true); 81 82 assertThat((String) spinner.getSelectedItem(), equalTo("foo")); 83 assertThat((String) spinner.getSelectedItem(), not(equalTo("bar"))); 84 85 assertThat(shadowSpinner.isAnimatedTransition(), equalTo(true)); 86 } 87 88 @Test 89 public void testGetSelectedView_noAdapter() { 90 assertThat(spinner.getSelectedView(), nullValue()); 91 } 92 93 @Test 94 public void testGetSelectedView_noSelection() { 95 spinner.setAdapter(arrayAdapter); 96 spinner.setSelection(AdapterView.INVALID_POSITION); 97 98 assertThat(spinner.getSelectedView(), nullValue()); 99 } 100 101 @Test 102 public void testGetSelectedView_default() { 103 spinner.setAdapter(arrayAdapter); 104 105 assertThat(((TextView) spinner.getSelectedView()).getText().toString(), 106 equalTo("foo")); 107 } 108 109 @Test 110 public void testGetSelectedView_changed() { 111 spinner.setAdapter(arrayAdapter); 112 spinner.setSelection(1); 113 114 assertThat(((TextView) spinner.getSelectedView()).getText().toString(), 115 equalTo("bar")); 116 } 117 118 private static class MyArrayAdapter extends ArrayAdapter<String> { 119 public MyArrayAdapter(Context context, String[] testItems) { 120 super(context, android.R.layout.simple_spinner_item, testItems); 121 } 122 123 @Override public View getView(int position, View convertView, ViewGroup parent) { 124 TextView textView = new TextView(getContext()); 125 textView.setText(getItem(position)); 126 return textView; 127 } 128 } 129 } 130