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/lstrip_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

58 lines
1.6 KiB
Ruby

require_relative '../../spec_helper'
require_relative 'fixtures/classes'
describe "String#lstrip" do
it "returns a copy of self with leading whitespace removed" do
" hello ".lstrip.should == "hello "
" hello world ".lstrip.should == "hello world "
"\n\r\t\n\v\r hello world ".lstrip.should == "hello world "
"hello".lstrip.should == "hello"
end
ruby_version_is '3.1' do
it "strips leading \\0" do
"\x00hello".lstrip.should == "hello"
"\000 \000hello\000 \000".lstrip.should == "hello\000 \000"
end
end
ruby_version_is ''...'2.7' do
it "taints the result when self is tainted" do
"".taint.lstrip.should.tainted?
"ok".taint.lstrip.should.tainted?
" ok".taint.lstrip.should.tainted?
end
end
end
describe "String#lstrip!" do
it "modifies self in place and returns self" do
a = " hello "
a.lstrip!.should equal(a)
a.should == "hello "
end
ruby_version_is '3.1' do
it "strips leading \\0" do
a = "\000 \000hello\000 \000"
a.lstrip!
a.should == "hello\000 \000"
end
end
it "returns nil if no modifications were made" do
a = "hello"
a.lstrip!.should == nil
a.should == "hello"
end
it "raises a FrozenError on a frozen instance that is modified" do
-> { " hello ".freeze.lstrip! }.should raise_error(FrozenError)
end
# see [ruby-core:23657]
it "raises a FrozenError on a frozen instance that would not be modified" do
-> { "hello".freeze.lstrip! }.should raise_error(FrozenError)
-> { "".freeze.lstrip! }.should raise_error(FrozenError)
end
end