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,51 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class MockWithInitializerBlockTest < 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_expect_two_method_invocations_and_receive_both_of_them
17
+ test_result = run_test do
18
+ mock = mock() do
19
+ expects(:method_1)
20
+ expects(:method_2)
21
+ end
22
+ mock.method_1
23
+ mock.method_2
24
+ end
25
+ assert_passed(test_result)
26
+ end
27
+
28
+ def test_should_expect_two_method_invocations_but_receive_only_one_of_them
29
+ test_result = run_test do
30
+ mock = mock() do
31
+ expects(:method_1)
32
+ expects(:method_2)
33
+ end
34
+ mock.method_1
35
+ end
36
+ assert_failed(test_result)
37
+ end
38
+
39
+ def test_should_stub_methods
40
+ test_result = run_test do
41
+ mock = mock() do
42
+ stubs(:method_1).returns(1)
43
+ stubs(:method_2).returns(2)
44
+ end
45
+ assert_equal 1, mock.method_1
46
+ assert_equal 2, mock.method_2
47
+ end
48
+ assert_passed(test_result)
49
+ end
50
+
51
+ end
@@ -0,0 +1,78 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class MockedMethodDispatchTest < 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_find_latest_matching_expectation
17
+ test_result = run_test do
18
+ mock = mock()
19
+ mock.stubs(:method).returns(1)
20
+ mock.stubs(:method).returns(2)
21
+ assert_equal 2, mock.method
22
+ assert_equal 2, mock.method
23
+ assert_equal 2, mock.method
24
+ end
25
+ assert_passed(test_result)
26
+ end
27
+
28
+ def test_should_find_latest_expectation_which_has_not_stopped_matching
29
+ test_result = run_test do
30
+ mock = mock()
31
+ mock.stubs(:method).returns(1)
32
+ mock.stubs(:method).once.returns(2)
33
+ assert_equal 2, mock.method
34
+ assert_equal 1, mock.method
35
+ assert_equal 1, mock.method
36
+ end
37
+ assert_passed(test_result)
38
+ end
39
+
40
+ def test_should_keep_finding_later_stub_and_so_never_satisfy_earlier_expectation
41
+ test_result = run_test do
42
+ mock = mock()
43
+ mock.expects(:method).returns(1)
44
+ mock.stubs(:method).returns(2)
45
+ assert_equal 2, mock.method
46
+ assert_equal 2, mock.method
47
+ assert_equal 2, mock.method
48
+ end
49
+ assert_failed(test_result)
50
+ end
51
+
52
+ def test_should_find_later_expectation_until_it_stops_matching_then_find_earlier_stub
53
+ test_result = run_test do
54
+ mock = mock()
55
+ mock.stubs(:method).returns(1)
56
+ mock.expects(:method).returns(2)
57
+ assert_equal 2, mock.method
58
+ assert_equal 1, mock.method
59
+ assert_equal 1, mock.method
60
+ end
61
+ assert_passed(test_result)
62
+ end
63
+
64
+ def test_should_find_latest_expectation_with_range_of_expected_invocation_count_which_has_not_stopped_matching
65
+ test_result = run_test do
66
+ mock = mock()
67
+ mock.stubs(:method).returns(1)
68
+ mock.stubs(:method).times(2..3).returns(2)
69
+ assert_equal 2, mock.method
70
+ assert_equal 2, mock.method
71
+ assert_equal 2, mock.method
72
+ assert_equal 1, mock.method
73
+ assert_equal 1, mock.method
74
+ end
75
+ assert_passed(test_result)
76
+ end
77
+
78
+ end
@@ -0,0 +1,70 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class OptionalParameterMatcherTest < 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_all_required_parameters_match_and_no_optional_parameters_are_supplied
17
+ test_result = run_test do
18
+ mock = mock()
19
+ mock.expects(:method).with(1, 2, optionally(3, 4))
20
+ mock.method(1, 2)
21
+ end
22
+ assert_passed(test_result)
23
+ end
24
+
25
+ def test_should_pass_if_all_required_and_optional_parameters_match_and_some_optional_parameters_are_supplied
26
+ test_result = run_test do
27
+ mock = mock()
28
+ mock.expects(:method).with(1, 2, optionally(3, 4))
29
+ mock.method(1, 2, 3)
30
+ end
31
+ assert_passed(test_result)
32
+ end
33
+
34
+ def test_should_pass_if_all_required_and_optional_parameters_match_and_all_optional_parameters_are_supplied
35
+ test_result = run_test do
36
+ mock = mock()
37
+ mock.expects(:method).with(1, 2, optionally(3, 4))
38
+ mock.method(1, 2, 3, 4)
39
+ end
40
+ assert_passed(test_result)
41
+ end
42
+
43
+ def test_should_fail_if_all_required_and_optional_parameters_match_but_too_many_optional_parameters_are_supplied
44
+ test_result = run_test do
45
+ mock = mock()
46
+ mock.expects(:method).with(1, 2, optionally(3, 4))
47
+ mock.method(1, 2, 3, 4, 5)
48
+ end
49
+ assert_failed(test_result)
50
+ end
51
+
52
+ def test_should_fail_if_all_required_parameters_match_but_some_optional_parameters_do_not_match
53
+ test_result = run_test do
54
+ mock = mock()
55
+ mock.expects(:method).with(1, 2, optionally(3, 4))
56
+ mock.method(1, 2, 4)
57
+ end
58
+ assert_failed(test_result)
59
+ end
60
+
61
+ def test_should_fail_if_all_required_parameters_match_but_no_optional_parameters_match
62
+ test_result = run_test do
63
+ mock = mock()
64
+ mock.expects(:method).with(1, 2, optionally(3, 4))
65
+ mock.method(1, 2, 4, 5)
66
+ end
67
+ assert_failed(test_result)
68
+ end
69
+
70
+ end
@@ -0,0 +1,209 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class ParameterMatcherTest < 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_match_hash_parameter_with_specified_key
17
+ test_result = run_test do
18
+ mock = mock()
19
+ mock.expects(:method).with(has_key(:key_1))
20
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
21
+ end
22
+ assert_passed(test_result)
23
+ end
24
+
25
+ def test_should_not_match_hash_parameter_with_specified_key
26
+ test_result = run_test do
27
+ mock = mock()
28
+ mock.expects(:method).with(has_key(:key_1))
29
+ mock.method(:key_2 => 'value_2')
30
+ end
31
+ assert_failed(test_result)
32
+ end
33
+
34
+ def test_should_match_hash_parameter_with_specified_value
35
+ test_result = run_test do
36
+ mock = mock()
37
+ mock.expects(:method).with(has_value('value_1'))
38
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
39
+ end
40
+ assert_passed(test_result)
41
+ end
42
+
43
+ def test_should_not_match_hash_parameter_with_specified_value
44
+ test_result = run_test do
45
+ mock = mock()
46
+ mock.expects(:method).with(has_value('value_1'))
47
+ mock.method(:key_2 => 'value_2')
48
+ end
49
+ assert_failed(test_result)
50
+ end
51
+
52
+ def test_should_match_hash_parameter_with_specified_key_value_pair
53
+ test_result = run_test do
54
+ mock = mock()
55
+ mock.expects(:method).with(has_entry(:key_1, 'value_1'))
56
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
57
+ end
58
+ assert_passed(test_result)
59
+ end
60
+
61
+ def test_should_not_match_hash_parameter_with_specified_key_value_pair
62
+ test_result = run_test do
63
+ mock = mock()
64
+ mock.expects(:method).with(has_entry(:key_1, 'value_2'))
65
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
66
+ end
67
+ assert_failed(test_result)
68
+ end
69
+
70
+ def test_should_match_hash_parameter_with_specified_hash_entry
71
+ test_result = run_test do
72
+ mock = mock()
73
+ mock.expects(:method).with(has_entry(:key_1 => 'value_1'))
74
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
75
+ end
76
+ assert_passed(test_result)
77
+ end
78
+
79
+ def test_should_not_match_hash_parameter_with_specified_hash_entry
80
+ test_result = run_test do
81
+ mock = mock()
82
+ mock.expects(:method).with(has_entry(:key_1 => 'value_2'))
83
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2')
84
+ end
85
+ assert_failed(test_result)
86
+ end
87
+
88
+ def test_should_match_hash_parameter_with_specified_entries
89
+ test_result = run_test do
90
+ mock = mock()
91
+ mock.expects(:method).with(has_entries(:key_1 => 'value_1', :key_2 => 'value_2'))
92
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2', :key_3 => 'value_3')
93
+ end
94
+ assert_passed(test_result)
95
+ end
96
+
97
+ def test_should_not_match_hash_parameter_with_specified_entries
98
+ test_result = run_test do
99
+ mock = mock()
100
+ mock.expects(:method).with(has_entries(:key_1 => 'value_1', :key_2 => 'value_2'))
101
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_3')
102
+ end
103
+ assert_failed(test_result)
104
+ end
105
+
106
+ def test_should_match_parameter_that_matches_regular_expression
107
+ test_result = run_test do
108
+ mock = mock()
109
+ mock.expects(:method).with(regexp_matches(/meter/))
110
+ mock.method('this parameter should match')
111
+ end
112
+ assert_passed(test_result)
113
+ end
114
+
115
+ def test_should_not_match_parameter_that_does_not_match_regular_expression
116
+ test_result = run_test do
117
+ mock = mock()
118
+ mock.expects(:method).with(regexp_matches(/something different/))
119
+ mock.method('this parameter should not match')
120
+ end
121
+ assert_failed(test_result)
122
+ end
123
+
124
+ def test_should_match_hash_parameter_with_specified_entries_using_nested_matchers
125
+ test_result = run_test do
126
+ mock = mock()
127
+ mock.expects(:method).with(has_entries(:key_1 => regexp_matches(/value_1/), kind_of(Symbol) => 'value_2'))
128
+ mock.method(:key_1 => 'value_1', :key_2 => 'value_2', :key_3 => 'value_3')
129
+ end
130
+ assert_passed(test_result)
131
+ end
132
+
133
+ def test_should_not_match_hash_parameter_with_specified_entries_using_nested_matchers
134
+ test_result = run_test do
135
+ mock = mock()
136
+ mock.expects(:method).with(has_entries(:key_1 => regexp_matches(/value_1/), kind_of(String) => 'value_2'))
137
+ mock.method(:key_1 => 'value_2', :key_2 => 'value_3')
138
+ end
139
+ assert_failed(test_result)
140
+ end
141
+
142
+ def test_should_match_parameter_that_matches_any_value
143
+ test_result = run_test do
144
+ mock = mock()
145
+ mock.expects(:method).with(any_of('value_1', 'value_2')).times(2)
146
+ mock.method('value_1')
147
+ mock.method('value_2')
148
+ end
149
+ assert_passed(test_result)
150
+ end
151
+
152
+ def test_should_not_match_parameter_that_does_not_match_any_value
153
+ test_result = run_test do
154
+ mock = mock()
155
+ mock.expects(:method).with(any_of('value_1', 'value_2'))
156
+ mock.method('value_3')
157
+ end
158
+ assert_failed(test_result)
159
+ end
160
+
161
+ def test_should_match_parameter_that_matches_all_values
162
+ test_result = run_test do
163
+ mock = mock()
164
+ mock.expects(:method).with(all_of('value_1', 'value_1'))
165
+ mock.method('value_1')
166
+ end
167
+ assert_passed(test_result)
168
+ end
169
+
170
+ def test_should_not_match_parameter_that_does_not_match_all_values
171
+ test_result = run_test do
172
+ mock = mock()
173
+ mock.expects(:method).with(all_of('value_1', 'value_2'))
174
+ mock.method('value_1')
175
+ end
176
+ assert_failed(test_result)
177
+ end
178
+
179
+ def test_should_match_parameter_that_responds_with_specified_value
180
+ klass = Class.new do
181
+ def quack
182
+ 'quack'
183
+ end
184
+ end
185
+ duck = klass.new
186
+ test_result = run_test do
187
+ mock = mock()
188
+ mock.expects(:method).with(responds_with(:quack, 'quack'))
189
+ mock.method(duck)
190
+ end
191
+ assert_passed(test_result)
192
+ end
193
+
194
+ def test_should_not_match_parameter_that_does_not_respond_with_specified_value
195
+ klass = Class.new do
196
+ def quack
197
+ 'woof'
198
+ end
199
+ end
200
+ duck = klass.new
201
+ test_result = run_test do
202
+ mock = mock()
203
+ mock.expects(:method).with(responds_with(:quack, 'quack'))
204
+ mock.method(duck)
205
+ end
206
+ assert_failed(test_result)
207
+ end
208
+
209
+ end
@@ -0,0 +1,47 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class PartialMockTest < 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_all_expectations_are_satisfied
17
+ test_result = run_test do
18
+ partial_mock_one = "partial_mock_one"
19
+ partial_mock_two = "partial_mock_two"
20
+
21
+ partial_mock_one.expects(:first)
22
+ partial_mock_one.expects(:second)
23
+ partial_mock_two.expects(:third)
24
+
25
+ partial_mock_one.first
26
+ partial_mock_one.second
27
+ partial_mock_two.third
28
+ end
29
+ assert_passed(test_result)
30
+ end
31
+
32
+ def test_should_fail_if_all_expectations_are_not_satisfied
33
+ test_result = run_test do
34
+ partial_mock_one = "partial_mock_one"
35
+ partial_mock_two = "partial_mock_two"
36
+
37
+ partial_mock_one.expects(:first)
38
+ partial_mock_one.expects(:second)
39
+ partial_mock_two.expects(:third)
40
+
41
+ partial_mock_one.first
42
+ partial_mock_two.third
43
+ end
44
+ assert_failed(test_result)
45
+ end
46
+
47
+ end
@@ -0,0 +1,52 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class ReturnValueTest < 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_with_a_return_value
17
+ test_result = run_test do
18
+ foo = mock('foo')
19
+ foo.expects(:bar).returns('bar')
20
+ assert_equal 'bar', foo.bar
21
+ end
22
+ assert_passed(test_result)
23
+ end
24
+
25
+ def test_should_build_mock_incorporating_two_expectations_with_return_values
26
+ test_result = run_test do
27
+ foo = mock('foo', :bar => 'bar', :baz => 'baz')
28
+ assert_equal 'bar', foo.bar
29
+ assert_equal 'baz', foo.baz
30
+ end
31
+ assert_passed(test_result)
32
+ end
33
+
34
+ def test_should_build_stub_and_explicitly_add_an_expectation_with_a_return_value
35
+ test_result = run_test do
36
+ foo = stub('foo')
37
+ foo.stubs(:bar).returns('bar')
38
+ assert_equal 'bar', foo.bar
39
+ end
40
+ assert_passed(test_result)
41
+ end
42
+
43
+ def test_should_build_stub_incorporating_two_expectations_with_return_values
44
+ test_result = run_test do
45
+ foo = stub('foo', :bar => 'bar', :baz => 'baz')
46
+ assert_equal 'bar', foo.bar
47
+ assert_equal 'baz', foo.baz
48
+ end
49
+ assert_passed(test_result)
50
+ end
51
+
52
+ end
@@ -0,0 +1,186 @@
1
+ require File.join(File.dirname(__FILE__), "acceptance_test_helper")
2
+ require 'mocha'
3
+
4
+ class SequenceTest < 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_constrain_invocations_to_occur_in_expected_order
17
+ test_result = run_test do
18
+ mock = mock()
19
+ sequence = sequence('one')
20
+
21
+ mock.expects(:first).in_sequence(sequence)
22
+ mock.expects(:second).in_sequence(sequence)
23
+
24
+ mock.second
25
+ end
26
+ assert_failed(test_result)
27
+ end
28
+
29
+ def test_should_allow_invocations_in_sequence
30
+ test_result = run_test do
31
+ mock = mock()
32
+ sequence = sequence('one')
33
+
34
+ mock.expects(:first).in_sequence(sequence)
35
+ mock.expects(:second).in_sequence(sequence)
36
+
37
+ mock.first
38
+ mock.second
39
+ end
40
+ assert_passed(test_result)
41
+ end
42
+
43
+ def test_should_constrain_invocations_to_occur_in_expected_order_even_if_expected_on_different_mocks
44
+ test_result = run_test do
45
+ mock_one = mock('1')
46
+ mock_two = mock('2')
47
+ sequence = sequence('one')
48
+
49
+ mock_one.expects(:first).in_sequence(sequence)
50
+ mock_two.expects(:second).in_sequence(sequence)
51
+
52
+ mock_two.second
53
+ end
54
+ assert_failed(test_result)
55
+ end
56
+
57
+ def test_should_allow_invocations_in_sequence_even_if_expected_on_different_mocks
58
+ test_result = run_test do
59
+ mock_one = mock('1')
60
+ mock_two = mock('2')
61
+ sequence = sequence('one')
62
+
63
+ mock_one.expects(:first).in_sequence(sequence)
64
+ mock_two.expects(:second).in_sequence(sequence)
65
+
66
+ mock_one.first
67
+ mock_two.second
68
+ end
69
+ assert_passed(test_result)
70
+ end
71
+
72
+ def test_should_constrain_invocations_to_occur_in_expected_order_even_if_expected_on_partial_mocks
73
+ test_result = run_test do
74
+ partial_mock_one = "1"
75
+ partial_mock_two = "2"
76
+ sequence = sequence('one')
77
+
78
+ partial_mock_one.expects(:first).in_sequence(sequence)
79
+ partial_mock_two.expects(:second).in_sequence(sequence)
80
+
81
+ partial_mock_two.second
82
+ end
83
+ assert_failed(test_result)
84
+ end
85
+
86
+ def test_should_allow_invocations_in_sequence_even_if_expected_on_partial_mocks
87
+ test_result = run_test do
88
+ partial_mock_one = "1"
89
+ partial_mock_two = "2"
90
+ sequence = sequence('one')
91
+
92
+ partial_mock_one.expects(:first).in_sequence(sequence)
93
+ partial_mock_two.expects(:second).in_sequence(sequence)
94
+
95
+ partial_mock_one.first
96
+ partial_mock_two.second
97
+ end
98
+ assert_passed(test_result)
99
+ end
100
+
101
+ def test_should_allow_stub_expectations_to_be_skipped_in_sequence
102
+ test_result = run_test do
103
+ mock = mock()
104
+ sequence = sequence('one')
105
+
106
+ mock.expects(:first).in_sequence(sequence)
107
+ mock.stubs(:second).in_sequence(sequence)
108
+ mock.expects(:third).in_sequence(sequence)
109
+
110
+ mock.first
111
+ mock.third
112
+ end
113
+ assert_passed(test_result)
114
+ end
115
+
116
+ def test_should_regard_sequences_as_independent_of_each_other
117
+ test_result = run_test do
118
+ mock = mock()
119
+ sequence_one = sequence('one')
120
+ sequence_two = sequence('two')
121
+
122
+ mock.expects(:first).in_sequence(sequence_one)
123
+ mock.expects(:second).in_sequence(sequence_one)
124
+
125
+ mock.expects(:third).in_sequence(sequence_two)
126
+ mock.expects(:fourth).in_sequence(sequence_two)
127
+
128
+ mock.first
129
+ mock.third
130
+ mock.second
131
+ mock.fourth
132
+ end
133
+ assert_passed(test_result)
134
+ end
135
+
136
+ def test_should_include_sequence_in_failure_message
137
+ test_result = run_test do
138
+ mock = mock()
139
+ sequence = sequence('one')
140
+
141
+ mock.expects(:first).in_sequence(sequence)
142
+ mock.expects(:second).in_sequence(sequence)
143
+
144
+ mock.second
145
+ end
146
+ assert_failed(test_result)
147
+ assert_match Regexp.new("in sequence 'one'"), test_result.failures.first.message
148
+ end
149
+
150
+ def test_should_allow_expectations_to_be_in_more_than_one_sequence
151
+ test_result = run_test do
152
+ mock = mock()
153
+ sequence_one = sequence('one')
154
+ sequence_two = sequence('two')
155
+
156
+ mock.expects(:first).in_sequence(sequence_one)
157
+ mock.expects(:second).in_sequence(sequence_two)
158
+ mock.expects(:three).in_sequence(sequence_one).in_sequence(sequence_two)
159
+
160
+ mock.first
161
+ mock.three
162
+ end
163
+ assert_failed(test_result)
164
+ assert_match Regexp.new("in sequence 'one'"), test_result.failures.first.message
165
+ assert_match Regexp.new("in sequence 'two'"), test_result.failures.first.message
166
+ end
167
+
168
+ def test_should_have_shortcut_for_expectations_to_be_in_more_than_one_sequence
169
+ test_result = run_test do
170
+ mock = mock()
171
+ sequence_one = sequence('one')
172
+ sequence_two = sequence('two')
173
+
174
+ mock.expects(:first).in_sequence(sequence_one)
175
+ mock.expects(:second).in_sequence(sequence_two)
176
+ mock.expects(:three).in_sequence(sequence_one, sequence_two)
177
+
178
+ mock.first
179
+ mock.three
180
+ end
181
+ assert_failed(test_result)
182
+ assert_match Regexp.new("in sequence 'one'"), test_result.failures.first.message
183
+ assert_match Regexp.new("in sequence 'two'"), test_result.failures.first.message
184
+ end
185
+
186
+ end