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/replace.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

77 lines
2.1 KiB
Ruby

describe :string_replace, shared: true do
it "returns self" do
a = "a"
a.send(@method, "b").should equal(a)
end
it "replaces the content of self with other" do
a = "some string"
a.send(@method, "another string")
a.should == "another string"
end
ruby_version_is ''...'2.7' do
it "taints self if other is tainted" do
a = ""
b = "".taint
a.send(@method, b)
a.tainted?.should == true
end
it "does not untaint self if other is untainted" do
a = "".taint
b = ""
a.send(@method, b)
a.tainted?.should == true
end
it "untrusts self if other is untrusted" do
a = ""
b = "".untrust
a.send(@method, b)
a.untrusted?.should == true
end
it "does not trust self if other is trusted" do
a = "".untrust
b = ""
a.send(@method, b)
a.untrusted?.should == true
end
end
it "replaces the encoding of self with that of other" do
a = "".encode("UTF-16LE")
b = "".encode("UTF-8")
a.send(@method, b)
a.encoding.should == Encoding::UTF_8
end
it "carries over the encoding invalidity" do
a = "\u{8765}".force_encoding('ascii')
"".send(@method, a).valid_encoding?.should be_false
end
it "tries to convert other to string using to_str" do
other = mock('x')
other.should_receive(:to_str).and_return("converted to a string")
"hello".send(@method, other).should == "converted to a string"
end
it "raises a TypeError if other can't be converted to string" do
-> { "hello".send(@method, 123) }.should raise_error(TypeError)
-> { "hello".send(@method, []) }.should raise_error(TypeError)
-> { "hello".send(@method, mock('x')) }.should raise_error(TypeError)
end
it "raises a #{frozen_error_class} on a frozen instance that is modified" do
a = "hello".freeze
-> { a.send(@method, "world") }.should raise_error(frozen_error_class)
end
# see [ruby-core:23666]
it "raises a #{frozen_error_class} on a frozen instance when self-replacing" do
a = "hello".freeze
-> { a.send(@method, a) }.should raise_error(frozen_error_class)
end
end