Restrict assert checks to .rb files.
[ruby_koans.git] / koans / about_to_str.rb
1 require File.expand_path(File.dirname(__FILE__) + '/edgecase')
2
3 class AboutToStr < EdgeCase::Koan
4
5   class CanNotBeTreatedAsString
6     def to_s
7       "non-string-like"
8     end
9   end
10
11   def test_to_s_returns_a_string_representation
12     not_like_a_string = CanNotBeTreatedAsString.new
13     assert_equal __, not_like_a_string.to_s
14   end
15
16   def test_normally_objects_cannot_be_used_where_strings_are_expected
17     assert_raise(___) do
18       File.exist?(CanNotBeTreatedAsString.new)
19     end
20   end
21
22   # ------------------------------------------------------------------
23
24   class CanBeTreatedAsString
25     def to_s
26       "string-like"
27     end
28
29     def to_str
30       to_s
31     end
32   end
33
34   def test_to_str_also_returns_a_string_representation
35     like_a_string = CanBeTreatedAsString.new
36     assert_equal __, like_a_string.to_str
37   end
38
39   def test_to_str_allows_objects_to_be_treated_as_strings
40     assert_equal __, File.exist?(CanBeTreatedAsString.new)
41   end
42
43   # ------------------------------------------------------------------
44
45   def acts_like_a_string?(string)
46     string = string.to_str if string.respond_to?(:to_str)
47     string.is_a?(String)
48   end
49
50   def test_user_defined_code_can_check_for_to_str
51     assert_equal __, acts_like_a_string?(CanNotBeTreatedAsString.new)
52     assert_equal __,  acts_like_a_string?(CanBeTreatedAsString.new)
53   end
54 end