@@ -600,6 +600,106 @@ - (void)testMoveCursorLeft {
600
600
assert (grid.cursorX == 2 );
601
601
}
602
602
603
+ // Make sure that moveCursorLeft wraps around soft EOLs
604
+ - (void )testMoveCursorLeftWrappingAroundSoftEOL {
605
+ VT100Grid *grid = [self mediumGrid ]; // 4x4
606
+
607
+ NSString *string = @" abcdef" ;
608
+ screen_char_t *line = [self screenCharLineForString: string];
609
+ LineBuffer *lineBuffer = [[[LineBuffer alloc ] initWithBlockSize: 1000 ] autorelease ];
610
+ [grid appendCharsAtCursor: line
611
+ length: [string length ]
612
+ scrollingIntoLineBuffer: lineBuffer
613
+ unlimitedScrollback: YES
614
+ useScrollbackWithRegion: NO
615
+ wraparound: YES
616
+ ansi: NO
617
+ insert: NO ];
618
+ assert ([[grid compactLineDump ] isEqualToString:
619
+ @" abcd\n "
620
+ @" ef..\n "
621
+ @" ....\n "
622
+ @" ...." ]);
623
+
624
+ assert (grid.cursorX == 2 );
625
+ assert (grid.cursorY == 1 );
626
+ [grid moveCursorLeft: 4 ];
627
+ assert (grid.cursorX == 2 );
628
+ assert (grid.cursorY == 0 );
629
+ }
630
+
631
+ // Make sure that moveCursorLeft wraps around soft EOLs
632
+ - (void )testMoveCursorLeftWrappingAroundDoubleWideCharEOL {
633
+ VT100Grid *grid = [[[VT100Grid alloc ] initWithSize: VT100GridSizeMake (3 , 3 )
634
+ delegate: self ] autorelease ];
635
+
636
+ NSString *string = @" abc-" ; // c is double-width
637
+ screen_char_t *line = [self screenCharLineForString: string];
638
+ LineBuffer *lineBuffer = [[[LineBuffer alloc ] initWithBlockSize: 1000 ] autorelease ];
639
+ [grid appendCharsAtCursor: line
640
+ length: [string length ]
641
+ scrollingIntoLineBuffer: lineBuffer
642
+ unlimitedScrollback: YES
643
+ useScrollbackWithRegion: NO
644
+ wraparound: YES
645
+ ansi: NO
646
+ insert: NO ];
647
+ assert ([[grid compactLineDump ] isEqualToString:
648
+ @" ab>\n "
649
+ @" c-.\n "
650
+ @" ..." ]);
651
+
652
+ assert (grid.cursorX == 2 );
653
+ assert (grid.cursorY == 1 );
654
+ [grid moveCursorLeft: 4 ];
655
+ assert (grid.cursorX == 1 );
656
+ assert (grid.cursorY == 0 );
657
+ }
658
+
659
+ // Make sure that moveCursorLeft wraps around soft EOLs
660
+ - (void )testMoveCursorLeftNotWrappingAroundHardEOL {
661
+ VT100Grid *grid = [self mediumGrid ]; // 4x4
662
+
663
+ NSString *string = @" abc" ;
664
+ screen_char_t *line = [self screenCharLineForString: string];
665
+ LineBuffer *lineBuffer = [[[LineBuffer alloc ] initWithBlockSize: 1000 ] autorelease ];
666
+ [grid appendCharsAtCursor: line
667
+ length: [string length ]
668
+ scrollingIntoLineBuffer: lineBuffer
669
+ unlimitedScrollback: YES
670
+ useScrollbackWithRegion: NO
671
+ wraparound: YES
672
+ ansi: NO
673
+ insert: NO ];
674
+ [grid moveCursorDownOneLineScrollingIntoLineBuffer: lineBuffer
675
+ unlimitedScrollback: YES
676
+ useScrollbackWithRegion: NO ];
677
+ grid.cursorX = 0 ;
678
+
679
+ string = @" d" ;
680
+ line = [self screenCharLineForString: string];
681
+ [grid appendCharsAtCursor: line
682
+ length: [string length ]
683
+ scrollingIntoLineBuffer: lineBuffer
684
+ unlimitedScrollback: YES
685
+ useScrollbackWithRegion: NO
686
+ wraparound: YES
687
+ ansi: NO
688
+ insert: NO ];
689
+
690
+ assert ([[grid compactLineDump ] isEqualToString:
691
+ @" abc.\n "
692
+ @" d...\n "
693
+ @" ....\n "
694
+ @" ...." ]);
695
+
696
+ assert (grid.cursorX == 1 );
697
+ assert (grid.cursorY == 1 );
698
+ [grid moveCursorLeft: 4 ];
699
+ assert (grid.cursorX == 0 );
700
+ assert (grid.cursorY == 1 );
701
+ }
702
+
603
703
- (void )testMoveCursorRight {
604
704
VT100Grid *grid = [self mediumGrid ];
605
705
grid.cursorX = 2 ;
@@ -2377,6 +2477,37 @@ - (void)testAppendCharsAtCursor {
2377
2477
expectCursor: VT100GridCoordMake (3 , 0 )
2378
2478
expectLineBuffer: @" "
2379
2479
expectDropped: 0 ];
2480
+
2481
+ // Overwriting a DWC_SKIP converts EOL_DWC to EOL_SOFT
2482
+ isAnsi_ = NO ;
2483
+ wraparoundMode_ = YES ;
2484
+ [self doAppendCharsAtCursorTestWithInitialBuffer: @" abc>>\n "
2485
+ @" D-..!"
2486
+ scrollRegion: VT100GridRectMake (0 , 0 , -1 , -1 )
2487
+ useScrollbackWithRegion: YES
2488
+ unlimitedScrollback: NO
2489
+ appending: @" d"
2490
+ at: VT100GridCoordMake (3 , 0 )
2491
+ expect: @" abcd+\n "
2492
+ @" D-..!"
2493
+ expectCursor: VT100GridCoordMake (4 , 0 )
2494
+ expectLineBuffer: @" "
2495
+ expectDropped: 0 ];
2496
+
2497
+ isAnsi_ = NO ;
2498
+ wraparoundMode_ = YES ;
2499
+ [self doAppendCharsAtCursorTestWithInitialBuffer: @" abc>>\n "
2500
+ @" D-..!"
2501
+ scrollRegion: VT100GridRectMake (0 , 0 , -1 , -1 )
2502
+ useScrollbackWithRegion: YES
2503
+ unlimitedScrollback: NO
2504
+ appending: @" def"
2505
+ at: VT100GridCoordMake (3 , 0 )
2506
+ expect: @" abcd+\n "
2507
+ @" ef..!"
2508
+ expectCursor: VT100GridCoordMake (2 , 1 )
2509
+ expectLineBuffer: @" "
2510
+ expectDropped: 0 ];
2380
2511
}
2381
2512
2382
2513
- (void )testCoordinateBefore {
0 commit comments