Home | History | Annotate | Download | only in robolectric
      1 package org.robolectric;
      2 
      3 import static android.os.Build.VERSION_CODES.O;
      4 import static org.assertj.core.api.Assertions.assertThat;
      5 import static org.junit.Assert.fail;
      6 
      7 import android.app.Activity;
      8 import android.content.res.Configuration;
      9 import android.content.res.Resources;
     10 import android.os.Build.VERSION_CODES;
     11 import android.view.View;
     12 import android.widget.TextView;
     13 import org.junit.Before;
     14 import org.junit.Test;
     15 import org.junit.runner.RunWith;
     16 import org.robolectric.annotation.Config;
     17 
     18 @RunWith(RobolectricTestRunner.class)
     19 public class QualifiersTest {
     20 
     21   private Resources resources;
     22 
     23   @Before
     24   public void setUp() throws Exception {
     25     resources = RuntimeEnvironment.application.getResources();
     26   }
     27 
     28   @Test
     29   @Config(sdk = 26)
     30   public void testDefaultQualifiers() throws Exception {
     31     assertThat(RuntimeEnvironment.getQualifiers())
     32         .isEqualTo("en-rUS-ldltr-sw320dp-w320dp-h470dp-normal-notlong-notround-port-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav-v26");
     33   }
     34 
     35   @Test
     36   @Config(qualifiers = "en", sdk = 26)
     37   public void testDefaultQualifiers_withoutRegion() throws Exception {
     38     assertThat(RuntimeEnvironment.getQualifiers())
     39         .isEqualTo("en-ldltr-sw320dp-w320dp-h470dp-normal-notlong-notround-port-notnight-mdpi-finger-keyssoft-nokeys-navhidden-nonav-v26");
     40   }
     41 
     42   @Test
     43   @Config(qualifiers = "land")
     44   public void orientation() throws Exception {
     45     assertThat(Robolectric.setupActivity(Activity.class).getResources().getConfiguration().orientation)
     46         .isEqualTo(Configuration.ORIENTATION_LANDSCAPE);
     47   }
     48 
     49   @Test @Config(qualifiers = "fr")
     50   public void shouldGetFromMethod() throws Exception {
     51     assertThat(RuntimeEnvironment.getQualifiers()).contains("fr");
     52   }
     53 
     54   @Test @Config(qualifiers = "de")
     55   public void getQuantityString() throws Exception {
     56     assertThat(resources.getQuantityString(R.plurals.minute, 2)).isEqualTo(
     57         resources.getString(R.string.minute_plural));
     58   }
     59 
     60   @Test
     61   public void inflateLayout_defaultsTo_sw320dp() throws Exception {
     62     View view = Robolectric.setupActivity(Activity.class).getLayoutInflater().inflate(R.layout.layout_smallest_width, null);
     63     TextView textView = view.findViewById(R.id.text1);
     64     assertThat(textView.getText()).isEqualTo("320");
     65 
     66     assertThat(resources.getConfiguration().smallestScreenWidthDp).isEqualTo(320);
     67   }
     68 
     69   @Test @Config(qualifiers = "sw720dp")
     70   public void inflateLayout_overridesTo_sw720dp() throws Exception {
     71     View view = Robolectric.setupActivity(Activity.class).getLayoutInflater().inflate(R.layout.layout_smallest_width, null);
     72     TextView textView = view.findViewById(R.id.text1);
     73     assertThat(textView.getText()).isEqualTo("720");
     74 
     75     assertThat(resources.getConfiguration().smallestScreenWidthDp).isEqualTo(720);
     76   }
     77 
     78   @Test @Config(qualifiers = "b+sr+Latn", minSdk = VERSION_CODES.LOLLIPOP)
     79   public void supportsBcp47() throws Exception {
     80     assertThat(resources.getString(R.string.hello)).isEqualTo("Zdravo");
     81   }
     82 
     83   @Test
     84   public void defaultScreenWidth() {
     85     assertThat(resources.getBoolean(R.bool.value_only_present_in_w320dp)).isTrue();
     86     assertThat(resources.getConfiguration().screenWidthDp).isEqualTo(320);
     87   }
     88 
     89   @Test @Config(qualifiers = "land")
     90   public void setQualifiers_updatesSystemAndAppResources() throws Exception {
     91     Resources systemResources = Resources.getSystem();
     92     Resources appResources = RuntimeEnvironment.application.getResources();
     93 
     94     assertThat(systemResources.getConfiguration().orientation).isEqualTo(
     95         Configuration.ORIENTATION_LANDSCAPE);
     96     assertThat(appResources.getConfiguration().orientation).isEqualTo(
     97         Configuration.ORIENTATION_LANDSCAPE);
     98 
     99     RuntimeEnvironment.setQualifiers("port");
    100     assertThat(systemResources.getConfiguration().orientation).isEqualTo(
    101         Configuration.ORIENTATION_PORTRAIT);
    102     assertThat(appResources.getConfiguration().orientation).isEqualTo(
    103         Configuration.ORIENTATION_PORTRAIT);
    104   }
    105 
    106   @Test
    107   public void setQualifiers_allowsSameSdkVersion() throws Exception {
    108     RuntimeEnvironment.setQualifiers("v" + RuntimeEnvironment.getApiLevel());
    109   }
    110 
    111   @Test
    112   public void setQualifiers_disallowsOtherSdkVersions() throws Exception {
    113     try {
    114       RuntimeEnvironment.setQualifiers("v13");
    115       fail();
    116     } catch (IllegalArgumentException e) {
    117       assertThat(e.getMessage()).contains("Cannot specify conflicting platform version in qualifiers");
    118     }
    119   }
    120 
    121   @Test
    122   @Config(minSdk = O, qualifiers = "widecg-highdr-vrheadset")
    123   public void testQualifiersNewIn26() throws Exception {
    124     assertThat(RuntimeEnvironment.getQualifiers())
    125         .contains("-widecg-highdr-")
    126         .contains("-vrheadset-");
    127   }
    128 }
    129