Parse orientation value from qualifiers. (#3046)
Set Configuration.orientation accordingly.
diff --git a/robolectric-resources/src/main/java/org/robolectric/res/Qualifiers.java b/robolectric-resources/src/main/java/org/robolectric/res/Qualifiers.java
index bf439f1..d57355c 100644
--- a/robolectric-resources/src/main/java/org/robolectric/res/Qualifiers.java
+++ b/robolectric-resources/src/main/java/org/robolectric/res/Qualifiers.java
@@ -14,6 +14,7 @@
private static final Pattern SMALLEST_SCREEN_WIDTH_PATTERN = Pattern.compile("^sw([0-9]+)dp");
private static final Pattern VERSION_QUALIFIER_PATTERN = Pattern.compile("(v)([0-9]+)$");
private static final Pattern SIZE_QUALIFIER_PATTERN = Pattern.compile("(s?[wh])([0-9]+)dp");
+ private static final Pattern ORIENTATION_QUALIFIER_PATTERN = Pattern.compile("(land|port)");
// Version are matched in the end, and hence have least order
private static final int ORDER_VERSION = 0;
@@ -179,4 +180,14 @@
}
return qualifiers;
}
+
+ public static String getOrientation(String qualifiers) {
+ for (String qualifier : qualifiers.split("-")) {
+ Matcher matcher = ORIENTATION_QUALIFIER_PATTERN.matcher(qualifier);
+ if (matcher.find()) {
+ return matcher.group(1);
+ }
+ }
+ return null;
+ }
}
diff --git a/robolectric-resources/src/test/java/org/robolectric/res/QualifiersTest.java b/robolectric-resources/src/test/java/org/robolectric/res/QualifiersTest.java
index f7e9f8b..d683568 100644
--- a/robolectric-resources/src/test/java/org/robolectric/res/QualifiersTest.java
+++ b/robolectric-resources/src/test/java/org/robolectric/res/QualifiersTest.java
@@ -60,4 +60,11 @@
assertThat(Qualifiers.addScreenWidth("v7", 320)).isEqualTo("v7-w320dp");
assertThat(Qualifiers.addScreenWidth("w320dp-v7", 480)).isEqualTo("w320dp-v7");
}
+
+ @Test public void getOrientation() {
+ assertThat(Qualifiers.getOrientation("land")).isEqualTo("land");
+ assertThat(Qualifiers.getOrientation("en-rUs-land")).isEqualTo("land");
+ assertThat(Qualifiers.getOrientation("port")).isEqualTo("port");
+ assertThat(Qualifiers.getOrientation("port-v7")).isEqualTo("port");
+ }
}
diff --git a/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java b/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java
index d346db2..9c0b230 100644
--- a/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java
+++ b/robolectric/src/main/java/org/robolectric/android/internal/ParallelUniverse.java
@@ -81,6 +81,15 @@
Configuration configuration = systemResources.getConfiguration();
configuration.smallestScreenWidthDp = Qualifiers.getSmallestScreenWidth(qualifiers);
configuration.screenWidthDp = Qualifiers.getScreenWidth(qualifiers);
+ String orientation = Qualifiers.getOrientation(qualifiers);
+ if ("land".equals(orientation)) {
+ configuration.orientation = Configuration.ORIENTATION_LANDSCAPE;
+ } else if ("port".equals(orientation)) {
+ configuration.orientation = Configuration.ORIENTATION_PORTRAIT;
+ } else {
+ configuration.orientation = Configuration.ORIENTATION_UNDEFINED;
+ }
+
systemResources.updateConfiguration(configuration, systemResources.getDisplayMetrics());
RuntimeEnvironment.setQualifiers(qualifiers);
diff --git a/robolectric/src/test/java/org/robolectric/QualifiersTest.java b/robolectric/src/test/java/org/robolectric/QualifiersTest.java
index 749c80a..e7cb7a1 100644
--- a/robolectric/src/test/java/org/robolectric/QualifiersTest.java
+++ b/robolectric/src/test/java/org/robolectric/QualifiersTest.java
@@ -1,6 +1,7 @@
package org.robolectric;
import android.app.Activity;
+import android.content.res.Configuration;
import android.view.View;
import android.widget.TextView;
import org.junit.Test;
@@ -14,6 +15,13 @@
public class QualifiersTest {
@Test
+ @Config(qualifiers = "land")
+ public void orientation() throws Exception {
+ assertThat(Robolectric.setupActivity(Activity.class).getResources().getConfiguration().orientation)
+ .isEqualTo(Configuration.ORIENTATION_LANDSCAPE);
+ }
+
+ @Test
public void shouldGetFromClass() throws Exception {
assertThat(RuntimeEnvironment.getQualifiers()).contains("en");
}