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/exception/hierarchy_spec.rb
2019-11-30 21:26:52 +01:00

62 lines
1.7 KiB
Ruby

require_relative '../../spec_helper'
describe "Exception" do
it "has the right class hierarchy" do
hierarchy = {
Exception => {
NoMemoryError => nil,
ScriptError => {
LoadError => nil,
NotImplementedError => nil,
SyntaxError => nil,
},
SecurityError => nil,
SignalException => {
Interrupt => nil,
},
StandardError => {
ArgumentError => {
UncaughtThrowError => nil,
},
EncodingError => nil,
FiberError => nil,
IOError => {
EOFError => nil,
},
IndexError => {
KeyError => nil,
StopIteration => {
ClosedQueueError => nil,
},
},
LocalJumpError => nil,
NameError => {
NoMethodError => nil,
},
RangeError => {
FloatDomainError => nil,
},
RegexpError => nil,
RuntimeError => nil,
SystemCallError => nil,
ThreadError => nil,
TypeError => nil,
ZeroDivisionError => nil,
},
SystemExit => nil,
SystemStackError => nil,
},
}
ruby_version_is "2.5" do
hierarchy[Exception][StandardError][RuntimeError] = {FrozenError => nil}
end
traverse = -> parent_class, parent_subclass_hash {
parent_subclass_hash.each do |child_class, child_subclass_hash|
child_class.class.should == Class
child_class.superclass.should == parent_class
traverse.call(child_class, child_subclass_hash) if child_subclass_hash
end
}
traverse.call(Object, hierarchy)
end
end