diff options
author | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-06-13 21:58:54 +0000 |
---|---|---|
committer | eregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-06-13 21:58:54 +0000 |
commit | b46da8d84efeb97cb52ba0560d5b149ccda0d561 (patch) | |
tree | 382ba848ef97215f1a5ec991727db3ed7f90973c /spec/ruby/core/exception | |
parent | 5b55eaa00db05004d1a6b74c3aaa5e680fc73235 (diff) | |
download | ruby-b46da8d84efeb97cb52ba0560d5b149ccda0d561.tar.gz |
Update to ruby/spec@4bb0f25
* Specs added by TruffleRuby.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63654 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/ruby/core/exception')
-rw-r--r-- | spec/ruby/core/exception/dup_spec.rb | 61 | ||||
-rw-r--r-- | spec/ruby/core/exception/fixtures/common.rb | 20 |
2 files changed, 81 insertions, 0 deletions
diff --git a/spec/ruby/core/exception/dup_spec.rb b/spec/ruby/core/exception/dup_spec.rb new file mode 100644 index 0000000000..f5a067ed2f --- /dev/null +++ b/spec/ruby/core/exception/dup_spec.rb @@ -0,0 +1,61 @@ +require_relative '../../spec_helper' +require_relative 'fixtures/common' + +describe "Exception#dup" do + before :each do + @obj = ExceptionSpecs::InitializeException.new("my exception") + end + + it "calls #initialize_copy on the new instance" do + dup = @obj.dup + ScratchPad.recorded.should_not == @obj.object_id + ScratchPad.recorded.should == dup.object_id + end + + it "copies instance variables" do + dup = @obj.dup + dup.ivar.should == 1 + end + + it "does not copy singleton methods" do + def @obj.special() :the_one end + dup = @obj.dup + lambda { dup.special }.should raise_error(NameError) + end + + it "does not copy modules included in the singleton class" do + class << @obj + include ExceptionSpecs::ExceptionModule + end + + dup = @obj.dup + lambda { dup.repr }.should raise_error(NameError) + end + + it "does not copy constants defined in the singleton class" do + class << @obj + CLONE = :clone + end + + dup = @obj.dup + lambda { class << dup; CLONE; end }.should raise_error(NameError) + end + + it "does copy the message" do + @obj.dup.message.should == @obj.message + end + + it "does copy the backtrace" do + begin + # Explicitly raise so a backtrace is associated with the exception. + # It's tempting to call `set_backtrace` instead, but that complicates + # the test because it might affect other state (e.g., instance variables) + # on some implementations. + raise ExceptionSpecs::InitializeException.new("my exception") + rescue => e + @obj = e + end + + @obj.dup.backtrace.should == @obj.backtrace + end +end
\ No newline at end of file diff --git a/spec/ruby/core/exception/fixtures/common.rb b/spec/ruby/core/exception/fixtures/common.rb index 9ddabace11..0ffb3ed855 100644 --- a/spec/ruby/core/exception/fixtures/common.rb +++ b/spec/ruby/core/exception/fixtures/common.rb @@ -46,6 +46,26 @@ module ExceptionSpecs "" end end + + class InitializeException < StandardError + attr_reader :ivar + + def initialize(message = nil) + super + @ivar = 1 + end + + def initialize_copy(other) + super + ScratchPad.record object_id + end + end + + module ExceptionModule + def repr + 1 + end + end end module NoMethodErrorSpecs |