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 javafx.scene; 27 28 import static org.junit.Assert.assertEquals; 29 import static org.junit.Assert.assertFalse; 30 import static org.junit.Assert.assertTrue; 31 import javafx.scene.shape.Rectangle; 32 33 import org.junit.Test; 34 35 /** 36 * Tests for depth test features. 37 * 38 */ 39 public class DepthTestTest { 40 41 /** 42 * Tests the default value for a single node with no parent 43 */ 44 @Test public void testDepthTestSingleDefault() { 45 Node node = new Rectangle(); 46 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 47 assertTrue(node.isDerivedDepthTest()); 48 } 49 50 /** 51 * Tests the default values for a group node with a child node 52 */ 53 @Test public void testDepthTestParentChildDefaults() { 54 Group group = new Group(); 55 Node node = new Rectangle(); 56 group.getChildren().add(node); 57 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 58 assertTrue(group.isDerivedDepthTest()); 59 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 60 assertTrue(node.isDerivedDepthTest()); 61 validate(group, true); 62 } 63 64 /** 65 * Tests setting the value for a single node with no parent 66 */ 67 @Test public void testDepthTestSingleSet() { 68 Node node = new Rectangle(); 69 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 70 assertTrue(node.isDerivedDepthTest()); 71 72 node.setDepthTest(DepthTest.DISABLE); 73 assertEquals(node.getDepthTest(), DepthTest.DISABLE); 74 assertFalse(node.isDerivedDepthTest()); 75 76 node.setDepthTest(DepthTest.ENABLE); 77 assertEquals(node.getDepthTest(), DepthTest.ENABLE); 78 assertTrue(node.isDerivedDepthTest()); 79 80 node.setDepthTest(DepthTest.INHERIT); 81 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 82 assertTrue(node.isDerivedDepthTest()); 83 } 84 85 /** 86 * Tests setting values for a group node with a child node 87 */ 88 @Test public void testDepthTestParentChildSet() { 89 Group group = new Group(); 90 Node node = new Rectangle(); 91 group.getChildren().add(node); 92 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 93 assertTrue(group.isDerivedDepthTest()); 94 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 95 assertTrue(node.isDerivedDepthTest()); 96 validate(group, true); 97 98 node.setDepthTest(DepthTest.DISABLE); 99 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 100 assertTrue(group.isDerivedDepthTest()); 101 assertEquals(node.getDepthTest(), DepthTest.DISABLE); 102 assertFalse(node.isDerivedDepthTest()); 103 validate(group, true); 104 105 node.setDepthTest(DepthTest.ENABLE); 106 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 107 assertTrue(group.isDerivedDepthTest()); 108 assertEquals(node.getDepthTest(), DepthTest.ENABLE); 109 assertTrue(node.isDerivedDepthTest()); 110 validate(group, true); 111 112 node.setDepthTest(DepthTest.INHERIT); 113 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 114 assertTrue(group.isDerivedDepthTest()); 115 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 116 assertTrue(node.isDerivedDepthTest()); 117 validate(group, true); 118 119 group.setDepthTest(DepthTest.DISABLE); 120 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 121 assertFalse(group.isDerivedDepthTest()); 122 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 123 assertFalse(node.isDerivedDepthTest()); 124 validate(group, true); 125 126 node.setDepthTest(DepthTest.DISABLE); 127 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 128 assertFalse(group.isDerivedDepthTest()); 129 assertEquals(node.getDepthTest(), DepthTest.DISABLE); 130 assertFalse(node.isDerivedDepthTest()); 131 validate(group, true); 132 133 node.setDepthTest(DepthTest.ENABLE); 134 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 135 assertFalse(group.isDerivedDepthTest()); 136 assertEquals(node.getDepthTest(), DepthTest.ENABLE); 137 assertTrue(node.isDerivedDepthTest()); 138 validate(group, true); 139 140 node.setDepthTest(DepthTest.INHERIT); 141 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 142 assertFalse(group.isDerivedDepthTest()); 143 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 144 assertFalse(node.isDerivedDepthTest()); 145 validate(group, true); 146 147 group.setDepthTest(DepthTest.INHERIT); 148 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 149 assertTrue(group.isDerivedDepthTest()); 150 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 151 assertTrue(node.isDerivedDepthTest()); 152 validate(group, true); 153 154 group.setDepthTest(DepthTest.DISABLE); 155 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 156 assertFalse(group.isDerivedDepthTest()); 157 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 158 assertFalse(node.isDerivedDepthTest()); 159 validate(group, true); 160 161 node.setDepthTest(DepthTest.ENABLE); 162 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 163 assertFalse(group.isDerivedDepthTest()); 164 assertEquals(node.getDepthTest(), DepthTest.ENABLE); 165 assertTrue(node.isDerivedDepthTest()); 166 validate(group, true); 167 168 node.setDepthTest(DepthTest.DISABLE); 169 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 170 assertFalse(group.isDerivedDepthTest()); 171 assertEquals(node.getDepthTest(), DepthTest.DISABLE); 172 assertFalse(node.isDerivedDepthTest()); 173 validate(group, true); 174 175 group.setDepthTest(DepthTest.INHERIT); 176 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 177 assertTrue(group.isDerivedDepthTest()); 178 assertEquals(node.getDepthTest(), DepthTest.DISABLE); 179 assertFalse(node.isDerivedDepthTest()); 180 validate(group, true); 181 182 group.setDepthTest(DepthTest.ENABLE); 183 assertEquals(group.getDepthTest(), DepthTest.ENABLE); 184 assertTrue(group.isDerivedDepthTest()); 185 assertEquals(node.getDepthTest(), DepthTest.DISABLE); 186 assertFalse(node.isDerivedDepthTest()); 187 validate(group, true); 188 } 189 190 /** 191 * Tests setting values for a group node with a child node, and ensures 192 * that the state is correct when adding and removing the child node. 193 */ 194 @Test public void testDepthTestParentChildRemove() { 195 Group group = new Group(); 196 Node node = new Rectangle(); 197 group.getChildren().add(node); 198 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 199 assertTrue(group.isDerivedDepthTest()); 200 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 201 assertTrue(node.isDerivedDepthTest()); 202 validate(group, true); 203 204 group.setDepthTest(DepthTest.DISABLE); 205 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 206 assertFalse(group.isDerivedDepthTest()); 207 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 208 assertFalse(node.isDerivedDepthTest()); 209 validate(group, true); 210 211 group.getChildren().remove(node); 212 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 213 assertFalse(group.isDerivedDepthTest()); 214 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 215 assertTrue(node.isDerivedDepthTest()); 216 validate(group, true); 217 validate(node, true); 218 219 group.getChildren().add(node); 220 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 221 assertFalse(group.isDerivedDepthTest()); 222 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 223 assertFalse(node.isDerivedDepthTest()); 224 validate(group, true); 225 226 group.setDepthTest(DepthTest.INHERIT); 227 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 228 assertTrue(group.isDerivedDepthTest()); 229 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 230 assertTrue(node.isDerivedDepthTest()); 231 validate(group, true); 232 233 group.getChildren().remove(node); 234 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 235 assertTrue(group.isDerivedDepthTest()); 236 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 237 assertTrue(node.isDerivedDepthTest()); 238 validate(group, true); 239 validate(node, true); 240 241 group.setDepthTest(DepthTest.DISABLE); 242 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 243 assertFalse(group.isDerivedDepthTest()); 244 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 245 assertTrue(node.isDerivedDepthTest()); 246 validate(group, true); 247 validate(node, true); 248 249 group.getChildren().add(node); 250 assertEquals(group.getDepthTest(), DepthTest.DISABLE); 251 assertFalse(group.isDerivedDepthTest()); 252 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 253 assertFalse(node.isDerivedDepthTest()); 254 validate(group, true); 255 256 group.setDepthTest(DepthTest.INHERIT); 257 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 258 assertTrue(group.isDerivedDepthTest()); 259 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 260 assertTrue(node.isDerivedDepthTest()); 261 validate(group, true); 262 } 263 264 /** 265 * Tests two levels of children and ensures that the state is correct when 266 * adding and removing the second group. 267 */ 268 @Test public void testDepthTestMutliParentChildRemove() { 269 Group root = new Group(); 270 Group group = new Group(); 271 root.getChildren().add(group); 272 Node node = new Rectangle(); 273 group.getChildren().add(node); 274 validate(root, true); 275 276 root.setDepthTest(DepthTest.DISABLE); 277 assertEquals(root.getDepthTest(), DepthTest.DISABLE); 278 assertFalse(root.isDerivedDepthTest()); 279 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 280 assertFalse(group.isDerivedDepthTest()); 281 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 282 assertFalse(node.isDerivedDepthTest()); 283 validate(root, true); 284 285 root.getChildren().remove(group); 286 assertEquals(root.getDepthTest(), DepthTest.DISABLE); 287 assertFalse(root.isDerivedDepthTest()); 288 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 289 assertTrue(group.isDerivedDepthTest()); 290 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 291 assertTrue(node.isDerivedDepthTest()); 292 validate(root, true); 293 validate(group, true); 294 295 root.getChildren().add(group); 296 assertEquals(root.getDepthTest(), DepthTest.DISABLE); 297 assertFalse(root.isDerivedDepthTest()); 298 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 299 assertFalse(group.isDerivedDepthTest()); 300 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 301 assertFalse(node.isDerivedDepthTest()); 302 validate(root, true); 303 304 root.setDepthTest(DepthTest.INHERIT); 305 assertEquals(root.getDepthTest(), DepthTest.INHERIT); 306 assertTrue(root.isDerivedDepthTest()); 307 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 308 assertTrue(group.isDerivedDepthTest()); 309 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 310 assertTrue(node.isDerivedDepthTest()); 311 validate(root, true); 312 } 313 314 /** 315 * Tests two levels of children and ensures that the state is correct when 316 * reparenting a group of nodes. 317 */ 318 @Test public void testDepthTestReparent() { 319 Group root1 = new Group(); 320 Group root2 = new Group(); 321 322 Group group = new Group(); 323 root1.getChildren().add(group); 324 Node node = new Rectangle(); 325 group.getChildren().add(node); 326 validate(root1, true); 327 validate(root2, true); 328 329 root1.setDepthTest(DepthTest.DISABLE); 330 assertEquals(root1.getDepthTest(), DepthTest.DISABLE); 331 assertFalse(root1.isDerivedDepthTest()); 332 assertEquals(root2.getDepthTest(), DepthTest.INHERIT); 333 assertTrue(root2.isDerivedDepthTest()); 334 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 335 assertFalse(group.isDerivedDepthTest()); 336 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 337 assertFalse(node.isDerivedDepthTest()); 338 validate(root1, true); 339 validate(root2, true); 340 341 root2.getChildren().add(group); 342 assertEquals(root1.getDepthTest(), DepthTest.DISABLE); 343 assertFalse(root1.isDerivedDepthTest()); 344 assertEquals(root2.getDepthTest(), DepthTest.INHERIT); 345 assertTrue(root2.isDerivedDepthTest()); 346 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 347 assertTrue(group.isDerivedDepthTest()); 348 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 349 assertTrue(node.isDerivedDepthTest()); 350 validate(root1, true); 351 validate(root2, true); 352 353 root2.setDepthTest(DepthTest.DISABLE); 354 assertEquals(root1.getDepthTest(), DepthTest.DISABLE); 355 assertFalse(root1.isDerivedDepthTest()); 356 assertEquals(root2.getDepthTest(), DepthTest.DISABLE); 357 assertFalse(root2.isDerivedDepthTest()); 358 assertEquals(group.getDepthTest(), DepthTest.INHERIT); 359 assertFalse(group.isDerivedDepthTest()); 360 assertEquals(node.getDepthTest(), DepthTest.INHERIT); 361 assertFalse(node.isDerivedDepthTest()); 362 validate(root1, true); 363 validate(root2, true); 364 } 365 366 private void validate(Node n, boolean parentDerivedDepthTest) { 367 boolean nodeDerivedDepthTest = n.getDepthTest() == DepthTest.INHERIT 368 ? parentDerivedDepthTest 369 : n.getDepthTest() == DepthTest.ENABLE; 370 assertEquals(nodeDerivedDepthTest, n.isDerivedDepthTest()); 371 if (n instanceof Group) { 372 Group g = (Group) n; 373 for (Node child : g.getChildren()) { 374 validate(child, nodeDerivedDepthTest); 375 } 376 } 377 } 378 379 }