1/* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.server.wm.utils; 18 19 20import static android.view.DisplayCutout.NO_CUTOUT; 21import static android.view.DisplayCutout.fromBoundingRect; 22 23import static org.junit.Assert.assertEquals; 24import static org.junit.Assert.assertNotEquals; 25 26import android.graphics.Rect; 27import android.platform.test.annotations.Presubmit; 28import android.support.test.filters.SmallTest; 29import android.support.test.runner.AndroidJUnit4; 30import android.util.Size; 31import android.view.DisplayCutout; 32 33import org.junit.Test; 34import org.junit.runner.RunWith; 35 36import java.util.Arrays; 37 38/** 39 * Tests for {@link WmDisplayCutout} 40 * 41 * Run with: atest WmDisplayCutoutTest 42 */ 43@RunWith(AndroidJUnit4.class) 44@SmallTest 45@Presubmit 46public class WmDisplayCutoutTest { 47 48 private final DisplayCutout mCutoutTop = new DisplayCutout( 49 new Rect(0, 100, 0, 0), 50 Arrays.asList(new Rect(50, 0, 75, 100))); 51 52 @Test 53 public void calculateRelativeTo_top() { 54 WmDisplayCutout cutout = WmDisplayCutout.computeSafeInsets( 55 fromBoundingRect(0, 0, 100, 20), 200, 400) 56 .calculateRelativeTo(new Rect(5, 5, 95, 195)); 57 58 assertEquals(new Rect(0, 15, 0, 0), cutout.getDisplayCutout().getSafeInsets()); 59 } 60 61 @Test 62 public void calculateRelativeTo_left() { 63 WmDisplayCutout cutout = WmDisplayCutout.computeSafeInsets( 64 fromBoundingRect(0, 0, 20, 100), 400, 200) 65 .calculateRelativeTo(new Rect(5, 5, 195, 95)); 66 67 assertEquals(new Rect(15, 0, 0, 0), cutout.getDisplayCutout().getSafeInsets()); 68 } 69 70 @Test 71 public void calculateRelativeTo_bottom() { 72 WmDisplayCutout cutout = WmDisplayCutout.computeSafeInsets( 73 fromBoundingRect(0, 180, 100, 200), 100, 200) 74 .calculateRelativeTo(new Rect(5, 5, 95, 195)); 75 76 assertEquals(new Rect(0, 0, 0, 15), cutout.getDisplayCutout().getSafeInsets()); 77 } 78 79 @Test 80 public void calculateRelativeTo_right() { 81 WmDisplayCutout cutout = WmDisplayCutout.computeSafeInsets( 82 fromBoundingRect(180, 0, 200, 100), 200, 100) 83 .calculateRelativeTo(new Rect(5, 5, 195, 95)); 84 85 assertEquals(new Rect(0, 0, 15, 0), cutout.getDisplayCutout().getSafeInsets()); 86 } 87 88 @Test 89 public void calculateRelativeTo_bounds() { 90 WmDisplayCutout cutout = WmDisplayCutout.computeSafeInsets( 91 fromBoundingRect(0, 0, 100, 20), 200, 400) 92 .calculateRelativeTo(new Rect(5, 10, 95, 180)); 93 94 assertEquals(new Rect(-5, -10, 95, 10), cutout.getDisplayCutout().getBounds().getBounds()); 95 } 96 97 @Test 98 public void computeSafeInsets_top() { 99 WmDisplayCutout cutout = WmDisplayCutout.computeSafeInsets( 100 fromBoundingRect(0, 0, 100, 20), 200, 400); 101 102 assertEquals(new Rect(0, 20, 0, 0), cutout.getDisplayCutout().getSafeInsets()); 103 } 104 105 @Test 106 public void computeSafeInsets_left() { 107 WmDisplayCutout cutout = WmDisplayCutout.computeSafeInsets( 108 fromBoundingRect(0, 0, 20, 100), 400, 200); 109 110 assertEquals(new Rect(20, 0, 0, 0), cutout.getDisplayCutout().getSafeInsets()); 111 } 112 113 @Test 114 public void computeSafeInsets_bottom() { 115 WmDisplayCutout cutout = WmDisplayCutout.computeSafeInsets( 116 fromBoundingRect(0, 180, 100, 200), 100, 200); 117 118 assertEquals(new Rect(0, 0, 0, 20), cutout.getDisplayCutout().getSafeInsets()); 119 } 120 121 @Test 122 public void computeSafeInsets_right() { 123 WmDisplayCutout cutout = WmDisplayCutout.computeSafeInsets( 124 fromBoundingRect(180, 0, 200, 100), 200, 100); 125 126 assertEquals(new Rect(0, 0, 20, 0), cutout.getDisplayCutout().getSafeInsets()); 127 } 128 129 @Test 130 public void computeSafeInsets_bounds() { 131 DisplayCutout cutout = WmDisplayCutout.computeSafeInsets(mCutoutTop, 1000, 132 2000).getDisplayCutout(); 133 134 assertEquals(mCutoutTop.getBounds().getBounds(), 135 cutout.getBounds().getBounds()); 136 } 137 138 @Test 139 public void test_equals() { 140 assertEquals(new WmDisplayCutout(NO_CUTOUT, null), new WmDisplayCutout(NO_CUTOUT, null)); 141 assertEquals(new WmDisplayCutout(mCutoutTop, new Size(1, 2)), 142 new WmDisplayCutout(mCutoutTop, new Size(1, 2))); 143 144 assertNotEquals(new WmDisplayCutout(mCutoutTop, new Size(1, 2)), 145 new WmDisplayCutout(mCutoutTop, new Size(5, 6))); 146 assertNotEquals(new WmDisplayCutout(mCutoutTop, new Size(1, 2)), 147 new WmDisplayCutout(NO_CUTOUT, new Size(1, 2))); 148 } 149 150 @Test 151 public void test_hashCode() { 152 assertEquals(new WmDisplayCutout(NO_CUTOUT, null).hashCode(), 153 new WmDisplayCutout(NO_CUTOUT, null).hashCode()); 154 assertEquals(new WmDisplayCutout(mCutoutTop, new Size(1, 2)).hashCode(), 155 new WmDisplayCutout(mCutoutTop, new Size(1, 2)).hashCode()); 156 } 157}