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 static org.junit.Assert.assertEquals;
  30 import javafx.geometry.Insets;
  31 import javafx.geometry.Orientation;
  32 import javafx.scene.ParentShim;
  33 import javafx.scene.layout.AnchorPane;
  34 import javafx.scene.shape.Rectangle;
  35 
  36 import org.junit.Test;
  37 
  38 
  39 public class AnchorPaneTest {
  40 
  41     @Test public void testNoAnchorsSet() {
  42         AnchorPane anchorpane = new AnchorPane();
  43         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
  44         child.relocate(10, 20); // should honor position if no anchors set
  45         ParentShim.getChildren(anchorpane).add(child);
  46 
  47         assertEquals(310, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
  48         assertEquals(420, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
  49         assertEquals(310, anchorpane.prefWidth(-1), 1e-100);
  50         assertEquals(420, anchorpane.prefHeight(-1), 1e-100);
  51 
  52         anchorpane.autosize();
  53         anchorpane.layout();
  54         assertEquals(10, child.getLayoutX(), 1e-100);
  55         assertEquals(20, child.getLayoutY(), 1e-100);
  56         assertEquals(300, child.getWidth(), 1e-100);
  57         assertEquals(400, child.getHeight(), 1e-100);
  58 
  59         anchorpane.resize(500,500);
  60         anchorpane.layout();
  61         assertEquals(10, child.getLayoutX(), 1e-100);
  62         assertEquals(20, child.getLayoutY(), 1e-100);
  63         assertEquals(300, child.getWidth(), 1e-100);
  64         assertEquals(400, child.getHeight(), 1e-100);
  65     }
  66 
  67     @Test public void testTopAnchored() {
  68         AnchorPane anchorpane = new AnchorPane();
  69         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
  70         anchorpane.setTopAnchor(child, 10.0);
  71         ParentShim.getChildren(anchorpane).add(child);
  72 
  73         assertEquals(300, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
  74         assertEquals(410, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
  75         assertEquals(300, anchorpane.prefWidth(-1), 1e-100);
  76         assertEquals(410, anchorpane.prefHeight(-1), 1e-100);
  77 
  78         anchorpane.autosize();
  79         anchorpane.layout();
  80         assertEquals(0, child.getLayoutX(), 1e-100);
  81         assertEquals(10, child.getLayoutY(), 1e-100);
  82         assertEquals(300, child.getWidth(), 1e-100);
  83         assertEquals(400, child.getHeight(), 1e-100);
  84 
  85         anchorpane.resize(500,500);
  86         anchorpane.layout();
  87         assertEquals(0, child.getLayoutX(), 1e-100);
  88         assertEquals(10, child.getLayoutY(), 1e-100);
  89         assertEquals(300, child.getWidth(), 1e-100);
  90         assertEquals(400, child.getHeight(), 1e-100);
  91     }
  92 
  93     @Test public void testLeftAnchored() {
  94         AnchorPane anchorpane = new AnchorPane();
  95         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
  96         anchorpane.setLeftAnchor(child, 10.0);
  97         ParentShim.getChildren(anchorpane).add(child);
  98 
  99         assertEquals(310, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 100         assertEquals(400, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 101         assertEquals(310, anchorpane.prefWidth(-1), 1e-100);
 102         assertEquals(400, anchorpane.prefHeight(-1), 1e-100);
 103 
 104         anchorpane.autosize();
 105         anchorpane.layout();
 106         assertEquals(10, child.getLayoutX(), 1e-100);
 107         assertEquals(0, child.getLayoutY(), 1e-100);
 108         assertEquals(300, child.getWidth(), 1e-100);
 109         assertEquals(400, child.getHeight(), 1e-100);
 110 
 111         anchorpane.resize(500,500);
 112         anchorpane.layout();
 113         assertEquals(10, child.getLayoutX(), 1e-100);
 114         assertEquals(0, child.getLayoutY(), 1e-100);
 115         assertEquals(300, child.getWidth(), 1e-100);
 116         assertEquals(400, child.getHeight(), 1e-100);
 117     }
 118 
 119     @Test public void testBottomAnchored() {
 120         AnchorPane anchorpane = new AnchorPane();
 121         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 122         anchorpane.setBottomAnchor(child, 10.0);
 123         ParentShim.getChildren(anchorpane).add(child);
 124 
 125         assertEquals(300, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 126         assertEquals(410, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 127         assertEquals(300, anchorpane.prefWidth(-1), 1e-100);
 128         assertEquals(410, anchorpane.prefHeight(-1), 1e-100);
 129 
 130         anchorpane.autosize();
 131         anchorpane.layout();
 132         assertEquals(0, child.getLayoutX(), 1e-100);
 133         assertEquals(0, child.getLayoutY(), 1e-100);
 134         assertEquals(300, child.getWidth(), 1e-100);
 135         assertEquals(400, child.getHeight(), 1e-100);
 136 
 137         anchorpane.resize(500,500);
 138         anchorpane.layout();
 139         assertEquals(0, child.getLayoutX(), 1e-100);
 140         assertEquals(90, child.getLayoutY(), 1e-100);
 141         assertEquals(300, child.getWidth(), 1e-100);
 142         assertEquals(400, child.getHeight(), 1e-100);
 143     }
 144 
 145     @Test public void testRightAnchored() {
 146         AnchorPane anchorpane = new AnchorPane();
 147         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 148         anchorpane.setRightAnchor(child, 10.0);
 149         ParentShim.getChildren(anchorpane).add(child);
 150 
 151         assertEquals(310, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 152         assertEquals(400, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 153         assertEquals(310, anchorpane.prefWidth(-1), 1e-100);
 154         assertEquals(400, anchorpane.prefHeight(-1), 1e-100);
 155 
 156         anchorpane.autosize();
 157         anchorpane.layout();
 158         assertEquals(0, child.getLayoutX(), 1e-100);
 159         assertEquals(0, child.getLayoutY(), 1e-100);
 160         assertEquals(300, child.getWidth(), 1e-100);
 161         assertEquals(400, child.getHeight(), 1e-100);
 162 
 163         anchorpane.resize(500,500);
 164         anchorpane.layout();
 165         assertEquals(190, child.getLayoutX(), 1e-100);
 166         assertEquals(0, child.getLayoutY(), 1e-100);
 167         assertEquals(300, child.getWidth(), 1e-100);
 168         assertEquals(400, child.getHeight(), 1e-100);
 169     }
 170 
 171     @Test public void testTopLeftAnchored() {
 172         AnchorPane anchorpane = new AnchorPane();
 173         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 174         anchorpane.setTopAnchor(child,20.0);
 175         anchorpane.setLeftAnchor(child, 10.0);
 176         ParentShim.getChildren(anchorpane).add(child);
 177 
 178         assertEquals(310, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 179         assertEquals(420, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 180         assertEquals(310, anchorpane.prefWidth(-1), 1e-100);
 181         assertEquals(420, anchorpane.prefHeight(-1), 1e-100);
 182 
 183         anchorpane.autosize();
 184         anchorpane.layout();
 185         assertEquals(10, child.getLayoutX(), 1e-100);
 186         assertEquals(20, child.getLayoutY(), 1e-100);
 187         assertEquals(300, child.getWidth(), 1e-100);
 188         assertEquals(400, child.getHeight(), 1e-100);
 189 
 190         anchorpane.resize(500,500);
 191         anchorpane.layout();
 192         assertEquals(10, child.getLayoutX(), 1e-100);
 193         assertEquals(20, child.getLayoutY(), 1e-100);
 194         assertEquals(300, child.getWidth(), 1e-100);
 195         assertEquals(400, child.getHeight(), 1e-100);
 196     }
 197 
 198     @Test public void testTopBottomAnchored() {
 199         AnchorPane anchorpane = new AnchorPane();
 200         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 201         anchorpane.setTopAnchor(child,20.0);
 202         anchorpane.setBottomAnchor(child, 10.0);
 203         ParentShim.getChildren(anchorpane).add(child);
 204 
 205         assertEquals(300, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 206         assertEquals(230, anchorpane.minHeight(-1), 1e-100);
 207         assertEquals(300, anchorpane.prefWidth(-1), 1e-100);
 208         assertEquals(430, anchorpane.prefHeight(-1), 1e-100);
 209 
 210         anchorpane.autosize();
 211         anchorpane.layout();
 212         assertEquals(0, child.getLayoutX(), 1e-100);
 213         assertEquals(20, child.getLayoutY(), 1e-100);
 214         assertEquals(300, child.getWidth(), 1e-100);
 215         assertEquals(400, child.getHeight(), 1e-100);
 216 
 217         anchorpane.resize(500,500);
 218         anchorpane.layout();
 219         assertEquals(0, child.getLayoutX(), 1e-100);
 220         assertEquals(20, child.getLayoutY(), 1e-100);
 221         assertEquals(300, child.getWidth(), 1e-100);
 222         assertEquals(470, child.getHeight(), 1e-100);
 223     }
 224 
 225     @Test public void testTopRightAnchored() {
 226         AnchorPane anchorpane = new AnchorPane();
 227         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 228         anchorpane.setTopAnchor(child,20.0);
 229         anchorpane.setRightAnchor(child, 10.0);
 230         ParentShim.getChildren(anchorpane).add(child);
 231 
 232         assertEquals(310, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 233         assertEquals(420, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 234         assertEquals(310, anchorpane.prefWidth(-1), 1e-100);
 235         assertEquals(420, anchorpane.prefHeight(-1), 1e-100);
 236 
 237         anchorpane.autosize();
 238         anchorpane.layout();
 239         assertEquals(0, child.getLayoutX(), 1e-100);
 240         assertEquals(20, child.getLayoutY(), 1e-100);
 241         assertEquals(300, child.getWidth(), 1e-100);
 242         assertEquals(400, child.getHeight(), 1e-100);
 243 
 244         anchorpane.resize(500,500);
 245         anchorpane.layout();
 246         assertEquals(190, child.getLayoutX(), 1e-100);
 247         assertEquals(20, child.getLayoutY(), 1e-100);
 248         assertEquals(300, child.getWidth(), 1e-100);
 249         assertEquals(400, child.getHeight(), 1e-100);
 250     }
 251 
 252     @Test public void testLeftBottomAnchored() {
 253         AnchorPane anchorpane = new AnchorPane();
 254         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 255         anchorpane.setBottomAnchor(child,20.0);
 256         anchorpane.setLeftAnchor(child, 10.0);
 257         ParentShim.getChildren(anchorpane).add(child);
 258 
 259         assertEquals(310, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 260         assertEquals(420, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 261         assertEquals(310, anchorpane.prefWidth(-1), 1e-100);
 262         assertEquals(420, anchorpane.prefHeight(-1), 1e-100);
 263 
 264         anchorpane.autosize();
 265         anchorpane.layout();
 266         assertEquals(10, child.getLayoutX(), 1e-100);
 267         assertEquals(0, child.getLayoutY(), 1e-100);
 268         assertEquals(300, child.getWidth(), 1e-100);
 269         assertEquals(400, child.getHeight(), 1e-100);
 270 
 271         anchorpane.resize(500,500);
 272         anchorpane.layout();
 273         assertEquals(10, child.getLayoutX(), 1e-100);
 274         assertEquals(80, child.getLayoutY(), 1e-100);
 275         assertEquals(300, child.getWidth(), 1e-100);
 276         assertEquals(400, child.getHeight(), 1e-100);
 277     }
 278 
 279     @Test public void testLeftRightAnchored() {
 280         AnchorPane anchorpane = new AnchorPane();
 281         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 282         anchorpane.setRightAnchor(child,20.0);
 283         anchorpane.setLeftAnchor(child, 10.0);
 284         ParentShim.getChildren(anchorpane).add(child);
 285 
 286         assertEquals(130, anchorpane.minWidth(-1), 1e-100);
 287         assertEquals(400, anchorpane.minHeight(-1), 1e-100); // Not restricted, will be always at pref. size
 288         assertEquals(330, anchorpane.prefWidth(-1), 1e-100);
 289         assertEquals(400, anchorpane.prefHeight(-1), 1e-100);
 290 
 291         anchorpane.autosize();
 292         anchorpane.layout();
 293         assertEquals(10, child.getLayoutX(), 1e-100);
 294         assertEquals(0, child.getLayoutY(), 1e-100);
 295         assertEquals(300, child.getWidth(), 1e-100);
 296         assertEquals(400, child.getHeight(), 1e-100);
 297 
 298         anchorpane.resize(500,500);
 299         anchorpane.layout();
 300         assertEquals(10, child.getLayoutX(), 1e-100);
 301         assertEquals(0, child.getLayoutY(), 1e-100);
 302         assertEquals(470, child.getWidth(), 1e-100);
 303         assertEquals(400, child.getHeight(), 1e-100);
 304     }
 305 
 306     @Test public void testLeftTopRightAnchored() {
 307         AnchorPane anchorpane = new AnchorPane();
 308         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 309         anchorpane.setRightAnchor(child,20.0);
 310         anchorpane.setLeftAnchor(child, 10.0);
 311         anchorpane.setTopAnchor(child, 30.0);
 312         ParentShim.getChildren(anchorpane).add(child);
 313 
 314         assertEquals(130, anchorpane.minWidth(-1), 1e-100);
 315         assertEquals(430, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 316         assertEquals(330, anchorpane.prefWidth(-1), 1e-100);
 317         assertEquals(430, anchorpane.prefHeight(-1), 1e-100);
 318 
 319         anchorpane.autosize();
 320         anchorpane.layout();
 321         assertEquals(10, child.getLayoutX(), 1e-100);
 322         assertEquals(30, child.getLayoutY(), 1e-100);
 323         assertEquals(300, child.getWidth(), 1e-100);
 324         assertEquals(400, child.getHeight(), 1e-100);
 325 
 326         anchorpane.resize(500,500);
 327         anchorpane.layout();
 328         assertEquals(10, child.getLayoutX(), 1e-100);
 329         assertEquals(30, child.getLayoutY(), 1e-100);
 330         assertEquals(470, child.getWidth(), 1e-100);
 331         assertEquals(400, child.getHeight(), 1e-100);
 332     }
 333 
 334     @Test public void testLeftBottomRightAnchored() {
 335         AnchorPane anchorpane = new AnchorPane();
 336         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 337         anchorpane.setRightAnchor(child,20.0);
 338         anchorpane.setLeftAnchor(child, 10.0);
 339         anchorpane.setBottomAnchor(child, 30.0);
 340         ParentShim.getChildren(anchorpane).add(child);
 341 
 342         assertEquals(130, anchorpane.minWidth(-1), 1e-100);
 343         assertEquals(430, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 344         assertEquals(330, anchorpane.prefWidth(-1), 1e-100);
 345         assertEquals(430, anchorpane.prefHeight(-1), 1e-100);
 346 
 347         anchorpane.autosize();
 348         anchorpane.layout();
 349         assertEquals(10, child.getLayoutX(), 1e-100);
 350         assertEquals(0, child.getLayoutY(), 1e-100);
 351         assertEquals(300, child.getWidth(), 1e-100);
 352         assertEquals(400, child.getHeight(), 1e-100);
 353 
 354         anchorpane.resize(500,500);
 355         anchorpane.layout();
 356         assertEquals(10, child.getLayoutX(), 1e-100);
 357         assertEquals(70, child.getLayoutY(), 1e-100);
 358         assertEquals(470, child.getWidth(), 1e-100);
 359         assertEquals(400, child.getHeight(), 1e-100);
 360     }
 361 
 362     @Test public void testTopLeftBottomAnchored() {
 363         AnchorPane anchorpane = new AnchorPane();
 364         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 365         anchorpane.setTopAnchor(child,20.0);
 366         anchorpane.setBottomAnchor(child, 10.0);
 367         anchorpane.setLeftAnchor(child, 30.0);
 368         ParentShim.getChildren(anchorpane).add(child);
 369 
 370         assertEquals(330, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 371         assertEquals(230, anchorpane.minHeight(-1), 1e-100);
 372         assertEquals(330, anchorpane.prefWidth(-1), 1e-100);
 373         assertEquals(430, anchorpane.prefHeight(-1), 1e-100);
 374 
 375         anchorpane.autosize();
 376         anchorpane.layout();
 377         assertEquals(30, child.getLayoutX(), 1e-100);
 378         assertEquals(20, child.getLayoutY(), 1e-100);
 379         assertEquals(300, child.getWidth(), 1e-100);
 380         assertEquals(400, child.getHeight(), 1e-100);
 381 
 382         anchorpane.resize(500,500);
 383         anchorpane.layout();
 384         assertEquals(30, child.getLayoutX(), 1e-100);
 385         assertEquals(20, child.getLayoutY(), 1e-100);
 386         assertEquals(300, child.getWidth(), 1e-100);
 387         assertEquals(470, child.getHeight(), 1e-100);
 388     }
 389 
 390     @Test public void testTopRightBottomAnchored() {
 391         AnchorPane anchorpane = new AnchorPane();
 392         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 393         anchorpane.setTopAnchor(child,20.0);
 394         anchorpane.setBottomAnchor(child, 10.0);
 395         anchorpane.setRightAnchor(child, 30.0);
 396         ParentShim.getChildren(anchorpane).add(child);
 397 
 398         assertEquals(330, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 399         assertEquals(230, anchorpane.minHeight(-1), 1e-100);
 400         assertEquals(330, anchorpane.prefWidth(-1), 1e-100);
 401         assertEquals(430, anchorpane.prefHeight(-1), 1e-100);
 402 
 403         anchorpane.autosize();
 404         anchorpane.layout();
 405         assertEquals(0, child.getLayoutX(), 1e-100);
 406         assertEquals(20, child.getLayoutY(), 1e-100);
 407         assertEquals(300, child.getWidth(), 1e-100);
 408         assertEquals(400, child.getHeight(), 1e-100);
 409 
 410         anchorpane.resize(500,500);
 411         anchorpane.layout();
 412         assertEquals(170, child.getLayoutX(), 1e-100);
 413         assertEquals(20, child.getLayoutY(), 1e-100);
 414         assertEquals(300, child.getWidth(), 1e-100);
 415         assertEquals(470, child.getHeight(), 1e-100);
 416     }
 417 
 418     @Test public void testAllSidesAnchored() {
 419         AnchorPane anchorpane = new AnchorPane();
 420         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 421         anchorpane.setTopAnchor(child,20.0);
 422         anchorpane.setBottomAnchor(child, 10.0);
 423         anchorpane.setRightAnchor(child, 30.0);
 424         anchorpane.setLeftAnchor(child, 40.0);
 425         ParentShim.getChildren(anchorpane).add(child);
 426 
 427         assertEquals(170, anchorpane.minWidth(-1), 1e-100);
 428         assertEquals(230, anchorpane.minHeight(-1), 1e-100);
 429         assertEquals(370, anchorpane.prefWidth(-1), 1e-100);
 430         assertEquals(430, anchorpane.prefHeight(-1), 1e-100);
 431 
 432         anchorpane.autosize();
 433         anchorpane.layout();
 434         assertEquals(40, child.getLayoutX(), 1e-100);
 435         assertEquals(20, child.getLayoutY(), 1e-100);
 436         assertEquals(300, child.getWidth(), 1e-100);
 437         assertEquals(400, child.getHeight(), 1e-100);
 438 
 439         anchorpane.resize(500,500);
 440         anchorpane.layout();
 441         assertEquals(40, child.getLayoutX(), 1e-100);
 442         assertEquals(20, child.getLayoutY(), 1e-100);
 443         assertEquals(430, child.getWidth(), 1e-100);
 444         assertEquals(470, child.getHeight(), 1e-100);
 445     }
 446 
 447     @Test public void testAllSidesAnchoredWithPadding() {
 448         AnchorPane anchorpane = new AnchorPane();
 449         anchorpane.setPadding(new Insets(10,20,30,40));
 450         MockResizable child = new MockResizable(100,200, 300,400, 500,600);
 451         anchorpane.setTopAnchor(child,20.0);
 452         anchorpane.setBottomAnchor(child, 10.0);
 453         anchorpane.setRightAnchor(child, 30.0);
 454         anchorpane.setLeftAnchor(child, 40.0);
 455         ParentShim.getChildren(anchorpane).add(child);
 456 
 457         assertEquals(230, anchorpane.minWidth(-1), 1e-100);
 458         assertEquals(270, anchorpane.minHeight(-1), 1e-100);
 459         assertEquals(430, anchorpane.prefWidth(-1), 1e-100);
 460         assertEquals(470, anchorpane.prefHeight(-1), 1e-100);
 461 
 462         anchorpane.autosize();
 463         anchorpane.layout();
 464         assertEquals(80, child.getLayoutX(), 1e-100);
 465         assertEquals(30, child.getLayoutY(), 1e-100);
 466         assertEquals(300, child.getWidth(), 1e-100);
 467         assertEquals(400, child.getHeight(), 1e-100);
 468 
 469         anchorpane.resize(500,500);
 470         anchorpane.layout();
 471         assertEquals(80, child.getLayoutX(), 1e-100);
 472         assertEquals(30, child.getLayoutY(), 1e-100);
 473         assertEquals(370, child.getWidth(), 1e-100);
 474         assertEquals(430, child.getHeight(), 1e-100);
 475     }
 476 
 477     @Test public void testNonresizableAllSidesAnchored() {
 478         AnchorPane anchorpane = new AnchorPane();
 479         Rectangle child = new Rectangle(300,400);
 480         anchorpane.setTopAnchor(child,20.0);
 481         anchorpane.setBottomAnchor(child, 10.0);
 482         anchorpane.setRightAnchor(child, 30.0);
 483         anchorpane.setLeftAnchor(child, 40.0);
 484         ParentShim.getChildren(anchorpane).add(child);
 485 
 486         assertEquals(370, anchorpane.minWidth(-1), 1e-100);
 487         assertEquals(430, anchorpane.minHeight(-1), 1e-100);
 488         assertEquals(370, anchorpane.prefWidth(-1), 1e-100);
 489         assertEquals(430, anchorpane.prefHeight(-1), 1e-100);
 490 
 491         anchorpane.autosize();
 492         anchorpane.layout();
 493         assertEquals(40, child.getLayoutX(), 1e-100);
 494         assertEquals(20, child.getLayoutY(), 1e-100);
 495         assertEquals(300, child.getWidth(), 1e-100);
 496         assertEquals(400, child.getHeight(), 1e-100);
 497 
 498         anchorpane.resize(500,500);
 499         anchorpane.layout();
 500         // ends up being anchored just at the top-left (bottom-right anchors ignored)
 501         assertEquals(40, child.getLayoutX(), 1e-100);
 502         assertEquals(20, child.getLayoutY(), 1e-100);
 503         assertEquals(300, child.getWidth(), 1e-100);
 504         assertEquals(400, child.getHeight(), 1e-100);
 505     }
 506 
 507     @Test public void testAnchorPaneWithHorizontalBiasedChild() {
 508         AnchorPane anchorpane = new AnchorPane();
 509 
 510         MockBiased biased = new MockBiased(Orientation.HORIZONTAL, 100,100);
 511         Rectangle rect = new Rectangle(200,200);
 512 
 513         AnchorPane.setTopAnchor(biased, 10.0);
 514         AnchorPane.setLeftAnchor(biased, 10.0);
 515         AnchorPane.setRightAnchor(biased, 10.0);
 516 
 517         AnchorPane.setTopAnchor(rect, 10.0);
 518         AnchorPane.setLeftAnchor(rect, 10.0);
 519         AnchorPane.setBottomAnchor(rect, 10.0);
 520         AnchorPane.setRightAnchor(rect, 10.0);
 521 
 522         ParentShim.getChildren(anchorpane).addAll(biased, rect);
 523 
 524         assertEquals(220, anchorpane.prefWidth(-1), 1e-100);
 525         assertEquals(220, anchorpane.prefHeight(-1), 1e-100);
 526 
 527         anchorpane.autosize();
 528         anchorpane.layout();
 529         assertEquals(10.0, biased.getLayoutX(), 1e-100);
 530         assertEquals(10.0, biased.getLayoutY(), 1e-100);
 531         assertEquals(200, biased.getLayoutBounds().getWidth(), 1e-100);
 532         assertEquals(50, biased.getLayoutBounds().getHeight(), 1e-100);
 533         assertEquals(10.0, rect.getLayoutX(), 1e-100);
 534         assertEquals(10.0, rect.getLayoutY(), 1e-100);
 535         assertEquals(200, rect.getLayoutBounds().getWidth(), 1e-100);
 536         assertEquals(200, rect.getLayoutBounds().getHeight(), 1e-100);
 537 
 538         anchorpane.resize(420, 420);
 539         anchorpane.layout();
 540         assertEquals(10.0, biased.getLayoutX(), 1e-100);
 541         assertEquals(10.0, biased.getLayoutY(), 1e-100);
 542         assertEquals(400, biased.getLayoutBounds().getWidth(), 1e-100);
 543         assertEquals(25, biased.getLayoutBounds().getHeight(), 1e-100);
 544         assertEquals(10, rect.getLayoutX(), 1e-100);
 545         assertEquals(10, rect.getLayoutY(), 1e-100);
 546         assertEquals(200, rect.getLayoutBounds().getWidth(), 1e-100);
 547         assertEquals(200, rect.getLayoutBounds().getHeight(), 1e-100);
 548 
 549 
 550     }
 551 
 552     @Test public void testAnchorPaneWithVerticalBiasedChild() {
 553         AnchorPane anchorpane = new AnchorPane();
 554 
 555         MockBiased biased = new MockBiased(Orientation.VERTICAL, 100,100);
 556         Rectangle rect = new Rectangle(200,200);
 557 
 558         AnchorPane.setTopAnchor(biased, 10.0);
 559         AnchorPane.setLeftAnchor(biased, 10.0);
 560         AnchorPane.setBottomAnchor(biased, 10.0);
 561 
 562         AnchorPane.setTopAnchor(rect, 10.0);
 563         AnchorPane.setLeftAnchor(rect, 10.0);
 564         AnchorPane.setBottomAnchor(rect, 10.0);
 565         AnchorPane.setRightAnchor(rect, 10.0);
 566 
 567         ParentShim.getChildren(anchorpane).addAll(biased, rect);
 568 
 569         assertEquals(220, anchorpane.prefWidth(-1), 1e-100);
 570         assertEquals(220, anchorpane.prefHeight(-1), 1e-100);
 571 
 572         anchorpane.autosize();
 573         anchorpane.layout();
 574         assertEquals(10, biased.getLayoutX(), 1e-100);
 575         assertEquals(10, biased.getLayoutY(), 1e-100);
 576         assertEquals(50, biased.getLayoutBounds().getWidth(), 1e-100);
 577         assertEquals(200, biased.getLayoutBounds().getHeight(), 1e-100);
 578         assertEquals(10, rect.getLayoutX(), 1e-100);
 579         assertEquals(10, rect.getLayoutY(), 1e-100);
 580         assertEquals(200, rect.getLayoutBounds().getWidth(), 1e-100);
 581         assertEquals(200, rect.getLayoutBounds().getHeight(), 1e-100);
 582 
 583         anchorpane.resize(420, 420);
 584         anchorpane.layout();
 585         assertEquals(10, biased.getLayoutX(), 1e-100);
 586         assertEquals(10, biased.getLayoutY(), 1e-100);
 587         assertEquals(25, biased.getLayoutBounds().getWidth(), 1e-100);
 588         assertEquals(400, biased.getLayoutBounds().getHeight(), 1e-100);
 589         assertEquals(10, rect.getLayoutX(), 1e-100);
 590         assertEquals(10, rect.getLayoutY(), 1e-100);
 591         assertEquals(200, rect.getLayoutBounds().getWidth(), 1e-100);
 592         assertEquals(200, rect.getLayoutBounds().getHeight(), 1e-100);
 593 
 594 
 595     }
 596 
 597     @Test public void testAnchorPaneWithChildPrefSizeLessThanMinSize() {
 598         AnchorPane anchorpane = new AnchorPane();
 599         MockResizable resizable = new MockResizable(30, 30, 20, 20, Double.MAX_VALUE, Double.MAX_VALUE);
 600         ParentShim.getChildren(anchorpane).add(resizable);
 601 
 602         anchorpane.autosize();
 603         anchorpane.layout();
 604 
 605         assertEquals(0, resizable.getLayoutX(), 1e-100);
 606         assertEquals(0, resizable.getLayoutY(), 1e-100);
 607         assertEquals(30, resizable.getLayoutBounds().getWidth(), 1e-100);
 608         assertEquals(30, resizable.getLayoutBounds().getHeight(), 1e-100);
 609     }
 610 
 611     @Test public void testAnchorPanePrefHeightWithHorizontalBiasedChild_RT21745() {
 612         AnchorPane anchorpane = new AnchorPane();
 613 
 614         AnchorPane internalAnchorpane = new AnchorPane();
 615 
 616         MockBiased biased = new MockBiased(Orientation.HORIZONTAL, 30, 256);
 617 
 618         ParentShim.getChildren(internalAnchorpane).add(biased);
 619         ParentShim.getChildren(anchorpane).add(internalAnchorpane);
 620 
 621         anchorpane.resize(500, 500);
 622         anchorpane.layout();
 623 
 624         assertEquals(30, anchorpane.prefWidth(-1), 1e-100);
 625         assertEquals(256, anchorpane.prefHeight(-1), 1e-100);
 626         assertEquals(30, internalAnchorpane.prefWidth(-1), 1e-100);
 627         assertEquals(256, internalAnchorpane.prefHeight(-1), 1e-100);
 628     }
 629     
 630     @Test
 631     public void testTopAnchoredMinSizeOverridden() {
 632         AnchorPane anchorpane = new AnchorPane();
 633         MockResizable child = new MockResizable(300, 400, 100, 100, 500, 600);
 634         anchorpane.setTopAnchor(child, 10.0);
 635         ParentShim.getChildren(anchorpane).add(child);
 636 
 637         assertEquals(300, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 638         assertEquals(410, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 639         assertEquals(300, anchorpane.prefWidth(-1), 1e-100);
 640         assertEquals(410, anchorpane.prefHeight(-1), 1e-100);
 641 
 642         anchorpane.autosize();
 643         anchorpane.layout();
 644         assertEquals(0, child.getLayoutX(), 1e-100);
 645         assertEquals(10, child.getLayoutY(), 1e-100);
 646         assertEquals(300, child.getWidth(), 1e-100);
 647         assertEquals(400, child.getHeight(), 1e-100);
 648     }
 649     
 650     @Test
 651     public void testBottomAnchoredMinSizeOverridden() {
 652         AnchorPane anchorpane = new AnchorPane();
 653         MockResizable child = new MockResizable(300,400, 100,100, 500,600);
 654         anchorpane.setBottomAnchor(child, 10.0);
 655         ParentShim.getChildren(anchorpane).add(child);
 656 
 657         assertEquals(300, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 658         assertEquals(410, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 659         assertEquals(300, anchorpane.prefWidth(-1), 1e-100);
 660         assertEquals(410, anchorpane.prefHeight(-1), 1e-100);
 661 
 662         anchorpane.autosize();
 663         anchorpane.layout();
 664         assertEquals(0, child.getLayoutX(), 1e-100);
 665         assertEquals(0, child.getLayoutY(), 1e-100);
 666         assertEquals(300, child.getWidth(), 1e-100);
 667         assertEquals(400, child.getHeight(), 1e-100);
 668     }
 669     
 670     @Test public void testLeftAnchoredMinSizeOverridden() {
 671         AnchorPane anchorpane = new AnchorPane();
 672         MockResizable child = new MockResizable(300,400, 100,100, 500,600);
 673         anchorpane.setLeftAnchor(child, 10.0);
 674         ParentShim.getChildren(anchorpane).add(child);
 675 
 676         assertEquals(310, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 677         assertEquals(400, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 678         assertEquals(310, anchorpane.prefWidth(-1), 1e-100);
 679         assertEquals(400, anchorpane.prefHeight(-1), 1e-100);
 680 
 681         anchorpane.autosize();
 682         anchorpane.layout();
 683         assertEquals(10, child.getLayoutX(), 1e-100);
 684         assertEquals(0, child.getLayoutY(), 1e-100);
 685         assertEquals(300, child.getWidth(), 1e-100);
 686         assertEquals(400, child.getHeight(), 1e-100);
 687 
 688         anchorpane.resize(500,500);
 689         anchorpane.layout();
 690         assertEquals(10, child.getLayoutX(), 1e-100);
 691         assertEquals(0, child.getLayoutY(), 1e-100);
 692         assertEquals(300, child.getWidth(), 1e-100);
 693         assertEquals(400, child.getHeight(), 1e-100);
 694     }
 695     
 696     @Test public void testRightAnchoredMinSizeOverridden() {
 697         AnchorPane anchorpane = new AnchorPane();
 698         MockResizable child = new MockResizable(300,400, 100,100, 500,600);
 699         anchorpane.setRightAnchor(child, 10.0);
 700         ParentShim.getChildren(anchorpane).add(child);
 701 
 702         assertEquals(310, anchorpane.minWidth(-1), 1e-100); // Not restricted, at pref. width
 703         assertEquals(400, anchorpane.minHeight(-1), 1e-100); // Not restricted, at pref. height
 704         assertEquals(310, anchorpane.prefWidth(-1), 1e-100);
 705         assertEquals(400, anchorpane.prefHeight(-1), 1e-100);
 706 
 707         anchorpane.autosize();
 708         anchorpane.layout();
 709         assertEquals(0, child.getLayoutX(), 1e-100);
 710         assertEquals(0, child.getLayoutY(), 1e-100);
 711         assertEquals(300, child.getWidth(), 1e-100);
 712         assertEquals(400, child.getHeight(), 1e-100);
 713 
 714         anchorpane.resize(500,500);
 715         anchorpane.layout();
 716         assertEquals(190, child.getLayoutX(), 1e-100);
 717         assertEquals(0, child.getLayoutY(), 1e-100);
 718         assertEquals(300, child.getWidth(), 1e-100);
 719         assertEquals(400, child.getHeight(), 1e-100);
 720     }
 721 }