1 # frozen_string_literal: false
3 require "-test-/string"
5 class Test_StringCStr < Test::Unit::TestCase
6 Bug4319 = '[ruby-dev:43094]'
9 s = Bug::String.new("abcdef")
12 assert_equal(0, s.cstr_term, Bug4319)
16 s = Bug::String.new(Bug::String.new("abcdef")*100000)
18 assert_equal(0, s.cstr_term, Bug4319)
22 s = Bug::String.new(Bug::String.new("abcdef")*5)
23 s = s.unterminated_substring(0, 29)
24 assert_equal(0, s.cstr_term, Bug4319)
28 s0 = Bug::String.new("abcdefgh"*8)
30 [4, 4*3-1, 8*3-1, 64].each do |n|
31 s = Bug::String.new(s0[0, n])
34 assert_equal(0, s.cstr_term)
37 s.set_len(n - n % s[0].bytesize)
40 assert_equal(0, s.cstr_term)
45 def test_rb_str_new_frozen_embed
46 str = Bug::String.cstr_noembed("rbconfig.rb")
47 str = Bug::String.rb_str_new_frozen(str)
48 assert_equal true, Bug::String.cstr_embedded?(str)
51 WCHARS = [Encoding::UTF_16BE, Encoding::UTF_16LE, Encoding::UTF_32BE, Encoding::UTF_32LE]
55 s = Bug::String.new("\u{4022}a".encode(enc))
57 assert_nothing_raised(ArgumentError) {s.cstr_term}
58 s.set_len(s.bytesize / 2)
59 assert_equal(1, s.size)
61 assert_equal(0, s.cstr_term)
66 str = "\u{4022}abcdef"
70 s = Bug::String.new(Bug::String.new(str.encode(enc))*n)
72 assert_nothing_raised(ArgumentError, enc.name) {s.cstr_term}
73 s.set_len(s.bytesize / 2)
74 assert_equal(len / 2, s.size, enc.name)
76 assert_equal(0, s.cstr_term, enc.name)
80 def test_wchar_lstrip!
81 assert_wchars_term_char(" a") {|s| s.lstrip!}
84 def test_wchar_rstrip!
85 assert_wchars_term_char("a ") {|s| s.rstrip!}
89 assert_wchars_term_char("a\n") {|s| s.chop!}
93 assert_wchars_term_char("a\n") {|s| s.chomp!}
97 assert_wchars_term_char("a"*30) {|s| s[29,1] = ""}
101 assert_wchars_term_char("foobar") {|s| s.sub!(/#{"foo".encode(s.encoding)}/, "")}
104 def test_wchar_delete!
105 assert_wchars_term_char("foobar") {|s| s.delete!("ao".encode(s.encoding))}
108 def test_wchar_squeeze!
109 assert_wchars_term_char("foo!") {|s| s.squeeze!}
113 assert_wchars_term_char("\u{3042}foobar") {|s|
115 s.tr!("\u{3042}".encode(enc), "c".encode(enc))
120 assert_wchars_term_char("\u{3042}foobar") {|s|
122 s.tr_s!("\u{3042}".encode(enc), "c".encode(enc))
126 def test_wchar_replace
127 assert_wchars_term_char("abc") {|s|
129 s.replace("abcdefghijklmnop")
134 def test_embedded_from_heap
136 embedded_string = "abcdefghi"
137 string = embedded_string.gsub("efg", "123")
139 non_terminated = "#{string}#{nil}"
140 assert_nil(Bug::String.cstr_term_char(non_terminated), gh821)
144 embedded_string = "ab".encode(enc)
145 string = embedded_string.gsub("b".encode(enc), "1".encode(enc))
147 non_terminated = "#{string}#{nil}"
148 c = Bug::String.cstr_term_char(non_terminated)
151 assert_empty(result, gh821)
154 def assert_wchars_term_char(str)
157 s = Bug::String.new(str.encode(enc))