| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library rect_test; | |
| 6 | |
| 7 import 'dart:math'; | 5 import 'dart:math'; |
| 8 import 'package:unittest/unittest.dart'; | 6 import 'package:expect/expect.dart'; |
| 9 | 7 |
| 10 main() { | 8 main() { |
| 11 Rectangle createRectangle(List<num> a) { | 9 testConstruction(); |
| 12 return a != null ? new Rectangle(a[0], a[1], a[2] - a[0], a[3] - a[1]) | 10 testIntersection(); |
| 13 : null; | 11 testIntersects(); |
| 14 } | 12 testBoundingBox(); |
| 15 | 13 testContainsRectangle(); |
| 16 test('construction', () { | 14 testContainsPoint(); |
| 17 var r0 = new Rectangle(10, 20, 30, 40); | 15 testHashCode(); |
| 18 expect(r0.toString(), 'Rectangle (10, 20) 30 x 40'); | 16 testEdgeCases(); |
| 19 expect(r0.right, 40); | 17 testEquality(); |
| 20 expect(r0.bottom, 60); | 18 testNegativeLengths(); |
| 21 | 19 testNaNLeft(); |
| 22 var r1 = new Rectangle.fromPoints(r0.topLeft, r0.bottomRight); | 20 testNaNTop(); |
| 23 expect(r1, r0); | 21 testNaNWidth(); |
| 24 | 22 testNaNHeight(); |
| 25 var r2 = new Rectangle.fromPoints(r0.bottomRight, r0.topLeft); | 23 } |
| 26 expect(r2, r0); | 24 |
| 27 }); | 25 Rectangle createRectangle(List<num> a) { |
| 28 | 26 return a != null ? new Rectangle(a[0], a[1], a[2] - a[0], a[3] - a[1]) |
| 29 test('intersection', () { | 27 : null; |
| 30 var tests = [ | 28 } |
| 31 [[10, 10, 20, 20], [15, 15, 25, 25], [15, 15, 20, 20]], | 29 |
| 32 [[10, 10, 20, 20], [20, 0, 30, 10], [20, 10, 20, 10]], | 30 testConstruction() { |
| 33 [[0, 0, 1, 1], [10, 11, 12, 13], null], | 31 var r0 = new Rectangle(10, 20, 30, 40); |
| 34 [[11, 12, 98, 99], [22, 23, 34, 35], [22, 23, 34, 35]]]; | 32 Expect.equals('Rectangle (10, 20) 30 x 40', r0.toString()); |
| 35 | 33 Expect.equals(40, r0.right); |
| 36 for (var test in tests) { | 34 Expect.equals(60, r0.bottom); |
| 37 var r0 = createRectangle(test[0]); | 35 |
| 38 var r1 = createRectangle(test[1]); | 36 var r1 = new Rectangle.fromPoints(r0.topLeft, r0.bottomRight); |
| 39 var expected = createRectangle(test[2]); | 37 Expect.equals(r0, r1); |
| 40 | 38 |
| 41 expect(r0.intersection(r1), expected); | 39 var r2 = new Rectangle.fromPoints(r0.bottomRight, r0.topLeft); |
| 42 expect(r1.intersection(r0), expected); | 40 Expect.equals(r0, r2); |
| 43 } | 41 } |
| 44 }); | 42 |
| 45 | 43 testIntersection() { |
| 46 test('intersects', () { | 44 var tests = [ |
| 47 var r0 = new Rectangle(10, 10, 20, 20); | 45 [[10, 10, 20, 20], [15, 15, 25, 25], [15, 15, 20, 20]], |
| 48 var r1 = new Rectangle(15, 15, 25, 25); | 46 [[10, 10, 20, 20], [20, 0, 30, 10], [20, 10, 20, 10]], |
| 49 var r2 = new Rectangle(0, 0, 1, 1); | 47 [[0, 0, 1, 1], [10, 11, 12, 13], null], |
| 50 | 48 [[11, 12, 98, 99], [22, 23, 34, 35], [22, 23, 34, 35]]]; |
| 51 expect(r0.intersects(r1), isTrue); | 49 |
| 52 expect(r1.intersects(r0), isTrue); | 50 for (var test in tests) { |
| 53 | 51 var r0 = createRectangle(test[0]); |
| 54 expect(r0.intersects(r2), isFalse); | 52 var r1 = createRectangle(test[1]); |
| 55 expect(r2.intersects(r0), isFalse); | 53 var expected = createRectangle(test[2]); |
| 56 }); | 54 |
| 57 | 55 Expect.equals(expected, r0.intersection(r1)); |
| 58 test('boundingBox', () { | 56 Expect.equals(expected, r1.intersection(r0)); |
| 59 var tests = [ | 57 } |
| 60 [[10, 10, 20, 20], [15, 15, 25, 25], [10, 10, 25, 25]], | 58 } |
| 61 [[10, 10, 20, 20], [20, 0, 30, 10], [10, 0, 30, 20]], | 59 |
| 62 [[0, 0, 1, 1], [10, 11, 12, 13], [0, 0, 12, 13]], | 60 testIntersects() { |
| 63 [[11, 12, 98, 99], [22, 23, 34, 35], [11, 12, 98, 99]]]; | 61 var r0 = new Rectangle(10, 10, 20, 20); |
| 64 | 62 var r1 = new Rectangle(15, 15, 25, 25); |
| 65 for (var test in tests) { | 63 var r2 = new Rectangle(0, 0, 1, 1); |
| 66 var r0 = createRectangle(test[0]); | 64 |
| 67 var r1 = createRectangle(test[1]); | 65 Expect.isTrue(r0.intersects(r1)); |
| 68 var expected = createRectangle(test[2]); | 66 Expect.isTrue(r1.intersects(r0)); |
| 69 | 67 |
| 70 expect(r0.boundingBox(r1), expected); | 68 Expect.isFalse(r0.intersects(r2)); |
| 71 expect(r1.boundingBox(r0), expected); | 69 Expect.isFalse(r2.intersects(r0)); |
| 72 } | 70 } |
| 73 }); | 71 |
| 74 | 72 testBoundingBox() { |
| 75 test('containsRectangle', () { | 73 var tests = [ |
| 76 var r = new Rectangle(-10, 0, 20, 10); | 74 [[10, 10, 20, 20], [15, 15, 25, 25], [10, 10, 25, 25]], |
| 77 expect(r.containsRectangle(r), isTrue); | 75 [[10, 10, 20, 20], [20, 0, 30, 10], [10, 0, 30, 20]], |
| 78 | 76 [[0, 0, 1, 1], [10, 11, 12, 13], [0, 0, 12, 13]], |
| 79 expect(r.containsRectangle( | 77 [[11, 12, 98, 99], [22, 23, 34, 35], [11, 12, 98, 99]]]; |
| 80 new Rectangle(double.NAN, double.NAN, double.NAN, double.NAN)), isFalse)
; | 78 |
| 81 | 79 for (var test in tests) { |
| 82 var r2 = new Rectangle(0, 2, 5, 5); | 80 var r0 = createRectangle(test[0]); |
| 83 expect(r.containsRectangle(r2), isTrue); | 81 var r1 = createRectangle(test[1]); |
| 84 expect(r2.containsRectangle(r), isFalse); | 82 var expected = createRectangle(test[2]); |
| 85 | 83 |
| 86 r2 = new Rectangle(-11, 2, 5, 5); | 84 Expect.equals(expected, r0.boundingBox(r1)); |
| 87 expect(r.containsRectangle(r2), isFalse); | 85 Expect.equals(expected, r1.boundingBox(r0)); |
| 88 r2 = new Rectangle(0, 2, 15, 5); | 86 } |
| 89 expect(r.containsRectangle(r2), isFalse); | 87 } |
| 90 r2 = new Rectangle(0, 2, 5, 10); | 88 |
| 91 expect(r.containsRectangle(r2), isFalse); | 89 testContainsRectangle() { |
| 92 r2 = new Rectangle(0, 0, 5, 10); | 90 var r = new Rectangle(-10, 0, 20, 10); |
| 93 expect(r.containsRectangle(r2), isTrue); | 91 Expect.isTrue(r.containsRectangle(r)); |
| 94 }); | 92 |
| 95 | 93 Expect.isFalse(r.containsRectangle( |
| 96 test('containsPoint', () { | 94 new Rectangle(double.NAN, double.NAN, double.NAN, double.NAN))); |
| 97 var r = new Rectangle(20, 40, 60, 80); | 95 |
| 98 | 96 var r2 = new Rectangle(0, 2, 5, 5); |
| 99 // Test middle. | 97 Expect.isTrue(r.containsRectangle(r2)); |
| 100 expect(r.containsPoint(new Point(50, 80)), isTrue); | 98 Expect.isFalse(r2.containsRectangle(r)); |
| 101 | 99 |
| 102 // Test edges. | 100 r2 = new Rectangle(-11, 2, 5, 5); |
| 103 expect(r.containsPoint(new Point(20, 40)), isTrue); | 101 Expect.isFalse(r.containsRectangle(r2)); |
| 104 expect(r.containsPoint(new Point(50, 40)), isTrue); | 102 r2 = new Rectangle(0, 2, 15, 5); |
| 105 expect(r.containsPoint(new Point(80, 40)), isTrue); | 103 Expect.isFalse(r.containsRectangle(r2)); |
| 106 expect(r.containsPoint(new Point(80, 80)), isTrue); | 104 r2 = new Rectangle(0, 2, 5, 10); |
| 107 expect(r.containsPoint(new Point(80, 120)), isTrue); | 105 Expect.isFalse(r.containsRectangle(r2)); |
| 108 expect(r.containsPoint(new Point(50, 120)), isTrue); | 106 r2 = new Rectangle(0, 0, 5, 10); |
| 109 expect(r.containsPoint(new Point(20, 120)), isTrue); | 107 Expect.isTrue(r.containsRectangle(r2)); |
| 110 expect(r.containsPoint(new Point(20, 80)), isTrue); | 108 } |
| 111 | 109 |
| 112 // Test outside. | 110 testContainsPoint() { |
| 113 expect(r.containsPoint(new Point(0, 0)), isFalse); | 111 var r = new Rectangle(20, 40, 60, 80); |
| 114 expect(r.containsPoint(new Point(50, 0)), isFalse); | 112 |
| 115 expect(r.containsPoint(new Point(100, 0)), isFalse); | 113 // Test middle. |
| 116 expect(r.containsPoint(new Point(100, 80)), isFalse); | 114 Expect.isTrue(r.containsPoint(new Point(50, 80))); |
| 117 expect(r.containsPoint(new Point(100, 160)), isFalse); | 115 |
| 118 expect(r.containsPoint(new Point(50, 160)), isFalse); | 116 // Test edges. |
| 119 expect(r.containsPoint(new Point(0, 160)), isFalse); | 117 Expect.isTrue(r.containsPoint(new Point(20, 40))); |
| 120 expect(r.containsPoint(new Point(0, 80)), isFalse); | 118 Expect.isTrue(r.containsPoint(new Point(50, 40))); |
| 121 }); | 119 Expect.isTrue(r.containsPoint(new Point(80, 40))); |
| 122 | 120 Expect.isTrue(r.containsPoint(new Point(80, 80))); |
| 123 test('hashCode', () { | 121 Expect.isTrue(r.containsPoint(new Point(80, 120))); |
| 124 var a = new Rectangle(0, 1, 2, 3); | 122 Expect.isTrue(r.containsPoint(new Point(50, 120))); |
| 125 var b = new Rectangle(0, 1, 2, 3); | 123 Expect.isTrue(r.containsPoint(new Point(20, 120))); |
| 126 expect(a.hashCode, b.hashCode); | 124 Expect.isTrue(r.containsPoint(new Point(20, 80))); |
| 127 | 125 |
| 128 var c = new Rectangle(1, 0, 2, 3); | 126 // Test outside. |
| 129 expect(a.hashCode == c.hashCode, isFalse); | 127 Expect.isFalse(r.containsPoint(new Point(0, 0))); |
| 130 }); | 128 Expect.isFalse(r.containsPoint(new Point(50, 0))); |
| 131 | 129 Expect.isFalse(r.containsPoint(new Point(100, 0))); |
| 132 { // Edge cases for boundingBox/intersection | 130 Expect.isFalse(r.containsPoint(new Point(100, 80))); |
| 133 edgeTest(a, l) { | 131 Expect.isFalse(r.containsPoint(new Point(100, 160))); |
| 134 test('edge case $a/$l', () { | 132 Expect.isFalse(r.containsPoint(new Point(50, 160))); |
| 135 var r = new Rectangle(a, a, l, l); | 133 Expect.isFalse(r.containsPoint(new Point(0, 160))); |
| 136 expect(r.boundingBox(r), r); | 134 Expect.isFalse(r.containsPoint(new Point(0, 80))); |
| 137 expect(r.intersection(r), r); | 135 } |
| 138 }); | 136 |
| 139 } | 137 testHashCode() { |
| 140 | 138 var a = new Rectangle(0, 1, 2, 3); |
| 141 var bignum1 = 0x20000000000000 + 0.0; | 139 var b = new Rectangle(0, 1, 2, 3); |
| 142 var bignum2 = 0x20000000000002 + 0.0; | 140 Expect.equals(b.hashCode, a.hashCode); |
| 143 var bignum3 = 0x20000000000004 + 0.0; | 141 |
| 144 edgeTest(1.0, bignum1); | 142 var c = new Rectangle(1, 0, 2, 3); |
| 145 edgeTest(1.0, bignum2); | 143 Expect.isFalse(a.hashCode == c.hashCode); |
| 146 edgeTest(1.0, bignum3); | 144 } |
| 147 edgeTest(bignum1, 1.0); | 145 |
| 148 edgeTest(bignum2, 1.0); | 146 testEdgeCases() { |
| 149 edgeTest(bignum3, 1.0); | 147 edgeTest(double a, double l) { |
| 150 } | 148 var r = new Rectangle(a, a, l, l); |
| 151 | 149 Expect.equals(r, r.boundingBox(r)); |
| 152 test("equality with different widths", () { | 150 Expect.equals(r, r.intersection(r)); |
| 153 var bignum = 0x80000000000008 + 0.0; | 151 } |
| 154 var r1 = new Rectangle(bignum, bignum, 1.0, 1.0); | 152 |
| 155 var r2 = new Rectangle(bignum, bignum, 2.0, 2.0); | 153 var bignum1 = 0x20000000000000 + 0.0; |
| 156 expect(r1, r2); | 154 var bignum2 = 0x20000000000002 + 0.0; |
| 157 expect(r1.hashCode, r2.hashCode); | 155 var bignum3 = 0x20000000000004 + 0.0; |
| 158 expect(r1.right, r2.right); | 156 edgeTest(1.0, bignum1); |
| 159 expect(r1.bottom, r2.bottom); | 157 edgeTest(1.0, bignum2); |
| 160 expect(r1.width, 1.0); | 158 edgeTest(1.0, bignum3); |
| 161 expect(r2.width, 2.0); | 159 edgeTest(bignum1, 1.0); |
| 162 }); | 160 edgeTest(bignum2, 1.0); |
| 163 | 161 edgeTest(bignum3, 1.0); |
| 164 test('negative lengths', () { | 162 } |
| 165 // Constructor allows negative lengths, but clamps them to zero. | 163 |
| 166 expect(new Rectangle(4, 4, -2, -2), new Rectangle(4, 4, 0, 0)); | 164 testEquality() { |
| 167 expect(new MutableRectangle(4, 4, -2, -2), new Rectangle(4, 4, 0, 0)); | 165 var bignum = 0x80000000000008 + 0.0; |
| 168 | 166 var r1 = new Rectangle(bignum, bignum, 1.0, 1.0); |
| 169 // Setters clamp negative lengths to zero. | 167 var r2 = new Rectangle(bignum, bignum, 2.0, 2.0); |
| 170 var r = new MutableRectangle(0, 0, 1, 1); | 168 Expect.equals(r2, r1); |
| 171 r.width = -1; | 169 Expect.equals(r2.hashCode, r1.hashCode); |
| 172 r.height = -1; | 170 Expect.equals(r2.right, r1.right); |
| 173 expect(r, new Rectangle(0, 0, 0, 0)); | 171 Expect.equals(r2.bottom, r1.bottom); |
| 174 | 172 Expect.equals(1.0, r1.width); |
| 175 // Test that doubles are clamped to double zero. | 173 Expect.equals(2.0, r2.width); |
| 176 r = new Rectangle(1.5, 1.5, -2.5, -2.5); | 174 } |
| 177 expect(identical(r.width, 0.0), isTrue); | 175 |
| 178 expect(identical(r.height, 0.0), isTrue); | 176 testNegativeLengths() { |
| 179 }); | 177 // Constructor allows negative lengths, but clamps them to zero. |
| 180 | 178 Expect.equals(new Rectangle(4, 4, 0, 0), new Rectangle(4, 4, -2, -2)); |
| 181 // A NaN-value in any rectangle value means the rectange is considered | 179 Expect.equals(new Rectangle(4, 4, 0, 0), |
| 182 // empty (contains no points, doesn't intersect any other rectangle). | 180 new MutableRectangle(4, 4, -2, -2)); |
| 183 const NaN = double.NAN; | 181 |
| 184 var isNaN = predicate((x) => x is double && x.isNaN, "NaN"); | 182 // Setters clamp negative lengths to zero. |
| 185 | 183 var mutable = new MutableRectangle(0, 0, 1, 1); |
| 186 test('NaN left', () { | 184 mutable.width = -1; |
| 187 var rectangles = [ | 185 mutable.height = -1; |
| 188 const Rectangle(NaN, 1, 2, 3), | 186 Expect.equals(new Rectangle(0, 0, 0, 0), mutable); |
| 189 new MutableRectangle(NaN, 1, 2, 3), | 187 |
| 190 new Rectangle.fromPoints(new Point(NaN, 1), new Point(2, 4)), | 188 // Test that doubles are clamped to double zero. |
| 191 new MutableRectangle.fromPoints(new Point(NaN, 1), new Point(2, 4)), | 189 var rectangle = new Rectangle(1.5, 1.5, -2.5, -2.5); |
| 192 ]; | 190 Expect.isTrue(identical(rectangle.width, 0.0)); |
| 193 for (var r in rectangles) { | 191 Expect.isTrue(identical(rectangle.height, 0.0)); |
| 194 expect(r.containsPoint(new Point(0, 1)), false); | 192 } |
| 195 expect(r.containsRectangle(new Rectangle(0, 1, 2, 3)), false); | 193 |
| 196 expect(r.intersects(new Rectangle(0, 1, 2, 3)), false); | 194 testNaNLeft() { |
| 197 expect(r.left, isNaN); | 195 var rectangles = [ |
| 198 expect(r.right, isNaN); | 196 const Rectangle(double.NAN, 1, 2, 3), |
| 199 } | 197 new MutableRectangle(double.NAN, 1, 2, 3), |
| 200 }); | 198 new Rectangle.fromPoints(new Point(double.NAN, 1), new Point(2, 4)), |
| 201 | 199 new MutableRectangle.fromPoints(new Point(double.NAN, 1), new Point(2, 4)), |
| 202 test('NaN top', () { | 200 ]; |
| 203 var rectangles = [ | 201 for (var r in rectangles) { |
| 204 const Rectangle(0, NaN, 2, 3), | 202 Expect.isFalse(r.containsPoint(new Point(0, 1))); |
| 205 new MutableRectangle(0, NaN, 2, 3), | 203 Expect.isFalse(r.containsRectangle(new Rectangle(0, 1, 2, 3))); |
| 206 new Rectangle.fromPoints(new Point(0, NaN), new Point(2, 4)), | 204 Expect.isFalse(r.intersects(new Rectangle(0, 1, 2, 3))); |
| 207 new MutableRectangle.fromPoints(new Point(0, NaN), new Point(2, 4)), | 205 Expect.isTrue(r.left.isNaN); |
| 208 ]; | 206 Expect.isTrue(r.right.isNaN); |
| 209 for (var r in rectangles) { | 207 } |
| 210 expect(r.containsPoint(new Point(0, 1)), false); | 208 } |
| 211 expect(r.containsRectangle(new Rectangle(0, 1, 2, 3)), false); | 209 testNaNTop() { |
| 212 expect(r.intersects(new Rectangle(0, 1, 2, 3)), false); | 210 var rectangles = [ |
| 213 expect(r.top, isNaN); | 211 const Rectangle(0, double.NAN, 2, 3), |
| 214 expect(r.bottom, isNaN); | 212 new MutableRectangle(0, double.NAN, 2, 3), |
| 215 } | 213 new Rectangle.fromPoints(new Point(0, double.NAN), new Point(2, 4)), |
| 216 }); | 214 new MutableRectangle.fromPoints(new Point(0, double.NAN), new Point(2, 4)), |
| 217 | 215 ]; |
| 218 test('NaN width', () { | 216 for (var r in rectangles) { |
| 219 var rectangles = [ | 217 Expect.isFalse(r.containsPoint(new Point(0, 1))); |
| 220 const Rectangle(0, 1, NaN, 3), | 218 Expect.isFalse(r.containsRectangle(new Rectangle(0, 1, 2, 3))); |
| 221 new MutableRectangle(0, 1, NaN, 3), | 219 Expect.isFalse(r.intersects(new Rectangle(0, 1, 2, 3))); |
| 222 new Rectangle.fromPoints(new Point(0, 1), new Point(NaN, 4)), | 220 Expect.isTrue(r.top.isNaN); |
| 223 new MutableRectangle.fromPoints(new Point(0, 1), new Point(NaN, 4)), | 221 Expect.isTrue(r.bottom.isNaN); |
| 224 ]; | 222 } |
| 225 for (var r in rectangles) { | 223 } |
| 226 expect(r.containsPoint(new Point(0, 1)), false); | 224 |
| 227 expect(r.containsRectangle(new Rectangle(0, 1, 2, 3)), false); | 225 testNaNWidth() { |
| 228 expect(r.intersects(new Rectangle(0, 1, 2, 3)), false); | 226 var rectangles = [ |
| 229 expect(r.right, isNaN); | 227 const Rectangle(0, 1, double.NAN, 3), |
| 230 expect(r.width, isNaN); | 228 new MutableRectangle(0, 1, double.NAN, 3), |
| 231 } | 229 new Rectangle.fromPoints(new Point(0, 1), new Point(double.NAN, 4)), |
| 232 }); | 230 new MutableRectangle.fromPoints(new Point(0, 1), new Point(double.NAN, 4)), |
| 233 | 231 ]; |
| 234 test('NaN heigth', () { | 232 for (var r in rectangles) { |
| 235 var rectangles = [ | 233 Expect.isFalse(r.containsPoint(new Point(0, 1))); |
| 236 const Rectangle(0, 1, 2, NaN), | 234 Expect.isFalse(r.containsRectangle(new Rectangle(0, 1, 2, 3))); |
| 237 new MutableRectangle(0, 1, 2, NaN), | 235 Expect.isFalse(r.intersects(new Rectangle(0, 1, 2, 3))); |
| 238 new Rectangle.fromPoints(new Point(0, 1), new Point(2, NaN)), | 236 Expect.isTrue(r.right.isNaN); |
| 239 new MutableRectangle.fromPoints(new Point(0, 1), new Point(2, NaN)), | 237 Expect.isTrue(r.width.isNaN); |
| 240 ]; | 238 } |
| 241 for (var r in rectangles) { | 239 } |
| 242 expect(r.containsPoint(new Point(0, 1)), false); | 240 |
| 243 expect(r.containsRectangle(new Rectangle(0, 1, 2, 3)), false); | 241 testNaNHeight() { |
| 244 expect(r.intersects(new Rectangle(0, 1, 2, 3)), false); | 242 var rectangles = [ |
| 245 expect(r.bottom, isNaN); | 243 const Rectangle(0, 1, 2, double.NAN), |
| 246 expect(r.height, isNaN); | 244 new MutableRectangle(0, 1, 2, double.NAN), |
| 247 } | 245 new Rectangle.fromPoints(new Point(0, 1), new Point(2, double.NAN)), |
| 248 }); | 246 new MutableRectangle.fromPoints(new Point(0, 1), new Point(2, double.NAN)), |
| 249 } | 247 ]; |
| 250 | 248 for (var r in rectangles) { |
| 249 Expect.isFalse(r.containsPoint(new Point(0, 1))); |
| 250 Expect.isFalse(r.containsRectangle(new Rectangle(0, 1, 2, 3))); |
| 251 Expect.isFalse(r.intersects(new Rectangle(0, 1, 2, 3))); |
| 252 Expect.isTrue(r.bottom.isNaN); |
| 253 Expect.isTrue(r.height.isNaN); |
| 254 } |
| 255 } |
| OLD | NEW |