Home | History | Annotate | Download | only in shadows
      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