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,196 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class ExpectedInvocationCountTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_pass_if_method_is_never_expected_and_is_never_called
17
+ test_result = run_test do
18
+ mock = mock('mock')
19
+ mock.expects(:method).never
20
+ 0.times { mock.method }
21
+ end
22
+ assert_passed(test_result)
23
+ end
24
+
25
+ def test_should_fail_fast_if_method_is_never_expected_but_is_called_once
26
+ test_result = run_test do
27
+ mock = mock('mock')
28
+ mock.expects(:method).never
29
+ 1.times { mock.method }
30
+ end
31
+ assert_failed(test_result)
32
+ assert_equal ["unexpected invocation: #<Mock:mock>.method()\nsatisfied expectations:\n- expected never, not yet invoked: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
33
+ end
34
+
35
+ def test_should_pass_if_method_is_expected_twice_and_is_called_twice
36
+ test_result = run_test do
37
+ mock = mock('mock')
38
+ mock.expects(:method).times(2)
39
+ 2.times { mock.method }
40
+ end
41
+ assert_passed(test_result)
42
+ end
43
+
44
+ def test_should_fail_if_method_is_expected_twice_but_is_called_once
45
+ test_result = run_test do
46
+ mock = mock('mock')
47
+ mock.expects(:method).times(2)
48
+ 1.times { mock.method }
49
+ end
50
+ assert_failed(test_result)
51
+ assert_equal ["not all expectations were satisfied\nunsatisfied expectations:\n- expected exactly twice, already invoked once: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
52
+ end
53
+
54
+ def test_should_fail_fast_if_method_is_expected_twice_but_is_called_three_times
55
+ test_result = run_test do
56
+ mock = mock('mock')
57
+ mock.expects(:method).times(2)
58
+ 3.times { mock.method }
59
+ end
60
+ assert_failed(test_result)
61
+ assert_equal ["unexpected invocation: #<Mock:mock>.method()\nsatisfied expectations:\n- expected exactly twice, already invoked twice: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
62
+ end
63
+
64
+ def test_should_pass_if_method_is_expected_between_two_and_four_times_and_is_called_twice
65
+ test_result = run_test do
66
+ mock = mock('mock')
67
+ mock.expects(:method).times(2..4)
68
+ 2.times { mock.method }
69
+ end
70
+ assert_passed(test_result)
71
+ end
72
+
73
+ def test_should_pass_if_method_is_expected_between_two_and_four_times_and_is_called_three_times
74
+ test_result = run_test do
75
+ mock = mock('mock')
76
+ mock.expects(:method).times(2..4)
77
+ 3.times { mock.method }
78
+ end
79
+ assert_passed(test_result)
80
+ end
81
+
82
+ def test_should_pass_if_method_is_expected_between_two_and_four_times_and_is_called_four_times
83
+ test_result = run_test do
84
+ mock = mock('mock')
85
+ mock.expects(:method).times(2..4)
86
+ 4.times { mock.method }
87
+ end
88
+ assert_passed(test_result)
89
+ end
90
+
91
+ def test_should_fail_if_method_is_expected_between_two_and_four_times_and_is_called_once
92
+ test_result = run_test do
93
+ mock = mock('mock')
94
+ mock.expects(:method).times(2..4)
95
+ 1.times { mock.method }
96
+ end
97
+ assert_failed(test_result)
98
+ assert_equal ["not all expectations were satisfied\nunsatisfied expectations:\n- expected between 2 and 4 times, already invoked once: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
99
+ end
100
+
101
+ def test_should_fail_fast_if_method_is_expected_between_two_and_four_times_and_is_called_five_times
102
+ test_result = run_test do
103
+ mock = mock('mock')
104
+ mock.expects(:method).times(2..4)
105
+ 5.times { mock.method }
106
+ end
107
+ assert_failed(test_result)
108
+ assert_equal ["unexpected invocation: #<Mock:mock>.method()\nsatisfied expectations:\n- expected between 2 and 4 times, already invoked 4 times: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
109
+ end
110
+
111
+ def test_should_pass_if_method_is_expected_at_least_once_and_is_called_once
112
+ test_result = run_test do
113
+ mock = mock('mock')
114
+ mock.expects(:method).at_least_once
115
+ 1.times { mock.method }
116
+ end
117
+ assert_passed(test_result)
118
+ end
119
+
120
+ def test_should_pass_if_method_is_expected_at_least_once_and_is_called_twice
121
+ test_result = run_test do
122
+ mock = mock('mock')
123
+ mock.expects(:method).at_least_once
124
+ 2.times { mock.method }
125
+ end
126
+ assert_passed(test_result)
127
+ end
128
+
129
+ def test_should_fail_if_method_is_expected_at_least_once_but_is_never_called
130
+ test_result = run_test do
131
+ mock = mock('mock')
132
+ mock.expects(:method).at_least_once
133
+ 0.times { mock.method }
134
+ end
135
+ assert_failed(test_result)
136
+ assert_equal ["not all expectations were satisfied\nunsatisfied expectations:\n- expected at least once, not yet invoked: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
137
+ end
138
+
139
+ def test_should_pass_if_method_is_expected_at_most_once_and_is_never_called
140
+ test_result = run_test do
141
+ mock = mock('mock')
142
+ mock.expects(:method).at_most_once
143
+ 0.times { mock.method }
144
+ end
145
+ assert_passed(test_result)
146
+ end
147
+
148
+ def test_should_pass_if_method_is_expected_at_most_once_and_called_once
149
+ test_result = run_test do
150
+ mock = mock('mock')
151
+ mock.expects(:method).at_most_once
152
+ 1.times { mock.method }
153
+ end
154
+ assert_passed(test_result)
155
+ end
156
+
157
+ def test_should_fail_fast_if_method_is_expected_at_most_once_but_is_called_twice
158
+ test_result = run_test do
159
+ mock = mock('mock')
160
+ mock.expects(:method).at_most_once
161
+ 2.times { mock.method }
162
+ end
163
+ assert_failed(test_result)
164
+ assert_equal ["unexpected invocation: #<Mock:mock>.method()\nsatisfied expectations:\n- expected at most once, already invoked once: #<Mock:mock>.method(any_parameters)\n"], test_result.failure_messages
165
+ end
166
+
167
+ def test_should_pass_if_method_is_never_expected_and_is_never_called_even_if_everything_is_stubbed
168
+ test_result = run_test do
169
+ stub = stub_everything('stub')
170
+ stub.expects(:method).never
171
+ 0.times { stub.method }
172
+ end
173
+ assert_passed(test_result)
174
+ end
175
+
176
+ def test_should_fail_fast_if_method_is_never_expected_but_is_called_once_even_if_everything_is_stubbed
177
+ test_result = run_test do
178
+ stub = stub_everything('stub')
179
+ stub.expects(:method).never
180
+ 1.times { stub.method }
181
+ end
182
+ assert_failed(test_result)
183
+ assert_equal ["unexpected invocation: #<Mock:stub>.method()\nsatisfied expectations:\n- expected never, not yet invoked: #<Mock:stub>.method(any_parameters)\n"], test_result.failure_messages
184
+ end
185
+
186
+ def test_should_fail_fast_if_there_is_no_matching_expectation
187
+ test_result = run_test do
188
+ mock = mock('mock')
189
+ mock.expects(:method).with(1)
190
+ 1.times { mock.method }
191
+ end
192
+ assert_failed(test_result)
193
+ assert_equal ["unexpected invocation: #<Mock:mock>.method()\nunsatisfied expectations:\n- expected exactly once, not yet invoked: #<Mock:mock>.method(1)\n"], test_result.failure_messages
194
+ end
195
+
196
+ end
@@ -0,0 +1,64 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class FailureMessagesTest < Test::Unit::TestCase
5
+
6
+ OBJECT_ADDRESS_PATTERN = '0x[0-9A-Fa-f]{1,12}'
7
+
8
+ include AcceptanceTest
9
+
10
+ def setup
11
+ setup_acceptance_test
12
+ end
13
+
14
+ def teardown
15
+ teardown_acceptance_test
16
+ end
17
+
18
+ class Foo; end
19
+
20
+ def test_should_display_class_name_when_expectation_was_on_class
21
+ test_result = run_test do
22
+ Foo.expects(:bar)
23
+ end
24
+ assert_match Regexp.new('FailureMessagesTest::Foo'), test_result.failures[0].message
25
+ end
26
+
27
+ def test_should_display_class_name_and_address_when_expectation_was_on_instance
28
+ test_result = run_test do
29
+ Foo.new.expects(:bar)
30
+ end
31
+ assert_match Regexp.new("#<FailureMessagesTest::Foo:#{OBJECT_ADDRESS_PATTERN}>"), test_result.failures[0].message
32
+ end
33
+
34
+ def test_should_display_class_name_and_any_instance_prefix_when_expectation_was_on_any_instance
35
+ test_result = run_test do
36
+ Foo.any_instance.expects(:bar)
37
+ end
38
+ assert_match Regexp.new('#<AnyInstance:FailureMessagesTest::Foo>'), test_result.failures[0].message
39
+ end
40
+
41
+ def test_should_display_mock_name_when_expectation_was_on_named_mock
42
+ test_result = run_test do
43
+ foo = mock('foo')
44
+ foo.expects(:bar)
45
+ end
46
+ assert_match Regexp.new('#<Mock:foo>'), test_result.failures[0].message
47
+ end
48
+
49
+ def test_should_display_mock_address_when_expectation_was_on_unnamed_mock
50
+ test_result = run_test do
51
+ foo = mock()
52
+ foo.expects(:bar)
53
+ end
54
+ assert_match Regexp.new("#<Mock:#{OBJECT_ADDRESS_PATTERN}>"), test_result.failures[0].message
55
+ end
56
+
57
+ def test_should_display_string_when_expectation_was_on_string
58
+ test_result = run_test do
59
+ 'Foo'.expects(:bar)
60
+ end
61
+ assert_match Regexp.new("'Foo'"), test_result.failures[0].message
62
+ end
63
+
64
+ end
@@ -0,0 +1,130 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ if defined?(MiniTest)
5
+
6
+ class MiniTestSampleTest < MiniTest::Unit::TestCase
7
+
8
+ def test_mocha_with_fulfilled_expectation
9
+ mockee = mock()
10
+ mockee.expects(:blah)
11
+ mockee.blah
12
+ end
13
+
14
+ def test_mocha_with_unfulfilled_expectation
15
+ mockee = mock()
16
+ mockee.expects(:blah)
17
+ end
18
+
19
+ def test_mocha_with_unexpected_invocation
20
+ mockee = mock()
21
+ mockee.blah
22
+ end
23
+
24
+ def test_stubba_with_fulfilled_expectation
25
+ stubbee = Class.new { define_method(:blah) {} }.new
26
+ stubbee.expects(:blah)
27
+ stubbee.blah
28
+ end
29
+
30
+ def test_stubba_with_unfulfilled_expectation
31
+ stubbee = Class.new { define_method(:blah) {} }.new
32
+ stubbee.expects(:blah)
33
+ end
34
+
35
+ def test_mocha_with_matching_parameter
36
+ mockee = mock()
37
+ mockee.expects(:blah).with(has_key(:wibble))
38
+ mockee.blah(:wibble => 1)
39
+ end
40
+
41
+ def test_mocha_with_non_matching_parameter
42
+ mockee = mock()
43
+ mockee.expects(:blah).with(has_key(:wibble))
44
+ mockee.blah(:wobble => 2)
45
+ end
46
+
47
+ end
48
+
49
+ class MiniTestAdapterTest < Test::Unit::TestCase
50
+
51
+ def setup
52
+ @output = StringIO.new
53
+ MiniTest::Unit.output = @output
54
+ @runner = MiniTest::Unit.new
55
+ end
56
+
57
+ attr_reader :runner
58
+
59
+ def test_should_pass_mocha_test
60
+ runner.run(%w(-n test_mocha_with_fulfilled_expectation))
61
+
62
+ assert_equal 0, runner.errors
63
+ assert_equal 1, runner.assertion_count
64
+ end
65
+
66
+ def test_should_fail_mocha_test_due_to_unfulfilled_expectation
67
+ runner.run(%w(-n test_mocha_with_unfulfilled_expectation))
68
+
69
+ assert_equal 1, runner.errors
70
+ assert_equal 1, runner.assertion_count
71
+ assert_not_all_expectation_were_satisfied
72
+ end
73
+
74
+ def test_should_fail_mocha_test_due_to_unexpected_invocation
75
+ runner.run(%w(-n test_mocha_with_unexpected_invocation))
76
+
77
+ assert_equal 1, runner.errors
78
+ assert_equal 0, runner.assertion_count
79
+ assert_unexpected_invocation
80
+ end
81
+
82
+ def test_should_pass_stubba_test
83
+ runner.run(%w(-n test_stubba_with_fulfilled_expectation))
84
+
85
+ assert_equal 0, runner.errors
86
+ assert_equal 1, runner.assertion_count
87
+ end
88
+
89
+ def test_should_fail_stubba_test_due_to_unfulfilled_expectation
90
+ runner.run(%w(-n test_stubba_with_unfulfilled_expectation))
91
+
92
+ assert_equal 1, runner.errors
93
+ assert_equal 1, runner.assertion_count
94
+ assert_match Regexp.new('not all expectations were satisfied'), output
95
+ end
96
+
97
+ def test_should_pass_mocha_test_with_matching_parameter
98
+ runner.run(%w(-n test_mocha_with_matching_parameter))
99
+
100
+ assert_equal 0, runner.errors
101
+ assert_equal 1, runner.assertion_count
102
+ end
103
+
104
+ def test_should_fail_mocha_test_with_non_matching_parameter
105
+ runner.run(%w(-n test_mocha_with_non_matching_parameter))
106
+
107
+ assert_equal 1, runner.errors
108
+ assert_unexpected_invocation
109
+ end
110
+
111
+ private
112
+
113
+ def output
114
+ @output.rewind
115
+ @output.read
116
+ end
117
+
118
+ def assert_unexpected_invocation
119
+ assert_match Regexp.new('unexpected invocation'), output, "MiniTest output:\n#{output}"
120
+ end
121
+
122
+ def assert_not_all_expectation_were_satisfied
123
+ assert_match Regexp.new('not all expectations were satisfied'), output, "MiniTest output:\n#{output}"
124
+ end
125
+
126
+ end
127
+
128
+ else
129
+ warn "MiniTest is not available, so MiniTestAdapterTest has not been run."
130
+ end
@@ -0,0 +1,98 @@
1
+ require File.join(File.dirname(__FILE__), "..", "test_helper")
2
+ require 'mocha'
3
+
4
+ class MochaExampleTest < Test::Unit::TestCase
5
+
6
+ class Rover
7
+
8
+ def initialize(left_track, right_track, steps_per_metre, steps_per_degree)
9
+ @left_track, @right_track, @steps_per_metre, @steps_per_degree = left_track, right_track, steps_per_metre, steps_per_degree
10
+ end
11
+
12
+ def forward(metres)
13
+ @left_track.step(metres * @steps_per_metre)
14
+ @right_track.step(metres * @steps_per_metre)
15
+ wait
16
+ end
17
+
18
+ def backward(metres)
19
+ forward(-metres)
20
+ end
21
+
22
+ def left(degrees)
23
+ @left_track.step(-degrees * @steps_per_degree)
24
+ @right_track.step(+degrees * @steps_per_degree)
25
+ wait
26
+ end
27
+
28
+ def right(degrees)
29
+ left(-degrees)
30
+ end
31
+
32
+ def wait
33
+ while (@left_track.moving? or @right_track.moving?); end
34
+ end
35
+
36
+ end
37
+
38
+ def test_should_step_both_tracks_forward_ten_steps
39
+ left_track = mock('left_track')
40
+ right_track = mock('right_track')
41
+ steps_per_metre = 5
42
+ rover = Rover.new(left_track, right_track, steps_per_metre, nil)
43
+
44
+ left_track.expects(:step).with(10)
45
+ right_track.expects(:step).with(10)
46
+
47
+ left_track.stubs(:moving?).returns(false)
48
+ right_track.stubs(:moving?).returns(false)
49
+
50
+ rover.forward(2)
51
+ end
52
+
53
+ def test_should_step_both_tracks_backward_ten_steps
54
+ left_track = mock('left_track')
55
+ right_track = mock('right_track')
56
+ steps_per_metre = 5
57
+ rover = Rover.new(left_track, right_track, steps_per_metre, nil)
58
+
59
+ left_track.expects(:step).with(-10)
60
+ right_track.expects(:step).with(-10)
61
+
62
+ left_track.stubs(:moving?).returns(false)
63
+ right_track.stubs(:moving?).returns(false)
64
+
65
+ rover.backward(2)
66
+ end
67
+
68
+ def test_should_step_left_track_forwards_five_steps_and_right_track_backwards_five_steps
69
+ left_track = mock('left_track')
70
+ right_track = mock('right_track')
71
+ steps_per_degree = 5.0 / 90.0
72
+ rover = Rover.new(left_track, right_track, nil, steps_per_degree)
73
+
74
+ left_track.expects(:step).with(+5)
75
+ right_track.expects(:step).with(-5)
76
+
77
+ left_track.stubs(:moving?).returns(false)
78
+ right_track.stubs(:moving?).returns(false)
79
+
80
+ rover.right(90)
81
+ end
82
+
83
+ def test_should_step_left_track_backwards_five_steps_and_right_track_forwards_five_steps
84
+ left_track = mock('left_track')
85
+ right_track = mock('right_track')
86
+ steps_per_degree = 5.0 / 90.0
87
+ rover = Rover.new(left_track, right_track, nil, steps_per_degree)
88
+
89
+ left_track.expects(:step).with(-5)
90
+ right_track.expects(:step).with(+5)
91
+
92
+ left_track.stubs(:moving?).returns(false)
93
+ right_track.stubs(:moving?).returns(false)
94
+
95
+ rover.left(90)
96
+ end
97
+
98
+ end
@@ -0,0 +1,84 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+ require 'execution_point'
4
+
5
+ class MochaTestResultTest < Test::Unit::TestCase
6
+
7
+ include AcceptanceTest
8
+
9
+ def setup
10
+ setup_acceptance_test
11
+ end
12
+
13
+ def teardown
14
+ teardown_acceptance_test
15
+ end
16
+
17
+ def test_should_include_expectation_verification_in_assertion_count
18
+ test_result = run_test do
19
+ object = mock()
20
+ object.expects(:message)
21
+ object.message
22
+ end
23
+ assert_equal 1, test_result.assertion_count
24
+ end
25
+
26
+ def test_should_include_assertions_in_assertion_count
27
+ test_result = run_test do
28
+ assert true
29
+ end
30
+ assert_equal 1, test_result.assertion_count
31
+ end
32
+
33
+ def test_should_not_include_stubbing_expectation_verification_in_assertion_count
34
+ test_result = run_test do
35
+ object = mock()
36
+ object.stubs(:message)
37
+ object.message
38
+ end
39
+ assert_equal 0, test_result.assertion_count
40
+ end
41
+
42
+ def test_should_include_expectation_verification_failure_in_failure_count
43
+ test_result = run_test do
44
+ object = mock()
45
+ object.expects(:message)
46
+ end
47
+ assert_equal 1, test_result.failure_count
48
+ end
49
+
50
+ def test_should_include_unexpected_verification_failure_in_failure_count
51
+ test_result = run_test do
52
+ object = mock()
53
+ object.message
54
+ end
55
+ assert_equal 1, test_result.failure_count
56
+ end
57
+
58
+ def test_should_include_assertion_failure_in_failure_count
59
+ test_result = run_test do
60
+ flunk
61
+ end
62
+ assert_equal 1, test_result.failure_count
63
+ end
64
+
65
+ def test_should_display_backtrace_indicating_line_number_where_unexpected_method_was_called
66
+ execution_point = nil
67
+ test_result = run_test do
68
+ object = mock()
69
+ execution_point = ExecutionPoint.current; object.message
70
+ end
71
+ assert_equal 1, test_result.failure_count
72
+ assert_equal execution_point, ExecutionPoint.new(test_result.failures[0].location)
73
+ end
74
+
75
+ def test_should_display_backtrace_indicating_line_number_where_failing_assertion_was_called
76
+ execution_point = nil
77
+ test_result = run_test do
78
+ execution_point = ExecutionPoint.current; flunk
79
+ end
80
+ assert_equal 1, test_result.failure_count
81
+ assert_equal execution_point, ExecutionPoint.new(test_result.failures[0].location)
82
+ end
83
+
84
+ end
@@ -0,0 +1,100 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class MockTest < Test::Unit::TestCase
5
+
6
+ include AcceptanceTest
7
+
8
+ def setup
9
+ setup_acceptance_test
10
+ end
11
+
12
+ def teardown
13
+ teardown_acceptance_test
14
+ end
15
+
16
+ def test_should_build_mock_and_explicitly_add_an_expectation_which_is_satisfied
17
+ test_result = run_test do
18
+ foo = mock()
19
+ foo.expects(:bar)
20
+ foo.bar
21
+ end
22
+ assert_passed(test_result)
23
+ end
24
+
25
+ def test_should_build_mock_and_explicitly_add_an_expectation_which_is_not_satisfied
26
+ test_result = run_test do
27
+ foo = mock()
28
+ foo.expects(:bar)
29
+ end
30
+ assert_failed(test_result)
31
+ end
32
+
33
+ def test_should_build_named_mock_and_explicitly_add_an_expectation_which_is_satisfied
34
+ test_result = run_test do
35
+ foo = mock('foo')
36
+ foo.expects(:bar)
37
+ foo.bar
38
+ end
39
+ assert_passed(test_result)
40
+ end
41
+
42
+ def test_should_build_named_mock_and_explicitly_add_an_expectation_which_is_not_satisfied
43
+ test_result = run_test do
44
+ foo = mock('foo')
45
+ foo.expects(:bar)
46
+ end
47
+ assert_failed(test_result)
48
+ end
49
+
50
+ def test_should_build_mock_incorporating_two_expectations_which_are_satisifed
51
+ test_result = run_test do
52
+ foo = mock(:bar => 'bar', :baz => 'baz')
53
+ foo.bar
54
+ foo.baz
55
+ end
56
+ assert_passed(test_result)
57
+ end
58
+
59
+ def test_should_build_mock_incorporating_two_expectations_the_first_of_which_is_not_satisifed
60
+ test_result = run_test do
61
+ foo = mock(:bar => 'bar', :baz => 'baz')
62
+ foo.baz
63
+ end
64
+ assert_failed(test_result)
65
+ end
66
+
67
+ def test_should_build_mock_incorporating_two_expectations_the_second_of_which_is_not_satisifed
68
+ test_result = run_test do
69
+ foo = mock(:bar => 'bar', :baz => 'baz')
70
+ foo.bar
71
+ end
72
+ assert_failed(test_result)
73
+ end
74
+
75
+ def test_should_build_named_mock_incorporating_two_expectations_which_are_satisifed
76
+ test_result = run_test do
77
+ foo = mock('foo', :bar => 'bar', :baz => 'baz')
78
+ foo.bar
79
+ foo.baz
80
+ end
81
+ assert_passed(test_result)
82
+ end
83
+
84
+ def test_should_build_named_mock_incorporating_two_expectations_the_first_of_which_is_not_satisifed
85
+ test_result = run_test do
86
+ foo = mock('foo', :bar => 'bar', :baz => 'baz')
87
+ foo.baz
88
+ end
89
+ assert_failed(test_result)
90
+ end
91
+
92
+ def test_should_build_named_mock_incorporating_two_expectations_the_second_of_which_is_not_satisifed
93
+ test_result = run_test do
94
+ foo = mock('foo', :bar => 'bar', :baz => 'baz')
95
+ foo.bar
96
+ end
97
+ assert_failed(test_result)
98
+ end
99
+
100
+ end