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 org.junit.Before; 13 import org.junit.Test; 14 import org.junit.runner.RunWith; 15 import org.robolectric.RobolectricTestRunner; 16 import org.robolectric.Shadows; 17 import org.robolectric.annotation.Config; 18 19 @RunWith(RobolectricTestRunner.class) 20 @Config(minSdk = JELLY_BEAN_MR1) 21 public class ShadowDisplayTest { 22 23 private Display display; 24 private ShadowDisplay shadow; 25 26 @Before 27 public void setUp() throws Exception { 28 display = DisplayManagerGlobal.getInstance().getRealDisplay(Display.DEFAULT_DISPLAY); 29 shadow = Shadows.shadowOf(display); 30 } 31 32 @Test 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 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) 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 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 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 140 public void deprecatedGetOrientation_returnsGetRotation() { 141 int testValue = 33; 142 shadow.setRotation(testValue); 143 assertEquals(testValue, display.getOrientation()); 144 } 145 } 146