mirror of
https://github.com/edgecase/ruby_koans.git
synced 2026-04-14 23:13:20 -04:00
119 lines
3.8 KiB
Ruby
119 lines
3.8 KiB
Ruby
require File.expand_path(File.dirname(__FILE__) + '/edgecase')
|
|
|
|
class Sensei
|
|
def observe(step)
|
|
# Step Protocol: step.passed? | step.failure | step.koan_file | step.name
|
|
# WRITE THIS CODE
|
|
end
|
|
|
|
def pass_count
|
|
# WRITE THIS CODE
|
|
end
|
|
|
|
def failed?
|
|
# WRITE THIS CODE
|
|
end
|
|
|
|
def instruct
|
|
# WRITE THIS CODE
|
|
end
|
|
end
|
|
|
|
def student_passes_test
|
|
assert true # DO NOT CHANGE YOUR STUDENT'S ANSWER
|
|
end
|
|
|
|
def student_fails_test
|
|
assert false # DO NOT CHANGE YOUR STUDENT'S ANSWER
|
|
end
|
|
|
|
class AboutSensei < EdgeCase::Koan
|
|
def test_sensei_comments_about_expanded_awareness
|
|
you = Sensei.new
|
|
student_step = EdgeCase::Koan.new(:student_passes_test, self)
|
|
student_meditation = student_step.meditate
|
|
observation = you.observe(student_meditation)
|
|
assert_equal "AboutSensei#student_passes_test has expanded your awareness.", observation
|
|
end
|
|
|
|
def test_sensei_comments_about_damaged_karma
|
|
you = Sensei.new
|
|
student_step = EdgeCase::Koan.new(:student_fails_test, self)
|
|
student_meditation = student_step.meditate
|
|
observation = you.observe(student_meditation)
|
|
assert_equal "AboutSensei#student_fails_test has damaged your karma.", observation
|
|
end
|
|
|
|
def test_sensei_counts_passed_steps
|
|
you = Sensei.new
|
|
student_steps = [EdgeCase::Koan.new(:student_passes_test, self),
|
|
EdgeCase::Koan.new(:student_passes_test, self),
|
|
EdgeCase::Koan.new(:student_passes_test, self),
|
|
EdgeCase::Koan.new(:student_passes_test, self),
|
|
EdgeCase::Koan.new(:student_fails_test, self)]
|
|
student_steps.each do |step|
|
|
you.observe step.meditate
|
|
end
|
|
assert_equal 4, you.pass_count
|
|
end
|
|
|
|
def test_sensei_reports_failed_true
|
|
you = Sensei.new
|
|
student_steps = [EdgeCase::Koan.new(:student_passes_test, self),
|
|
EdgeCase::Koan.new(:student_fails_test, self)]
|
|
student_steps.each do |step|
|
|
you.observe step
|
|
end
|
|
assert you.failed?
|
|
end
|
|
|
|
def test_sensei_reports_failed_true
|
|
you = Sensei.new
|
|
student_steps = [EdgeCase::Koan.new(:student_passes_test, self),
|
|
EdgeCase::Koan.new(:student_passes_test, self)]
|
|
student_steps.each do |step|
|
|
you.observe step
|
|
end
|
|
assert ! you.failed?
|
|
end
|
|
|
|
def test_sensei_shows_beginning_progress
|
|
you = Sensei.new
|
|
student_steps = [EdgeCase::Koan.new(:student_fails_test, self),
|
|
EdgeCase::Koan.new(:student_fails_test, self),
|
|
EdgeCase::Koan.new(:student_fails_test, self),
|
|
EdgeCase::Koan.new(:student_fails_test, self),
|
|
EdgeCase::Koan.new(:student_fails_test, self)]
|
|
student_steps.each do |step|
|
|
you.observe step.meditate
|
|
end
|
|
instructions = you.instruct
|
|
assert_match "You have not yet reached enlightenment", instructions
|
|
assert_match "You have passed 0 steps", instructions
|
|
end
|
|
|
|
def test_sensei_shows_partial_progress
|
|
you = Sensei.new
|
|
student_steps = [EdgeCase::Koan.new(:student_passes_test, self),
|
|
EdgeCase::Koan.new(:student_passes_test, self),
|
|
EdgeCase::Koan.new(:student_passes_test, self),
|
|
EdgeCase::Koan.new(:student_fails_test, self),
|
|
EdgeCase::Koan.new(:student_fails_test, self)]
|
|
student_steps.each do |step|
|
|
you.observe step.meditate
|
|
end
|
|
instructions = you.instruct
|
|
assert_match "You have not yet reached enlightenment", instructions
|
|
assert_match "You have passed 3 steps", instructions
|
|
end
|
|
|
|
def test_sensei_congratulates_student
|
|
you = Sensei.new
|
|
# run all of Ruby Koans with you as the sensei
|
|
EdgeCase::ThePath.new(you).walk
|
|
|
|
instructions = you.instruct
|
|
assert_match "The student has become the master", instructions
|
|
end
|
|
end
|