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/strip_spec.rb
nagachika 5af5ea7f86 merge revision(s) cfd162d535: [Backport #17467]
Make String#{strip,lstrip}{,!} strip leading NUL bytes

	The documentation already specifies that they strip whitespace
	and defines whitespace to include null.

	This wraps the new behavior in the appropriate guards in the specs,
	but does not specify behavior for previous versions, because this
	is a bug that could be backported.

	Fixes [Bug #17467]
	---
	 spec/ruby/core/string/lstrip_spec.rb | 18 ++++++++++++------
	 spec/ruby/core/string/strip_spec.rb  | 22 ++++++++++------------
	 string.c                             |  4 ++--
	 test/ruby/test_string.rb             | 16 ++++++++++++++++
	 4 files changed, 40 insertions(+), 20 deletions(-)
2021-05-23 16:09:17 +09:00

60 lines
1.6 KiB
Ruby

require_relative '../../spec_helper'
require_relative 'fixtures/classes'
describe "String#strip" do
it "returns a new string with leading and trailing whitespace removed" do
" hello ".strip.should == "hello"
" hello world ".strip.should == "hello world"
"\tgoodbye\r\v\n".strip.should == "goodbye"
end
ruby_version_is '3.1' do
it "returns a copy of self without leading and trailing NULL bytes and whitespace" do
" \x00 goodbye \x00 ".strip.should == "goodbye"
end
end
ruby_version_is ''...'2.7' do
it "taints the result when self is tainted" do
"".taint.strip.should.tainted?
"ok".taint.strip.should.tainted?
" ok ".taint.strip.should.tainted?
end
end
end
describe "String#strip!" do
it "modifies self in place and returns self" do
a = " hello "
a.strip!.should equal(a)
a.should == "hello"
a = "\tgoodbye\r\v\n"
a.strip!
a.should == "goodbye"
end
it "returns nil if no modifications where made" do
a = "hello"
a.strip!.should == nil
a.should == "hello"
end
ruby_version_is '3.1' do
it "removes leading and trailing NULL bytes and whitespace" do
a = "\000 goodbye \000"
a.strip!
a.should == "goodbye"
end
end
it "raises a FrozenError on a frozen instance that is modified" do
-> { " hello ".freeze.strip! }.should raise_error(FrozenError)
end
# see #1552
it "raises a FrozenError on a frozen instance that would not be modified" do
-> {"hello".freeze.strip! }.should raise_error(FrozenError)
-> {"".freeze.strip! }.should raise_error(FrozenError)
end
end