1/* 2 * Copyright (C) 2017 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 androidx.core.graphics 18 19import android.graphics.Point 20import android.graphics.Rect 21import android.graphics.Region 22import androidx.testutils.assertThrows 23import org.junit.Assert.assertEquals 24import org.junit.Assert.assertFalse 25import org.junit.Assert.assertNotSame 26import org.junit.Assert.assertTrue 27import org.junit.Test 28 29class RegionTest { 30 @Test fun containsPoint() { 31 assertFalse(Point(1, 1) in Region()) 32 assertTrue(Point(1, 1) in Region(0, 0, 2, 2)) 33 } 34 35 @Test fun unionRect() { 36 val r = Region(0, 0, 2, 2) + Rect(4, 4, 6, 6) 37 assertFalse(Point(3, 3) in r) 38 assertTrue(Point(1, 1) in r) 39 assertTrue(Point(5, 5) in r) 40 } 41 42 @Test fun unionRegion() { 43 val r = Region(0, 0, 2, 2) + Region(4, 4, 6, 6) 44 assertFalse(Point(3, 3) in r) 45 assertTrue(Point(1, 1) in r) 46 assertTrue(Point(5, 5) in r) 47 } 48 49 @Test fun unionAsAndRect() { 50 val r = Region(0, 0, 2, 2) and Rect(4, 4, 6, 6) 51 assertFalse(Point(3, 3) in r) 52 assertTrue(Point(1, 1) in r) 53 assertTrue(Point(5, 5) in r) 54 } 55 56 @Test fun unionAsAndRegion() { 57 val r = Region(0, 0, 2, 2) and Region(4, 4, 6, 6) 58 assertFalse(Point(3, 3) in r) 59 assertTrue(Point(1, 1) in r) 60 assertTrue(Point(5, 5) in r) 61 } 62 63 @Test fun differenceRect() { 64 val r = Region(0, 0, 4, 4) - Rect(2, 2, 6, 6) 65 assertFalse(Point(3, 3) in r) 66 assertTrue(Point(1, 1) in r) 67 assertFalse(Point(5, 5) in r) 68 } 69 70 @Test fun differenceRegion() { 71 val r = Region(0, 0, 4, 4) - Region(2, 2, 6, 6) 72 assertFalse(Point(3, 3) in r) 73 assertTrue(Point(1, 1) in r) 74 assertFalse(Point(5, 5) in r) 75 } 76 77 @Test fun unaryMinus() { 78 val r = Rect(0, 0, 10, 10) - Rect(4, 4, 6, 6) 79 assertTrue(Point(1, 1) in r) 80 assertFalse(Point(5, 5) in r) 81 82 val i = -r 83 assertFalse(Point(1, 1) in i) 84 assertTrue(Point(5, 5) in i) 85 } 86 87 @Test fun not() { 88 val r = Rect(0, 0, 10, 10) - Rect(4, 4, 6, 6) 89 assertTrue(Point(1, 1) in r) 90 assertFalse(Point(5, 5) in r) 91 92 val i = !r 93 assertFalse(Point(1, 1) in i) 94 assertTrue(Point(5, 5) in i) 95 } 96 97 @Test fun orRect() { 98 val r = Region(0, 0, 4, 4) or Rect(2, 2, 6, 6) 99 assertFalse(Point(1, 1) in r) 100 assertTrue(Point(3, 3) in r) 101 } 102 103 @Test fun orRegion() { 104 val r = Region(0, 0, 4, 4) or Region(2, 2, 6, 6) 105 assertFalse(Point(1, 1) in r) 106 assertTrue(Point(3, 3) in r) 107 } 108 109 @Test fun xorRect() { 110 val r = Region(0, 0, 4, 4) xor Rect(2, 2, 6, 6) 111 assertFalse(Point(3, 3) in r) 112 assertTrue(Point(1, 1) in r) 113 } 114 115 @Test fun xorRegion() { 116 val r = Region(0, 0, 4, 4) xor Region(2, 2, 6, 6) 117 assertFalse(Point(3, 3) in r) 118 assertTrue(Point(1, 1) in r) 119 } 120 121 @Test fun iteratorForLoop() { 122 val region = Region(0, 0, 4, 4) - 123 Rect(2, 2, 6, 6) 124 var count = 0 125 var r = Rect() 126 for (rect in region) { 127 count++ 128 assertNotSame(r, rect) 129 r = rect 130 } 131 assertEquals(2, count) 132 } 133 134 @Test fun iteratorOutOfBounds() { 135 val region = Region(0, 0, 4, 4) - 136 Rect(2, 2, 6, 6) 137 val it = region.iterator() 138 it.next() 139 it.next() 140 assertThrows<IndexOutOfBoundsException> { 141 it.next() 142 } 143 } 144 145 @Test fun iteratorForEach() { 146 val region = Region(0, 0, 4, 4) - 147 Rect(2, 2, 6, 6) 148 var count = 0 149 var r = Rect() 150 region.forEach { 151 count++ 152 assertNotSame(r, it) 153 r = it 154 } 155 assertEquals(2, count) 156 } 157} 158