1 package org.robolectric.res; 2 3 import static org.assertj.core.api.Assertions.assertThat; 4 import static org.assertj.core.api.Assertions.assertThatThrownBy; 5 6 import org.junit.Test; 7 import org.junit.runner.RunWith; 8 import org.junit.runners.JUnit4; 9 import org.robolectric.res.android.ResTable_config; 10 11 @RunWith(JUnit4.class) 12 public class QualifiersTest { 13 @Test 14 public void testQualifiers() throws Exception { 15 assertThat(configFrom("values-land-finger")).isEqualTo("land-finger"); 16 } 17 18 @Test 19 public void testWhenQualifiersFailToParse() throws Exception { 20 assertThatThrownBy(() -> configFrom("values-unknown-v23")) 21 .isInstanceOf(IllegalArgumentException.class) 22 .hasMessageContaining("failed to parse qualifiers 'unknown-v23"); 23 } 24 25 private String configFrom(String path) { 26 FsFile xmlFile = Fs.newFile(path + "/whatever.xml"); 27 Qualifiers qualifiers = Qualifiers.fromParentDir(xmlFile.getParent()); 28 29 ResTable_config config = new XmlContext("package", xmlFile, qualifiers) 30 .getConfig(); 31 return config.toString(); 32 } 33 34 ///////// deprecated stuff... 35 36 @Test public void addPlatformVersion() throws Exception { 37 assertThat(Qualifiers.addPlatformVersion("", 21)).isEqualTo("v21"); 38 assertThat(Qualifiers.addPlatformVersion("v23", 21)).isEqualTo("v23"); 39 assertThat(Qualifiers.addPlatformVersion("foo-v14", 21)).isEqualTo("foo-v14"); 40 } 41 42 @Test public void addSmallestScreenWidth() throws Exception { 43 assertThat(Qualifiers.addSmallestScreenWidth("", 320)).isEqualTo("sw320dp"); 44 assertThat(Qualifiers.addSmallestScreenWidth("sw160dp", 320)).isEqualTo("sw160dp"); 45 assertThat(Qualifiers.addSmallestScreenWidth("sw480dp", 320)).isEqualTo("sw480dp"); 46 assertThat(Qualifiers.addSmallestScreenWidth("en-v23", 320)).isEqualTo("en-v23-sw320dp"); // todo: order is wrong here 47 assertThat(Qualifiers.addSmallestScreenWidth("en-sw160dp-v23", 320)).isEqualTo("en-sw160dp-v23"); 48 assertThat(Qualifiers.addSmallestScreenWidth("en-sw480dp-v23", 320)).isEqualTo("en-sw480dp-v23"); 49 } 50 51 @Test public void addScreenWidth() throws Exception { 52 assertThat(Qualifiers.addScreenWidth("", 320)).isEqualTo("w320dp"); 53 assertThat(Qualifiers.addScreenWidth("w160dp", 320)).isEqualTo("w160dp"); 54 assertThat(Qualifiers.addScreenWidth("w480dp", 320)).isEqualTo("w480dp"); 55 assertThat(Qualifiers.addScreenWidth("en-v23", 320)).isEqualTo("en-v23-w320dp"); // todo: order is wrong here 56 assertThat(Qualifiers.addScreenWidth("en-w160dp-v23", 320)).isEqualTo("en-w160dp-v23"); 57 assertThat(Qualifiers.addScreenWidth("en-w480dp-v23", 320)).isEqualTo("en-w480dp-v23"); 58 } 59 60 @Test public void getSmallestScreenWidth() { 61 assertThat(Qualifiers.getSmallestScreenWidth("sw320dp")).isEqualTo(320); 62 assertThat(Qualifiers.getSmallestScreenWidth("sw320dp-v7")).isEqualTo(320); 63 assertThat(Qualifiers.getSmallestScreenWidth("en-rUS-sw320dp")).isEqualTo(320); 64 assertThat(Qualifiers.getSmallestScreenWidth("en-rUS-sw320dp-v7")).isEqualTo(320); 65 assertThat(Qualifiers.getSmallestScreenWidth("en-rUS-v7")).isEqualTo(-1); 66 assertThat(Qualifiers.getSmallestScreenWidth("en-rUS-w320dp-v7")).isEqualTo(-1); 67 } 68 69 @Test public void getAddSmallestScreenWidth() { 70 assertThat(Qualifiers.addSmallestScreenWidth("v7", 320)).isEqualTo("v7-sw320dp"); 71 assertThat(Qualifiers.addSmallestScreenWidth("sw320dp-v7", 480)).isEqualTo("sw320dp-v7"); 72 } 73 74 @Test public void getScreenWidth() { 75 assertThat(Qualifiers.getScreenWidth("w320dp")).isEqualTo(320); 76 assertThat(Qualifiers.getScreenWidth("w320dp-v7")).isEqualTo(320); 77 assertThat(Qualifiers.getScreenWidth("en-rUS-w320dp")).isEqualTo(320); 78 assertThat(Qualifiers.getScreenWidth("en-rUS-w320dp-v7")).isEqualTo(320); 79 assertThat(Qualifiers.getScreenWidth("en-rUS-v7")).isEqualTo(-1); 80 assertThat(Qualifiers.getScreenWidth("de-v23-sw320dp-w1024dp")).isEqualTo(1024); 81 assertThat(Qualifiers.getScreenWidth("en-rUS-sw320dp-v7")).isEqualTo(-1); 82 } 83 84 @Test public void getAddScreenWidth() { 85 assertThat(Qualifiers.addScreenWidth("v7", 320)).isEqualTo("v7-w320dp"); 86 assertThat(Qualifiers.addScreenWidth("w320dp-v7", 480)).isEqualTo("w320dp-v7"); 87 } 88 89 @Test public void getOrientation() { 90 assertThat(Qualifiers.getOrientation("land")).isEqualTo("land"); 91 assertThat(Qualifiers.getOrientation("en-rUs-land")).isEqualTo("land"); 92 assertThat(Qualifiers.getOrientation("port")).isEqualTo("port"); 93 assertThat(Qualifiers.getOrientation("port-v7")).isEqualTo("port"); 94 } 95 } 96