package org.robolectric.shadows;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.TestRunners;
import static org.assertj.core.api.Assertions.assertThat;
import static org.robolectric.Shadows.shadowOf;
@RunWith(TestRunners.MultiApiSelfTest.class)
public class ShadowAbsSpinnerTest {
private Context context;
private Spinner spinner;
private ShadowAbsSpinner shadowSpinner;
private ArrayAdapter<String> arrayAdapter;
@Before
public void setUp() throws Exception {
context = RuntimeEnvironment.application;
spinner = new Spinner(context);
shadowSpinner = shadowOf(spinner);
String [] testItems = {"foo", "bar"};
arrayAdapter = new MyArrayAdapter(this.context, testItems);
}
@Test
public void checkSetAdapter() {
spinner.setAdapter(arrayAdapter);
}
@Test
public void getSelectedItemShouldReturnCorrectValue(){
spinner.setAdapter(arrayAdapter);
spinner.setSelection(0);
assertThat((String) spinner.getSelectedItem()).isEqualTo("foo");
assertThat((String) spinner.getSelectedItem()).isNotEqualTo("bar");
spinner.setSelection(1);
assertThat((String) spinner.getSelectedItem()).isEqualTo("bar");
assertThat((String) spinner.getSelectedItem()).isNotEqualTo("foo");
}
@Test
public void getSelectedItemShouldReturnNull_NoAdapterSet(){
assertThat(spinner.getSelectedItem()).isNull();
}
@Test
public void setSelectionWithAnimatedTransition() {
spinner.setAdapter(arrayAdapter);
spinner.setSelection(0, true);
assertThat((String) spinner.getSelectedItem()).isEqualTo("foo");
assertThat((String) spinner.getSelectedItem()).isNotEqualTo("bar");
assertThat(shadowSpinner.isAnimatedTransition()).isTrue();
}
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) {
return new View(getContext());
}
}
}