| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.graphics.cts; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import android.graphics.Rect; |
| import android.graphics.RectF; |
| import android.os.Parcel; |
| |
| import androidx.test.filters.SmallTest; |
| import androidx.test.runner.AndroidJUnit4; |
| |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| @SmallTest |
| @RunWith(AndroidJUnit4.class) |
| public class RectFTest { |
| private RectF mRectF; |
| |
| @Test |
| public void testConstructor() { |
| mRectF = new RectF(); |
| mRectF = new RectF(1.5f, 2.5f, 20.3f, 40.9f); |
| |
| RectF rectF = new RectF(1.5f, 2.5f, 20.3f, 40.9f); |
| mRectF = new RectF(rectF); |
| |
| Rect rect = new Rect(0, 0, 10, 10); |
| mRectF = new RectF(rect); |
| } |
| |
| @Test |
| public void testSort() { |
| mRectF = new RectF(10, 10, 5, 5); |
| assertEquals(10.0f, mRectF.left, 0.0f); |
| assertEquals(10.0f, mRectF.top, 0.0f); |
| assertEquals(5.0f, mRectF.right, 0.0f); |
| assertEquals(5.0f, mRectF.bottom, 0.0f); |
| |
| mRectF.sort(); |
| assertEquals(5.0f, mRectF.left, 0.0f); |
| assertEquals(5.0f, mRectF.top, 0.0f); |
| assertEquals(10.0f, mRectF.right, 0.0f); |
| assertEquals(10.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testSet1() { |
| mRectF = new RectF(); |
| mRectF.set(1.0f, 2.0f, 3.0f, 4.0f); |
| assertEquals(1.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.top, 0.0f); |
| assertEquals(3.0f, mRectF.right, 0.0f); |
| assertEquals(4.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testSet2() { |
| RectF rectF = new RectF(1.0f, 2.0f, 3.0f, 4.0f); |
| mRectF = new RectF(); |
| mRectF.set(rectF); |
| assertEquals(1.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.top, 0.0f); |
| assertEquals(3.0f, mRectF.right, 0.0f); |
| assertEquals(4.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testSet3() { |
| Rect rect = new Rect(1, 2, 3, 4); |
| mRectF = new RectF(); |
| mRectF.set(rect); |
| assertEquals(1.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.top, 0.0f); |
| assertEquals(3.0f, mRectF.right, 0.0f); |
| assertEquals(4.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testIntersects1() { |
| mRectF = new RectF(0, 0, 10, 10); |
| assertTrue(mRectF.intersects(5, 5, 15, 15)); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(10.0f, mRectF.right, 0.0f); |
| assertEquals(10.0f, mRectF.bottom, 0.0f); |
| |
| mRectF = new RectF(0, 0, 10, 10); |
| assertFalse(mRectF.intersects(15, 15, 25, 25)); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(10.0f, mRectF.right, 0.0f); |
| assertEquals(10.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testIntersects2() { |
| RectF rectF1; |
| RectF rectF2; |
| |
| rectF1 = new RectF(0, 0, 10, 10); |
| rectF2 = new RectF(5, 5, 15, 15); |
| assertTrue(RectF.intersects(rectF1, rectF2)); |
| |
| rectF1 = new RectF(0, 0, 10, 10); |
| rectF2 = new RectF(15, 15, 25, 25); |
| assertFalse(RectF.intersects(rectF1, rectF2)); |
| } |
| |
| @Test |
| public void testIntersect1() { |
| mRectF = new RectF(0, 0, 10, 10); |
| assertTrue(mRectF.intersect(5, 5, 15, 15)); |
| assertEquals(5.0f, mRectF.left, 0.0f); |
| assertEquals(5.0f, mRectF.top, 0.0f); |
| assertEquals(10.0f, mRectF.right, 0.0f); |
| assertEquals(10.0f, mRectF.bottom, 0.0f); |
| |
| mRectF = new RectF(0, 0, 10, 10); |
| assertFalse(mRectF.intersect(15, 15, 25, 25)); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(10.0f, mRectF.right, 0.0f); |
| assertEquals(10.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testIntersect2() { |
| RectF rectF; |
| |
| mRectF = new RectF(0, 0, 10, 10); |
| rectF= new RectF(5, 5, 15, 15); |
| assertTrue(mRectF.intersect(rectF)); |
| assertEquals(5.0f, mRectF.left, 0.0f); |
| assertEquals(5.0f, mRectF.top, 0.0f); |
| assertEquals(10.0f, mRectF.right, 0.0f); |
| assertEquals(10.0f, mRectF.bottom, 0.0f); |
| |
| mRectF = new RectF(0, 0, 10, 10); |
| rectF= new RectF(15, 15, 25, 25); |
| assertFalse(mRectF.intersect(rectF)); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(10.0f, mRectF.right, 0.0f); |
| assertEquals(10.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testUnion1() { |
| // Both rect1 and rect2 are not empty. |
| // 1. left < right, top < bottom |
| // this.left < this.right, this.top < this.bottom |
| mRectF = new RectF(0.0f, 0.0f, 1.0f, 1.0f); |
| mRectF.union(1.0f, 1.0f, 2.0f, 2.0f); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.right, 0.0f); |
| assertEquals(2.0f, mRectF.bottom, 0.0f); |
| |
| // 2. left < right, top < bottom |
| // this.left > this.right, this.top > this.bottom |
| // New rectangle will be set to the new arguments |
| mRectF = new RectF(1.0f, 1.0f, 0.0f, 0.0f); |
| mRectF.union(1.0f, 1.0f, 2.0f, 2.0f); |
| assertEquals(1.0f, mRectF.top, 0.0f); |
| assertEquals(1.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.right, 0.0f); |
| assertEquals(2.0f, mRectF.bottom, 0.0f); |
| |
| // 3. left > right, top > bottom |
| // this.left < this.right, this.top < this.bottom |
| // Nothing will be done. |
| mRectF = new RectF(0.0f, 0.0f, 1.0f, 1.0f); |
| mRectF.union(2.0f, 2.0f, 1.5f, 1.5f); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(1.0f, mRectF.right, 0.0f); |
| assertEquals(1.0f, mRectF.bottom, 0.0f); |
| |
| // rect1 is empty, update to rect2. |
| mRectF = new RectF(); |
| mRectF.union(1.0f, 1.0f, 2.0f, 2.0f); |
| assertEquals(1.0f, mRectF.top, 0.0f); |
| assertEquals(1.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.right, 0.0f); |
| assertEquals(2.0f, mRectF.bottom, 0.0f); |
| |
| // rect2 is empty, nothing changed. |
| mRectF = new RectF(0.0f, 0.0f, 1.0f, 1.0f); |
| mRectF.union(2.0f, 2.0f, 2.0f, 2.0f); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(1.0f, mRectF.right, 0.0f); |
| assertEquals(1.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testUnion2() { |
| RectF rectF; |
| |
| // Both rect1 and rect2 are not empty. |
| // 1. left < right, top < bottom |
| // this.left < this.right, this.top < this.bottom |
| mRectF = new RectF(0.0f, 0.0f, 1.0f, 1.0f); |
| rectF = new RectF(1.0f, 1.0f, 2.0f, 2.0f); |
| mRectF.union(rectF); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.right, 0.0f); |
| assertEquals(2.0f, mRectF.bottom, 0.0f); |
| |
| // 2. left < right, top < bottom |
| // this.left > this.right, this.top > this.bottom |
| // New rectangle will be set to the new arguments |
| mRectF = new RectF(1.0f, 1.0f, 0.0f, 0.0f); |
| rectF = new RectF(1.0f, 1.0f, 2.0f, 2.0f); |
| mRectF.union(rectF); |
| assertEquals(1.0f, mRectF.top, 0.0f); |
| assertEquals(1.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.right, 0.0f); |
| assertEquals(2.0f, mRectF.bottom, 0.0f); |
| |
| // 3. left > right, top > bottom |
| // this.left < this.right, this.top < this.bottom |
| // Nothing will be done. |
| mRectF = new RectF(0.0f, 0.0f, 1.0f, 1.0f); |
| rectF = new RectF(2.0f, 2.0f, 1.5f, 1.5f); |
| mRectF.union(rectF); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(1.0f, mRectF.right, 0.0f); |
| assertEquals(1.0f, mRectF.bottom, 0.0f); |
| |
| // rect1 is empty, update to rect2. |
| mRectF = new RectF(0.0f, 0.0f, 0.0f, 0.0f); |
| rectF = new RectF(1.0f, 1.0f, 2.0f, 2.0f); |
| mRectF.union(rectF); |
| assertEquals(1.0f, mRectF.top, 0.0f); |
| assertEquals(1.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.right, 0.0f); |
| assertEquals(2.0f, mRectF.bottom, 0.0f); |
| |
| // rect2 is empty, nothing changed. |
| mRectF = new RectF(0.0f, 0.0f, 1.0f, 1.0f); |
| rectF = new RectF(2.0f, 2.0f, 2.0f, 2.0f); |
| mRectF.union(rectF); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(1.0f, mRectF.right, 0.0f); |
| assertEquals(1.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testUnion3() { |
| // rect1 is not empty (x > right, y > bottom). |
| mRectF = new RectF(0.0f, 0.0f, 1.0f, 1.0f); |
| mRectF.union(2.0f, 2.0f); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.right, 0.0f); |
| assertEquals(2.0f, mRectF.bottom, 0.0f); |
| |
| // rect1 is not empty (x < left, y < top). |
| mRectF = new RectF(1.0f, 1.0f, 2.0f, 2.0f); |
| mRectF.union(0.0f, 0.0f); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.right, 0.0f); |
| assertEquals(2.0f, mRectF.bottom, 0.0f); |
| |
| // rect1 is not empty(point is inside of the rectangle). |
| mRectF = new RectF(1.0f, 1.0f, 2.0f, 2.0f); |
| mRectF.union(1.5f, 1.5f); |
| assertEquals(1.0f, mRectF.top, 0.0f); |
| assertEquals(1.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.right, 0.0f); |
| assertEquals(2.0f, mRectF.bottom, 0.0f); |
| |
| // rect1 is empty. |
| mRectF = new RectF(); |
| mRectF.union(2.0f, 2.0f); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.right, 0.0f); |
| assertEquals(2.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testContains1() { |
| mRectF = new RectF(1.0f, 1.0f, 20.0f, 20.0f); |
| assertFalse(mRectF.contains(0.9f, 0.9f)); |
| assertTrue(mRectF.contains(1.0f, 1.0f)); |
| assertTrue(mRectF.contains(19.9f, 19.9f)); |
| assertFalse(mRectF.contains(20.0f, 20.0f)); |
| } |
| |
| @Test |
| public void testContains2() { |
| mRectF = new RectF(1.0f, 1.0f, 20.0f, 20.0f); |
| assertTrue(mRectF.contains(1.0f, 1.0f, 20.0f, 20.0f)); |
| assertTrue(mRectF.contains(2.0f, 2.0f, 19.0f, 19.0f)); |
| assertFalse(mRectF.contains(21.0f, 21.0f, 22.0f, 22.0f)); |
| assertFalse(mRectF.contains(0.0f, 0.0f, 19.0f, 19.0f)); |
| } |
| |
| @Test |
| public void testContains3() { |
| RectF rectF; |
| mRectF = new RectF(1.0f, 1.0f, 20.0f, 20.0f); |
| rectF = new RectF(1.0f, 1.0f, 20.0f, 20.0f); |
| assertTrue(mRectF.contains(rectF)); |
| rectF = new RectF(2.0f, 2.0f, 19.0f, 19.0f); |
| assertTrue(mRectF.contains(rectF)); |
| rectF = new RectF(21.0f, 21.0f, 22.0f, 22.0f); |
| assertFalse(mRectF.contains(rectF)); |
| rectF = new RectF(0.0f, 0.0f, 19.0f, 19.0f); |
| assertFalse(mRectF.contains(rectF)); |
| } |
| |
| @Test |
| public void testOffset() { |
| mRectF = new RectF(5, 5, 10, 10); |
| mRectF.offset(1.0f, 1.0f); |
| assertEquals(6.0f, mRectF.left, 0.0f); |
| assertEquals(6.0f, mRectF.top, 0.0f); |
| assertEquals(11.0f, mRectF.right, 0.0f); |
| assertEquals(11.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testInset() { |
| mRectF = new RectF(5.0f, 5.0f, 10.0f, 10.0f); |
| mRectF.inset(1.0f, 1.0f); |
| assertEquals(6.0f, mRectF.left, 0.0f); |
| assertEquals(6.0f, mRectF.top, 0.0f); |
| assertEquals(9.0f, mRectF.right, 0.0f); |
| assertEquals(9.0f, mRectF.bottom, 0.0f); |
| |
| mRectF = new RectF(5.0f, 5.0f, 10.0f, 10.0f); |
| mRectF.inset(-1.0f, -1.0f); |
| assertEquals(4.0f, mRectF.left, 0.0f); |
| assertEquals(4.0f, mRectF.top, 0.0f); |
| assertEquals(11.0f, mRectF.right, 0.0f); |
| assertEquals(11.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testHeight() { |
| mRectF = new RectF(1.0f, 1.0f, 20.5f, 20.5f); |
| assertEquals(19.5f, mRectF.height(), 0.0f); |
| } |
| |
| @Test |
| public void testWidth() { |
| mRectF = new RectF(1.0f, 1.0f, 20.5f, 20.5f); |
| assertEquals(19.5f, mRectF.width(), 0.0f); |
| } |
| |
| @Test |
| public void testOffsetTo() { |
| mRectF = new RectF(5, 5, 10, 10); |
| mRectF.offsetTo(1.0f, 1.0f); |
| assertEquals(1.0f, mRectF.left, 0.0f); |
| assertEquals(1.0f, mRectF.top, 0.0f); |
| assertEquals(6.0f, mRectF.right, 0.0f); |
| assertEquals(6.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testSetEmpty() { |
| // Before setEmpty() |
| mRectF = new RectF(1, 2, 3, 4); |
| assertEquals(1.0f, mRectF.left, 0.0f); |
| assertEquals(2.0f, mRectF.top, 0.0f); |
| assertEquals(3.0f, mRectF.right, 0.0f); |
| assertEquals(4.0f, mRectF.bottom, 0.0f); |
| |
| // After setEmpty() |
| mRectF.setEmpty(); |
| assertEquals(0.0f, mRectF.left, 0.0f); |
| assertEquals(0.0f, mRectF.top, 0.0f); |
| assertEquals(0.0f, mRectF.right, 0.0f); |
| assertEquals(0.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testIsEmpty() { |
| mRectF = new RectF(); |
| assertTrue(mRectF.isEmpty()); |
| mRectF = new RectF(1.0f, 1.0f, 1.0f, 1.0f); |
| assertTrue(mRectF.isEmpty()); |
| mRectF = new RectF(0.0f, 1.0f, 2.0f, 1.0f); |
| assertTrue(mRectF.isEmpty()); |
| mRectF = new RectF(1.0f, 1.0f, 20.0f, 20.0f); |
| assertFalse(mRectF.isEmpty()); |
| } |
| |
| @Test |
| public void testCenterX() { |
| mRectF = new RectF(10.0f, 10.0f, 20.0f, 20.0f); |
| assertEquals(15.0f, mRectF.centerX(), 0.0f); |
| mRectF = new RectF(10.5f, 10.0f, 20.0f, 20.0f); |
| assertEquals(15.25f, mRectF.centerX(), 0.0f); |
| mRectF = new RectF(10.4f, 10.0f, 20.0f, 20.0f); |
| assertEquals(15.2f, mRectF.centerX(), 0.0f); |
| } |
| |
| @Test |
| public void testCenterY() { |
| mRectF = new RectF(10.0f, 10.0f, 20.0f, 20.0f); |
| assertEquals(15.0f, mRectF.centerY(), 0.0f); |
| mRectF = new RectF(10.0f, 10.5f, 20.0f, 20.0f); |
| assertEquals(15.25f, mRectF.centerY(), 0.0f); |
| mRectF = new RectF(10.0f, 10.4f, 20.0f, 20.0f); |
| assertEquals(15.2f, mRectF.centerY(), 0.0f); |
| } |
| |
| @Test |
| public void testToString() { |
| mRectF = new RectF(10.0f, 20.0f, 30.0f, 40.0f); |
| assertEquals("RectF(10.0, 20.0, 30.0, 40.0)", mRectF.toString()); |
| } |
| |
| @Test |
| public void testToShortString() { |
| mRectF = new RectF(10.0f, 20.0f, 30.0f, 40.0f); |
| assertEquals("[10.0,20.0][30.0,40.0]", mRectF.toShortString()); |
| } |
| |
| @Test |
| public void testSetIntersect() { |
| RectF rectF1 = new RectF(0, 0, 10, 10); |
| RectF rectF2 = new RectF(5, 5, 15, 15); |
| |
| // Empty RectF |
| mRectF = new RectF(); |
| assertTrue(mRectF.setIntersect(rectF1, rectF2)); |
| assertEquals(5.0f, mRectF.left, 0.0f); |
| assertEquals(5.0f, mRectF.top, 0.0f); |
| assertEquals(10.0f, mRectF.right, 0.0f); |
| assertEquals(10.0f, mRectF.bottom, 0.0f); |
| |
| // Not Empty RectF |
| mRectF = new RectF(0, 0, 15, 15); |
| assertTrue(mRectF.setIntersect(rectF1, rectF2)); |
| assertEquals(5.0f, mRectF.left, 0.0f); |
| assertEquals(5.0f, mRectF.top, 0.0f); |
| assertEquals(10.0f, mRectF.right, 0.0f); |
| assertEquals(10.0f, mRectF.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testRoundOut() { |
| Rect rect = new Rect(); |
| mRectF = new RectF(1.2f, 1.8f, 5.2f, 5.8f); |
| mRectF.roundOut(rect); |
| assertEquals(1, rect.left, 0.0f); |
| assertEquals(1, rect.top, 0.0f); |
| assertEquals(6, rect.right, 0.0f); |
| assertEquals(6, rect.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testRound() { |
| Rect rect = new Rect(); |
| mRectF = new RectF(1.2f, 1.8f, 5.2f, 5.8f); |
| mRectF.round(rect); |
| assertEquals(1, rect.left, 0.0f); |
| assertEquals(2, rect.top, 0.0f); |
| assertEquals(5, rect.right, 0.0f); |
| assertEquals(6, rect.bottom, 0.0f); |
| } |
| |
| @Test |
| public void testWriteReadParcel() { |
| RectF rectOut = new RectF(0.0f,0.0f,10.0f,10.0f); |
| Parcel out = Parcel.obtain(); |
| rectOut.writeToParcel(out, 0); |
| out.setDataPosition(0); |
| RectF rectIn = new RectF(1.0f,1.0f,1.0f,1.0f); |
| rectIn.readFromParcel(out); |
| assertEquals(rectOut.left, rectIn.left, 0.0f); |
| assertEquals(rectOut.bottom, rectIn.bottom, 0.0f); |
| assertEquals(rectOut.right, rectIn.right, 0.0f); |
| assertEquals(rectOut.top, rectIn.top, 0.0f); |
| assertNotNull(rectIn.toString()); |
| |
| assertEquals(0, rectIn.describeContents()); |
| |
| out.recycle(); |
| } |
| } |