Current progress
This commit is contained in:
68
koans/about_exceptions.rb
Normal file
68
koans/about_exceptions.rb
Normal file
@@ -0,0 +1,68 @@
|
||||
require File.expand_path(File.dirname(__FILE__) + '/neo')
|
||||
|
||||
class AboutExceptions < Neo::Koan
|
||||
|
||||
class MySpecialError < RuntimeError
|
||||
end
|
||||
|
||||
def test_exceptions_inherit_from_Exception
|
||||
assert_equal __, MySpecialError.ancestors[1]
|
||||
assert_equal __, MySpecialError.ancestors[2]
|
||||
assert_equal __, MySpecialError.ancestors[3]
|
||||
assert_equal __, MySpecialError.ancestors[4]
|
||||
end
|
||||
|
||||
def test_rescue_clause
|
||||
result = nil
|
||||
begin
|
||||
fail "Oops"
|
||||
rescue StandardError => ex
|
||||
result = :exception_handled
|
||||
end
|
||||
|
||||
assert_equal __, result
|
||||
|
||||
assert_equal __, ex.is_a?(StandardError), "Should be a Standard Error"
|
||||
assert_equal __, ex.is_a?(RuntimeError), "Should be a Runtime Error"
|
||||
|
||||
assert RuntimeError.ancestors.include?(StandardError),
|
||||
"RuntimeError is a subclass of StandardError"
|
||||
|
||||
assert_equal __, ex.message
|
||||
end
|
||||
|
||||
def test_raising_a_particular_error
|
||||
result = nil
|
||||
begin
|
||||
# 'raise' and 'fail' are synonyms
|
||||
raise MySpecialError, "My Message"
|
||||
rescue MySpecialError => ex
|
||||
result = :exception_handled
|
||||
end
|
||||
|
||||
assert_equal __, result
|
||||
assert_equal __, ex.message
|
||||
end
|
||||
|
||||
def test_ensure_clause
|
||||
result = nil
|
||||
begin
|
||||
fail "Oops"
|
||||
rescue StandardError
|
||||
# no code here
|
||||
ensure
|
||||
result = :always_run
|
||||
end
|
||||
|
||||
assert_equal __, result
|
||||
end
|
||||
|
||||
# Sometimes, we must know about the unknown
|
||||
def test_asserting_an_error_is_raised
|
||||
# A do-end is a block, a topic to explore more later
|
||||
assert_raise(___) do
|
||||
raise MySpecialError.new("New instances can be raised directly.")
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user