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