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