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