modules/graphics/src/test/java/test/javafx/scene/Node_LocalToSceneTransform_Test.java

Print this page
rev 9250 : 8134762: Refactor Javafx graphics module tests for clear separation of tests
Reviewed-by:


   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;
  27 
  28 import com.sun.javafx.test.TransformHelper;
  29 import javafx.scene.transform.Translate;
  30 import javafx.scene.shape.Rectangle;
  31 import javafx.beans.Observable;
  32 import java.lang.reflect.Method;
  33 import javafx.beans.InvalidationListener;
  34 import javafx.beans.property.ReadOnlyObjectProperty;



  35 import javafx.scene.transform.Transform;
  36 import org.junit.Test;
  37 import static org.junit.Assert.*;
  38 
  39 public class Node_LocalToSceneTransform_Test {
  40     private boolean notified;
  41 
  42     @Test
  43     public void notTransformedNodeShouldReturnIdentity() {
  44         Node n = new Rectangle(20, 20);
  45         TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
  46                 1, 0, 0, 0,
  47                 0, 1, 0, 0,
  48                 0, 0, 1, 0);
  49     }
  50 
  51     @Test
  52     public void noListenersShouldBeAddedByDefault() throws Exception {
  53         Node r = new Rectangle(20, 20);
  54         Group n = new Group(r);
  55         Group p = new Group(n);
  56 
  57         p.getLocalToSceneTransform();
  58         n.getLocalToSceneTransform();
  59         r.getLocalToSceneTransform();
  60 
  61         p.setTranslateX(10);
  62         p.setRotate(80);
  63 
  64         // n didn't react on its parent's transformation
  65         TransformHelper.assertMatrix(n.getCurrentLocalToSceneTransformState(),
  66                 1, 0, 0, 0,
  67                 0, 1, 0, 0,
  68                 0, 0, 1, 0);
  69     }
  70 
  71     @Test
  72     public void shouldConsiderAllParents() {
  73         Node n = new Rectangle(20, 20);
  74         Group p1 = new Group(n);
  75         Group p2 = new Group(p1);
  76 
  77         n.setTranslateX(10);
  78         p1.setTranslateY(20);
  79         p2.getTransforms().add(new Translate(5, 6));
  80 
  81         TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
  82                 1, 0, 0, 15,
  83                 0, 1, 0, 26,
  84                 0, 0, 1, 0);
  85     }


 197         // enable listener
 198         notified = false;
 199         g2.setTranslateX(60);
 200         assertTrue(notified);
 201     }
 202 
 203     @Test
 204     public void shouldUnregisterListenersWhenNotNeeded() {
 205         final Node n = new Rectangle(20, 20);
 206         final Group p1 = new Group(n);
 207         final Group p2 = new Group(p1);
 208 
 209         InvalidationListener lstnr = o -> {
 210             n.getLocalToSceneTransform();
 211         };
 212 
 213         n.localToSceneTransformProperty().addListener(lstnr);
 214 
 215         // with listener on leave, parents update
 216         p2.setTranslateX(30);
 217         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 218                 1, 0, 0, 30,
 219                 0, 1, 0,  0,
 220                 0, 0, 1,  0);
 221 
 222         // without listener on leave, parents don't update
 223         n.localToSceneTransformProperty().removeListener(lstnr);
 224         p2.setTranslateX(60);
 225         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 226                 1, 0, 0, 30,
 227                 0, 1, 0,  0,
 228                 0, 0, 1,  0);
 229 
 230         // with listener on leave again, parents update again
 231         n.localToSceneTransformProperty().addListener(lstnr);
 232         p2.setTranslateX(90);
 233         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 234                 1, 0, 0, 90,
 235                 0, 1, 0,  0,
 236                 0, 0, 1,  0);
 237     }
 238 
 239     @Test
 240     public void shouldUnregisterListenersWhenNotNeededButStillUpdate() {
 241         final Node n = new Rectangle(20, 20);
 242         final Group p1 = new Group(n);
 243         final Group p2 = new Group(p1);
 244 
 245         InvalidationListener lstnr = o -> {
 246             n.getLocalToSceneTransform();
 247         };
 248 
 249         n.localToSceneTransformProperty().addListener(lstnr);
 250 
 251         // with listener on leave, parents update
 252         p2.setTranslateX(30);
 253         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 254                 1, 0, 0, 30,
 255                 0, 1, 0,  0,
 256                 0, 0, 1,  0);
 257 
 258         // without listener on leave, parents don't update immediately
 259         n.localToSceneTransformProperty().removeListener(lstnr);
 260         p2.setTranslateX(60);
 261         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 262                 1, 0, 0, 30,
 263                 0, 1, 0,  0,
 264                 0, 0, 1,  0);
 265 
 266         // ... but must do it on request:
 267         TransformHelper.assertMatrix(p1.getLocalToSceneTransform(),
 268                 1, 0, 0, 60,
 269                 0, 1, 0,  0,
 270                 0, 0, 1,  0);
 271     }
 272 
 273     @Test
 274     public void shouldUnregisterListenersWhenReparent() {
 275         final Node n = new Rectangle(20, 20);
 276         final Group p1 = new Group(n);
 277         final Group p2 = new Group(p1);
 278         final Group g = new Group();
 279 
 280         InvalidationListener lstnr = o -> {
 281             n.getLocalToSceneTransform();
 282         };
 283 
 284         n.localToSceneTransformProperty().addListener(lstnr);
 285 
 286         // with listener on leave, parents update
 287         p2.setTranslateX(30);
 288         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 289                 1, 0, 0, 30,
 290                 0, 1, 0,  0,
 291                 0, 0, 1,  0);
 292 
 293         // child with listener is moved away, parents stop updating
 294         g.getChildren().add(n);
 295         p2.setTranslateX(60);
 296         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 297                 1, 0, 0, 30,
 298                 0, 1, 0,  0,
 299                 0, 0, 1,  0);
 300 
 301         // leaf with listener moved back, parents update again
 302         p1.getChildren().add(n);
 303         p2.setTranslateX(90);
 304         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 305                 1, 0, 0, 90,
 306                 0, 1, 0,  0,
 307                 0, 0, 1,  0);
 308     }
 309 
 310     @Test
 311     public void shouldNotUnregisterListenerIfThereIsOtherReason() {
 312         final Node n = new Rectangle(20, 20);
 313         final Group p1 = new Group(n);
 314         final Group p2 = new Group(p1);
 315         final Group g = new Group();
 316 
 317         InvalidationListener nlstnr = o -> {
 318             n.getLocalToSceneTransform();
 319         };
 320         InvalidationListener plstnr = o -> {
 321             p1.getLocalToSceneTransform();
 322         };
 323 
 324         n.localToSceneTransformProperty().addListener(nlstnr);
 325         p1.localToSceneTransformProperty().addListener(plstnr);
 326 
 327         // with listeners, parents update
 328         p2.setTranslateX(30);
 329         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 330                 1, 0, 0, 30,
 331                 0, 1, 0,  0,
 332                 0, 0, 1,  0);
 333 
 334         // child moved away, but there is still listener on parent
 335         g.getChildren().add(n);
 336         p2.setTranslateX(60);
 337         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 338                 1, 0, 0, 60,
 339                 0, 1, 0,  0,
 340                 0, 0, 1,  0);
 341 
 342         // removed even the listener on parent, now we can stop updating
 343         p1.localToSceneTransformProperty().removeListener(plstnr);
 344         p2.setTranslateX(90);
 345         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 346                 1, 0, 0, 60,
 347                 0, 1, 0,  0,
 348                 0, 0, 1,  0);
 349 
 350         // return both listener and child
 351         p1.localToSceneTransformProperty().addListener(plstnr);
 352         p1.getChildren().add(n);
 353 
 354         // remove the listener, must still update because of the child
 355         p1.localToSceneTransformProperty().removeListener(plstnr);
 356         p2.setTranslateX(45);
 357         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 358                 1, 0, 0, 45,
 359                 0, 1, 0,  0,
 360                 0, 0, 1,  0);
 361 
 362         // remove the child as well, now we can stop updating
 363         g.getChildren().add(n);
 364         p2.setTranslateX(25);
 365         TransformHelper.assertMatrix(p1.getCurrentLocalToSceneTransformState(),
 366                 1, 0, 0, 45,
 367                 0, 1, 0,  0,
 368                 0, 0, 1,  0);
 369     }
 370 
 371     @Test
 372     public void shouldNotBeReusedWhenReferenceGivenToUser() {
 373 
 374         final Node n = new Rectangle(20, 20);
 375         final Group g = new Group(n);
 376 
 377         g.setTranslateX(200);
 378         Transform t1 = n.getLocalToSceneTransform();
 379         TransformHelper.assertMatrix(t1,
 380                 1, 0, 0, 200,
 381                 0, 1, 0, 0,
 382                 0, 0, 1, 0);
 383 
 384         g.setTranslateX(300);
 385         Transform t2 = n.getLocalToSceneTransform();




   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.Translate;
  30 import javafx.scene.shape.Rectangle;
  31 import javafx.beans.Observable;
  32 import java.lang.reflect.Method;
  33 import javafx.beans.InvalidationListener;
  34 import javafx.beans.property.ReadOnlyObjectProperty;
  35 import javafx.scene.Group;
  36 import javafx.scene.Node;
  37 import javafx.scene.NodeShim;
  38 import javafx.scene.transform.Transform;
  39 import org.junit.Test;
  40 import static org.junit.Assert.*;
  41 
  42 public class Node_LocalToSceneTransform_Test {
  43     private boolean notified;
  44 
  45     @Test
  46     public void notTransformedNodeShouldReturnIdentity() {
  47         Node n = new Rectangle(20, 20);
  48         TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
  49                 1, 0, 0, 0,
  50                 0, 1, 0, 0,
  51                 0, 0, 1, 0);
  52     }
  53 
  54     @Test
  55     public void noListenersShouldBeAddedByDefault() throws Exception {
  56         Node r = new Rectangle(20, 20);
  57         Group n = new Group(r);
  58         Group p = new Group(n);
  59 
  60         p.getLocalToSceneTransform();
  61         n.getLocalToSceneTransform();
  62         r.getLocalToSceneTransform();
  63 
  64         p.setTranslateX(10);
  65         p.setRotate(80);
  66 
  67         // n didn't react on its parent's transformation
  68         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(n),
  69                 1, 0, 0, 0,
  70                 0, 1, 0, 0,
  71                 0, 0, 1, 0);
  72     }
  73 
  74     @Test
  75     public void shouldConsiderAllParents() {
  76         Node n = new Rectangle(20, 20);
  77         Group p1 = new Group(n);
  78         Group p2 = new Group(p1);
  79 
  80         n.setTranslateX(10);
  81         p1.setTranslateY(20);
  82         p2.getTransforms().add(new Translate(5, 6));
  83 
  84         TransformHelper.assertMatrix(n.getLocalToSceneTransform(),
  85                 1, 0, 0, 15,
  86                 0, 1, 0, 26,
  87                 0, 0, 1, 0);
  88     }


 200         // enable listener
 201         notified = false;
 202         g2.setTranslateX(60);
 203         assertTrue(notified);
 204     }
 205 
 206     @Test
 207     public void shouldUnregisterListenersWhenNotNeeded() {
 208         final Node n = new Rectangle(20, 20);
 209         final Group p1 = new Group(n);
 210         final Group p2 = new Group(p1);
 211 
 212         InvalidationListener lstnr = o -> {
 213             n.getLocalToSceneTransform();
 214         };
 215 
 216         n.localToSceneTransformProperty().addListener(lstnr);
 217 
 218         // with listener on leave, parents update
 219         p2.setTranslateX(30);
 220         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 221                 1, 0, 0, 30,
 222                 0, 1, 0,  0,
 223                 0, 0, 1,  0);
 224 
 225         // without listener on leave, parents don't update
 226         n.localToSceneTransformProperty().removeListener(lstnr);
 227         p2.setTranslateX(60);
 228         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 229                 1, 0, 0, 30,
 230                 0, 1, 0,  0,
 231                 0, 0, 1,  0);
 232 
 233         // with listener on leave again, parents update again
 234         n.localToSceneTransformProperty().addListener(lstnr);
 235         p2.setTranslateX(90);
 236         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 237                 1, 0, 0, 90,
 238                 0, 1, 0,  0,
 239                 0, 0, 1,  0);
 240     }
 241 
 242     @Test
 243     public void shouldUnregisterListenersWhenNotNeededButStillUpdate() {
 244         final Node n = new Rectangle(20, 20);
 245         final Group p1 = new Group(n);
 246         final Group p2 = new Group(p1);
 247 
 248         InvalidationListener lstnr = o -> {
 249             n.getLocalToSceneTransform();
 250         };
 251 
 252         n.localToSceneTransformProperty().addListener(lstnr);
 253 
 254         // with listener on leave, parents update
 255         p2.setTranslateX(30);
 256         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 257                 1, 0, 0, 30,
 258                 0, 1, 0,  0,
 259                 0, 0, 1,  0);
 260 
 261         // without listener on leave, parents don't update immediately
 262         n.localToSceneTransformProperty().removeListener(lstnr);
 263         p2.setTranslateX(60);
 264         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 265                 1, 0, 0, 30,
 266                 0, 1, 0,  0,
 267                 0, 0, 1,  0);
 268 
 269         // ... but must do it on request:
 270         TransformHelper.assertMatrix(p1.getLocalToSceneTransform(),
 271                 1, 0, 0, 60,
 272                 0, 1, 0,  0,
 273                 0, 0, 1,  0);
 274     }
 275 
 276     @Test
 277     public void shouldUnregisterListenersWhenReparent() {
 278         final Node n = new Rectangle(20, 20);
 279         final Group p1 = new Group(n);
 280         final Group p2 = new Group(p1);
 281         final Group g = new Group();
 282 
 283         InvalidationListener lstnr = o -> {
 284             n.getLocalToSceneTransform();
 285         };
 286 
 287         n.localToSceneTransformProperty().addListener(lstnr);
 288 
 289         // with listener on leave, parents update
 290         p2.setTranslateX(30);
 291         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 292                 1, 0, 0, 30,
 293                 0, 1, 0,  0,
 294                 0, 0, 1,  0);
 295 
 296         // child with listener is moved away, parents stop updating
 297         g.getChildren().add(n);
 298         p2.setTranslateX(60);
 299         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 300                 1, 0, 0, 30,
 301                 0, 1, 0,  0,
 302                 0, 0, 1,  0);
 303 
 304         // leaf with listener moved back, parents update again
 305         p1.getChildren().add(n);
 306         p2.setTranslateX(90);
 307         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 308                 1, 0, 0, 90,
 309                 0, 1, 0,  0,
 310                 0, 0, 1,  0);
 311     }
 312 
 313     @Test
 314     public void shouldNotUnregisterListenerIfThereIsOtherReason() {
 315         final Node n = new Rectangle(20, 20);
 316         final Group p1 = new Group(n);
 317         final Group p2 = new Group(p1);
 318         final Group g = new Group();
 319 
 320         InvalidationListener nlstnr = o -> {
 321             n.getLocalToSceneTransform();
 322         };
 323         InvalidationListener plstnr = o -> {
 324             p1.getLocalToSceneTransform();
 325         };
 326 
 327         n.localToSceneTransformProperty().addListener(nlstnr);
 328         p1.localToSceneTransformProperty().addListener(plstnr);
 329 
 330         // with listeners, parents update
 331         p2.setTranslateX(30);
 332         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 333                 1, 0, 0, 30,
 334                 0, 1, 0,  0,
 335                 0, 0, 1,  0);
 336 
 337         // child moved away, but there is still listener on parent
 338         g.getChildren().add(n);
 339         p2.setTranslateX(60);
 340         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 341                 1, 0, 0, 60,
 342                 0, 1, 0,  0,
 343                 0, 0, 1,  0);
 344 
 345         // removed even the listener on parent, now we can stop updating
 346         p1.localToSceneTransformProperty().removeListener(plstnr);
 347         p2.setTranslateX(90);
 348         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 349                 1, 0, 0, 60,
 350                 0, 1, 0,  0,
 351                 0, 0, 1,  0);
 352 
 353         // return both listener and child
 354         p1.localToSceneTransformProperty().addListener(plstnr);
 355         p1.getChildren().add(n);
 356 
 357         // remove the listener, must still update because of the child
 358         p1.localToSceneTransformProperty().removeListener(plstnr);
 359         p2.setTranslateX(45);
 360         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 361                 1, 0, 0, 45,
 362                 0, 1, 0,  0,
 363                 0, 0, 1,  0);
 364 
 365         // remove the child as well, now we can stop updating
 366         g.getChildren().add(n);
 367         p2.setTranslateX(25);
 368         TransformHelper.assertMatrix(NodeShim.getCurrentLocalToSceneTransformState(p1),
 369                 1, 0, 0, 45,
 370                 0, 1, 0,  0,
 371                 0, 0, 1,  0);
 372     }
 373 
 374     @Test
 375     public void shouldNotBeReusedWhenReferenceGivenToUser() {
 376 
 377         final Node n = new Rectangle(20, 20);
 378         final Group g = new Group(n);
 379 
 380         g.setTranslateX(200);
 381         Transform t1 = n.getLocalToSceneTransform();
 382         TransformHelper.assertMatrix(t1,
 383                 1, 0, 0, 200,
 384                 0, 1, 0, 0,
 385                 0, 0, 1, 0);
 386 
 387         g.setTranslateX(300);
 388         Transform t2 = n.getLocalToSceneTransform();