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 }