0a9428093c
git-subtree-dir: RubyFun git-subtree-mainline:a04a502787
git-subtree-split:b01c682613
86 lines
1.6 KiB
Ruby
86 lines
1.6 KiB
Ruby
require File.expand_path(File.dirname(__FILE__) + '/edgecase')
|
|
|
|
class AboutInheritance < EdgeCase::Koan
|
|
class Dog
|
|
attr_reader :name
|
|
|
|
def initialize(name)
|
|
@name = name
|
|
end
|
|
|
|
def bark
|
|
"WOOF"
|
|
end
|
|
end
|
|
|
|
class Chihuahua < Dog
|
|
def wag
|
|
:happy
|
|
end
|
|
|
|
def bark
|
|
"yip"
|
|
end
|
|
end
|
|
|
|
def test_subclasses_have_the_parent_as_an_ancestor
|
|
assert_equal __, Chihuahua.ancestors.include?(Dog)
|
|
end
|
|
|
|
def test_all_classes_ultimately_inherit_from_object
|
|
assert_equal __, Chihuahua.ancestors.include?(Object)
|
|
end
|
|
|
|
def test_subcases_inherit_behavior_from_parent_class
|
|
chico = Chihuahua.new("Chico")
|
|
assert_equal __, chico.name
|
|
end
|
|
|
|
def test_subclasses_add_new_behavior
|
|
chico = Chihuahua.new("Chico")
|
|
assert_equal __, chico.wag
|
|
|
|
assert_raise(___) do
|
|
fido = Dog.new("Fido")
|
|
fido.wag
|
|
end
|
|
end
|
|
|
|
def test_subclasses_can_modify_existing_behavior
|
|
chico = Chihuahua.new("Chico")
|
|
assert_equal __, chico.bark
|
|
|
|
fido = Dog.new("Fido")
|
|
assert_equal __, fido.bark
|
|
end
|
|
|
|
# ------------------------------------------------------------------
|
|
|
|
class BullDog < Dog
|
|
def bark
|
|
super + ", GROWL"
|
|
end
|
|
end
|
|
|
|
def test_subclasses_can_invoke_parent_behavior_via_super
|
|
ralph = BullDog.new("Ralph")
|
|
assert_equal __, ralph.bark
|
|
end
|
|
|
|
# ------------------------------------------------------------------
|
|
|
|
class GreatDane < Dog
|
|
def growl
|
|
super.bark + ", GROWL"
|
|
end
|
|
end
|
|
|
|
def test_super_does_not_work_cross_method
|
|
george = GreatDane.new("George")
|
|
assert_raise(___) do
|
|
george.growl
|
|
end
|
|
end
|
|
|
|
end
|