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 static org.junit.Assert.assertEquals; 29 import static org.junit.Assert.assertNull; 30 import static org.junit.Assert.assertTrue; 31 import javafx.geometry.Insets; 32 import javafx.geometry.Orientation; 33 import javafx.geometry.Pos; 34 import javafx.scene.shape.Rectangle; 35 36 import org.junit.Before; 37 import org.junit.Test; 38 39 40 public class VBoxTest { 41 VBox vbox; 42 43 @Before public void setUp() { 44 this.vbox = new VBox(); 45 } 46 47 @Test public void testVBoxDefaults() { 48 assertEquals(0, vbox.getSpacing(), 1e-100); 49 assertTrue(vbox.isFillWidth()); 50 assertEquals(Pos.TOP_LEFT, vbox.getAlignment()); 51 } 52 53 @Test public void testVBoxNulls() { 54 vbox.setAlignment(null); 55 56 // this musn't throw NPE 57 vbox.autosize(); 58 vbox.layout(); 59 60 assertNull(null, vbox.getAlignment()); 61 assertNull(null, vbox.alignmentProperty().get()); 62 } 63 64 @Test public void testSimpleVBox() { 65 MockResizable child1 = new MockResizable(100,200, 300,400, 500,600); 66 Rectangle child2 = new Rectangle(100, 100); 67 vbox.getChildren().addAll(child1, child2); 68 69 assertEquals(100, vbox.minWidth(-1), 1e-100); 70 assertEquals(300, vbox.minHeight(-1), 1e-100); 71 assertEquals(300, vbox.prefWidth(-1), 1e-100); 72 assertEquals(500, vbox.prefHeight(-1), 1e-100); 73 74 vbox.autosize(); 75 vbox.layout(); 76 assertEquals(0, child1.getLayoutX(), 1e-100); 77 assertEquals(0, child1.getLayoutY(), 1e-100); 78 assertEquals(300, child1.getLayoutBounds().getWidth(), 1e-100); 79 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 80 assertEquals(0, child2.getLayoutX(), 1e-100); 81 assertEquals(400, child2.getLayoutY(), 1e-100); 82 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 83 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 84 85 vbox.resize(500,500); 86 vbox.layout(); 87 assertEquals(0, child1.getLayoutX(), 1e-100); 88 assertEquals(0, child1.getLayoutY(), 1e-100); 89 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 90 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 91 assertEquals(0, child2.getLayoutX(), 1e-100); 92 assertEquals(400, child2.getLayoutY(), 1e-100); 93 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 94 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 95 } 96 97 @Test public void testVBoxSpacing() { 98 vbox.setSpacing(10); 99 MockResizable child1 = new MockResizable(100,200, 300,400, 500,600); 100 Rectangle child2 = new Rectangle(100, 100); 101 vbox.getChildren().addAll(child1, child2); 102 103 assertEquals(100, vbox.minWidth(-1), 1e-100); 104 assertEquals(310, vbox.minHeight(-1), 1e-100); 105 assertEquals(300, vbox.prefWidth(-1), 1e-100); 106 assertEquals(510, vbox.prefHeight(-1), 1e-100); 107 108 vbox.autosize(); 109 vbox.layout(); 110 assertEquals(0, child1.getLayoutX(), 1e-100); 111 assertEquals(0, child1.getLayoutY(), 1e-100); 112 assertEquals(300, child1.getLayoutBounds().getWidth(), 1e-100); 113 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 114 assertEquals(0, child2.getLayoutX(), 1e-100); 115 assertEquals(410, child2.getLayoutY(), 1e-100); 116 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 117 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 118 119 vbox.resize(500,500); 120 vbox.layout(); 121 assertEquals(0, child1.getLayoutX(), 1e-100); 122 assertEquals(0, child1.getLayoutY(), 1e-100); 123 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 124 assertEquals(390, child1.getLayoutBounds().getHeight(), 1e-100); 125 assertEquals(0, child2.getLayoutX(), 1e-100); 126 assertEquals(400, child2.getLayoutY(), 1e-100); 127 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 128 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 129 } 130 131 @Test public void testVBoxFillWidth() { 132 vbox.setFillWidth(false); 133 vbox.setAlignment(Pos.TOP_CENTER); 134 MockResizable child1 = new MockResizable(100,100, 200,300, 500,600); 135 MockResizable child2 = new MockResizable(100,100, 100, 400, 800, 800); 136 vbox.getChildren().addAll(child1, child2); 137 138 assertEquals(100, vbox.minWidth(-1), 1e-100); 139 assertEquals(200, vbox.minHeight(-1), 1e-100); 140 assertEquals(200, vbox.prefWidth(-1), 1e-100); 141 assertEquals(700, vbox.prefHeight(-1), 1e-100); 142 143 vbox.autosize(); 144 vbox.layout(); 145 assertEquals(0, child1.getLayoutX(), 1e-100); 146 assertEquals(0, child1.getLayoutY(), 1e-100); 147 assertEquals(200, child1.getLayoutBounds().getWidth(), 1e-100); 148 assertEquals(300, child1.getLayoutBounds().getHeight(), 1e-100); 149 assertEquals(50, child2.getLayoutX(), 1e-100); 150 assertEquals(300, child2.getLayoutY(), 1e-100); 151 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 152 assertEquals(400, child2.getLayoutBounds().getHeight(), 1e-100); 153 154 vbox.resize(500,800); 155 vbox.layout(); 156 assertEquals(150, child1.getLayoutX(), 1e-100); 157 assertEquals(0, child1.getLayoutY(), 1e-100); 158 assertEquals(200, child1.getLayoutBounds().getWidth(), 1e-100); 159 assertEquals(300, child1.getLayoutBounds().getHeight(), 1e-100); 160 assertEquals(200, child2.getLayoutX(), 1e-100); 161 assertEquals(300, child2.getLayoutY(), 1e-100); 162 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 163 assertEquals(400, child2.getLayoutBounds().getHeight(), 1e-100); 164 } 165 166 @Test public void testVBoxAlignmentTopLeft() { 167 MockResizable child1 = new MockResizable(300,400); 168 Rectangle child2 = new Rectangle(100, 100); 169 vbox.getChildren().addAll(child1, child2); 170 171 vbox.setAlignment(Pos.TOP_LEFT); 172 vbox.resize(500,600); 173 vbox.layout(); 174 assertEquals(0, child1.getLayoutX(), 1e-100); 175 assertEquals(0, child1.getLayoutY(), 1e-100); 176 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 177 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 178 assertEquals(0, child2.getLayoutX(), 1e-100); 179 assertEquals(400, child2.getLayoutY(), 1e-100); 180 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 181 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 182 } 183 184 @Test public void testVBoxAlignmentTopCenter() { 185 MockResizable child1 = new MockResizable(300,400); 186 Rectangle child2 = new Rectangle(100, 100); 187 vbox.getChildren().addAll(child1, child2); 188 189 vbox.setAlignment(Pos.TOP_CENTER); 190 vbox.resize(500,600); 191 vbox.layout(); 192 assertEquals(0, child1.getLayoutX(), 1e-100); 193 assertEquals(0, child1.getLayoutY(), 1e-100); 194 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 195 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 196 assertEquals(200, child2.getLayoutX(), 1e-100); 197 assertEquals(400, child2.getLayoutY(), 1e-100); 198 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 199 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 200 } 201 202 @Test public void testVBoxAlignmentTopRight() { 203 MockResizable child1 = new MockResizable(300,400); 204 Rectangle child2 = new Rectangle(100, 100); 205 vbox.getChildren().addAll(child1, child2); 206 207 vbox.setAlignment(Pos.TOP_RIGHT); 208 vbox.resize(500,600); 209 vbox.layout(); 210 assertEquals(0, child1.getLayoutX(), 1e-100); 211 assertEquals(0, child1.getLayoutY(), 1e-100); 212 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 213 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 214 assertEquals(400, child2.getLayoutX(), 1e-100); 215 assertEquals(400, child2.getLayoutY(), 1e-100); 216 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 217 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 218 } 219 220 @Test public void testVBoxAlignmentCenterLeft() { 221 MockResizable child1 = new MockResizable(300,400); 222 Rectangle child2 = new Rectangle(100, 100); 223 vbox.getChildren().addAll(child1, child2); 224 225 vbox.setAlignment(Pos.CENTER_LEFT); 226 vbox.resize(500,600); 227 vbox.layout(); 228 assertEquals(0, child1.getLayoutX(), 1e-100); 229 assertEquals(50, child1.getLayoutY(), 1e-100); 230 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 231 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 232 assertEquals(0, child2.getLayoutX(), 1e-100); 233 assertEquals(450, child2.getLayoutY(), 1e-100); 234 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 235 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 236 } 237 238 @Test public void testVBoxAlignmentCenter() { 239 MockResizable child1 = new MockResizable(300,400); 240 Rectangle child2 = new Rectangle(100, 100); 241 vbox.getChildren().addAll(child1, child2); 242 243 vbox.setAlignment(Pos.CENTER); 244 vbox.resize(500,600); 245 vbox.layout(); 246 assertEquals(0, child1.getLayoutX(), 1e-100); 247 assertEquals(50, child1.getLayoutY(), 1e-100); 248 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 249 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 250 assertEquals(200, child2.getLayoutX(), 1e-100); 251 assertEquals(450, child2.getLayoutY(), 1e-100); 252 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 253 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 254 } 255 256 @Test public void testVBoxAlignmentCenterRight() { 257 MockResizable child1 = new MockResizable(300,400); 258 Rectangle child2 = new Rectangle(100, 100); 259 vbox.getChildren().addAll(child1, child2); 260 261 vbox.setAlignment(Pos.CENTER_RIGHT); 262 vbox.resize(500,600); 263 vbox.layout(); 264 assertEquals(0, child1.getLayoutX(), 1e-100); 265 assertEquals(50, child1.getLayoutY(), 1e-100); 266 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 267 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 268 assertEquals(400, child2.getLayoutX(), 1e-100); 269 assertEquals(450, child2.getLayoutY(), 1e-100); 270 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 271 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 272 } 273 274 @Test public void testVBoxAlignmentBottomLeft() { 275 MockResizable child1 = new MockResizable(300,400); 276 Rectangle child2 = new Rectangle(100, 100); 277 vbox.getChildren().addAll(child1, child2); 278 279 vbox.setAlignment(Pos.BOTTOM_LEFT); 280 vbox.resize(500,600); 281 vbox.layout(); 282 assertEquals(0, child1.getLayoutX(), 1e-100); 283 assertEquals(100, child1.getLayoutY(), 1e-100); 284 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 285 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 286 assertEquals(0, child2.getLayoutX(), 1e-100); 287 assertEquals(500, child2.getLayoutY(), 1e-100); 288 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 289 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 290 } 291 292 @Test public void testVBoxAlignmentBottomCenter() { 293 MockResizable child1 = new MockResizable(300,400); 294 Rectangle child2 = new Rectangle(100, 100); 295 vbox.getChildren().addAll(child1, child2); 296 297 vbox.setAlignment(Pos.BOTTOM_CENTER); 298 vbox.resize(500,600); 299 vbox.layout(); 300 assertEquals(0, child1.getLayoutX(), 1e-100); 301 assertEquals(100, child1.getLayoutY(), 1e-100); 302 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 303 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 304 assertEquals(200, child2.getLayoutX(), 1e-100); 305 assertEquals(500, child2.getLayoutY(), 1e-100); 306 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 307 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 308 } 309 310 @Test public void testVBoxAlignmentBottomRight() { 311 MockResizable child1 = new MockResizable(300,400); 312 Rectangle child2 = new Rectangle(100, 100); 313 vbox.getChildren().addAll(child1, child2); 314 315 vbox.setAlignment(Pos.BOTTOM_RIGHT); 316 vbox.resize(500,600); 317 vbox.layout(); 318 assertEquals(0, child1.getLayoutX(), 1e-100); 319 assertEquals(100, child1.getLayoutY(), 1e-100); 320 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 321 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 322 assertEquals(400, child2.getLayoutX(), 1e-100); 323 assertEquals(500, child2.getLayoutY(), 1e-100); 324 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 325 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 326 } 327 328 @Test public void testVBoxContentBiasNullNoChildHasContentBias() { 329 Rectangle r = new Rectangle(100,100); 330 MockResizable child = new MockResizable(100,200); 331 vbox.getChildren().addAll(r, child); 332 333 assertNull(vbox.getContentBias()); 334 assertEquals(100, vbox.prefWidth(-1), 0); 335 assertEquals(300, vbox.prefHeight(-1), 0); 336 assertEquals(300, vbox.prefHeight(200), 0); 337 } 338 339 @Test public void testVBoxContentBiasHORIZONTALifChildHORIZONTAL() { 340 Rectangle r = new Rectangle(100,100); 341 MockBiased biased = new MockBiased(Orientation.HORIZONTAL, 100, 200); 342 MockResizable child = new MockResizable(100,100); 343 vbox.getChildren().addAll(r, biased, child); 344 345 assertEquals(Orientation.HORIZONTAL, vbox.getContentBias()); 346 } 347 348 @Test public void testVBoxWithHorizontalContentBiasAtPrefSize() { 349 Rectangle rect = new Rectangle(100,100); 350 MockBiased biased = new MockBiased(Orientation.HORIZONTAL, 100, 200); 351 MockResizable resizable = new MockResizable(100,100); 352 vbox.getChildren().addAll(rect, biased, resizable); 353 354 assertEquals(Orientation.HORIZONTAL, vbox.getContentBias()); 355 assertEquals(100, vbox.prefWidth(-1), 0); 356 assertEquals(400, vbox.prefHeight(-1), 0); 357 358 vbox.autosize(); // 100 x 400 359 vbox.layout(); 360 assertEquals(0, rect.getLayoutX(), 1e-100); 361 assertEquals(0, rect.getLayoutY(), 1e-100); 362 assertEquals(100, rect.getLayoutBounds().getWidth(), 1e-100); 363 assertEquals(100, rect.getLayoutBounds().getHeight(), 1e-100); 364 assertEquals(0, biased.getLayoutX(), 1e-100); 365 assertEquals(100, biased.getLayoutY(), 1e-100); 366 assertEquals(100, biased.getLayoutBounds().getWidth(), 1e-100); 367 assertEquals(200, biased.getLayoutBounds().getHeight(), 1e-100); 368 assertEquals(0, resizable.getLayoutX(), 1e-100); 369 assertEquals(300, resizable.getLayoutY(), 1e-100); 370 assertEquals(100, resizable.getLayoutBounds().getWidth(), 1e-100); 371 assertEquals(100, resizable.getLayoutBounds().getHeight(), 1e-100); 372 } 373 374 @Test public void testVBoxWithHorizontalContentBiasWithHorizontalShrinking() { 375 Rectangle rect = new Rectangle(100,100); 376 MockBiased biased = new MockBiased(Orientation.HORIZONTAL, 100, 200); 377 MockResizable resizable = new MockResizable(100,100); 378 vbox.getChildren().addAll(rect, biased, resizable); 379 380 assertEquals(Orientation.HORIZONTAL, vbox.getContentBias()); 381 assertEquals(600, vbox.prefHeight(50), 0); 382 383 vbox.resize(50, 600); 384 vbox.layout(); 385 assertEquals(0, rect.getLayoutX(), 1e-100); 386 assertEquals(0, rect.getLayoutY(), 1e-100); 387 assertEquals(100, rect.getLayoutBounds().getWidth(), 1e-100); 388 assertEquals(100, rect.getLayoutBounds().getHeight(), 1e-100); 389 assertEquals(0, biased.getLayoutX(), 1e-100); 390 assertEquals(100, biased.getLayoutY(), 1e-100); 391 assertEquals(50, biased.getLayoutBounds().getWidth(), 1e-100); 392 assertEquals(400, biased.getLayoutBounds().getHeight(), 1e-100); 393 assertEquals(0, resizable.getLayoutX(), 1e-100); 394 assertEquals(500, resizable.getLayoutY(), 1e-100); 395 assertEquals(50, resizable.getLayoutBounds().getWidth(), 1e-100); 396 assertEquals(100, resizable.getLayoutBounds().getHeight(), 1e-100); 397 } 398 399 @Test public void testVBoxWithHorizontalContentBiasWithHorizontalGrowing() { 400 Rectangle rect = new Rectangle(100,100); 401 MockBiased biased = new MockBiased(Orientation.HORIZONTAL, 100, 200); 402 MockResizable resizable = new MockResizable(100,100); 403 vbox.getChildren().addAll(rect, biased, resizable); 404 405 assertEquals(Orientation.HORIZONTAL, vbox.getContentBias()); 406 assertEquals(267, vbox.prefHeight(300), 0); 407 408 vbox.resize(300, 267); 409 vbox.layout(); 410 assertEquals(0, rect.getLayoutX(), 1e-100); 411 assertEquals(0, rect.getLayoutY(), 1e-100); 412 assertEquals(100, rect.getLayoutBounds().getWidth(), 1e-100); 413 assertEquals(100, rect.getLayoutBounds().getHeight(), 1e-100); 414 assertEquals(0, biased.getLayoutX(), 1e-100); 415 assertEquals(100, biased.getLayoutY(), 1e-100); 416 assertEquals(300, biased.getLayoutBounds().getWidth(), 1e-100); 417 assertEquals(67, biased.getLayoutBounds().getHeight(), 1e-100); 418 assertEquals(0, resizable.getLayoutX(), 1e-100); 419 assertEquals(167, resizable.getLayoutY(), 1e-100); 420 assertEquals(300, resizable.getLayoutBounds().getWidth(), 1e-100); 421 assertEquals(100, resizable.getLayoutBounds().getHeight(), 1e-100); 422 } 423 424 @Test public void testVBoxContentBiasVERTICALIfChildVERTICAL() { 425 Rectangle r = new Rectangle(100,100); 426 MockBiased biased = new MockBiased(Orientation.VERTICAL, 100, 200); 427 MockResizable child = new MockResizable(100,100); 428 vbox.getChildren().addAll(r, biased, child); 429 430 assertEquals(Orientation.VERTICAL, vbox.getContentBias()); 431 } 432 433 @Test public void testVBoxWithVerticalContentBiasAtPrefSize() { 434 Rectangle rect = new Rectangle(100,100); 435 MockBiased biased = new MockBiased(Orientation.VERTICAL, 100, 200); 436 MockResizable resizable = new MockResizable(100,100); 437 vbox.getChildren().addAll(rect, biased, resizable); 438 439 assertEquals(Orientation.VERTICAL, vbox.getContentBias()); 440 assertEquals(100, vbox.prefWidth(-1), 0); 441 assertEquals(400, vbox.prefHeight(-1), 0); 442 443 vbox.autosize(); // 100 x 400 444 vbox.layout(); 445 assertEquals(0, rect.getLayoutX(), 1e-100); 446 assertEquals(0, rect.getLayoutY(), 1e-100); 447 assertEquals(100, rect.getLayoutBounds().getWidth(), 1e-100); 448 assertEquals(100, rect.getLayoutBounds().getHeight(), 1e-100); 449 assertEquals(0, biased.getLayoutX(), 1e-100); 450 assertEquals(100, biased.getLayoutY(), 1e-100); 451 assertEquals(100, biased.getLayoutBounds().getWidth(), 1e-100); 452 assertEquals(200, biased.getLayoutBounds().getHeight(), 1e-100); 453 assertEquals(0, resizable.getLayoutX(), 1e-100); 454 assertEquals(300, resizable.getLayoutY(), 1e-100); 455 assertEquals(100, resizable.getLayoutBounds().getWidth(), 1e-100); 456 assertEquals(100, resizable.getLayoutBounds().getHeight(), 1e-100); 457 } 458 459 @Test public void testVBoxWithVerticalContentBiasWithVerticalShrinking() { 460 Rectangle rect = new Rectangle(100,100); 461 MockBiased biased = new MockBiased(Orientation.VERTICAL, 100, 200); 462 MockResizable resizable = new MockResizable(100,100); 463 vbox.getChildren().addAll(rect, biased, resizable); 464 465 assertEquals(Orientation.VERTICAL, vbox.getContentBias()); 466 assertEquals(134, vbox.prefWidth(300), 0); 467 468 vbox.resize(134, 300); 469 vbox.layout(); 470 assertEquals(0, rect.getLayoutX(), 1e-100); 471 assertEquals(0, rect.getLayoutY(), 1e-100); 472 assertEquals(100, rect.getLayoutBounds().getWidth(), 1e-100); 473 assertEquals(100, rect.getLayoutBounds().getHeight(), 1e-100); 474 assertEquals(0, biased.getLayoutX(), 1e-100); 475 assertEquals(100, biased.getLayoutY(), 1e-100); 476 assertEquals(134, biased.getLayoutBounds().getWidth(), 1e-100); 477 assertEquals(150, biased.getLayoutBounds().getHeight(), 1e-100); 478 assertEquals(0, resizable.getLayoutX(), 1e-100); 479 assertEquals(250, resizable.getLayoutY(), 1e-100); 480 assertEquals(134, resizable.getLayoutBounds().getWidth(), 1e-100); 481 assertEquals(50, resizable.getLayoutBounds().getHeight(), 1e-100); 482 } 483 484 @Test public void testVBoxWithVerticalContentBiasWithVerticalGrowingFillWidthFalse() { 485 vbox.setFillWidth(false); 486 Rectangle rect = new Rectangle(100,100); 487 MockBiased biased = new MockBiased(Orientation.VERTICAL, 100, 200); 488 MockResizable resizable = new MockResizable(100,100); 489 vbox.getChildren().addAll(rect, biased, resizable); 490 491 vbox.setVgrow(biased, Priority.ALWAYS); 492 493 assertEquals(Orientation.VERTICAL, vbox.getContentBias()); 494 assertEquals(100, vbox.prefWidth(500), 0); 495 496 vbox.resize(100, 500); 497 vbox.layout(); 498 assertEquals(0, rect.getLayoutX(), 1e-100); 499 assertEquals(0, rect.getLayoutY(), 1e-100); 500 assertEquals(100, rect.getLayoutBounds().getWidth(), 1e-100); 501 assertEquals(100, rect.getLayoutBounds().getHeight(), 1e-100); 502 assertEquals(0, biased.getLayoutX(), 1e-100); 503 assertEquals(100, biased.getLayoutY(), 1e-100); 504 assertEquals(67, biased.getLayoutBounds().getWidth(), 1e-100); 505 assertEquals(300, biased.getLayoutBounds().getHeight(), 1e-100); 506 assertEquals(0, resizable.getLayoutX(), 1e-100); 507 assertEquals(400, resizable.getLayoutY(), 1e-100); 508 assertEquals(100, resizable.getLayoutBounds().getWidth(), 1e-100); 509 assertEquals(100, resizable.getLayoutBounds().getHeight(), 1e-100); 510 } 511 512 @Test public void testVBoxWithVerticalContentBiasWithVerticalGrowingFillWidthTrue() { 513 vbox.setFillWidth(true); 514 Rectangle rect = new Rectangle(100,100); 515 MockBiased biased = new MockBiased(Orientation.VERTICAL, 100, 200); 516 MockResizable resizable = new MockResizable(100,100); 517 vbox.getChildren().addAll(rect, biased, resizable); 518 519 vbox.setVgrow(biased, Priority.ALWAYS); 520 521 assertEquals(Orientation.VERTICAL, vbox.getContentBias()); 522 assertEquals(100, vbox.prefWidth(500), 0); 523 524 vbox.resize(100, 500); 525 vbox.layout(); 526 assertEquals(0, rect.getLayoutX(), 1e-100); 527 assertEquals(0, rect.getLayoutY(), 1e-100); 528 assertEquals(100, rect.getLayoutBounds().getWidth(), 1e-100); 529 assertEquals(100, rect.getLayoutBounds().getHeight(), 1e-100); 530 assertEquals(0, biased.getLayoutX(), 1e-100); 531 assertEquals(100, biased.getLayoutY(), 1e-100); 532 assertEquals(67, biased.getLayoutBounds().getWidth(), 1e-100); 533 assertEquals(300, biased.getLayoutBounds().getHeight(), 1e-100); 534 assertEquals(0, resizable.getLayoutX(), 1e-100); 535 assertEquals(400, resizable.getLayoutY(), 1e-100); 536 assertEquals(100, resizable.getLayoutBounds().getWidth(), 1e-100); 537 assertEquals(100, resizable.getLayoutBounds().getHeight(), 1e-100); 538 } 539 540 @Test public void testVBoxContentBiasHORIZONTALIfChildHORIZONTALAndFillWidthTrue() { 541 vbox.setFillWidth(true); 542 Rectangle r = new Rectangle(100,100); 543 MockBiased biased = new MockBiased(Orientation.HORIZONTAL, 100, 200); 544 MockResizable child = new MockResizable(100,100); 545 vbox.getChildren().addAll(r, biased, child); 546 547 assertEquals(Orientation.HORIZONTAL, vbox.getContentBias()); 548 assertEquals(100, vbox.prefWidth(-1), 0); 549 assertEquals(400, vbox.prefHeight(100), 0); 550 assertEquals(300, vbox.prefHeight(200), 0); 551 } 552 553 // These test are no longer valid. If a content bias is set getContentBias() 554 // should never return null. 555 // @Test public void testVBoxContentBiasNullIfChildHORIZONTALAndFillWidthFalse() { 556 // vbox.setFillWidth(false); 557 // Rectangle r = new Rectangle(100,100); 558 // MockBiased biased = new MockBiased(Orientation.HORIZONTAL, 100, 200); 559 // MockResizable child = new MockResizable(100,100); 560 // vbox.getChildren().addAll(r, biased, child); 561 // 562 // assertNull(vbox.getContentBias()); 563 // assertEquals(100, vbox.prefWidth(-1), 0); 564 // assertEquals(400, vbox.prefHeight(-1), 0); 565 // assertEquals(400, vbox.prefHeight(200), 0); 566 // } 567 // 568 // @Test public void testVBoxContentBiasNullIfChildVERTICALAndFillWidthTrue() { 569 // vbox.setFillWidth(true); 570 // Rectangle r = new Rectangle(100,100); 571 // MockBiased biased = new MockBiased(Orientation.VERTICAL, 200, 100); 572 // MockResizable child = new MockResizable(100,100); 573 // vbox.getChildren().addAll(r, biased, child); 574 // 575 // assertNull(vbox.getContentBias()); 576 // assertEquals(300, vbox.prefHeight(-1), 0); 577 // assertEquals(200, vbox.prefWidth(-1), 0); 578 // assertEquals(200, vbox.prefWidth(200), 0); 579 // } 580 // 581 // @Test public void testVBoxContentBiasNullIfChildVERTICALAndFillWidthFalse() { 582 // vbox.setFillWidth(false); 583 // Rectangle r = new Rectangle(100,100); 584 // MockBiased biased = new MockBiased(Orientation.VERTICAL, 200, 100); 585 // MockResizable child = new MockResizable(100,100); 586 // vbox.getChildren().addAll(r, biased, child); 587 // 588 // assertNull(vbox.getContentBias()); 589 // assertEquals(300, vbox.prefHeight(-1), 0); 590 // assertEquals(200, vbox.prefWidth(-1), 0); 591 // assertEquals(200, vbox.prefWidth(200), 0); 592 // } 593 594 @Test public void testVBoxSetMarginConstraint() { 595 MockResizable child1 = new MockResizable(100,200, 300,400, 500,600); 596 597 assertNull(VBox.getMargin(child1)); 598 599 Insets margin = new Insets(10,20,30,40); 600 VBox.setMargin(child1, margin); 601 assertEquals(margin, VBox.getMargin(child1)); 602 603 VBox.setMargin(child1, null); 604 assertNull(VBox.getMargin(child1)); 605 } 606 607 @Test public void testVBoxMarginConstraint() { 608 VBox vbox = new VBox(); 609 MockResizable child1 = new MockResizable(100,200, 300,400, 500,600); 610 Rectangle child2 = new Rectangle(100, 100); 611 vbox.getChildren().addAll(child1, child2); 612 613 VBox.setMargin(child1, new Insets(10,20,30,40)); 614 615 assertEquals(160, vbox.minWidth(-1), 1e-100); 616 assertEquals(340, vbox.minHeight(-1), 1e-100); 617 assertEquals(360, vbox.prefWidth(-1), 1e-100); 618 assertEquals(540, vbox.prefHeight(-1), 1e-100); 619 620 vbox.autosize(); 621 vbox.layout(); 622 assertEquals(40, child1.getLayoutX(), 1e-100); 623 assertEquals(10, child1.getLayoutY(), 1e-100); 624 assertEquals(300, child1.getLayoutBounds().getWidth(), 1e-100); 625 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 626 assertEquals(0, child2.getLayoutX(), 1e-100); 627 assertEquals(440, child2.getLayoutY(), 1e-100); 628 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 629 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 630 631 vbox.resize(500,500); 632 vbox.layout(); 633 assertEquals(40, child1.getLayoutX(), 1e-100); 634 assertEquals(10, child1.getLayoutY(), 1e-100); 635 assertEquals(440, child1.getLayoutBounds().getWidth(), 1e-100); 636 assertEquals(360, child1.getLayoutBounds().getHeight(), 1e-100); 637 assertEquals(0, child2.getLayoutX(), 1e-100); 638 assertEquals(400, child2.getLayoutY(), 1e-100); 639 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 640 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 641 } 642 643 @Test public void testVBoxSetVgrowConstraint() { 644 MockResizable child1 = new MockResizable(100,200, 300,400, 500,600); 645 646 assertNull(VBox.getVgrow(child1)); 647 648 VBox.setVgrow(child1, Priority.ALWAYS); 649 assertEquals(Priority.ALWAYS, VBox.getVgrow(child1)); 650 651 VBox.setVgrow(child1, null); 652 assertNull(VBox.getVgrow(child1)); 653 } 654 655 @Test public void testVBoxHgrowConstraint() { 656 VBox vbox = new VBox(); 657 MockResizable child1 = new MockResizable(100,200, 300,400, 500,600); 658 Rectangle child2 = new Rectangle(100, 100); 659 vbox.getChildren().addAll(child1, child2); 660 661 VBox.setVgrow(child1, Priority.ALWAYS); 662 663 assertEquals(100, vbox.minWidth(-1), 1e-100); 664 assertEquals(300, vbox.minHeight(-1), 1e-100); 665 assertEquals(300, vbox.prefWidth(-1), 1e-100); 666 assertEquals(500, vbox.prefHeight(-1), 1e-100); 667 668 vbox.autosize(); 669 vbox.layout(); 670 assertEquals(0, child1.getLayoutX(), 1e-100); 671 assertEquals(0, child1.getLayoutY(), 1e-100); 672 assertEquals(300, child1.getLayoutBounds().getWidth(), 1e-100); 673 assertEquals(400, child1.getLayoutBounds().getHeight(), 1e-100); 674 assertEquals(0, child2.getLayoutX(), 1e-100); 675 assertEquals(400, child2.getLayoutY(), 1e-100); 676 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 677 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 678 679 vbox.resize(500,600); 680 vbox.layout(); 681 assertEquals(0, child1.getLayoutX(), 1e-100); 682 assertEquals(0, child1.getLayoutY(), 1e-100); 683 assertEquals(500, child1.getLayoutBounds().getWidth(), 1e-100); 684 assertEquals(500, child1.getLayoutBounds().getHeight(), 1e-100); 685 assertEquals(0, child2.getLayoutX(), 1e-100); 686 assertEquals(500, child2.getLayoutY(), 1e-100); 687 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 688 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 689 } 690 691 @Test public void testVBoxWithHorizontalBiasedChild() { 692 VBox vbox = new VBox(); 693 694 MockBiased biased = new MockBiased(Orientation.HORIZONTAL, 100,100); 695 MockBiased biased2 = new MockBiased(Orientation.HORIZONTAL, 200, 200); 696 VBox.setVgrow(biased, Priority.ALWAYS); 697 698 vbox.getChildren().addAll(biased, biased2); 699 700 assertEquals(200, vbox.prefWidth(-1), 1e-100); 701 assertEquals(300, vbox.prefHeight(-1), 1e-100); 702 703 vbox.autosize(); 704 vbox.layout(); 705 assertEquals(0, biased.getLayoutX(), 1e-100); 706 assertEquals(0, biased.getLayoutY(), 1e-100); 707 assertEquals(200, biased.getLayoutBounds().getWidth(), 1e-100); 708 assertEquals(50, biased.getLayoutBounds().getHeight(), 1e-100); 709 assertEquals(0, biased2.getLayoutX(), 1e-100); 710 assertEquals(50, biased2.getLayoutY(), 1e-100); 711 assertEquals(200, biased2.getLayoutBounds().getWidth(), 1e-100); 712 assertEquals(200, biased2.getLayoutBounds().getHeight(), 1e-100); 713 } 714 715 @Test public void testVBoxWithVerticalBiasedChild() { 716 VBox vbox = new VBox(); 717 718 MockBiased biased = new MockBiased(Orientation.VERTICAL, 100,100); 719 MockBiased biased2 = new MockBiased(Orientation.VERTICAL, 200, 200); 720 VBox.setVgrow(biased, Priority.ALWAYS); 721 722 vbox.getChildren().addAll(biased, biased2); 723 724 assertEquals(200, vbox.prefWidth(-1), 1e-100); 725 assertEquals(300, vbox.prefHeight(-1), 1e-100); 726 assertEquals(200, vbox.minWidth(-1), 1e-100); // 1 with max height 727 assertEquals(20, vbox.minHeight(-1), 1e-100); 728 assertEquals(Math.ceil(Math.max(100 * 100 / 50.0, 200 * 200 / 150.0)), vbox.minWidth(200), 1e-100); 729 730 vbox.autosize(); 731 vbox.layout(); 732 assertEquals(0, biased.getLayoutX(), 1e-100); 733 assertEquals(0, biased.getLayoutY(), 1e-100); 734 assertEquals(100, biased.getLayoutBounds().getWidth(), 1e-100); 735 assertEquals(100, biased.getLayoutBounds().getHeight(), 1e-100); 736 assertEquals(0, biased2.getLayoutX(), 1e-100); 737 assertEquals(100, biased2.getLayoutY(), 1e-100); 738 assertEquals(200, biased2.getLayoutBounds().getWidth(), 1e-100); 739 assertEquals(200, biased2.getLayoutBounds().getHeight(), 1e-100); 740 } 741 742 @Test public void testMaxHeightHonoredWhenGrowing() { 743 MockRegion child = new MockRegion(10,10,100,100,300,300); 744 MockRegion child2 = new MockRegion(10,10,100,100,200,200); 745 VBox.setVgrow(child, Priority.ALWAYS); 746 VBox.setVgrow(child2, Priority.ALWAYS); 747 748 vbox.getChildren().addAll(child, child2); 749 750 vbox.resize(600,600); 751 vbox.layout(); 752 assertEquals(300, child.getHeight(), 0); 753 assertEquals(0, child.getLayoutY(), 0); 754 assertEquals(200, child2.getHeight(), 0); 755 assertEquals(300, child2.getLayoutY(), 0); 756 } 757 758 @Test public void testLayoutWhenChildrenAreRemoved_RT19406() { 759 Rectangle child1 = new Rectangle(100,100); 760 Rectangle child2 = new Rectangle(100, 100); 761 vbox.getChildren().addAll(child1, child2); 762 763 assertEquals(100, vbox.prefWidth(-1), 1e-100); 764 assertEquals(200, vbox.prefHeight(-1), 1e-100); 765 766 vbox.resize(100, 200); 767 vbox.layout(); 768 assertEquals(0, child1.getLayoutX(), 1e-100); 769 assertEquals(0, child1.getLayoutY(), 1e-100); 770 assertEquals(100, child1.getLayoutBounds().getWidth(), 1e-100); 771 assertEquals(100, child1.getLayoutBounds().getHeight(), 1e-100); 772 assertEquals(0, child2.getLayoutX(), 1e-100); 773 assertEquals(100, child2.getLayoutY(), 1e-100); 774 assertEquals(100, child2.getLayoutBounds().getWidth(), 1e-100); 775 assertEquals(100, child2.getLayoutBounds().getHeight(), 1e-100); 776 777 vbox.getChildren().remove(child2); 778 assertEquals(100, vbox.prefWidth(-1), 1e-100); 779 assertEquals(100, vbox.prefHeight(-1), 1e-100); 780 } 781 }