1package com.xtremelabs.robolectric.shadows;
2
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertSame;
5import static org.mockito.Mockito.mock;
6
7import com.xtremelabs.robolectric.Robolectric;
8import com.xtremelabs.robolectric.WithTestDefaultsRunner;
9
10import org.junit.Test;
11import org.junit.runner.RunWith;
12
13import android.content.Context;
14import android.widget.AdapterView.OnItemClickListener;
15import android.widget.ArrayAdapter;
16import android.widget.AutoCompleteTextView;
17
18@RunWith(WithTestDefaultsRunner.class)
19public class ShadowAutoCompleteTextViewTest {
20
21    @Test
22    public void shouldStoreAdapter() {
23        AutoCompleteTextView autoCompleteTextView =
24                new AutoCompleteTextView(Robolectric.application);
25        ArrayAdapter<Object> adapter = new ArrayAdapter<Object>(Robolectric.application, 0);
26
27        autoCompleteTextView.setAdapter(adapter);
28
29        assertSame(adapter, autoCompleteTextView.getAdapter());
30    }
31
32    @Test
33    public void shouldHaveDefaultThresholdOfTwo() {
34        AutoCompleteTextView autoCompleteTextView =
35                new AutoCompleteTextView(Robolectric.application);
36
37        assertEquals(2, autoCompleteTextView.getThreshold());
38    }
39
40    @Test
41    public void shouldStoreThreshold() {
42        AutoCompleteTextView autoCompleteTextView =
43                new AutoCompleteTextView(Robolectric.application);
44
45        autoCompleteTextView.setThreshold(123);
46
47        assertEquals(123, autoCompleteTextView.getThreshold());
48    }
49
50    @Test
51    public void shouldNotStoreThresholdLessThanOne() {
52        AutoCompleteTextView autoCompleteTextView =
53                new AutoCompleteTextView(Robolectric.application);
54
55        autoCompleteTextView.setThreshold(-1);
56
57        assertEquals(1, autoCompleteTextView.getThreshold());
58    }
59
60    @Test
61    public void shouldStoreOnItemClickListener() {
62        AutoCompleteTextView autoCompleteTextView =
63                new AutoCompleteTextView(Robolectric.application);
64        OnItemClickListener listener = mock(OnItemClickListener.class);
65
66        autoCompleteTextView.setOnItemClickListener(listener);
67
68        assertSame(listener, autoCompleteTextView.getOnItemClickListener());
69    }
70
71    @Test
72    public void shouldReplaceTextAndUpdateSelection() {
73        String text = "hello world";
74        ReplaceableAutoCompleteTextView autoCompleteTextView =
75                new ReplaceableAutoCompleteTextView(Robolectric.application);
76
77        autoCompleteTextView.publicReplaceText(text);
78
79        assertEquals(text, autoCompleteTextView.getText().toString());
80        assertEquals(text.length(), autoCompleteTextView.getSelectionStart());
81        assertEquals(text.length(), autoCompleteTextView.getSelectionEnd());
82    }
83
84    private static class ReplaceableAutoCompleteTextView extends AutoCompleteTextView {
85
86        public ReplaceableAutoCompleteTextView(Context context) {
87            super(context);
88        }
89
90        public void publicReplaceText(CharSequence text) {
91            replaceText(text);
92        }
93    }
94}
95