@@ -33,33 +33,45 @@ def test_split_by_width
3333 assert_equal [ [ 'abc' , nil , 'de' ] , 2 ] , Reline ::Unicode . split_by_width ( 'abcde' , 3 )
3434 assert_equal [ [ 'abc' , nil , 'def' , nil , '' ] , 3 ] , Reline ::Unicode . split_by_width ( 'abcdef' , 3 )
3535 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 )
3737 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 )
3838 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 )
3939 end
4040
4141 def test_split_by_width_csi_reset_sgr_optimization
4242 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 )
4444 end
4545
4646 def test_take_range
4747 assert_equal 'cdef' , Reline ::Unicode . take_range ( 'abcdefghi' , 2 , 4 )
4848 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 )
5151 assert_equal "\e [31mcd\e [42mef" , Reline ::Unicode . take_range ( "\e [31mabcd\e [42mefg" , 2 , 4 )
5252 assert_equal "\e ]0;1\a cd" , Reline ::Unicode . take_range ( "ab\e ]0;1\a cd" , 2 , 3 )
5353 assert_equal 'いう' , Reline ::Unicode . take_range ( 'あいうえお' , 2 , 4 )
5454 end
5555
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+
5668 def test_calculate_width
5769 assert_equal 9 , Reline ::Unicode . calculate_width ( 'abcdefghi' )
5870 assert_equal 9 , Reline ::Unicode . calculate_width ( 'abcdefghi' , true )
5971 assert_equal 7 , Reline ::Unicode . calculate_width ( 'abあdef' )
6072 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 )
6375 assert_equal 19 , Reline ::Unicode . calculate_width ( "\e [31mabcd\e [42mefg" )
6476 assert_equal 7 , Reline ::Unicode . calculate_width ( "\e [31mabcd\e [42mefg" , true )
6577 assert_equal 12 , Reline ::Unicode . calculate_width ( "ab\e ]0;1\a cd" )
@@ -86,7 +98,7 @@ def test_take_mbchar_range
8698 assert_equal [ ' うえお ' , 3 , 10 ] , Reline ::Unicode . take_mbchar_range ( 'あいうえお' , 3 , 10 , padding : true )
8799 assert_equal [ " \e [41mうえお\e [0m " , 3 , 10 ] , Reline ::Unicode . take_mbchar_range ( "あい\e [41mうえお" , 3 , 10 , padding : true )
88100 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 )
90102 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 )
91103 end
92104
0 commit comments