@@ -33,33 +33,45 @@ def test_split_by_width
33
33
assert_equal [ [ 'abc' , nil , 'de' ] , 2 ] , Reline ::Unicode . split_by_width ( 'abcde' , 3 )
34
34
assert_equal [ [ 'abc' , nil , 'def' , nil , '' ] , 3 ] , Reline ::Unicode . split_by_width ( 'abcdef' , 3 )
35
35
assert_equal [ [ 'ab' , nil , 'あd' , nil , 'ef' ] , 3 ] , Reline ::Unicode . split_by_width ( 'abあdef' , 3 )
36
- assert_equal [ [ "ab \1 zero \2 c" , nil , 'def' , nil , '' ] , 3 ] , Reline ::Unicode . split_by_width ( "ab\1 zero \2 cdef" , 3 )
36
+ assert_equal [ [ 'ab[zero]c' , nil , 'def' , nil , '' ] , 3 ] , Reline ::Unicode . split_by_width ( "ab\1 [zero] \2 cdef" , 3 )
37
37
assert_equal [ [ "\e [31mabc" , nil , "\e [31md\e [42mef" , nil , "\e [31m\e [42mg" ] , 3 ] , Reline ::Unicode . split_by_width ( "\e [31mabcd\e [42mefg" , 3 )
38
38
assert_equal [ [ "ab\e ]0;1\a c" , nil , "\e ]0;1\a d" ] , 2 ] , Reline ::Unicode . split_by_width ( "ab\e ]0;1\a cd" , 3 )
39
39
end
40
40
41
41
def test_split_by_width_csi_reset_sgr_optimization
42
42
assert_equal [ [ "\e [1ma\e [mb\e [2mc" , nil , "\e [2md\e [0me\e [3mf" , nil , "\e [3mg" ] , 3 ] , Reline ::Unicode . split_by_width ( "\e [1ma\e [mb\e [2mcd\e [0me\e [3mfg" , 3 )
43
- assert_equal [ [ "\e [1ma\1 \ e [mzero\e [0m\2 \e [2mb" , nil , "\e [1m\e [2mc" ] , 2 ] , Reline ::Unicode . split_by_width ( "\e [1ma\1 \e [mzero\e [0m\2 \e [2mbc" , 2 )
43
+ assert_equal [ [ "\e [1ma\e [mzero\e [0m\e [2mb" , nil , "\e [1m\e [2mc" ] , 2 ] , Reline ::Unicode . split_by_width ( "\e [1ma\1 \e [mzero\e [0m\2 \e [2mbc" , 2 )
44
44
end
45
45
46
46
def test_take_range
47
47
assert_equal 'cdef' , Reline ::Unicode . take_range ( 'abcdefghi' , 2 , 4 )
48
48
assert_equal 'あde' , Reline ::Unicode . take_range ( 'abあdef' , 2 , 4 )
49
- assert_equal " \1 zero \2 cdef" , Reline ::Unicode . take_range ( "ab\1 zero \2 cdef" , 2 , 4 )
50
- assert_equal "b \1 zero \2 cde" , Reline ::Unicode . take_range ( "ab\1 zero \2 cdef" , 1 , 4 )
49
+ assert_equal '[zero]cdef' , Reline ::Unicode . take_range ( "ab\1 [zero] \2 cdef" , 2 , 4 )
50
+ assert_equal 'b[zero]cde' , Reline ::Unicode . take_range ( "ab\1 [zero] \2 cdef" , 1 , 4 )
51
51
assert_equal "\e [31mcd\e [42mef" , Reline ::Unicode . take_range ( "\e [31mabcd\e [42mefg" , 2 , 4 )
52
52
assert_equal "\e ]0;1\a cd" , Reline ::Unicode . take_range ( "ab\e ]0;1\a cd" , 2 , 3 )
53
53
assert_equal 'いう' , Reline ::Unicode . take_range ( 'あいうえお' , 2 , 4 )
54
54
end
55
55
56
+ def test_nonprinting_start_end
57
+ # \1 and \2 should be removed
58
+ assert_equal 'ab[zero]cd' , Reline ::Unicode . take_range ( "ab\1 [zero]\2 cdef" , 0 , 4 )
59
+ assert_equal [ [ 'ab[zero]cd' , nil , 'ef' ] , 2 ] , Reline ::Unicode . split_by_width ( "ab\1 [zero]\2 cdef" , 4 )
60
+ # CSI between \1 and \2 does not need to be applied to the sebsequent line
61
+ assert_equal [ [ "\e [31mab\e [32mcd" , nil , "\e [31mef" ] , 2 ] , Reline ::Unicode . split_by_width ( "\e [31mab\1 \e [32m\2 cdef" , 4 )
62
+ end
63
+
64
+ def test_strip_non_printing_start_end
65
+ assert_equal "ab[zero]cd[ze\1 ro]ef[zero]" , Reline ::Unicode . strip_non_printing_start_end ( "ab\1 [zero]\2 cd\1 [ze\1 ro]\2 ef\1 [zero]" )
66
+ end
67
+
56
68
def test_calculate_width
57
69
assert_equal 9 , Reline ::Unicode . calculate_width ( 'abcdefghi' )
58
70
assert_equal 9 , Reline ::Unicode . calculate_width ( 'abcdefghi' , true )
59
71
assert_equal 7 , Reline ::Unicode . calculate_width ( 'abあdef' )
60
72
assert_equal 7 , Reline ::Unicode . calculate_width ( 'abあdef' , true )
61
- assert_equal 14 , Reline ::Unicode . calculate_width ( "ab\1 zero \2 cdef" )
62
- assert_equal 6 , Reline ::Unicode . calculate_width ( "ab\1 zero \2 cdef" , true )
73
+ assert_equal 16 , Reline ::Unicode . calculate_width ( "ab\1 [zero] \2 cdef" )
74
+ assert_equal 6 , Reline ::Unicode . calculate_width ( "ab\1 [zero] \2 cdef" , true )
63
75
assert_equal 19 , Reline ::Unicode . calculate_width ( "\e [31mabcd\e [42mefg" )
64
76
assert_equal 7 , Reline ::Unicode . calculate_width ( "\e [31mabcd\e [42mefg" , true )
65
77
assert_equal 12 , Reline ::Unicode . calculate_width ( "ab\e ]0;1\a cd" )
@@ -86,7 +98,7 @@ def test_take_mbchar_range
86
98
assert_equal [ ' うえお ' , 3 , 10 ] , Reline ::Unicode . take_mbchar_range ( 'あいうえお' , 3 , 10 , padding : true )
87
99
assert_equal [ " \e [41mうえお\e [0m " , 3 , 10 ] , Reline ::Unicode . take_mbchar_range ( "あい\e [41mうえお" , 3 , 10 , padding : true )
88
100
assert_equal [ "\e [41m \e [42mい\e [43m " , 1 , 4 ] , Reline ::Unicode . take_mbchar_range ( "\e [41mあ\e [42mい\e [43mう" , 1 , 4 , padding : true )
89
- assert_equal [ "\e [31mc\1 ABC \2 d \ e [0mef" , 2 , 4 ] , Reline ::Unicode . take_mbchar_range ( "\e [31mabc\1 ABC \2 d\e [0mefghi" , 2 , 4 )
101
+ assert_equal [ "\e [31mc[ABC]d \ e [0mef" , 2 , 4 ] , Reline ::Unicode . take_mbchar_range ( "\e [31mabc\1 [ABC] \2 d\e [0mefghi" , 2 , 4 )
90
102
assert_equal [ "\e [41m \e [42mい\e [43m " , 1 , 4 ] , Reline ::Unicode . take_mbchar_range ( "\e [41mあ\e [42mい\e [43mう" , 1 , 4 , padding : true )
91
103
end
92
104
0 commit comments