mocha 0.9.8 → 0.9.9
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING.rdoc +3 -0
- data/{MIT-LICENSE → MIT-LICENSE.rdoc} +0 -0
- data/{README → README.rdoc} +4 -4
- data/{RELEASE → RELEASE.rdoc} +18 -0
- data/Rakefile +19 -17
- data/lib/mocha.rb +1 -0
- data/lib/mocha/expectation.rb +37 -34
- data/lib/mocha/integration/mini_test.rb +27 -2
- data/lib/mocha/integration/mini_test/exception_translation.rb +20 -0
- data/lib/mocha/integration/mini_test/version_13.rb +44 -0
- data/lib/mocha/integration/mini_test/{version_131_and_above.rb → version_140.rb} +7 -12
- data/lib/mocha/integration/mini_test/version_141.rb +56 -0
- data/lib/mocha/integration/mini_test/version_142_and_above.rb +56 -0
- data/lib/mocha/integration/test_unit.rb +23 -8
- data/lib/mocha/integration/test_unit/gem_version_200.rb +3 -0
- data/lib/mocha/integration/test_unit/{gem_version_201_and_above.rb → gem_version_201_to_202.rb} +4 -1
- data/lib/mocha/integration/test_unit/gem_version_203_to_209.rb +52 -0
- data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +3 -0
- data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +3 -0
- data/lib/mocha/mock.rb +0 -1
- data/lib/mocha/module_method.rb +1 -1
- data/lib/mocha/options.rb +1 -0
- data/lib/mocha/parameter_matchers/base.rb +50 -2
- data/test/acceptance/acceptance_test_helper.rb +1 -1
- data/test/acceptance/api_test.rb +1 -1
- data/test/acceptance/bug_18914_test.rb +1 -1
- data/test/acceptance/bug_21465_test.rb +1 -1
- data/test/acceptance/bug_21563_test.rb +1 -1
- data/test/acceptance/expected_invocation_count_test.rb +1 -1
- data/test/acceptance/failure_messages_test.rb +1 -1
- data/test/acceptance/minitest_test.rb +128 -124
- data/test/acceptance/mocha_example_test.rb +1 -1
- data/test/acceptance/mocha_test_result_test.rb +1 -1
- data/test/acceptance/mock_test.rb +1 -1
- data/test/acceptance/mock_with_initializer_block_test.rb +1 -1
- data/test/acceptance/mocked_methods_dispatch_test.rb +1 -1
- data/test/acceptance/optional_parameters_test.rb +1 -1
- data/test/acceptance/parameter_matcher_test.rb +38 -1
- data/test/acceptance/partial_mocks_test.rb +1 -1
- data/test/acceptance/return_value_test.rb +1 -1
- data/test/acceptance/sequence_test.rb +1 -1
- data/test/acceptance/states_test.rb +1 -1
- data/test/acceptance/stub_any_instance_method_test.rb +5 -2
- data/test/acceptance/stub_class_method_test.rb +5 -2
- data/test/acceptance/stub_everything_test.rb +1 -1
- data/test/acceptance/stub_instance_method_test.rb +5 -2
- data/test/acceptance/stub_module_method_test.rb +3 -3
- data/test/acceptance/stub_test.rb +1 -1
- data/test/acceptance/stubba_example_test.rb +1 -1
- data/test/acceptance/stubba_test.rb +1 -1
- data/test/acceptance/stubba_test_result_test.rb +1 -1
- data/test/acceptance/stubbing_error_backtrace_test.rb +1 -1
- data/test/acceptance/stubbing_method_unnecessarily_test.rb +1 -1
- data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +5 -5
- data/test/acceptance/stubbing_non_existent_class_method_test.rb +5 -5
- data/test/acceptance/stubbing_non_existent_instance_method_test.rb +5 -5
- data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +9 -9
- data/test/acceptance/stubbing_non_public_class_method_test.rb +9 -9
- data/test/acceptance/stubbing_non_public_instance_method_test.rb +9 -9
- data/test/acceptance/stubbing_on_non_mock_object_test.rb +5 -5
- data/test/mini_test_result.rb +74 -0
- data/test/test_helper.rb +3 -1
- data/test/test_runner.rb +25 -11
- data/test/unit/any_instance_method_test.rb +1 -1
- data/test/unit/array_inspect_test.rb +1 -1
- data/test/unit/backtrace_filter_test.rb +1 -1
- data/test/unit/cardinality_test.rb +1 -1
- data/test/unit/central_test.rb +1 -1
- data/test/unit/change_state_side_effect_test.rb +1 -1
- data/test/unit/class_method_test.rb +1 -1
- data/test/unit/configuration_test.rb +1 -1
- data/test/unit/date_time_inspect_test.rb +1 -1
- data/test/unit/exception_raiser_test.rb +1 -1
- data/test/unit/expectation_list_test.rb +1 -1
- data/test/unit/expectation_test.rb +1 -1
- data/test/unit/hash_inspect_test.rb +1 -1
- data/test/unit/in_state_ordering_constraint_test.rb +1 -1
- data/test/unit/metaclass_test.rb +1 -1
- data/test/unit/method_matcher_test.rb +1 -1
- data/test/unit/mock_test.rb +1 -1
- data/test/unit/mockery_test.rb +1 -1
- data/test/unit/multiple_yields_test.rb +1 -1
- data/test/unit/no_yields_test.rb +1 -1
- data/test/unit/object_inspect_test.rb +9 -8
- data/test/unit/object_test.rb +1 -1
- data/test/unit/parameter_matchers/all_of_test.rb +1 -1
- data/test/unit/parameter_matchers/any_of_test.rb +1 -1
- data/test/unit/parameter_matchers/anything_test.rb +1 -1
- data/test/unit/parameter_matchers/equals_test.rb +1 -1
- data/test/unit/parameter_matchers/has_entries_test.rb +1 -1
- data/test/unit/parameter_matchers/has_entry_test.rb +1 -1
- data/test/unit/parameter_matchers/has_key_test.rb +1 -1
- data/test/unit/parameter_matchers/has_value_test.rb +1 -1
- data/test/unit/parameter_matchers/includes_test.rb +1 -1
- data/test/unit/parameter_matchers/instance_of_test.rb +1 -1
- data/test/unit/parameter_matchers/is_a_test.rb +1 -1
- data/test/unit/parameter_matchers/kind_of_test.rb +1 -1
- data/test/unit/parameter_matchers/not_test.rb +1 -1
- data/test/unit/parameter_matchers/regexp_matches_test.rb +1 -1
- data/test/unit/parameter_matchers/responds_with_test.rb +1 -1
- data/test/unit/parameter_matchers/yaml_equivalent_test.rb +1 -1
- data/test/unit/parameters_matcher_test.rb +1 -1
- data/test/unit/return_values_test.rb +1 -1
- data/test/unit/sequence_test.rb +1 -1
- data/test/unit/single_return_value_test.rb +1 -1
- data/test/unit/single_yield_test.rb +1 -1
- data/test/unit/state_machine_test.rb +1 -1
- data/test/unit/string_inspect_test.rb +1 -1
- data/test/unit/yield_parameters_test.rb +1 -1
- metadata +41 -18
- data/COPYING +0 -3
data/COPYING.rdoc
ADDED
File without changes
|
data/{README → README.rdoc}
RENAMED
@@ -1,12 +1,12 @@
|
|
1
1
|
= Mocha
|
2
2
|
|
3
|
-
Mocha is a library for mocking and stubbing using a syntax like that of JMock[http://www.jmock.org].
|
3
|
+
Mocha is a library for mocking and stubbing using a syntax like that of {JMock}[http://www.jmock.org].
|
4
4
|
|
5
|
-
It can be used with many testing frameworks e.g. Test::Unit[http://www.ruby-doc.org/core/classes/Test/Unit.html], RSpec[http://rspec.info/], test/spec[http://chneukirchen.org/repos/testspec/README], expectations[http://expectations.rubyforge.org/], Dust[http://dust.rubyforge.org/], MiniTest[http://rubyforge.org/projects/bfts] and even JtestR[http://jtestr.codehaus.org/].
|
5
|
+
It can be used with many testing frameworks e.g. {Test::Unit}[http://www.ruby-doc.org/core/classes/Test/Unit.html], {RSpec}[http://rspec.info/], {test/spec}[http://chneukirchen.org/repos/testspec/README], {expectations}[http://expectations.rubyforge.org/], {Dust}[http://dust.rubyforge.org/], {MiniTest}[http://rubyforge.org/projects/bfts] and even {JtestR}[http://jtestr.codehaus.org/].
|
6
6
|
|
7
7
|
Mocha provides a unified, simple and readable syntax for both traditional mocking and partial mocking.
|
8
8
|
|
9
|
-
Mocha was harvested from projects at Reevoo[http://www.reevoo.com] by me (James[http://blog.floehopper.org]) and my (then) colleagues Ben[http://www.techbelly.com/], Chris[http://chrisroos.co.uk] and Paul[http://po-ru.com].
|
9
|
+
Mocha was harvested from projects at {Reevoo}[http://www.reevoo.com] by me ({James}[http://blog.floehopper.org]) and my (then) colleagues {Ben}[http://www.techbelly.com/], {Chris}[http://chrisroos.co.uk] and {Paul}[http://po-ru.com].
|
10
10
|
|
11
11
|
== Download and Installation
|
12
12
|
|
@@ -14,7 +14,7 @@ Install the gem with the following command...
|
|
14
14
|
|
15
15
|
$ gem install mocha
|
16
16
|
|
17
|
-
Or install the Rails[http://www.rubyonrails.org] plugin...
|
17
|
+
Or install the {Rails}[http://www.rubyonrails.org] plugin...
|
18
18
|
|
19
19
|
$ script/plugin install git://github.com/floehopper/mocha.git
|
20
20
|
|
data/{RELEASE → RELEASE.rdoc}
RENAMED
@@ -1,3 +1,21 @@
|
|
1
|
+
= 0.9.9 (ee3a79db4d52c3339e8acf07505e01236a2b4810)
|
2
|
+
* Avoid loading bits of the test-unit gem by accident. This is an attempt at a fix for the problem that James Adam reported [1]. By using 'load' instead of 'require' to detect the version of Test::Unit, we can avoid rubygems trying to load bits of the test-unit gem when it's not wanted. [1] http://floehopper.lighthouseapp.com/projects/22289-mocha/tickets/50#ticket-50-13
|
3
|
+
* Fix exception when running rake without test-unit gem. When test-unit gem >=v2.0.0 was installed but the "use_test_unit_gem" MOCHA_OPTIONS was not specified, a "comparison of Fixnum with Hash failed" exception was being raised when running the performance tests. This was because bits of the test-unit gem were being loaded accidentally and a Hash was being incorrectly supplied to the TestRunner.run method.
|
4
|
+
* Explicitly require rubygems for running tests via rake using test-unit gem.
|
5
|
+
* Handle newer versions of test-unit gem (v2.0.2 to v2.0.9)
|
6
|
+
* Handle newer versions of minitest gem (v1.4.0 to v1.6.0)
|
7
|
+
* Added warnings about monkey-patching test-unit and minitest to aid debugging. These are enabled by including "debug" in the MOCHA_OPTIONS environment variable. This is now a comma-separated list, so that we can specify multiple options e.g. MOCHA_OPTIONS=debug,use_test_unit_gem
|
8
|
+
* Eloy Duran (alloy) made the unit tests run on 1.9.2dev r25249.
|
9
|
+
* Eloy Duran (alloy) also improved some MiniTest TestResult code I'd written and got the acceptance tests running on Ruby 1.9 HEAD. There are still 4 failures because for some reason the backtrace line numbers are off by one. And the minitest_test test case does not run when the whole suite is run with MiniTest. These issues still need investigation.
|
10
|
+
* Fixed some acceptance tests to run in Ruby 1.9.2 - it's no longer possible to subvert the protection of a method by calling it via Object#send.
|
11
|
+
* Fixed "test:performance" rake task so it runs in Ruby 1.9.2.
|
12
|
+
* Fix test incorrectly failing under Rubinius 1.0. This test imposed too many constraints. It appears that Object#inspect legitimately calls Object#object_id in Rubinius. But we're only interested in what 'id' methods Mocha::ObjectMethods#mocha_inspect calls. By stubbing Object#inspect we can relax the constraints imposed by the test.
|
13
|
+
* Luke Redpath (lukeredpath) added new shorthand "any" and "all" composite parameter matchers using "&" and "|". This provides an alternative syntax for expecting any or all matchers to pass, e.g. foo.expects(:bar).with(equals(1) | equals(2)).
|
14
|
+
* Improved documentation for Expectation#raises. A number of people have suggested an extension to the API to cope with custom exceptions that have extra constructor parameters. However, since the arguments supplied to Expectation#raises are just passed on to Kernel#raise, it's possible to pass in an instance of an exception. Thus no change to the API is required, but it does seem worthwhile pointing this out in the docs.
|
15
|
+
* Corrected RDoc example for Expectation#never thanks to Red David (reddavis).
|
16
|
+
* Improved RDoc including a change suggested by Rohit Arondekar (rohit).
|
17
|
+
* Updated gemspec as requested by Sam Woodard (shwoodard).
|
18
|
+
|
1
19
|
= 0.9.8 (645024765b2d92018efc511652e1174163844e39)
|
2
20
|
* Fixed bug "NameError raised when using Mocha as a Rails plug-in" - http://floehopper.lighthouseapp.com/projects/22289/tickets/53. Since 0.9.6 the Rails plugin has been broken. See bug report for details. You will need to explicitly load Mocha *after* the test framework has been loaded, e.g. by adding "require 'mocha'" at the bottom of test/test_helper.rb.
|
3
21
|
* Make Mocha::ParameterMatchers#regexp_matches, #includes, #has_value, #has_key more robust. Thanks to Sander Hartlage.
|
data/Rakefile
CHANGED
@@ -3,7 +3,7 @@ require 'rake/gempackagetask'
|
|
3
3
|
require 'rake/testtask'
|
4
4
|
|
5
5
|
module Mocha
|
6
|
-
VERSION = "0.9.
|
6
|
+
VERSION = "0.9.9"
|
7
7
|
end
|
8
8
|
|
9
9
|
desc "Run all tests"
|
@@ -42,8 +42,8 @@ namespace 'test' do
|
|
42
42
|
|
43
43
|
desc "Run performance tests"
|
44
44
|
task 'performance' do
|
45
|
-
require 'test
|
46
|
-
require 'test
|
45
|
+
require File.join(File.dirname(__FILE__), 'test', 'acceptance', 'stubba_example_test')
|
46
|
+
require File.join(File.dirname(__FILE__), 'test', 'acceptance', 'mocha_example_test')
|
47
47
|
iterations = 1000
|
48
48
|
puts "\nBenchmarking with #{iterations} iterations..."
|
49
49
|
[MochaExampleTest, StubbaExampleTest].each do |test_case|
|
@@ -55,19 +55,21 @@ end
|
|
55
55
|
|
56
56
|
def benchmark_test_case(klass, iterations)
|
57
57
|
require 'benchmark'
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
58
|
+
load 'test/unit/ui/console/testrunner.rb' unless defined?(Test::Unit::UI::Console::TestRunner)
|
59
|
+
unless $silent_option
|
60
|
+
begin
|
61
|
+
load 'test/unit/ui/console/outputlevel.rb' unless defined?(Test::Unit::UI::Console::OutputLevel::SILENT)
|
62
|
+
$silent_option = { :output_level => Test::Unit::UI::Console::OutputLevel::SILENT }
|
63
|
+
rescue LoadError
|
64
|
+
$silent_option = Test::Unit::UI::SILENT
|
65
|
+
end
|
64
66
|
end
|
65
|
-
time = Benchmark.realtime { iterations.times { Test::Unit::UI::Console::TestRunner.run(klass, silent_option) } }
|
67
|
+
time = Benchmark.realtime { iterations.times { Test::Unit::UI::Console::TestRunner.run(klass, $silent_option) } }
|
66
68
|
end
|
67
69
|
|
68
70
|
desc 'Generate RDoc'
|
69
71
|
Rake::RDocTask.new('rdoc') do |task|
|
70
|
-
task.main = 'README'
|
72
|
+
task.main = 'README.rdoc'
|
71
73
|
task.title = "Mocha #{Mocha::VERSION}"
|
72
74
|
task.rdoc_dir = 'doc'
|
73
75
|
template = File.expand_path(File.join(File.dirname(__FILE__), "templates", "html_with_google_analytics.rb"))
|
@@ -76,10 +78,10 @@ Rake::RDocTask.new('rdoc') do |task|
|
|
76
78
|
task.template = template
|
77
79
|
end
|
78
80
|
task.rdoc_files.include(
|
79
|
-
'README',
|
80
|
-
'RELEASE',
|
81
|
-
'COPYING',
|
82
|
-
'MIT-LICENSE',
|
81
|
+
'README.rdoc',
|
82
|
+
'RELEASE.rdoc',
|
83
|
+
'COPYING.rdoc',
|
84
|
+
'MIT-LICENSE.rdoc',
|
83
85
|
'agiledox.txt',
|
84
86
|
'lib/mocha/api.rb',
|
85
87
|
'lib/mocha/mock.rb',
|
@@ -156,8 +158,8 @@ def build_specification(version = Mocha::VERSION)
|
|
156
158
|
s.rubyforge_project = 'mocha'
|
157
159
|
|
158
160
|
s.has_rdoc = true
|
159
|
-
s.extra_rdoc_files = ['README', 'COPYING']
|
160
|
-
s.rdoc_options << '--title' << 'Mocha' << '--main' << 'README' << '--line-numbers'
|
161
|
+
s.extra_rdoc_files = ['README.rdoc', 'COPYING.rdoc']
|
162
|
+
s.rdoc_options << '--title' << 'Mocha' << '--main' << 'README.rdoc' << '--line-numbers'
|
161
163
|
|
162
164
|
s.add_dependency('rake')
|
163
165
|
s.files = FileList['{lib,test,examples}/**/*.rb', '[A-Z]*'].exclude('TODO').to_a
|
data/lib/mocha.rb
CHANGED
data/lib/mocha/expectation.rb
CHANGED
@@ -10,10 +10,10 @@ require 'mocha/change_state_side_effect'
|
|
10
10
|
require 'mocha/cardinality'
|
11
11
|
|
12
12
|
module Mocha # :nodoc:
|
13
|
-
|
13
|
+
|
14
14
|
# Methods on expectations returned from Mock#expects, Mock#stubs, Object#expects and Object#stubs.
|
15
15
|
class Expectation
|
16
|
-
|
16
|
+
|
17
17
|
# :call-seq: times(range) -> expectation
|
18
18
|
#
|
19
19
|
# Modifies expectation so that the number of calls to the expected method must be within a specific +range+.
|
@@ -42,7 +42,7 @@ module Mocha # :nodoc:
|
|
42
42
|
@cardinality = Cardinality.times(range)
|
43
43
|
self
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
# :call-seq: twice() -> expectation
|
47
47
|
#
|
48
48
|
# Modifies expectation so that the expected method must be called exactly twice.
|
@@ -67,7 +67,7 @@ module Mocha # :nodoc:
|
|
67
67
|
@cardinality = Cardinality.exactly(2)
|
68
68
|
self
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
# :call-seq: once() -> expectation
|
72
72
|
#
|
73
73
|
# Modifies expectation so that the expected method must be called exactly once.
|
@@ -90,7 +90,7 @@ module Mocha # :nodoc:
|
|
90
90
|
@cardinality = Cardinality.exactly(1)
|
91
91
|
self
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
94
|
# :call-seq: never() -> expectation
|
95
95
|
#
|
96
96
|
# Modifies expectation so that the expected method must never be called.
|
@@ -101,13 +101,12 @@ module Mocha # :nodoc:
|
|
101
101
|
#
|
102
102
|
# object = mock()
|
103
103
|
# object.expects(:expected_method).never
|
104
|
-
# object.expected_method
|
105
104
|
# # => verify succeeds
|
106
105
|
def never
|
107
106
|
@cardinality = Cardinality.exactly(0)
|
108
107
|
self
|
109
108
|
end
|
110
|
-
|
109
|
+
|
111
110
|
# :call-seq: at_least(minimum_number_of_times) -> expectation
|
112
111
|
#
|
113
112
|
# Modifies expectation so that the expected method must be called at least a +minimum_number_of_times+.
|
@@ -124,7 +123,7 @@ module Mocha # :nodoc:
|
|
124
123
|
@cardinality = Cardinality.at_least(minimum_number_of_times)
|
125
124
|
self
|
126
125
|
end
|
127
|
-
|
126
|
+
|
128
127
|
# :call-seq: at_least_once() -> expectation
|
129
128
|
#
|
130
129
|
# Modifies expectation so that the expected method must be called at least once.
|
@@ -140,7 +139,7 @@ module Mocha # :nodoc:
|
|
140
139
|
at_least(1)
|
141
140
|
self
|
142
141
|
end
|
143
|
-
|
142
|
+
|
144
143
|
# :call-seq: at_most(maximum_number_of_times) -> expectation
|
145
144
|
#
|
146
145
|
# Modifies expectation so that the expected method must be called at most a +maximum_number_of_times+.
|
@@ -157,7 +156,7 @@ module Mocha # :nodoc:
|
|
157
156
|
@cardinality = Cardinality.at_most(maximum_number_of_times)
|
158
157
|
self
|
159
158
|
end
|
160
|
-
|
159
|
+
|
161
160
|
# :call-seq: at_most_once() -> expectation
|
162
161
|
#
|
163
162
|
# Modifies expectation so that the expected method must be called at most once.
|
@@ -174,7 +173,7 @@ module Mocha # :nodoc:
|
|
174
173
|
at_most(1)
|
175
174
|
self
|
176
175
|
end
|
177
|
-
|
176
|
+
|
178
177
|
# :call-seq: with(*expected_parameters, &matching_block) -> expectation
|
179
178
|
#
|
180
179
|
# Modifies expectation so that the expected method must be called with +expected_parameters+.
|
@@ -204,7 +203,7 @@ module Mocha # :nodoc:
|
|
204
203
|
@parameters_matcher = ParametersMatcher.new(expected_parameters, &matching_block)
|
205
204
|
self
|
206
205
|
end
|
207
|
-
|
206
|
+
|
208
207
|
# :call-seq: yields(*parameters) -> expectation
|
209
208
|
#
|
210
209
|
# Modifies expectation so that when the expected method is called, it yields with the specified +parameters+.
|
@@ -226,7 +225,7 @@ module Mocha # :nodoc:
|
|
226
225
|
@yield_parameters.add(*parameters)
|
227
226
|
self
|
228
227
|
end
|
229
|
-
|
228
|
+
|
230
229
|
# :call-seq: multiple_yields(*parameter_groups) -> expectation
|
231
230
|
#
|
232
231
|
# Modifies expectation so that when the expected method is called, it yields multiple times per invocation with the specified +parameter_groups+.
|
@@ -248,7 +247,7 @@ module Mocha # :nodoc:
|
|
248
247
|
@yield_parameters.multiple_add(*parameter_groups)
|
249
248
|
self
|
250
249
|
end
|
251
|
-
|
250
|
+
|
252
251
|
# :call-seq: returns(value) -> expectation
|
253
252
|
# returns(*values) -> expectation
|
254
253
|
#
|
@@ -284,13 +283,17 @@ module Mocha # :nodoc:
|
|
284
283
|
@return_values += ReturnValues.build(*values)
|
285
284
|
self
|
286
285
|
end
|
287
|
-
|
286
|
+
|
288
287
|
# :call-seq: raises(exception = RuntimeError, message = nil) -> expectation
|
289
288
|
#
|
290
|
-
# Modifies expectation so that when the expected method is called, it raises the specified +exception+ with the specified +message
|
289
|
+
# Modifies expectation so that when the expected method is called, it raises the specified +exception+ with the specified +message+ i.e. calls Kernel#raise(exception, message).
|
291
290
|
# object = mock()
|
292
291
|
# object.expects(:expected_method).raises(Exception, 'message')
|
293
292
|
# object.expected_method # => raises exception of class Exception and with message 'message'
|
293
|
+
# Note that if you have a custom exception class with extra constructor parameters, you can pass in an instance of the exception (just as you can for Kernel#raise).
|
294
|
+
# object = mock()
|
295
|
+
# object.expects(:expected_method).raises(MyException.new('message', 1, 2, 3))
|
296
|
+
# object.expected_method # => raises the specified instance of MyException
|
294
297
|
# May be called multiple times on the same expectation. Also see Expectation#then.
|
295
298
|
# object = mock()
|
296
299
|
# object.stubs(:expected_method).raises(Exception1).then.raises(Exception2)
|
@@ -337,7 +340,7 @@ module Mocha # :nodoc:
|
|
337
340
|
end
|
338
341
|
self
|
339
342
|
end
|
340
|
-
|
343
|
+
|
341
344
|
# :call-seq: when(state_machine.is(state)) -> exception
|
342
345
|
#
|
343
346
|
# Constrains the expectation to occur only when the +state_machine+ is in the named +state+.
|
@@ -356,7 +359,7 @@ module Mocha # :nodoc:
|
|
356
359
|
add_ordering_constraint(InStateOrderingConstraint.new(state_predicate))
|
357
360
|
self
|
358
361
|
end
|
359
|
-
|
362
|
+
|
360
363
|
# :call-seq: in_sequence(*sequences) -> expectation
|
361
364
|
#
|
362
365
|
# Constrains this expectation so that it must be invoked at the current point in the sequence.
|
@@ -378,9 +381,9 @@ module Mocha # :nodoc:
|
|
378
381
|
sequences.each { |sequence| add_in_sequence_ordering_constraint(sequence) }
|
379
382
|
self
|
380
383
|
end
|
381
|
-
|
384
|
+
|
382
385
|
# :stopdoc:
|
383
|
-
|
386
|
+
|
384
387
|
attr_reader :backtrace
|
385
388
|
|
386
389
|
def initialize(mock, expected_method_name, backtrace = nil)
|
@@ -394,35 +397,35 @@ module Mocha # :nodoc:
|
|
394
397
|
@yield_parameters = YieldParameters.new
|
395
398
|
@backtrace = backtrace || caller
|
396
399
|
end
|
397
|
-
|
400
|
+
|
398
401
|
def add_ordering_constraint(ordering_constraint)
|
399
402
|
@ordering_constraints << ordering_constraint
|
400
403
|
end
|
401
|
-
|
404
|
+
|
402
405
|
def add_in_sequence_ordering_constraint(sequence)
|
403
406
|
sequence.constrain_as_next_in_sequence(self)
|
404
407
|
end
|
405
|
-
|
408
|
+
|
406
409
|
def add_side_effect(side_effect)
|
407
410
|
@side_effects << side_effect
|
408
411
|
end
|
409
|
-
|
412
|
+
|
410
413
|
def perform_side_effects
|
411
414
|
@side_effects.each { |side_effect| side_effect.perform }
|
412
415
|
end
|
413
|
-
|
416
|
+
|
414
417
|
def in_correct_order?
|
415
418
|
@ordering_constraints.all? { |ordering_constraint| ordering_constraint.allows_invocation_now? }
|
416
419
|
end
|
417
|
-
|
420
|
+
|
418
421
|
def matches_method?(method_name)
|
419
422
|
@method_matcher.match?(method_name)
|
420
423
|
end
|
421
|
-
|
424
|
+
|
422
425
|
def match?(actual_method_name, *actual_parameters)
|
423
426
|
@method_matcher.match?(actual_method_name) && @parameters_matcher.match?(actual_parameters) && in_correct_order?
|
424
427
|
end
|
425
|
-
|
428
|
+
|
426
429
|
def invocations_allowed?
|
427
430
|
@cardinality.invocations_allowed?(@invocation_count)
|
428
431
|
end
|
@@ -430,7 +433,7 @@ module Mocha # :nodoc:
|
|
430
433
|
def satisfied?
|
431
434
|
@cardinality.satisfied?(@invocation_count)
|
432
435
|
end
|
433
|
-
|
436
|
+
|
434
437
|
def invoke
|
435
438
|
@invocation_count += 1
|
436
439
|
perform_side_effects()
|
@@ -446,11 +449,11 @@ module Mocha # :nodoc:
|
|
446
449
|
assertion_counter.increment if assertion_counter && @cardinality.needs_verifying?
|
447
450
|
@cardinality.verified?(@invocation_count)
|
448
451
|
end
|
449
|
-
|
452
|
+
|
450
453
|
def used?
|
451
454
|
@cardinality.used?(@invocation_count)
|
452
455
|
end
|
453
|
-
|
456
|
+
|
454
457
|
def mocha_inspect
|
455
458
|
message = "#{@cardinality.mocha_inspect}, "
|
456
459
|
message << case @invocation_count
|
@@ -464,13 +467,13 @@ module Mocha # :nodoc:
|
|
464
467
|
message << "; #{@ordering_constraints.map { |oc| oc.mocha_inspect }.join("; ")}" unless @ordering_constraints.empty?
|
465
468
|
message
|
466
469
|
end
|
467
|
-
|
470
|
+
|
468
471
|
def method_signature
|
469
472
|
"#{@mock.mocha_inspect}.#{@method_matcher.mocha_inspect}#{@parameters_matcher.mocha_inspect}"
|
470
473
|
end
|
471
|
-
|
474
|
+
|
472
475
|
# :startdoc:
|
473
|
-
|
476
|
+
|
474
477
|
end
|
475
478
|
|
476
479
|
end
|
@@ -2,7 +2,11 @@ require 'mocha/api'
|
|
2
2
|
|
3
3
|
if !MiniTest::Unit::TestCase.ancestors.include?(Mocha::API)
|
4
4
|
|
5
|
-
require 'mocha/integration/mini_test/
|
5
|
+
require 'mocha/integration/mini_test/exception_translation'
|
6
|
+
require 'mocha/integration/mini_test/version_13'
|
7
|
+
require 'mocha/integration/mini_test/version_140'
|
8
|
+
require 'mocha/integration/mini_test/version_141'
|
9
|
+
require 'mocha/integration/mini_test/version_142_and_above'
|
6
10
|
|
7
11
|
module MiniTest
|
8
12
|
class Unit
|
@@ -13,7 +17,28 @@ if !MiniTest::Unit::TestCase.ancestors.include?(Mocha::API)
|
|
13
17
|
alias_method :run_before_mocha, :run
|
14
18
|
remove_method :run
|
15
19
|
|
16
|
-
|
20
|
+
mini_test_version = begin
|
21
|
+
MiniTest::Unit::VERSION
|
22
|
+
rescue LoadError
|
23
|
+
'unknown'
|
24
|
+
end
|
25
|
+
|
26
|
+
$stderr.puts "Detected MiniTest version: #{mini_test_version}" if $options['debug']
|
27
|
+
|
28
|
+
if (mini_test_version >= '1.3.0') && (mini_test_version <= '1.3.1')
|
29
|
+
include Mocha::Integration::MiniTest::Version13
|
30
|
+
elsif (mini_test_version == '1.4.0')
|
31
|
+
include Mocha::Integration::MiniTest::Version140
|
32
|
+
elsif (mini_test_version == '1.4.1')
|
33
|
+
include Mocha::Integration::MiniTest::Version141
|
34
|
+
elsif (mini_test_version >= '1.4.2') && (mini_test_version <= '1.6.0')
|
35
|
+
include Mocha::Integration::MiniTest::Version142AndAbove
|
36
|
+
elsif (mini_test_version > '1.6.0')
|
37
|
+
$stderr.puts "*** MiniTest integration has not been verified but patching anyway ***" if $options['debug']
|
38
|
+
include Mocha::Integration::MiniTest::Version142AndAbove
|
39
|
+
else
|
40
|
+
$stderr.puts "*** No Mocha integration for MiniTest version ***" if $options['debug']
|
41
|
+
end
|
17
42
|
|
18
43
|
end
|
19
44
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'mocha/expectation_error'
|
2
|
+
|
3
|
+
module Mocha
|
4
|
+
|
5
|
+
module Integration
|
6
|
+
|
7
|
+
module MiniTest
|
8
|
+
|
9
|
+
def self.translate(exception)
|
10
|
+
return exception unless exception.kind_of?(::Mocha::ExpectationError)
|
11
|
+
translated_exception = ::MiniTest::Assertion.new(exception.message)
|
12
|
+
translated_exception.set_backtrace(exception.backtrace)
|
13
|
+
translated_exception
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'mocha/integration/mini_test/assertion_counter'
|
2
|
+
|
3
|
+
module Mocha
|
4
|
+
|
5
|
+
module Integration
|
6
|
+
|
7
|
+
module MiniTest
|
8
|
+
|
9
|
+
module Version13
|
10
|
+
def self.included(mod)
|
11
|
+
$stderr.puts "Monkey patching MiniTest v1.3" if $options['debug']
|
12
|
+
end
|
13
|
+
def run runner
|
14
|
+
assertion_counter = AssertionCounter.new(self)
|
15
|
+
result = '.'
|
16
|
+
begin
|
17
|
+
begin
|
18
|
+
@passed = nil
|
19
|
+
self.setup
|
20
|
+
self.__send__ self.name
|
21
|
+
mocha_verify(assertion_counter)
|
22
|
+
@passed = true
|
23
|
+
rescue Exception => e
|
24
|
+
@passed = false
|
25
|
+
result = runner.puke(self.class, self.name, Mocha::Integration::MiniTest.translate(e))
|
26
|
+
ensure
|
27
|
+
begin
|
28
|
+
self.teardown
|
29
|
+
rescue Exception => e
|
30
|
+
result = runner.puke(self.class, self.name, Mocha::Integration::MiniTest.translate(e))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
ensure
|
34
|
+
mocha_teardown
|
35
|
+
end
|
36
|
+
result
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|