mocha 1.11.2 → 1.12.0
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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +1 -1
- data/README.md +28 -30
- data/RELEASE.md +25 -0
- data/Rakefile +6 -1
- data/lib/mocha/cardinality.rb +30 -27
- data/lib/mocha/expectation.rb +24 -24
- data/lib/mocha/mock.rb +1 -1
- data/lib/mocha/mockery.rb +9 -22
- data/lib/mocha/state_machine.rb +30 -38
- data/lib/mocha/version.rb +1 -1
- data/mocha.gemspec +3 -1
- metadata +5 -192
- data/docs/CNAME +0 -1
- data/docs/Mocha.html +0 -254
- data/docs/Mocha/API.html +0 -1285
- data/docs/Mocha/ClassMethods.html +0 -264
- data/docs/Mocha/Configuration.html +0 -1525
- data/docs/Mocha/Expectation.html +0 -2862
- data/docs/Mocha/ExpectationError.html +0 -152
- data/docs/Mocha/ExpectationErrorFactory.html +0 -260
- data/docs/Mocha/Hooks.html +0 -370
- data/docs/Mocha/Integration.html +0 -125
- data/docs/Mocha/Integration/MiniTest.html +0 -123
- data/docs/Mocha/Integration/MiniTest/Adapter.html +0 -164
- data/docs/Mocha/Integration/TestUnit.html +0 -123
- data/docs/Mocha/Integration/TestUnit/Adapter.html +0 -164
- data/docs/Mocha/Mock.html +0 -1210
- data/docs/Mocha/ObjectMethods.html +0 -765
- data/docs/Mocha/ParameterMatchers.html +0 -2949
- data/docs/Mocha/ParameterMatchers/AllOf.html +0 -153
- data/docs/Mocha/ParameterMatchers/AnyOf.html +0 -153
- data/docs/Mocha/ParameterMatchers/AnyParameters.html +0 -153
- data/docs/Mocha/ParameterMatchers/Anything.html +0 -153
- data/docs/Mocha/ParameterMatchers/Base.html +0 -441
- data/docs/Mocha/ParameterMatchers/Equals.html +0 -153
- data/docs/Mocha/ParameterMatchers/EquivalentUri.html +0 -153
- data/docs/Mocha/ParameterMatchers/HasEntries.html +0 -153
- data/docs/Mocha/ParameterMatchers/HasEntry.html +0 -153
- data/docs/Mocha/ParameterMatchers/HasKey.html +0 -153
- data/docs/Mocha/ParameterMatchers/HasValue.html +0 -153
- data/docs/Mocha/ParameterMatchers/Includes.html +0 -153
- data/docs/Mocha/ParameterMatchers/InstanceOf.html +0 -153
- data/docs/Mocha/ParameterMatchers/IsA.html +0 -153
- data/docs/Mocha/ParameterMatchers/KindOf.html +0 -153
- data/docs/Mocha/ParameterMatchers/Not.html +0 -153
- data/docs/Mocha/ParameterMatchers/Optionally.html +0 -153
- data/docs/Mocha/ParameterMatchers/RegexpMatches.html +0 -153
- data/docs/Mocha/ParameterMatchers/RespondsWith.html +0 -153
- data/docs/Mocha/ParameterMatchers/YamlEquivalent.html +0 -153
- data/docs/Mocha/Sequence.html +0 -149
- data/docs/Mocha/StateMachine.html +0 -527
- data/docs/Mocha/StateMachine/State.html +0 -140
- data/docs/Mocha/StateMachine/StatePredicate.html +0 -140
- data/docs/Mocha/StubbingError.html +0 -150
- data/docs/_index.html +0 -519
- data/docs/class_list.html +0 -51
- data/docs/css/common.css +0 -1
- data/docs/css/full_list.css +0 -58
- data/docs/css/style.css +0 -496
- data/docs/file.COPYING.html +0 -81
- data/docs/file.MIT-LICENSE.html +0 -85
- data/docs/file.README.html +0 -448
- data/docs/file.RELEASE.html +0 -1028
- data/docs/file_list.html +0 -71
- data/docs/frames.html +0 -17
- data/docs/index.html +0 -448
- data/docs/js/app.js +0 -303
- data/docs/js/full_list.js +0 -216
- data/docs/js/jquery.js +0 -4
- data/docs/method_list.html +0 -651
- data/docs/top-level-namespace.html +0 -118
- data/test/acceptance/acceptance_test_helper.rb +0 -42
- data/test/acceptance/bug_18914_test.rb +0 -37
- data/test/acceptance/bug_21465_test.rb +0 -31
- data/test/acceptance/bug_21563_test.rb +0 -22
- data/test/acceptance/display_matching_invocations_alongside_expectations_test.rb +0 -69
- data/test/acceptance/exception_rescue_test.rb +0 -53
- data/test/acceptance/expectations_on_multiple_methods_test.rb +0 -55
- data/test/acceptance/expected_invocation_count_test.rb +0 -229
- data/test/acceptance/failure_messages_test.rb +0 -77
- data/test/acceptance/issue_272_test.rb +0 -50
- data/test/acceptance/issue_457_test.rb +0 -31
- data/test/acceptance/issue_65_test.rb +0 -64
- data/test/acceptance/issue_70_test.rb +0 -53
- data/test/acceptance/mocha_example_test.rb +0 -106
- data/test/acceptance/mocha_test_result_test.rb +0 -83
- data/test/acceptance/mock_built_with_first_argument_type_being_string_test.rb +0 -98
- data/test/acceptance/mock_test.rb +0 -191
- data/test/acceptance/mocked_methods_dispatch_test.rb +0 -75
- data/test/acceptance/multiple_expectations_failure_message_test.rb +0 -66
- data/test/acceptance/multiple_yielding_test.rb +0 -59
- data/test/acceptance/optional_parameters_test.rb +0 -67
- data/test/acceptance/parameter_matcher_test.rb +0 -299
- data/test/acceptance/partial_mocks_test.rb +0 -44
- data/test/acceptance/prepend_test.rb +0 -86
- data/test/acceptance/prevent_use_of_mocha_outside_test_test.rb +0 -76
- data/test/acceptance/raise_exception_test.rb +0 -36
- data/test/acceptance/return_value_test.rb +0 -49
- data/test/acceptance/sequence_test.rb +0 -189
- data/test/acceptance/states_test.rb +0 -71
- data/test/acceptance/stub_any_instance_method_defined_on_superclass_test.rb +0 -64
- data/test/acceptance/stub_any_instance_method_test.rb +0 -301
- data/test/acceptance/stub_class_method_defined_on_active_record_association_proxy_test.rb +0 -105
- data/test/acceptance/stub_class_method_defined_on_class_test.rb +0 -78
- data/test/acceptance/stub_class_method_defined_on_module_test.rb +0 -73
- data/test/acceptance/stub_class_method_defined_on_superclass_test.rb +0 -144
- data/test/acceptance/stub_everything_test.rb +0 -53
- data/test/acceptance/stub_instance_method_defined_on_active_record_association_proxy_test.rb +0 -91
- data/test/acceptance/stub_instance_method_defined_on_class_and_aliased_test.rb +0 -67
- data/test/acceptance/stub_instance_method_defined_on_class_test.rb +0 -67
- data/test/acceptance/stub_instance_method_defined_on_kernel_module_test.rb +0 -136
- data/test/acceptance/stub_instance_method_defined_on_module_test.rb +0 -76
- data/test/acceptance/stub_instance_method_defined_on_object_class_test.rb +0 -75
- data/test/acceptance/stub_instance_method_defined_on_singleton_class_test.rb +0 -67
- data/test/acceptance/stub_instance_method_defined_on_superclass_test.rb +0 -70
- data/test/acceptance/stub_method_defined_on_module_and_aliased_test.rb +0 -38
- data/test/acceptance/stub_module_method_test.rb +0 -200
- data/test/acceptance/stub_test.rb +0 -49
- data/test/acceptance/stubba_example_test.rb +0 -103
- data/test/acceptance/stubba_test_result_test.rb +0 -71
- data/test/acceptance/stubbing_error_backtrace_test.rb +0 -63
- data/test/acceptance/stubbing_frozen_object_test.rb +0 -88
- data/test/acceptance/stubbing_method_accepting_block_parameter_test.rb +0 -52
- data/test/acceptance/stubbing_method_unnecessarily_test.rb +0 -63
- data/test/acceptance/stubbing_nil_test.rb +0 -60
- data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +0 -157
- data/test/acceptance/stubbing_non_existent_class_method_test.rb +0 -157
- data/test/acceptance/stubbing_non_existent_instance_method_test.rb +0 -145
- data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +0 -128
- data/test/acceptance/stubbing_non_public_class_method_test.rb +0 -163
- data/test/acceptance/stubbing_non_public_instance_method_test.rb +0 -141
- data/test/acceptance/stubbing_on_non_mock_object_test.rb +0 -70
- data/test/acceptance/stubbing_same_class_method_on_parent_and_child_classes_test.rb +0 -33
- data/test/acceptance/throw_test.rb +0 -42
- data/test/acceptance/unexpected_invocation_test.rb +0 -23
- data/test/acceptance/unstubbing_test.rb +0 -194
- data/test/acceptance/yielding_test.rb +0 -80
- data/test/assertions.rb +0 -8
- data/test/deprecation_disabler.rb +0 -15
- data/test/execution_point.rb +0 -36
- data/test/integration/mini_test_test.rb +0 -8
- data/test/integration/shared_tests.rb +0 -178
- data/test/integration/test_unit_test.rb +0 -8
- data/test/method_definer.rb +0 -16
- data/test/mini_test_result.rb +0 -96
- data/test/minitest_result.rb +0 -48
- data/test/simple_counter.rb +0 -11
- data/test/test_helper.rb +0 -58
- data/test/test_runner.rb +0 -58
- data/test/test_unit_result.rb +0 -22
- data/test/unit/any_instance_method_test.rb +0 -175
- data/test/unit/array_inspect_test.rb +0 -14
- data/test/unit/backtrace_filter_test.rb +0 -17
- data/test/unit/cardinality_test.rb +0 -72
- data/test/unit/central_test.rb +0 -98
- data/test/unit/change_state_side_effect_test.rb +0 -37
- data/test/unit/class_methods_test.rb +0 -69
- data/test/unit/configuration_test.rb +0 -37
- data/test/unit/date_time_inspect_test.rb +0 -19
- data/test/unit/exception_raiser_test.rb +0 -45
- data/test/unit/expectation_list_test.rb +0 -82
- data/test/unit/expectation_test.rb +0 -504
- data/test/unit/hash_inspect_test.rb +0 -14
- data/test/unit/hooks_test.rb +0 -35
- data/test/unit/in_state_ordering_constraint_test.rb +0 -39
- data/test/unit/instance_method_test.rb +0 -282
- data/test/unit/method_matcher_test.rb +0 -26
- data/test/unit/mock_test.rb +0 -372
- data/test/unit/mockery_test.rb +0 -171
- data/test/unit/module_methods_test.rb +0 -16
- data/test/unit/object_inspect_test.rb +0 -60
- data/test/unit/object_methods_test.rb +0 -63
- data/test/unit/parameter_matchers/all_of_test.rb +0 -24
- data/test/unit/parameter_matchers/any_of_test.rb +0 -24
- data/test/unit/parameter_matchers/anything_test.rb +0 -19
- data/test/unit/parameter_matchers/equals_test.rb +0 -23
- data/test/unit/parameter_matchers/equivalent_uri_test.rb +0 -41
- data/test/unit/parameter_matchers/has_entries_test.rb +0 -51
- data/test/unit/parameter_matchers/has_entry_test.rb +0 -128
- data/test/unit/parameter_matchers/has_key_test.rb +0 -54
- data/test/unit/parameter_matchers/has_value_test.rb +0 -55
- data/test/unit/parameter_matchers/includes_test.rb +0 -106
- data/test/unit/parameter_matchers/instance_of_test.rb +0 -23
- data/test/unit/parameter_matchers/is_a_test.rb +0 -23
- data/test/unit/parameter_matchers/kind_of_test.rb +0 -23
- data/test/unit/parameter_matchers/not_test.rb +0 -24
- data/test/unit/parameter_matchers/regexp_matches_test.rb +0 -45
- data/test/unit/parameter_matchers/responds_with_test.rb +0 -38
- data/test/unit/parameter_matchers/stub_matcher.rb +0 -23
- data/test/unit/parameter_matchers/yaml_equivalent_test.rb +0 -23
- data/test/unit/parameters_matcher_test.rb +0 -119
- data/test/unit/receivers_test.rb +0 -96
- data/test/unit/return_values_test.rb +0 -66
- data/test/unit/sequence_test.rb +0 -100
- data/test/unit/single_return_value_test.rb +0 -17
- data/test/unit/state_machine_test.rb +0 -96
- data/test/unit/string_inspect_test.rb +0 -9
- data/test/unit/thrower_test.rb +0 -23
- data/test/unit/yield_parameters_test.rb +0 -73
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3182f55b0e553eb0559fee7df5f5fd71f824e219480715de2f35e7bfacb5d9b2
|
4
|
+
data.tar.gz: 485677b5a3628ccee3730274697f27defb4fc087cc838d7c4ec8dac4e3cd589d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f782e0791e221f18081e35a298a039b96afd7a06caf4177a3d117e3803ee2165d9cd5dd6c19edde9334fda7dea973c105a5c3fe7070810dd0e7229901df056f
|
7
|
+
data.tar.gz: 8adf5cf18b21d7039c7c8f10b4c7a49ba4a215d9351cdd89a04d7a4371eda9863727b08e5bdbb240d92dd6cc93555306b13501370ecdadd4b6a74368213851c5
|
data/CONTRIBUTING.md
CHANGED
@@ -3,5 +3,5 @@
|
|
3
3
|
* Make your changes in a branch.
|
4
4
|
* Add/modify/remove tests as appropriate.
|
5
5
|
* Open a pull request based on a branch on your fork.
|
6
|
-
* Wait for your pull request build to pass on [Travis CI](https://travis-ci.
|
6
|
+
* Wait for your pull request build to pass on [Travis CI](https://travis-ci.com/github/freerange/mocha/pull_requests).
|
7
7
|
* Pull requests with failing tests will not be accepted.
|
data/README.md
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
## Mocha [](https://travis-ci.com/github/freerange/mocha) [](http://badge.fury.io/rb/mocha) [](https://dependabot.com/compatibility-score.html?dependency-name=mocha&package-manager=bundler&version-scheme=semver)
|
3
2
|
|
4
3
|
### Description
|
5
4
|
|
@@ -47,35 +46,21 @@ If you're using Bundler, include Mocha in the `Gemfile` and then setup Mocha lat
|
|
47
46
|
|
48
47
|
```ruby
|
49
48
|
# Gemfile
|
50
|
-
gem
|
49
|
+
gem 'mocha'
|
51
50
|
|
52
51
|
# Elsewhere after Bundler has loaded gems e.g. after `require 'bundler/setup'`
|
53
|
-
require
|
54
|
-
require
|
52
|
+
require 'test/unit'
|
53
|
+
require 'mocha/test_unit'
|
55
54
|
```
|
56
55
|
|
57
56
|
##### MiniTest
|
58
57
|
|
59
58
|
```ruby
|
60
59
|
# Gemfile
|
61
|
-
gem "mocha"
|
62
|
-
|
63
|
-
# Elsewhere after Bundler has loaded gems e.g. after `require 'bundler/setup'`
|
64
|
-
require "minitest/unit"
|
65
|
-
require "mocha/minitest"
|
66
|
-
```
|
67
|
-
|
68
|
-
#### Rails
|
69
|
-
|
70
|
-
If you're loading Mocha using Bundler within a Rails application, you should setup Mocha manually e.g. at the bottom of your `test_helper.rb`.
|
71
|
-
|
72
|
-
##### MiniTest
|
73
|
-
|
74
|
-
```ruby
|
75
|
-
# Gemfile in Rails app
|
76
60
|
gem 'mocha'
|
77
61
|
|
78
|
-
#
|
62
|
+
# Elsewhere after Bundler has loaded gems e.g. after `require 'bundler/setup'`
|
63
|
+
require 'minitest/unit'
|
79
64
|
require 'mocha/minitest'
|
80
65
|
```
|
81
66
|
|
@@ -95,13 +80,6 @@ end
|
|
95
80
|
|
96
81
|
Note: There is no need to use a require statement to setup Mocha; RSpec does this itself.
|
97
82
|
|
98
|
-
##### MiniTest
|
99
|
-
|
100
|
-
```ruby
|
101
|
-
# At bottom of test_helper.rb (or at least after `require 'rails/test_help'`)
|
102
|
-
require 'mocha/minitest'
|
103
|
-
```
|
104
|
-
|
105
83
|
##### Cucumber
|
106
84
|
|
107
85
|
```ruby
|
@@ -121,9 +99,29 @@ Around do |scenario, block|
|
|
121
99
|
end
|
122
100
|
```
|
123
101
|
|
102
|
+
#### Rails
|
103
|
+
|
104
|
+
If you're loading Mocha using Bundler within a Rails application, you should setup Mocha manually e.g. at the bottom of your `test_helper.rb`.
|
105
|
+
|
106
|
+
##### MiniTest
|
107
|
+
|
108
|
+
Note that since Rails v4 (at least), `ActiveSupport::TestCase` has inherited from `Minitest::Test` or its earlier equivalents. Thus unless you are *explicitly* using Test::Unit, you are likely to be using MiniTest.
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
# Gemfile in Rails app
|
112
|
+
gem 'mocha'
|
113
|
+
|
114
|
+
# At bottom of test_helper.rb (or at least after `require 'rails/test_help'`)
|
115
|
+
require 'mocha/minitest'
|
116
|
+
```
|
117
|
+
|
118
|
+
##### Other Test Framework
|
119
|
+
|
120
|
+
Follow the instructions for the relevant test framework in the [Bundler](#bundler) section, but ensure that the relevant Mocha file (`mocha/minitest`, `mocha/test_unit`, or `mocha/api`) is required **after** the test framework has been loaded, e.g. at the bottom of `test_helper.rb` or `spec_helper.rb`, or at least after `rails/test_help` has been required.
|
121
|
+
|
124
122
|
#### Known Issues
|
125
123
|
|
126
|
-
* In Mocha v1.10.0 an undocumented feature of `API#mock`, `API#stub` & `API#stub_everything` was changed. Previously when these methods were passed a single symbol, they returned a mock object that responded to the method identified by the symbol. Now Passing a single symbol is equivalent to passing a single string, i.e. it now defines the
|
124
|
+
* In Mocha v1.10.0 an undocumented feature of `API#mock`, `API#stub` & `API#stub_everything` was changed. Previously when these methods were passed a single symbol, they returned a mock object that responded to the method identified by the symbol. Now Passing a single symbol is equivalent to passing a single string, i.e. it now defines the 'name' of the mock object.
|
127
125
|
* In Mocha v1.2.0 there is a scenario where stubbing a class method originally defined in a module hangs the Ruby interpreter due to [a bug in Ruby v2.3.1](https://bugs.ruby-lang.org/issues/12832). See #272. This was fixed in Mocha v1.2.1.
|
128
126
|
* Since v1.1.0 Mocha has used prepended modules internally for stubbing methods. There is [an obscure Ruby bug](https://bugs.ruby-lang.org/issues/12876) in many (but not all) versions of Ruby between v2.0 & v2.3 which under certain circumstances may cause your Ruby interpreter to hang. See the Ruby bug report for more details. The bug has been fixed in Ruby v2.3.3 & v2.4.0.
|
129
127
|
* Stubbing an aliased class method, where the original method is defined in a module that's used to `extend` the class doesn't work in Ruby 1.8.x. See stub_method_defined_on_module_and_aliased_test.rb for an example of this behaviour.
|
@@ -325,7 +323,7 @@ See this [list of contributors](https://github.com/freerange/mocha/graphs/contri
|
|
325
323
|
* Update the RELEASE.md file with a summary of changes
|
326
324
|
* Bump the version in `lib/mocha/version.rb`
|
327
325
|
* Commit & push to GitHub
|
328
|
-
* Check Travis CI build is passing - https://travis-ci.
|
326
|
+
* Check Travis CI build is passing - https://travis-ci.com/github/freerange/mocha
|
329
327
|
|
330
328
|
* Sign in to Google Analytics - https://analytics.google.com/analytics/web/
|
331
329
|
* Find the web property ID for floehopper (625523) > Mocha Documentation (UA-625523-7)
|
data/RELEASE.md
CHANGED
@@ -1,5 +1,30 @@
|
|
1
1
|
# Release Notes
|
2
2
|
|
3
|
+
## 1.12.0
|
4
|
+
|
5
|
+
### External changes
|
6
|
+
|
7
|
+
* Various improvements to README inspired by #207 and #390 - thanks to @nitishr for his work on #390 (fed0eee6)
|
8
|
+
* Improve documentation related to `StateMachine` classes - thanks to @nitishr (#425 & #427)
|
9
|
+
* Fix regression in cardinality introduced in v1.10.0 (59454a8) and reported in #473 - thanks to @srvance for reporting and @nitishr for fixing (#474)
|
10
|
+
* Fix documentation for `Mocha::Expectation#when` - thanks to @olleolleolle (b4f59daa & #477)
|
11
|
+
* Remove `Mocha::Mock#respond_to?` from documentation - thanks to @nitishr (#480)
|
12
|
+
* Improvements to documentation for `Expectation#yields` & `#multiple_yields` - thanks to @andyw8 for reporting in #495 (1b6571c)
|
13
|
+
* Remove documentation & tests from gem to reduce its size by over 50% - thanks to @gabetax (#500)
|
14
|
+
* Update documentation to point to travis-ci.com instead of travis-ci.org
|
15
|
+
|
16
|
+
### Internal changes
|
17
|
+
|
18
|
+
* Refactor `StateMachine`-related classes - thanks to @nitishr (#425 & #427)
|
19
|
+
* Remove redundant test - thanks to @nitishr (8e4f1a7c)
|
20
|
+
* Add Ruby 2.7 to Travis CI matrix - thanks to @bastelfreak (fc5ea2f2)
|
21
|
+
* Simplify `Mockery` - thanks to @nitishr (#449)
|
22
|
+
* Update Travis CI badge to point to main vs master branch (bd8028f8)
|
23
|
+
* Generate docs using newer version of yard (v0.9.25) (c619afac)
|
24
|
+
* Manually upgrade jquery in docs from v1.7.1 -> v1.9.0 to fix CVE-2017-16011 (211098a5, dd5eeedb & 1b76e4d5; also see #492)
|
25
|
+
* Remove reference to non-existent jquery source map to fix error in Chrome developer tools (20156555)
|
26
|
+
* Temporarily ignore Ruby v1.8.7 build failures (e5b9feef)
|
27
|
+
|
3
28
|
## 1.11.2
|
4
29
|
|
5
30
|
### External changes
|
data/Rakefile
CHANGED
@@ -145,8 +145,13 @@ if ENV['MOCHA_GENERATE_DOCS']
|
|
145
145
|
`git checkout docs/CNAME`
|
146
146
|
end
|
147
147
|
|
148
|
+
task 'checkout_docs_js' do
|
149
|
+
`git checkout docs/js/app.js`
|
150
|
+
`git checkout docs/js/jquery.js`
|
151
|
+
end
|
152
|
+
|
148
153
|
desc 'Generate documentation'
|
149
|
-
task 'generate_docs' => %w[clobber_yardoc yardoc checkout_docs_cname]
|
154
|
+
task 'generate_docs' => %w[clobber_yardoc yardoc checkout_docs_cname checkout_docs_js]
|
150
155
|
end
|
151
156
|
|
152
157
|
task 'release' => 'default'
|
data/lib/mocha/cardinality.rb
CHANGED
@@ -2,31 +2,28 @@ module Mocha
|
|
2
2
|
class Cardinality
|
3
3
|
INFINITY = 1 / 0.0
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
def initialize(required = 0, maximum = INFINITY)
|
6
|
+
update(required, maximum)
|
7
|
+
@invocations = []
|
8
|
+
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
def exactly(count)
|
11
|
+
update(count, count)
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
def at_least(count)
|
15
|
+
update(count, INFINITY)
|
16
|
+
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
when Range then new(range_or_count.first, range_or_count.last)
|
21
|
-
else new(range_or_count, range_or_count)
|
22
|
-
end
|
23
|
-
end
|
18
|
+
def at_most(count)
|
19
|
+
update(0, count)
|
24
20
|
end
|
25
21
|
|
26
|
-
def
|
27
|
-
|
28
|
-
|
29
|
-
|
22
|
+
def times(range_or_count)
|
23
|
+
case range_or_count
|
24
|
+
when Range then update(range_or_count.first, range_or_count.last)
|
25
|
+
else update(range_or_count, range_or_count)
|
26
|
+
end
|
30
27
|
end
|
31
28
|
|
32
29
|
def <<(invocation)
|
@@ -62,21 +59,21 @@ module Mocha
|
|
62
59
|
if allowed_any_number_of_times?
|
63
60
|
'allowed any number of times'
|
64
61
|
elsif required.zero? && maximum.zero?
|
65
|
-
"expected #{
|
62
|
+
"expected #{count(maximum)}"
|
66
63
|
elsif required == maximum
|
67
|
-
"expected exactly #{
|
64
|
+
"expected exactly #{count(required)}"
|
68
65
|
elsif infinite?(maximum)
|
69
|
-
"expected at least #{
|
66
|
+
"expected at least #{count(required)}"
|
70
67
|
elsif required.zero?
|
71
|
-
"expected at most #{
|
68
|
+
"expected at most #{count(maximum)}"
|
72
69
|
else
|
73
|
-
"expected between #{required} and #{
|
70
|
+
"expected between #{required} and #{count(maximum)}"
|
74
71
|
end
|
75
72
|
end
|
76
73
|
# rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
|
77
74
|
|
78
75
|
def invoked_times
|
79
|
-
"invoked #{
|
76
|
+
"invoked #{count(@invocations.size)}"
|
80
77
|
end
|
81
78
|
|
82
79
|
def actual_invocations
|
@@ -87,7 +84,7 @@ module Mocha
|
|
87
84
|
|
88
85
|
attr_reader :required, :maximum
|
89
86
|
|
90
|
-
def
|
87
|
+
def count(number)
|
91
88
|
case number
|
92
89
|
when 0 then 'never'
|
93
90
|
when 1 then 'once'
|
@@ -96,6 +93,12 @@ module Mocha
|
|
96
93
|
end
|
97
94
|
end
|
98
95
|
|
96
|
+
def update(required, maximum)
|
97
|
+
@required = required
|
98
|
+
@maximum = maximum
|
99
|
+
self
|
100
|
+
end
|
101
|
+
|
99
102
|
def infinite?(number)
|
100
103
|
number.respond_to?(:infinite?) && number.infinite?
|
101
104
|
end
|
data/lib/mocha/expectation.rb
CHANGED
@@ -42,7 +42,7 @@ module Mocha
|
|
42
42
|
# object.expected_method
|
43
43
|
# # => verify fails
|
44
44
|
def times(range)
|
45
|
-
@cardinality
|
45
|
+
@cardinality.times(range)
|
46
46
|
self
|
47
47
|
end
|
48
48
|
|
@@ -68,7 +68,7 @@ module Mocha
|
|
68
68
|
# object.expected_method
|
69
69
|
# # => verify fails
|
70
70
|
def twice
|
71
|
-
@cardinality
|
71
|
+
@cardinality.exactly(2)
|
72
72
|
self
|
73
73
|
end
|
74
74
|
|
@@ -93,7 +93,7 @@ module Mocha
|
|
93
93
|
# object.expects(:expected_method).once
|
94
94
|
# # => verify fails
|
95
95
|
def once
|
96
|
-
@cardinality
|
96
|
+
@cardinality.exactly(1)
|
97
97
|
self
|
98
98
|
end
|
99
99
|
|
@@ -110,7 +110,7 @@ module Mocha
|
|
110
110
|
# object.expects(:expected_method).never
|
111
111
|
# # => verify succeeds
|
112
112
|
def never
|
113
|
-
@cardinality
|
113
|
+
@cardinality.exactly(0)
|
114
114
|
self
|
115
115
|
end
|
116
116
|
|
@@ -130,7 +130,7 @@ module Mocha
|
|
130
130
|
# object.expected_method
|
131
131
|
# # => verify fails
|
132
132
|
def at_least(minimum_number_of_times)
|
133
|
-
@cardinality
|
133
|
+
@cardinality.at_least(minimum_number_of_times)
|
134
134
|
self
|
135
135
|
end
|
136
136
|
|
@@ -149,7 +149,6 @@ module Mocha
|
|
149
149
|
# # => verify fails
|
150
150
|
def at_least_once
|
151
151
|
at_least(1)
|
152
|
-
self
|
153
152
|
end
|
154
153
|
|
155
154
|
# Modifies expectation so that the expected method must be called at most a +maximum_number_of_times+.
|
@@ -167,7 +166,7 @@ module Mocha
|
|
167
166
|
# object.expects(:expected_method).at_most(2)
|
168
167
|
# 3.times { object.expected_method } # => unexpected invocation
|
169
168
|
def at_most(maximum_number_of_times)
|
170
|
-
@cardinality
|
169
|
+
@cardinality.at_most(maximum_number_of_times)
|
171
170
|
self
|
172
171
|
end
|
173
172
|
|
@@ -186,7 +185,6 @@ module Mocha
|
|
186
185
|
# 2.times { object.expected_method } # => unexpected invocation
|
187
186
|
def at_most_once
|
188
187
|
at_most(1)
|
189
|
-
self
|
190
188
|
end
|
191
189
|
|
192
190
|
# Modifies expectation so that the expected method must be called with +expected_parameters+.
|
@@ -263,7 +261,11 @@ module Mocha
|
|
263
261
|
self
|
264
262
|
end
|
265
263
|
|
266
|
-
# Modifies expectation so that when the expected method is called, it yields
|
264
|
+
# Modifies expectation so that when the expected method is called, it yields to the block with the specified +parameters+.
|
265
|
+
#
|
266
|
+
# If no +parameters+ are specified, it yields to the block without any parameters.
|
267
|
+
#
|
268
|
+
# If no block is provided, the method will still attempt to yield resulting in a +LocalJumpError+. Note that this is what would happen if a "real" (non-mock) method implementation tried to yield to a non-existent block.
|
267
269
|
#
|
268
270
|
# May be called multiple times on the same expectation for consecutive invocations.
|
269
271
|
#
|
@@ -273,11 +275,10 @@ module Mocha
|
|
273
275
|
#
|
274
276
|
# @example Yield when expected method is invoked.
|
275
277
|
# benchmark = mock()
|
276
|
-
# benchmark.expects(:measure).yields
|
278
|
+
# benchmark.expects(:measure).yields
|
277
279
|
# yielded = false
|
278
|
-
#
|
280
|
+
# benchmark.measure { yielded = true }
|
279
281
|
# yielded # => true
|
280
|
-
# returned_value # => '0.350000 0.400000 0.750000 ( 0.835234)'
|
281
282
|
#
|
282
283
|
# @example Yield parameters when expected method is invoked.
|
283
284
|
# fibonacci = mock()
|
@@ -298,7 +299,9 @@ module Mocha
|
|
298
299
|
multiple_yields(parameters)
|
299
300
|
end
|
300
301
|
|
301
|
-
# Modifies expectation so that when the expected method is called, it yields multiple times per invocation with the specified +parameter_groups
|
302
|
+
# Modifies expectation so that when the expected method is called, it yields multiple times per invocation with the specified +parameter_groups+.
|
303
|
+
#
|
304
|
+
# If no block is provided, the method will still attempt to yield resulting in a +LocalJumpError+. Note that this is what would happen if a "real" (non-mock) method implementation tried to yield to a non-existent block.
|
302
305
|
#
|
303
306
|
# @param [*Array<Array>] parameter_groups each element of +parameter_groups+ should iself be an +Array+ representing the parameters to be passed to the block for a single yield. Any element of +parameter_groups+ that is not an +Array+ is wrapped in an +Array+.
|
304
307
|
# @return [Expectation] the same expectation, thereby allowing invocations of other {Expectation} methods to be chained.
|
@@ -453,9 +456,9 @@ module Mocha
|
|
453
456
|
|
454
457
|
# @overload def then
|
455
458
|
# Used as syntactic sugar to improve readability. It has no effect on state of the expectation.
|
456
|
-
# @overload def then(
|
457
|
-
# Used to change the +state_machine+ to the
|
458
|
-
# @param [StateMachine::State] state_machine.is(state_name) provides a mechanism to change the +state_machine+ into the state specified by +state_name+ when the expected method is invoked.
|
459
|
+
# @overload def then(state)
|
460
|
+
# Used to change the +state_machine+ to the specified state when the expected invocation occurs.
|
461
|
+
# @param [StateMachine::State] state state_machine.is(state_name) provides a mechanism to change the +state_machine+ into the state specified by +state_name+ when the expected method is invoked.
|
459
462
|
#
|
460
463
|
# @see API#states
|
461
464
|
# @see StateMachine
|
@@ -481,17 +484,14 @@ module Mocha
|
|
481
484
|
# radio.expects(:select_channel).with('BBC World Service').when(power.is('on'))
|
482
485
|
# radio.expects(:adjust_volume).with(-5).when(power.is('on'))
|
483
486
|
# radio.expects(:switch_off).then(power.is('off'))
|
484
|
-
def then(
|
485
|
-
|
486
|
-
state = parameters.first
|
487
|
-
add_side_effect(ChangeStateSideEffect.new(state))
|
488
|
-
end
|
487
|
+
def then(state = nil)
|
488
|
+
add_side_effect(ChangeStateSideEffect.new(state)) if state
|
489
489
|
self
|
490
490
|
end
|
491
491
|
|
492
|
-
# Constrains the expectation to occur only when the +state_machine+ is in the state specified by +
|
492
|
+
# Constrains the expectation to occur only when the +state_machine+ is in the state specified by +state_predicate+.
|
493
493
|
#
|
494
|
-
# @param [StateMachine::StatePredicate] state_machine.is(state_name) provides a mechanism to determine whether the +state_machine+ is in the state specified by +
|
494
|
+
# @param [StateMachine::StatePredicate] state_predicate +state_machine.is(state_name)+ provides a mechanism to determine whether the +state_machine+ is in the state specified by +state_predicate+ when the expected method is invoked.
|
495
495
|
# @return [Expectation] the same expectation, thereby allowing invocations of other {Expectation} methods to be chained.
|
496
496
|
#
|
497
497
|
# @see API#states
|
@@ -552,7 +552,7 @@ module Mocha
|
|
552
552
|
@block_matcher = BlockMatchers::OptionalBlock.new
|
553
553
|
@ordering_constraints = []
|
554
554
|
@side_effects = []
|
555
|
-
@cardinality = Cardinality.exactly(1)
|
555
|
+
@cardinality = Cardinality.new.exactly(1)
|
556
556
|
@return_values = ReturnValues.new
|
557
557
|
@yield_parameters = YieldParameters.new
|
558
558
|
@backtrace = backtrace || caller
|
data/lib/mocha/mock.rb
CHANGED
data/lib/mocha/mockery.rb
CHANGED
@@ -35,12 +35,13 @@ module Mocha
|
|
35
35
|
|
36
36
|
class << self
|
37
37
|
def instance
|
38
|
-
instances.last || Null.new
|
38
|
+
@instances.last || Null.new
|
39
39
|
end
|
40
40
|
|
41
41
|
def setup
|
42
|
+
@instances ||= []
|
42
43
|
mockery = new
|
43
|
-
mockery.logger = instance.logger unless instances.empty?
|
44
|
+
mockery.logger = instance.logger unless @instances.empty?
|
44
45
|
@instances.push(mockery)
|
45
46
|
end
|
46
47
|
|
@@ -52,13 +53,6 @@ module Mocha
|
|
52
53
|
instance.teardown
|
53
54
|
ensure
|
54
55
|
@instances.pop
|
55
|
-
@instances = nil if instances.empty?
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
def instances
|
61
|
-
@instances ||= []
|
62
56
|
end
|
63
57
|
end
|
64
58
|
|
@@ -92,11 +86,9 @@ module Mocha
|
|
92
86
|
end
|
93
87
|
raise ExpectationErrorFactory.build(message, backtrace)
|
94
88
|
end
|
95
|
-
expectations.each do |
|
96
|
-
|
97
|
-
|
98
|
-
on_stubbing_method_unnecessarily(e)
|
99
|
-
end
|
89
|
+
expectations.reject(&:used?).each do |expectation|
|
90
|
+
signature_proc = lambda { expectation.method_signature }
|
91
|
+
check(:stubbing_method_unnecessarily, 'method unnecessarily', signature_proc, expectation.backtrace)
|
100
92
|
end
|
101
93
|
end
|
102
94
|
|
@@ -120,9 +112,9 @@ module Mocha
|
|
120
112
|
|
121
113
|
def mocha_inspect
|
122
114
|
message = ''
|
123
|
-
message << "unsatisfied expectations:\n- #{unsatisfied_expectations.map(&:mocha_inspect).join("\n- ")}\n"
|
124
|
-
message << "satisfied expectations:\n- #{satisfied_expectations.map(&:mocha_inspect).join("\n- ")}\n"
|
125
|
-
message << "states:\n- #{state_machines.map(&:mocha_inspect).join("\n- ")}"
|
115
|
+
message << "unsatisfied expectations:\n- #{unsatisfied_expectations.map(&:mocha_inspect).join("\n- ")}\n" if unsatisfied_expectations.any?
|
116
|
+
message << "satisfied expectations:\n- #{satisfied_expectations.map(&:mocha_inspect).join("\n- ")}\n" if satisfied_expectations.any?
|
117
|
+
message << "states:\n- #{state_machines.map(&:mocha_inspect).join("\n- ")}\n" if state_machines.any?
|
126
118
|
message
|
127
119
|
end
|
128
120
|
|
@@ -139,11 +131,6 @@ module Mocha
|
|
139
131
|
check(:stubbing_method_on_non_mock_object, 'method on non-mock object', signature_proc)
|
140
132
|
end
|
141
133
|
|
142
|
-
def on_stubbing_method_unnecessarily(expectation)
|
143
|
-
signature_proc = lambda { expectation.method_signature }
|
144
|
-
check(:stubbing_method_unnecessarily, 'method unnecessarily', signature_proc, expectation.backtrace)
|
145
|
-
end
|
146
|
-
|
147
134
|
attr_writer :logger
|
148
135
|
|
149
136
|
def logger
|