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