• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.shadows;
2 
3 import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
4 import static android.os.Build.VERSION_CODES.LOLLIPOP;
5 import static org.junit.Assert.assertEquals;
6 
7 import android.graphics.Point;
8 import android.graphics.Rect;
9 import android.hardware.display.DisplayManagerGlobal;
10 import android.util.DisplayMetrics;
11 import android.view.Display;
12 import androidx.test.ext.junit.runners.AndroidJUnit4;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 import org.robolectric.Shadows;
17 import org.robolectric.annotation.Config;
18 
19 @RunWith(AndroidJUnit4.class)
20 @Config(minSdk = JELLY_BEAN_MR1)
21 public class ShadowDisplayTest {
22 
23   private Display display;
24   private ShadowDisplay shadow;
25 
26   @Before
setUp()27   public void setUp() throws Exception {
28     display = DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY);
29     shadow = Shadows.shadowOf(display);
30   }
31 
32   @Test
shouldProvideDisplayMetrics()33   public void shouldProvideDisplayMetrics() throws Exception {
34     shadow.setDensity(1.5f);
35     shadow.setDensityDpi(DisplayMetrics.DENSITY_HIGH);
36     shadow.setScaledDensity(1.6f);
37     shadow.setWidth(1024);
38     shadow.setHeight(600);
39     shadow.setRealWidth(1400);
40     shadow.setRealHeight(900);
41     shadow.setXdpi(183.0f);
42     shadow.setYdpi(184.0f);
43     shadow.setRefreshRate(123f);
44 
45     DisplayMetrics metrics = new DisplayMetrics();
46 
47     display.getMetrics(metrics);
48 
49     assertEquals(1.5f, metrics.density, 0.05);
50     assertEquals(DisplayMetrics.DENSITY_HIGH, metrics.densityDpi);
51     assertEquals(1.6f, metrics.scaledDensity, 0.05);
52     assertEquals(1024, metrics.widthPixels);
53     assertEquals(600, metrics.heightPixels);
54     assertEquals(183.0f, metrics.xdpi, 0.05);
55     assertEquals(184.0f, metrics.ydpi, 0.05);
56 
57     metrics = new DisplayMetrics();
58 
59     display.getRealMetrics(metrics);
60 
61     assertEquals(1.5f, metrics.density, 0.05);
62     assertEquals(DisplayMetrics.DENSITY_HIGH, metrics.densityDpi);
63     assertEquals(1.6f, metrics.scaledDensity, 0.05);
64     assertEquals(1400, metrics.widthPixels);
65     assertEquals(900, metrics.heightPixels);
66     assertEquals(183.0f, metrics.xdpi, 0.05);
67     assertEquals(184.0f, metrics.ydpi, 0.05);
68 
69     assertEquals(0, 123f, display.getRefreshRate());
70   }
71 
72   @Test
changedStateShouldApplyToOtherInstancesOfSameDisplay()73   public void changedStateShouldApplyToOtherInstancesOfSameDisplay() throws Exception {
74     shadow.setName("another name");
75     shadow.setWidth(1024);
76     shadow.setHeight(600);
77 
78     display = DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY);
79     assertEquals(1024, display.getWidth());
80     assertEquals(600, display.getHeight());
81     assertEquals("another name", display.getName());
82   }
83 
84   @Test @Config(minSdk = LOLLIPOP)
stateChangeShouldApplyToOtherInstancesOfSameDisplay_postKitKatFields()85   public void stateChangeShouldApplyToOtherInstancesOfSameDisplay_postKitKatFields() throws Exception {
86     shadow.setState(Display.STATE_DOZE_SUSPEND);
87 
88     display = DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY);
89     assertEquals(Display.STATE_DOZE_SUSPEND, display.getState());
90   }
91 
92   @Test
shouldProvideDisplaySize()93   public void shouldProvideDisplaySize() throws Exception {
94     Point outSmallestSize = new Point();
95     Point outLargestSize = new Point();
96     Point outSize = new Point();
97     Rect outRect = new Rect();
98 
99     shadow.setWidth(400);
100     shadow.setHeight(600);
101     shadow.setRealWidth(480);
102     shadow.setRealHeight(800);
103 
104     display.getCurrentSizeRange(outSmallestSize, outLargestSize);
105     assertEquals(400, outSmallestSize.x);
106     assertEquals(400, outSmallestSize.y);
107     assertEquals(600, outLargestSize.x);
108     assertEquals(600, outLargestSize.y);
109 
110     display.getSize(outSize);
111     assertEquals(400, outSize.x);
112     assertEquals(600, outSize.y);
113 
114     display.getRectSize(outRect);
115     assertEquals(400, outRect.width());
116     assertEquals(600, outRect.height());
117 
118     display.getRealSize(outSize);
119     assertEquals(480, outSize.x);
120     assertEquals(800, outSize.y);
121   }
122 
123   @Test
shouldProvideWeirdDisplayInformation()124   public void shouldProvideWeirdDisplayInformation() {
125     shadow.setName("foo");
126     shadow.setFlags(123);
127 
128     assertEquals("foo", display.getName());
129     assertEquals(123, display.getFlags());
130 
131     display = DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY);
132     assertEquals(123, display.getFlags());
133   }
134 
135   /**
136    * The {@link android.view.Display#getOrientation()} method is deprecated, but for
137    * testing purposes, return the value gotten from {@link android.view.Display#getRotation()}
138    */
139   @Test
deprecatedGetOrientation_returnsGetRotation()140   public void deprecatedGetOrientation_returnsGetRotation() {
141     int testValue = 33;
142     shadow.setRotation(testValue);
143     assertEquals(testValue, display.getOrientation());
144   }
145 }
146