@@ -89,4 +89,32 @@ def test_take_mbchar_range
8989 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 )
9090 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 )
9191 end
92+
93+ def test_encoding_conversion
94+ texts = [
95+ String . new ( "invalid\xFF utf8" , encoding : 'utf-8' ) ,
96+ String . new ( "invalid\xFF sjis" , encoding : 'sjis' ) ,
97+ "utf8#{ 33111 . chr ( 'sjis' ) } convertible" ,
98+ "utf8#{ 33222 . chr ( 'sjis' ) } inconvertible" ,
99+ "sjis->utf8->sjis#{ 60777 . chr ( 'sjis' ) } irreversible"
100+ ]
101+ utf8_texts = [
102+ 'invalid�utf8' ,
103+ 'invalid�sjis' ,
104+ 'utf8仝convertible' ,
105+ 'utf8�inconvertible' ,
106+ 'sjis->utf8->sjis劦irreversible'
107+ ]
108+ sjis_texts = [
109+ 'invalid?utf8' ,
110+ 'invalid?sjis' ,
111+ "utf8#{ 33111 . chr ( 'sjis' ) } convertible" ,
112+ 'utf8?inconvertible' ,
113+ "sjis->utf8->sjis#{ 60777 . chr ( 'sjis' ) } irreversible"
114+ ]
115+ assert_equal ( utf8_texts , texts . map { |s | Reline ::Unicode . safe_encode ( s , 'utf-8' ) } )
116+ assert_equal ( utf8_texts , texts . map { |s | Reline ::Unicode . safe_encode ( s , Encoding ::UTF_8 ) } )
117+ assert_equal ( sjis_texts , texts . map { |s | Reline ::Unicode . safe_encode ( s , 'sjis' ) } )
118+ assert_equal ( sjis_texts , texts . map { |s | Reline ::Unicode . safe_encode ( s , Encoding ::Windows_31J ) } )
119+ end
92120end
0 commit comments