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