• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.xtremelabs.robolectric.shadows;
2 
3 import static org.hamcrest.CoreMatchers.equalTo;
4 import static org.hamcrest.CoreMatchers.not;
5 import static org.hamcrest.CoreMatchers.nullValue;
6 import static org.hamcrest.CoreMatchers.notNullValue;
7 import static org.hamcrest.CoreMatchers.sameInstance;
8 import static org.junit.Assert.assertThat;
9 
10 import java.util.HashMap;
11 
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.junit.runner.RunWith;
15 
16 import android.app.Activity;
17 import android.content.Context;
18 import android.content.Intent;
19 import android.preference.Preference;
20 import android.preference.Preference.OnPreferenceClickListener;
21 import android.util.AttributeSet;
22 
23 import com.xtremelabs.robolectric.R;
24 import com.xtremelabs.robolectric.Robolectric;
25 import com.xtremelabs.robolectric.WithTestDefaultsRunner;
26 import com.xtremelabs.robolectric.tester.android.util.TestAttributeSet;
27 
28 @RunWith(WithTestDefaultsRunner.class)
29 public class PreferenceTest {
30 
31 	private TestPreference preference;
32 	private ShadowPreference shadow;
33 
34 	private Context context;
35 	private TestAttributeSet attrs;
36 
37 	private boolean clicked = false;
38 
39 	@Before
setup()40 	public void setup() {
41 		context = new Activity();
42 		attrs = new TestAttributeSet( new HashMap<String, String>() );
43 		preference = new TestPreference(context, attrs);
44 		shadow = Robolectric.shadowOf( preference );
45 	}
46 
47 	@Test
shouldConstruct()48 	public void shouldConstruct() {
49 		int defStyle = 7;
50 
51 		preference = new TestPreference(context, attrs, defStyle);
52 		shadow = Robolectric.shadowOf(preference);
53 		assertThat(shadow.getContext(), sameInstance(context));
54 		assertThat(shadow.getAttrs(), sameInstance((AttributeSet)attrs));
55 		assertThat(shadow.getDefStyle(), equalTo(defStyle));
56 
57 		preference = new TestPreference(context, attrs);
58 		shadow = Robolectric.shadowOf(preference);
59 		assertThat(shadow.getContext(), sameInstance( context ));
60 		assertThat(shadow.getAttrs(), sameInstance((AttributeSet)attrs));
61 		assertThat(shadow.getDefStyle(), equalTo(0));
62 
63 		preference = new TestPreference(context);
64 		shadow = Robolectric.shadowOf(preference);
65 		assertThat(shadow.getContext(), sameInstance( context ));
66 		assertThat(shadow.getAttrs(), nullValue());
67 		assertThat(shadow.getDefStyle(), equalTo(0));
68 }
69 
70 	@Test
shouldInitializeFromAttributes()71 	public void shouldInitializeFromAttributes() {
72 		String key = "key_value";
73 		HashMap<String, String> hash = new HashMap<String, String>();
74 		hash.put( "android:key", key );
75 		attrs = new TestAttributeSet( hash );
76 
77 		preference = new TestPreference(context, attrs);
78 		assertThat( preference.getKey(), equalTo(key) );
79 	}
80 
81 	@Test
shouldHaveAKey()82 	public void shouldHaveAKey() {
83 		String key = "key_value";
84 
85 		assertThat(preference.getKey(), nullValue());
86 		preference.setKey(key);
87 		assertThat(preference.getKey(), equalTo(key));
88 	}
89 
90 	@Test
shouldHaveATitle()91 	public void shouldHaveATitle() {
92 		CharSequence title = "Test Preference";
93 
94 		assertThat(preference.getTitle(), nullValue());
95 		preference.setTitle(title);
96 		assertThat(preference.getTitle(), equalTo(title));
97 	}
98 
99 	@Test
shouldSetTitleByResourceId()100 	public void shouldSetTitleByResourceId() {
101 		CharSequence expected = "Hello";
102 
103 		assertThat(preference.getTitle(), not(equalTo(expected)));
104 		preference.setTitle(R.string.hello);
105 		assertThat(preference.getTitle(), equalTo(expected));
106 	}
107 
108 	@Test
shouldHaveASummary()109 	public void shouldHaveASummary() {
110 		CharSequence summary = "This is only a test.";
111 
112 		assertThat(preference.getSummary(), nullValue());
113 		preference.setSummary(summary);
114 		assertThat(preference.getSummary(), equalTo(summary));
115 	}
116 
117 	@Test
shouldSetSummaryByResourceId()118 	public void shouldSetSummaryByResourceId() {
119 		CharSequence expected = "Hello";
120 
121 		assertThat(preference.getSummary(), not(equalTo(expected)));
122 		preference.setSummary(R.string.hello);
123 		assertThat(preference.getSummary(), equalTo(expected));
124 	}
125 
126 	@Test
shouldRememberDefaultValue()127 	public void shouldRememberDefaultValue() {
128 		Object defaultValue = "Zoodles was here";
129 
130 		assertThat(shadow.getDefaultValue(), nullValue());
131 		preference.setDefaultValue(defaultValue);
132 		assertThat(shadow.getDefaultValue(), sameInstance(defaultValue));
133 	}
134 
135 	@Test
shouldOrder()136 	public void shouldOrder() {
137 		int[] values = { 0, 1, 2, 2011 };
138 
139 		for(int order : values) {
140 			preference.setOrder(order);
141 			assertThat(preference.getOrder(), equalTo(order));
142 		}
143 	}
144 
145 	@Test
shouldEnable()146 	public void shouldEnable() {
147 		assertThat(preference.isEnabled(), equalTo(true));
148 
149 		preference.setEnabled(false);
150 		assertThat(preference.isEnabled(), equalTo(false));
151 
152 		preference.setEnabled(true);
153 		assertThat(preference.isEnabled(), equalTo(true));
154 	}
155 
156 	@Test
testPersistent()157 	public void testPersistent() {
158 		boolean[] values = { true, false };
159 
160 		for( boolean shouldPersist : values ) {
161 			shadow.setPersistent(shouldPersist);
162 			assertThat(preference.shouldPersist(), equalTo(shouldPersist));
163 			assertThat(preference.isPersistent(), equalTo(shouldPersist));
164 		}
165 	}
166 
167 	@Test
shouldPersistedIn()168 	public void shouldPersistedIn() {
169 		int defaultValue = 727;
170 		int[] values = { 0, 1, 2, 2011 };
171 
172 		for(int persistedInt : values) {
173 			shadow.persistInt(persistedInt);
174 
175 			shadow.setPersistent(false);
176 			assertThat(preference.getPersistedInt(defaultValue), equalTo(defaultValue));
177 
178 			shadow.setPersistent(true);
179 			assertThat(preference.getPersistedInt(defaultValue), equalTo(persistedInt));
180 		}
181 	}
182 
183 	@Test
shouldRememberOnClickListener()184 	public void shouldRememberOnClickListener() {
185 		Preference.OnPreferenceClickListener onPreferenceClickListener = new OnPreferenceClickListener() {
186 			@Override
187 			public boolean onPreferenceClick(Preference preference) {
188 				return true;
189 			}
190 		};
191 
192 		preference.setOnPreferenceClickListener(onPreferenceClickListener);
193 		assertThat(shadow.getOnPreferenceClickListener(), sameInstance(onPreferenceClickListener));
194 	}
195 
196 	@Test
shouldClickThroughToClickListener()197 	public void shouldClickThroughToClickListener() {
198 		Preference.OnPreferenceClickListener onPreferenceClickListener = new OnPreferenceClickListener() {
199 			@Override
200 			public boolean onPreferenceClick(Preference preference) {
201 				clicked = true;
202 				return true;
203 			}
204 		};
205 		preference.setOnPreferenceClickListener(onPreferenceClickListener);
206 
207 		assertThat( clicked, equalTo(false));
208 		assertThat( shadow.click(), equalTo(true));
209 		assertThat( clicked, equalTo(true));
210 	}
211 
212 	@Test
shouldCallChangeListener()213 	public void shouldCallChangeListener() {
214 		Integer[] values = { 0, 1, 2, 2011 };
215 
216 		for(Integer newValue : values) {
217 			assertThat(preference.callChangeListener(newValue), equalTo(true));
218 			assertThat(shadow.getCallChangeListenerValue(), sameInstance((Object)newValue));
219 		}
220 	}
221 
222 	@Test
shouldReturnIntent()223 	public void shouldReturnIntent() {
224 		assertThat( preference.getIntent(), nullValue() );
225 		preference.setIntent( new Intent() );
226 		assertThat( preference.getIntent(), notNullValue() );
227 	}
228 
229 	@Test
shouldRememberDependency()230 	public void shouldRememberDependency() {
231 		assertThat( preference.getDependency(), nullValue() );
232 		preference.setDependency( "TEST_PREF_KEY" );
233 		assertThat( preference.getDependency(), notNullValue() );
234 		assertThat( preference.getDependency(), equalTo("TEST_PREF_KEY") );
235 	}
236 
237 	private static class TestPreference extends Preference {
TestPreference(Context context)238 		public TestPreference(Context context) {
239 			super(context);
240 		}
241 
TestPreference(Context context, AttributeSet attrs)242 		public TestPreference(Context context, AttributeSet attrs) {
243 			super(context, attrs);
244 		}
245 
TestPreference(Context context, AttributeSet attrs, int defStyle)246 		public TestPreference(Context context, AttributeSet attrs, int defStyle) {
247 			super(context, attrs, defStyle);
248 		}
249 
shouldPersist()250 		public boolean shouldPersist() {
251 			return super.shouldPersist();
252 		}
253 
getPersistedInt(int defaultReturnValue)254 		public int getPersistedInt(int defaultReturnValue) {
255 			return super.getPersistedInt(defaultReturnValue);
256 		}
257 
persistInt(int value)258 		public boolean persistInt(int value) {
259 			return super.persistInt(value);
260 		}
261 
callChangeListener(Object newValue)262 		public boolean callChangeListener(Object newValue) {
263 			return super.callChangeListener(newValue);
264 		}
265 	}
266 }
267