Home | History | Annotate | Download | only in shadows
      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
     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
     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
     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
     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
     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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    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
    223 	public void shouldReturnIntent() {
    224 		assertThat( preference.getIntent(), nullValue() );
    225 		preference.setIntent( new Intent() );
    226 		assertThat( preference.getIntent(), notNullValue() );
    227 	}
    228 
    229 	@Test
    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 {
    238 		public TestPreference(Context context) {
    239 			super(context);
    240 		}
    241 
    242 		public TestPreference(Context context, AttributeSet attrs) {
    243 			super(context, attrs);
    244 		}
    245 
    246 		public TestPreference(Context context, AttributeSet attrs, int defStyle) {
    247 			super(context, attrs, defStyle);
    248 		}
    249 
    250 		public boolean shouldPersist() {
    251 			return super.shouldPersist();
    252 		}
    253 
    254 		public int getPersistedInt(int defaultReturnValue) {
    255 			return super.getPersistedInt(defaultReturnValue);
    256 		}
    257 
    258 		public boolean persistInt(int value) {
    259 			return super.persistInt(value);
    260 		}
    261 
    262 		public boolean callChangeListener(Object newValue) {
    263 			return super.callChangeListener(newValue);
    264 		}
    265 	}
    266 }
    267