summaryrefslogtreecommitdiff
path: root/spec/ruby/core/kernel/clone_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/core/kernel/clone_spec.rb')
-rw-r--r--spec/ruby/core/kernel/clone_spec.rb36
1 files changed, 34 insertions, 2 deletions
diff --git a/spec/ruby/core/kernel/clone_spec.rb b/spec/ruby/core/kernel/clone_spec.rb
index f9daa2badc..38ae1984c0 100644
--- a/spec/ruby/core/kernel/clone_spec.rb
+++ b/spec/ruby/core/kernel/clone_spec.rb
@@ -31,10 +31,10 @@ describe "Kernel#clone" do
describe "with no arguments" do
it "copies frozen state from the original" do
o2 = @obj.clone
+ o2.should_not.frozen?
+
@obj.freeze
o3 = @obj.clone
-
- o2.should_not.frozen?
o3.should.frozen?
end
@@ -44,6 +44,30 @@ describe "Kernel#clone" do
end
end
+ describe "with freeze: nil" do
+ ruby_version_is ""..."3.0" do
+ it "raises ArgumentError" do
+ -> { @obj.clone(freeze: nil) }.should raise_error(ArgumentError, /unexpected value for freeze: NilClass/)
+ end
+ end
+
+ ruby_version_is "3.0" do
+ it "copies frozen state from the original, like #clone without arguments" do
+ o2 = @obj.clone(freeze: nil)
+ o2.should_not.frozen?
+
+ @obj.freeze
+ o3 = @obj.clone(freeze: nil)
+ o3.should.frozen?
+ end
+
+ it "copies frozen?" do
+ o = "".freeze.clone(freeze: nil)
+ o.frozen?.should be_true
+ end
+ end
+ end
+
describe "with freeze: true" do
it 'makes a frozen copy if the original is frozen' do
@obj.freeze
@@ -112,6 +136,14 @@ describe "Kernel#clone" do
end
end
+ describe "with freeze: anything else" do
+ it 'raises ArgumentError when passed not true/false/nil' do
+ -> { @obj.clone(freeze: 1) }.should raise_error(ArgumentError, /unexpected value for freeze: Integer/)
+ -> { @obj.clone(freeze: "") }.should raise_error(ArgumentError, /unexpected value for freeze: String/)
+ -> { @obj.clone(freeze: Object.new) }.should raise_error(ArgumentError, /unexpected value for freeze: Object/)
+ end
+ end
+
it "copies instance variables" do
clone = @obj.clone
clone.one.should == 1