1 require File.expand_path(File.dirname(__FILE__) + '/edgecase')
3 class AboutClasses < EdgeCase::Koan
7 def test_instances_of_classes_can_be_created_with_new
9 assert_equal __(Dog), fido.class
12 # ------------------------------------------------------------------
20 def test_instance_variables_can_be_set_by_assigning_to_them
22 assert_equal __([]), fido.instance_variables
25 assert_equal __(["@name"], [:@name]), fido.instance_variables
28 def test_instance_variables_cannot_be_accessed_outside_the_class
32 assert_raise(___(NoMethodError)) do
36 assert_raise(___(SyntaxError)) do
38 # NOTE: Using eval because the above line is a syntax error.
42 def test_you_can_politely_ask_for_instance_variable_values
46 assert_equal __("Fido"), fido.instance_variable_get("@name")
49 def test_you_can_rip_the_value_out_using_instance_eval
53 assert_equal __("Fido"), fido.instance_eval("@name") # string version
54 assert_equal __("Fido"), fido.instance_eval { @name } # block version
57 # ------------------------------------------------------------------
68 def test_you_can_create_accessor_methods_to_return_instance_variables
72 assert_equal __("Fido"), fido.name
75 # ------------------------------------------------------------------
86 def test_attr_reader_will_automatically_define_an_accessor
90 assert_equal __("Fido"), fido.name
93 # ------------------------------------------------------------------
100 def test_attr_accessor_will_automatically_define_both_read_and_write_accessors
104 assert_equal __("Fido"), fido.name
107 # ------------------------------------------------------------------
111 def initialize(initial_name)
116 def test_initialize_provides_initial_values_for_instance_variables
117 fido = Dog6.new("Fido")
118 assert_equal __("Fido"), fido.name
121 def test_args_to_new_must_match_initialize
122 assert_raise(___(ArgumentError)) do
129 def test_different_objects_have_difference_instance_variables
130 fido = Dog6.new("Fido")
131 rover = Dog6.new("Rover")
133 assert_equal __(true), rover.name != fido.name
136 # ------------------------------------------------------------------
141 def initialize(initial_name)
154 "<Dog named '#{name}'>"
158 def test_inside_a_method_self_refers_to_the_containing_object
159 fido = Dog7.new("Fido")
161 fidos_self = fido.get_self
162 assert_equal __(fido), fidos_self
165 def test_to_s_provides_a_string_version_of_the_object
166 fido = Dog7.new("Fido")
167 assert_equal __("Fido"), fido.to_s
170 def test_to_s_is_used_in_string_interpolation
171 fido = Dog7.new("Fido")
172 assert_equal __("My dog is Fido"), "My dog is #{fido}"
175 def test_inspect_provides_a_more_complete_string_version
176 fido = Dog7.new("Fido")
177 assert_equal __("<Dog named 'Fido'>"), fido.inspect
180 def test_all_objects_support_to_s_and_inspect
183 assert_equal __("123", "[1, 2, 3]"), array.to_s
184 assert_equal __("[1, 2, 3]"), array.inspect
186 assert_equal __("STRING"), "STRING".to_s
187 assert_equal __('"STRING"'), "STRING".inspect