mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
63 lines
1.7 KiB
Ruby
63 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
|