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 17 package androidx.core.graphics 18 19 import android.graphics.Point 20 import android.graphics.Rect 21 import android.graphics.Region 22 import androidx.testutils.assertThrows 23 import org.junit.Assert.assertEquals 24 import org.junit.Assert.assertFalse 25 import org.junit.Assert.assertNotSame 26 import org.junit.Assert.assertTrue 27 import org.junit.Test 28 29 class 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