mocha-macruby 0.9.8.20100129120100 → 0.9.9.20101102121900
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.
- data/COPYING.rdoc +3 -0
- data/{MIT-LICENSE → MIT-LICENSE.rdoc} +0 -0
- data/{README → README.rdoc} +7 -7
- data/{RELEASE → RELEASE.rdoc} +18 -0
- data/Rakefile +44 -28
- data/lib/mocha.rb +1 -0
- data/lib/mocha/class_method.rb +1 -3
- data/lib/mocha/expectation.rb +37 -34
- data/lib/mocha/integration/mini_test.rb +32 -4
- data/lib/mocha/integration/mini_test/exception_translation.rb +20 -0
- data/lib/mocha/integration/mini_test/{version_131_and_above.rb → version_13.rb} +7 -13
- data/lib/mocha/integration/mini_test/version_140.rb +52 -0
- data/lib/mocha/integration/mini_test/version_141.rb +56 -0
- data/lib/mocha/integration/mini_test/version_142_and_above.rb +47 -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 +33 -18
- data/lib/mocha/module_method.rb +1 -1
- data/lib/mocha/object.rb +144 -160
- 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 +2 -2
- 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 +16 -14
- 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 +10 -9
- data/test/unit/object_test.rb +11 -10
- 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 +5 -5
- data/test/unit/parameter_matchers/instance_of_test.rb +2 -2
- 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 +43 -19
- 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
|
|
@@ -26,9 +26,9 @@ Or download Mocha...
|
|
26
26
|
|
27
27
|
== Examples
|
28
28
|
|
29
|
-
* Quick Start - {Usage Examples}[
|
30
|
-
* Traditional mocking - {Star Trek Example}[
|
31
|
-
* Setting expectations on real classes - {Order Example}[
|
29
|
+
* Quick Start - {Usage Examples}[http://mocha.rubyforge.org/examples/misc.html]
|
30
|
+
* Traditional mocking - {Star Trek Example}[http://mocha.rubyforge.org/examples/mocha.html]
|
31
|
+
* Setting expectations on real classes - {Order Example}[http://mocha.rubyforge.org/examples/stubba.html]
|
32
32
|
* More examples on {Floehopper's Blog}[http://blog.floehopper.org]
|
33
33
|
* {Mailing List Archives}[http://groups.google.com/group/mocha-developer]
|
34
34
|
|
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,31 +3,45 @@ 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"
|
10
|
-
task 'default' =>
|
10
|
+
task 'default' => 'test'
|
11
|
+
|
12
|
+
desc "Run all tests"
|
13
|
+
task 'test' => ['test:units', 'test:acceptance', 'test:performance']
|
11
14
|
|
12
15
|
namespace 'test' do
|
13
16
|
|
14
17
|
unit_tests = FileList['test/unit/**/*_test.rb']
|
15
18
|
acceptance_tests = FileList['test/acceptance/*_test.rb']
|
16
19
|
|
20
|
+
# This is just a quick workaround a problem with the testtask in MacRuby
|
21
|
+
def macruby_run_tests(tests)
|
22
|
+
sh "macruby -I test -r #{tests.join(" -r ")} -e ''"
|
23
|
+
end
|
24
|
+
|
17
25
|
desc "Run unit tests"
|
18
|
-
Rake::TestTask.new('units') do |t|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
26
|
+
# Rake::TestTask.new('units') do |t|
|
27
|
+
# t.libs << 'test'
|
28
|
+
# t.test_files = unit_tests
|
29
|
+
# t.verbose = true
|
30
|
+
# t.warning = true
|
31
|
+
# end
|
32
|
+
task :units do
|
33
|
+
macruby_run_tests unit_tests
|
23
34
|
end
|
24
35
|
|
25
36
|
desc "Run acceptance tests"
|
26
|
-
Rake::TestTask.new('acceptance') do |t|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
37
|
+
# Rake::TestTask.new('acceptance') do |t|
|
38
|
+
# t.libs << 'test'
|
39
|
+
# t.test_files = acceptance_tests
|
40
|
+
# t.verbose = true
|
41
|
+
# t.warning = true
|
42
|
+
# end
|
43
|
+
task :acceptance do
|
44
|
+
macruby_run_tests acceptance_tests
|
31
45
|
end
|
32
46
|
|
33
47
|
# require 'rcov/rcovtask'
|
@@ -42,8 +56,8 @@ namespace 'test' do
|
|
42
56
|
|
43
57
|
desc "Run performance tests"
|
44
58
|
task 'performance' do
|
45
|
-
require 'test
|
46
|
-
require 'test
|
59
|
+
require File.join(File.dirname(__FILE__), 'test', 'acceptance', 'stubba_example_test')
|
60
|
+
require File.join(File.dirname(__FILE__), 'test', 'acceptance', 'mocha_example_test')
|
47
61
|
iterations = 1000
|
48
62
|
puts "\nBenchmarking with #{iterations} iterations..."
|
49
63
|
[MochaExampleTest, StubbaExampleTest].each do |test_case|
|
@@ -55,19 +69,21 @@ end
|
|
55
69
|
|
56
70
|
def benchmark_test_case(klass, iterations)
|
57
71
|
require 'benchmark'
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
72
|
+
load 'test/unit/ui/console/testrunner.rb' unless defined?(Test::Unit::UI::Console::TestRunner)
|
73
|
+
unless $silent_option
|
74
|
+
begin
|
75
|
+
load 'test/unit/ui/console/outputlevel.rb' unless defined?(Test::Unit::UI::Console::OutputLevel::SILENT)
|
76
|
+
$silent_option = { :output_level => Test::Unit::UI::Console::OutputLevel::SILENT }
|
77
|
+
rescue LoadError
|
78
|
+
$silent_option = Test::Unit::UI::SILENT
|
79
|
+
end
|
64
80
|
end
|
65
|
-
time = Benchmark.realtime { iterations.times { Test::Unit::UI::Console::TestRunner.run(klass, silent_option) } }
|
81
|
+
time = Benchmark.realtime { iterations.times { Test::Unit::UI::Console::TestRunner.run(klass, $silent_option) } }
|
66
82
|
end
|
67
83
|
|
68
84
|
desc 'Generate RDoc'
|
69
85
|
Rake::RDocTask.new('rdoc') do |task|
|
70
|
-
task.main = 'README'
|
86
|
+
task.main = 'README.rdoc'
|
71
87
|
task.title = "Mocha #{Mocha::VERSION}"
|
72
88
|
task.rdoc_dir = 'doc'
|
73
89
|
template = File.expand_path(File.join(File.dirname(__FILE__), "templates", "html_with_google_analytics.rb"))
|
@@ -76,10 +92,10 @@ Rake::RDocTask.new('rdoc') do |task|
|
|
76
92
|
task.template = template
|
77
93
|
end
|
78
94
|
task.rdoc_files.include(
|
79
|
-
'README',
|
80
|
-
'RELEASE',
|
81
|
-
'COPYING',
|
82
|
-
'MIT-LICENSE',
|
95
|
+
'README.rdoc',
|
96
|
+
'RELEASE.rdoc',
|
97
|
+
'COPYING.rdoc',
|
98
|
+
'MIT-LICENSE.rdoc',
|
83
99
|
'agiledox.txt',
|
84
100
|
'lib/mocha/api.rb',
|
85
101
|
'lib/mocha/mock.rb',
|
@@ -156,8 +172,8 @@ def build_specification(version = Mocha::VERSION)
|
|
156
172
|
s.rubyforge_project = 'mocha'
|
157
173
|
|
158
174
|
s.has_rdoc = true
|
159
|
-
s.extra_rdoc_files = ['README', 'COPYING']
|
160
|
-
s.rdoc_options << '--title' << 'Mocha' << '--main' << 'README' << '--line-numbers'
|
175
|
+
s.extra_rdoc_files = ['README.rdoc', 'COPYING.rdoc']
|
176
|
+
s.rdoc_options << '--title' << 'Mocha' << '--main' << 'README.rdoc' << '--line-numbers'
|
161
177
|
|
162
178
|
s.add_dependency('rake')
|
163
179
|
s.files = FileList['{lib,test,examples}/**/*.rb', '[A-Z]*'].exclude('TODO').to_a
|
data/lib/mocha.rb
CHANGED
data/lib/mocha/class_method.rb
CHANGED
@@ -86,9 +86,7 @@ module Mocha
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def method_exists?(method)
|
89
|
-
|
90
|
-
metaclass = stubbee.__metaclass__
|
91
|
-
metaclass.public_method_defined?(symbol) || metaclass.protected_method_defined?(symbol) || metaclass.private_method_defined?(symbol)
|
89
|
+
stubbee.respond_to?(method, true)
|
92
90
|
end
|
93
91
|
|
94
92
|
def macruby_method?
|
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
|