@@ -409,8 +409,40 @@ public void HistoryRecallCurrentLine()
409
409
{
410
410
TestSetup ( KeyMode . Cmd ) ;
411
411
412
+ // Recall history backward and forward.
412
413
SetHistory ( "echo foo" , "echo bar" ) ;
413
- Test ( "ec" , Keys ( "ec" , _ . UpArrow , _ . UpArrow , _ . DownArrow , _ . DownArrow ) ) ;
414
+ Test ( "ec" , Keys (
415
+ "ec" ,
416
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
417
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo foo" ) ) ,
418
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
419
+ _ . DownArrow ) ) ;
420
+
421
+ // Verify that the saved current line gets reset when the line gets edited.
422
+ // Recall history, then edit the line, and recall again.
423
+ SetHistory ( "echo foo" , "echo bar" ) ;
424
+ Test ( "get" , Keys (
425
+ "ec" , _ . UpArrow ,
426
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "ec" ) ) ,
427
+ _ . Escape , "get" , _ . UpArrow , _ . DownArrow ) ) ;
428
+
429
+ // Recall history, then edit the line, and recall again.
430
+ SetHistory ( "echo foo" , "echo bar" ) ;
431
+ Test ( "ge" , Keys (
432
+ "ec" , _ . UpArrow ,
433
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "ec" ) ) ,
434
+ _ . Backspace , _ . Backspace , "ge" , CheckThat ( ( ) => AssertLineIs ( "ge" ) ) ,
435
+ _ . UpArrow , _ . DownArrow ) ) ;
436
+
437
+ // Recall history, then edit the line, and recall again.
438
+ SetHistory ( "echo foo" , "echo bar" ) ;
439
+ Test ( "" , Keys (
440
+ "ec" , _ . UpArrow ,
441
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "ec" ) ) ,
442
+ "h" , CheckThat ( ( ) => AssertLineIs ( "ech" ) ) ,
443
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
444
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "ech" ) ) ,
445
+ _ . Escape ) ) ;
414
446
}
415
447
416
448
[ SkippableFact ]
@@ -420,8 +452,121 @@ public void HistorySearchCurrentLine()
420
452
new KeyHandler ( "UpArrow" , PSConsoleReadLine . HistorySearchBackward ) ,
421
453
new KeyHandler ( "DownArrow" , PSConsoleReadLine . HistorySearchForward ) ) ;
422
454
455
+ // Search history backward and forward.
456
+ SetHistory ( "echo foo" , "echo bar" ) ;
457
+ Test ( "ec" , Keys (
458
+ "ec" ,
459
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
460
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo foo" ) ) ,
461
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
462
+ _ . DownArrow ) ) ;
463
+
464
+ // Verify that the saved current line gets reset when the line gets edited.
465
+ // Search history, then edit the line, and search again.
466
+ SetHistory ( "echo foo" , "echo bar" ) ;
467
+ Test ( "echo " , Keys (
468
+ "ec" , _ . UpArrow ,
469
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "ec" ) ) ,
470
+ _ . Escape , "echo " ,
471
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
472
+ _ . DownArrow ) ) ;
473
+
474
+ // Search history, then edit the line, and search again.
475
+ SetHistory ( "echo foo" , "echo bar" ) ;
476
+ Test ( "echo" , Keys (
477
+ "ec" , _ . UpArrow , _ . DownArrow ,
478
+ "ho" , CheckThat ( ( ) => AssertLineIs ( "echo" ) ) ,
479
+ _ . UpArrow , _ . DownArrow ) ) ;
480
+
481
+ // Search history, then edit the line, and search again.
482
+ SetHistory ( "echo foo" , "echo bar" ) ;
483
+ Test ( "e" , Keys (
484
+ "ec" , _ . UpArrow , _ . DownArrow ,
485
+ _ . Backspace , CheckThat ( ( ) => AssertLineIs ( "e" ) ) ,
486
+ _ . UpArrow , _ . DownArrow ) ) ;
487
+
488
+ // Search history, then edit the line, and search again.
489
+ SetHistory ( "echo foo" , "echo bar" ) ;
490
+ Test ( "" , Keys (
491
+ "ec" , _ . UpArrow , _ . DownArrow , "ho f" ,
492
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo foo" ) ) ,
493
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "echo f" ) ) ,
494
+ _ . Escape ) ) ;
495
+ }
496
+
497
+ [ SkippableFact ]
498
+ public void HistorySavedCurrentLine ( )
499
+ {
500
+ TestSetup ( KeyMode . Cmd ,
501
+ new KeyHandler ( "F3" , PSConsoleReadLine . BeginningOfHistory ) ,
502
+ new KeyHandler ( "Shift+F3" , PSConsoleReadLine . EndOfHistory ) ) ;
503
+
504
+ // Mix different history commands to verify that the saved current line and
505
+ // the history index stay the same while in a series of history commands.
506
+
423
507
SetHistory ( "echo foo" , "echo bar" ) ;
424
- Test ( "ec" , Keys ( "ec" , _ . UpArrow , _ . UpArrow , _ . DownArrow , _ . DownArrow ) ) ;
508
+ Test ( "ec" , Keys (
509
+ "ec" ,
510
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
511
+ _ . F3 , CheckThat ( ( ) => AssertLineIs ( "echo foo" ) ) ,
512
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
513
+ _ . DownArrow ) ) ;
514
+
515
+ SetHistory ( "echo foo" , "get zoo" , "echo bar" ) ;
516
+ Test ( "ec" , Keys (
517
+ "ec" ,
518
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
519
+ _ . F3 , CheckThat ( ( ) => AssertLineIs ( "echo foo" ) ) ,
520
+ _ . Shift_F3 ) ) ;
521
+
522
+ SetHistory ( "echo foo" , "get zoo" , "echo bar" ) ;
523
+ Test ( "e" , Keys (
524
+ "e" ,
525
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
526
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "get zoo" ) ) ,
527
+ _ . Shift_F3 ) ) ;
528
+
529
+ SetHistory ( "echo foo" , "get zoo" , "echo bar" ) ;
530
+ Test ( "ech" , Keys (
531
+ "ech" ,
532
+ _ . F8 , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
533
+ _ . F3 , CheckThat ( ( ) => AssertLineIs ( "echo foo" ) ) ,
534
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "get zoo" ) ) ,
535
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
536
+ _ . DownArrow ) ) ;
537
+
538
+ SetHistory ( "echo foo" , "get zoo" , "echo bar" ) ;
539
+ Test ( "ech" , Keys (
540
+ "ech" ,
541
+ _ . F8 , CheckThat ( ( ) => AssertLineIs ( "echo bar" ) ) ,
542
+ _ . F8 , CheckThat ( ( ) => AssertLineIs ( "echo foo" ) ) ,
543
+ _ . Shift_F3 ) ) ;
544
+
545
+ SetHistory ( "echo foo" , "get bar" , "echo f" ) ;
546
+ Test ( "ec" , Keys (
547
+ "ec" ,
548
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo f" ) ) ,
549
+ _ . F8 , CheckThat ( ( ) => AssertLineIs ( "echo foo" ) ) ,
550
+ _ . Shift_F8 , CheckThat ( ( ) => AssertLineIs ( "echo f" ) ) ,
551
+ _ . DownArrow ) ) ;
552
+
553
+ SetHistory ( "echo foo" , "get bar" , "echo f" ) ;
554
+ Test ( "ec" , Keys (
555
+ "ec" , _ . UpArrow , _ . F8 ,
556
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "get bar" ) ) ,
557
+ _ . DownArrow , CheckThat ( ( ) => AssertLineIs ( "echo f" ) ) ,
558
+ _ . Shift_F3 ) ) ;
559
+
560
+ SetHistory ( "echo kv" , "get bar" , "echo f" ) ;
561
+ Test ( "e" , Keys (
562
+ "e" ,
563
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "echo f" ) ) ,
564
+ _ . Ctrl_r , "v" , _ . Escape ,
565
+ CheckThat ( ( ) => AssertLineIs ( "echo kv" ) ) ,
566
+ _ . Ctrl_s , "f" , _ . Escape ,
567
+ CheckThat ( ( ) => AssertLineIs ( "echo f" ) ) ,
568
+ _ . UpArrow , CheckThat ( ( ) => AssertLineIs ( "get bar" ) ) ,
569
+ _ . DownArrow , _ . DownArrow ) ) ;
425
570
}
426
571
427
572
[ SkippableFact ]
0 commit comments