1 /* 2 * Copyright (c) 2010, 2014, 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; 27 28 import test.com.sun.javafx.test.TransformHelper; 29 import javafx.scene.transform.Transform; 30 import javafx.scene.transform.Translate; 31 import javafx.scene.shape.Rectangle; 32 import javafx.beans.Observable; 33 import javafx.beans.InvalidationListener; 34 import javafx.scene.Node; 35 import org.junit.Test; 36 import static org.junit.Assert.*; 37 38 public class Node_LocalToParentTransform_Test { 39 private boolean notified; 40 41 @Test 42 public void notTransformedNodeShouldReturnIdentity() { 43 Node n = new Rectangle(20, 20); 44 TransformHelper.assertMatrix(n.getLocalToParentTransform(), 45 1, 0, 0, 0, 46 0, 1, 0, 0, 47 0, 0, 1, 0); 48 } 49 50 @Test 51 public void shouldConsiderBothTransformListAndConvenientTransforms() { 52 Node n = new Rectangle(20, 20); 53 54 n.setTranslateX(10); 55 n.setScaleY(10); 56 n.getTransforms().add(new Translate(5, 6)); 57 58 TransformHelper.assertMatrix(n.getLocalToParentTransform(), 59 1, 0, 0, 15, 60 0, 10, 0, -30, 61 0, 0, 1, 0); 62 } 63 64 @Test 65 public void shouldBeUpToDate() { 66 Node n = new Rectangle(20, 20); 67 68 n.setTranslateX(10); 69 70 TransformHelper.assertMatrix(n.getLocalToParentTransform(), 71 1, 0, 0, 10, 72 0, 1, 0, 0, 73 0, 0, 1, 0); 74 75 n.setTranslateX(20); 76 77 TransformHelper.assertMatrix(n.getLocalToParentTransform(), 78 1, 0, 0, 20, 79 0, 1, 0, 0, 80 0, 0, 1, 0); 81 } 82 83 @Test 84 public void shouldBeNotifiedWhenNodeTransforms() { 85 final Node n = new Rectangle(20, 20); 86 n.localToParentTransformProperty().addListener(o -> { 87 if (!notified) { 88 notified = true; 89 TransformHelper.assertMatrix(n.getLocalToParentTransform(), 90 1, 0, 0, 10, 91 0, 1, 0, 20, 92 0, 0, 1, 0); 93 } 94 }); 95 96 notified = false; 97 n.getTransforms().add(new Translate(10, 20)); 98 assertTrue(notified); 99 100 n.getTransforms().clear(); 101 n.getTransforms().add(new Translate(10, 0)); 102 n.getLocalToParentTransform(); 103 104 notified = false; 105 n.setTranslateY(20); 106 assertTrue(notified); 107 } 108 109 @Test 110 public void shouldNotBeReusedWhenReferenceGivenToUser() { 111 final Node n = new Rectangle(20, 20); 112 113 n.setTranslateX(200); 114 Transform t1 = n.getLocalToParentTransform(); 115 TransformHelper.assertMatrix(t1, 116 1, 0, 0, 200, 117 0, 1, 0, 0, 118 0, 0, 1, 0); 119 120 n.setTranslateX(300); 121 Transform t2 = n.getLocalToParentTransform(); 122 TransformHelper.assertMatrix(t2, 123 1, 0, 0, 300, 124 0, 1, 0, 0, 125 0, 0, 1, 0); 126 127 assertFalse(t1 == t2); 128 TransformHelper.assertMatrix(t1, 129 1, 0, 0, 200, 130 0, 1, 0, 0, 131 0, 0, 1, 0); 132 } 133 }