11b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultzpackage com.xtremelabs.robolectric.res;
21b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultz
31b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultz
48900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richardimport android.view.ViewGroup;
58900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richardimport android.widget.FrameLayout;
68900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richardimport android.widget.TextView;
71129ee5ffaf1069c1f6c396547eb3e8719391522Phil Goodwinimport com.xtremelabs.robolectric.R;
8bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesiimport com.xtremelabs.robolectric.Robolectric;
9bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesiimport com.xtremelabs.robolectric.WithTestDefaultsRunner;
10bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesiimport com.xtremelabs.robolectric.util.I18nException;
111b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultzimport org.junit.Test;
12bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesiimport org.junit.runner.RunWith;
131b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultz
141b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultzimport java.io.File;
151b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultz
161129ee5ffaf1069c1f6c396547eb3e8719391522Phil Goodwinimport static com.xtremelabs.robolectric.util.TestUtil.resourceFile;
178900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richardimport static org.hamcrest.CoreMatchers.equalTo;
188900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richardimport static org.junit.Assert.*;
191b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultz
20bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi@RunWith(WithTestDefaultsRunner.class)
211b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultzpublic class ResourceLoaderTest {
221b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultz    @Test
231b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultz    public void shouldUseFileSystemSeparatorWhenEvaluatingLayoutDirectories() throws Exception {
2410433f9de1c469f25bb0328b9c058e4c92489e6bChristian Williams        assertTrue(ResourceLoader.isLayoutDirectory(File.separator + "layout"));
251b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultz    }
261129ee5ffaf1069c1f6c396547eb3e8719391522Phil Goodwin
271129ee5ffaf1069c1f6c396547eb3e8719391522Phil Goodwin    @Test
281129ee5ffaf1069c1f6c396547eb3e8719391522Phil Goodwin    public void shouldLoadSystemResources() throws Exception {
29e04e87dd1d1b5399264d7be0ed3ae8670dc175a8Ryan Richard        ResourceLoader resourceLoader = new ResourceLoader(10, R.class, resourceFile("res"), resourceFile("assets"));
301129ee5ffaf1069c1f6c396547eb3e8719391522Phil Goodwin        String stringValue = resourceLoader.getStringValue(android.R.string.copy);
311129ee5ffaf1069c1f6c396547eb3e8719391522Phil Goodwin        assertEquals("Copy", stringValue);
322ac51eb24bd7d935791ee42aa3406653eb531529Jesse Toth & Tim Labeeuw
332ac51eb24bd7d935791ee42aa3406653eb531529Jesse Toth & Tim Labeeuw        ViewLoader.ViewNode node = resourceLoader.getLayoutViewNode("android:layout/simple_spinner_item");
342ac51eb24bd7d935791ee42aa3406653eb531529Jesse Toth & Tim Labeeuw        assertNotNull(node);
351129ee5ffaf1069c1f6c396547eb3e8719391522Phil Goodwin    }
3628dc94ecb7ac94834b97e3f6be778b3f2bb734fdJesse Toth & Tim Labeeuw
3728dc94ecb7ac94834b97e3f6be778b3f2bb734fdJesse Toth & Tim Labeeuw    @Test
3828dc94ecb7ac94834b97e3f6be778b3f2bb734fdJesse Toth & Tim Labeeuw    public void shouldLoadLocalResources() throws Exception {
3928dc94ecb7ac94834b97e3f6be778b3f2bb734fdJesse Toth & Tim Labeeuw        ResourceLoader resourceLoader = new ResourceLoader(10, R.class, resourceFile("res"), resourceFile("assets"));
4028dc94ecb7ac94834b97e3f6be778b3f2bb734fdJesse Toth & Tim Labeeuw        String stringValue = resourceLoader.getStringValue(R.string.copy);
4128dc94ecb7ac94834b97e3f6be778b3f2bb734fdJesse Toth & Tim Labeeuw        assertEquals("Local Copy", stringValue);
4228dc94ecb7ac94834b97e3f6be778b3f2bb734fdJesse Toth & Tim Labeeuw    }
43bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi
44bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    @Test(expected=I18nException.class)
45bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    public void shouldThrowExceptionOnI18nStrictModeInflateView() throws Exception {
46bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi        ResourceLoader resourceLoader = new ResourceLoader(10, R.class, resourceFile("res"), resourceFile("layout"));
47bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi        resourceLoader.setStrictI18n(true);
48bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi        ViewGroup vg = new FrameLayout(Robolectric.application);
49bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    	resourceLoader.inflateView(Robolectric.application, R.layout.text_views, vg);
50bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    }
51bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi
52bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    @Test(expected=I18nException.class)
53bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    public void shouldThrowExceptionOnI18nStrictModeInflateMenu() throws Exception {
54bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi        ResourceLoader resourceLoader = new ResourceLoader(10, R.class, resourceFile("res"), resourceFile("menu"));
55bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi        resourceLoader.setStrictI18n(true);
56bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    	resourceLoader.inflateMenu(Robolectric.application, R.menu.test, null);
57bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    }
58bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi
59bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    @Test(expected=I18nException.class)
60bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    public void shouldThrowExceptionOnI18nStrictModeInflatePreferences() throws Exception {
61bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi        ResourceLoader resourceLoader = new ResourceLoader(10, R.class, resourceFile("res"), resourceFile("xml"));
62bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi        resourceLoader.setStrictI18n(true);
63bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    	resourceLoader.inflatePreferences(Robolectric.application, R.xml.preferences);
64bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi    }
65bb2f85d397fa65f20c6932186d9156ced9beb184Michael Portuesi
668900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard    @Test
678900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard    public void testChoosesLayoutBasedOnSearchPath_respectsOrderOfPath() throws Exception {
688900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        ResourceLoader resourceLoader = new ResourceLoader(10, R.class, resourceFile("res"), resourceFile("layout"));
698900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        resourceLoader.setLayoutQualifierSearchPath("does-not-exist", "land", "xlarge");
708900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        ViewGroup viewGroup = new FrameLayout(Robolectric.application);
718900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        ViewGroup view = (ViewGroup) resourceLoader.inflateView(Robolectric.application, R.layout.different_screen_sizes, viewGroup);
728900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        TextView textView = (TextView) view.findViewById(android.R.id.text1);
738900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        assertThat(textView.getText().toString(), equalTo("land"));
748900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard    }
758900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard
768900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard    @Test
778900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard    public void checkForPollution1() throws Exception {
788900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        checkForPollutionHelper();
798900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard    }
808900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard
818900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard    @Test
828900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard    public void checkForPollution2() throws Exception {
838900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        checkForPollutionHelper();
848900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard    }
858900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard
868900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard    private void checkForPollutionHelper() {
878900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        ResourceLoader resourceLoader = Robolectric.getShadowApplication().getResourceLoader();
888900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        ViewGroup viewGroup = new FrameLayout(Robolectric.application);
898900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        ViewGroup view = (ViewGroup) resourceLoader.inflateView(Robolectric.application, R.layout.different_screen_sizes, viewGroup);
908900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        TextView textView = (TextView) view.findViewById(android.R.id.text1);
918900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        assertThat(textView.getText().toString(), equalTo("default"));
928900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard        resourceLoader.setLayoutQualifierSearchPath("land"); // testing if this pollutes the other test
938900025d7fa03579c0ae4d19255d3a8650cbf12aPhil Goodwin & Ryan Richard    }
94d2c283a8036665ed62d2e7b5e83c1e483b3d3197Michael Portuesi
95d2c283a8036665ed62d2e7b5e83c1e483b3d3197Michael Portuesi    @Test
96d2c283a8036665ed62d2e7b5e83c1e483b3d3197Michael Portuesi    public void shouldIdentifyNinePatchDrawables() {
97d2c283a8036665ed62d2e7b5e83c1e483b3d3197Michael Portuesi        ResourceLoader resourceLoader = Robolectric.getShadowApplication().getResourceLoader();
98d2c283a8036665ed62d2e7b5e83c1e483b3d3197Michael Portuesi
99d2c283a8036665ed62d2e7b5e83c1e483b3d3197Michael Portuesi        assertThat(resourceLoader.isNinePatchDrawable(R.drawable.nine_patch_drawable), equalTo(true));
100d2c283a8036665ed62d2e7b5e83c1e483b3d3197Michael Portuesi        assertThat(resourceLoader.isNinePatchDrawable(R.drawable.l2_yellow), equalTo(false));
101d2c283a8036665ed62d2e7b5e83c1e483b3d3197Michael Portuesi        assertThat(resourceLoader.isNinePatchDrawable(R.drawable.state_drawable), equalTo(false));
102d2c283a8036665ed62d2e7b5e83c1e483b3d3197Michael Portuesi        assertThat(resourceLoader.isNinePatchDrawable(R.drawable.animation_list), equalTo(false));
1034de54c96a102b5269cabb4e9122d132d5918d43bMichael Portuesi        assertThat(resourceLoader.isNinePatchDrawable(0), equalTo(false));
1044de54c96a102b5269cabb4e9122d132d5918d43bMichael Portuesi        assertThat(resourceLoader.isNinePatchDrawable(-1), equalTo(false));
105d2c283a8036665ed62d2e7b5e83c1e483b3d3197Michael Portuesi    }
1061b304df1ca29a4ef2ba016c0825637ff41f24f3fPhil Goodwin & Tyler Schultz}
107