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