floehopper-mocha 0.9.3.20081220175348

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. data/COPYING +3 -0
  2. data/MIT-LICENSE +7 -0
  3. data/README +35 -0
  4. data/RELEASE +257 -0
  5. data/Rakefile +199 -0
  6. data/examples/misc.rb +44 -0
  7. data/examples/mocha.rb +26 -0
  8. data/examples/stubba.rb +65 -0
  9. data/lib/mocha/any_instance_method.rb +54 -0
  10. data/lib/mocha/argument_iterator.rb +21 -0
  11. data/lib/mocha/backtrace_filter.rb +17 -0
  12. data/lib/mocha/cardinality.rb +95 -0
  13. data/lib/mocha/central.rb +27 -0
  14. data/lib/mocha/change_state_side_effect.rb +19 -0
  15. data/lib/mocha/class_method.rb +86 -0
  16. data/lib/mocha/configuration.rb +60 -0
  17. data/lib/mocha/deprecation.rb +22 -0
  18. data/lib/mocha/exception_raiser.rb +17 -0
  19. data/lib/mocha/expectation.rb +451 -0
  20. data/lib/mocha/expectation_error.rb +15 -0
  21. data/lib/mocha/expectation_list.rb +50 -0
  22. data/lib/mocha/in_state_ordering_constraint.rb +19 -0
  23. data/lib/mocha/inspect.rb +67 -0
  24. data/lib/mocha/instance_method.rb +16 -0
  25. data/lib/mocha/is_a.rb +9 -0
  26. data/lib/mocha/logger.rb +15 -0
  27. data/lib/mocha/metaclass.rb +13 -0
  28. data/lib/mocha/method_matcher.rb +21 -0
  29. data/lib/mocha/mini_test_adapter.rb +50 -0
  30. data/lib/mocha/mock.rb +200 -0
  31. data/lib/mocha/mockery.rb +181 -0
  32. data/lib/mocha/module_method.rb +16 -0
  33. data/lib/mocha/multiple_yields.rb +20 -0
  34. data/lib/mocha/names.rb +53 -0
  35. data/lib/mocha/no_yields.rb +11 -0
  36. data/lib/mocha/object.rb +187 -0
  37. data/lib/mocha/parameter_matchers/all_of.rb +42 -0
  38. data/lib/mocha/parameter_matchers/any_of.rb +47 -0
  39. data/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
  40. data/lib/mocha/parameter_matchers/anything.rb +33 -0
  41. data/lib/mocha/parameter_matchers/base.rb +15 -0
  42. data/lib/mocha/parameter_matchers/equals.rb +42 -0
  43. data/lib/mocha/parameter_matchers/has_entries.rb +45 -0
  44. data/lib/mocha/parameter_matchers/has_entry.rb +56 -0
  45. data/lib/mocha/parameter_matchers/has_key.rb +42 -0
  46. data/lib/mocha/parameter_matchers/has_value.rb +42 -0
  47. data/lib/mocha/parameter_matchers/includes.rb +40 -0
  48. data/lib/mocha/parameter_matchers/instance_of.rb +42 -0
  49. data/lib/mocha/parameter_matchers/is_a.rb +42 -0
  50. data/lib/mocha/parameter_matchers/kind_of.rb +42 -0
  51. data/lib/mocha/parameter_matchers/not.rb +42 -0
  52. data/lib/mocha/parameter_matchers/object.rb +15 -0
  53. data/lib/mocha/parameter_matchers/optionally.rb +55 -0
  54. data/lib/mocha/parameter_matchers/regexp_matches.rb +43 -0
  55. data/lib/mocha/parameter_matchers/responds_with.rb +43 -0
  56. data/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
  57. data/lib/mocha/parameter_matchers.rb +27 -0
  58. data/lib/mocha/parameters_matcher.rb +37 -0
  59. data/lib/mocha/pretty_parameters.rb +28 -0
  60. data/lib/mocha/return_values.rb +31 -0
  61. data/lib/mocha/sequence.rb +42 -0
  62. data/lib/mocha/single_return_value.rb +17 -0
  63. data/lib/mocha/single_yield.rb +18 -0
  64. data/lib/mocha/standalone.rb +166 -0
  65. data/lib/mocha/state_machine.rb +91 -0
  66. data/lib/mocha/stubbing_error.rb +16 -0
  67. data/lib/mocha/test_case_adapter.rb +103 -0
  68. data/lib/mocha/unexpected_invocation.rb +18 -0
  69. data/lib/mocha/yield_parameters.rb +31 -0
  70. data/lib/mocha.rb +47 -0
  71. data/lib/mocha_standalone.rb +2 -0
  72. data/lib/stubba.rb +4 -0
  73. data/test/acceptance/acceptance_test_helper.rb +38 -0
  74. data/test/acceptance/bug_18914_test.rb +43 -0
  75. data/test/acceptance/bug_21465_test.rb +34 -0
  76. data/test/acceptance/bug_21563_test.rb +25 -0
  77. data/test/acceptance/expected_invocation_count_test.rb +196 -0
  78. data/test/acceptance/failure_messages_test.rb +64 -0
  79. data/test/acceptance/minitest_test.rb +130 -0
  80. data/test/acceptance/mocha_example_test.rb +98 -0
  81. data/test/acceptance/mocha_test_result_test.rb +84 -0
  82. data/test/acceptance/mock_test.rb +100 -0
  83. data/test/acceptance/mock_with_initializer_block_test.rb +51 -0
  84. data/test/acceptance/mocked_methods_dispatch_test.rb +78 -0
  85. data/test/acceptance/optional_parameters_test.rb +70 -0
  86. data/test/acceptance/parameter_matcher_test.rb +209 -0
  87. data/test/acceptance/partial_mocks_test.rb +47 -0
  88. data/test/acceptance/return_value_test.rb +52 -0
  89. data/test/acceptance/sequence_test.rb +186 -0
  90. data/test/acceptance/standalone_test.rb +139 -0
  91. data/test/acceptance/states_test.rb +70 -0
  92. data/test/acceptance/stub_any_instance_method_test.rb +195 -0
  93. data/test/acceptance/stub_class_method_test.rb +203 -0
  94. data/test/acceptance/stub_everything_test.rb +56 -0
  95. data/test/acceptance/stub_instance_method_test.rb +203 -0
  96. data/test/acceptance/stub_module_method_test.rb +163 -0
  97. data/test/acceptance/stub_test.rb +52 -0
  98. data/test/acceptance/stubba_example_test.rb +102 -0
  99. data/test/acceptance/stubba_test.rb +15 -0
  100. data/test/acceptance/stubba_test_result_test.rb +66 -0
  101. data/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
  102. data/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
  103. data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
  104. data/test/acceptance/stubbing_non_existent_class_method_test.rb +157 -0
  105. data/test/acceptance/stubbing_non_existent_instance_method_test.rb +147 -0
  106. data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
  107. data/test/acceptance/stubbing_non_public_class_method_test.rb +163 -0
  108. data/test/acceptance/stubbing_non_public_instance_method_test.rb +143 -0
  109. data/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
  110. data/test/deprecation_disabler.rb +15 -0
  111. data/test/execution_point.rb +36 -0
  112. data/test/method_definer.rb +24 -0
  113. data/test/simple_counter.rb +13 -0
  114. data/test/test_helper.rb +11 -0
  115. data/test/test_runner.rb +33 -0
  116. data/test/unit/any_instance_method_test.rb +126 -0
  117. data/test/unit/array_inspect_test.rb +16 -0
  118. data/test/unit/backtrace_filter_test.rb +19 -0
  119. data/test/unit/cardinality_test.rb +56 -0
  120. data/test/unit/central_test.rb +65 -0
  121. data/test/unit/change_state_side_effect_test.rb +41 -0
  122. data/test/unit/class_method_test.rb +237 -0
  123. data/test/unit/date_time_inspect_test.rb +21 -0
  124. data/test/unit/exception_raiser_test.rb +42 -0
  125. data/test/unit/expectation_list_test.rb +57 -0
  126. data/test/unit/expectation_test.rb +459 -0
  127. data/test/unit/hash_inspect_test.rb +16 -0
  128. data/test/unit/in_state_ordering_constraint_test.rb +43 -0
  129. data/test/unit/metaclass_test.rb +22 -0
  130. data/test/unit/method_matcher_test.rb +23 -0
  131. data/test/unit/mock_test.rb +295 -0
  132. data/test/unit/mockery_test.rb +149 -0
  133. data/test/unit/multiple_yields_test.rb +18 -0
  134. data/test/unit/no_yields_test.rb +18 -0
  135. data/test/unit/object_inspect_test.rb +37 -0
  136. data/test/unit/object_test.rb +82 -0
  137. data/test/unit/parameter_matchers/all_of_test.rb +26 -0
  138. data/test/unit/parameter_matchers/any_of_test.rb +26 -0
  139. data/test/unit/parameter_matchers/anything_test.rb +21 -0
  140. data/test/unit/parameter_matchers/equals_test.rb +25 -0
  141. data/test/unit/parameter_matchers/has_entries_test.rb +51 -0
  142. data/test/unit/parameter_matchers/has_entry_test.rb +62 -0
  143. data/test/unit/parameter_matchers/has_key_test.rb +36 -0
  144. data/test/unit/parameter_matchers/has_value_test.rb +37 -0
  145. data/test/unit/parameter_matchers/includes_test.rb +25 -0
  146. data/test/unit/parameter_matchers/instance_of_test.rb +25 -0
  147. data/test/unit/parameter_matchers/is_a_test.rb +25 -0
  148. data/test/unit/parameter_matchers/kind_of_test.rb +25 -0
  149. data/test/unit/parameter_matchers/not_test.rb +26 -0
  150. data/test/unit/parameter_matchers/regexp_matches_test.rb +25 -0
  151. data/test/unit/parameter_matchers/responds_with_test.rb +25 -0
  152. data/test/unit/parameter_matchers/stub_matcher.rb +27 -0
  153. data/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
  154. data/test/unit/parameters_matcher_test.rb +121 -0
  155. data/test/unit/return_values_test.rb +63 -0
  156. data/test/unit/sequence_test.rb +104 -0
  157. data/test/unit/single_return_value_test.rb +14 -0
  158. data/test/unit/single_yield_test.rb +18 -0
  159. data/test/unit/state_machine_test.rb +98 -0
  160. data/test/unit/string_inspect_test.rb +11 -0
  161. data/test/unit/yield_parameters_test.rb +93 -0
  162. metadata +226 -0
@@ -0,0 +1,56 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+ require 'mocha/cardinality'
3
+
4
+ class CardinalityTest < Test::Unit::TestCase
5
+
6
+ include Mocha
7
+
8
+ def test_should_allow_invocations_if_invocation_count_has_not_yet_reached_maximum
9
+ cardinality = Cardinality.new(2, 3)
10
+ assert cardinality.invocations_allowed?(0)
11
+ assert cardinality.invocations_allowed?(1)
12
+ assert cardinality.invocations_allowed?(2)
13
+ assert !cardinality.invocations_allowed?(3)
14
+ end
15
+
16
+ def test_should_be_satisfied_if_invocations_so_far_have_reached_required_threshold
17
+ cardinality = Cardinality.new(2, 3)
18
+ assert !cardinality.satisfied?(0)
19
+ assert !cardinality.satisfied?(1)
20
+ assert cardinality.satisfied?(2)
21
+ assert cardinality.satisfied?(3)
22
+ end
23
+
24
+ def test_should_describe_cardinality
25
+ assert_equal 'allowed any number of times', Cardinality.at_least(0).mocha_inspect
26
+
27
+ assert_equal 'expected at most once', Cardinality.at_most(1).mocha_inspect
28
+ assert_equal 'expected at most twice', Cardinality.at_most(2).mocha_inspect
29
+ assert_equal 'expected at most 3 times', Cardinality.at_most(3).mocha_inspect
30
+
31
+ assert_equal 'expected at least once', Cardinality.at_least(1).mocha_inspect
32
+ assert_equal 'expected at least twice', Cardinality.at_least(2).mocha_inspect
33
+ assert_equal 'expected at least 3 times', Cardinality.at_least(3).mocha_inspect
34
+
35
+ assert_equal 'expected never', Cardinality.exactly(0).mocha_inspect
36
+ assert_equal 'expected exactly once', Cardinality.exactly(1).mocha_inspect
37
+ assert_equal 'expected exactly twice', Cardinality.exactly(2).mocha_inspect
38
+ assert_equal 'expected exactly 3 times', Cardinality.times(3).mocha_inspect
39
+
40
+ assert_equal 'expected between 2 and 4 times', Cardinality.times(2..4).mocha_inspect
41
+ assert_equal 'expected between 1 and 3 times', Cardinality.times(1..3).mocha_inspect
42
+ end
43
+
44
+ def test_should_need_verifying
45
+ assert Cardinality.exactly(2).needs_verifying?
46
+ assert Cardinality.at_least(3).needs_verifying?
47
+ assert Cardinality.at_most(2).needs_verifying?
48
+ assert Cardinality.times(4).needs_verifying?
49
+ assert Cardinality.times(2..4).needs_verifying?
50
+ end
51
+
52
+ def test_should_not_need_verifying
53
+ assert_equal false, Cardinality.at_least(0).needs_verifying?
54
+ end
55
+
56
+ end
@@ -0,0 +1,65 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+
3
+ require 'mocha/central'
4
+ require 'mocha/mock'
5
+ require 'method_definer'
6
+
7
+ class CentralTest < Test::Unit::TestCase
8
+
9
+ include Mocha
10
+
11
+ def test_should_start_with_empty_stubba_methods
12
+ stubba = Central.new
13
+
14
+ assert_equal [], stubba.stubba_methods
15
+ end
16
+
17
+ def test_should_stub_method_if_not_already_stubbed
18
+ method = Mock.new
19
+ method.expects(:stub)
20
+ stubba = Central.new
21
+
22
+ stubba.stub(method)
23
+
24
+ assert method.__verified__?
25
+ end
26
+
27
+ def test_should_not_stub_method_if_already_stubbed
28
+ method = Mock.new
29
+ method.expects(:stub).times(0)
30
+ stubba = Central.new
31
+ stubba_methods = Mock.new
32
+ stubba_methods.stubs(:include?).with(method).returns(true)
33
+ stubba.stubba_methods = stubba_methods
34
+
35
+ stubba.stub(method)
36
+
37
+ assert method.__verified__?
38
+ end
39
+
40
+ def test_should_record_method
41
+ method = Mock.new
42
+ method.expects(:stub)
43
+ stubba = Central.new
44
+
45
+ stubba.stub(method)
46
+
47
+ assert_equal [method], stubba.stubba_methods
48
+ end
49
+
50
+ def test_should_unstub_all_methods
51
+ stubba = Central.new
52
+ method_1 = Mock.new
53
+ method_1.expects(:unstub)
54
+ method_2 = Mock.new
55
+ method_2.expects(:unstub)
56
+ stubba.stubba_methods = [method_1, method_2]
57
+
58
+ stubba.unstub_all
59
+
60
+ assert_equal [], stubba.stubba_methods
61
+ assert method_1.__verified__?
62
+ assert method_2.__verified__?
63
+ end
64
+
65
+ end
@@ -0,0 +1,41 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+
3
+ require 'mocha/change_state_side_effect'
4
+
5
+ class ChangeStateSideEffectTest < Test::Unit::TestCase
6
+
7
+ include Mocha
8
+
9
+ class FakeState
10
+
11
+ attr_reader :active
12
+ attr_writer :description
13
+
14
+ def activate
15
+ @active = true
16
+ end
17
+
18
+ def mocha_inspect
19
+ @description
20
+ end
21
+
22
+ end
23
+
24
+ def test_should_activate_the_given_state
25
+ state = FakeState.new
26
+ side_effect = ChangeStateSideEffect.new(state)
27
+
28
+ side_effect.perform
29
+
30
+ assert state.active
31
+ end
32
+
33
+ def test_should_describe_itself_in_terms_of_the_activated_state
34
+ state = FakeState.new
35
+ state.description = 'the-new-state'
36
+ side_effect = ChangeStateSideEffect.new(state)
37
+
38
+ assert_equal 'then the-new-state', side_effect.mocha_inspect
39
+ end
40
+
41
+ end
@@ -0,0 +1,237 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+ require 'method_definer'
3
+ require 'mocha/mock'
4
+
5
+ require 'mocha/class_method'
6
+
7
+ class ClassMethodTest < Test::Unit::TestCase
8
+
9
+ include Mocha
10
+
11
+ def test_should_provide_hidden_version_of_method_name_starting_with_prefix
12
+ method = ClassMethod.new(nil, :original_method_name)
13
+ assert_match(/^__stubba__/, method.hidden_method.to_s)
14
+ end
15
+
16
+ def test_should_provide_hidden_version_of_method_name_ending_with_suffix
17
+ method = ClassMethod.new(nil, :original_method_name)
18
+ assert_match(/__stubba__$/, method.hidden_method.to_s)
19
+ end
20
+
21
+ def test_should_provide_hidden_version_of_method_name_including_original_method_name
22
+ method = ClassMethod.new(nil, :original_method_name)
23
+ assert_match(/original_method_name/, method.hidden_method.to_s)
24
+ end
25
+
26
+ def test_should_provide_hidden_version_of_method_name_substituting_question_mark
27
+ method = ClassMethod.new(nil, :question_mark?)
28
+ assert_no_match(/\?/, method.hidden_method.to_s)
29
+ assert_match(/question_mark_substituted_character_63/, method.hidden_method.to_s)
30
+ end
31
+
32
+ def test_should_provide_hidden_version_of_method_name_substituting_exclamation_mark
33
+ method = ClassMethod.new(nil, :exclamation_mark!)
34
+ assert_no_match(/!/, method.hidden_method.to_s)
35
+ assert_match(/exclamation_mark_substituted_character_33/, method.hidden_method.to_s)
36
+ end
37
+
38
+ def test_should_provide_hidden_version_of_method_name_substituting_equals_sign
39
+ method = ClassMethod.new(nil, :equals_sign=)
40
+ assert_no_match(/\=/, method.hidden_method.to_s)
41
+ assert_match(/equals_sign_substituted_character_61/, method.hidden_method.to_s)
42
+ end
43
+
44
+ def test_should_provide_hidden_version_of_method_name_substituting_brackets
45
+ method = ClassMethod.new(nil, :[])
46
+ assert_no_match(/\[\]/, method.hidden_method.to_s)
47
+ assert_match(/substituted_character_91__substituted_character_93/, method.hidden_method.to_s)
48
+ end
49
+
50
+ def test_should_provide_hidden_version_of_method_name_substituting_plus_sign
51
+ method = ClassMethod.new(nil, :+)
52
+ assert_no_match(/\+/, method.hidden_method.to_s)
53
+ assert_match(/substituted_character_43/, method.hidden_method.to_s)
54
+ end
55
+
56
+ def test_should_hide_original_method
57
+ klass = Class.new { def self.method_x; end }
58
+ method = ClassMethod.new(klass, :method_x)
59
+ hidden_method_x = method.hidden_method
60
+
61
+ method.hide_original_method
62
+
63
+ assert klass.respond_to?(hidden_method_x)
64
+ end
65
+
66
+ def test_should_respond_to_original_method_name_after_original_method_has_been_hidden
67
+ klass = Class.new { def self.original_method_name; end }
68
+ method = ClassMethod.new(klass, :original_method_name)
69
+ hidden_method_x = method.hidden_method
70
+
71
+ method.hide_original_method
72
+
73
+ assert klass.respond_to?(:original_method_name)
74
+ end
75
+
76
+ def test_should_not_hide_original_method_if_method_not_defined
77
+ klass = Class.new
78
+ method = ClassMethod.new(klass, :method_x)
79
+ hidden_method_x = method.hidden_method
80
+
81
+ method.hide_original_method
82
+
83
+ assert_equal false, klass.respond_to?(hidden_method_x)
84
+ end
85
+
86
+ def test_should_define_a_new_method_which_should_call_mocha_method_missing
87
+ klass = Class.new { def self.method_x; end }
88
+ mocha = Mocha::Mock.new
89
+ klass.define_instance_method(:mocha) { mocha }
90
+ mocha.expects(:method_x).with(:param1, :param2).returns(:result)
91
+ method = ClassMethod.new(klass, :method_x)
92
+
93
+ method.hide_original_method
94
+ method.define_new_method
95
+ result = klass.method_x(:param1, :param2)
96
+
97
+ assert_equal :result, result
98
+ assert mocha.__verified__?
99
+ end
100
+
101
+ def test_should_remove_new_method
102
+ klass = Class.new { def self.method_x; end }
103
+ method = ClassMethod.new(klass, :method_x)
104
+
105
+ method.remove_new_method
106
+
107
+ assert_equal false, klass.respond_to?(:method_x)
108
+ end
109
+
110
+ def test_should_restore_original_method
111
+ klass = Class.new { def self.method_x; end }
112
+ method = ClassMethod.new(klass, :method_x)
113
+ hidden_method_x = method.hidden_method.to_sym
114
+ klass.define_instance_method(hidden_method_x) { :original_result }
115
+
116
+ method.remove_new_method
117
+ method.restore_original_method
118
+
119
+ assert_equal :original_result, klass.method_x
120
+ assert_equal false, klass.respond_to?(hidden_method_x)
121
+ end
122
+
123
+ def test_should_not_restore_original_method_if_hidden_method_is_not_defined
124
+ klass = Class.new { def self.method_x; :new_result; end }
125
+ method = ClassMethod.new(klass, :method_x)
126
+
127
+ method.restore_original_method
128
+
129
+ assert_equal :new_result, klass.method_x
130
+ end
131
+
132
+ def test_should_call_hide_original_method
133
+ klass = Class.new { def self.method_x; end }
134
+ method = ClassMethod.new(klass, :method_x)
135
+ method.hide_original_method
136
+ method.define_instance_accessor(:hide_called)
137
+ method.replace_instance_method(:hide_original_method) { self.hide_called = true }
138
+
139
+ method.stub
140
+
141
+ assert method.hide_called
142
+ end
143
+
144
+ def test_should_call_define_new_method
145
+ klass = Class.new { def self.method_x; end }
146
+ method = ClassMethod.new(klass, :method_x)
147
+ method.define_instance_accessor(:define_called)
148
+ method.replace_instance_method(:define_new_method) { self.define_called = true }
149
+
150
+ method.stub
151
+
152
+ assert method.define_called
153
+ end
154
+
155
+ def test_should_call_remove_new_method
156
+ klass = Class.new { def self.method_x; end }
157
+ klass.define_instance_method(:reset_mocha) { }
158
+ method = ClassMethod.new(klass, :method_x)
159
+ method.define_instance_accessor(:remove_called)
160
+ method.replace_instance_method(:remove_new_method) { self.remove_called = true }
161
+
162
+ method.unstub
163
+
164
+ assert method.remove_called
165
+ end
166
+
167
+ def test_should_call_restore_original_method
168
+ klass = Class.new { def self.method_x; end }
169
+ klass.define_instance_method(:reset_mocha) { }
170
+ method = ClassMethod.new(klass, :method_x)
171
+ method.define_instance_accessor(:restore_called)
172
+ method.replace_instance_method(:restore_original_method) { self.restore_called = true }
173
+
174
+ method.unstub
175
+
176
+ assert method.restore_called
177
+ end
178
+
179
+ def test_should_call_reset_mocha
180
+ klass = Class.new { def self.method_x; end }
181
+ klass.define_instance_accessor(:reset_called)
182
+ klass.define_instance_method(:reset_mocha) { self.reset_called = true }
183
+ method = ClassMethod.new(klass, :method_x)
184
+ method.replace_instance_method(:restore_original_method) { }
185
+
186
+ method.unstub
187
+
188
+ assert klass.reset_called
189
+ end
190
+
191
+ def test_should_return_mock_for_stubbee
192
+ mocha = Object.new
193
+ stubbee = Object.new
194
+ stubbee.define_instance_accessor(:mocha) { mocha }
195
+ stubbee.mocha = nil
196
+ method = ClassMethod.new(stubbee, :method_name)
197
+ assert_equal stubbee.mocha, method.mock
198
+ end
199
+
200
+ def test_should_not_be_equal_if_other_object_has_a_different_class
201
+ class_method = ClassMethod.new(Object.new, :method)
202
+ other_object = Object.new
203
+ assert class_method != other_object
204
+ end
205
+
206
+ def test_should_not_be_equal_if_other_class_method_has_different_stubbee
207
+ stubbee_1 = Object.new
208
+ stubbee_2 = Object.new
209
+ class_method_1 = ClassMethod.new(stubbee_1, :method)
210
+ class_method_2 = ClassMethod.new(stubbee_2, :method)
211
+ assert class_method_1 != class_method_2
212
+ end
213
+
214
+ def test_should_not_be_equal_if_other_class_method_has_different_method
215
+ stubbee = Object.new
216
+ class_method_1 = ClassMethod.new(stubbee, :method_1)
217
+ class_method_2 = ClassMethod.new(stubbee, :method_2)
218
+ assert class_method_1 != class_method_2
219
+ end
220
+
221
+ def test_should_be_equal_if_other_class_method_has_same_stubbee_and_same_method_so_no_attempt_is_made_to_stub_a_method_twice
222
+ stubbee = Object.new
223
+ class_method_1 = ClassMethod.new(stubbee, :method)
224
+ class_method_2 = ClassMethod.new(stubbee, :method)
225
+ assert class_method_1 == class_method_2
226
+ end
227
+
228
+ def test_should_be_equal_if_other_class_method_has_same_stubbee_and_same_method_but_stubbee_equal_method_lies_like_active_record_association_proxy
229
+ stubbee = Class.new do
230
+ def equal?(other); false; end
231
+ end.new
232
+ class_method_1 = ClassMethod.new(stubbee, :method)
233
+ class_method_2 = ClassMethod.new(stubbee, :method)
234
+ assert class_method_1 == class_method_2
235
+ end
236
+
237
+ end
@@ -0,0 +1,21 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+ require 'mocha/inspect'
3
+
4
+ class DateTimeInspectTest < Test::Unit::TestCase
5
+
6
+ def test_should_use_include_date_in_seconds
7
+ time = Time.now
8
+ assert_equal "#{time.inspect} (#{time.to_f} secs)", time.mocha_inspect
9
+ end
10
+
11
+ def test_should_use_to_s_for_date
12
+ date = Date.new(2006, 1, 1)
13
+ assert_equal date.to_s, date.mocha_inspect
14
+ end
15
+
16
+ def test_should_use_to_s_for_datetime
17
+ datetime = DateTime.new(2006, 1, 1)
18
+ assert_equal datetime.to_s, datetime.mocha_inspect
19
+ end
20
+
21
+ end
@@ -0,0 +1,42 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+
3
+ require 'mocha/exception_raiser'
4
+ require 'timeout'
5
+
6
+ class ExceptionRaiserTest < Test::Unit::TestCase
7
+
8
+ include Mocha
9
+
10
+ def test_should_raise_exception_with_specified_class_and_default_message
11
+ exception_class = Class.new(StandardError)
12
+ raiser = ExceptionRaiser.new(exception_class, nil)
13
+ exception = assert_raises(exception_class) { raiser.evaluate }
14
+ assert_equal exception_class.to_s, exception.message
15
+ end
16
+
17
+ def test_should_raise_exception_with_specified_class_and_message
18
+ exception_class = Class.new(StandardError)
19
+ raiser = ExceptionRaiser.new(exception_class, 'message')
20
+ exception = assert_raises(exception_class) { raiser.evaluate }
21
+ assert_equal 'message', exception.message
22
+ end
23
+
24
+ def test_should_raise_exception_instance
25
+ exception_class = Class.new(StandardError)
26
+ raiser = ExceptionRaiser.new(exception_class.new('message'), nil)
27
+ exception = assert_raises(exception_class) { raiser.evaluate }
28
+ assert_equal 'message', exception.message
29
+ end
30
+
31
+ def test_should_raise_interrupt_exception_with_default_message_so_it_works_in_ruby_1_8_6
32
+ raiser = ExceptionRaiser.new(Interrupt, nil)
33
+ assert_raises(Interrupt) { raiser.evaluate }
34
+ end
35
+
36
+ def test_should_raise_subclass_of_interrupt_exception_with_default_message_so_it_works_in_ruby_1_8_6
37
+ exception_class = Class.new(Interrupt)
38
+ raiser = ExceptionRaiser.new(exception_class, nil)
39
+ assert_raises(exception_class) { raiser.evaluate }
40
+ end
41
+
42
+ end
@@ -0,0 +1,57 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+ require 'mocha/expectation_list'
3
+ require 'mocha/expectation'
4
+ require 'set'
5
+ require 'method_definer'
6
+
7
+ class ExpectationListTest < Test::Unit::TestCase
8
+
9
+ include Mocha
10
+
11
+ def test_should_return_added_expectation
12
+ expectation_list = ExpectationList.new
13
+ expectation = Expectation.new(nil, :my_method)
14
+ assert_same expectation, expectation_list.add(expectation)
15
+ end
16
+
17
+ def test_should_find_matching_expectation
18
+ expectation_list = ExpectationList.new
19
+ expectation1 = Expectation.new(nil, :my_method).with(:argument1, :argument2)
20
+ expectation2 = Expectation.new(nil, :my_method).with(:argument3, :argument4)
21
+ expectation_list.add(expectation1)
22
+ expectation_list.add(expectation2)
23
+ assert_same expectation1, expectation_list.match(:my_method, :argument1, :argument2)
24
+ end
25
+
26
+ def test_should_find_most_recent_matching_expectation
27
+ expectation_list = ExpectationList.new
28
+ expectation1 = Expectation.new(nil, :my_method).with(:argument1, :argument2)
29
+ expectation2 = Expectation.new(nil, :my_method).with(:argument1, :argument2)
30
+ expectation_list.add(expectation1)
31
+ expectation_list.add(expectation2)
32
+ assert_same expectation2, expectation_list.match(:my_method, :argument1, :argument2)
33
+ end
34
+
35
+ def test_should_find_matching_expectation_allowing_invocation
36
+ expectation_list = ExpectationList.new
37
+ expectation1 = Expectation.new(nil, :my_method).with(:argument1, :argument2)
38
+ expectation2 = Expectation.new(nil, :my_method).with(:argument3, :argument4)
39
+ expectation1.define_instance_method(:invocations_allowed?) { true }
40
+ expectation2.define_instance_method(:invocations_allowed?) { true }
41
+ expectation_list.add(expectation1)
42
+ expectation_list.add(expectation2)
43
+ assert_same expectation1, expectation_list.match_allowing_invocation(:my_method, :argument1, :argument2)
44
+ end
45
+
46
+ def test_should_find_most_recent_matching_expectation_allowing_invocation
47
+ expectation_list = ExpectationList.new
48
+ expectation1 = Expectation.new(nil, :my_method)
49
+ expectation2 = Expectation.new(nil, :my_method)
50
+ expectation1.define_instance_method(:invocations_allowed?) { true }
51
+ expectation2.define_instance_method(:invocations_allowed?) { false }
52
+ expectation_list.add(expectation1)
53
+ expectation_list.add(expectation2)
54
+ assert_same expectation1, expectation_list.match_allowing_invocation(:my_method)
55
+ end
56
+
57
+ end