PreferenceTest.java revision 5ee82201f6e34eee062a12e1b1c57123b8cdc2f2
1package com.xtremelabs.robolectric.shadows;
2
3import android.app.Activity;
4import android.content.Context;
5import android.preference.Preference;
6import android.util.AttributeSet;
7
8import com.xtremelabs.robolectric.R;
9import com.xtremelabs.robolectric.Robolectric;
10import com.xtremelabs.robolectric.WithTestDefaultsRunner;
11import com.xtremelabs.robolectric.tester.android.util.TestAttributeSet;
12import org.junit.Before;
13import org.junit.Test;
14import org.junit.runner.RunWith;
15
16import java.util.HashMap;
17
18import static org.hamcrest.CoreMatchers.equalTo;
19import static org.hamcrest.CoreMatchers.not;
20import static org.hamcrest.CoreMatchers.nullValue;
21import static org.hamcrest.CoreMatchers.sameInstance;
22import static org.junit.Assert.assertThat;
23
24@RunWith(WithTestDefaultsRunner.class)
25public class PreferenceTest {
26
27	private TestPreference preference;
28	private ShadowPreference shadow;
29
30	private Context context;
31	private TestAttributeSet attrs;
32
33	@Before
34	public void setup() {
35		context = new Activity();
36		attrs = new TestAttributeSet( new HashMap<String, String>() );
37		preference = new TestPreference(context, attrs);
38		shadow = Robolectric.shadowOf( preference );
39	}
40
41	@Test
42	public void shouldConstruct() {
43		int defStyle = 7;
44
45		preference = new TestPreference(context, attrs, defStyle);
46		shadow = Robolectric.shadowOf(preference);
47		assertThat(shadow.getContext(), sameInstance(context));
48		assertThat(shadow.getAttrs(), sameInstance((AttributeSet)attrs));
49		assertThat(shadow.getDefStyle(), equalTo(defStyle));
50
51		preference = new TestPreference(context, attrs);
52		shadow = Robolectric.shadowOf(preference);
53		assertThat(shadow.getContext(), sameInstance( context ));
54		assertThat(shadow.getAttrs(), sameInstance((AttributeSet)attrs));
55		assertThat(shadow.getDefStyle(), equalTo(0));
56
57		preference = new TestPreference(context);
58		shadow = Robolectric.shadowOf(preference);
59		assertThat(shadow.getContext(), sameInstance( context ));
60		assertThat(shadow.getAttrs(), nullValue());
61		assertThat(shadow.getDefStyle(), equalTo(0));
62}
63
64	@Test
65	public void shouldInitializeFromAttributes() {
66		String key = "key_value";
67		HashMap<String, String> hash = new HashMap<String, String>();
68		hash.put( "android:key", key );
69		attrs = new TestAttributeSet( hash );
70
71		preference = new TestPreference(context, attrs);
72		assertThat( preference.getKey(), equalTo(key) );
73	}
74
75	@Test
76	public void shouldHaveAKey() {
77		String key = "key_value";
78
79		assertThat(preference.getKey(), nullValue());
80		preference.setKey(key);
81		assertThat(preference.getKey(), equalTo(key));
82	}
83
84	@Test
85	public void shouldHaveATitle() {
86		CharSequence title = "Test Preference";
87
88		assertThat(preference.getTitle(), nullValue());
89		preference.setTitle(title);
90		assertThat(preference.getTitle(), equalTo(title));
91	}
92
93	@Test
94	public void shouldSetTitleByResId() {
95		CharSequence expected = "Hello";
96
97		assertThat(preference.getTitle(), not(equalTo(expected)));
98		preference.setTitle(R.string.hello);
99		assertThat(preference.getTitle(), equalTo(expected));
100	}
101
102	@Test
103	public void shouldHaveASummary() {
104		CharSequence summary = "This is only a test.";
105
106		assertThat(preference.getSummary(), nullValue());
107		preference.setSummary(summary);
108		assertThat(preference.getSummary(), equalTo(summary));
109	}
110
111	@Test
112	public void shouldSetSummaryByResId() {
113		CharSequence expected = "Hello";
114
115		assertThat(preference.getSummary(), not(equalTo(expected)));
116		preference.setSummary(R.string.hello);
117		assertThat(preference.getSummary(), equalTo(expected));
118	}
119
120	@Test
121	public void shouldRememberDefaultValue() {
122		Object defaultValue = "Zoodles was here";
123
124		assertThat(shadow.getDefaultValue(), nullValue());
125		preference.setDefaultValue(defaultValue);
126		assertThat(shadow.getDefaultValue(), sameInstance(defaultValue));
127	}
128
129	@Test
130	public void shouldOrder() {
131		int[] values = { 0, 1, 2, 2011 };
132
133		for(int order : values) {
134			preference.setOrder(order);
135			assertThat(preference.getOrder(), equalTo(order));
136		}
137	}
138
139
140	@Test
141	public void shouldEnable() {
142		assertThat(preference.isEnabled(), equalTo(true));
143
144		preference.setEnabled(false);
145		assertThat(preference.isEnabled(), equalTo(false));
146
147		preference.setEnabled(true);
148		assertThat(preference.isEnabled(), equalTo(true));
149	}
150
151	@Test
152	public void testShouldPersist() {
153		boolean[] values = { true, false };
154
155		for( boolean shouldPersist : values ) {
156			shadow.setShouldPersist(shouldPersist);
157			assertThat(preference.shouldPersist(), equalTo(shouldPersist));
158		}
159	}
160
161	@Test
162	public void testPersistedInt() {
163		int defaultValue = 727;
164		int[] values = { 0, 1, 2, 2011 };
165
166		for(int persistedInt : values) {
167			shadow.persistInt(persistedInt);
168
169			shadow.setShouldPersist(false);
170			assertThat(preference.getPersistedInt(defaultValue), equalTo(defaultValue));
171
172			shadow.setShouldPersist(true);
173			assertThat(preference.getPersistedInt(defaultValue), equalTo(persistedInt));
174		}
175	}
176
177	@Test
178	public void testCallChangeListener() {
179		Integer[] values = { 0, 1, 2, 2011 };
180
181		for(Integer newValue : values) {
182			assertThat(preference.callChangeListener(newValue), equalTo(true));
183			assertThat(shadow.getCallChangeListenerValue(), sameInstance((Object)newValue));
184		}
185	}
186
187	////////////////////////////////////////////////////////////
188	// TestPreference
189	////////////////////////////////////////////////////////////
190
191	private static class TestPreference extends Preference {
192		public TestPreference(Context context) {
193			super(context);
194		}
195
196		public TestPreference(Context context, AttributeSet attrs) {
197			super(context, attrs);
198		}
199
200		public TestPreference(Context context, AttributeSet attrs, int defStyle) {
201			super(context, attrs, defStyle);
202		}
203
204		public boolean shouldPersist() {
205			return super.shouldPersist();
206		}
207
208		public int getPersistedInt(int defaultReturnValue) {
209			return super.getPersistedInt(defaultReturnValue);
210		}
211
212		public boolean persistInt(int value) {
213			return super.persistInt(value);
214		}
215
216		public boolean callChangeListener(Object newValue) {
217			return super.callChangeListener(newValue);
218		}
219	}
220}
221