mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00

This removes the related tests, and puts the related specs behind version guards. This affects all code in lib, including some libraries that may want to support older versions of Ruby.
80 lines
2.6 KiB
Ruby
80 lines
2.6 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
|
|
|
|
ruby_version_is ''...'2.7' do
|
|
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
|
|
end
|