1package com.xtremelabs.robolectric.res; 2 3import static com.xtremelabs.robolectric.util.TestUtil.resourceFile; 4 5import org.junit.Before; 6import org.junit.Test; 7import org.junit.runner.RunWith; 8 9import android.app.Activity; 10import android.preference.CheckBoxPreference; 11import android.preference.EditTextPreference; 12import android.preference.ListPreference; 13import android.preference.Preference; 14import android.preference.PreferenceCategory; 15import android.preference.PreferenceScreen; 16import android.preference.RingtonePreference; 17 18import com.xtremelabs.robolectric.R; 19import com.xtremelabs.robolectric.Robolectric; 20import com.xtremelabs.robolectric.WithTestDefaultsRunner; 21import com.xtremelabs.robolectric.util.I18nException; 22 23import static org.hamcrest.CoreMatchers.equalTo; 24import static org.hamcrest.CoreMatchers.instanceOf; 25import static org.junit.Assert.assertThat; 26 27@RunWith(WithTestDefaultsRunner.class) 28public class PreferenceLoaderTest { 29 private PreferenceLoader prefLoader; 30 31 @Before 32 public void setUp() throws Exception { 33 Robolectric.bindDefaultShadowClasses(); 34 35 ResourceExtractor resourceExtractor = new ResourceExtractor(); 36 resourceExtractor.addLocalRClass(R.class); 37 StringResourceLoader stringResourceLoader = new StringResourceLoader(resourceExtractor); 38 new DocumentLoader(stringResourceLoader).loadResourceXmlDir(resourceFile("res", "values")); 39 prefLoader = new PreferenceLoader(resourceExtractor); 40 new DocumentLoader(prefLoader).loadResourceXmlDir(resourceFile("res", "xml")); 41 } 42 43 @Test 44 public void shouldCreateCorrectClasses() { 45 PreferenceScreen screen = prefLoader.inflatePreferences(new Activity(), "xml/preferences"); 46 assertThatScreenMatchesExpected(screen); 47 } 48 49 @Test 50 public void shouldLoadByResourceId() { 51 PreferenceScreen screen = prefLoader.inflatePreferences(new Activity(), R.xml.preferences); 52 assertThatScreenMatchesExpected(screen); 53 } 54 55 @Test(expected=I18nException.class) 56 public void shouldThrowI18nExceptionOnPrefsWithBareStrings() throws Exception { 57 ResourceExtractor resourceExtractor = new ResourceExtractor(); 58 resourceExtractor.addLocalRClass(R.class); 59 StringResourceLoader stringResourceLoader = new StringResourceLoader(resourceExtractor); 60 new DocumentLoader(stringResourceLoader).loadResourceXmlDir(resourceFile("res", "values")); 61 prefLoader = new PreferenceLoader(resourceExtractor); 62 prefLoader.setStrictI18n(true); 63 new DocumentLoader(prefLoader).loadResourceXmlDir(resourceFile("res", "xml")); 64 65 prefLoader.inflatePreferences(Robolectric.application, R.xml.preferences); 66 } 67 68 protected void assertThatScreenMatchesExpected(PreferenceScreen screen) { 69 assertThat(screen.getPreferenceCount(), equalTo(6)); 70 71 assertThat(screen.getPreference(0), instanceOf(PreferenceCategory.class)); 72 assertThat(((PreferenceCategory)screen.getPreference(0)).getPreference(0), instanceOf(Preference.class)); 73 74 assertThat(screen.getPreference(1), instanceOf(CheckBoxPreference.class)); 75 assertThat(screen.getPreference(2), instanceOf(EditTextPreference.class)); 76 assertThat(screen.getPreference(3), instanceOf(ListPreference.class)); 77 assertThat(screen.getPreference(4), instanceOf(Preference.class)); 78 assertThat(screen.getPreference(5), instanceOf(RingtonePreference.class)); 79 } 80} 81