| OLD | NEW |
| (Empty) |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "cc/base/region.h" | |
| 6 | |
| 7 #include "testing/gtest/include/gtest/gtest.h" | |
| 8 | |
| 9 namespace cc { | |
| 10 namespace { | |
| 11 | |
| 12 #define TEST_INSIDE_RECT(r, x, y, w, h) \ | |
| 13 EXPECT_TRUE(r.Contains(gfx::Point(x, y))); \ | |
| 14 EXPECT_TRUE(r.Contains(gfx::Point(x + w - 1, y))); \ | |
| 15 EXPECT_TRUE(r.Contains(gfx::Point(x, y + h - 1))); \ | |
| 16 EXPECT_TRUE(r.Contains(gfx::Point(x + w - 1, y + h - 1))); \ | |
| 17 EXPECT_TRUE(r.Contains(gfx::Point(x, y + h / 2))); \ | |
| 18 EXPECT_TRUE(r.Contains(gfx::Point(x + w - 1, y + h / 2))); \ | |
| 19 EXPECT_TRUE(r.Contains(gfx::Point(x + w / 2, y))); \ | |
| 20 EXPECT_TRUE(r.Contains(gfx::Point(x + w / 2, y + h - 1))); \ | |
| 21 EXPECT_TRUE(r.Contains(gfx::Point(x + w / 2, y + h / 2))); \ | |
| 22 | |
| 23 #define TEST_LEFT_OF_RECT(r, x, y, w, h) \ | |
| 24 EXPECT_FALSE(r.Contains(gfx::Point(x - 1, y))); \ | |
| 25 EXPECT_FALSE(r.Contains(gfx::Point(x - 1, y + h - 1))); \ | |
| 26 | |
| 27 #define TEST_RIGHT_OF_RECT(r, x, y, w, h) \ | |
| 28 EXPECT_FALSE(r.Contains(gfx::Point(x + w, y))); \ | |
| 29 EXPECT_FALSE(r.Contains(gfx::Point(x + w, y + h - 1))); \ | |
| 30 | |
| 31 #define TEST_TOP_OF_RECT(r, x, y, w, h) \ | |
| 32 EXPECT_FALSE(r.Contains(gfx::Point(x, y - 1))); \ | |
| 33 EXPECT_FALSE(r.Contains(gfx::Point(x + w - 1, y - 1))); \ | |
| 34 | |
| 35 #define TEST_BOTTOM_OF_RECT(r, x, y, w, h) \ | |
| 36 EXPECT_FALSE(r.Contains(gfx::Point(x, y + h))); \ | |
| 37 EXPECT_FALSE(r.Contains(gfx::Point(x + w - 1, y + h))); \ | |
| 38 | |
| 39 TEST(RegionTest, ContainsPoint) { | |
| 40 Region r; | |
| 41 | |
| 42 EXPECT_FALSE(r.Contains(gfx::Point(0, 0))); | |
| 43 | |
| 44 r.Union(gfx::Rect(35, 35, 1, 1)); | |
| 45 TEST_INSIDE_RECT(r, 35, 35, 1, 1); | |
| 46 TEST_LEFT_OF_RECT(r, 35, 35, 1, 1); | |
| 47 TEST_RIGHT_OF_RECT(r, 35, 35, 1, 1); | |
| 48 TEST_TOP_OF_RECT(r, 35, 35, 1, 1); | |
| 49 TEST_BOTTOM_OF_RECT(r, 35, 35, 1, 1); | |
| 50 | |
| 51 r.Union(gfx::Rect(30, 30, 10, 10)); | |
| 52 TEST_INSIDE_RECT(r, 30, 30, 10, 10); | |
| 53 TEST_LEFT_OF_RECT(r, 30, 30, 10, 10); | |
| 54 TEST_RIGHT_OF_RECT(r, 30, 30, 10, 10); | |
| 55 TEST_TOP_OF_RECT(r, 30, 30, 10, 10); | |
| 56 TEST_BOTTOM_OF_RECT(r, 30, 30, 10, 10); | |
| 57 | |
| 58 r.Union(gfx::Rect(31, 40, 10, 10)); | |
| 59 EXPECT_FALSE(r.Contains(gfx::Point(30, 40))); | |
| 60 EXPECT_TRUE(r.Contains(gfx::Point(31, 40))); | |
| 61 EXPECT_FALSE(r.Contains(gfx::Point(40, 39))); | |
| 62 EXPECT_TRUE(r.Contains(gfx::Point(40, 40))); | |
| 63 | |
| 64 TEST_INSIDE_RECT(r, 30, 30, 10, 10); | |
| 65 TEST_LEFT_OF_RECT(r, 30, 30, 10, 10); | |
| 66 TEST_RIGHT_OF_RECT(r, 30, 30, 10, 10); | |
| 67 TEST_TOP_OF_RECT(r, 30, 30, 10, 10); | |
| 68 TEST_INSIDE_RECT(r, 31, 40, 10, 10); | |
| 69 TEST_LEFT_OF_RECT(r, 31, 40, 10, 10); | |
| 70 TEST_RIGHT_OF_RECT(r, 31, 40, 10, 10); | |
| 71 TEST_BOTTOM_OF_RECT(r, 31, 40, 10, 10); | |
| 72 | |
| 73 r.Union(gfx::Rect(42, 40, 10, 10)); | |
| 74 | |
| 75 TEST_INSIDE_RECT(r, 42, 40, 10, 10); | |
| 76 TEST_LEFT_OF_RECT(r, 42, 40, 10, 10); | |
| 77 TEST_RIGHT_OF_RECT(r, 42, 40, 10, 10); | |
| 78 TEST_TOP_OF_RECT(r, 42, 40, 10, 10); | |
| 79 TEST_BOTTOM_OF_RECT(r, 42, 40, 10, 10); | |
| 80 | |
| 81 TEST_INSIDE_RECT(r, 30, 30, 10, 10); | |
| 82 TEST_LEFT_OF_RECT(r, 30, 30, 10, 10); | |
| 83 TEST_RIGHT_OF_RECT(r, 30, 30, 10, 10); | |
| 84 TEST_TOP_OF_RECT(r, 30, 30, 10, 10); | |
| 85 TEST_INSIDE_RECT(r, 31, 40, 10, 10); | |
| 86 TEST_LEFT_OF_RECT(r, 31, 40, 10, 10); | |
| 87 TEST_RIGHT_OF_RECT(r, 31, 40, 10, 10); | |
| 88 TEST_BOTTOM_OF_RECT(r, 31, 40, 10, 10); | |
| 89 } | |
| 90 | |
| 91 TEST(RegionTest, EmptySpan) { | |
| 92 Region r; | |
| 93 r.Union(gfx::Rect(5, 0, 10, 10)); | |
| 94 r.Union(gfx::Rect(0, 5, 10, 10)); | |
| 95 r.Subtract(gfx::Rect(7, 7, 10, 0)); | |
| 96 | |
| 97 for (Region::Iterator it(r); it.has_rect(); it.next()) | |
| 98 EXPECT_FALSE(it.rect().IsEmpty()); | |
| 99 } | |
| 100 | |
| 101 #define TEST_NO_INTERSECT(a, b) { \ | |
| 102 Region ar = a; \ | |
| 103 Region br = b; \ | |
| 104 EXPECT_FALSE(ar.Intersects(br)); \ | |
| 105 EXPECT_FALSE(br.Intersects(ar)); \ | |
| 106 EXPECT_FALSE(ar.Intersects(b)); \ | |
| 107 EXPECT_FALSE(br.Intersects(a)); \ | |
| 108 } | |
| 109 | |
| 110 #define TEST_INTERSECT(a, b) { \ | |
| 111 Region ar = a; \ | |
| 112 Region br = b; \ | |
| 113 EXPECT_TRUE(ar.Intersects(br)); \ | |
| 114 EXPECT_TRUE(br.Intersects(ar)); \ | |
| 115 EXPECT_TRUE(ar.Intersects(b)); \ | |
| 116 EXPECT_TRUE(br.Intersects(a)); \ | |
| 117 } | |
| 118 | |
| 119 TEST(RegionTest, IntersectsRegion) { | |
| 120 Region r; | |
| 121 | |
| 122 TEST_NO_INTERSECT(gfx::Rect(), gfx::Rect()); | |
| 123 TEST_NO_INTERSECT(gfx::Rect(), gfx::Rect(0, 0, 1, 1)); | |
| 124 TEST_NO_INTERSECT(gfx::Rect(), gfx::Rect(1, 1, 1, 1)); | |
| 125 | |
| 126 TEST_NO_INTERSECT(gfx::Rect(-1, -1, 2, 2), gfx::Rect()); | |
| 127 | |
| 128 r.Union(gfx::Rect(0, 0, 1, 1)); | |
| 129 TEST_NO_INTERSECT(r, gfx::Rect()); | |
| 130 TEST_INTERSECT(r, gfx::Rect(0, 0, 1, 1)); | |
| 131 TEST_INTERSECT(r, gfx::Rect(0, 0, 2, 2)); | |
| 132 TEST_INTERSECT(r, gfx::Rect(-1, 0, 2, 2)); | |
| 133 TEST_INTERSECT(r, gfx::Rect(-1, -1, 2, 2)); | |
| 134 TEST_INTERSECT(r, gfx::Rect(0, -1, 2, 2)); | |
| 135 TEST_INTERSECT(r, gfx::Rect(-1, -1, 3, 3)); | |
| 136 | |
| 137 r.Union(gfx::Rect(0, 0, 3, 3)); | |
| 138 r.Union(gfx::Rect(10, 0, 3, 3)); | |
| 139 r.Union(gfx::Rect(0, 10, 13, 3)); | |
| 140 TEST_NO_INTERSECT(r, gfx::Rect()); | |
| 141 TEST_INTERSECT(r, gfx::Rect(1, 1, 1, 1)); | |
| 142 TEST_INTERSECT(r, gfx::Rect(0, 0, 2, 2)); | |
| 143 TEST_INTERSECT(r, gfx::Rect(1, 0, 2, 2)); | |
| 144 TEST_INTERSECT(r, gfx::Rect(1, 1, 2, 2)); | |
| 145 TEST_INTERSECT(r, gfx::Rect(0, 1, 2, 2)); | |
| 146 TEST_INTERSECT(r, gfx::Rect(0, 0, 3, 3)); | |
| 147 TEST_INTERSECT(r, gfx::Rect(-1, -1, 2, 2)); | |
| 148 TEST_INTERSECT(r, gfx::Rect(2, -1, 2, 2)); | |
| 149 TEST_INTERSECT(r, gfx::Rect(2, 2, 2, 2)); | |
| 150 TEST_INTERSECT(r, gfx::Rect(-1, 2, 2, 2)); | |
| 151 | |
| 152 TEST_INTERSECT(r, gfx::Rect(11, 1, 1, 1)); | |
| 153 TEST_INTERSECT(r, gfx::Rect(10, 0, 2, 2)); | |
| 154 TEST_INTERSECT(r, gfx::Rect(11, 0, 2, 2)); | |
| 155 TEST_INTERSECT(r, gfx::Rect(11, 1, 2, 2)); | |
| 156 TEST_INTERSECT(r, gfx::Rect(10, 1, 2, 2)); | |
| 157 TEST_INTERSECT(r, gfx::Rect(10, 0, 3, 3)); | |
| 158 TEST_INTERSECT(r, gfx::Rect(9, -1, 2, 2)); | |
| 159 TEST_INTERSECT(r, gfx::Rect(12, -1, 2, 2)); | |
| 160 TEST_INTERSECT(r, gfx::Rect(12, 2, 2, 2)); | |
| 161 TEST_INTERSECT(r, gfx::Rect(9, 2, 2, 2)); | |
| 162 | |
| 163 TEST_INTERSECT(r, gfx::Rect(0, -1, 13, 5)); | |
| 164 TEST_INTERSECT(r, gfx::Rect(1, -1, 11, 5)); | |
| 165 TEST_INTERSECT(r, gfx::Rect(2, -1, 9, 5)); | |
| 166 TEST_INTERSECT(r, gfx::Rect(2, -1, 8, 5)); | |
| 167 TEST_INTERSECT(r, gfx::Rect(3, -1, 8, 5)); | |
| 168 TEST_NO_INTERSECT(r, gfx::Rect(3, -1, 7, 5)); | |
| 169 | |
| 170 TEST_INTERSECT(r, gfx::Rect(0, 1, 13, 1)); | |
| 171 TEST_INTERSECT(r, gfx::Rect(1, 1, 11, 1)); | |
| 172 TEST_INTERSECT(r, gfx::Rect(2, 1, 9, 1)); | |
| 173 TEST_INTERSECT(r, gfx::Rect(2, 1, 8, 1)); | |
| 174 TEST_INTERSECT(r, gfx::Rect(3, 1, 8, 1)); | |
| 175 TEST_NO_INTERSECT(r, gfx::Rect(3, 1, 7, 1)); | |
| 176 | |
| 177 TEST_INTERSECT(r, gfx::Rect(0, 0, 13, 13)); | |
| 178 TEST_INTERSECT(r, gfx::Rect(0, 1, 13, 11)); | |
| 179 TEST_INTERSECT(r, gfx::Rect(0, 2, 13, 9)); | |
| 180 TEST_INTERSECT(r, gfx::Rect(0, 2, 13, 8)); | |
| 181 TEST_INTERSECT(r, gfx::Rect(0, 3, 13, 8)); | |
| 182 TEST_NO_INTERSECT(r, gfx::Rect(0, 3, 13, 7)); | |
| 183 } | |
| 184 | |
| 185 TEST(RegionTest, ReadPastFullSpanVectorInIntersectsTest) { | |
| 186 Region r; | |
| 187 | |
| 188 // This region has enough spans to fill its allocated Vector exactly. | |
| 189 r.Union(gfx::Rect(400, 300, 1, 800)); | |
| 190 r.Union(gfx::Rect(785, 585, 1, 1)); | |
| 191 r.Union(gfx::Rect(787, 585, 1, 1)); | |
| 192 r.Union(gfx::Rect(0, 587, 16, 162)); | |
| 193 r.Union(gfx::Rect(26, 590, 300, 150)); | |
| 194 r.Union(gfx::Rect(196, 750, 1, 1)); | |
| 195 r.Union(gfx::Rect(0, 766, 1, 1)); | |
| 196 r.Union(gfx::Rect(0, 782, 1, 1)); | |
| 197 r.Union(gfx::Rect(745, 798, 1, 1)); | |
| 198 r.Union(gfx::Rect(795, 882, 10, 585)); | |
| 199 r.Union(gfx::Rect(100, 1499, 586, 1)); | |
| 200 r.Union(gfx::Rect(100, 1500, 585, 784)); | |
| 201 // This query rect goes past the bottom of the Region, causing the | |
| 202 // test to reach the last span and try go past it. It should not read | |
| 203 // memory off the end of the span Vector. | |
| 204 TEST_NO_INTERSECT(r, gfx::Rect(0, 2184, 1, 150)); | |
| 205 } | |
| 206 | |
| 207 #define TEST_NO_CONTAINS(a, b) \ | |
| 208 { \ | |
| 209 Region ar = a; \ | |
| 210 Region br = b; \ | |
| 211 EXPECT_FALSE(ar.Contains(br)); \ | |
| 212 EXPECT_FALSE(ar.Contains(b)); \ | |
| 213 } | |
| 214 | |
| 215 #define TEST_CONTAINS(a, b) \ | |
| 216 { \ | |
| 217 Region ar = a; \ | |
| 218 Region br = b; \ | |
| 219 EXPECT_TRUE(ar.Contains(br)); \ | |
| 220 EXPECT_TRUE(ar.Contains(b)); \ | |
| 221 } | |
| 222 | |
| 223 TEST(RegionTest, ContainsRegion) { | |
| 224 TEST_CONTAINS(gfx::Rect(), gfx::Rect()); | |
| 225 TEST_CONTAINS(gfx::Rect(0, 0, 1, 1), gfx::Rect()); | |
| 226 TEST_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect()); | |
| 227 | |
| 228 TEST_NO_CONTAINS(gfx::Rect(), gfx::Rect(0, 0, 1, 1)); | |
| 229 TEST_NO_CONTAINS(gfx::Rect(), gfx::Rect(1, 1, 1, 1)); | |
| 230 | |
| 231 TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(11, 10, 1, 1)); | |
| 232 TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(10, 11, 1, 1)); | |
| 233 TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(9, 10, 1, 1)); | |
| 234 TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(10, 9, 1, 1)); | |
| 235 TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(9, 9, 2, 2)); | |
| 236 TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(10, 9, 2, 2)); | |
| 237 TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(9, 10, 2, 2)); | |
| 238 TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(10, 10, 2, 2)); | |
| 239 TEST_NO_CONTAINS(gfx::Rect(10, 10, 1, 1), gfx::Rect(9, 9, 3, 3)); | |
| 240 | |
| 241 Region h_lines; | |
| 242 for (int i = 10; i < 20; i += 2) | |
| 243 h_lines.Union(gfx::Rect(i, 10, 1, 10)); | |
| 244 | |
| 245 TEST_CONTAINS(gfx::Rect(10, 10, 9, 10), h_lines); | |
| 246 TEST_NO_CONTAINS(gfx::Rect(10, 10, 9, 9), h_lines); | |
| 247 TEST_NO_CONTAINS(gfx::Rect(10, 11, 9, 9), h_lines); | |
| 248 TEST_NO_CONTAINS(gfx::Rect(10, 10, 8, 10), h_lines); | |
| 249 TEST_NO_CONTAINS(gfx::Rect(11, 10, 8, 10), h_lines); | |
| 250 | |
| 251 Region v_lines; | |
| 252 for (int i = 10; i < 20; i += 2) | |
| 253 v_lines.Union(gfx::Rect(10, i, 10, 1)); | |
| 254 | |
| 255 TEST_CONTAINS(gfx::Rect(10, 10, 10, 9), v_lines); | |
| 256 TEST_NO_CONTAINS(gfx::Rect(10, 10, 9, 9), v_lines); | |
| 257 TEST_NO_CONTAINS(gfx::Rect(11, 10, 9, 9), v_lines); | |
| 258 TEST_NO_CONTAINS(gfx::Rect(10, 10, 10, 8), v_lines); | |
| 259 TEST_NO_CONTAINS(gfx::Rect(10, 11, 10, 8), v_lines); | |
| 260 | |
| 261 Region grid; | |
| 262 for (int i = 10; i < 20; i += 2) | |
| 263 for (int j = 10; j < 20; j += 2) | |
| 264 grid.Union(gfx::Rect(i, j, 1, 1)); | |
| 265 | |
| 266 TEST_CONTAINS(gfx::Rect(10, 10, 9, 9), grid); | |
| 267 TEST_NO_CONTAINS(gfx::Rect(10, 10, 9, 8), grid); | |
| 268 TEST_NO_CONTAINS(gfx::Rect(10, 11, 9, 8), grid); | |
| 269 TEST_NO_CONTAINS(gfx::Rect(10, 10, 8, 9), grid); | |
| 270 TEST_NO_CONTAINS(gfx::Rect(11, 10, 8, 9), grid); | |
| 271 | |
| 272 TEST_CONTAINS(h_lines, h_lines); | |
| 273 TEST_CONTAINS(v_lines, v_lines); | |
| 274 TEST_NO_CONTAINS(v_lines, h_lines); | |
| 275 TEST_NO_CONTAINS(h_lines, v_lines); | |
| 276 TEST_CONTAINS(grid, grid); | |
| 277 TEST_CONTAINS(h_lines, grid); | |
| 278 TEST_CONTAINS(v_lines, grid); | |
| 279 TEST_NO_CONTAINS(grid, h_lines); | |
| 280 TEST_NO_CONTAINS(grid, v_lines); | |
| 281 | |
| 282 for (int i = 10; i < 20; i += 2) | |
| 283 TEST_CONTAINS(h_lines, gfx::Rect(i, 10, 1, 10)); | |
| 284 | |
| 285 for (int i = 10; i < 20; i += 2) | |
| 286 TEST_CONTAINS(v_lines, gfx::Rect(10, i, 10, 1)); | |
| 287 | |
| 288 for (int i = 10; i < 20; i += 2) | |
| 289 for (int j = 10; j < 20; j += 2) | |
| 290 TEST_CONTAINS(grid, gfx::Rect(i, j, 1, 1)); | |
| 291 | |
| 292 Region container; | |
| 293 container.Union(gfx::Rect(0, 0, 40, 20)); | |
| 294 container.Union(gfx::Rect(0, 20, 41, 20)); | |
| 295 TEST_CONTAINS(container, gfx::Rect(5, 5, 30, 30)); | |
| 296 | |
| 297 container.Clear(); | |
| 298 container.Union(gfx::Rect(0, 0, 10, 10)); | |
| 299 container.Union(gfx::Rect(0, 30, 10, 10)); | |
| 300 container.Union(gfx::Rect(30, 30, 10, 10)); | |
| 301 container.Union(gfx::Rect(30, 0, 10, 10)); | |
| 302 TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30)); | |
| 303 | |
| 304 container.Clear(); | |
| 305 container.Union(gfx::Rect(0, 0, 10, 10)); | |
| 306 container.Union(gfx::Rect(0, 30, 10, 10)); | |
| 307 container.Union(gfx::Rect(30, 0, 10, 40)); | |
| 308 TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30)); | |
| 309 | |
| 310 container.Clear(); | |
| 311 container.Union(gfx::Rect(30, 0, 10, 10)); | |
| 312 container.Union(gfx::Rect(30, 30, 10, 10)); | |
| 313 container.Union(gfx::Rect(0, 0, 10, 40)); | |
| 314 TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30)); | |
| 315 | |
| 316 container.Clear(); | |
| 317 container.Union(gfx::Rect(0, 0, 10, 40)); | |
| 318 container.Union(gfx::Rect(30, 0, 10, 40)); | |
| 319 TEST_NO_CONTAINS(container, gfx::Rect(5, 5, 30, 30)); | |
| 320 | |
| 321 container.Clear(); | |
| 322 container.Union(gfx::Rect(0, 0, 40, 40)); | |
| 323 TEST_NO_CONTAINS(container, gfx::Rect(10, -1, 20, 10)); | |
| 324 | |
| 325 container.Clear(); | |
| 326 container.Union(gfx::Rect(0, 0, 40, 40)); | |
| 327 TEST_NO_CONTAINS(container, gfx::Rect(10, 31, 20, 10)); | |
| 328 | |
| 329 container.Clear(); | |
| 330 container.Union(gfx::Rect(0, 0, 40, 20)); | |
| 331 container.Union(gfx::Rect(0, 20, 41, 20)); | |
| 332 TEST_NO_CONTAINS(container, gfx::Rect(-1, 10, 10, 20)); | |
| 333 | |
| 334 container.Clear(); | |
| 335 container.Union(gfx::Rect(0, 0, 40, 20)); | |
| 336 container.Union(gfx::Rect(0, 20, 41, 20)); | |
| 337 TEST_NO_CONTAINS(container, gfx::Rect(31, 10, 10, 20)); | |
| 338 | |
| 339 container.Clear(); | |
| 340 container.Union(gfx::Rect(0, 0, 40, 40)); | |
| 341 container.Subtract(gfx::Rect(0, 20, 60, 0)); | |
| 342 TEST_NO_CONTAINS(container, gfx::Rect(31, 10, 10, 20)); | |
| 343 | |
| 344 container.Clear(); | |
| 345 container.Union(gfx::Rect(0, 0, 60, 20)); | |
| 346 container.Union(gfx::Rect(30, 20, 10, 20)); | |
| 347 TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 39)); | |
| 348 TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 40)); | |
| 349 TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 41)); | |
| 350 TEST_NO_CONTAINS(container, gfx::Rect(29, 0, 10, 39)); | |
| 351 TEST_CONTAINS(container, gfx::Rect(30, 0, 10, 40)); | |
| 352 TEST_NO_CONTAINS(container, gfx::Rect(31, 0, 10, 41)); | |
| 353 TEST_NO_CONTAINS(container, gfx::Rect(49, 0, 10, 39)); | |
| 354 TEST_NO_CONTAINS(container, gfx::Rect(50, 0, 10, 40)); | |
| 355 TEST_NO_CONTAINS(container, gfx::Rect(51, 0, 10, 41)); | |
| 356 | |
| 357 container.Clear(); | |
| 358 container.Union(gfx::Rect(30, 0, 10, 20)); | |
| 359 container.Union(gfx::Rect(0, 20, 60, 20)); | |
| 360 TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 39)); | |
| 361 TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 40)); | |
| 362 TEST_NO_CONTAINS(container, gfx::Rect(0, 0, 10, 41)); | |
| 363 TEST_NO_CONTAINS(container, gfx::Rect(29, 0, 10, 39)); | |
| 364 TEST_CONTAINS(container, gfx::Rect(30, 0, 10, 40)); | |
| 365 TEST_NO_CONTAINS(container, gfx::Rect(31, 0, 10, 41)); | |
| 366 TEST_NO_CONTAINS(container, gfx::Rect(49, 0, 10, 39)); | |
| 367 TEST_NO_CONTAINS(container, gfx::Rect(50, 0, 10, 40)); | |
| 368 TEST_NO_CONTAINS(container, gfx::Rect(51, 0, 10, 41)); | |
| 369 } | |
| 370 | |
| 371 TEST(RegionTest, Union) { | |
| 372 Region r; | |
| 373 Region r2; | |
| 374 | |
| 375 // A rect uniting a contained rect does not change the region. | |
| 376 r2 = r = gfx::Rect(0, 0, 50, 50); | |
| 377 r2.Union(gfx::Rect(20, 20, 10, 10)); | |
| 378 EXPECT_EQ(r, r2); | |
| 379 | |
| 380 // A rect uniting a containing rect gives back the containing rect. | |
| 381 r = gfx::Rect(0, 0, 50, 50); | |
| 382 r.Union(gfx::Rect(0, 0, 100, 100)); | |
| 383 EXPECT_EQ(Region(gfx::Rect(0, 0, 100, 100)), r); | |
| 384 | |
| 385 // A complex region uniting a contained rect does not change the region. | |
| 386 r = gfx::Rect(0, 0, 50, 50); | |
| 387 r.Union(gfx::Rect(100, 0, 50, 50)); | |
| 388 r2 = r; | |
| 389 r2.Union(gfx::Rect(20, 20, 10, 10)); | |
| 390 EXPECT_EQ(r, r2); | |
| 391 | |
| 392 // A complex region uniting a containing rect gives back the containing rect. | |
| 393 r = gfx::Rect(0, 0, 50, 50); | |
| 394 r.Union(gfx::Rect(100, 0, 50, 50)); | |
| 395 r.Union(gfx::Rect(0, 0, 500, 500)); | |
| 396 EXPECT_EQ(Region(gfx::Rect(0, 0, 500, 500)), r); | |
| 397 } | |
| 398 | |
| 399 TEST(RegionTest, IsEmpty) { | |
| 400 EXPECT_TRUE(Region().IsEmpty()); | |
| 401 EXPECT_TRUE(Region(gfx::Rect()).IsEmpty()); | |
| 402 EXPECT_TRUE(Region(Region()).IsEmpty()); | |
| 403 EXPECT_TRUE(Region(gfx::Rect(10, 10, 10, 0)).IsEmpty()); | |
| 404 EXPECT_TRUE(Region(gfx::Rect(10, 10, 0, 10)).IsEmpty()); | |
| 405 EXPECT_TRUE(Region(gfx::Rect(-10, 10, 10, 0)).IsEmpty()); | |
| 406 EXPECT_TRUE(Region(gfx::Rect(-10, 10, 0, 10)).IsEmpty()); | |
| 407 EXPECT_FALSE(Region(gfx::Rect(-1, -1, 1, 1)).IsEmpty()); | |
| 408 EXPECT_FALSE(Region(gfx::Rect(0, 0, 1, 1)).IsEmpty()); | |
| 409 EXPECT_FALSE(Region(gfx::Rect(0, 0, 2, 2)).IsEmpty()); | |
| 410 | |
| 411 EXPECT_TRUE(SkIRect::MakeXYWH(10, 10, 10, 0).isEmpty()); | |
| 412 EXPECT_TRUE(SkIRect::MakeXYWH(10, 10, 0, 10).isEmpty()); | |
| 413 EXPECT_TRUE(SkIRect::MakeXYWH(-10, 10, 10, 0).isEmpty()); | |
| 414 EXPECT_TRUE(SkIRect::MakeXYWH(-10, 10, 0, 10).isEmpty()); | |
| 415 EXPECT_FALSE(SkIRect::MakeXYWH(-1, -1, 1, 1).isEmpty()); | |
| 416 EXPECT_FALSE(SkIRect::MakeXYWH(0, 0, 1, 1).isEmpty()); | |
| 417 EXPECT_FALSE(SkIRect::MakeXYWH(0, 0, 2, 2).isEmpty()); | |
| 418 } | |
| 419 | |
| 420 TEST(RegionTest, Clear) { | |
| 421 Region r; | |
| 422 | |
| 423 r = gfx::Rect(0, 0, 50, 50); | |
| 424 EXPECT_FALSE(r.IsEmpty()); | |
| 425 r.Clear(); | |
| 426 EXPECT_TRUE(r.IsEmpty()); | |
| 427 | |
| 428 r = gfx::Rect(0, 0, 50, 50); | |
| 429 r.Union(gfx::Rect(100, 0, 50, 50)); | |
| 430 r.Union(gfx::Rect(0, 0, 500, 500)); | |
| 431 EXPECT_FALSE(r.IsEmpty()); | |
| 432 r.Clear(); | |
| 433 EXPECT_TRUE(r.IsEmpty()); | |
| 434 } | |
| 435 | |
| 436 TEST(RegionSwap, Swap) { | |
| 437 Region r1, r2, r3; | |
| 438 | |
| 439 r1 = gfx::Rect(0, 0, 50, 50); | |
| 440 r1.Swap(&r2); | |
| 441 EXPECT_TRUE(r1.IsEmpty()); | |
| 442 EXPECT_EQ(r2.ToString(), Region(gfx::Rect(0, 0, 50, 50)).ToString()); | |
| 443 | |
| 444 r1 = gfx::Rect(0, 0, 50, 50); | |
| 445 r1.Union(gfx::Rect(100, 0, 50, 50)); | |
| 446 r1.Union(gfx::Rect(0, 0, 500, 500)); | |
| 447 r3 = r1; | |
| 448 r1.Swap(&r2); | |
| 449 EXPECT_EQ(r1.ToString(), Region(gfx::Rect(0, 0, 50, 50)).ToString()); | |
| 450 EXPECT_EQ(r2.ToString(), r3.ToString()); | |
| 451 } | |
| 452 | |
| 453 } // namespace | |
| 454 } // namespace cc | |
| OLD | NEW |