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
Jeremy Evans ffd0820ab3 Deprecate taint/trust and related methods, and make the methods no-ops
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.
2019-11-18 01:00:25 +02:00

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