1 /* 2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javafx.scene.layout; 27 28 import java.lang.reflect.Field; 29 import javafx.geometry.Insets; 30 import javafx.scene.image.Image; 31 import javafx.scene.paint.Color; 32 import javafx.scene.shape.StrokeType; 33 import org.junit.Test; 34 35 import static javafx.scene.layout.BorderRepeat.*; 36 import static org.junit.Assert.*; 37 38 /** 39 * Tests for Border. 40 */ 41 public class BorderTest { 42 private static final BorderStroke[] STROKES_1 = new BorderStroke[] { 43 new BorderStroke(Color.RED, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, BorderWidths.EMPTY) 44 }; 45 private static final BorderStroke[] STROKES_2 = new BorderStroke[] { 46 new BorderStroke(Color.GREEN, BorderStrokeStyle.DASHED, new CornerRadii(3), new BorderWidths(4)), 47 new BorderStroke(Color.BLUE, BorderStrokeStyle.DOTTED, new CornerRadii(6), new BorderWidths(8)) 48 }; 49 50 private static final Image IMAGE_1 = new Image("javafx/scene/layout/red.png"); 51 private static final Image IMAGE_2 = new Image("javafx/scene/layout/blue.png"); 52 private static final Image IMAGE_3 = new Image("javafx/scene/layout/green.png"); 53 private static final Image IMAGE_4 = new Image("javafx/scene/layout/yellow.png"); 54 55 private static final BorderImage[] IMAGES_1 = new BorderImage[] { 56 new BorderImage(IMAGE_1, BorderWidths.DEFAULT, Insets.EMPTY, BorderWidths.EMPTY, false, SPACE, SPACE) 57 }; 58 59 private static final BorderImage[] IMAGES_2 = new BorderImage[] { 60 new BorderImage(IMAGE_2, new BorderWidths(3), new Insets(4), BorderWidths.EMPTY, false, REPEAT, REPEAT), 61 new BorderImage(IMAGE_3, new BorderWidths(6), new Insets(2), BorderWidths.EMPTY, false, SPACE, ROUND), 62 new BorderImage(IMAGE_4, new BorderWidths(3), Insets.EMPTY, new BorderWidths(3, 4, 5, 6), true, STRETCH, SPACE) 63 }; 64 65 @Test public void instanceCreation() { 66 Border b = new Border(STROKES_1, IMAGES_1); 67 assertEquals(STROKES_1.length, b.getStrokes().size(), 0); 68 assertEquals(STROKES_1[0], b.getStrokes().get(0)); 69 assertEquals(IMAGES_1.length, b.getImages().size(), 0); 70 assertEquals(IMAGES_1[0], b.getImages().get(0)); 71 } 72 73 @Test public void instanceCreation2() { 74 Border b = new Border(STROKES_2, IMAGES_2); 75 assertEquals(STROKES_2.length, b.getStrokes().size(), 0); 76 assertEquals(STROKES_2[0], b.getStrokes().get(0)); 77 assertEquals(STROKES_2[1], b.getStrokes().get(1)); 78 assertEquals(IMAGES_2.length, b.getImages().size(), 0); 79 assertEquals(IMAGES_2[0], b.getImages().get(0)); 80 assertEquals(IMAGES_2[1], b.getImages().get(1)); 81 assertEquals(IMAGES_2[2], b.getImages().get(2)); 82 } 83 84 @Test public void instanceCreationNullstrokes() { 85 Border b = new Border(null, IMAGES_1); 86 assertEquals(0, b.getStrokes().size(), 0); 87 assertEquals(IMAGES_1.length, b.getImages().size(), 0); 88 assertEquals(IMAGES_1[0], b.getImages().get(0)); 89 } 90 91 @Test public void instanceCreationEmptystrokes() { 92 Border b = new Border(new BorderStroke[0], IMAGES_1); 93 assertEquals(0, b.getStrokes().size(), 0); 94 assertEquals(IMAGES_1.length, b.getImages().size(), 0); 95 assertEquals(IMAGES_1[0], b.getImages().get(0)); 96 } 97 98 @Test public void instanceCreationNullImages() { 99 Border b = new Border(STROKES_1, null); 100 assertEquals(STROKES_1.length, b.getStrokes().size(), 0); 101 assertEquals(STROKES_1[0], b.getStrokes().get(0)); 102 assertEquals(0, b.getImages().size(), 0); 103 } 104 105 @Test public void instanceCreationEmptyImages() { 106 Border b = new Border(STROKES_1, new BorderImage[0]); 107 assertEquals(STROKES_1.length, b.getStrokes().size(), 0); 108 assertEquals(STROKES_1[0], b.getStrokes().get(0)); 109 assertEquals(0, b.getImages().size(), 0); 110 } 111 112 @Test public void instanceCreationWithNullsInTheFillArray() { 113 final BorderStroke[] strokes = new BorderStroke[] { 114 null, 115 new BorderStroke(Color.GREEN, BorderStrokeStyle.SOLID, new CornerRadii(3), new BorderWidths(4)), 116 new BorderStroke(Color.BLUE, BorderStrokeStyle.SOLID,new CornerRadii(6), new BorderWidths(8)), 117 }; 118 Border b = new Border(strokes, null); 119 assertEquals(2, b.getStrokes().size(), 0); 120 assertEquals(strokes[1], b.getStrokes().get(0)); 121 assertEquals(strokes[2], b.getStrokes().get(1)); 122 } 123 124 @Test public void instanceCreationWithNullsInTheFillArray2() { 125 final BorderStroke[] strokes = new BorderStroke[] { 126 new BorderStroke(Color.GREEN, BorderStrokeStyle.SOLID, new CornerRadii(3), new BorderWidths(4)), 127 null, 128 new BorderStroke(Color.BLUE, BorderStrokeStyle.SOLID,new CornerRadii(6), new BorderWidths(8)), 129 }; 130 Border b = new Border(strokes, null); 131 assertEquals(2, b.getStrokes().size(), 0); 132 assertEquals(strokes[0], b.getStrokes().get(0)); 133 assertEquals(strokes[2], b.getStrokes().get(1)); 134 } 135 136 @Test public void instanceCreationWithNullsInTheFillArray3() { 137 final BorderStroke[] strokes = new BorderStroke[] { 138 new BorderStroke(Color.GREEN, BorderStrokeStyle.SOLID, new CornerRadii(3), new BorderWidths(4)), 139 new BorderStroke(Color.BLUE, BorderStrokeStyle.SOLID, new CornerRadii(6), new BorderWidths(8)), 140 null 141 }; 142 Border b = new Border(strokes, null); 143 assertEquals(2, b.getStrokes().size(), 0); 144 assertEquals(strokes[0], b.getStrokes().get(0)); 145 assertEquals(strokes[1], b.getStrokes().get(1)); 146 } 147 148 @Test public void instanceCreationWithNullsInTheFillArray4() { 149 final BorderStroke[] strokes = new BorderStroke[] { 150 null 151 }; 152 Border b = new Border(strokes, null); 153 assertEquals(0, b.getStrokes().size(), 0); 154 } 155 156 @Test public void instanceCreationWithNullsInTheImageArray() { 157 final BorderImage[] images = new BorderImage[] { 158 null, 159 new BorderImage(IMAGE_2, new BorderWidths(3), new Insets(4), BorderWidths.EMPTY, false, REPEAT, REPEAT), 160 new BorderImage(IMAGE_3, new BorderWidths(6), new Insets(2), BorderWidths.EMPTY, false, SPACE, ROUND), 161 new BorderImage(IMAGE_4, new BorderWidths(3), Insets.EMPTY, new BorderWidths(3, 4, 5, 6), true, STRETCH, SPACE) 162 }; 163 Border b = new Border(null, images); 164 assertEquals(IMAGES_2.length, b.getImages().size(), 0); 165 assertEquals(IMAGES_2[0], b.getImages().get(0)); 166 assertEquals(IMAGES_2[1], b.getImages().get(1)); 167 assertEquals(IMAGES_2[2], b.getImages().get(2)); 168 } 169 170 @Test public void instanceCreationWithNullsInTheImageArray2() { 171 final BorderImage[] images = new BorderImage[] { 172 new BorderImage(IMAGE_2, new BorderWidths(3), new Insets(4), BorderWidths.EMPTY, false, REPEAT, REPEAT), 173 null, 174 new BorderImage(IMAGE_3, new BorderWidths(6), new Insets(2), BorderWidths.EMPTY, false, SPACE, ROUND), 175 new BorderImage(IMAGE_4, new BorderWidths(3), Insets.EMPTY, new BorderWidths(3, 4, 5, 6), true, STRETCH, SPACE) 176 }; 177 Border b = new Border(null, images); 178 assertEquals(IMAGES_2.length, b.getImages().size(), 0); 179 assertEquals(IMAGES_2[0], b.getImages().get(0)); 180 assertEquals(IMAGES_2[1], b.getImages().get(1)); 181 assertEquals(IMAGES_2[2], b.getImages().get(2)); 182 } 183 184 @Test public void instanceCreationWithNullsInTheImageArray3() { 185 final BorderImage[] images = new BorderImage[] { 186 new BorderImage(IMAGE_2, new BorderWidths(3), new Insets(4), BorderWidths.EMPTY, false, REPEAT, REPEAT), 187 new BorderImage(IMAGE_3, new BorderWidths(6), new Insets(2), BorderWidths.EMPTY, false, SPACE, ROUND), 188 new BorderImage(IMAGE_4, new BorderWidths(3), Insets.EMPTY, new BorderWidths(3, 4, 5, 6), true, STRETCH, SPACE), 189 null 190 }; 191 Border b = new Border(null, images); 192 assertEquals(IMAGES_2.length, b.getImages().size(), 0); 193 assertEquals(IMAGES_2[0], b.getImages().get(0)); 194 assertEquals(IMAGES_2[1], b.getImages().get(1)); 195 assertEquals(IMAGES_2[2], b.getImages().get(2)); 196 } 197 198 @Test public void instanceCreationWithNullsInTheImageArray4() { 199 final BorderImage[] images = new BorderImage[] { 200 null 201 }; 202 Border b = new Border(null, images); 203 assertEquals(0, b.getImages().size(), 0); 204 } 205 206 @Test public void suppliedBorderStrokesMutatedLaterDoNotChangeStrokes() { 207 final BorderStroke stroke = new BorderStroke(Color.GREEN, BorderStrokeStyle.SOLID, new CornerRadii(3), new BorderWidths(4)); 208 final BorderStroke[] strokes = new BorderStroke[] { stroke }; 209 Border b = new Border(strokes, null); 210 Border b2 = new Border(strokes); 211 strokes[0] = null; 212 assertEquals(1, b.getStrokes().size()); 213 assertEquals(1, b2.getStrokes().size()); 214 assertSame(stroke, b.getStrokes().get(0)); 215 assertSame(stroke, b2.getStrokes().get(0)); 216 } 217 218 @Test public void suppliedBorderImagesMutatedLaterDoNotChangeImages() { 219 final BorderImage image = new BorderImage(IMAGE_2, new BorderWidths(3), new Insets(4), 220 BorderWidths.EMPTY, false, REPEAT, REPEAT); 221 final BorderImage[] images = new BorderImage[] { image }; 222 Border b = new Border(null, images); 223 Border b2 = new Border(images); 224 images[0] = null; 225 assertEquals(1, b.getImages().size()); 226 assertEquals(1, b2.getImages().size()); 227 assertSame(image, b.getImages().get(0)); 228 assertSame(image, b2.getImages().get(0)); 229 } 230 231 @Test(expected = UnsupportedOperationException.class) 232 public void strokesIsUnmodifiable() { 233 final BorderStroke stroke = new BorderStroke(Color.GREEN, BorderStrokeStyle.SOLID, new CornerRadii(3), new BorderWidths(4)); 234 final BorderStroke[] strokes = new BorderStroke[] { stroke }; 235 Border b = new Border(strokes); 236 b.getStrokes().add(new BorderStroke(Color.BLUE, BorderStrokeStyle.SOLID, new CornerRadii(6), new BorderWidths(8))); 237 } 238 239 @Test(expected = UnsupportedOperationException.class) 240 public void imagesIsUnmodifiable() { 241 final BorderImage image = new BorderImage(IMAGE_2, new BorderWidths(3), new Insets(4), 242 BorderWidths.EMPTY, false, REPEAT, REPEAT); 243 final BorderImage[] images = new BorderImage[] { image }; 244 Border b = new Border(images); 245 b.getImages().add( 246 new BorderImage( 247 IMAGE_4, new BorderWidths(3), Insets.EMPTY, 248 new BorderWidths(3, 4, 5, 6), true, STRETCH, SPACE)); 249 } 250 251 @Test public void insetsAndOutsets_twoPixelOuterStroke() { 252 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.OUTSIDE, null, null, 0, 0, null); 253 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(2)); 254 Border border = new Border(new BorderStroke[] { stroke }, null); 255 // This is a 2 pixel solid stroke painted on the OUTSIDE. This means that the 256 // outsets should be 2 pixel. 257 assertEquals(new Insets(2), border.getOutsets()); 258 // The insets should be 0, because the stroke is on the OUTSIDE 259 assertEquals(new Insets(0), border.getInsets()); 260 } 261 262 @Test public void insetsAndOutsets_singlePixelOuterStroke() { 263 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.OUTSIDE, null, null, 0, 0, null); 264 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(1)); 265 Border border = new Border(new BorderStroke[] { stroke }, null); 266 // This is a 1 pixel solid stroke painted on the OUTSIDE. This means that the 267 // outsets should be 1 pixel. 268 assertEquals(new Insets(1), border.getOutsets()); 269 // The insets should be 0, because the stroke is on the OUTSIDE 270 assertEquals(new Insets(0), border.getInsets()); 271 } 272 273 @Test public void insetsAndOutsets_singlePixelCenteredStroke() { 274 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.CENTERED, null, null, 0, 0, null); 275 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(1)); 276 Border border = new Border(new BorderStroke[] { stroke }, null); 277 // This is a 1 pixel solid stroke painted CENTERED. This means that the 278 // outsets should be .5 pixel. 279 assertEquals(new Insets(.5), border.getOutsets()); 280 // The insets should be .5, because the stroke is CENTERED 281 assertEquals(new Insets(.5), border.getInsets()); 282 } 283 284 @Test public void insetsAndOutsets_singlePixelInnerStroke() { 285 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.INSIDE, null, null, 0, 0, null); 286 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(1)); 287 Border border = new Border(new BorderStroke[] { stroke }, null); 288 // This is a 1 pixel solid stroke painted on the INSIDE. This means that the 289 // outsets should be 0 pixel. 290 assertEquals(new Insets(0), border.getOutsets()); 291 // The insets should be 1, because the stroke is on the INSIDE 292 assertEquals(new Insets(1), border.getInsets()); 293 } 294 295 @Test public void insetsAndOutsets_twoPixelOuterStroke_PositiveInsets() { 296 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.OUTSIDE, null, null, 0, 0, null); 297 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(2), new Insets(1, 2, 3, 4)); 298 Border border = new Border(new BorderStroke[] { stroke }, null); 299 assertEquals(new Insets(1, 0, 0, 0), border.getOutsets()); 300 assertEquals(new Insets(1, 2, 3, 4), border.getInsets()); 301 } 302 303 @Test public void insetsAndOutsets_singlePixelOuterStroke_PositiveInsets() { 304 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.OUTSIDE, null, null, 0, 0, null); 305 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(1), new Insets(1, 2, 3, 4)); 306 Border border = new Border(new BorderStroke[] { stroke }, null); 307 assertEquals(new Insets(0), border.getOutsets()); 308 assertEquals(new Insets(1, 2, 3, 4), border.getInsets()); 309 } 310 311 @Test public void insetsAndOutsets_singlePixelCenteredStroke_PositiveInsets() { 312 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.CENTERED, null, null, 0, 0, null); 313 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(1), new Insets(1, 2, 3, 4)); 314 Border border = new Border(new BorderStroke[] { stroke }, null); 315 assertEquals(new Insets(0), border.getOutsets()); 316 assertEquals(new Insets(1.5, 2.5, 3.5, 4.5), border.getInsets()); 317 } 318 319 @Test public void insetsAndOutsets_singlePixelInnerStroke_PositiveInsets() { 320 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.INSIDE, null, null, 0, 0, null); 321 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(1), new Insets(1, 2, 3, 4)); 322 Border border = new Border(new BorderStroke[] { stroke }, null); 323 assertEquals(new Insets(0), border.getOutsets()); 324 assertEquals(new Insets(2, 3, 4, 5), border.getInsets()); 325 } 326 327 @Test public void insetsAndOutsets_twoPixelOuterStroke_NegativeInsets() { 328 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.OUTSIDE, null, null, 0, 0, null); 329 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(2), new Insets(-1, -2, -3, -4)); 330 Border border = new Border(new BorderStroke[] { stroke }, null); 331 assertEquals(new Insets(3, 4, 5, 6), border.getOutsets()); 332 assertEquals(new Insets(0), border.getInsets()); 333 } 334 335 @Test public void insetsAndOutsets_singlePixelOuterStroke_NegativeInsets() { 336 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.OUTSIDE, null, null, 0, 0, null); 337 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(1), new Insets(-1, -2, -3, -4)); 338 Border border = new Border(new BorderStroke[] { stroke }, null); 339 assertEquals(new Insets(2, 3, 4, 5), border.getOutsets()); 340 assertEquals(new Insets(0), border.getInsets()); 341 } 342 343 @Test public void insetsAndOutsets_singlePixelCenteredStroke_NegativeInsets() { 344 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.CENTERED, null, null, 0, 0, null); 345 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(1), new Insets(-1, -2, -3, -4)); 346 Border border = new Border(new BorderStroke[] { stroke }, null); 347 assertEquals(new Insets(1.5, 2.5, 3.5, 4.5), border.getOutsets()); 348 assertEquals(new Insets(0), border.getInsets()); 349 } 350 351 @Test public void insetsAndOutsets_singlePixelInnerStroke_NegativeInsets() { 352 BorderStrokeStyle style = new BorderStrokeStyle(StrokeType.INSIDE, null, null, 0, 0, null); 353 BorderStroke stroke = new BorderStroke(Color.ORANGE, style, new CornerRadii(5), new BorderWidths(1), new Insets(-1, -2, -3, -4)); 354 Border border = new Border(new BorderStroke[] { stroke }, null); 355 assertEquals(new Insets(1, 2, 3, 4), border.getOutsets()); 356 assertEquals(new Insets(0), border.getInsets()); 357 } 358 359 @Test public void insetsAndOutsets_singlePixelImageWidthNoInsets() { 360 BorderImage image = new BorderImage(IMAGE_1, new BorderWidths(1), new Insets(0), null, false, null, null); 361 Border border = new Border(null, new BorderImage[] { image }); 362 assertEquals(new Insets(0), border.getOutsets()); 363 assertEquals(new Insets(1), border.getInsets()); 364 } 365 366 @Test public void insetsAndOutsets_singlePixelImageWidthWithPositiveInsets() { 367 BorderImage image = new BorderImage(IMAGE_1, new BorderWidths(1), new Insets(10), null, false, null, null); 368 Border border = new Border(null, new BorderImage[] { image }); 369 assertEquals(new Insets(0), border.getOutsets()); 370 assertEquals(new Insets(11), border.getInsets()); 371 } 372 373 @Test public void insetsAndOutsets_singlePixelImageWidthWithNegativeInsets() { 374 BorderImage image = new BorderImage(IMAGE_1, new BorderWidths(1), new Insets(-10), null, false, null, null); 375 Border border = new Border(null, new BorderImage[] { image }); 376 assertEquals(new Insets(10), border.getOutsets()); 377 assertEquals(new Insets(0), border.getInsets()); 378 } 379 380 @Test public void insetsAndOutsets_triplePixelImageWidthWithNegativeInsets() { 381 BorderImage image = new BorderImage(IMAGE_1, new BorderWidths(3), new Insets(-1), null, false, null, null); 382 Border border = new Border(null, new BorderImage[] { image }); 383 assertEquals(new Insets(1), border.getOutsets()); 384 assertEquals(new Insets(2), border.getInsets()); 385 } 386 387 @Test public void equivalent() { 388 Border a = new Border((BorderStroke[])null, null); 389 Border b = new Border((BorderStroke[])null, null); 390 assertEquals(a, b); 391 } 392 393 @Test public void equivalent2() { 394 Border a = new Border(STROKES_2, null); 395 Border b = new Border(STROKES_2, null); 396 assertEquals(a, b); 397 } 398 399 @Test public void equivalent2b() { 400 final BorderStroke[] strokes = new BorderStroke[] { 401 new BorderStroke(Color.GREEN, BorderStrokeStyle.DASHED, new CornerRadii(3), new BorderWidths(4)), 402 new BorderStroke(Color.BLUE, BorderStrokeStyle.DOTTED, new CornerRadii(6), new BorderWidths(8)) 403 }; 404 405 Border a = new Border(STROKES_2, null); 406 Border b = new Border(strokes, null); 407 408 assertEquals(a, b); 409 } 410 411 @Test public void equivalent2c() { 412 final BorderStroke[] strokes = new BorderStroke[] { 413 new BorderStroke(Color.GREEN, BorderStrokeStyle.DASHED, new CornerRadii(3), new BorderWidths(4)), 414 new BorderStroke(Color.BLUE, BorderStrokeStyle.DOTTED, new CornerRadii(6), new BorderWidths(8)) 415 }; 416 Border a = new Border(STROKES_2, null); 417 Border b = new Border(strokes, null); 418 assertEquals(a, b); 419 } 420 421 @Test public void equivalent3() { 422 Border a = new Border(null, IMAGES_2); 423 Border b = new Border(null, IMAGES_2); 424 assertEquals(a, b); 425 } 426 427 @Test public void equivalent3b() { 428 final BorderImage[] images = new BorderImage[] { 429 new BorderImage(IMAGE_2, new BorderWidths(3), new Insets(4), BorderWidths.EMPTY, false, REPEAT, REPEAT), 430 new BorderImage(IMAGE_3, new BorderWidths(6), new Insets(2), BorderWidths.EMPTY, false, SPACE, ROUND), 431 new BorderImage(IMAGE_4, new BorderWidths(3), Insets.EMPTY, new BorderWidths(3, 4, 5, 6), true, STRETCH, SPACE) 432 }; 433 Border a = new Border(null, images); 434 Border b = new Border(null, IMAGES_2); 435 assertEquals(a, b); 436 } 437 438 @Test public void equivalent3c() { 439 final BorderImage[] images = new BorderImage[] { 440 new BorderImage(IMAGE_2, new BorderWidths(3), new Insets(4), BorderWidths.EMPTY, false, REPEAT, REPEAT), 441 new BorderImage(IMAGE_3, new BorderWidths(6), new Insets(2), BorderWidths.EMPTY, false, SPACE, ROUND), 442 new BorderImage(IMAGE_4, new BorderWidths(3), Insets.EMPTY, new BorderWidths(3, 4, 5, 6), true, STRETCH, SPACE) 443 }; 444 Border a = new Border(null, images); 445 Border b = new Border(null, IMAGES_2); 446 assertEquals(a, b); 447 } 448 449 @Test public void equivalentWithSelf() { 450 Border a = new Border(null, IMAGES_2); 451 assertTrue(a.equals(a)); 452 } 453 454 @Test public void equivalentHasSameHashCode() { 455 Border a = new Border((BorderStroke[])null, null); 456 Border b = new Border((BorderStroke[])null, null); 457 assertEquals(a.hashCode(), b.hashCode()); 458 } 459 460 @Test public void equivalentHasSameHashCode2() { 461 Border a = new Border(STROKES_2, null); 462 Border b = new Border(STROKES_2, null); 463 assertEquals(a.hashCode(), b.hashCode()); 464 } 465 466 @Test public void equivalentHasSameHashCode3() { 467 Border a = new Border(null, IMAGES_2); 468 Border b = new Border(null, IMAGES_2); 469 assertEquals(a.hashCode(), b.hashCode()); 470 } 471 472 @Test public void equivalentWithSelfHashCode() { 473 Border a = new Border(null, IMAGES_2); 474 assertEquals(a.hashCode(), a.hashCode()); 475 } 476 477 @Test public void notEqual() { 478 Border a = new Border(STROKES_1, null); 479 Border b = new Border((BorderStroke[])null, null); 480 assertFalse(a.equals(b)); 481 } 482 483 @Test public void notEqual2() { 484 Border a = new Border((BorderStroke[])null, null); 485 Border b = new Border(STROKES_2, null); 486 assertFalse(a.equals(b)); 487 } 488 489 @Test public void notEqual3() { 490 Border a = new Border(null, IMAGES_1); 491 Border b = new Border((BorderStroke[])null, null); 492 assertFalse(a.equals(b)); 493 } 494 495 @Test public void notEqual4() { 496 Border a = new Border((BorderStroke[])null, null); 497 Border b = new Border(null, IMAGES_2); 498 assertFalse(a.equals(b)); 499 } 500 501 @Test public void notEqual5() { 502 Border a = new Border(null, IMAGES_1); 503 Border b = new Border(null, IMAGES_2); 504 assertFalse(a.equals(b)); 505 } 506 507 @Test public void notEqual6() { 508 Border a = new Border(STROKES_1, null); 509 Border b = new Border(STROKES_2, null); 510 assertFalse(a.equals(b)); 511 } 512 513 @Test public void notEqualButHaveSameHashCode() { 514 Border a = new Border(STROKES_1, null); 515 Border b = new Border(STROKES_2, null); 516 // Because Border is final, the only way to test this 517 // appropriately is to use reflection to set the hash 518 try { 519 Field f = Border.class.getDeclaredField("hash"); 520 f.setAccessible(true); 521 f.set(a, 100); 522 f.set(b, 100); 523 } catch (Exception e) { 524 e.printStackTrace(); 525 throw new AssertionError("Failed to reflectively set the hash value"); 526 } 527 528 assertFalse(a.equals(b)); 529 } 530 531 @Test public void notEqualButHaveSameHashCode2() { 532 Border a = new Border(null, IMAGES_1); 533 Border b = new Border(null, IMAGES_2); 534 // Because Border is final, the only way to test this 535 // appropriately is to use reflection to set the hash 536 try { 537 Field f = Border.class.getDeclaredField("hash"); 538 f.setAccessible(true); 539 f.set(a, 100); 540 f.set(b, 100); 541 } catch (Exception e) { 542 e.printStackTrace(); 543 throw new AssertionError("Failed to reflectively set the hash value"); 544 } 545 546 assertFalse(a.equals(b)); 547 } 548 549 @Test public void notEqualWithNull() { 550 Border a = new Border((BorderStroke[])null, null); 551 assertFalse(a.equals(null)); 552 } 553 554 @Test public void notEqualWithRandom() { 555 Border a = new Border((BorderStroke[])null, null); 556 assertFalse(a.equals("Some random String")); 557 } 558 }