Home | History | Annotate | Download | only in android
      1 package org.robolectric.android;
      2 
      3 import static org.assertj.core.api.Assertions.assertThat;
      4 
      5 import android.content.res.Configuration;
      6 import android.util.DisplayMetrics;
      7 import org.junit.Before;
      8 import org.junit.Test;
      9 import org.junit.runner.RunWith;
     10 import org.robolectric.RobolectricTestRunner;
     11 import org.robolectric.RuntimeEnvironment;
     12 import org.robolectric.annotation.Config;
     13 import org.robolectric.res.Qualifiers;
     14 
     15 @RunWith(RobolectricTestRunner.class)
     16 @Config(sdk = 26)
     17 public class DeviceConfigTest {
     18 
     19   private Configuration configuration;
     20   private DisplayMetrics displayMetrics;
     21   private int apiLevel;
     22 
     23   @Before
     24   public void setUp() throws Exception {
     25     configuration = new Configuration();
     26     displayMetrics = new DisplayMetrics();
     27     apiLevel = RuntimeEnvironment.getApiLevel();
     28   }
     29 
     30   @Test
     31   public void applyToConfiguration() throws Exception {
     32     applyQualifiers("en-rUS-w400dp-h800dp-notround");
     33     assertThat(asQualifierString())
     34         .isEqualTo("en-rUS-ldltr-w400dp-h800dp-notround");
     35   }
     36 
     37   @Test
     38   public void applyToConfiguration_isCumulative() throws Exception {
     39     applyQualifiers("en-rUS-ldltr-sw400dp-w400dp-h800dp-normal-notlong-notround-port-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav");
     40     assertThat(asQualifierString())
     41         .isEqualTo("en-rUS-ldltr-sw400dp-w400dp-h800dp-normal-notlong-notround-port-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav");
     42 
     43     applyQualifiers("fr-land");
     44     assertThat(asQualifierString())
     45         .isEqualTo("fr-ldltr-sw400dp-w400dp-h800dp-normal-notlong-notround-land-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav");
     46 
     47     applyQualifiers("w500dp-large-television-night-xxhdpi-notouch-keyshidden");
     48     assertThat(asQualifierString())
     49         .isEqualTo("fr-ldltr-sw400dp-w500dp-large-notlong-notround-land-television-night-xxhdpi-notouch-keyshidden-nokeys-navhidden-nonav");
     50 
     51     applyQualifiers("long");
     52     assertThat(asQualifierString())
     53         .isEqualTo("fr-ldltr-sw400dp-w500dp-large-long-notround-land-television-night-xxhdpi-notouch-keyshidden-nokeys-navhidden-nonav");
     54 
     55     applyQualifiers("round");
     56     assertThat(asQualifierString())
     57         .isEqualTo("fr-ldltr-sw400dp-w500dp-large-long-round-land-television-night-xxhdpi-notouch-keyshidden-nokeys-navhidden-nonav");
     58   }
     59 
     60   @Test
     61   public void applyRules_defaults() throws Exception {
     62     DeviceConfig.applyRules(configuration, displayMetrics, apiLevel);
     63 
     64     assertThat(asQualifierString())
     65         .isEqualTo("en-rUS-ldltr-sw320dp-w320dp-h470dp-normal-notlong-notround-port-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav");
     66   }
     67 
     68   @Test
     69   public void applyRules_rtlScript() throws Exception {
     70     applyQualifiers("he");
     71     DeviceConfig.applyRules(configuration, displayMetrics, apiLevel);
     72 
     73     assertThat(asQualifierString())
     74         .isEqualTo("iw-ldrtl-sw320dp-w320dp-h470dp-normal-notlong-notround-port-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav");
     75   }
     76 
     77   @Test
     78   public void applyRules_heightWidth() throws Exception {
     79     applyQualifiers("w800dp-h400dp");
     80     DeviceConfig.applyRules(configuration, displayMetrics, apiLevel);
     81 
     82     assertThat(asQualifierString())
     83         .isEqualTo("en-rUS-ldltr-sw400dp-w800dp-h400dp-normal-long-notround-land-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav");
     84   }
     85 
     86   @Test
     87   public void applyRules_heightWidthOrientation() throws Exception {
     88     applyQualifiers("w800dp-h400dp-port");
     89     DeviceConfig.applyRules(configuration, displayMetrics, apiLevel);
     90 
     91     assertThat(asQualifierString())
     92         .isEqualTo("en-rUS-ldltr-sw400dp-w400dp-h800dp-normal-long-notround-port-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav");
     93   }
     94 
     95   @Test
     96   public void applyRules_sizeToDimens() throws Exception {
     97     applyQualifiers("large-land");
     98     DeviceConfig.applyRules(configuration, displayMetrics, apiLevel);
     99 
    100     assertThat(asQualifierString())
    101         .isEqualTo("en-rUS-ldltr-sw480dp-w640dp-h480dp-large-notlong-notround-land-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav");
    102   }
    103 
    104   @Test
    105   public void applyRules_sizeFromDimens() throws Exception {
    106     applyQualifiers("w800dp-h640dp");
    107     DeviceConfig.applyRules(configuration, displayMetrics, apiLevel);
    108 
    109     assertThat(asQualifierString())
    110         .isEqualTo("en-rUS-ldltr-sw640dp-w800dp-h640dp-large-notlong-notround-land-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav");
    111   }
    112 
    113   @Test
    114   public void applyRules_longIncreasesHeight() throws Exception {
    115     applyQualifiers("long");
    116     DeviceConfig.applyRules(configuration, displayMetrics, apiLevel);
    117 
    118     assertThat(asQualifierString())
    119         .isEqualTo("en-rUS-ldltr-sw320dp-w320dp-h587dp-normal-long-notround-port-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav");
    120   }
    121 
    122   @Test
    123   public void applyRules_greatHeightTriggersLong() throws Exception {
    124     applyQualifiers("h590dp");
    125     DeviceConfig.applyRules(configuration, displayMetrics, apiLevel);
    126 
    127     assertThat(asQualifierString())
    128         .isEqualTo("en-rUS-ldltr-sw320dp-w320dp-h590dp-normal-long-notround-port-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav");
    129   }
    130 
    131   //////////////////////////
    132 
    133   private void applyQualifiers(String qualifiers) {
    134     DeviceConfig.applyToConfiguration(Qualifiers.parse(qualifiers),
    135         apiLevel, configuration, displayMetrics);
    136   }
    137 
    138   private String asQualifierString() {
    139     return ConfigurationV25.resourceQualifierString(configuration, displayMetrics, false);
    140   }
    141 }
    142