summaryrefslogtreecommitdiff
path: root/spec/ruby/core/string/uplus_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/core/string/uplus_spec.rb')
-rw-r--r--spec/ruby/core/string/uplus_spec.rb58
1 files changed, 47 insertions, 11 deletions
diff --git a/spec/ruby/core/string/uplus_spec.rb b/spec/ruby/core/string/uplus_spec.rb
index eafa721903..20767bcc01 100644
--- a/spec/ruby/core/string/uplus_spec.rb
+++ b/spec/ruby/core/string/uplus_spec.rb
@@ -1,24 +1,60 @@
-require File.expand_path('../../../spec_helper', __FILE__)
+# frozen_string_literal: false
+require_relative '../../spec_helper'
-ruby_version_is "2.3" do
- describe 'String#+@' do
- it 'returns an unfrozen copy of a frozen String' do
- input = 'foo'.freeze
- output = +input
+describe 'String#+@' do
+ it 'returns an unfrozen copy of a frozen String' do
+ input = 'foo'.freeze
+ output = +input
+
+ output.should_not.frozen?
+ output.should == 'foo'
+
+ output << 'bar'
+ output.should == 'foobar'
+ end
+
+ it 'returns a mutable String itself' do
+ input = String.new("foo")
+ output = +input
+
+ output.should.equal?(input)
+
+ input << "bar"
+ output.should == "foobar"
+ end
- output.frozen?.should == false
- output.should == 'foo'
+ 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 self if the String is not frozen' do
+ 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
- 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 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