@@ -440,7 +440,6 @@ describe('integration', function () {
440
440
assert . equal ( breadcrumbs . length , 1 ) ;
441
441
442
442
assert . equal ( breadcrumbs [ 0 ] . type , 'ui_event' ) ;
443
- // NOTE: attributes re-ordered. should this be expected?
444
443
assert . equal ( breadcrumbs [ 0 ] . data . target , 'body > form#foo-form > input[name="foo"][placeholder="lol"]' ) ;
445
444
assert . equal ( breadcrumbs [ 0 ] . data . type , 'click' ) ;
446
445
}
@@ -481,7 +480,6 @@ describe('integration', function () {
481
480
assert . equal ( breadcrumbs . length , 1 ) ;
482
481
483
482
assert . equal ( breadcrumbs [ 0 ] . type , 'ui_event' ) ;
484
- // NOTE: attributes re-ordered. should this be expected?
485
483
assert . equal ( breadcrumbs [ 0 ] . data . target , 'body > form#foo-form > input[name="foo"][placeholder="lol"]' ) ;
486
484
assert . equal ( breadcrumbs [ 0 ] . data . type , 'click' ) ;
487
485
}
@@ -529,13 +527,139 @@ describe('integration', function () {
529
527
assert . equal ( breadcrumbs . length , 1 ) ;
530
528
531
529
assert . equal ( breadcrumbs [ 0 ] . type , 'ui_event' ) ;
532
- // NOTE: attributes re-ordered. should this be expected?
533
530
assert . equal ( breadcrumbs [ 0 ] . data . target , 'body > div.c > div.b > div.a' ) ;
534
531
assert . equal ( breadcrumbs [ 0 ] . data . type , 'click' ) ;
535
532
}
536
533
) ;
537
534
} ) ;
538
535
536
+ it ( 'should record consecutive keypress events into a single "input" breadcrumb' , function ( done ) {
537
+ var iframe = this . iframe ;
538
+
539
+ iframeExecute ( iframe , done ,
540
+ function ( ) {
541
+ setTimeout ( done ) ;
542
+
543
+ // some browsers trigger onpopstate for load / reset breadcrumb state
544
+ Raven . _breadcrumbs = [ ] ;
545
+
546
+ // keypress <input/> twice
547
+ var keypress1 = document . createEvent ( 'KeyboardEvent' ) ;
548
+ keypress1 . initKeyboardEvent ( "keypress" , true , true , window , "b" , 66 , 0 , "" , false ) ;
549
+
550
+ var keypress2 = document . createEvent ( 'KeyboardEvent' ) ;
551
+ keypress2 . initKeyboardEvent ( "keypress" , true , true , window , "a" , 65 , 0 , "" , false ) ;
552
+
553
+ var input = document . getElementsByTagName ( 'input' ) [ 0 ] ;
554
+ input . dispatchEvent ( keypress1 ) ;
555
+ input . dispatchEvent ( keypress2 ) ;
556
+ } ,
557
+ function ( ) {
558
+ var Raven = iframe . contentWindow . Raven ,
559
+ breadcrumbs = Raven . _breadcrumbs ;
560
+
561
+ assert . equal ( breadcrumbs . length , 1 ) ;
562
+
563
+ assert . equal ( breadcrumbs [ 0 ] . type , 'ui_event' ) ;
564
+ assert . equal ( breadcrumbs [ 0 ] . data . target , 'body > form#foo-form > input[name="foo"][placeholder="lol"]' ) ;
565
+ assert . equal ( breadcrumbs [ 0 ] . data . type , 'input' ) ;
566
+ }
567
+ ) ;
568
+ } ) ;
569
+
570
+ it ( 'should flush keypress breadcrumbs when an error is thrown' , function ( done ) {
571
+ var iframe = this . iframe ;
572
+
573
+ iframeExecute ( iframe , done ,
574
+ function ( ) {
575
+ setTimeout ( done ) ;
576
+
577
+ // some browsers trigger onpopstate for load / reset breadcrumb state
578
+ Raven . _breadcrumbs = [ ] ;
579
+
580
+ // keypress <input/>
581
+ var keypress = document . createEvent ( 'KeyboardEvent' ) ;
582
+ keypress . initKeyboardEvent ( "keypress" , true , true , window , "b" , 66 , 0 , "" , false ) ;
583
+
584
+ var input = document . getElementsByTagName ( 'input' ) [ 0 ] ;
585
+ input . dispatchEvent ( keypress ) ;
586
+
587
+ foo ( ) ; // throw exception
588
+ } ,
589
+ function ( ) {
590
+ var Raven = iframe . contentWindow . Raven ,
591
+ breadcrumbs = Raven . _breadcrumbs ;
592
+
593
+ // 2 breadcrumbs: `ui_event`, then `error`
594
+ assert . equal ( breadcrumbs . length , 2 ) ;
595
+
596
+ assert . equal ( breadcrumbs [ 0 ] . type , 'ui_event' ) ;
597
+ assert . equal ( breadcrumbs [ 0 ] . data . target , 'body > form#foo-form > input[name="foo"][placeholder="lol"]' ) ;
598
+ assert . equal ( breadcrumbs [ 0 ] . data . type , 'input' ) ;
599
+ }
600
+ ) ;
601
+ } ) ;
602
+
603
+ it ( 'should flush keypress breadcrumb when input event occurs immediately after' , function ( done ) {
604
+ var iframe = this . iframe ;
605
+
606
+ iframeExecute ( iframe , done ,
607
+ function ( ) {
608
+ setTimeout ( done ) ;
609
+
610
+ // some browsers trigger onpopstate for load / reset breadcrumb state
611
+ Raven . _breadcrumbs = [ ] ;
612
+
613
+ // 1st keypress <input/>
614
+ var keypress1 = document . createEvent ( 'KeyboardEvent' ) ;
615
+ keypress1 . initKeyboardEvent ( "keypress" , true , true , window , "b" , 66 , 0 , "" , false ) ;
616
+
617
+ // click <input/>
618
+ var click = document . createEvent ( 'MouseEvent' ) ;
619
+ click . initMouseEvent (
620
+ "click" ,
621
+ true /* bubble */ ,
622
+ true /* cancelable */ ,
623
+ window ,
624
+ null ,
625
+ 0 , 0 , 0 , 0 , /* coordinates */
626
+ false , false , false , false , /* modifier keys */
627
+ 0 /*left*/ ,
628
+ null
629
+ ) ;
630
+
631
+ // 2nd keypress
632
+ var keypress2 = document . createEvent ( 'KeyboardEvent' ) ;
633
+ keypress2 . initKeyboardEvent ( "keypress" , true , true , window , "a" , 65 , 0 , "" , false ) ;
634
+
635
+ var input = document . getElementsByTagName ( 'input' ) [ 0 ] ;
636
+ input . dispatchEvent ( keypress1 ) ;
637
+ input . dispatchEvent ( click ) ;
638
+ input . dispatchEvent ( keypress2 ) ;
639
+ } ,
640
+ function ( ) {
641
+ var Raven = iframe . contentWindow . Raven ,
642
+ breadcrumbs = Raven . _breadcrumbs ;
643
+
644
+ // 2x `ui_event`
645
+ assert . equal ( breadcrumbs . length , 3 ) ;
646
+
647
+ assert . equal ( breadcrumbs [ 0 ] . type , 'ui_event' ) ;
648
+ assert . equal ( breadcrumbs [ 0 ] . data . target , 'body > form#foo-form > input[name="foo"][placeholder="lol"]' ) ;
649
+ assert . equal ( breadcrumbs [ 0 ] . data . type , 'input' ) ;
650
+
651
+ assert . equal ( breadcrumbs [ 1 ] . type , 'ui_event' ) ;
652
+ assert . equal ( breadcrumbs [ 1 ] . data . target , 'body > form#foo-form > input[name="foo"][placeholder="lol"]' ) ;
653
+ assert . equal ( breadcrumbs [ 1 ] . data . type , 'click' ) ;
654
+
655
+ assert . equal ( breadcrumbs [ 2 ] . type , 'ui_event' ) ;
656
+ assert . equal ( breadcrumbs [ 2 ] . data . target , 'body > form#foo-form > input[name="foo"][placeholder="lol"]' ) ;
657
+ assert . equal ( breadcrumbs [ 2 ] . data . type , 'input' ) ;
658
+
659
+ }
660
+ ) ;
661
+ } ) ;
662
+
539
663
it ( 'should record history.[pushState|back] changes as navigation breadcrumbs' , function ( done ) {
540
664
var iframe = this . iframe ;
541
665
0 commit comments