Updated the koans directory.

This commit is contained in:
Jim Weirich
2010-08-16 16:57:13 -04:00
parent 6365c8d61d
commit eee3429394
4 changed files with 44 additions and 16 deletions

View File

@@ -7,6 +7,6 @@ require 'rake/testtask'
task :default => :test task :default => :test
task :test do task :test do
ruby '-I.', 'path_to_enlightenment.rb' ruby 'path_to_enlightenment.rb'
end end

View File

@@ -1,28 +1,28 @@
require File.expand_path(File.dirname(__FILE__) + '/edgecase') require File.expand_path(File.dirname(__FILE__) + '/edgecase')
class AboutMessagePassing < EdgeCase::Koan class AboutMessagePassing < EdgeCase::Koan
class MessageCatcher class MessageCatcher
def caught? def caught?
true true
end end
end end
def test_methods_can_be_called_directly def test_methods_can_be_called_directly
mc = MessageCatcher.new mc = MessageCatcher.new
assert mc.caught? assert mc.caught?
end end
def test_methods_can_be_invoked_by_sending_the_message def test_methods_can_be_invoked_by_sending_the_message
mc = MessageCatcher.new mc = MessageCatcher.new
assert mc.send(:caught?) assert mc.send(:caught?)
end end
def test_methods_can_be_invoked_more_dynamically def test_methods_can_be_invoked_more_dynamically
mc = MessageCatcher.new mc = MessageCatcher.new
assert mc.send("caught?") assert mc.send("caught?")
assert mc.send("caught" + __ ) # What do you need to add to the first string? assert mc.send("caught" + __ ) # What do you need to add to the first string?
assert mc.send("CAUGHT?".____ ) # What would you need to do to the string? assert mc.send("CAUGHT?".____ ) # What would you need to do to the string?
@@ -40,11 +40,11 @@ class AboutMessagePassing < EdgeCase::Koan
def test_classes_can_be_asked_if_they_know_how_to_respond def test_classes_can_be_asked_if_they_know_how_to_respond
mc = MessageCatcher.new mc = MessageCatcher.new
assert_equal __, mc.respond_to?(:caught?) assert_equal __, mc.respond_to?(:caught?)
assert_equal __, mc.respond_to?(:does_not_exist) assert_equal __, mc.respond_to?(:does_not_exist)
end end
# ------------------------------------------------------------------ # ------------------------------------------------------------------
class MessageCatcher class MessageCatcher
@@ -52,10 +52,10 @@ class AboutMessagePassing < EdgeCase::Koan
args args
end end
end end
def test_sending_a_message_with_arguments def test_sending_a_message_with_arguments
mc = MessageCatcher.new mc = MessageCatcher.new
assert_equal __, mc.add_a_payload assert_equal __, mc.add_a_payload
assert_equal __, mc.send(:add_a_payload) assert_equal __, mc.send(:add_a_payload)
@@ -89,6 +89,18 @@ class AboutMessagePassing < EdgeCase::Koan
# #
# If the method :method_missing causes the NoMethodError, then # If the method :method_missing causes the NoMethodError, then
# what would happen if we redefine method_missing? # what would happen if we redefine method_missing?
#
# NOTE:
#
# In Ruby 1.8 the method_missing method is public and can be
# called as shown above. However, in Ruby 1.9 the method_missing
# method is private. We explicitly made it public in the testing
# framework so this example works in both versions of Ruby. Just
# keep in mind you can't call method_missing like that in Ruby
# 1.9. normally.
#
# Thanks. We now return you to your regularly schedule Ruby
# Koans.
end end
# ------------------------------------------------------------------ # ------------------------------------------------------------------

View File

@@ -36,13 +36,27 @@ class Object
self.send(method) self.send(method)
end end
end end
in_ruby_version("1.9") do
public :method_missing
end
end end
module EdgeCase module EdgeCase
class Sensei class Sensei
attr_reader :failure, :failed_test attr_reader :failure, :failed_test
AssertionError = Test::Unit::AssertionFailedError in_ruby_version("1.8") do
AssertionError = Test::Unit::AssertionFailedError
end
in_ruby_version("1.9") do
if defined?(MiniTest)
AssertionError = MiniTest::Assertion
else
AssertionError = Test::Unit::AssertionFailedError
end
end
def initialize def initialize
@pass_count = 0 @pass_count = 0
@@ -165,12 +179,12 @@ module EdgeCase
test.setup test.setup
begin begin
test.send(method) test.send(method)
rescue StandardError => ex rescue StandardError, EdgeCase::Sensei::AssertionError => ex
test.failed(ex) test.failed(ex)
ensure ensure
begin begin
test.teardown test.teardown
rescue StandardError => ex rescue StandardError, EdgeCase::Sensei::AssertionError => ex
test.failed(ex) if test.passed? test.failed(ex) if test.passed?
end end
end end

View File

@@ -1,5 +1,7 @@
# The path to Ruby Enlightenment starts with the following: # The path to Ruby Enlightenment starts with the following:
$LOAD_PATH << File.dirname(__FILE__)
require 'about_asserts' require 'about_asserts'
require 'about_nil' require 'about_nil'
require 'about_arrays' require 'about_arrays'