1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/spec/ruby/core/string/shared/chars.rb
2019-06-27 21:02:36 +02:00

78 lines
2.5 KiB
Ruby

# -*- encoding: utf-8 -*-
require_relative '../../../spec_helper'
require_relative '../fixtures/classes'
describe :string_chars, shared: true do
it "passes each char in self to the given block" do
a = []
"hello".send(@method) { |c| a << c }
a.should == ['h', 'e', 'l', 'l', 'o']
end
it "returns self" do
s = StringSpecs::MyString.new "hello"
s.send(@method){}.should equal(s)
end
it "is unicode aware" do
"\303\207\342\210\202\303\251\306\222g".send(@method).to_a.should ==
["\303\207", "\342\210\202", "\303\251", "\306\222", "g"]
end
it "returns characters in the same encoding as self" do
"&%".force_encoding('Shift_JIS').send(@method).to_a.all? {|c| c.encoding.name.should == 'Shift_JIS'}
"&%".encode('BINARY').send(@method).to_a.all? {|c| c.encoding.should == Encoding::BINARY }
end
it "works with multibyte characters" do
s = "\u{8987}".force_encoding("UTF-8")
s.bytesize.should == 3
s.send(@method).to_a.should == [s]
end
it "works if the String's contents is invalid for its encoding" do
xA4 = [0xA4].pack('C')
xA4.force_encoding('UTF-8')
xA4.valid_encoding?.should be_false
xA4.send(@method).to_a.should == [xA4.force_encoding("UTF-8")]
end
it "returns a different character if the String is transcoded" do
s = "\u{20AC}".force_encoding('UTF-8')
s.encode('UTF-8').send(@method).to_a.should == ["\u{20AC}".force_encoding('UTF-8')]
s.encode('iso-8859-15').send(@method).to_a.should == [[0xA4].pack('C').force_encoding('iso-8859-15')]
s.encode('iso-8859-15').encode('UTF-8').send(@method).to_a.should == ["\u{20AC}".force_encoding('UTF-8')]
end
it "uses the String's encoding to determine what characters it contains" do
s = "\u{24B62}"
s.force_encoding('UTF-8').send(@method).to_a.should == [
s.force_encoding('UTF-8')
]
s.force_encoding('BINARY').send(@method).to_a.should == [
[0xF0].pack('C').force_encoding('BINARY'),
[0xA4].pack('C').force_encoding('BINARY'),
[0xAD].pack('C').force_encoding('BINARY'),
[0xA2].pack('C').force_encoding('BINARY')
]
s.force_encoding('SJIS').send(@method).to_a.should == [
[0xF0,0xA4].pack('CC').force_encoding('SJIS'),
[0xAD].pack('C').force_encoding('SJIS'),
[0xA2].pack('C').force_encoding('SJIS')
]
end
it "taints resulting strings when self is tainted" do
str = "hello"
str.send(@method) do |x|
x.tainted?.should == false
end
str.dup.taint.send(@method) do |x|
x.tainted?.should == true
end
end
end