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 }