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