1cfb3d242306311ce27ec51bf511764377c173a7cKiran Ryali + Christian Williamspackage org.robolectric.shadows;
2f8df99654a5e2dd9d19b034758972777d7376be7Michael Portuesi
3851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
425692d9010736f4bdacf4451ec8d67476733fff6Christian Williamsimport static android.os.Build.VERSION_CODES.LOLLIPOP;
5851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport static org.junit.Assert.assertEquals;
6851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williams
7317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipovimport android.graphics.Point;
8317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipovimport android.graphics.Rect;
99f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williamsimport android.hardware.display.DisplayManagerGlobal;
10eb645dd6f075c4c7d6d61193fde416739adb7fc1Gregg Van Hove & Phil Goodwinimport android.util.DisplayMetrics;
11eb645dd6f075c4c7d6d61193fde416739adb7fc1Gregg Van Hove & Phil Goodwinimport android.view.Display;
129f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williamsimport org.junit.Before;
13f8df99654a5e2dd9d19b034758972777d7376be7Michael Portuesiimport org.junit.Test;
14f8df99654a5e2dd9d19b034758972777d7376be7Michael Portuesiimport org.junit.runner.RunWith;
15ceb8863e0cd0706c72351f063bc7af3c7d76d120Jonathan Gerrishimport org.robolectric.RobolectricTestRunner;
169f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williamsimport org.robolectric.Shadows;
17455d8f2cc6cba8b27804fe082d96e67d61a48d66Jonathan Gerrishimport org.robolectric.annotation.Config;
18f8df99654a5e2dd9d19b034758972777d7376be7Michael Portuesi
19ceb8863e0cd0706c72351f063bc7af3c7d76d120Jonathan Gerrish@RunWith(RobolectricTestRunner.class)
209f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams@Config(minSdk = JELLY_BEAN_MR1)
2172cf654d6d3a933e426506345ded34cf39a669a2Erich Douglasspublic class ShadowDisplayTest {
229f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams
239f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams  private Display display;
249f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams  private ShadowDisplay shadow;
259f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams
269f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams  @Before
279f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams  public void setUp() throws Exception {
289f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams    display = DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY);
299f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams    shadow = Shadows.shadowOf(display);
309f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams  }
319f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams
3229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Test
3329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public void shouldProvideDisplayMetrics() throws Exception {
3429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    shadow.setDensity(1.5f);
359f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams    shadow.setDensityDpi(DisplayMetrics.DENSITY_HIGH);
3629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    shadow.setScaledDensity(1.6f);
3729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    shadow.setWidth(1024);
3829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    shadow.setHeight(600);
39e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    shadow.setRealWidth(1400);
40e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    shadow.setRealHeight(900);
4129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    shadow.setXdpi(183.0f);
4229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    shadow.setYdpi(184.0f);
439f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams    shadow.setRefreshRate(123f);
4429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
4529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    DisplayMetrics metrics = new DisplayMetrics();
4629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
4729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    display.getMetrics(metrics);
4829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
4929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    assertEquals(1.5f, metrics.density, 0.05);
509f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams    assertEquals(DisplayMetrics.DENSITY_HIGH, metrics.densityDpi);
5129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    assertEquals(1.6f, metrics.scaledDensity, 0.05);
5229a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    assertEquals(1024, metrics.widthPixels);
5329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    assertEquals(600, metrics.heightPixels);
5429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    assertEquals(183.0f, metrics.xdpi, 0.05);
5529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    assertEquals(184.0f, metrics.ydpi, 0.05);
56e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha
57e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    metrics = new DisplayMetrics();
58e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha
59e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    display.getRealMetrics(metrics);
60e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha
61e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    assertEquals(1.5f, metrics.density, 0.05);
629f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams    assertEquals(DisplayMetrics.DENSITY_HIGH, metrics.densityDpi);
63e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    assertEquals(1.6f, metrics.scaledDensity, 0.05);
64e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    assertEquals(1400, metrics.widthPixels);
65e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    assertEquals(900, metrics.heightPixels);
66e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    assertEquals(183.0f, metrics.xdpi, 0.05);
67e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    assertEquals(184.0f, metrics.ydpi, 0.05);
689f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams
699f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams    assertEquals(0, 123f, display.getRefreshRate());
7029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
7129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams
72317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov  @Test
736af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams  public void changedStateShouldApplyToOtherInstancesOfSameDisplay() throws Exception {
746af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams    shadow.setName("another name");
756af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams    shadow.setWidth(1024);
766af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams    shadow.setHeight(600);
776af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams
786af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams    display = DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY);
796af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams    assertEquals(1024, display.getWidth());
806af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams    assertEquals(600, display.getHeight());
816af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams    assertEquals("another name", display.getName());
826af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams  }
836af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams
8425692d9010736f4bdacf4451ec8d67476733fff6Christian Williams  @Test @Config(minSdk = LOLLIPOP)
8525692d9010736f4bdacf4451ec8d67476733fff6Christian Williams  public void stateChangeShouldApplyToOtherInstancesOfSameDisplay_postKitKatFields() throws Exception {
8625692d9010736f4bdacf4451ec8d67476733fff6Christian Williams    shadow.setState(Display.STATE_DOZE_SUSPEND);
8725692d9010736f4bdacf4451ec8d67476733fff6Christian Williams
8825692d9010736f4bdacf4451ec8d67476733fff6Christian Williams    display = DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY);
8925692d9010736f4bdacf4451ec8d67476733fff6Christian Williams    assertEquals(Display.STATE_DOZE_SUSPEND, display.getState());
9025692d9010736f4bdacf4451ec8d67476733fff6Christian Williams  }
9125692d9010736f4bdacf4451ec8d67476733fff6Christian Williams
926af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams  @Test
93317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov  public void shouldProvideDisplaySize() throws Exception {
94317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    Point outSmallestSize = new Point();
95317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    Point outLargestSize = new Point();
96317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    Point outSize = new Point();
97317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    Rect outRect = new Rect();
98317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov
99317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    shadow.setWidth(400);
100317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    shadow.setHeight(600);
101e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    shadow.setRealWidth(480);
102e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    shadow.setRealHeight(800);
103317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov
104317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    display.getCurrentSizeRange(outSmallestSize, outLargestSize);
105317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    assertEquals(400, outSmallestSize.x);
10600c5647b5ccb887e6ee9d327758117c9d23b9467Dan Osipov    assertEquals(400, outSmallestSize.y);
10700c5647b5ccb887e6ee9d327758117c9d23b9467Dan Osipov    assertEquals(600, outLargestSize.x);
108317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    assertEquals(600, outLargestSize.y);
109317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov
110317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    display.getSize(outSize);
111317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    assertEquals(400, outSize.x);
112317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    assertEquals(600, outSize.y);
113317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov
114317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    display.getRectSize(outRect);
115317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    assertEquals(400, outRect.width());
116317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov    assertEquals(600, outRect.height());
117e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha
118e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    display.getRealSize(outSize);
119e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    assertEquals(480, outSize.x);
120e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    assertEquals(800, outSize.y);
121e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha  }
122e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha
123e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha  @Test
1246af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams  public void shouldProvideWeirdDisplayInformation() {
125e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    shadow.setName("foo");
1266af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams    shadow.setFlags(123);
127e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha
128e2a23bea6dfab434ef1780b7d05437538f1694eaBernardo Cunha    assertEquals("foo", display.getName());
1296af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams    assertEquals(123, display.getFlags());
1306af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams
1316af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams    display = DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY);
1326af74fe2f8e484aaf59adc9f80bc8105ac3a4da6Christian Williams    assertEquals(123, display.getFlags());
133317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov  }
134317c145381073ef5c2bfbd11b72b48cb924b2a9aDan Osipov
13529a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  /**
13629a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams   * The {@link android.view.Display#getOrientation()} method is deprecated, but for
13729a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams   * testing purposes, return the value gotten from {@link android.view.Display#getRotation()}
13829a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams   */
13929a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  @Test
14029a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  public void deprecatedGetOrientation_returnsGetRotation() {
14129a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    int testValue = 33;
1429f69dc80a8ac7e48cbf50f65974d4986ab7f00ecChristian Williams    shadow.setRotation(testValue);
14329a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams    assertEquals(testValue, display.getOrientation());
14429a8359eaef1ee9f40c967d3c4b5c1117c8c2a43Christian Williams  }
145f8df99654a5e2dd9d19b034758972777d7376be7Michael Portuesi}
146