133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows;
2563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher
33c3bc2fbf55f78d806bda09514896d279f98424cadriancowham
4563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisherimport android.app.Activity;
529610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwinimport android.content.Context;
629610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwinimport android.view.View;
729610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwinimport android.view.ViewGroup;
8a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppyimport android.widget.AbsSpinner;
9563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisherimport android.widget.AdapterView;
1029610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwinimport android.widget.ArrayAdapter;
11563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisherimport android.widget.Gallery;
1229610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwinimport android.widget.Spinner;
13a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppyimport android.widget.TextView;
14a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
15563a988375710e2c64a681b741eb52ad29a83caeZoodlesimport com.xtremelabs.robolectric.Robolectric;
1607257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwinimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
17a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
18a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppyimport org.hamcrest.core.IsNull;
19563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisherimport org.junit.Before;
20563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisherimport org.junit.Test;
21563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisherimport org.junit.runner.RunWith;
22563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher
23ca8b4e7c96507b66cb816a3383c93b02d79a7685Tyler Schultzimport static org.hamcrest.CoreMatchers.*;
24ca8b4e7c96507b66cb816a3383c93b02d79a7685Tyler Schultzimport static org.junit.Assert.assertThat;
25563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher
2607257335f88da163910cc0bd039e6163edc38580Gregg Van Hove & Phil Goodwin@RunWith(WithTestDefaultsRunner.class)
27563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisherpublic class AbsSpinnerTest {
2829610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin    private Context context;
29563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher    private AdapterView adapterView;
3029610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin	private Spinner spinner;
31563a988375710e2c64a681b741eb52ad29a83caeZoodles	private ShadowAbsSpinner shadowSpinner;
3229610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin	private ArrayAdapter<String> arrayAdapter;
33563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher
34563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher    @Before
35563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher    public void setUp() throws Exception {
3629610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin        context = new Activity();
3729610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin        adapterView = new Gallery(context);
3829610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin		spinner = new Spinner(context);
39563a988375710e2c64a681b741eb52ad29a83caeZoodles		shadowSpinner = (ShadowAbsSpinner) Robolectric.shadowOf(spinner);
4029610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin		String [] testItems = {"foo", "bar"};
4129610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin		arrayAdapter = new MyArrayAdapter(this.context, testItems);
42563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher    }
43563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher
44563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher    @Test
45563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher    public void shouldHaveAdapterViewCommonBehavior() throws Exception {
46780ae89abea7886c2bdc851713475d4e4905dd88Christian Williams & Ian Fisher        AdapterViewBehavior.shouldActAsAdapterView(adapterView);
47563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher    }
4829610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin
4929610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin	@Test
5029610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin	public void checkSetAdapter() {
5129610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin		spinner.setAdapter(arrayAdapter);
5229610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin	}
5329610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin
543c3bc2fbf55f78d806bda09514896d279f98424cadriancowham	@Test
553c3bc2fbf55f78d806bda09514896d279f98424cadriancowham	public void getSelectedItemShouldReturnCorrectValue(){
563c3bc2fbf55f78d806bda09514896d279f98424cadriancowham		spinner.setAdapter(arrayAdapter);
573c3bc2fbf55f78d806bda09514896d279f98424cadriancowham		spinner.setSelection(0);
584ea6e425e7ead4a762f3be06e94c2522d2fcf06bTyler Schultz		assertThat((String) spinner.getSelectedItem(), equalTo("foo"));
594ea6e425e7ead4a762f3be06e94c2522d2fcf06bTyler Schultz		assertThat((String) spinner.getSelectedItem(), not(equalTo("bar")));
60a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
613c3bc2fbf55f78d806bda09514896d279f98424cadriancowham		spinner.setSelection(1);
624ea6e425e7ead4a762f3be06e94c2522d2fcf06bTyler Schultz		assertThat((String) spinner.getSelectedItem(), equalTo("bar"));
634ea6e425e7ead4a762f3be06e94c2522d2fcf06bTyler Schultz		assertThat((String) spinner.getSelectedItem(), not(equalTo("foo")));
643c3bc2fbf55f78d806bda09514896d279f98424cadriancowham	}
65a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
663c3bc2fbf55f78d806bda09514896d279f98424cadriancowham	@Test
673c3bc2fbf55f78d806bda09514896d279f98424cadriancowham	public void getSelectedItemShouldReturnNull_NoAdapterSet(){
683c3bc2fbf55f78d806bda09514896d279f98424cadriancowham		assertThat(spinner.getSelectedItem(), nullValue());
693c3bc2fbf55f78d806bda09514896d279f98424cadriancowham	}
70a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
71a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy	@Test (expected = IndexOutOfBoundsException.class)
72ca8b4e7c96507b66cb816a3383c93b02d79a7685Tyler Schultz	public void getSelectedItemShouldThrowException_EmptyArray(){
733c3bc2fbf55f78d806bda09514896d279f98424cadriancowham		spinner.setAdapter(new MyArrayAdapter(context, new String[]{}));
74a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy		spinner.getSelectedItem();
753c3bc2fbf55f78d806bda09514896d279f98424cadriancowham	}
76a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
77563a988375710e2c64a681b741eb52ad29a83caeZoodles	@Test
78a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy	public void setSelectionWithAnimatedTransition() {
79563a988375710e2c64a681b741eb52ad29a83caeZoodles		spinner.setAdapter(arrayAdapter);
80563a988375710e2c64a681b741eb52ad29a83caeZoodles		spinner.setSelection(0, true);
81a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
824ea6e425e7ead4a762f3be06e94c2522d2fcf06bTyler Schultz		assertThat((String) spinner.getSelectedItem(), equalTo("foo"));
834ea6e425e7ead4a762f3be06e94c2522d2fcf06bTyler Schultz		assertThat((String) spinner.getSelectedItem(), not(equalTo("bar")));
84a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
85563a988375710e2c64a681b741eb52ad29a83caeZoodles		assertThat(shadowSpinner.isAnimatedTransition(), equalTo(true));
86563a988375710e2c64a681b741eb52ad29a83caeZoodles	}
87ca8b4e7c96507b66cb816a3383c93b02d79a7685Tyler Schultz
88a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    @Test
89a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    public void testGetSelectedView_noAdapter() {
90a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy        assertThat(spinner.getSelectedView(), nullValue());
91a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    }
92a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
93a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    @Test
94a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    public void testGetSelectedView_noSelection() {
95a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy        spinner.setAdapter(arrayAdapter);
96a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy        spinner.setSelection(AdapterView.INVALID_POSITION);
97a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
98a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy        assertThat(spinner.getSelectedView(), nullValue());
99a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    }
100a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
101a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    @Test
102a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    public void testGetSelectedView_default() {
103a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy        spinner.setAdapter(arrayAdapter);
104a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
105a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy        assertThat(((TextView) spinner.getSelectedView()).getText().toString(),
106a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy                equalTo("foo"));
107a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    }
108a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
109a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    @Test
110a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    public void testGetSelectedView_changed() {
111a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy        spinner.setAdapter(arrayAdapter);
112a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy        spinner.setSelection(1);
113a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
114a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy        assertThat(((TextView) spinner.getSelectedView()).getText().toString(),
115a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy                equalTo("bar"));
116a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy    }
117a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy
11829610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin    private static class MyArrayAdapter extends ArrayAdapter<String> {
11929610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin        public MyArrayAdapter(Context context, String[] testItems) {
12029610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin            super(context, android.R.layout.simple_spinner_item, testItems);
12129610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin        }
12229610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin
12329610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin        @Override public View getView(int position, View convertView, ViewGroup parent) {
124a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy            TextView textView = new TextView(getContext());
125a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy            textView.setText(getItem(position));
126a51ccfbbc2e7a9d7d48ba708677925b50c8b70afJohn Stuppy            return textView;
12729610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin        }
12829610b43047065c5dc66452d33f0113ac7e65fe8Phil Goodwin    }
129563821eb6f69ee8158b44465d227b0ce35ad2ed4Christian Williams & Ian Fisher}
130