Home | History | Annotate | Download | only in res
      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