1 /* 2 * Copyright (c) 2011, 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 javafx.geometry.Insets; 29 import static org.junit.Assert.*; 30 import javafx.geometry.Orientation; 31 import org.junit.Before; 32 import org.junit.Ignore; 33 34 import org.junit.Test; 35 36 37 public class BorderPaneTest { 38 39 BorderPane borderpane; 40 41 @Before public void setUp() { 42 this.borderpane = new BorderPane(); 43 } 44 45 @Test public void testEmptyBorderPane() { 46 assertNull(borderpane.getTop()); 47 assertNull(borderpane.getCenter()); 48 assertNull(borderpane.getBottom()); 49 assertNull(borderpane.getLeft()); 50 assertNull(borderpane.getRight()); 51 } 52 53 @Test public void testChildrenRemovedDirectly() { 54 MockResizable node = new MockResizable(10,20, 100,200, 700,800); 55 56 borderpane.setCenter(node); 57 assertSame(node, borderpane.getCenter()); 58 assertNull(borderpane.getLeft()); 59 assertNull(borderpane.getRight()); 60 assertNull(borderpane.getBottom()); 61 assertNull(borderpane.getTop()); 62 63 borderpane.autosize(); 64 borderpane.layout(); 65 assertEquals(0, node.getLayoutX(), 1e-100); 66 assertEquals(0, node.getLayoutY(), 1e-100); 67 assertEquals(100, node.getWidth(), 1e-100); 68 assertEquals(200, node.getHeight(), 1e-100); 69 70 borderpane.getChildren().remove(node); 71 assertNull(borderpane.getCenter()); 72 73 borderpane.setLeft(node); 74 assertNull(borderpane.getCenter()); 75 assertSame(node, borderpane.getLeft()); 76 assertNull(borderpane.getRight()); 77 assertNull(borderpane.getBottom()); 78 assertNull(borderpane.getTop()); 79 80 borderpane.autosize(); 81 borderpane.layout(); 82 assertEquals(0, node.getLayoutX(), 1e-100); 83 assertEquals(0, node.getLayoutY(), 1e-100); 84 assertEquals(100, node.getWidth(), 1e-100); 85 assertEquals(200, node.getHeight(), 1e-100); 86 87 borderpane.getChildren().remove(node); 88 assertNull(borderpane.getLeft()); 89 90 borderpane.setRight(node); 91 assertNull(borderpane.getCenter()); 92 assertNull(borderpane.getLeft()); 93 assertSame(node, borderpane.getRight()); 94 assertNull(borderpane.getBottom()); 95 assertNull(borderpane.getTop()); 96 97 borderpane.autosize(); 98 borderpane.layout(); 99 assertEquals(0, node.getLayoutX(), 1e-100); 100 assertEquals(0, node.getLayoutY(), 1e-100); 101 assertEquals(100, node.getWidth(), 1e-100); 102 assertEquals(200, node.getHeight(), 1e-100); 103 104 borderpane.getChildren().remove(node); 105 assertNull(borderpane.getRight()); 106 107 borderpane.setBottom(node); 108 assertNull(borderpane.getCenter()); 109 assertNull(borderpane.getLeft()); 110 assertNull(borderpane.getRight()); 111 assertSame(node, borderpane.getBottom()); 112 assertNull(borderpane.getTop()); 113 114 borderpane.autosize(); 115 borderpane.layout(); 116 assertEquals(0, node.getLayoutX(), 1e-100); 117 assertEquals(0, node.getLayoutY(), 1e-100); 118 assertEquals(100, node.getWidth(), 1e-100); 119 assertEquals(200, node.getHeight(), 1e-100); 120 121 borderpane.getChildren().remove(node); 122 assertNull(borderpane.getBottom()); 123 124 borderpane.setTop(node); 125 assertNull(borderpane.getCenter()); 126 assertNull(borderpane.getLeft()); 127 assertNull(borderpane.getRight()); 128 assertNull(borderpane.getBottom()); 129 assertSame(node, borderpane.getTop()); 130 131 borderpane.autosize(); 132 borderpane.layout(); 133 assertEquals(0, node.getLayoutX(), 1e-100); 134 assertEquals(0, node.getLayoutY(), 1e-100); 135 assertEquals(100, node.getWidth(), 1e-100); 136 assertEquals(200, node.getHeight(), 1e-100); 137 138 borderpane.getChildren().remove(node); 139 assertNull(borderpane.getTop()); 140 141 } 142 143 @Test public void testCenterChildOnly() { 144 MockResizable center = new MockResizable(10,20, 100,200, 700,800); 145 borderpane.setCenter(center); 146 147 assertEquals(center, borderpane.getCenter()); 148 assertEquals(1, borderpane.getChildren().size()); 149 assertEquals(center, borderpane.getChildren().get(0)); 150 assertEquals(10, borderpane.minWidth(-1), 1e-100); 151 assertEquals(20, borderpane.minHeight(-1), 1e-100); 152 assertEquals(100, borderpane.prefWidth(-1), 1e-100); 153 assertEquals(200, borderpane.prefHeight(-1), 1e-100); 154 assertEquals(Double.MAX_VALUE, borderpane.maxWidth(-1), 1e-100); 155 assertEquals(Double.MAX_VALUE, borderpane.maxHeight(-1), 1e-100); 156 157 borderpane.autosize(); 158 borderpane.layout(); 159 assertEquals(0, center.getLayoutX(), 1e-100); 160 assertEquals(0, center.getLayoutY(), 1e-100); 161 assertEquals(100, center.getWidth(), 1e-100); 162 assertEquals(200, center.getHeight(), 1e-100); 163 164 } 165 166 @Test public void testTopChildOnly() { 167 MockResizable top = new MockResizable(10,20, 100,200, 700,800); 168 borderpane.setTop(top); 169 170 assertEquals(top, borderpane.getTop()); 171 assertEquals(1, borderpane.getChildren().size()); 172 assertEquals(top, borderpane.getChildren().get(0)); 173 assertEquals(10, borderpane.minWidth(-1), 1e-100); 174 assertEquals(200, borderpane.minHeight(-1), 1e-100); // Top is always at it's pref height 175 assertEquals(100, borderpane.prefWidth(-1), 1e-100); 176 assertEquals(200, borderpane.prefHeight(-1), 1e-100); 177 assertEquals(Double.MAX_VALUE, borderpane.maxWidth(-1), 1e-100); 178 assertEquals(Double.MAX_VALUE, borderpane.maxHeight(-1), 1e-100); 179 180 borderpane.autosize(); 181 borderpane.layout(); 182 assertEquals(0, top.getLayoutX(), 1e-100); 183 assertEquals(0, top.getLayoutY(), 1e-100); 184 assertEquals(100, top.getWidth(), 1e-100); 185 assertEquals(200, top.getHeight(), 1e-100); 186 } 187 188 @Test public void testBottomChildOnly() { 189 MockResizable bottom = new MockResizable(10,20, 100,200, 700,800); 190 borderpane.setBottom(bottom); 191 192 assertEquals(bottom, borderpane.getBottom()); 193 assertEquals(1, borderpane.getChildren().size()); 194 assertEquals(bottom, borderpane.getChildren().get(0)); 195 assertEquals(10, borderpane.minWidth(-1), 1e-100); 196 assertEquals(200, borderpane.minHeight(-1), 1e-100); // Bottom is always at it's pref height 197 assertEquals(100, borderpane.prefWidth(-1), 1e-100); 198 assertEquals(200, borderpane.prefHeight(-1), 1e-100); 199 assertEquals(Double.MAX_VALUE, borderpane.maxWidth(-1), 1e-100); 200 assertEquals(Double.MAX_VALUE, borderpane.maxHeight(-1), 1e-100); 201 202 borderpane.autosize(); 203 borderpane.layout(); 204 assertEquals(0, bottom.getLayoutX(), 1e-100); 205 assertEquals(0, bottom.getLayoutY(), 1e-100); 206 assertEquals(100, bottom.getWidth(), 1e-100); 207 assertEquals(200, bottom.getHeight(), 1e-100); 208 } 209 210 @Test public void testRightChildOnly() { 211 MockResizable right = new MockResizable(10,20, 100,200, 700,800); 212 borderpane.setRight(right); 213 214 assertEquals(right, borderpane.getRight()); 215 assertEquals(1, borderpane.getChildren().size()); 216 assertEquals(right, borderpane.getChildren().get(0)); 217 assertEquals(100, borderpane.minWidth(-1), 1e-100); 218 assertEquals(20, borderpane.minHeight(-1), 1e-100); 219 assertEquals(100, borderpane.prefWidth(-1), 1e-100); 220 assertEquals(200, borderpane.prefHeight(-1), 1e-100); 221 assertEquals(Double.MAX_VALUE, borderpane.maxWidth(-1), 1e-100); 222 assertEquals(Double.MAX_VALUE, borderpane.maxHeight(-1), 1e-100); 223 224 borderpane.autosize(); 225 borderpane.layout(); 226 assertEquals(0, right.getLayoutX(), 1e-100); 227 assertEquals(0, right.getLayoutY(), 1e-100); 228 assertEquals(100, right.getWidth(), 1e-100); 229 assertEquals(200, right.getHeight(), 1e-100); 230 } 231 232 @Test public void testLeftChildOnly() { 233 MockResizable left = new MockResizable(10,20, 100,200, 700,800); 234 borderpane.setLeft(left); 235 236 assertEquals(left, borderpane.getLeft()); 237 assertEquals(1, borderpane.getChildren().size()); 238 assertEquals(left, borderpane.getChildren().get(0)); 239 assertEquals(100, borderpane.minWidth(-1), 1e-100); 240 assertEquals(20, borderpane.minHeight(-1), 1e-100); 241 assertEquals(100, borderpane.prefWidth(-1), 1e-100); 242 assertEquals(200, borderpane.prefHeight(-1), 1e-100); 243 assertEquals(Double.MAX_VALUE, borderpane.maxWidth(-1), 1e-100); 244 assertEquals(Double.MAX_VALUE, borderpane.maxHeight(-1), 1e-100); 245 246 borderpane.autosize(); 247 borderpane.layout(); 248 assertEquals(0, left.getLayoutX(), 1e-100); 249 assertEquals(0, left.getLayoutY(), 1e-100); 250 assertEquals(100, left.getWidth(), 1e-100); 251 assertEquals(200, left.getHeight(), 1e-100); 252 } 253 254 @Test public void testChildrenInAllPositions() { 255 MockResizable center = new MockResizable(10,20, 100,200, 1000,1000); 256 borderpane.setCenter(center); 257 MockResizable top = new MockResizable(100,10, 200, 20, 1000,1000); 258 borderpane.setTop(top); 259 MockResizable bottom = new MockResizable(80,8, 220,22, 1000,1000); 260 borderpane.setBottom(bottom); 261 MockResizable left = new MockResizable(10,100, 15,150, 1000,1000); 262 borderpane.setLeft(left); 263 MockResizable right = new MockResizable(50,115, 60,120, 1000,1000); 264 borderpane.setRight(right); 265 266 assertEquals(5, borderpane.getChildren().size()); 267 assertEquals(center, borderpane.getCenter()); 268 assertEquals(top, borderpane.getTop()); 269 assertEquals(bottom, borderpane.getBottom()); 270 assertEquals(left, borderpane.getLeft()); 271 assertEquals(right, borderpane.getRight()); 272 assertTrue(borderpane.getChildren().contains(center)); 273 assertTrue(borderpane.getChildren().contains(top)); 274 assertTrue(borderpane.getChildren().contains(bottom)); 275 assertTrue(borderpane.getChildren().contains(left)); 276 assertTrue(borderpane.getChildren().contains(right)); 277 278 assertEquals(100, borderpane.minWidth(-1), 1e-100); 279 assertEquals(top.prefHeight(-1) + bottom.prefHeight(-1) + 280 Math.max(center.minHeight(-1), Math.max(left.minHeight(-1), right.minHeight(-1))), 281 borderpane.minHeight(-1), 1e-100); 282 assertEquals(220, borderpane.prefWidth(-1), 1e-100); 283 assertEquals(242, borderpane.prefHeight(-1), 1e-100); 284 assertEquals(Double.MAX_VALUE, borderpane.maxWidth(-1), 1e-100); 285 assertEquals(Double.MAX_VALUE, borderpane.maxHeight(-1), 1e-100); 286 287 borderpane.autosize(); 288 borderpane.layout(); 289 assertEquals(0, top.getLayoutX(), 1e-100); 290 assertEquals(0, top.getLayoutY(), 1e-100); 291 assertEquals(220, top.getWidth(), 1e-100); 292 assertEquals(20, top.getHeight(), 1e-100); 293 294 assertEquals(0, left.getLayoutX(), 1e-100); 295 assertEquals(20, left.getLayoutY(), 1e-100); 296 assertEquals(15, left.getWidth(), 1e-100); 297 assertEquals(200, left.getHeight(), 1e-100); 298 299 assertEquals(15, center.getLayoutX(), 1e-100); 300 assertEquals(20, center.getLayoutY(), 1e-100); 301 assertEquals(145, center.getWidth(), 1e-100); 302 assertEquals(200, center.getHeight(), 1e-100); 303 304 assertEquals(160, right.getLayoutX(), 1e-100); 305 assertEquals(20, right.getLayoutY(), 1e-100); 306 assertEquals(60, right.getWidth(), 1e-100); 307 assertEquals(200, right.getHeight(), 1e-100); 308 309 assertEquals(0, bottom.getLayoutX(), 1e-100); 310 assertEquals(220, bottom.getLayoutY(), 1e-100); 311 assertEquals(220, bottom.getWidth(), 1e-100); 312 assertEquals(22, bottom.getHeight(), 1e-100); 313 314 } 315 316 @Test public void testWithBiasedChildren() { 317 MockBiased top = new MockBiased(Orientation.HORIZONTAL, 100, 20); // 300 x 6.666 318 borderpane.setTop(top); 319 320 MockBiased left = new MockBiased(Orientation.VERTICAL, 40, 100); // 20 x 200 321 borderpane.setLeft(left); 322 323 MockBiased center = new MockBiased(Orientation.HORIZONTAL, 200, 200); 324 borderpane.setCenter(center); 325 326 MockBiased right = new MockBiased(Orientation.VERTICAL, 60, 200); // 60 x 200 327 borderpane.setRight(right); 328 329 MockBiased bottom = new MockBiased(Orientation.HORIZONTAL, 200, 20); // 300 x 13.333 330 borderpane.setBottom(bottom); 331 332 assertEquals(40/*l*/ + 60/*r*/ + 200/*c*/, borderpane.prefWidth(-1), 1e-100); 333 assertEquals(240 /* l + r + c*/, borderpane.prefHeight(-1), 1e-10); 334 assertEquals(110, borderpane.minWidth(-1), 1e-100); /* min center + 2x pref width (l, r) */ 335 assertEquals(50, borderpane.minHeight(-1), 1e-10); 336 assertEquals(110, borderpane.minWidth(240), 1e-100); 337 assertEquals(221, borderpane.minHeight(300), 1e-10); 338 339 borderpane.resize(300, 240); 340 borderpane.layout(); 341 342 assertEquals(0, top.getLayoutX(), 1e-100); 343 assertEquals(0, top.getLayoutY(), 1e-100); 344 assertEquals(300, top.getWidth(), 1e-100); 345 assertEquals(7, top.getHeight(), 1e-100); 346 347 assertEquals(0, bottom.getLayoutX(), 1e-100); 348 assertEquals(226, bottom.getLayoutY(), 1e-100); 349 assertEquals(300, bottom.getWidth(), 1e-100); 350 assertEquals(14, bottom.getHeight(), 1e-100); 351 352 assertEquals(0, left.getLayoutX(), 1e-100); 353 assertEquals(7, left.getLayoutY(), 1e-100); 354 assertEquals(240 - 14 - 7, left.getHeight(), 1e-100); 355 final double leftWidth = Math.ceil(40*100.0/(240 - 14 - 7)); 356 assertEquals(leftWidth, left.getWidth(), 1e-100); 357 358 assertEquals(7, right.getLayoutY(), 1e-100); 359 assertEquals(240 - 14 - 7, right.getHeight(), 1e-100); 360 final double rightWidth = Math.ceil(60*200.0/(240 - 14 - 7)); 361 assertEquals(rightWidth, right.getWidth(), 1e-100); 362 assertEquals(300 - rightWidth, right.getLayoutX(), 1e-100); 363 364 // Center is HORIZONTALLY biased, so when width is stretched, height is lower 365 double centerWidth = 300 - leftWidth - rightWidth; 366 double centerHeight = Math.ceil(200 * 200 / centerWidth); 367 368 assertEquals(19, center.getLayoutX(), 1e-100); 369 // center alignment, Math.round == snapPosition 370 assertEquals(Math.round(7 + (240 - 7 - 14 - centerHeight) / 2), center.getLayoutY(), 1e-100); 371 assertEquals(centerWidth, center.getWidth(), 1e-100); 372 assertEquals(centerHeight, center.getHeight(), 1e-100); 373 374 } 375 376 @Test public void testWithHorizontalBiasedChildrenAtPrefSize() { 377 MockResizable top = new MockResizable(400, 100); 378 borderpane.setTop(top); 379 380 MockResizable left = new MockResizable(100, 100); 381 borderpane.setLeft(left); 382 383 MockBiased center = new MockBiased(Orientation.HORIZONTAL, 200, 100); 384 borderpane.setCenter(center); 385 386 MockResizable right = new MockResizable(100, 100); 387 borderpane.setRight(right); 388 389 MockResizable bottom = new MockResizable(400, 100); 390 borderpane.setBottom(bottom); 391 392 assertEquals(Orientation.HORIZONTAL, borderpane.getContentBias()); 393 assertEquals(400, borderpane.prefWidth(-1), 1e-200); 394 assertEquals(300, borderpane.prefHeight(-1), 1e-200); 395 396 borderpane.autosize(); 397 borderpane.layout(); 398 399 assertEquals(0, top.getLayoutX(), 1e-200); 400 assertEquals(0, top.getLayoutY(), 1e-200); 401 assertEquals(400, top.getLayoutBounds().getWidth(), 1e-200); 402 assertEquals(100, top.getLayoutBounds().getHeight(), 1e-200); 403 404 assertEquals(0, left.getLayoutX(), 1e-200); 405 assertEquals(100, left.getLayoutY(), 1e-200); 406 assertEquals(100, left.getLayoutBounds().getWidth(), 1e-200); 407 assertEquals(100, left.getLayoutBounds().getHeight(), 1e-200); 408 409 assertEquals(100, center.getLayoutX(), 1e-200); 410 assertEquals(100, center.getLayoutY(), 1e-200); 411 assertEquals(200, center.getLayoutBounds().getWidth(), 1e-200); 412 assertEquals(100, center.getLayoutBounds().getHeight(), 1e-200); 413 414 assertEquals(300, right.getLayoutX(), 1e-200); 415 assertEquals(100, right.getLayoutY(), 1e-200); 416 assertEquals(100, right.getLayoutBounds().getWidth(), 1e-200); 417 assertEquals(100, right.getLayoutBounds().getHeight(), 1e-200); 418 419 assertEquals(0, bottom.getLayoutX(), 1e-200); 420 assertEquals(200, bottom.getLayoutY(), 1e-200); 421 assertEquals(400, bottom.getLayoutBounds().getWidth(), 1e-200); 422 assertEquals(100, bottom.getLayoutBounds().getHeight(), 1e-200); 423 } 424 425 @Test public void testWithHorizontalBiasedChildrenGrowing() { 426 MockBiased top = new MockBiased(Orientation.HORIZONTAL, 200, 100); 427 borderpane.setTop(top); 428 429 MockResizable left = new MockResizable(100, 100); 430 borderpane.setLeft(left); 431 432 MockBiased center = new MockBiased(Orientation.HORIZONTAL, 200, 100); 433 borderpane.setCenter(center); 434 435 MockResizable right = new MockResizable(100, 100); 436 borderpane.setRight(right); 437 438 MockResizable bottom = new MockResizable(400, 100); 439 borderpane.setBottom(bottom); 440 441 assertEquals(240, borderpane.prefHeight(500), 1e-200); 442 borderpane.resize(500, 240); 443 borderpane.layout(); 444 445 assertEquals(0, top.getLayoutX(), 1e-200); 446 assertEquals(0, top.getLayoutY(), 1e-200); 447 assertEquals(500, top.getLayoutBounds().getWidth(), 1e-200); 448 assertEquals(40, top.getLayoutBounds().getHeight(), 1e-200); 449 450 assertEquals(0, left.getLayoutX(), 1e-200); 451 assertEquals(40, left.getLayoutY(), 1e-200); 452 assertEquals(100, left.getLayoutBounds().getWidth(), 1e-200); 453 assertEquals(100, left.getLayoutBounds().getHeight(), 1e-200); 454 455 assertEquals(100, center.getLayoutX(), 1e-200); 456 // 57 because the default alignment is Pos.CENTER 457 assertEquals(57, center.getLayoutY(), 1e-200); 458 assertEquals(300, center.getLayoutBounds().getWidth(), 1e-200); 459 assertEquals(67, center.getLayoutBounds().getHeight(), 1e-200); 460 461 assertEquals(400, right.getLayoutX(), 1e-200); 462 assertEquals(40, right.getLayoutY(), 1e-200); 463 assertEquals(100, right.getLayoutBounds().getWidth(), 1e-200); 464 assertEquals(100, right.getLayoutBounds().getHeight(), 1e-200); 465 466 assertEquals(0, bottom.getLayoutX(), 1e-200); 467 assertEquals(140, bottom.getLayoutY(), 1e-200); 468 assertEquals(500, bottom.getLayoutBounds().getWidth(), 1e-200); 469 assertEquals(100, bottom.getLayoutBounds().getHeight(), 1e-200); 470 } 471 472 @Test public void testWithHorizontalBiasedChildrenShrinking() { 473 MockBiased top = new MockBiased(Orientation.HORIZONTAL, 200, 100); 474 borderpane.setTop(top); 475 476 MockResizable left = new MockResizable(100, 100); 477 borderpane.setLeft(left); 478 479 MockBiased center = new MockBiased(Orientation.HORIZONTAL, 200, 100); 480 borderpane.setCenter(center); 481 482 MockResizable right = new MockResizable(100, 100); 483 borderpane.setRight(right); 484 485 MockResizable bottom = new MockResizable(400, 100); 486 borderpane.setBottom(bottom); 487 488 assertEquals(367, borderpane.prefHeight(300), 1e-200); 489 borderpane.resize(300, 367); 490 borderpane.layout(); 491 492 assertEquals(0, top.getLayoutX(), 1e-200); 493 assertEquals(0, top.getLayoutY(), 1e-200); 494 assertEquals(300, top.getLayoutBounds().getWidth(), 1e-200); 495 assertEquals(67, top.getLayoutBounds().getHeight(), 1e-200); 496 497 assertEquals(0, left.getLayoutX(), 1e-200); 498 assertEquals(67, left.getLayoutY(), 1e-200); 499 assertEquals(100, left.getLayoutBounds().getWidth(), 1e-200); 500 assertEquals(200, left.getLayoutBounds().getHeight(), 1e-200); 501 502 assertEquals(100, center.getLayoutX(), 1e-200); 503 assertEquals(67, center.getLayoutY(), 1e-200); 504 assertEquals(100, center.getLayoutBounds().getWidth(), 1e-200); 505 assertEquals(200, center.getLayoutBounds().getHeight(), 1e-200); 506 507 assertEquals(200, right.getLayoutX(), 1e-200); 508 assertEquals(67, right.getLayoutY(), 1e-200); 509 assertEquals(100, right.getLayoutBounds().getWidth(), 1e-200); 510 assertEquals(200, right.getLayoutBounds().getHeight(), 1e-200); 511 512 assertEquals(0, bottom.getLayoutX(), 1e-200); 513 assertEquals(267, bottom.getLayoutY(), 1e-200); 514 assertEquals(300, bottom.getLayoutBounds().getWidth(), 1e-200); 515 assertEquals(100, bottom.getLayoutBounds().getHeight(), 1e-200); 516 } 517 518 @Test public void testWithVerticalBiasedChildrenAtPrefSize() { 519 MockResizable top = new MockResizable(400, 100); 520 borderpane.setTop(top); 521 522 MockResizable left = new MockResizable(100, 100); 523 borderpane.setLeft(left); 524 525 MockBiased center = new MockBiased(Orientation.VERTICAL, 200, 100); 526 borderpane.setCenter(center); 527 528 MockResizable right = new MockResizable(100, 100); 529 borderpane.setRight(right); 530 531 MockResizable bottom = new MockResizable(400, 100); 532 borderpane.setBottom(bottom); 533 534 assertEquals(Orientation.VERTICAL, borderpane.getContentBias()); 535 assertEquals(400, borderpane.prefWidth(-1), 1e-200); 536 assertEquals(300, borderpane.prefHeight(-1), 1e-200); 537 538 borderpane.autosize(); 539 borderpane.layout(); 540 541 assertEquals(0, top.getLayoutX(), 1e-200); 542 assertEquals(0, top.getLayoutY(), 1e-200); 543 assertEquals(400, top.getLayoutBounds().getWidth(), 1e-200); 544 assertEquals(100, top.getLayoutBounds().getHeight(), 1e-200); 545 546 assertEquals(0, left.getLayoutX(), 1e-200); 547 assertEquals(100, left.getLayoutY(), 1e-200); 548 assertEquals(100, left.getLayoutBounds().getWidth(), 1e-200); 549 assertEquals(100, left.getLayoutBounds().getHeight(), 1e-200); 550 551 assertEquals(100, center.getLayoutX(), 1e-200); 552 assertEquals(100, center.getLayoutY(), 1e-200); 553 assertEquals(200, center.getLayoutBounds().getWidth(), 1e-200); 554 assertEquals(100, center.getLayoutBounds().getHeight(), 1e-200); 555 556 assertEquals(300, right.getLayoutX(), 1e-200); 557 assertEquals(100, right.getLayoutY(), 1e-200); 558 assertEquals(100, right.getLayoutBounds().getWidth(), 1e-200); 559 assertEquals(100, right.getLayoutBounds().getHeight(), 1e-200); 560 561 assertEquals(0, bottom.getLayoutX(), 1e-200); 562 assertEquals(200, bottom.getLayoutY(), 1e-200); 563 assertEquals(400, bottom.getLayoutBounds().getWidth(), 1e-200); 564 assertEquals(100, bottom.getLayoutBounds().getHeight(), 1e-200); 565 } 566 567 @Test public void testWithVerticalBiasedChildrenGrowing() { 568 MockBiased top = new MockBiased(Orientation.VERTICAL, 200, 100); 569 borderpane.setTop(top); 570 571 MockResizable left = new MockResizable(100, 100); 572 borderpane.setLeft(left); 573 574 MockBiased center = new MockBiased(Orientation.VERTICAL, 200, 100); 575 borderpane.setCenter(center); 576 577 MockResizable right = new MockResizable(100, 100); 578 borderpane.setRight(right); 579 580 MockResizable bottom = new MockResizable(400, 100); 581 borderpane.setBottom(bottom); 582 583 assertEquals(400, borderpane.prefWidth(500), 1e-200); 584 borderpane.resize(400, 500); 585 borderpane.layout(); 586 587 assertEquals(0, top.getLayoutX(), 1e-200); 588 assertEquals(0, top.getLayoutY(), 1e-200); 589 assertEquals(200, top.getLayoutBounds().getWidth(), 1e-200); 590 assertEquals(100, top.getLayoutBounds().getHeight(), 1e-200); 591 592 assertEquals(0, left.getLayoutX(), 1e-200); 593 assertEquals(100, left.getLayoutY(), 1e-200); 594 assertEquals(100, left.getLayoutBounds().getWidth(), 1e-200); 595 assertEquals(300, left.getLayoutBounds().getHeight(), 1e-200); // 500 - 100(top) - 100 (bottom) 596 597 // not growing to max width, because the bias is vertical (pref width depends on height) and 598 // the default alignment is Pos.CENTER 599 double centerWidth = Math.round((200 * 100) /*original area*/ / 300.0) /*new height*/; 600 assertEquals(100 /*x position == left width*/ + centerWidth, 601 center.getLayoutX(), 1e-200); 602 assertEquals(100, center.getLayoutY(), 1e-200); 603 assertEquals(centerWidth, center.getLayoutBounds().getWidth(), 1e-200); 604 assertEquals(300, center.getLayoutBounds().getHeight(), 1e-200); 605 606 assertEquals(300, right.getLayoutX(), 1e-200); 607 assertEquals(100, right.getLayoutY(), 1e-200); 608 assertEquals(100, right.getLayoutBounds().getWidth(), 1e-200); 609 assertEquals(300, right.getLayoutBounds().getHeight(), 1e-200); 610 611 assertEquals(0, bottom.getLayoutX(), 1e-200); 612 assertEquals(400, bottom.getLayoutY(), 1e-200); 613 assertEquals(400, bottom.getLayoutBounds().getWidth(), 1e-200); 614 assertEquals(100, bottom.getLayoutBounds().getHeight(), 1e-200); 615 } 616 617 @Test public void testWithVerticalBiasedChildrenShrinking() { 618 MockBiased top = new MockBiased(Orientation.VERTICAL, 200, 100); 619 borderpane.setTop(top); 620 621 MockResizable left = new MockResizable(100, 100); 622 borderpane.setLeft(left); 623 624 MockBiased center = new MockBiased(Orientation.VERTICAL, 200, 100); 625 borderpane.setCenter(center); 626 627 MockResizable right = new MockResizable(100, 100); 628 borderpane.setRight(right); 629 630 MockResizable bottom = new MockResizable(400, 100); 631 borderpane.setBottom(bottom); 632 633 // The total pref height of top + (l c r) + bottom is 300 634 // Shrinking this to 250 will lead to shrinking the center to 50 635 // which means center pref width will grow to 200 * 100 / 50 = 400 636 // (l, r) prefwidth is 100, which means 100 + 200 + 100 = 600, 637 // bottom prefwidth is 400 638 assertEquals(600, borderpane.prefWidth(250), 1e-200); 639 borderpane.resize(600, 250); 640 borderpane.layout(); 641 642 assertEquals(0, top.getLayoutX(), 1e-200); 643 assertEquals(0, top.getLayoutY(), 1e-200); 644 assertEquals(200, top.getLayoutBounds().getWidth(), 1e-200); 645 assertEquals(100, top.getLayoutBounds().getHeight(), 1e-200); 646 647 assertEquals(0, left.getLayoutX(), 1e-200); 648 assertEquals(100, left.getLayoutY(), 1e-200); 649 assertEquals(100, left.getLayoutBounds().getWidth(), 1e-200); 650 assertEquals(50, left.getLayoutBounds().getHeight(), 1e-200); 651 652 assertEquals(100, center.getLayoutX(), 1e-200); 653 assertEquals(100, center.getLayoutY(), 1e-200); 654 assertEquals(400, center.getLayoutBounds().getWidth(), 1e-200); 655 assertEquals(50, center.getLayoutBounds().getHeight(), 1e-200); 656 657 assertEquals(500, right.getLayoutX(), 1e-200); 658 assertEquals(100, right.getLayoutY(), 1e-200); 659 assertEquals(100, right.getLayoutBounds().getWidth(), 1e-200); 660 assertEquals(50, right.getLayoutBounds().getHeight(), 1e-200); 661 662 assertEquals(0, bottom.getLayoutX(), 1e-200); 663 assertEquals(150, bottom.getLayoutY(), 1e-200); 664 assertEquals(600, bottom.getLayoutBounds().getWidth(), 1e-200); 665 assertEquals(100, bottom.getLayoutBounds().getHeight(), 1e-200); 666 667 668 // Now make it a little wider (center should be in the middle now) 669 borderpane.resize(700, 250); 670 borderpane.layout(); 671 672 assertEquals(0, top.getLayoutX(), 1e-200); 673 assertEquals(0, top.getLayoutY(), 1e-200); 674 assertEquals(200, top.getLayoutBounds().getWidth(), 1e-200); 675 assertEquals(100, top.getLayoutBounds().getHeight(), 1e-200); 676 677 assertEquals(0, left.getLayoutX(), 1e-200); 678 assertEquals(100, left.getLayoutY(), 1e-200); 679 assertEquals(100, left.getLayoutBounds().getWidth(), 1e-200); 680 assertEquals(50, left.getLayoutBounds().getHeight(), 1e-200); 681 682 assertEquals(150, center.getLayoutX(), 1e-200); 683 assertEquals(100, center.getLayoutY(), 1e-200); 684 assertEquals(400, center.getLayoutBounds().getWidth(), 1e-200); 685 assertEquals(50, center.getLayoutBounds().getHeight(), 1e-200); 686 687 assertEquals(600, right.getLayoutX(), 1e-200); 688 assertEquals(100, right.getLayoutY(), 1e-200); 689 assertEquals(100, right.getLayoutBounds().getWidth(), 1e-200); 690 assertEquals(50, right.getLayoutBounds().getHeight(), 1e-200); 691 692 assertEquals(0, bottom.getLayoutX(), 1e-200); 693 assertEquals(150, bottom.getLayoutY(), 1e-200); 694 assertEquals(700, bottom.getLayoutBounds().getWidth(), 1e-200); 695 assertEquals(100, bottom.getLayoutBounds().getHeight(), 1e-200); 696 } 697 698 @Test public void testFitsTopChildWithinBounds() { 699 MockResizable child = new MockResizable(10,20, 100,200, 700,800); 700 borderpane.setTop(child); 701 702 borderpane.resize(50,50); 703 borderpane.layout(); 704 705 assertEquals(50, child.getWidth(), 1e-100); 706 assertEquals(200, child.getHeight(), 1e-100); //Top always at it's pref height 707 } 708 709 @Test public void testFitsBottomChildWithinBounds() { 710 MockResizable child = new MockResizable(10,20, 100,200, 700,800); 711 borderpane.setBottom(child); 712 713 borderpane.resize(50,50); 714 borderpane.layout(); 715 716 assertEquals(50, child.getWidth(), 1e-100); 717 assertEquals(200, child.getHeight(), 1e-100); //Bottom always at it's pref height 718 } 719 720 @Test public void testFitsLeftChildWithinBounds() { 721 MockResizable child = new MockResizable(10,20, 100,200, 700,800); 722 borderpane.setLeft(child); 723 724 borderpane.resize(50,50); 725 borderpane.layout(); 726 727 assertEquals(100, child.getWidth(), 1e-100); //Left always at it's pref width 728 assertEquals(50, child.getHeight(), 1e-100); 729 } 730 731 @Test public void testFitsRightChildWithinBounds() { 732 MockResizable child = new MockResizable(10,20, 100,200, 700,800); 733 borderpane.setRight(child); 734 735 borderpane.resize(50,50); 736 borderpane.layout(); 737 738 assertEquals(100, child.getWidth(), 1e-100); //Right always at it's pref width 739 assertEquals(50, child.getHeight(), 1e-100); 740 } 741 742 @Test public void testFitsCenterChildWithinBounds() { 743 MockResizable child = new MockResizable(10,20, 100,200, 700,800); 744 borderpane.setCenter(child); 745 746 borderpane.resize(50,50); 747 borderpane.layout(); 748 749 assertEquals(50, child.getWidth(), 1e-100); 750 assertEquals(50, child.getHeight(), 1e-100); 751 } 752 753 @Test public void testFitsAllChildrenWithinBounds() { 754 MockResizable top = new MockResizable(10,20, 200,100, 700,800); 755 MockResizable bottom = new MockResizable(10,20, 200,100, 700,800); 756 MockResizable left = new MockResizable(10,20, 100,200, 700,800); 757 MockResizable right = new MockResizable(10,20, 100,200, 700,800); 758 MockResizable center = new MockResizable(10,20, 200,200, 700,800); 759 760 borderpane.setTop(top); 761 borderpane.setBottom(bottom); 762 borderpane.setLeft(left); 763 borderpane.setRight(right); 764 borderpane.setCenter(center); 765 766 borderpane.resize(300,300); 767 borderpane.layout(); 768 769 assertEquals(300, top.getWidth(), 1e-100); 770 assertEquals(100, top.getHeight(), 1e-100); 771 assertEquals(0, top.getLayoutX(), 1e-100); 772 assertEquals(0, top.getLayoutY(), 1e-100); 773 assertEquals(300, bottom.getWidth(), 1e-100); 774 assertEquals(100, bottom.getHeight(), 1e-100); 775 assertEquals(0, bottom.getLayoutX(), 1e-100); 776 assertEquals(200, bottom.getLayoutY(), 1e-100); 777 assertEquals(100, left.getWidth(), 1e-100); 778 assertEquals(100, left.getHeight(), 1e-100); 779 assertEquals(0, left.getLayoutX(), 1e-100); 780 assertEquals(100, left.getLayoutY(), 1e-100); 781 assertEquals(100, right.getWidth(), 1e-100); 782 assertEquals(100, right.getHeight(), 1e-100); 783 assertEquals(200, right.getLayoutX(), 1e-100); 784 assertEquals(100, right.getLayoutY(), 1e-100); 785 assertEquals(100, center.getWidth(), 1e-100); 786 assertEquals(100, center.getHeight(), 1e-100); 787 assertEquals(100, center.getLayoutX(), 1e-100); 788 assertEquals(100, center.getLayoutY(), 1e-100); 789 } 790 791 @Test public void testTopChildWithMargin() { 792 MockResizable top = new MockResizable(10,10,130,30,150,50); 793 MockResizable center = new MockResizable(10,10,100,100,200,200); 794 Insets insets = new Insets(10, 5, 20, 30); 795 BorderPane.setMargin(top, insets); 796 borderpane.setTop(top); 797 borderpane.setCenter(center); 798 799 assertEquals(45, borderpane.minWidth(-1), 1e-100); 800 // 10 + 20 (margin) + 30 (top.prefHeight) + 10 (center.minHeight) 801 // Top is always at it's pref height 802 assertEquals(70, borderpane.minHeight(-1), 1e-100); 803 assertEquals(165, borderpane.prefWidth(-1), 1e-100); 804 assertEquals(160, borderpane.prefHeight(-1), 1e-100); 805 assertEquals(Double.MAX_VALUE, borderpane.maxWidth(-1), 1e-100); 806 assertEquals(Double.MAX_VALUE, borderpane.maxHeight(-1), 1e-100); 807 808 borderpane.autosize(); 809 borderpane.layout(); 810 assertEquals(30, top.getLayoutX(), 1e-100); 811 assertEquals(10, top.getLayoutY(), 1e-100); 812 assertEquals(130, top.getWidth(), 1e-100); 813 assertEquals(30, top.getHeight(), 1e-100); 814 815 assertEquals(0, center.getLayoutX(), 1e-100); 816 assertEquals(60, center.getLayoutY(), 1e-100); 817 } 818 819 @Test public void testBottomChildWithMargin() { 820 MockResizable bottom = new MockResizable(10,10,130,30,150,50); 821 MockResizable center = new MockResizable(10,10,100,100,200,200); 822 Insets insets = new Insets(10, 5, 20, 30); 823 BorderPane.setMargin(bottom, insets); 824 borderpane.setBottom(bottom); 825 borderpane.setCenter(center); 826 827 assertEquals(45, borderpane.minWidth(-1), 1e-100); 828 assertEquals(70, borderpane.minHeight(-1), 1e-100); 829 assertEquals(165, borderpane.prefWidth(-1), 1e-100); 830 assertEquals(160, borderpane.prefHeight(-1), 1e-100); 831 assertEquals(Double.MAX_VALUE, borderpane.maxWidth(-1), 1e-100); 832 assertEquals(Double.MAX_VALUE, borderpane.maxHeight(-1), 1e-100); 833 834 borderpane.autosize(); 835 borderpane.layout(); 836 assertEquals(30, bottom.getLayoutX(), 1e-100); 837 assertEquals(110, bottom.getLayoutY(), 1e-100); 838 assertEquals(130, bottom.getWidth(), 1e-100); 839 assertEquals(30, bottom.getHeight(), 1e-100); 840 841 assertEquals(0, center.getLayoutX(), 1e-100); 842 assertEquals(0, center.getLayoutY(), 1e-100); 843 } 844 845 @Test public void testLeftChildWithMargin() { 846 MockResizable left = new MockResizable(10,10,130,130,150,150); 847 MockResizable center = new MockResizable(10,10,100,100,200,200); 848 Insets insets = new Insets(5, 10, 30, 20); 849 BorderPane.setMargin(left, insets); 850 borderpane.setLeft(left); 851 borderpane.setCenter(center); 852 853 assertEquals(45, borderpane.minHeight(-1), 1e-100); 854 assertEquals(170, borderpane.minWidth(-1), 1e-100); 855 assertEquals(165, borderpane.prefHeight(-1), 1e-100); 856 assertEquals(260, borderpane.prefWidth(-1), 1e-100); 857 assertEquals(Double.MAX_VALUE, borderpane.maxWidth(-1), 1e-100); 858 assertEquals(Double.MAX_VALUE, borderpane.maxHeight(-1), 1e-100); 859 860 borderpane.autosize(); 861 borderpane.layout(); 862 assertEquals(20, left.getLayoutX(), 1e-100); 863 assertEquals(5, left.getLayoutY(), 1e-100); 864 assertEquals(130, left.getWidth(), 1e-100); 865 assertEquals(130, left.getHeight(), 1e-100); 866 867 assertEquals(160, center.getLayoutX(), 1e-100); 868 assertEquals(0, center.getLayoutY(), 1e-100); 869 } 870 871 @Test public void testRightChildWithMargin() { 872 MockResizable right = new MockResizable(10,10,130,130,150,150); 873 MockResizable center = new MockResizable(10,10,100,100,200,200); 874 Insets insets = new Insets(5, 10, 30, 20); 875 BorderPane.setMargin(right, insets); 876 borderpane.setRight(right); 877 borderpane.setCenter(center); 878 879 assertEquals(45, borderpane.minHeight(-1), 1e-100); 880 assertEquals(170, borderpane.minWidth(-1), 1e-100); 881 assertEquals(165, borderpane.prefHeight(-1), 1e-100); 882 assertEquals(260, borderpane.prefWidth(-1), 1e-100); 883 assertEquals(Double.MAX_VALUE, borderpane.maxWidth(-1), 1e-100); 884 assertEquals(Double.MAX_VALUE, borderpane.maxHeight(-1), 1e-100); 885 886 borderpane.autosize(); 887 borderpane.layout(); 888 assertEquals(120, right.getLayoutX(), 1e-100); 889 assertEquals(5, right.getLayoutY(), 1e-100); 890 assertEquals(130, right.getWidth(), 1e-100); 891 assertEquals(130, right.getHeight(), 1e-100); 892 893 assertEquals(0, center.getLayoutX(), 1e-100); 894 assertEquals(0, center.getLayoutY(), 1e-100); 895 } 896 897 @Test public void testCenterChildWithMargin() { 898 MockResizable center = new MockResizable(10,10,100,100,200,200); 899 Insets insets = new Insets(5, 10, 30, 20); 900 BorderPane.setMargin(center, insets); 901 borderpane.setCenter(center); 902 903 assertEquals(45, borderpane.minHeight(-1), 1e-100); 904 assertEquals(40, borderpane.minWidth(-1), 1e-100); 905 assertEquals(135, borderpane.prefHeight(-1), 1e-100); 906 assertEquals(130, borderpane.prefWidth(-1), 1e-100); 907 assertEquals(Double.MAX_VALUE, borderpane.maxWidth(-1), 1e-100); 908 assertEquals(Double.MAX_VALUE, borderpane.maxHeight(-1), 1e-100); 909 910 borderpane.autosize(); 911 borderpane.layout(); 912 913 assertEquals(20, center.getLayoutX(), 1e-100); 914 assertEquals(5, center.getLayoutY(), 1e-100); 915 } 916 917 @Test 918 public void testResizeBelowMinimum() { 919 MockResizable left = new MockResizable(10,10,100,100,150,150); 920 MockResizable center = new MockResizable(30,30,100,100,200,200); 921 922 borderpane.setCenter(center); 923 borderpane.setLeft(left); 924 925 borderpane.resize(30, 30); 926 927 borderpane.layout(); 928 929 assertEquals(100, left.getWidth(), 1e-100); // Always at pref. 930 assertEquals(30, left.getHeight(), 1e-100); 931 932 assertEquals(100, center.getLayoutX(), 1e-100); 933 assertEquals(0, center.getLayoutY(), 1e-100); 934 assertEquals(30, center.getWidth(), 1e-100); 935 assertEquals(30, center.getHeight(), 1e-100); 936 } 937 938 }