1 /* 2 * Copyright (c) 2011, 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 package javafx.scene; 26 27 import javafx.stage.Stage; 28 import com.sun.javafx.sg.prism.NGCamera; 29 import com.sun.javafx.sg.prism.NGSubScene; 30 import com.sun.javafx.tk.Toolkit; 31 import javafx.application.Platform; 32 import javafx.scene.layout.Pane; 33 import static org.junit.Assert.assertEquals; 34 import static org.junit.Assert.assertNull; 35 import org.junit.Test; 36 import static org.junit.Assert.assertTrue; 37 import static org.junit.Assert.fail; 38 39 public class SubSceneTest { 40 41 @Test 42 public void isOnFxAppThread() { 43 assertTrue(Platform.isFxApplicationThread()); 44 } 45 46 @Test(expected = NullPointerException.class) 47 public void testNullRoot() { 48 SubScene subScene = new SubScene(null, 10, 10); 49 } 50 51 @Test(expected = NullPointerException.class) 52 public void testSetNullRoot() { 53 SubScene subScene = new SubScene(new Group(), 10, 10); 54 subScene.setRoot(null); 55 } 56 57 @Test 58 public void testRootInitializedInConstructor() { 59 Group g = new Group(); 60 SubScene subScene = new SubScene(g, 10, 10); 61 62 assertEquals(g, subScene.getRoot()); 63 assertEquals(subScene, g.getSubScene()); 64 } 65 66 @Test 67 public void testWidthHeightInitializedInConstructor() { 68 int width = 600; 69 int height = 400; 70 SubScene subScene = new SubScene(new Group(), width, height); 71 72 assertTrue(subScene.getWidth() == width); 73 assertTrue(subScene.getHeight() == height); 74 } 75 76 @Test 77 public void testDepthBufferInitializedInConstructor() { 78 Group g = new Group(); 79 SubScene subScene = new SubScene(g, 10, 10, true, SceneAntialiasing.DISABLED); 80 81 assertTrue(subScene.isDepthBuffer()); 82 } 83 84 @Test 85 public void testNullAntiAliasingInitializedInConstructor() { 86 Group g = new Group(); 87 SubScene subScene = new SubScene(g, 10, 10, false, null); 88 89 assertTrue(subScene.getAntiAliasing() == null); 90 } 91 92 @Test 93 public void testAntiAliasingInitializedInConstructor() { 94 Group g = new Group(); 95 SubScene subScene = new SubScene(g, 10, 10, false, SceneAntialiasing.BALANCED); 96 97 assertTrue(subScene.getAntiAliasing() == SceneAntialiasing.BALANCED); 98 } 99 100 @Test 101 public void testRootUpdatedWhenAddedToSubScene() { 102 SubScene subScene = new SubScene(new Group(), 10, 10); 103 104 Group g = new Group(); 105 subScene.setRoot(g); 106 107 assertEquals(g, subScene.getRoot()); 108 assertEquals(subScene, g.getSubScene()); 109 } 110 111 @Test 112 public void testRootUpdatedWhenChangedInSubScene() { 113 Group g = new Group(); 114 SubScene subScene = new SubScene(g, 10, 10); 115 116 Group g2 = new Group(); 117 subScene.setRoot(g2); 118 119 assertNull(g.getSubScene()); 120 assertEquals(g2, subScene.getRoot()); 121 assertEquals(subScene, g2.getSubScene()); 122 } 123 124 @Test 125 public void testSetCamera() { 126 Camera camera = new PerspectiveCamera(); 127 SubScene subScene = new SubScene(new Group(camera), 100, 100); 128 Scene scene = new Scene(new Group(subScene)); 129 subScene.setCamera(camera); 130 assertEquals(subScene.getCamera(), camera); 131 assertNull(scene.getCamera()); 132 subScene.setCamera(camera); 133 } 134 135 @Test 136 public void testSetCameraToNestedSubScene() { 137 Camera camera = new PerspectiveCamera(); 138 SubScene nestedSubScene = new SubScene(new Group(camera), 100, 100); 139 SubScene subScene = new SubScene(new Group(nestedSubScene), 150, 150); 140 Scene scene = new Scene(new Group(subScene)); 141 nestedSubScene.setCamera(camera); 142 assertEquals(nestedSubScene.getCamera(), camera); 143 assertNull(subScene.getCamera()); 144 assertNull(scene.getCamera()); 145 } 146 147 @Test 148 public void testGetDefaultCamera() { 149 SubScene subScene = new SubScene(new Group(), 100, 100); 150 Scene scene = new Scene(new Group(subScene)); 151 assertNull(subScene.getCamera()); 152 } 153 154 @Test 155 public void testSetNullCamera() { 156 SubScene subScene = new SubScene(new Group(), 100, 100); 157 Scene scene = new Scene(new Group(subScene)); 158 subScene.setCamera(null); 159 assertNull(subScene.getCamera()); 160 } 161 162 @Test(expected = IllegalArgumentException.class) 163 public void testSetIllegalCameraFromOtherScene() { 164 Camera camera = new PerspectiveCamera(); 165 166 Scene scene = new Scene(new Group(camera)); 167 168 SubScene subScene = new SubScene(new Group(), 150, 150); 169 Scene otherScene = new Scene(new Group(subScene)); 170 171 scene.setCamera(camera); 172 subScene.setCamera(camera); 173 } 174 175 @Test(expected = IllegalArgumentException.class) 176 public void testSetIllegalCameraFromItsScene() { 177 Camera camera = new PerspectiveCamera(); 178 179 SubScene subScene = new SubScene(new Group(), 150, 150); 180 Scene scene = new Scene(new Group(camera, subScene)); 181 182 scene.setCamera(camera); 183 subScene.setCamera(camera); 184 } 185 186 @Test(expected = IllegalArgumentException.class) 187 public void testSetIllegalCameraFromOtherSubScene() { 188 Camera camera = new PerspectiveCamera(); 189 190 SubScene subScene = new SubScene(new Group(), 150, 150); 191 Scene scene = new Scene(new Group(subScene)); 192 193 SubScene otherSubScene = new SubScene(new Group(camera), 100, 100); 194 Scene otherScene = new Scene(new Group(otherSubScene)); 195 196 otherSubScene.setCamera(camera); 197 subScene.setCamera(camera); 198 } 199 200 @Test(expected = IllegalArgumentException.class) 201 public void testSetIllegalCameraFromSubScene() { 202 Camera camera = new PerspectiveCamera(); 203 204 SubScene subScene = new SubScene(new Group(), 150, 150); 205 Scene scene = new Scene(new Group(subScene)); 206 207 SubScene otherSubScene = new SubScene(new Group(camera), 100, 100); 208 209 otherSubScene.setCamera(camera); 210 subScene.setCamera(camera); 211 } 212 213 @Test(expected = IllegalArgumentException.class) 214 public void testSetIllegalCameraFromNestedSubScene() { 215 Camera camera = new PerspectiveCamera(); 216 217 SubScene nestedSubScene = new SubScene(new Group(camera), 100, 100); 218 SubScene subScene = new SubScene(new Group(nestedSubScene), 150, 150); 219 Scene scene = new Scene(new Group(subScene)); 220 221 nestedSubScene.setCamera(camera); 222 subScene.setCamera(camera); 223 } 224 225 @Test 226 public void testCameraUpdatesPG() { 227 SubScene sub = new SubScene(new Group(), 100, 100); 228 Scene scene = new Scene(new Group(sub), 300, 200); 229 Camera cam = new ParallelCamera(); 230 Stage stage = new Stage(); 231 stage.setScene(scene); 232 stage.show(); 233 234 sub.setCamera(cam); 235 Toolkit.getToolkit().firePulse(); 236 237 // verify it has correct owner 238 cam.setNearClip(20); 239 Toolkit.getToolkit().firePulse(); 240 NGSubScene peer = sub.impl_getPeer(); 241 assertEquals(20, peer.getCamera().getNearClip(), 0.00001); 242 243 sub.setCamera(null); // Sets the default camera, which is parallel camera 244 ParallelCamera pCam = new ParallelCamera(); // Like default cam 245 Toolkit.getToolkit().firePulse(); 246 // verify owner was removed 247 cam.setNearClip(30); 248 Toolkit.getToolkit().firePulse(); 249 assertEquals(pCam.getNearClip(), peer.getCamera().getNearClip(), 0.00001); 250 251 sub.setCamera(cam); 252 Toolkit.getToolkit().firePulse(); 253 // verify it has correct owner 254 cam.setNearClip(40); 255 Toolkit.getToolkit().firePulse(); 256 assertEquals(40, peer.getCamera().getNearClip(), 0.00001); 257 258 NGCamera oldCam = peer.getCamera(); 259 sub.setCamera(new ParallelCamera()); 260 Toolkit.getToolkit().firePulse(); 261 // verify owner was removed 262 cam.setNearClip(50); 263 Toolkit.getToolkit().firePulse(); 264 assertEquals(40, oldCam.getNearClip(), 0.00001); 265 assertEquals(0.1, peer.getCamera().getNearClip(), 0.00001); 266 } 267 268 @Test 269 public void testDefaultCameraUpdatesPG() { 270 SubScene sub = new SubScene(new Group(), 100, 100); 271 Scene scene = new Scene(new Group(sub), 300, 200); 272 Stage stage = new Stage(); 273 stage.setScene(scene); 274 stage.show(); 275 276 Toolkit.getToolkit().firePulse(); 277 Camera cam = sub.getEffectiveCamera(); 278 279 cam.setNearClip(20); 280 Toolkit.getToolkit().firePulse(); 281 NGSubScene peer = sub.impl_getPeer(); 282 assertEquals(20, peer.getCamera().getNearClip(), 0.00001); 283 } 284 285 @Test(expected=IllegalArgumentException.class) 286 public void subScenesCannotShareCamera() { 287 SubScene sub = new SubScene(new Group(), 100, 100); 288 SubScene sub2 = new SubScene(new Group(), 100, 100); 289 Scene scene = new Scene(new Group(sub, sub2), 300, 200); 290 Camera cam = new ParallelCamera(); 291 sub.setCamera(cam); 292 sub2.setCamera(cam); 293 } 294 295 @Test(expected=IllegalArgumentException.class) 296 public void sceneAndSubSceneCannotShareCamera() { 297 SubScene sub = new SubScene(new Group(), 100, 100); 298 Scene scene = new Scene(new Group(sub), 300, 200); 299 Camera cam = new ParallelCamera(); 300 scene.setCamera(cam); 301 sub.setCamera(cam); 302 } 303 304 @Test 305 public void shouldBeAbleToSetCameraTwiceToSubScene() { 306 SubScene sub = new SubScene(new Group(), 100, 100); 307 Scene scene = new Scene(new Group(sub), 300, 200); 308 Camera cam = new ParallelCamera(); 309 try { 310 sub.setCamera(cam); 311 sub.setCamera(cam); 312 } catch (IllegalArgumentException e) { 313 fail("It didn't allow to 'share' camera with myslef"); 314 } 315 } 316 317 @Test 318 public void testLayout() { 319 Pane pane = new Pane(); 320 pane.setPrefWidth(100); 321 322 SubScene sub = new SubScene(new Group(pane), 500, 500); 323 Scene scene = new Scene(new Group(sub), 600, 600); 324 325 scene.getRoot().layout(); 326 assertEquals(100, pane.getWidth(), 1e-10); 327 328 pane.setPrefWidth(110); 329 scene.getRoot().layout(); 330 assertEquals(110, pane.getWidth(), 1e-10); 331 332 333 } 334 }