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 com.sun.javafx.FXUnit; 29 import com.sun.javafx.pgstub.StubToolkit; 30 import com.sun.javafx.sg.prism.NGGroup; 31 import com.sun.javafx.tk.Toolkit; 32 import javafx.scene.shape.Rectangle; 33 import javafx.stage.Stage; 34 import org.junit.Before; 35 import org.junit.Rule; 36 import org.junit.Test; 37 38 import static org.junit.Assert.*; 39 40 /** 41 * Tests to make sure the synchronization of children between a Parent and PGGroup 42 * works as expected. 43 */ 44 public class Parent_structure_sync_Test { 45 46 @Rule 47 public FXUnit fx = new FXUnit(); 48 49 private Rectangle r1, r2, r3, r4, r5; 50 private Parent parent; 51 private NGGroup peer; 52 53 @Before public void setup() { 54 parent = new Group(); 55 r1 = new Rectangle(0, 0, 10, 10); 56 r2 = new Rectangle(0, 0, 10, 10); 57 r3 = new Rectangle(0, 0, 10, 10); 58 r4 = new Rectangle(0, 0, 10, 10); 59 r5 = new Rectangle(0, 0, 10, 10); 60 peer = parent.impl_getPeer(); 61 62 Scene scene = new Scene(parent); 63 Stage stage = new Stage(); 64 stage.setScene(scene); 65 stage.show(); 66 67 sync(); 68 } 69 70 private void sync() { 71 ((StubToolkit) Toolkit.getToolkit()).firePulse(); 72 } 73 74 @Test public void emptyParentShouldHaveEmptyPGGroup() { 75 assertTrue(peer.getChildren().isEmpty()); 76 } 77 78 @Test public void childAddedToEmptyParentShouldBeInPGGroup() { 79 parent.getChildren().add(r1); 80 sync(); 81 assertEquals(1, peer.getChildren().size()); 82 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 83 } 84 85 @Test public void childrenAddedToEmptyParentShouldAllBeInPGGroup() { 86 parent.getChildren().addAll(r1, r2, r3); 87 sync(); 88 assertEquals(3, peer.getChildren().size()); 89 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 90 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 91 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 92 } 93 94 @Test public void addingAChildToTheBack() { 95 parent.getChildren().addAll(r2, r3, r4); 96 sync(); 97 parent.getChildren().add(0, r1); 98 sync(); 99 assertEquals(4, peer.getChildren().size()); 100 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 101 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 102 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 103 assertSame(r4.impl_getPeer(), peer.getChildren().get(3)); 104 } 105 106 @Test public void addingAChildToTheFront() { 107 parent.getChildren().addAll(r1, r2, r3); 108 sync(); 109 parent.getChildren().add(r4); 110 sync(); 111 assertEquals(4, peer.getChildren().size()); 112 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 113 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 114 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 115 assertSame(r4.impl_getPeer(), peer.getChildren().get(3)); 116 } 117 118 @Test public void addingAChildToTheCenter() { 119 parent.getChildren().addAll(r1, r2, r4); 120 sync(); 121 parent.getChildren().add(2, r3); 122 sync(); 123 assertEquals(4, peer.getChildren().size()); 124 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 125 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 126 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 127 assertSame(r4.impl_getPeer(), peer.getChildren().get(3)); 128 } 129 130 @Test public void removingAChildFromTheFront() { 131 parent.getChildren().addAll(r1, r2, r3, r4); 132 sync(); 133 parent.getChildren().remove(3); 134 sync(); 135 assertEquals(3, peer.getChildren().size()); 136 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 137 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 138 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 139 } 140 141 @Test public void removingAChildFromTheBack() { 142 parent.getChildren().addAll(r4, r1, r2, r3); 143 sync(); 144 parent.getChildren().remove(0); 145 sync(); 146 assertEquals(3, peer.getChildren().size()); 147 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 148 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 149 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 150 } 151 152 @Test public void removingAChildFromTheCenter() { 153 parent.getChildren().addAll(r1, r2, r4, r3); 154 sync(); 155 parent.getChildren().remove(2); 156 sync(); 157 assertEquals(3, peer.getChildren().size()); 158 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 159 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 160 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 161 } 162 163 @Test public void movingAChildFromTheBackToTheFront() { 164 parent.getChildren().addAll(r4, r1, r2, r3); 165 sync(); 166 r4.toFront(); 167 sync(); 168 assertEquals(4, peer.getChildren().size()); 169 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 170 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 171 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 172 assertSame(r4.impl_getPeer(), peer.getChildren().get(3)); 173 } 174 175 @Test public void movingAChildFromTheBackToTheFrontAndAddingAChild() { 176 parent.getChildren().addAll(r4, r1, r2, r3); 177 sync(); 178 r4.toFront(); 179 parent.getChildren().add(r5); 180 sync(); 181 assertEquals(5, peer.getChildren().size()); 182 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 183 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 184 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 185 assertSame(r4.impl_getPeer(), peer.getChildren().get(3)); 186 assertSame(r5.impl_getPeer(), peer.getChildren().get(4)); 187 } 188 189 @Test public void movingAChildFromTheBackToTheFrontAndRemovingAChild() { 190 parent.getChildren().addAll(r3, r1, r4, r2); 191 sync(); 192 r3.toFront(); 193 parent.getChildren().remove(1); 194 sync(); 195 assertEquals(3, peer.getChildren().size()); 196 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 197 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 198 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 199 } 200 201 @Test public void movingAChildFromTheBackToTheFrontAndThenRemovingTheChild() { 202 parent.getChildren().addAll(r4, r1, r2, r3); 203 sync(); 204 r4.toFront(); 205 parent.getChildren().remove(3); 206 sync(); 207 assertEquals(3, peer.getChildren().size()); 208 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 209 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 210 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 211 } 212 213 @Test public void movingAChildFromTheCenterToTheFront() { 214 parent.getChildren().addAll(r1, r2, r4, r3); 215 sync(); 216 r4.toFront(); 217 sync(); 218 assertEquals(4, peer.getChildren().size()); 219 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 220 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 221 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 222 assertSame(r4.impl_getPeer(), peer.getChildren().get(3)); 223 } 224 225 @Test public void movingAChildFromTheCenterToTheBack() { 226 parent.getChildren().addAll(r2, r3, r1, r4); 227 sync(); 228 r1.toBack(); 229 sync(); 230 assertEquals(4, peer.getChildren().size()); 231 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 232 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 233 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 234 assertSame(r4.impl_getPeer(), peer.getChildren().get(3)); 235 } 236 237 @Test public void movingAChildFromTheCenterToTheFrontAndAddingAChild() { 238 parent.getChildren().addAll(r1, r2, r4, r3); 239 sync(); 240 r4.toFront(); 241 parent.getChildren().add(r5); 242 sync(); 243 assertEquals(5, peer.getChildren().size()); 244 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 245 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 246 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 247 assertSame(r4.impl_getPeer(), peer.getChildren().get(3)); 248 assertSame(r5.impl_getPeer(), peer.getChildren().get(4)); 249 } 250 251 @Test public void movingAChildFromTheCenterToTheFrontAndRemovingAChild() { 252 parent.getChildren().addAll(r1, r2, r3, r4); 253 sync(); 254 r3.toFront(); 255 parent.getChildren().remove(2); 256 sync(); 257 assertEquals(3, peer.getChildren().size()); 258 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 259 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 260 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 261 } 262 263 @Test public void movingAChildFromTheCenterToTheFrontAndThenRemovingTheChild() { 264 parent.getChildren().addAll(r1, r2, r4, r3); 265 sync(); 266 r4.toFront(); 267 parent.getChildren().remove(3); 268 sync(); 269 assertEquals(3, peer.getChildren().size()); 270 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 271 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 272 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 273 } 274 275 @Test public void movingAChildFromTheFrontToTheBack() { 276 parent.getChildren().addAll(r2, r3, r4, r1); 277 sync(); 278 r1.toBack(); 279 sync(); 280 assertEquals(4, peer.getChildren().size()); 281 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 282 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 283 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 284 assertSame(r4.impl_getPeer(), peer.getChildren().get(3)); 285 } 286 287 @Test public void movingAChildFromTheFrontToTheBackAndAddingAChild() { 288 parent.getChildren().addAll(r2, r3, r4, r1); 289 sync(); 290 r1.toBack(); 291 parent.getChildren().add(r5); 292 sync(); 293 assertEquals(5, peer.getChildren().size()); 294 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 295 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 296 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 297 assertSame(r4.impl_getPeer(), peer.getChildren().get(3)); 298 assertSame(r5.impl_getPeer(), peer.getChildren().get(4)); 299 } 300 301 @Test public void movingAChildFromTheFrontToTheBackAndRemovingAChild() { 302 parent.getChildren().addAll(r2, r3, r4, r1); 303 sync(); 304 r1.toBack(); 305 parent.getChildren().remove(3); 306 sync(); 307 assertEquals(3, peer.getChildren().size()); 308 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 309 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 310 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 311 } 312 313 @Test public void movingAChildFromTheFrontToTheBackAndThenRemovingTheChild() { 314 parent.getChildren().addAll(r1, r2, r3, r4); 315 sync(); 316 r4.toBack(); 317 parent.getChildren().remove(0); 318 sync(); 319 assertEquals(3, peer.getChildren().size()); 320 assertSame(r1.impl_getPeer(), peer.getChildren().get(0)); 321 assertSame(r2.impl_getPeer(), peer.getChildren().get(1)); 322 assertSame(r3.impl_getPeer(), peer.getChildren().get(2)); 323 } 324 }