1 /*
2 * Copyright (c) 2012, 2015, 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 test.javafx.scene.input;
27
28 import test.com.sun.javafx.pgstub.StubScene;
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.Random;
32 import javafx.event.Event;
33 import javafx.scene.Group;
34 import javafx.scene.Scene;
35 import javafx.scene.shape.Rectangle;
36 import javafx.stage.Stage;
37 import javafx.event.EventHandler;
38 import javafx.geometry.Point3D;
39 import javafx.scene.ParentShim;
40 import javafx.scene.input.PickResult;
41 import javafx.scene.input.TouchEvent;
42 import javafx.scene.input.TouchPoint;
43 import org.junit.Assert;
44 import org.junit.Ignore;
45 import org.junit.Test;
46 import static org.junit.Assert.*;
47
190 Assert.assertEquals(true, event.isAltDown());
191 Assert.assertEquals(false, event.isMetaDown());
192 break;
193 case 2:
194 Assert.assertEquals(false, event.isShiftDown());
195 Assert.assertEquals(true, event.isControlDown());
196 Assert.assertEquals(false, event.isAltDown());
197 Assert.assertEquals(true, event.isMetaDown());
198 break;
199 case 3:
200 Assert.assertEquals(false, event.isShiftDown());
201 Assert.assertEquals(true, event.isControlDown());
202 Assert.assertEquals(true, event.isAltDown());
203 Assert.assertEquals(false, event.isMetaDown());
204 break;
205 default:
206 fail("Wrong touch point id " + event.getTouchPoint().getId());
207 }
208 });
209
210 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
211 System.currentTimeMillis(), 1, true, true, false, true, false);
212 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
213 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
214 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
215
216 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
217 System.currentTimeMillis(), 1, true, false, true, false, true);
218 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
219 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
220 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
221
222 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
223 System.currentTimeMillis(), 1, true, false, true, true, false);
224 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
225 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
226 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
227
228 assertEquals(3, touched);
229 }
230
231 @Test
232 public void shouldCountTouchesCorrectly() {
233 Scene scene = createScene();
234 Rectangle rect =
235 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
236
237 touched = 0;
238 rect.addEventHandler(TouchEvent.ANY, event -> {
239 touched++;
240 switch(touched) {
241 case 1:
242 Assert.assertEquals(1, event.getTouchCount());
243 Assert.assertEquals(1, event.getTouchPoints().size());
244 break;
245 case 2:
246 case 3:
247 Assert.assertEquals(2, event.getTouchCount());
248 Assert.assertEquals(2, event.getTouchPoints().size());
249 break;
250 case 4:
251 case 5:
252 Assert.assertEquals(2, event.getTouchCount());
253 Assert.assertEquals(2, event.getTouchPoints().size());
254 break;
255 case 6:
256 Assert.assertEquals(1, event.getTouchCount());
257 Assert.assertEquals(1, event.getTouchPoints().size());
258 break;
259 default:
260 fail("Wrong touch point id " + event.getTouchPoint().getId());
261 }
262 });
263
264 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
265 System.currentTimeMillis(), 1, true, true, false, true, false);
266 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
267 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
268 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
269
270 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
271 System.currentTimeMillis(), 2, true, false, true, false, true);
272 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
273 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
274 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
275 TouchPoint.State.PRESSED, 2, 120, 120, 110, 110);
276 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
277
278 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
279 System.currentTimeMillis(), 2, true, false, true, true, false);
280 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
281 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
282 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
283 TouchPoint.State.RELEASED, 2, 120, 120, 110, 110);
284 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
285
286 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
287 System.currentTimeMillis(), 1, true, false, true, true, false);
288 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
289 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
290 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
291
292 assertEquals(6, touched);
293 }
294
295 @Test
296 public void shouldGenerateCorrectEventSetIDs() {
297 Scene scene = createScene();
298 Rectangle rect =
299 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
300
301 touched = 0;
302 rect.addEventHandler(TouchEvent.ANY, event -> {
303 touched++;
304 switch(touched) {
305 case 1:
306 Assert.assertEquals(1, event.getEventSetId());
307 break;
308 case 2:
309 case 3:
310 Assert.assertEquals(2, event.getEventSetId());
311 break;
312 case 4:
313 case 5:
314 Assert.assertEquals(3, event.getEventSetId());
315 break;
316 case 6:
317 Assert.assertEquals(4, event.getEventSetId());
318 break;
319 default:
320 fail("Wrong touch point id " + event.getTouchPoint().getId());
321 }
322 });
323
324 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
325 System.currentTimeMillis(), 1, true, true, false, true, false);
326 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
327 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
328 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
329
330 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
331 System.currentTimeMillis(), 2, true, false, true, false, true);
332 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
333 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
334 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
335 TouchPoint.State.PRESSED, 2, 120, 120, 110, 110);
336 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
337
338 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
339 System.currentTimeMillis(), 2, true, false, true, true, false);
340 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
341 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
342 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
343 TouchPoint.State.RELEASED, 2, 120, 120, 110, 110);
344 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
345
346 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
347 System.currentTimeMillis(), 1, true, false, true, true, false);
348 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
349 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
350 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
351
352 assertEquals(6, touched);
353 }
354
355 @Test
356 public void shouldReIDTouchPoints() {
357 Scene scene = createScene();
358 Rectangle rect =
359 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
360
361 touched = 0;
362 rect.setOnTouchPressed(event -> {
363 touched++;
364 switch(event.getTouchPoint().getId()) {
365 case 1:
366 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
367 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
368 assertEquals(1, touched);
369 break;
370 case 2:
371 Assert.assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
372 Assert.assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
373 assertEquals(2, touched);
374 break;
375 case 3:
376 Assert.assertEquals(130.0, event.getTouchPoint().getX(), 0.0001);
377 Assert.assertEquals(130.0, event.getTouchPoint().getY(), 0.0001);
378 assertEquals(3, touched);
379 break;
380 default:
381 fail("Wrong touch point id " + event.getTouchPoint().getId());
382 }
383 });
384
385 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
386 System.currentTimeMillis(), 3, true, false, false, false, false);
387 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
388 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
389 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
390 TouchPoint.State.PRESSED, 1, 120, 120, 120, 120);
391 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
392 TouchPoint.State.PRESSED, 152, 130, 130, 130, 130);
393 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
394
395 assertEquals(3, touched);
396 }
397
398 @Test
399 public void shouldNotReuseTouchPointID() {
400 Scene scene = createScene();
401 Rectangle rect =
402 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
403
404 touched = 0;
405 rect.setOnTouchPressed(event -> {
406 touched++;
407 switch(event.getTouchPoint().getId()) {
408 case 1:
409 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
410 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
411 assertEquals(1, touched);
412 break;
413 case 2:
414 Assert.assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
415 Assert.assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
416 assertEquals(2, touched);
417 break;
418 case 3:
419 Assert.assertEquals(130.0, event.getTouchPoint().getX(), 0.0001);
420 Assert.assertEquals(130.0, event.getTouchPoint().getY(), 0.0001);
421 assertEquals(3, touched);
422 break;
423 default:
424 fail("Wrong touch point id " + event.getTouchPoint().getId());
425 }
426 });
427
428 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
429 System.currentTimeMillis(), 2, true, false, false, false, false);
430 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
431 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
432 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
433 TouchPoint.State.PRESSED, 1, 120, 120, 120, 120);
434 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
435
436 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
437 System.currentTimeMillis(), 2, true, false, false, false, false);
438 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
439 TouchPoint.State.STATIONARY, 1368, 110, 110, 110, 110);
440 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
441 TouchPoint.State.RELEASED, 1, 120, 120, 120, 120);
442 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
443
444 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
445 System.currentTimeMillis(), 2, true, false, false, false, false);
446 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
447 TouchPoint.State.STATIONARY, 1368, 110, 110, 110, 110);
448 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
449 TouchPoint.State.PRESSED, 1, 130, 130, 130, 130);
450 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
451
452 assertEquals(3, touched);
453 }
454
455 @Test
456 public void shouldMaintainPressOrder() {
457 Scene scene = createScene();
458 Rectangle rect =
459 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
460
461 touched = 0;
462 rect.setOnTouchPressed(event -> {
463 touched++;
464 switch(event.getTouchPoint().getId()) {
465 case 1:
466 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
467 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
468 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
469 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
470 assertEquals(1, touched);
471 break;
472 case 2:
473 Assert.assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
474 Assert.assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
475 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
476 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
477 assertEquals(2, touched);
478 break;
479 case 3:
480 Assert.assertEquals(130.0, event.getTouchPoint().getX(), 0.0001);
481 Assert.assertEquals(130.0, event.getTouchPoint().getY(), 0.0001);
482 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
483 Assert.assertEquals(3, event.getTouchPoints().get(1).getId());
484 assertEquals(3, touched);
485 break;
486 default:
487 fail("Wrong touch point id " + event.getTouchPoint().getId());
488 }
489 });
490
491 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
492 System.currentTimeMillis(), 2, true, false, false, false, false);
493 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
494 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
495 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
496 TouchPoint.State.PRESSED, 1, 120, 120, 120, 120);
497 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
498
499 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
500 System.currentTimeMillis(), 2, true, false, false, false, false);
501 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
502 TouchPoint.State.RELEASED, 1, 120, 120, 120, 120);
503 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
504 TouchPoint.State.STATIONARY, 1368, 110, 110, 110, 110);
505 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
506
507 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
508 System.currentTimeMillis(), 2, true, false, false, false, false);
509 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
510 TouchPoint.State.PRESSED, 1, 130, 130, 130, 130);
511 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
512 TouchPoint.State.STATIONARY, 1368, 110, 110, 110, 110);
513 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
514
515 assertEquals(3, touched);
516 }
517
518 @Test
519 public void shouldMaintainIDMapping() {
520 Scene scene = createScene();
521 Rectangle rect =
522 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
523
524 touched = 0;
525 rect.setOnTouchPressed(event -> {
526 touched++;
527 switch(event.getTouchPoint().getId()) {
528 case 1:
529 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
530 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
531 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
532 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
533 assertEquals(1, touched);
549 switch(event.getTouchPoint().getId()) {
550 case 1:
551 Assert.assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
552 Assert.assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
553 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
554 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
555 assertEquals(3, touched);
556 break;
557 case 2:
558 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
559 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
560 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
561 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
562 assertEquals(4, touched);
563 break;
564 default:
565 fail("Wrong touch point id " + event.getTouchPoint().getId());
566 }
567 });
568
569 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
570 System.currentTimeMillis(), 2, true, false, false, false, false);
571 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
572 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
573 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
574 TouchPoint.State.PRESSED, 127, 120, 120, 120, 120);
575 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
576
577 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
578 System.currentTimeMillis(), 2, true, false, false, false, false);
579 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
580 TouchPoint.State.MOVED, 127, 110, 110, 110, 110);
581 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
582 TouchPoint.State.MOVED, 1368, 120, 120, 120, 120);
583 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
584
585 assertEquals(4, touched);
586 }
587
588 @Test
589 public void shouldMaintainIDMappingInDynamicConditions() {
590 Scene scene = createScene();
591 Rectangle rect =
592 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
593
594 touched = 0;
595 rect.setOnTouchPressed(event -> {
596 touched++;
597 switch(event.getTouchPoint().getId()) {
598 case 1:
599 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
600 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
601 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
602 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
603 assertEquals(1, touched);
626 switch(event.getTouchPoint().getId()) {
627 case 2:
628 Assert.assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
629 Assert.assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
630 Assert.assertEquals(2, event.getTouchPoints().get(0).getId());
631 Assert.assertEquals(3, event.getTouchPoints().get(1).getId());
632 assertEquals(4, touched);
633 break;
634 case 3:
635 Assert.assertEquals(160.0, event.getTouchPoint().getX(), 0.0001);
636 Assert.assertEquals(160.0, event.getTouchPoint().getY(), 0.0001);
637 Assert.assertEquals(2, event.getTouchPoints().get(0).getId());
638 Assert.assertEquals(3, event.getTouchPoints().get(1).getId());
639 assertEquals(5, touched);
640 break;
641 default:
642 fail("Wrong touch point id " + event.getTouchPoint().getId());
643 }
644 });
645
646 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
647 System.currentTimeMillis(), 2, true, false, false, false, false);
648 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
649 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
650 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
651 TouchPoint.State.PRESSED, 127, 120, 120, 120, 120);
652 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
653
654 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
655 System.currentTimeMillis(), 2, true, false, false, false, false);
656 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
657 TouchPoint.State.STATIONARY, 127, 120, 120, 120, 120);
658 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
659 TouchPoint.State.RELEASED, 1368, 120, 120, 120, 120);
660 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
661
662 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
663 System.currentTimeMillis(), 2, true, false, false, false, false);
664 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
665 TouchPoint.State.PRESSED, 11, 160, 160, 160, 160);
666 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
667 TouchPoint.State.STATIONARY, 127, 120, 120, 120, 120);
668 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
669
670 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
671 System.currentTimeMillis(), 2, true, false, false, false, false);
672 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
673 TouchPoint.State.MOVED, 11, 160, 160, 160, 160);
674 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
675 TouchPoint.State.MOVED, 127, 120, 120, 120, 120);
676 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
677
678 assertEquals(5, touched);
679 }
680
681 @Test
682 public void shouldResetIDsAfterGesture() {
683 Scene scene = createScene();
684 Rectangle rect =
685 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
686
687 touched = 0;
688 rect.addEventHandler(TouchEvent.ANY, event -> {
689 touched++;
690 switch(touched) {
691 case 1:
692 case 2:
693 Assert.assertEquals(1, event.getEventSetId());
694 Assert.assertEquals(touched, event.getTouchPoint().getId());
695 break;
696 case 3:
697 case 4:
698 Assert.assertEquals(2, event.getEventSetId());
699 Assert.assertEquals(touched - 2, event.getTouchPoint().getId());
700 break;
701 case 5:
702 case 6:
703 Assert.assertEquals(1, event.getEventSetId());
704 Assert.assertEquals(touched - 4, event.getTouchPoint().getId());
705 break;
706 case 7:
707 case 8:
708 Assert.assertEquals(2, event.getEventSetId());
709 Assert.assertEquals(touched - 6, event.getTouchPoint().getId());
710 break;
711 default:
712 fail("Wrong touch point id " + event.getTouchPoint().getId());
713 }
714 });
715
716 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
717 System.currentTimeMillis(), 2, true, true, false, true, false);
718 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
719 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
720 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
721 TouchPoint.State.PRESSED, 2, 120, 120, 110, 110);
722 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
723
724 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
725 System.currentTimeMillis(), 2, true, false, true, true, false);
726 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
727 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
728 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
729 TouchPoint.State.RELEASED, 2, 120, 120, 110, 110);
730 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
731
732 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
733 System.currentTimeMillis(), 2, true, true, false, true, false);
734 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
735 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
736 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
737 TouchPoint.State.PRESSED, 2, 120, 120, 110, 110);
738 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
739
740 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
741 System.currentTimeMillis(), 2, true, false, true, true, false);
742 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
743 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
744 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
745 TouchPoint.State.RELEASED, 2, 120, 120, 110, 110);
746 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
747
748
749 assertEquals(8, touched);
750 }
751
752 @Test
753 public void touchPointsShouldContainTouchPoint() {
754 Scene scene = createScene();
755 Rectangle rect =
756 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
757
758 touched = 0;
759 rect.addEventHandler(TouchEvent.ANY, event -> {
760 touched++;
761 switch(touched) {
762 case 1:
763 case 3:
764 assertSame(event.getTouchPoint(), event.getTouchPoints().get(0));
765 break;
766 case 2:
767 case 4:
768 assertSame(event.getTouchPoint(), event.getTouchPoints().get(1));
769 break;
770 default:
771 fail("Wrong touch point id " + event.getTouchPoint().getId());
772 }
773 });
774
775 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
776 System.currentTimeMillis(), 2, true, true, false, true, false);
777 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
778 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
779 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
780 TouchPoint.State.PRESSED, 2, 120, 120, 110, 110);
781 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
782
783 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
784 System.currentTimeMillis(), 2, true, true, false, true, false);
785 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
786 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
787 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
788 TouchPoint.State.RELEASED, 2, 120, 120, 110, 110);
789 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
790
791 assertEquals(4, touched);
792 }
793
794 @Test
795 public void touchPointsShouldHaveCorrectTarget() {
796 Scene scene = createScene();
797
798 final Rectangle rect1 =
799 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
800
801 final Rectangle rect2 =
802 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
803
804 touched = 0;
805 rect1.addEventHandler(TouchEvent.ANY, event -> {
806 touched++;
807 assertSame(rect1, event.getTouchPoint().getTarget());
808 assertSame(rect2, event.getTouchPoints().get(1).getTarget());
809 });
810 rect2.addEventHandler(TouchEvent.ANY, event -> {
811 touched++;
812 assertSame(rect2, event.getTouchPoint().getTarget());
813 assertSame(rect1, event.getTouchPoints().get(0).getTarget());
814 });
815
816 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
817 System.currentTimeMillis(), 2, true, true, false, true, false);
818 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
819 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
820 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
821 TouchPoint.State.PRESSED, 2, 220, 220, 220, 220);
822 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
823
824 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
825 System.currentTimeMillis(), 2, true, true, false, true, false);
826 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
827 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
828 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
829 TouchPoint.State.RELEASED, 2, 220, 220, 220, 220);
830 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
831
832 assertEquals(4, touched);
833 }
834
835 @Test
836 public void shouldCompute3dCoordinates() {
837 Scene scene = createScene();
838 Rectangle rect =
839 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
840 rect.setTranslateZ(50);
841
842 touched = 0;
843 rect.addEventHandler(TouchEvent.ANY, event -> {
844 touched++;
845 Assert.assertEquals(110, event.getTouchPoint().getX(), 0.00001);
846 Assert.assertEquals(110, event.getTouchPoint().getY(), 0.00001);
847 Assert.assertEquals(0, event.getTouchPoint().getZ(), 0.00001);
848 });
849
850 scene.addEventHandler(TouchEvent.ANY, event -> {
851 touched++;
852 Assert.assertEquals(110, event.getTouchPoint().getX(), 0.00001);
853 Assert.assertEquals(110, event.getTouchPoint().getY(), 0.00001);
854 Assert.assertEquals(50, event.getTouchPoint().getZ(), 0.00001);
855 });
856
857 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
858 System.currentTimeMillis(), 1, true, true, false, true, false);
859 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
860 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
861 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
862
863 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
864 System.currentTimeMillis(), 1, true, false, true, false, true);
865 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
866 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
867 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
868
869 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
870 System.currentTimeMillis(), 1, true, false, true, true, false);
871 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
872 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
873 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
874
875 assertEquals(6, touched);
876 }
877
878 @Test
879 public void touchPointsShouldHaveCorrectPickResult() {
880 Scene scene = createScene();
881
882 final Rectangle rect1 =
883 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
884
885 final Rectangle rect2 =
886 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
887
888 touched = 0;
889 rect1.addEventHandler(TouchEvent.ANY, event -> {
890 touched++;
891 assertSame(rect1, event.getTouchPoint().getTarget());
892 assertSame(rect2, event.getTouchPoints().get(1).getTarget());
893 PickResult res1 = event.getTouchPoint().getPickResult();
944 assertEquals(0, res1.getIntersectedPoint().getZ(), 0.00001);
945 break;
946 case 4:
947 assertNotNull(res1);
948 assertSame(rect2, res1.getIntersectedNode());
949 assertEquals(220, res1.getIntersectedPoint().getX(), 0.00001);
950 assertEquals(220, res1.getIntersectedPoint().getY(), 0.00001);
951 assertEquals(0, res1.getIntersectedPoint().getZ(), 0.00001);
952
953 assertNotNull(res2);
954 assertSame(rect1, res2.getIntersectedNode());
955 assertEquals(110, res2.getIntersectedPoint().getX(), 0.00001);
956 assertEquals(110, res2.getIntersectedPoint().getY(), 0.00001);
957 assertEquals(0, res1.getIntersectedPoint().getZ(), 0.00001);
958 break;
959 default:
960 fail("Wrong event delivered");
961 }
962 });
963
964 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
965 System.currentTimeMillis(), 2, true, true, false, true, false);
966 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
967 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
968 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
969 TouchPoint.State.PRESSED, 2, 220, 220, 220, 220);
970 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
971
972 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
973 System.currentTimeMillis(), 2, true, true, false, true, false);
974 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
975 TouchPoint.State.MOVED, 1, 220, 220, 220, 220);
976 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
977 TouchPoint.State.MOVED, 2, 110, 110, 110, 110);
978 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
979
980 assertEquals(4, touched);
981 }
982
983 @Test
984 public void testTouchPointsBelongsTo() {
985 final Scene scene = createScene();
986
987 final Rectangle rect1 =
988 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
989
990 final Rectangle rect2 =
991 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
992
993 touched = 0;
994 rect1.addEventHandler(TouchEvent.ANY, event -> {
995 touched++;
996 assertTrue(event.getTouchPoint().belongsTo(rect1));
997 assertTrue(event.getTouchPoint().belongsTo(scene.getRoot()));
998 assertTrue(event.getTouchPoint().belongsTo(scene));
999 assertFalse(event.getTouchPoint().belongsTo(rect2));
1000
1001 assertFalse(event.getTouchPoints().get(1).belongsTo(rect1));
1002 assertTrue(event.getTouchPoints().get(1).belongsTo(scene.getRoot()));
1003 assertTrue(event.getTouchPoints().get(1).belongsTo(scene));
1004 assertTrue(event.getTouchPoints().get(1).belongsTo(rect2));
1005 });
1006 rect2.addEventHandler(TouchEvent.ANY, event -> {
1007 touched++;
1008 assertTrue(event.getTouchPoint().belongsTo(rect2));
1009 assertTrue(event.getTouchPoint().belongsTo(scene.getRoot()));
1010 assertTrue(event.getTouchPoint().belongsTo(scene));
1011 assertFalse(event.getTouchPoint().belongsTo(rect1));
1012
1013 assertFalse(event.getTouchPoints().get(0).belongsTo(rect2));
1014 assertTrue(event.getTouchPoints().get(0).belongsTo(scene.getRoot()));
1015 assertTrue(event.getTouchPoints().get(0).belongsTo(scene));
1016 assertTrue(event.getTouchPoints().get(0).belongsTo(rect1));
1017 });
1018
1019 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1020 System.currentTimeMillis(), 2, true, true, false, true, false);
1021 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1022 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1023 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1024 TouchPoint.State.PRESSED, 2, 220, 220, 220, 220);
1025 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1026
1027 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1028 System.currentTimeMillis(), 2, true, true, false, true, false);
1029 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1030 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
1031 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1032 TouchPoint.State.RELEASED, 2, 220, 220, 220, 220);
1033 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1034
1035 assertEquals(4, touched);
1036 }
1037
1038 @Test
1039 public void shouldPickAndGrabTouchPoints() {
1040 Scene scene = createScene();
1041 final Rectangle rect1 =
1042 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1043
1044 final Rectangle rect2 =
1045 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
1046
1047 touched = 0;
1048 rect1.addEventHandler(TouchEvent.ANY, event -> {
1049 touched++;
1050 switch(touched) {
1051 case 1:
1052 Assert.assertEquals(1, event.getTouchPoint().getId());
1053 Assert.assertEquals(150.0, event.getTouchPoint().getX(), 0.0001);
1080 Assert.assertEquals(265.0, event.getTouchPoint().getY(), 0.0001);
1081 Assert.assertEquals(260.0, event.getTouchPoint().getSceneX(), 0.0001);
1082 Assert.assertEquals(265.0, event.getTouchPoint().getSceneY(), 0.0001);
1083 Assert.assertEquals(1260.0, event.getTouchPoint().getScreenX(), 0.0001);
1084 Assert.assertEquals(1265.0, event.getTouchPoint().getScreenY(), 0.0001);
1085 break;
1086 case 4:
1087 Assert.assertEquals(2, event.getTouchPoint().getId());
1088 Assert.assertEquals(160.0, event.getTouchPoint().getX(), 0.0001);
1089 Assert.assertEquals(165.0, event.getTouchPoint().getY(), 0.0001);
1090 Assert.assertEquals(160.0, event.getTouchPoint().getSceneX(), 0.0001);
1091 Assert.assertEquals(165.0, event.getTouchPoint().getSceneY(), 0.0001);
1092 Assert.assertEquals(1160.0, event.getTouchPoint().getScreenX(), 0.0001);
1093 Assert.assertEquals(1165.0, event.getTouchPoint().getScreenY(), 0.0001);
1094 break;
1095 default:
1096 fail("Wrong touch point delivery");
1097 }
1098 });
1099
1100 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1101 System.currentTimeMillis(), 2, true, true, false, true, false);
1102 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1103 TouchPoint.State.PRESSED, 3, 150, 155, 1150, 1155);
1104 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1105 TouchPoint.State.PRESSED, 4, 260, 265, 1260, 1265);
1106 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1107
1108 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1109 System.currentTimeMillis(), 2, true, true, false, true, false);
1110 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1111 TouchPoint.State.MOVED, 3, 250, 255, 1250, 1255);
1112 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1113 TouchPoint.State.MOVED, 4, 160, 165, 1160, 1165);
1114 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1115
1116 assertEquals(4, touched);
1117 }
1118
1119 @Test
1120 public void ungrabShouldEnablePickingForTouchPoints() {
1121 Scene scene = createScene();
1122 Rectangle rect1 =
1123 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1124
1125 Rectangle rect2 =
1126 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
1127
1128 touched = 0;
1129 rect1.addEventHandler(TouchEvent.ANY, event -> {
1130 touched++;
1131 switch(touched) {
1132 case 1:
1133 Assert.assertEquals(1, event.getTouchPoint().getId());
1134 Assert.assertEquals(150.0, event.getTouchPoint().getX(), 0.0001);
1163 Assert.assertEquals(260.0, event.getTouchPoint().getSceneX(), 0.0001);
1164 Assert.assertEquals(265.0, event.getTouchPoint().getSceneY(), 0.0001);
1165 Assert.assertEquals(1260.0, event.getTouchPoint().getScreenX(), 0.0001);
1166 Assert.assertEquals(1265.0, event.getTouchPoint().getScreenY(), 0.0001);
1167 event.getTouchPoint().ungrab();
1168 break;
1169 case 3:
1170 Assert.assertEquals(1, event.getTouchPoint().getId());
1171 Assert.assertEquals(250.0, event.getTouchPoint().getX(), 0.0001);
1172 Assert.assertEquals(255.0, event.getTouchPoint().getY(), 0.0001);
1173 Assert.assertEquals(250.0, event.getTouchPoint().getSceneX(), 0.0001);
1174 Assert.assertEquals(255.0, event.getTouchPoint().getSceneY(), 0.0001);
1175 Assert.assertEquals(1250.0, event.getTouchPoint().getScreenX(), 0.0001);
1176 Assert.assertEquals(1255.0, event.getTouchPoint().getScreenY(), 0.0001);
1177 break;
1178 default:
1179 fail("Wrong touch point delivery");
1180 }
1181 });
1182
1183 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1184 System.currentTimeMillis(), 2, true, true, false, true, false);
1185 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1186 TouchPoint.State.PRESSED, 3, 150, 155, 1150, 1155);
1187 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1188 TouchPoint.State.PRESSED, 4, 260, 265, 1260, 1265);
1189 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1190
1191 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1192 System.currentTimeMillis(), 2, true, true, false, true, false);
1193 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1194 TouchPoint.State.MOVED, 3, 250, 255, 1250, 1255);
1195 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1196 TouchPoint.State.MOVED, 4, 160, 165, 1160, 1165);
1197 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1198
1199 assertEquals(4, touched);
1200 }
1201
1202 @Test
1203 public void grabWithArgShouldAffectDelivery() {
1204 Scene scene = createScene();
1205 final Rectangle rect1 =
1206 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1207
1208 final Rectangle rect2 =
1209 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
1210
1211 touched = 0;
1212 rect1.addEventHandler(TouchEvent.ANY, event -> {
1213 touched++;
1214 switch(touched) {
1215 case 1:
1216 Assert.assertEquals(1, event.getTouchPoint().getId());
1217 Assert.assertEquals(150.0, event.getTouchPoint().getX(), 0.0001);
1245 }
1246 });
1247
1248 rect2.addEventHandler(TouchEvent.ANY, event -> {
1249 touched++;
1250 switch(touched) {
1251 case 2:
1252 Assert.assertEquals(2, event.getTouchPoint().getId());
1253 Assert.assertEquals(260.0, event.getTouchPoint().getX(), 0.0001);
1254 Assert.assertEquals(265.0, event.getTouchPoint().getY(), 0.0001);
1255 Assert.assertEquals(260.0, event.getTouchPoint().getSceneX(), 0.0001);
1256 Assert.assertEquals(265.0, event.getTouchPoint().getSceneY(), 0.0001);
1257 Assert.assertEquals(1260.0, event.getTouchPoint().getScreenX(), 0.0001);
1258 Assert.assertEquals(1265.0, event.getTouchPoint().getScreenY(), 0.0001);
1259 break;
1260 default:
1261 fail("Wrong touch point delivery");
1262 }
1263 });
1264
1265 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1266 System.currentTimeMillis(), 2, true, true, false, true, false);
1267 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1268 TouchPoint.State.PRESSED, 3, 150, 155, 1150, 1155);
1269 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1270 TouchPoint.State.PRESSED, 4, 260, 265, 1260, 1265);
1271 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1272
1273 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1274 System.currentTimeMillis(), 2, true, true, false, true, false);
1275 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1276 TouchPoint.State.MOVED, 3, 250, 255, 1250, 1255);
1277 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1278 TouchPoint.State.MOVED, 4, 160, 165, 1160, 1165);
1279 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1280
1281 assertEquals(4, touched);
1282 }
1283
1284 @Test
1285 public void grabWithoutArgShouldAffectDelivery() {
1286 Scene scene = createScene();
1287 final Rectangle rect1 =
1288 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1289
1290 final Rectangle rect2 =
1291 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
1292
1293 touched = 0;
1294 rect1.addEventHandler(TouchEvent.ANY, event -> {
1295 touched++;
1296 switch(touched) {
1297 case 1:
1298 Assert.assertEquals(1, event.getTouchPoint().getId());
1299 Assert.assertEquals(150.0, event.getTouchPoint().getX(), 0.0001);
1327 }
1328 });
1329
1330 rect2.addEventHandler(TouchEvent.ANY, event -> {
1331 touched++;
1332 switch(touched) {
1333 case 2:
1334 Assert.assertEquals(2, event.getTouchPoint().getId());
1335 Assert.assertEquals(260.0, event.getTouchPoint().getX(), 0.0001);
1336 Assert.assertEquals(265.0, event.getTouchPoint().getY(), 0.0001);
1337 Assert.assertEquals(260.0, event.getTouchPoint().getSceneX(), 0.0001);
1338 Assert.assertEquals(265.0, event.getTouchPoint().getSceneY(), 0.0001);
1339 Assert.assertEquals(1260.0, event.getTouchPoint().getScreenX(), 0.0001);
1340 Assert.assertEquals(1265.0, event.getTouchPoint().getScreenY(), 0.0001);
1341 break;
1342 default:
1343 fail("Wrong touch point delivery");
1344 }
1345 });
1346
1347 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1348 System.currentTimeMillis(), 2, true, true, false, true, false);
1349 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1350 TouchPoint.State.PRESSED, 3, 150, 155, 1150, 1155);
1351 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1352 TouchPoint.State.PRESSED, 4, 260, 265, 1260, 1265);
1353 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1354
1355 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1356 System.currentTimeMillis(), 2, true, true, false, true, false);
1357 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1358 TouchPoint.State.MOVED, 3, 250, 255, 1250, 1255);
1359 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1360 TouchPoint.State.MOVED, 4, 160, 165, 1160, 1165);
1361 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1362
1363 assertEquals(4, touched);
1364 }
1365
1366 @Test
1367 public void pointsShouldBeTransformedCorrectly() {
1368 Scene scene = createScene();
1369 Rectangle rect =
1370 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1371 rect.setTranslateX(15);
1372 rect.setTranslateY(5);
1373
1374 touched = 0;
1375 rect.addEventHandler(TouchEvent.ANY, event -> {
1376 touched++;
1377 switch(touched) {
1378 case 1:
1379 Assert.assertEquals(115.0, event.getTouchPoint().getX(), 0.0001);
1380 Assert.assertEquals(125.0, event.getTouchPoint().getY(), 0.0001);
1381 Assert.assertEquals(130.0, event.getTouchPoint().getSceneX(), 0.0001);
1382 Assert.assertEquals(130.0, event.getTouchPoint().getSceneY(), 0.0001);
1383 break;
1384 case 2:
1385 case 3:
1386 case 4:
1387 case 5:
1388 Assert.assertEquals(115.0, event.getTouchPoints().get(0).getX(), 0.0001);
1389 Assert.assertEquals(125.0, event.getTouchPoints().get(0).getY(), 0.0001);
1390 Assert.assertEquals(130.0, event.getTouchPoints().get(0).getSceneX(), 0.0001);
1391 Assert.assertEquals(130.0, event.getTouchPoints().get(0).getSceneY(), 0.0001);
1392 Assert.assertEquals(125.0, event.getTouchPoints().get(1).getX(), 0.0001);
1393 Assert.assertEquals(135.0, event.getTouchPoints().get(1).getY(), 0.0001);
1394 Assert.assertEquals(140.0, event.getTouchPoints().get(1).getSceneX(), 0.0001);
1395 Assert.assertEquals(140.0, event.getTouchPoints().get(1).getSceneY(), 0.0001);
1396 break;
1397 default:
1398 fail("Wrong touch point id " + event.getTouchPoint().getId());
1399 }
1400 });
1401
1402 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1403 System.currentTimeMillis(), 1, true, true, false, true, false);
1404 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1405 TouchPoint.State.PRESSED, 1, 130, 130, 130, 130);
1406 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1407
1408 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1409 System.currentTimeMillis(), 2, true, true, false, true, false);
1410 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1411 TouchPoint.State.STATIONARY, 1, 130, 130, 130, 130);
1412 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1413 TouchPoint.State.PRESSED, 2, 140, 140, 140, 140);
1414 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1415
1416 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1417 System.currentTimeMillis(), 2, true, true, false, true, false);
1418 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1419 TouchPoint.State.RELEASED, 1, 130, 130, 130, 130);
1420 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1421 TouchPoint.State.RELEASED, 2, 140, 140, 140, 140);
1422 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1423
1424
1425 assertEquals(5, touched);
1426 }
1427
1428 @Test
1429 public void shouldIgnoreIndirectTouchEvents() {
1430 Scene scene = createScene();
1431 Rectangle rect =
1432 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1433
1434 rect.addEventHandler(TouchEvent.ANY, event -> fail("Delivered indirect touch event"));
1435
1436 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1437 System.currentTimeMillis(), 1, false, true, false, true, false);
1438 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1439 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1440 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1441
1442 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1443 System.currentTimeMillis(), 1, false, true, false, true, false);
1444 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1445 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
1446 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1447 }
1448
1449 @Test(expected=RuntimeException.class)
1450 public void shouldThrowREOnWrongSmallId() {
1451 Scene scene = createScene();
1452 Rectangle rect =
1453 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1454
1455 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1456 System.currentTimeMillis(), 1, true, false, false, false, false);
1457 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1458 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1459 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1460
1461 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1462 System.currentTimeMillis(), 1, true, false, false, false, false);
1463 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1464 TouchPoint.State.MOVED, 2, 110, 110, 110, 110);
1465 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1466 }
1467
1468 @Test(expected=RuntimeException.class)
1469 public void shouldThrowREOnWrongLargeId() {
1470 Scene scene = createScene();
1471 Rectangle rect =
1472 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1473
1474 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1475 System.currentTimeMillis(), 1, true, false, false, false, false);
1476 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1477 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
1478 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1479
1480 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1481 System.currentTimeMillis(), 1, true, false, false, false, false);
1482 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1483 TouchPoint.State.MOVED, 127, 110, 110, 110, 110);
1484 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1485 }
1486
1487 @Test(expected=RuntimeException.class)
1488 public void shouldThrowREOnBigTPNumber() {
1489 Scene scene = createScene();
1490 Rectangle rect =
1491 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1492
1493 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1494 System.currentTimeMillis(), 1, true, false, false, false, false);
1495 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1496 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
1497 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1498 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1499 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1500 }
1501
1502 @Test(expected=RuntimeException.class)
1503 public void shouldThrowREOnSmallTPNumber() {
1504 Scene scene = createScene();
1505 Rectangle rect =
1506 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1507
1508 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1509 System.currentTimeMillis(), 2, true, false, false, false, false);
1510 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1511 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
1512 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1513 }
1514
1515 @Test(expected=RuntimeException.class)
1516 public void shouldThrowREOnLostRelease() {
1517 Scene scene = createScene();
1518 Rectangle rect =
1519 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1520
1521 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1522 System.currentTimeMillis(), 1, true, false, false, false, false);
1523 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1524 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
1525 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1526
1527 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1528 System.currentTimeMillis(), 1, true, false, false, false, false);
1529 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1530 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1531 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1532 }
1533
1534 // Reenable once indirect events are used
1535 @Ignore("For now we've decided to ingore indirect events completely.")
1536 @Test(expected=RuntimeException.class)
1537 public void shouldThrowREOnLostIndirectRelease() {
1538 Scene scene = createScene();
1539 Rectangle rect =
1540 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1541
1542 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1543 System.currentTimeMillis(), 1, false, false, false, false, false);
1544 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1545 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
1546 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1547
1548 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1549 System.currentTimeMillis(), 1, false, false, false, false, false);
1550 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1551 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1552 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1553 }
1554
1555 private Scene createScene() {
1556 final Group root = new Group();
1557
1558 final Scene scene = new Scene(root, 400, 400);
1559
1560 Rectangle rect = new Rectangle(100, 100, 100, 100);
1561 Rectangle rect2 = new Rectangle(200, 200, 100, 100);
1562
1563 ParentShim.getChildren(root).addAll(rect, rect2);
1564
1565 Stage stage = new Stage();
1566 stage.setScene(scene);
1567 stage.show();
1568
1569 return scene;
1570 }
1571
1572 @Test
1611 }
1612 } else {
1613 int which = rand.nextInt(count);
1614 int k = 0;
1615 for (int j = 0; j < available; j++) {
1616 if (active[j]) {
1617 k++;
1618 if (k == which) {
1619 active[j] = false;
1620 removed = j;
1621 count--;
1622 break;
1623 }
1624 }
1625 }
1626 }
1627 }
1628
1629 int reporting = count + (removed >= 0 ? 1 : 0);
1630
1631 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1632 System.currentTimeMillis(), reporting, true, false, false, false, false);
1633
1634 for (int j = 0; j < available; j++) {
1635 if (active[j] || removed == j) {
1636 TouchPoint.State state = TouchPoint.State.MOVED;
1637 if (added == j) {
1638 state = TouchPoint.State.PRESSED;
1639 } else if (removed == j) {
1640 state = TouchPoint.State.RELEASED;
1641 } else {
1642 }
1643
1644 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1645 state, ids[j], 150, 150, 150, 150);
1646 }
1647 }
1648
1649 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1650 removed = -1;
1651 added = -1;
1652 }
1653 long timer2 = System.currentTimeMillis();
1654 System.out.println("*************************************************");
1655 System.out.println("Benchmark1 time: " + (timer2 - timer));
1656 System.out.println("*************************************************");
1657 System.out.println("");
1658 }
1659
1660 @Test
1661 @Ignore("This is a benchmark, not any functional test. Run it individually if you wish.")
1662 public void crazyOrderingBenchmark() {
1663 long[] ids = new long[] { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 };
1664 boolean[] active = new boolean[] { false, false, false, false, false,
1665 false, false, false, false, false };
1666 int count = 0;
1667 int tick = 5;
1668 int available = 10;
1669 Random rand = new Random();
1709 }
1710 } else {
1711 int which = rand.nextInt(count);
1712 int k = 0;
1713 for (int j = 0; j < available; j++) {
1714 if (active[j]) {
1715 k++;
1716 if (k == which) {
1717 active[j] = false;
1718 removed = j;
1719 count--;
1720 break;
1721 }
1722 }
1723 }
1724 }
1725 }
1726
1727 int reporting = count + (removed >= 0 ? 1 : 0);
1728
1729 ((StubScene) scene.impl_getPeer()).getListener().touchEventBegin(
1730 System.currentTimeMillis(), reporting, true, false, false, false, false);
1731
1732 for (int j = 0; j < available; j++) {
1733 if (active[j] || removed == j) {
1734 TouchPoint.State state = TouchPoint.State.MOVED;
1735 if (added == j) {
1736 state = TouchPoint.State.PRESSED;
1737 } else if (removed == j) {
1738 state = TouchPoint.State.RELEASED;
1739 }
1740
1741 ((StubScene) scene.impl_getPeer()).getListener().touchEventNext(
1742 state, ids[j], 150, 150, 150, 150);
1743 }
1744 }
1745
1746 ((StubScene) scene.impl_getPeer()).getListener().touchEventEnd();
1747 removed = -1;
1748 added = -1;
1749 }
1750 long timer2 = System.currentTimeMillis();
1751 System.out.println("*************************************************");
1752 System.out.println("Benchmark2 time: " + (timer2 - timer));
1753 System.out.println("*************************************************");
1754 System.out.println("");
1755 }
1756
1757 }
|
1 /*
2 * Copyright (c) 2012, 2016, 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 test.javafx.scene.input;
27
28 import com.sun.javafx.scene.SceneHelper;
29 import test.com.sun.javafx.pgstub.StubScene;
30 import java.util.ArrayList;
31 import java.util.Arrays;
32 import java.util.Random;
33 import javafx.event.Event;
34 import javafx.scene.Group;
35 import javafx.scene.Scene;
36 import javafx.scene.shape.Rectangle;
37 import javafx.stage.Stage;
38 import javafx.event.EventHandler;
39 import javafx.geometry.Point3D;
40 import javafx.scene.ParentShim;
41 import javafx.scene.input.PickResult;
42 import javafx.scene.input.TouchEvent;
43 import javafx.scene.input.TouchPoint;
44 import org.junit.Assert;
45 import org.junit.Ignore;
46 import org.junit.Test;
47 import static org.junit.Assert.*;
48
191 Assert.assertEquals(true, event.isAltDown());
192 Assert.assertEquals(false, event.isMetaDown());
193 break;
194 case 2:
195 Assert.assertEquals(false, event.isShiftDown());
196 Assert.assertEquals(true, event.isControlDown());
197 Assert.assertEquals(false, event.isAltDown());
198 Assert.assertEquals(true, event.isMetaDown());
199 break;
200 case 3:
201 Assert.assertEquals(false, event.isShiftDown());
202 Assert.assertEquals(true, event.isControlDown());
203 Assert.assertEquals(true, event.isAltDown());
204 Assert.assertEquals(false, event.isMetaDown());
205 break;
206 default:
207 fail("Wrong touch point id " + event.getTouchPoint().getId());
208 }
209 });
210
211 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
212 System.currentTimeMillis(), 1, true, true, false, true, false);
213 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
214 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
215 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
216
217 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
218 System.currentTimeMillis(), 1, true, false, true, false, true);
219 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
220 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
221 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
222
223 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
224 System.currentTimeMillis(), 1, true, false, true, true, false);
225 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
226 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
227 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
228
229 assertEquals(3, touched);
230 }
231
232 @Test
233 public void shouldCountTouchesCorrectly() {
234 Scene scene = createScene();
235 Rectangle rect =
236 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
237
238 touched = 0;
239 rect.addEventHandler(TouchEvent.ANY, event -> {
240 touched++;
241 switch(touched) {
242 case 1:
243 Assert.assertEquals(1, event.getTouchCount());
244 Assert.assertEquals(1, event.getTouchPoints().size());
245 break;
246 case 2:
247 case 3:
248 Assert.assertEquals(2, event.getTouchCount());
249 Assert.assertEquals(2, event.getTouchPoints().size());
250 break;
251 case 4:
252 case 5:
253 Assert.assertEquals(2, event.getTouchCount());
254 Assert.assertEquals(2, event.getTouchPoints().size());
255 break;
256 case 6:
257 Assert.assertEquals(1, event.getTouchCount());
258 Assert.assertEquals(1, event.getTouchPoints().size());
259 break;
260 default:
261 fail("Wrong touch point id " + event.getTouchPoint().getId());
262 }
263 });
264
265 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
266 System.currentTimeMillis(), 1, true, true, false, true, false);
267 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
268 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
269 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
270
271 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
272 System.currentTimeMillis(), 2, true, false, true, false, true);
273 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
274 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
275 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
276 TouchPoint.State.PRESSED, 2, 120, 120, 110, 110);
277 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
278
279 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
280 System.currentTimeMillis(), 2, true, false, true, true, false);
281 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
282 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
283 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
284 TouchPoint.State.RELEASED, 2, 120, 120, 110, 110);
285 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
286
287 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
288 System.currentTimeMillis(), 1, true, false, true, true, false);
289 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
290 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
291 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
292
293 assertEquals(6, touched);
294 }
295
296 @Test
297 public void shouldGenerateCorrectEventSetIDs() {
298 Scene scene = createScene();
299 Rectangle rect =
300 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
301
302 touched = 0;
303 rect.addEventHandler(TouchEvent.ANY, event -> {
304 touched++;
305 switch(touched) {
306 case 1:
307 Assert.assertEquals(1, event.getEventSetId());
308 break;
309 case 2:
310 case 3:
311 Assert.assertEquals(2, event.getEventSetId());
312 break;
313 case 4:
314 case 5:
315 Assert.assertEquals(3, event.getEventSetId());
316 break;
317 case 6:
318 Assert.assertEquals(4, event.getEventSetId());
319 break;
320 default:
321 fail("Wrong touch point id " + event.getTouchPoint().getId());
322 }
323 });
324
325 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
326 System.currentTimeMillis(), 1, true, true, false, true, false);
327 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
328 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
329 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
330
331 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
332 System.currentTimeMillis(), 2, true, false, true, false, true);
333 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
334 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
335 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
336 TouchPoint.State.PRESSED, 2, 120, 120, 110, 110);
337 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
338
339 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
340 System.currentTimeMillis(), 2, true, false, true, true, false);
341 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
342 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
343 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
344 TouchPoint.State.RELEASED, 2, 120, 120, 110, 110);
345 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
346
347 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
348 System.currentTimeMillis(), 1, true, false, true, true, false);
349 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
350 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
351 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
352
353 assertEquals(6, touched);
354 }
355
356 @Test
357 public void shouldReIDTouchPoints() {
358 Scene scene = createScene();
359 Rectangle rect =
360 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
361
362 touched = 0;
363 rect.setOnTouchPressed(event -> {
364 touched++;
365 switch(event.getTouchPoint().getId()) {
366 case 1:
367 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
368 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
369 assertEquals(1, touched);
370 break;
371 case 2:
372 Assert.assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
373 Assert.assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
374 assertEquals(2, touched);
375 break;
376 case 3:
377 Assert.assertEquals(130.0, event.getTouchPoint().getX(), 0.0001);
378 Assert.assertEquals(130.0, event.getTouchPoint().getY(), 0.0001);
379 assertEquals(3, touched);
380 break;
381 default:
382 fail("Wrong touch point id " + event.getTouchPoint().getId());
383 }
384 });
385
386 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
387 System.currentTimeMillis(), 3, true, false, false, false, false);
388 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
389 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
390 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
391 TouchPoint.State.PRESSED, 1, 120, 120, 120, 120);
392 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
393 TouchPoint.State.PRESSED, 152, 130, 130, 130, 130);
394 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
395
396 assertEquals(3, touched);
397 }
398
399 @Test
400 public void shouldNotReuseTouchPointID() {
401 Scene scene = createScene();
402 Rectangle rect =
403 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
404
405 touched = 0;
406 rect.setOnTouchPressed(event -> {
407 touched++;
408 switch(event.getTouchPoint().getId()) {
409 case 1:
410 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
411 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
412 assertEquals(1, touched);
413 break;
414 case 2:
415 Assert.assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
416 Assert.assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
417 assertEquals(2, touched);
418 break;
419 case 3:
420 Assert.assertEquals(130.0, event.getTouchPoint().getX(), 0.0001);
421 Assert.assertEquals(130.0, event.getTouchPoint().getY(), 0.0001);
422 assertEquals(3, touched);
423 break;
424 default:
425 fail("Wrong touch point id " + event.getTouchPoint().getId());
426 }
427 });
428
429 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
430 System.currentTimeMillis(), 2, true, false, false, false, false);
431 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
432 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
433 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
434 TouchPoint.State.PRESSED, 1, 120, 120, 120, 120);
435 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
436
437 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
438 System.currentTimeMillis(), 2, true, false, false, false, false);
439 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
440 TouchPoint.State.STATIONARY, 1368, 110, 110, 110, 110);
441 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
442 TouchPoint.State.RELEASED, 1, 120, 120, 120, 120);
443 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
444
445 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
446 System.currentTimeMillis(), 2, true, false, false, false, false);
447 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
448 TouchPoint.State.STATIONARY, 1368, 110, 110, 110, 110);
449 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
450 TouchPoint.State.PRESSED, 1, 130, 130, 130, 130);
451 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
452
453 assertEquals(3, touched);
454 }
455
456 @Test
457 public void shouldMaintainPressOrder() {
458 Scene scene = createScene();
459 Rectangle rect =
460 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
461
462 touched = 0;
463 rect.setOnTouchPressed(event -> {
464 touched++;
465 switch(event.getTouchPoint().getId()) {
466 case 1:
467 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
468 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
469 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
470 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
471 assertEquals(1, touched);
472 break;
473 case 2:
474 Assert.assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
475 Assert.assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
476 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
477 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
478 assertEquals(2, touched);
479 break;
480 case 3:
481 Assert.assertEquals(130.0, event.getTouchPoint().getX(), 0.0001);
482 Assert.assertEquals(130.0, event.getTouchPoint().getY(), 0.0001);
483 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
484 Assert.assertEquals(3, event.getTouchPoints().get(1).getId());
485 assertEquals(3, touched);
486 break;
487 default:
488 fail("Wrong touch point id " + event.getTouchPoint().getId());
489 }
490 });
491
492 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
493 System.currentTimeMillis(), 2, true, false, false, false, false);
494 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
495 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
496 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
497 TouchPoint.State.PRESSED, 1, 120, 120, 120, 120);
498 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
499
500 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
501 System.currentTimeMillis(), 2, true, false, false, false, false);
502 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
503 TouchPoint.State.RELEASED, 1, 120, 120, 120, 120);
504 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
505 TouchPoint.State.STATIONARY, 1368, 110, 110, 110, 110);
506 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
507
508 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
509 System.currentTimeMillis(), 2, true, false, false, false, false);
510 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
511 TouchPoint.State.PRESSED, 1, 130, 130, 130, 130);
512 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
513 TouchPoint.State.STATIONARY, 1368, 110, 110, 110, 110);
514 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
515
516 assertEquals(3, touched);
517 }
518
519 @Test
520 public void shouldMaintainIDMapping() {
521 Scene scene = createScene();
522 Rectangle rect =
523 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
524
525 touched = 0;
526 rect.setOnTouchPressed(event -> {
527 touched++;
528 switch(event.getTouchPoint().getId()) {
529 case 1:
530 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
531 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
532 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
533 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
534 assertEquals(1, touched);
550 switch(event.getTouchPoint().getId()) {
551 case 1:
552 Assert.assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
553 Assert.assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
554 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
555 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
556 assertEquals(3, touched);
557 break;
558 case 2:
559 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
560 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
561 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
562 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
563 assertEquals(4, touched);
564 break;
565 default:
566 fail("Wrong touch point id " + event.getTouchPoint().getId());
567 }
568 });
569
570 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
571 System.currentTimeMillis(), 2, true, false, false, false, false);
572 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
573 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
574 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
575 TouchPoint.State.PRESSED, 127, 120, 120, 120, 120);
576 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
577
578 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
579 System.currentTimeMillis(), 2, true, false, false, false, false);
580 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
581 TouchPoint.State.MOVED, 127, 110, 110, 110, 110);
582 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
583 TouchPoint.State.MOVED, 1368, 120, 120, 120, 120);
584 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
585
586 assertEquals(4, touched);
587 }
588
589 @Test
590 public void shouldMaintainIDMappingInDynamicConditions() {
591 Scene scene = createScene();
592 Rectangle rect =
593 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
594
595 touched = 0;
596 rect.setOnTouchPressed(event -> {
597 touched++;
598 switch(event.getTouchPoint().getId()) {
599 case 1:
600 Assert.assertEquals(110.0, event.getTouchPoint().getX(), 0.0001);
601 Assert.assertEquals(110.0, event.getTouchPoint().getY(), 0.0001);
602 Assert.assertEquals(1, event.getTouchPoints().get(0).getId());
603 Assert.assertEquals(2, event.getTouchPoints().get(1).getId());
604 assertEquals(1, touched);
627 switch(event.getTouchPoint().getId()) {
628 case 2:
629 Assert.assertEquals(120.0, event.getTouchPoint().getX(), 0.0001);
630 Assert.assertEquals(120.0, event.getTouchPoint().getY(), 0.0001);
631 Assert.assertEquals(2, event.getTouchPoints().get(0).getId());
632 Assert.assertEquals(3, event.getTouchPoints().get(1).getId());
633 assertEquals(4, touched);
634 break;
635 case 3:
636 Assert.assertEquals(160.0, event.getTouchPoint().getX(), 0.0001);
637 Assert.assertEquals(160.0, event.getTouchPoint().getY(), 0.0001);
638 Assert.assertEquals(2, event.getTouchPoints().get(0).getId());
639 Assert.assertEquals(3, event.getTouchPoints().get(1).getId());
640 assertEquals(5, touched);
641 break;
642 default:
643 fail("Wrong touch point id " + event.getTouchPoint().getId());
644 }
645 });
646
647 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
648 System.currentTimeMillis(), 2, true, false, false, false, false);
649 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
650 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
651 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
652 TouchPoint.State.PRESSED, 127, 120, 120, 120, 120);
653 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
654
655 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
656 System.currentTimeMillis(), 2, true, false, false, false, false);
657 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
658 TouchPoint.State.STATIONARY, 127, 120, 120, 120, 120);
659 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
660 TouchPoint.State.RELEASED, 1368, 120, 120, 120, 120);
661 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
662
663 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
664 System.currentTimeMillis(), 2, true, false, false, false, false);
665 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
666 TouchPoint.State.PRESSED, 11, 160, 160, 160, 160);
667 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
668 TouchPoint.State.STATIONARY, 127, 120, 120, 120, 120);
669 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
670
671 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
672 System.currentTimeMillis(), 2, true, false, false, false, false);
673 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
674 TouchPoint.State.MOVED, 11, 160, 160, 160, 160);
675 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
676 TouchPoint.State.MOVED, 127, 120, 120, 120, 120);
677 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
678
679 assertEquals(5, touched);
680 }
681
682 @Test
683 public void shouldResetIDsAfterGesture() {
684 Scene scene = createScene();
685 Rectangle rect =
686 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
687
688 touched = 0;
689 rect.addEventHandler(TouchEvent.ANY, event -> {
690 touched++;
691 switch(touched) {
692 case 1:
693 case 2:
694 Assert.assertEquals(1, event.getEventSetId());
695 Assert.assertEquals(touched, event.getTouchPoint().getId());
696 break;
697 case 3:
698 case 4:
699 Assert.assertEquals(2, event.getEventSetId());
700 Assert.assertEquals(touched - 2, event.getTouchPoint().getId());
701 break;
702 case 5:
703 case 6:
704 Assert.assertEquals(1, event.getEventSetId());
705 Assert.assertEquals(touched - 4, event.getTouchPoint().getId());
706 break;
707 case 7:
708 case 8:
709 Assert.assertEquals(2, event.getEventSetId());
710 Assert.assertEquals(touched - 6, event.getTouchPoint().getId());
711 break;
712 default:
713 fail("Wrong touch point id " + event.getTouchPoint().getId());
714 }
715 });
716
717 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
718 System.currentTimeMillis(), 2, true, true, false, true, false);
719 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
720 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
721 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
722 TouchPoint.State.PRESSED, 2, 120, 120, 110, 110);
723 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
724
725 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
726 System.currentTimeMillis(), 2, true, false, true, true, false);
727 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
728 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
729 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
730 TouchPoint.State.RELEASED, 2, 120, 120, 110, 110);
731 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
732
733 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
734 System.currentTimeMillis(), 2, true, true, false, true, false);
735 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
736 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
737 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
738 TouchPoint.State.PRESSED, 2, 120, 120, 110, 110);
739 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
740
741 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
742 System.currentTimeMillis(), 2, true, false, true, true, false);
743 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
744 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
745 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
746 TouchPoint.State.RELEASED, 2, 120, 120, 110, 110);
747 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
748
749
750 assertEquals(8, touched);
751 }
752
753 @Test
754 public void touchPointsShouldContainTouchPoint() {
755 Scene scene = createScene();
756 Rectangle rect =
757 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
758
759 touched = 0;
760 rect.addEventHandler(TouchEvent.ANY, event -> {
761 touched++;
762 switch(touched) {
763 case 1:
764 case 3:
765 assertSame(event.getTouchPoint(), event.getTouchPoints().get(0));
766 break;
767 case 2:
768 case 4:
769 assertSame(event.getTouchPoint(), event.getTouchPoints().get(1));
770 break;
771 default:
772 fail("Wrong touch point id " + event.getTouchPoint().getId());
773 }
774 });
775
776 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
777 System.currentTimeMillis(), 2, true, true, false, true, false);
778 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
779 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
780 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
781 TouchPoint.State.PRESSED, 2, 120, 120, 110, 110);
782 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
783
784 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
785 System.currentTimeMillis(), 2, true, true, false, true, false);
786 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
787 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
788 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
789 TouchPoint.State.RELEASED, 2, 120, 120, 110, 110);
790 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
791
792 assertEquals(4, touched);
793 }
794
795 @Test
796 public void touchPointsShouldHaveCorrectTarget() {
797 Scene scene = createScene();
798
799 final Rectangle rect1 =
800 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
801
802 final Rectangle rect2 =
803 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
804
805 touched = 0;
806 rect1.addEventHandler(TouchEvent.ANY, event -> {
807 touched++;
808 assertSame(rect1, event.getTouchPoint().getTarget());
809 assertSame(rect2, event.getTouchPoints().get(1).getTarget());
810 });
811 rect2.addEventHandler(TouchEvent.ANY, event -> {
812 touched++;
813 assertSame(rect2, event.getTouchPoint().getTarget());
814 assertSame(rect1, event.getTouchPoints().get(0).getTarget());
815 });
816
817 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
818 System.currentTimeMillis(), 2, true, true, false, true, false);
819 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
820 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
821 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
822 TouchPoint.State.PRESSED, 2, 220, 220, 220, 220);
823 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
824
825 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
826 System.currentTimeMillis(), 2, true, true, false, true, false);
827 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
828 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
829 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
830 TouchPoint.State.RELEASED, 2, 220, 220, 220, 220);
831 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
832
833 assertEquals(4, touched);
834 }
835
836 @Test
837 public void shouldCompute3dCoordinates() {
838 Scene scene = createScene();
839 Rectangle rect =
840 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
841 rect.setTranslateZ(50);
842
843 touched = 0;
844 rect.addEventHandler(TouchEvent.ANY, event -> {
845 touched++;
846 Assert.assertEquals(110, event.getTouchPoint().getX(), 0.00001);
847 Assert.assertEquals(110, event.getTouchPoint().getY(), 0.00001);
848 Assert.assertEquals(0, event.getTouchPoint().getZ(), 0.00001);
849 });
850
851 scene.addEventHandler(TouchEvent.ANY, event -> {
852 touched++;
853 Assert.assertEquals(110, event.getTouchPoint().getX(), 0.00001);
854 Assert.assertEquals(110, event.getTouchPoint().getY(), 0.00001);
855 Assert.assertEquals(50, event.getTouchPoint().getZ(), 0.00001);
856 });
857
858 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
859 System.currentTimeMillis(), 1, true, true, false, true, false);
860 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
861 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
862 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
863
864 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
865 System.currentTimeMillis(), 1, true, false, true, false, true);
866 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
867 TouchPoint.State.STATIONARY, 1, 110, 110, 110, 110);
868 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
869
870 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
871 System.currentTimeMillis(), 1, true, false, true, true, false);
872 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
873 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
874 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
875
876 assertEquals(6, touched);
877 }
878
879 @Test
880 public void touchPointsShouldHaveCorrectPickResult() {
881 Scene scene = createScene();
882
883 final Rectangle rect1 =
884 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
885
886 final Rectangle rect2 =
887 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
888
889 touched = 0;
890 rect1.addEventHandler(TouchEvent.ANY, event -> {
891 touched++;
892 assertSame(rect1, event.getTouchPoint().getTarget());
893 assertSame(rect2, event.getTouchPoints().get(1).getTarget());
894 PickResult res1 = event.getTouchPoint().getPickResult();
945 assertEquals(0, res1.getIntersectedPoint().getZ(), 0.00001);
946 break;
947 case 4:
948 assertNotNull(res1);
949 assertSame(rect2, res1.getIntersectedNode());
950 assertEquals(220, res1.getIntersectedPoint().getX(), 0.00001);
951 assertEquals(220, res1.getIntersectedPoint().getY(), 0.00001);
952 assertEquals(0, res1.getIntersectedPoint().getZ(), 0.00001);
953
954 assertNotNull(res2);
955 assertSame(rect1, res2.getIntersectedNode());
956 assertEquals(110, res2.getIntersectedPoint().getX(), 0.00001);
957 assertEquals(110, res2.getIntersectedPoint().getY(), 0.00001);
958 assertEquals(0, res1.getIntersectedPoint().getZ(), 0.00001);
959 break;
960 default:
961 fail("Wrong event delivered");
962 }
963 });
964
965 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
966 System.currentTimeMillis(), 2, true, true, false, true, false);
967 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
968 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
969 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
970 TouchPoint.State.PRESSED, 2, 220, 220, 220, 220);
971 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
972
973 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
974 System.currentTimeMillis(), 2, true, true, false, true, false);
975 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
976 TouchPoint.State.MOVED, 1, 220, 220, 220, 220);
977 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
978 TouchPoint.State.MOVED, 2, 110, 110, 110, 110);
979 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
980
981 assertEquals(4, touched);
982 }
983
984 @Test
985 public void testTouchPointsBelongsTo() {
986 final Scene scene = createScene();
987
988 final Rectangle rect1 =
989 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
990
991 final Rectangle rect2 =
992 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
993
994 touched = 0;
995 rect1.addEventHandler(TouchEvent.ANY, event -> {
996 touched++;
997 assertTrue(event.getTouchPoint().belongsTo(rect1));
998 assertTrue(event.getTouchPoint().belongsTo(scene.getRoot()));
999 assertTrue(event.getTouchPoint().belongsTo(scene));
1000 assertFalse(event.getTouchPoint().belongsTo(rect2));
1001
1002 assertFalse(event.getTouchPoints().get(1).belongsTo(rect1));
1003 assertTrue(event.getTouchPoints().get(1).belongsTo(scene.getRoot()));
1004 assertTrue(event.getTouchPoints().get(1).belongsTo(scene));
1005 assertTrue(event.getTouchPoints().get(1).belongsTo(rect2));
1006 });
1007 rect2.addEventHandler(TouchEvent.ANY, event -> {
1008 touched++;
1009 assertTrue(event.getTouchPoint().belongsTo(rect2));
1010 assertTrue(event.getTouchPoint().belongsTo(scene.getRoot()));
1011 assertTrue(event.getTouchPoint().belongsTo(scene));
1012 assertFalse(event.getTouchPoint().belongsTo(rect1));
1013
1014 assertFalse(event.getTouchPoints().get(0).belongsTo(rect2));
1015 assertTrue(event.getTouchPoints().get(0).belongsTo(scene.getRoot()));
1016 assertTrue(event.getTouchPoints().get(0).belongsTo(scene));
1017 assertTrue(event.getTouchPoints().get(0).belongsTo(rect1));
1018 });
1019
1020 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1021 System.currentTimeMillis(), 2, true, true, false, true, false);
1022 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1023 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1024 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1025 TouchPoint.State.PRESSED, 2, 220, 220, 220, 220);
1026 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1027
1028 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1029 System.currentTimeMillis(), 2, true, true, false, true, false);
1030 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1031 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
1032 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1033 TouchPoint.State.RELEASED, 2, 220, 220, 220, 220);
1034 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1035
1036 assertEquals(4, touched);
1037 }
1038
1039 @Test
1040 public void shouldPickAndGrabTouchPoints() {
1041 Scene scene = createScene();
1042 final Rectangle rect1 =
1043 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1044
1045 final Rectangle rect2 =
1046 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
1047
1048 touched = 0;
1049 rect1.addEventHandler(TouchEvent.ANY, event -> {
1050 touched++;
1051 switch(touched) {
1052 case 1:
1053 Assert.assertEquals(1, event.getTouchPoint().getId());
1054 Assert.assertEquals(150.0, event.getTouchPoint().getX(), 0.0001);
1081 Assert.assertEquals(265.0, event.getTouchPoint().getY(), 0.0001);
1082 Assert.assertEquals(260.0, event.getTouchPoint().getSceneX(), 0.0001);
1083 Assert.assertEquals(265.0, event.getTouchPoint().getSceneY(), 0.0001);
1084 Assert.assertEquals(1260.0, event.getTouchPoint().getScreenX(), 0.0001);
1085 Assert.assertEquals(1265.0, event.getTouchPoint().getScreenY(), 0.0001);
1086 break;
1087 case 4:
1088 Assert.assertEquals(2, event.getTouchPoint().getId());
1089 Assert.assertEquals(160.0, event.getTouchPoint().getX(), 0.0001);
1090 Assert.assertEquals(165.0, event.getTouchPoint().getY(), 0.0001);
1091 Assert.assertEquals(160.0, event.getTouchPoint().getSceneX(), 0.0001);
1092 Assert.assertEquals(165.0, event.getTouchPoint().getSceneY(), 0.0001);
1093 Assert.assertEquals(1160.0, event.getTouchPoint().getScreenX(), 0.0001);
1094 Assert.assertEquals(1165.0, event.getTouchPoint().getScreenY(), 0.0001);
1095 break;
1096 default:
1097 fail("Wrong touch point delivery");
1098 }
1099 });
1100
1101 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1102 System.currentTimeMillis(), 2, true, true, false, true, false);
1103 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1104 TouchPoint.State.PRESSED, 3, 150, 155, 1150, 1155);
1105 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1106 TouchPoint.State.PRESSED, 4, 260, 265, 1260, 1265);
1107 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1108
1109 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1110 System.currentTimeMillis(), 2, true, true, false, true, false);
1111 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1112 TouchPoint.State.MOVED, 3, 250, 255, 1250, 1255);
1113 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1114 TouchPoint.State.MOVED, 4, 160, 165, 1160, 1165);
1115 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1116
1117 assertEquals(4, touched);
1118 }
1119
1120 @Test
1121 public void ungrabShouldEnablePickingForTouchPoints() {
1122 Scene scene = createScene();
1123 Rectangle rect1 =
1124 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1125
1126 Rectangle rect2 =
1127 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
1128
1129 touched = 0;
1130 rect1.addEventHandler(TouchEvent.ANY, event -> {
1131 touched++;
1132 switch(touched) {
1133 case 1:
1134 Assert.assertEquals(1, event.getTouchPoint().getId());
1135 Assert.assertEquals(150.0, event.getTouchPoint().getX(), 0.0001);
1164 Assert.assertEquals(260.0, event.getTouchPoint().getSceneX(), 0.0001);
1165 Assert.assertEquals(265.0, event.getTouchPoint().getSceneY(), 0.0001);
1166 Assert.assertEquals(1260.0, event.getTouchPoint().getScreenX(), 0.0001);
1167 Assert.assertEquals(1265.0, event.getTouchPoint().getScreenY(), 0.0001);
1168 event.getTouchPoint().ungrab();
1169 break;
1170 case 3:
1171 Assert.assertEquals(1, event.getTouchPoint().getId());
1172 Assert.assertEquals(250.0, event.getTouchPoint().getX(), 0.0001);
1173 Assert.assertEquals(255.0, event.getTouchPoint().getY(), 0.0001);
1174 Assert.assertEquals(250.0, event.getTouchPoint().getSceneX(), 0.0001);
1175 Assert.assertEquals(255.0, event.getTouchPoint().getSceneY(), 0.0001);
1176 Assert.assertEquals(1250.0, event.getTouchPoint().getScreenX(), 0.0001);
1177 Assert.assertEquals(1255.0, event.getTouchPoint().getScreenY(), 0.0001);
1178 break;
1179 default:
1180 fail("Wrong touch point delivery");
1181 }
1182 });
1183
1184 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1185 System.currentTimeMillis(), 2, true, true, false, true, false);
1186 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1187 TouchPoint.State.PRESSED, 3, 150, 155, 1150, 1155);
1188 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1189 TouchPoint.State.PRESSED, 4, 260, 265, 1260, 1265);
1190 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1191
1192 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1193 System.currentTimeMillis(), 2, true, true, false, true, false);
1194 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1195 TouchPoint.State.MOVED, 3, 250, 255, 1250, 1255);
1196 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1197 TouchPoint.State.MOVED, 4, 160, 165, 1160, 1165);
1198 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1199
1200 assertEquals(4, touched);
1201 }
1202
1203 @Test
1204 public void grabWithArgShouldAffectDelivery() {
1205 Scene scene = createScene();
1206 final Rectangle rect1 =
1207 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1208
1209 final Rectangle rect2 =
1210 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
1211
1212 touched = 0;
1213 rect1.addEventHandler(TouchEvent.ANY, event -> {
1214 touched++;
1215 switch(touched) {
1216 case 1:
1217 Assert.assertEquals(1, event.getTouchPoint().getId());
1218 Assert.assertEquals(150.0, event.getTouchPoint().getX(), 0.0001);
1246 }
1247 });
1248
1249 rect2.addEventHandler(TouchEvent.ANY, event -> {
1250 touched++;
1251 switch(touched) {
1252 case 2:
1253 Assert.assertEquals(2, event.getTouchPoint().getId());
1254 Assert.assertEquals(260.0, event.getTouchPoint().getX(), 0.0001);
1255 Assert.assertEquals(265.0, event.getTouchPoint().getY(), 0.0001);
1256 Assert.assertEquals(260.0, event.getTouchPoint().getSceneX(), 0.0001);
1257 Assert.assertEquals(265.0, event.getTouchPoint().getSceneY(), 0.0001);
1258 Assert.assertEquals(1260.0, event.getTouchPoint().getScreenX(), 0.0001);
1259 Assert.assertEquals(1265.0, event.getTouchPoint().getScreenY(), 0.0001);
1260 break;
1261 default:
1262 fail("Wrong touch point delivery");
1263 }
1264 });
1265
1266 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1267 System.currentTimeMillis(), 2, true, true, false, true, false);
1268 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1269 TouchPoint.State.PRESSED, 3, 150, 155, 1150, 1155);
1270 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1271 TouchPoint.State.PRESSED, 4, 260, 265, 1260, 1265);
1272 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1273
1274 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1275 System.currentTimeMillis(), 2, true, true, false, true, false);
1276 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1277 TouchPoint.State.MOVED, 3, 250, 255, 1250, 1255);
1278 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1279 TouchPoint.State.MOVED, 4, 160, 165, 1160, 1165);
1280 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1281
1282 assertEquals(4, touched);
1283 }
1284
1285 @Test
1286 public void grabWithoutArgShouldAffectDelivery() {
1287 Scene scene = createScene();
1288 final Rectangle rect1 =
1289 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1290
1291 final Rectangle rect2 =
1292 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(1);
1293
1294 touched = 0;
1295 rect1.addEventHandler(TouchEvent.ANY, event -> {
1296 touched++;
1297 switch(touched) {
1298 case 1:
1299 Assert.assertEquals(1, event.getTouchPoint().getId());
1300 Assert.assertEquals(150.0, event.getTouchPoint().getX(), 0.0001);
1328 }
1329 });
1330
1331 rect2.addEventHandler(TouchEvent.ANY, event -> {
1332 touched++;
1333 switch(touched) {
1334 case 2:
1335 Assert.assertEquals(2, event.getTouchPoint().getId());
1336 Assert.assertEquals(260.0, event.getTouchPoint().getX(), 0.0001);
1337 Assert.assertEquals(265.0, event.getTouchPoint().getY(), 0.0001);
1338 Assert.assertEquals(260.0, event.getTouchPoint().getSceneX(), 0.0001);
1339 Assert.assertEquals(265.0, event.getTouchPoint().getSceneY(), 0.0001);
1340 Assert.assertEquals(1260.0, event.getTouchPoint().getScreenX(), 0.0001);
1341 Assert.assertEquals(1265.0, event.getTouchPoint().getScreenY(), 0.0001);
1342 break;
1343 default:
1344 fail("Wrong touch point delivery");
1345 }
1346 });
1347
1348 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1349 System.currentTimeMillis(), 2, true, true, false, true, false);
1350 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1351 TouchPoint.State.PRESSED, 3, 150, 155, 1150, 1155);
1352 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1353 TouchPoint.State.PRESSED, 4, 260, 265, 1260, 1265);
1354 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1355
1356 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1357 System.currentTimeMillis(), 2, true, true, false, true, false);
1358 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1359 TouchPoint.State.MOVED, 3, 250, 255, 1250, 1255);
1360 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1361 TouchPoint.State.MOVED, 4, 160, 165, 1160, 1165);
1362 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1363
1364 assertEquals(4, touched);
1365 }
1366
1367 @Test
1368 public void pointsShouldBeTransformedCorrectly() {
1369 Scene scene = createScene();
1370 Rectangle rect =
1371 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1372 rect.setTranslateX(15);
1373 rect.setTranslateY(5);
1374
1375 touched = 0;
1376 rect.addEventHandler(TouchEvent.ANY, event -> {
1377 touched++;
1378 switch(touched) {
1379 case 1:
1380 Assert.assertEquals(115.0, event.getTouchPoint().getX(), 0.0001);
1381 Assert.assertEquals(125.0, event.getTouchPoint().getY(), 0.0001);
1382 Assert.assertEquals(130.0, event.getTouchPoint().getSceneX(), 0.0001);
1383 Assert.assertEquals(130.0, event.getTouchPoint().getSceneY(), 0.0001);
1384 break;
1385 case 2:
1386 case 3:
1387 case 4:
1388 case 5:
1389 Assert.assertEquals(115.0, event.getTouchPoints().get(0).getX(), 0.0001);
1390 Assert.assertEquals(125.0, event.getTouchPoints().get(0).getY(), 0.0001);
1391 Assert.assertEquals(130.0, event.getTouchPoints().get(0).getSceneX(), 0.0001);
1392 Assert.assertEquals(130.0, event.getTouchPoints().get(0).getSceneY(), 0.0001);
1393 Assert.assertEquals(125.0, event.getTouchPoints().get(1).getX(), 0.0001);
1394 Assert.assertEquals(135.0, event.getTouchPoints().get(1).getY(), 0.0001);
1395 Assert.assertEquals(140.0, event.getTouchPoints().get(1).getSceneX(), 0.0001);
1396 Assert.assertEquals(140.0, event.getTouchPoints().get(1).getSceneY(), 0.0001);
1397 break;
1398 default:
1399 fail("Wrong touch point id " + event.getTouchPoint().getId());
1400 }
1401 });
1402
1403 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1404 System.currentTimeMillis(), 1, true, true, false, true, false);
1405 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1406 TouchPoint.State.PRESSED, 1, 130, 130, 130, 130);
1407 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1408
1409 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1410 System.currentTimeMillis(), 2, true, true, false, true, false);
1411 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1412 TouchPoint.State.STATIONARY, 1, 130, 130, 130, 130);
1413 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1414 TouchPoint.State.PRESSED, 2, 140, 140, 140, 140);
1415 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1416
1417 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1418 System.currentTimeMillis(), 2, true, true, false, true, false);
1419 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1420 TouchPoint.State.RELEASED, 1, 130, 130, 130, 130);
1421 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1422 TouchPoint.State.RELEASED, 2, 140, 140, 140, 140);
1423 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1424
1425
1426 assertEquals(5, touched);
1427 }
1428
1429 @Test
1430 public void shouldIgnoreIndirectTouchEvents() {
1431 Scene scene = createScene();
1432 Rectangle rect =
1433 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1434
1435 rect.addEventHandler(TouchEvent.ANY, event -> fail("Delivered indirect touch event"));
1436
1437 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1438 System.currentTimeMillis(), 1, false, true, false, true, false);
1439 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1440 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1441 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1442
1443 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1444 System.currentTimeMillis(), 1, false, true, false, true, false);
1445 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1446 TouchPoint.State.RELEASED, 1, 110, 110, 110, 110);
1447 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1448 }
1449
1450 @Test(expected=RuntimeException.class)
1451 public void shouldThrowREOnWrongSmallId() {
1452 Scene scene = createScene();
1453 Rectangle rect =
1454 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1455
1456 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1457 System.currentTimeMillis(), 1, true, false, false, false, false);
1458 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1459 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1460 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1461
1462 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1463 System.currentTimeMillis(), 1, true, false, false, false, false);
1464 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1465 TouchPoint.State.MOVED, 2, 110, 110, 110, 110);
1466 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1467 }
1468
1469 @Test(expected=RuntimeException.class)
1470 public void shouldThrowREOnWrongLargeId() {
1471 Scene scene = createScene();
1472 Rectangle rect =
1473 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1474
1475 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1476 System.currentTimeMillis(), 1, true, false, false, false, false);
1477 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1478 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
1479 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1480
1481 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1482 System.currentTimeMillis(), 1, true, false, false, false, false);
1483 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1484 TouchPoint.State.MOVED, 127, 110, 110, 110, 110);
1485 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1486 }
1487
1488 @Test(expected=RuntimeException.class)
1489 public void shouldThrowREOnBigTPNumber() {
1490 Scene scene = createScene();
1491 Rectangle rect =
1492 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1493
1494 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1495 System.currentTimeMillis(), 1, true, false, false, false, false);
1496 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1497 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
1498 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1499 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1500 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1501 }
1502
1503 @Test(expected=RuntimeException.class)
1504 public void shouldThrowREOnSmallTPNumber() {
1505 Scene scene = createScene();
1506 Rectangle rect =
1507 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1508
1509 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1510 System.currentTimeMillis(), 2, true, false, false, false, false);
1511 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1512 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
1513 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1514 }
1515
1516 @Test(expected=RuntimeException.class)
1517 public void shouldThrowREOnLostRelease() {
1518 Scene scene = createScene();
1519 Rectangle rect =
1520 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1521
1522 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1523 System.currentTimeMillis(), 1, true, false, false, false, false);
1524 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1525 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
1526 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1527
1528 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1529 System.currentTimeMillis(), 1, true, false, false, false, false);
1530 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1531 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1532 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1533 }
1534
1535 // Reenable once indirect events are used
1536 @Ignore("For now we've decided to ingore indirect events completely.")
1537 @Test(expected=RuntimeException.class)
1538 public void shouldThrowREOnLostIndirectRelease() {
1539 Scene scene = createScene();
1540 Rectangle rect =
1541 (Rectangle) scene.getRoot().getChildrenUnmodifiable().get(0);
1542
1543 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1544 System.currentTimeMillis(), 1, false, false, false, false, false);
1545 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1546 TouchPoint.State.PRESSED, 1368, 110, 110, 110, 110);
1547 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1548
1549 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1550 System.currentTimeMillis(), 1, false, false, false, false, false);
1551 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1552 TouchPoint.State.PRESSED, 1, 110, 110, 110, 110);
1553 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1554 }
1555
1556 private Scene createScene() {
1557 final Group root = new Group();
1558
1559 final Scene scene = new Scene(root, 400, 400);
1560
1561 Rectangle rect = new Rectangle(100, 100, 100, 100);
1562 Rectangle rect2 = new Rectangle(200, 200, 100, 100);
1563
1564 ParentShim.getChildren(root).addAll(rect, rect2);
1565
1566 Stage stage = new Stage();
1567 stage.setScene(scene);
1568 stage.show();
1569
1570 return scene;
1571 }
1572
1573 @Test
1612 }
1613 } else {
1614 int which = rand.nextInt(count);
1615 int k = 0;
1616 for (int j = 0; j < available; j++) {
1617 if (active[j]) {
1618 k++;
1619 if (k == which) {
1620 active[j] = false;
1621 removed = j;
1622 count--;
1623 break;
1624 }
1625 }
1626 }
1627 }
1628 }
1629
1630 int reporting = count + (removed >= 0 ? 1 : 0);
1631
1632 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1633 System.currentTimeMillis(), reporting, true, false, false, false, false);
1634
1635 for (int j = 0; j < available; j++) {
1636 if (active[j] || removed == j) {
1637 TouchPoint.State state = TouchPoint.State.MOVED;
1638 if (added == j) {
1639 state = TouchPoint.State.PRESSED;
1640 } else if (removed == j) {
1641 state = TouchPoint.State.RELEASED;
1642 } else {
1643 }
1644
1645 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1646 state, ids[j], 150, 150, 150, 150);
1647 }
1648 }
1649
1650 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1651 removed = -1;
1652 added = -1;
1653 }
1654 long timer2 = System.currentTimeMillis();
1655 System.out.println("*************************************************");
1656 System.out.println("Benchmark1 time: " + (timer2 - timer));
1657 System.out.println("*************************************************");
1658 System.out.println("");
1659 }
1660
1661 @Test
1662 @Ignore("This is a benchmark, not any functional test. Run it individually if you wish.")
1663 public void crazyOrderingBenchmark() {
1664 long[] ids = new long[] { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 };
1665 boolean[] active = new boolean[] { false, false, false, false, false,
1666 false, false, false, false, false };
1667 int count = 0;
1668 int tick = 5;
1669 int available = 10;
1670 Random rand = new Random();
1710 }
1711 } else {
1712 int which = rand.nextInt(count);
1713 int k = 0;
1714 for (int j = 0; j < available; j++) {
1715 if (active[j]) {
1716 k++;
1717 if (k == which) {
1718 active[j] = false;
1719 removed = j;
1720 count--;
1721 break;
1722 }
1723 }
1724 }
1725 }
1726 }
1727
1728 int reporting = count + (removed >= 0 ? 1 : 0);
1729
1730 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventBegin(
1731 System.currentTimeMillis(), reporting, true, false, false, false, false);
1732
1733 for (int j = 0; j < available; j++) {
1734 if (active[j] || removed == j) {
1735 TouchPoint.State state = TouchPoint.State.MOVED;
1736 if (added == j) {
1737 state = TouchPoint.State.PRESSED;
1738 } else if (removed == j) {
1739 state = TouchPoint.State.RELEASED;
1740 }
1741
1742 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventNext(
1743 state, ids[j], 150, 150, 150, 150);
1744 }
1745 }
1746
1747 ((StubScene) SceneHelper.getPeer(scene)).getListener().touchEventEnd();
1748 removed = -1;
1749 added = -1;
1750 }
1751 long timer2 = System.currentTimeMillis();
1752 System.out.println("*************************************************");
1753 System.out.println("Benchmark2 time: " + (timer2 - timer));
1754 System.out.println("*************************************************");
1755 System.out.println("");
1756 }
1757
1758 }
|