+++ /dev/null
-require File.expand_path(File.dirname(__FILE__) + '/edgecase')
-
-class AboutClasses < EdgeCase::Koan
- class Dog
- end
-
- def test_instances_of_classes_can_be_created_with_new
- fido = Dog.new
- assert_equal __, fido.class
- end
-
- # ------------------------------------------------------------------
-
- class Dog2
- def set_name(a_name)
- @name = a_name
- end
- end
-
- def test_instance_variables_can_be_set_by_assigning_to_them
- fido = Dog2.new
- assert_equal __, fido.instance_variables
-
- fido.set_name("Fido")
- assert_equal __, fido.instance_variables
- end
-
- def test_instance_variables_cannot_be_accessed_outside_the_class
- fido = Dog2.new
- fido.set_name("Fido")
-
- assert_raise(___) do
- fido.name
- end
-
- assert_raise(___) do
- eval "fido.@name"
- # NOTE: Using eval because the above line is a syntax error.
- end
- end
-
- def test_you_can_politely_ask_for_instance_variable_values
- fido = Dog2.new
- fido.set_name("Fido")
-
- assert_equal __, fido.instance_variable_get("@name")
- end
-
- def test_you_can_rip_the_value_out_using_instance_eval
- fido = Dog2.new
- fido.set_name("Fido")
-
- assert_equal __, fido.instance_eval("@name") # string version
- assert_equal __, fido.instance_eval { @name } # block version
- end
-
- # ------------------------------------------------------------------
-
- class Dog3
- def set_name(a_name)
- @name = a_name
- end
- def name
- @name
- end
- end
-
- def test_you_can_create_accessor_methods_to_return_instance_variables
- fido = Dog3.new
- fido.set_name("Fido")
-
- assert_equal __, fido.name
- end
-
- # ------------------------------------------------------------------
-
- class Dog4
- attr_reader :name
-
- def set_name(a_name)
- @name = a_name
- end
- end
-
-
- def test_attr_reader_will_automatically_define_an_accessor
- fido = Dog4.new
- fido.set_name("Fido")
-
- assert_equal __, fido.name
- end
-
- # ------------------------------------------------------------------
-
- class Dog5
- attr_accessor :name
- end
-
-
- def test_attr_accessor_will_automatically_define_both_read_and_write_accessors
- fido = Dog5.new
-
- fido.name = "Fido"
- assert_equal __, fido.name
- end
-
- # ------------------------------------------------------------------
-
- class Dog6
- attr_reader :name
- def initialize(initial_name)
- @name = initial_name
- end
- end
-
- def test_initialize_provides_initial_values_for_instance_variables
- fido = Dog6.new("Fido")
- assert_equal __, fido.name
- end
-
- def test_args_to_new_must_match_initialize
- assert_raise(___) do
- Dog6.new
- end
- # THINK ABOUT IT:
- # Why is this so?
- end
-
- def test_different_objects_have_different_instance_variables
- fido = Dog6.new("Fido")
- rover = Dog6.new("Rover")
-
- assert_equal __, rover.name != fido.name
- end
-
- # ------------------------------------------------------------------
-
- class Dog7
- attr_reader :name
-
- def initialize(initial_name)
- @name = initial_name
- end
-
- def get_self
- self
- end
-
- def to_s
- __
- end
-
- def inspect
- "<Dog named '#{name}'>"
- end
- end
-
- def test_inside_a_method_self_refers_to_the_containing_object
- fido = Dog7.new("Fido")
-
- fidos_self = fido.get_self
- assert_equal __, fidos_self
- end
-
- def test_to_s_provides_a_string_version_of_the_object
- fido = Dog7.new("Fido")
- assert_equal __, fido.to_s
- end
-
- def test_to_s_is_used_in_string_interpolation
- fido = Dog7.new("Fido")
- assert_equal __, "My dog is #{fido}"
- end
-
- def test_inspect_provides_a_more_complete_string_version
- fido = Dog7.new("Fido")
- assert_equal __, fido.inspect
- end
-
- def test_all_objects_support_to_s_and_inspect
- array = [1,2,3]
-
- assert_equal __, array.to_s
- assert_equal __, array.inspect
-
- assert_equal __, "STRING".to_s
- assert_equal __, "STRING".inspect
- end
-
-end