Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 22 additions & 2 deletions command_line/frozen_strings_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,28 @@
ruby_exe(fixture(__FILE__, "freeze_flag_one_literal.rb")).chomp.should == "false"
end

it "if file has no frozen_string_literal comment produce different mutable strings each time" do
ruby_exe(fixture(__FILE__, "string_literal_raw.rb")).chomp.should == "frozen:false interned:false"
context "if file has no frozen_string_literal comment" do
it "produce different mutable strings each time" do
ruby_exe(fixture(__FILE__, "string_literal_raw.rb")).chomp.should == "frozen:false interned:false"
end

guard -> { ruby_version_is "3.4" and !"test".frozen? } do
it "complain about modification of produced mutable strings" do
-> { eval(<<~RUBY) }.should complain(/warning: literal string will be frozen in the future \(run with --debug-frozen-string-literal for more information\)/)
"test" << "!"
RUBY
end

it "does not complain about modification if Warning[:deprecated] is false" do
deprecated = Warning[:deprecated]
Warning[:deprecated] = false
-> { eval(<<~RUBY) }.should_not complain
"test" << "!"
RUBY
ensure
Warning[:deprecated] = deprecated
end
end
end

it "if file has frozen_string_literal:true comment produce same frozen strings each time" do
Expand Down
44 changes: 39 additions & 5 deletions core/string/uplus_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,48 @@
output.should == 'foobar'
end

it 'returns self if the String is not frozen' do
input = 'foo'
it 'returns a mutable String itself' do
input = String.new("foo")
output = +input

output.equal?(input).should == true
output.should.equal?(input)

input << "bar"
output.should == "foobar"
end

context 'if file has "frozen_string_literal: true" magic comment' do
it 'returns mutable copy of a literal' do
ruby_exe(fixture(__FILE__, "freeze_magic_comment.rb")).should == 'mutable'
end
end

it 'returns mutable copy despite freeze-magic-comment in file' do
ruby_exe(fixture(__FILE__, "freeze_magic_comment.rb")).should == 'mutable'
context 'if file has "frozen_string_literal: false" magic comment' do
it 'returns literal string itself' do
input = 'foo'
output = +input

output.equal?(input).should == true
end
end

context 'if file has no frozen_string_literal magic comment' do
ruby_version_is ''...'3.4' do
it 'returns literal string itself' do
eval(<<~RUBY).should == true
s = "foo"
s.equal?(+s)
RUBY
end
end

ruby_version_is '3.4' do
it 'returns mutable copy of a literal' do
eval(<<~RUBY).should == false
s = "foo"
s.equal?(+s)
RUBY
end
end
end
end