@@ -13,6 +13,17 @@ var Range = require("./range").Range;
13
13
require ( "./ext/language_tools" ) ;
14
14
var Autocomplete = require ( "./autocomplete" ) . Autocomplete ;
15
15
16
+ var MouseEvent = function ( type , opts ) {
17
+ var e = document . createEvent ( "MouseEvents" ) ;
18
+ e . initMouseEvent ( / c l i c k | w h e e l / . test ( type ) ? type : "mouse" + type ,
19
+ true , true , window ,
20
+ opts . detail ,
21
+ opts . x , opts . y , opts . x , opts . y ,
22
+ opts . ctrl , opts . alt , opts . shift , opts . meta ,
23
+ opts . button || 0 , opts . relatedTarget ) ;
24
+ return e ;
25
+ } ;
26
+
16
27
var editor ;
17
28
function initEditor ( value ) {
18
29
if ( editor ) {
@@ -448,6 +459,92 @@ module.exports = {
448
459
449
460
editor . destroy ( ) ;
450
461
editor . container . remove ( ) ;
462
+ } ,
463
+ "test: selection should follow hovermarker if setSelectOnHover true" : function ( done ) {
464
+ var editor = initEditor ( "hello world\n" ) ;
465
+
466
+ editor . completers = [
467
+ {
468
+ getCompletions : function ( editor , session , pos , prefix , callback ) {
469
+ var completions = [
470
+ {
471
+ caption : "option 1" ,
472
+ value : "one"
473
+ } , {
474
+ caption : "option 2" ,
475
+ value : "two"
476
+ } , {
477
+ caption : "option 3" ,
478
+ value : "three"
479
+ }
480
+ ] ;
481
+ callback ( null , completions ) ;
482
+ }
483
+ }
484
+ ] ;
485
+
486
+ var completer = Autocomplete . for ( editor ) ;
487
+ completer . setSelectOnHover = true ;
488
+ user . type ( "Ctrl-Space" ) ;
489
+ assert . equal ( editor . completer . popup . isOpen , true ) ;
490
+ assert . equal ( completer . popup . getRow ( ) , 0 ) ;
491
+
492
+ var text = completer . popup . renderer . content . childNodes [ 2 ] ;
493
+ var rect = text . getBoundingClientRect ( ) ;
494
+
495
+ // We need two mouse events to trigger the updating of the hover marker.
496
+ text . dispatchEvent ( new MouseEvent ( "move" , { x : rect . left , y : rect . top } ) ) ;
497
+ // Hover over the second row.
498
+ text . dispatchEvent ( new MouseEvent ( "move" , { x : rect . left + 1 , y : rect . top + 20 } ) ) ;
499
+
500
+ // Selected row should follow mouse.
501
+ editor . completer . popup . renderer . $loop . _flush ( ) ;
502
+ assert . equal ( completer . popup . getRow ( ) , 2 ) ;
503
+
504
+ done ( ) ;
505
+ } ,
506
+ "test: selection should not follow hovermarker if setSelectOnHover not set" : function ( done ) {
507
+ var editor = initEditor ( "hello world\n" ) ;
508
+
509
+ editor . completers = [
510
+ {
511
+ getCompletions : function ( editor , session , pos , prefix , callback ) {
512
+ var completions = [
513
+ {
514
+ caption : "option 1" ,
515
+ value : "one"
516
+ } , {
517
+ caption : "option 2" ,
518
+ value : "two"
519
+ } , {
520
+ caption : "option 3" ,
521
+ value : "three"
522
+ }
523
+ ] ;
524
+ callback ( null , completions ) ;
525
+ }
526
+ }
527
+ ] ;
528
+
529
+ var completer = Autocomplete . for ( editor ) ;
530
+
531
+ user . type ( "Ctrl-Space" ) ;
532
+ assert . equal ( editor . completer . popup . isOpen , true ) ;
533
+ assert . equal ( completer . popup . getRow ( ) , 0 ) ;
534
+
535
+ var text = completer . popup . renderer . content . childNodes [ 2 ] ;
536
+ var rect = text . getBoundingClientRect ( ) ;
537
+
538
+ // We need two mouse events to trigger the updating of the hover marker.
539
+ text . dispatchEvent ( new MouseEvent ( "move" , { x : rect . left , y : rect . top } ) ) ;
540
+ // Hover over the second row.
541
+ text . dispatchEvent ( new MouseEvent ( "move" , { x : rect . left + 1 , y : rect . top + 20 } ) ) ;
542
+
543
+ // Selected row should not follow mouse.
544
+ editor . completer . popup . renderer . $loop . _flush ( ) ;
545
+ assert . equal ( completer . popup . getRow ( ) , 0 ) ;
546
+
547
+ done ( ) ;
451
548
}
452
549
} ;
453
550
0 commit comments