mocha 1.2.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +38 -7
- data/RELEASE.md +32 -1
- data/lib/mocha/any_instance_method.rb +1 -1
- data/lib/mocha/api.rb +11 -5
- data/lib/mocha/deprecation.rb +7 -4
- data/lib/mocha/inspect.rb +0 -10
- data/lib/mocha/instance_method.rb +0 -8
- data/lib/mocha/mini_test.rb +4 -2
- data/lib/mocha/minitest.rb +3 -0
- data/lib/mocha/mock.rb +14 -2
- data/lib/mocha/parameter_matchers.rb +1 -1
- data/lib/mocha/parameter_matchers/{query_string.rb → equivalent_uri.rb} +18 -9
- data/lib/mocha/parameter_matchers/includes.rb +2 -1
- data/lib/mocha/version.rb +1 -1
- data/mocha.gemspec +1 -0
- data/test/acceptance/failure_messages_test.rb +1 -1
- data/test/acceptance/mock_with_initializer_block_test.rb +21 -14
- data/test/acceptance/parameter_matcher_test.rb +4 -40
- data/test/acceptance/sequence_test.rb +5 -5
- data/test/acceptance/stub_module_method_test.rb +45 -7
- data/test/acceptance/stubba_test_result_test.rb +12 -3
- data/test/acceptance/stubbing_on_non_mock_object_test.rb +16 -4
- data/test/deprecation_disabler.rb +1 -0
- data/test/execution_point.rb +6 -4
- data/test/integration/mini_test_test.rb +1 -1
- data/test/unit/any_instance_method_test.rb +2 -0
- data/test/unit/array_inspect_test.rb +1 -1
- data/test/unit/class_method_test.rb +7 -3
- data/test/unit/expectation_test.rb +1 -1
- data/test/unit/hash_inspect_test.rb +1 -1
- data/test/unit/mock_test.rb +8 -0
- data/test/unit/mockery_test.rb +11 -5
- data/test/unit/parameter_matchers/equals_test.rb +1 -1
- data/test/unit/parameter_matchers/equivalent_uri_test.rb +51 -0
- data/test/unit/parameter_matchers/has_entry_test.rb +2 -2
- data/test/unit/parameter_matchers/has_value_test.rb +1 -1
- data/test/unit/parameter_matchers/includes_test.rb +5 -0
- data/test/unit/sequence_test.rb +1 -1
- data/test/unit/string_inspect_test.rb +2 -2
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1a4df2eb13604de6b309bc453307d375c055620
|
4
|
+
data.tar.gz: 9144ebfe812beea562fc8c9ebdfb87326cb5ffa6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1cf5b923bb4a91c6b3a1dac90aca3084229955743ae64c41cbecf561e8fd572f419d09d155ff3c9b6d0616258ca526d70677d79f9861e8987f99ee5b312bbb90
|
7
|
+
data.tar.gz: 9e635e0f0897d0437acffe0cfe4755ecae028da76513445a5b4b56ee48be878ae0070fa24d3fc8bddad02a69d790223909b936fdcdb6f53114feeec8c69cd3c4
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
## Mocha [![
|
1
|
+
## Mocha [![Build Status](https://travis-ci.org/freerange/mocha.svg?branch=master)](https://travis-ci.org/freerange/mocha) [![Gem Version](https://badge.fury.io/rb/mocha.png)](http://badge.fury.io/rb/mocha) [![OpenCollective](https://opencollective.com/mocha/backers/badge.svg)](#backers) [![OpenCollective](https://opencollective.com/mocha/sponsors/badge.svg)](#sponsors)
|
2
2
|
|
3
3
|
|
4
4
|
### Description
|
@@ -33,7 +33,7 @@ require 'mocha/test_unit'
|
|
33
33
|
require 'rubygems'
|
34
34
|
gem 'mocha'
|
35
35
|
require 'minitest/unit'
|
36
|
-
require 'mocha/
|
36
|
+
require 'mocha/minitest'
|
37
37
|
```
|
38
38
|
|
39
39
|
#### Bundler
|
@@ -59,7 +59,7 @@ gem "mocha"
|
|
59
59
|
|
60
60
|
# Elsewhere after Bundler has loaded gems e.g. after `require 'bundler/setup'`
|
61
61
|
require "minitest/unit"
|
62
|
-
require "mocha/
|
62
|
+
require "mocha/minitest"
|
63
63
|
```
|
64
64
|
|
65
65
|
#### Rails
|
@@ -73,12 +73,12 @@ If you're loading Mocha using Bundler within a Rails application, you should set
|
|
73
73
|
gem 'mocha'
|
74
74
|
|
75
75
|
# At bottom of test_helper.rb (or at least after `require 'rails/test_help'`)
|
76
|
-
require 'mocha/
|
76
|
+
require 'mocha/minitest'
|
77
77
|
```
|
78
78
|
|
79
79
|
##### RSpec
|
80
80
|
|
81
|
-
|
81
|
+
RSpec includes a mocha adapter. Just tell RSpec you want to mock with `:mocha`:
|
82
82
|
|
83
83
|
```ruby
|
84
84
|
# Gemfile in Rails app
|
@@ -104,12 +104,13 @@ Note: As of version 0.9.8, the Mocha plugin is not automatically setup at plugin
|
|
104
104
|
|
105
105
|
```ruby
|
106
106
|
# At bottom of test_helper.rb (or at least after `require 'rails/test_help'`)
|
107
|
-
require 'mocha/
|
107
|
+
require 'mocha/minitest'
|
108
108
|
```
|
109
109
|
|
110
110
|
#### Known Issues
|
111
111
|
|
112
112
|
* 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.
|
113
|
+
* 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.
|
113
114
|
* 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.
|
114
115
|
* 0.13.x versions cause a harmless, but annoying, deprecation warning when used with Rails 3.2.0-3.2.12, 3.1.0-3.1.10 & 3.0.0-3.0.19.
|
115
116
|
* 0.11.x versions don't work with Rails 3.2.13 (`TypeError: superclass mismatch for class ExpectationError`). See #115.
|
@@ -281,7 +282,7 @@ See the [documentation](http://gofreerange.com/mocha/docs/Mocha/Mock.html) for `
|
|
281
282
|
|
282
283
|
See this [list of contributors](https://github.com/freerange/mocha/graphs/contributors).
|
283
284
|
|
284
|
-
###Backers
|
285
|
+
### Backers
|
285
286
|
|
286
287
|
Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/mocha#backer)]
|
287
288
|
|
@@ -317,6 +318,7 @@ Support us with a monthly donation and help us continue our activities. [[Become
|
|
317
318
|
<a href="https://opencollective.com/mocha/backer/29/website" target="_blank"><img src="https://opencollective.com/mocha/backer/29/avatar.svg"></a>
|
318
319
|
|
319
320
|
### Sponsors
|
321
|
+
|
320
322
|
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/mocha#sponsor)]
|
321
323
|
|
322
324
|
<a href="https://opencollective.com/mocha/sponsor/0/website" target="_blank"><img src="https://opencollective.com/mocha/sponsor/0/avatar.svg"></a>
|
@@ -354,6 +356,35 @@ Become a sponsor and get your logo on our README on Github with a link to your s
|
|
354
356
|
|
355
357
|
* [Serbo-Croatian](http://science.webhostinggeeks.com/mocha) by [WHG Team](http://webhostinggeeks.com/). (may be out-of-date)
|
356
358
|
|
359
|
+
### Releasing a new version
|
360
|
+
|
361
|
+
* Update the RELEASE.md file with a summary of changes
|
362
|
+
* Bump the version in `lib/mocha/version.rb`
|
363
|
+
* Commit & push to Github
|
364
|
+
* Check Travis CI build is passing - https://travis-ci.org/freerange/mocha
|
365
|
+
|
366
|
+
* Sign in to rubygems.org and find API key - https://rubygems.org/profile/edit
|
367
|
+
|
368
|
+
```bash
|
369
|
+
$ curl -u james@floehopper.org https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials; chmod 0600 ~/.gem/credentials`
|
370
|
+
```
|
371
|
+
|
372
|
+
* Sign in to Google Analytics - https://analytics.google.com/analytics/web/
|
373
|
+
* Find the web property ID for Go Free Range Ltd > Mocha Documentation (UA-45002715-2)
|
374
|
+
|
375
|
+
```bash
|
376
|
+
$ MOCHA_GENERATE_DOCS=true bundle install
|
377
|
+
|
378
|
+
$ MOCHA_GENERATE_DOCS=true GOOGLE_ANALYTICS_WEB_PROPERTY_ID=UA-45002715-2 rake release
|
379
|
+
mocha 1.2.0 built to pkg/mocha-1.2.0.gem.
|
380
|
+
Tagged v1.2.0.
|
381
|
+
Pushed git commits and tags.
|
382
|
+
Pushed mocha 1.2.0 to rubygems.org.
|
383
|
+
[runs tests]
|
384
|
+
[generates docs]
|
385
|
+
[deploys docs]
|
386
|
+
```
|
387
|
+
|
357
388
|
### History
|
358
389
|
|
359
390
|
Mocha was initially harvested from projects at [Reevoo](http://www.reevoo.com/). It's syntax is heavily based on that of [jMock](http://www.jmock.org).
|
data/RELEASE.md
CHANGED
@@ -1,5 +1,36 @@
|
|
1
1
|
# Release Notes
|
2
2
|
|
3
|
+
## 1.4.0
|
4
|
+
|
5
|
+
* Fix deprecation warning for `assert_nil` in `ClassMethodTest` (#308 & #309)
|
6
|
+
* Display file and line number in deprecation warning - thanks to @chrisarcand (#310, #312 & #313)
|
7
|
+
* Rename `mocha/mini_test.rb` to `mocha/minitest.rb` - thanks to @grosser (#320 & #322)
|
8
|
+
* Fix warning when delegating to mock in Ruby 2.4 - thanks to @tjvc (#321 & #323)
|
9
|
+
* Updates to Travis CI configuration ([73af600..9732726](https://github.com/freerange/mocha/compare/73af600...9732726) & 0426e5e)
|
10
|
+
|
11
|
+
## 1.3.0
|
12
|
+
|
13
|
+
* Ensure all tests run individually - thanks to @chrisroos (#267)
|
14
|
+
* Update Travis CI build status badge to show master branch status (#264)
|
15
|
+
* Correct RSpec section of the README - thanks to @myronmarston (0cc039c8)
|
16
|
+
* Fix pretty printing of quotes in `String#mocha_inspect` (#215 & #223)
|
17
|
+
* Add release instructions to README - thanks to @chrisroos (70a5febd & 3c664df7)
|
18
|
+
* Require at least Ruby v1.8.7 in gemspec - thanks to @knappe (3e20be8e)
|
19
|
+
* Remove redundant InstanceMethod#method_exists? - thanks to @chrisroos (8f58eddf)
|
20
|
+
* Reduce risk of hitting bug 12832 in Ruby v2.3 - thanks to @chrisroos (#277 & eca7560c)
|
21
|
+
* Fix JRuby build - thanks to @headius (jruby/jruby#4250) & @chrisroos (#274)
|
22
|
+
* Add latest stable version of JRuby to Travis CI build matrix (#288)
|
23
|
+
* Fix Ruby v1.8.7 builds on Travis CI (928b5a40 & 460dce5b)
|
24
|
+
* Deprecate passing block to mock object constructor (#290)
|
25
|
+
* Add a known issue to README for Ruby bug 12876 (#276)
|
26
|
+
* Add Ruby 2.4 and ruby-head to Travis CI build matrix - thanks to @junaruga (#297)
|
27
|
+
* Fix `Mocha::ParameterMatchers#includes` for `Array` values - thanks to @timcraft (#302)
|
28
|
+
* Use faster container-based virtual environments for Travis CI builds (#305)
|
29
|
+
* Rename `Mocha::ParameterMatchers::QueryStringMatches` to `QueryString` (#306)
|
30
|
+
* Handle blank parameter value for query string matcher - thanks to @weynsee (#303 & #304)
|
31
|
+
* Rename `Mocha::ParameterMatchers::QueryString` -> `EquivalentUri` (#307)
|
32
|
+
* Use `do ... end` instead of `{ ... }` in acceptance tests - thanks to @chrisroos (#294)
|
33
|
+
|
3
34
|
## 1.2.1
|
4
35
|
|
5
36
|
* Fixed #272. Workaround Ruby bug 12832 which caused interpreter to hang. See https://bugs.ruby-lang.org/issues/12832. Thanks to @chrisroos & @petems (6f1c8b9b, #273).
|
@@ -395,7 +426,7 @@ Hash with wrong number of entries.
|
|
395
426
|
|
396
427
|
## 0.5.0
|
397
428
|
|
398
|
-
- Parameter Matchers - I
|
429
|
+
- Parameter Matchers - I've added a few Hamcrest-style parameter matchers which are designed to be used inside Expectation#with. The following matchers are currently available: anything(), includes(), has_key(), has_value(), has_entry(), all_of() & any_of(). More to follow soon. The idea is eventually to get rid of the nasty parameter_block option on Expectation#with.
|
399
430
|
|
400
431
|
object = mock()
|
401
432
|
object.expects(:method).with(has_key('key_1'))
|
@@ -16,11 +16,11 @@ module Mocha
|
|
16
16
|
def hide_original_method
|
17
17
|
if @original_visibility = method_visibility(method)
|
18
18
|
begin
|
19
|
-
@original_method = stubbee.instance_method(method)
|
20
19
|
if RUBY_V2_PLUS
|
21
20
|
@definition_target = PrependedModule.new
|
22
21
|
stubbee.__send__ :prepend, @definition_target
|
23
22
|
else
|
23
|
+
@original_method = stubbee.instance_method(method)
|
24
24
|
if @original_method && @original_method.owner == stubbee
|
25
25
|
stubbee.send(:remove_method, method)
|
26
26
|
end
|
data/lib/mocha/api.rb
CHANGED
@@ -25,7 +25,9 @@ module Mocha
|
|
25
25
|
#
|
26
26
|
# @param [String] name identifies mock object in error messages.
|
27
27
|
# @param [Hash] expected_methods_vs_return_values expected method name symbols as keys and corresponding return values as values - these expectations are setup as if {Mock#expects} were called multiple times.
|
28
|
-
# @yield optional block to be evaluated
|
28
|
+
# @yield optional block to be evaluated in the context of the mock object instance, giving an alternative way to setup stubbed methods.
|
29
|
+
# @yield note that the block is evaulated by calling Mock#instance_eval and so things like instance variables declared in the test will not be available within the block.
|
30
|
+
# @yield deprecated: use Object#tap or define stubs/expectations with an explicit receiver instead.
|
29
31
|
# @return [Mock] a new mock object
|
30
32
|
#
|
31
33
|
# @overload def mock(name, &block)
|
@@ -39,7 +41,7 @@ module Mocha
|
|
39
41
|
# assert motor.stop
|
40
42
|
# # an error will be raised unless both Motor#start and Motor#stop have been called
|
41
43
|
# end
|
42
|
-
# @example Using the optional block to setup expectations & stubbed methods.
|
44
|
+
# @example Using the optional block to setup expectations & stubbed methods [deprecated].
|
43
45
|
# def test_motor_starts_and_stops
|
44
46
|
# motor = mock('motor') do
|
45
47
|
# expects(:start).with(100.rpm).returns(true)
|
@@ -61,7 +63,9 @@ module Mocha
|
|
61
63
|
#
|
62
64
|
# @param [String] name identifies mock object in error messages.
|
63
65
|
# @param [Hash] stubbed_methods_vs_return_values stubbed method name symbols as keys and corresponding return values as values - these stubbed methods are setup as if {Mock#stubs} were called multiple times.
|
64
|
-
# @yield optional block to be evaluated
|
66
|
+
# @yield optional block to be evaluated in the context of the mock object instance, giving an alternative way to setup stubbed methods.
|
67
|
+
# @yield note that the block is evaulated by calling Mock#instance_eval and so things like instance variables declared in the test will not be available within the block.
|
68
|
+
# @yield deprecated: use Object#tap or define stubs/expectations with an explicit receiver instead.
|
65
69
|
# @return [Mock] a new mock object
|
66
70
|
#
|
67
71
|
# @overload def stub(name, &block)
|
@@ -76,7 +80,7 @@ module Mocha
|
|
76
80
|
# # an error will not be raised even if either Motor#start or Motor#stop has not been called
|
77
81
|
# end
|
78
82
|
#
|
79
|
-
# @example Using the optional block to setup expectations & stubbed methods.
|
83
|
+
# @example Using the optional block to setup expectations & stubbed methods [deprecated].
|
80
84
|
# def test_motor_starts_and_stops
|
81
85
|
# motor = stub('motor') do
|
82
86
|
# expects(:start).with(100.rpm).returns(true)
|
@@ -98,7 +102,9 @@ module Mocha
|
|
98
102
|
#
|
99
103
|
# @param [String] name identifies mock object in error messages.
|
100
104
|
# @param [Hash] stubbed_methods_vs_return_values stubbed method name symbols as keys and corresponding return values as values - these stubbed methods are setup as if {Mock#stubs} were called multiple times.
|
101
|
-
# @yield optional block to be evaluated
|
105
|
+
# @yield optional block to be evaluated in the context of the mock object instance, giving an alternative way to setup stubbed methods.
|
106
|
+
# @yield note that the block is evaulated by calling Mock#instance_eval and so things like instance variables declared in the test will not be available within the block.
|
107
|
+
# @yield deprecated: use Object#tap or define stubs/expectations with an explicit receiver instead.
|
102
108
|
# @return [Mock] a new mock object
|
103
109
|
#
|
104
110
|
# @overload def stub_everything(name, &block)
|
data/lib/mocha/deprecation.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'mocha/
|
1
|
+
require 'mocha/backtrace_filter'
|
2
2
|
|
3
3
|
module Mocha
|
4
4
|
|
@@ -10,13 +10,16 @@ module Mocha
|
|
10
10
|
|
11
11
|
def warning(message)
|
12
12
|
@messages << message
|
13
|
-
|
14
|
-
|
13
|
+
unless mode == :disabled
|
14
|
+
filter = BacktraceFilter.new
|
15
|
+
location = filter.filtered(caller)[0]
|
16
|
+
$stderr.puts "Mocha deprecation warning at #{location}: #{message}"
|
17
|
+
end
|
15
18
|
end
|
16
19
|
|
17
20
|
end
|
18
21
|
|
19
|
-
self.mode =
|
22
|
+
self.mode = :enabled
|
20
23
|
self.messages = []
|
21
24
|
|
22
25
|
end
|
data/lib/mocha/inspect.rb
CHANGED
@@ -10,12 +10,6 @@ module Mocha
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
module StringMethods
|
14
|
-
def mocha_inspect
|
15
|
-
inspect.gsub(/\"/, "'")
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
13
|
module ArrayMethods
|
20
14
|
def mocha_inspect
|
21
15
|
"[#{collect { |member| member.mocha_inspect }.join(', ')}]"
|
@@ -46,10 +40,6 @@ class Object
|
|
46
40
|
include Mocha::ObjectMethods
|
47
41
|
end
|
48
42
|
|
49
|
-
class String
|
50
|
-
include Mocha::StringMethods
|
51
|
-
end
|
52
|
-
|
53
43
|
class Array
|
54
44
|
include Mocha::ArrayMethods
|
55
45
|
end
|
@@ -3,14 +3,6 @@ require 'mocha/class_method'
|
|
3
3
|
module Mocha
|
4
4
|
|
5
5
|
class InstanceMethod < ClassMethod
|
6
|
-
|
7
|
-
def method_exists?(method)
|
8
|
-
return true if stubbee.public_methods(false).include?(method)
|
9
|
-
return true if stubbee.protected_methods(false).include?(method)
|
10
|
-
return true if stubbee.private_methods(false).include?(method)
|
11
|
-
return false
|
12
|
-
end
|
13
|
-
|
14
6
|
end
|
15
7
|
|
16
8
|
end
|
data/lib/mocha/mini_test.rb
CHANGED
data/lib/mocha/mock.rb
CHANGED
@@ -8,6 +8,8 @@ require 'mocha/parameters_matcher'
|
|
8
8
|
require 'mocha/unexpected_invocation'
|
9
9
|
require 'mocha/argument_iterator'
|
10
10
|
require 'mocha/expectation_error_factory'
|
11
|
+
require 'mocha/deprecation'
|
12
|
+
require 'mocha/ruby_version'
|
11
13
|
|
12
14
|
module Mocha
|
13
15
|
|
@@ -259,7 +261,10 @@ module Mocha
|
|
259
261
|
@everything_stubbed = false
|
260
262
|
@responder = nil
|
261
263
|
@unexpected_invocation = nil
|
262
|
-
|
264
|
+
if block
|
265
|
+
Deprecation.warning('Passing a block is deprecated. Use Object#tap or define stubs/expectations with an explicit receiver instead.')
|
266
|
+
instance_eval(&block)
|
267
|
+
end
|
263
268
|
end
|
264
269
|
|
265
270
|
# @private
|
@@ -310,7 +315,7 @@ module Mocha
|
|
310
315
|
end
|
311
316
|
|
312
317
|
# @private
|
313
|
-
def
|
318
|
+
def respond_to_missing?(symbol, include_private = false)
|
314
319
|
if @responder then
|
315
320
|
if @responder.method(:respond_to?).arity > 1
|
316
321
|
@responder.respond_to?(symbol, include_private)
|
@@ -322,6 +327,13 @@ module Mocha
|
|
322
327
|
end
|
323
328
|
end
|
324
329
|
|
330
|
+
# @private
|
331
|
+
if PRE_RUBY_V19
|
332
|
+
def respond_to?(symbol, include_private = false)
|
333
|
+
respond_to_missing?(symbol, include_private)
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
325
337
|
# @private
|
326
338
|
def __verified__?(assertion_counter = nil)
|
327
339
|
@expectations.verified?(assertion_counter)
|
@@ -25,4 +25,4 @@ require 'mocha/parameter_matchers/optionally'
|
|
25
25
|
require 'mocha/parameter_matchers/regexp_matches'
|
26
26
|
require 'mocha/parameter_matchers/responds_with'
|
27
27
|
require 'mocha/parameter_matchers/yaml_equivalent'
|
28
|
-
require 'mocha/parameter_matchers/
|
28
|
+
require 'mocha/parameter_matchers/equivalent_uri'
|
@@ -1,5 +1,7 @@
|
|
1
|
+
require 'mocha/deprecation'
|
1
2
|
require 'mocha/parameter_matchers/base'
|
2
3
|
require 'uri'
|
4
|
+
require 'cgi'
|
3
5
|
|
4
6
|
module Mocha
|
5
7
|
module ParameterMatchers
|
@@ -7,27 +9,34 @@ module Mocha
|
|
7
9
|
# Matches a URI without regard to the ordering of parameters in the query string.
|
8
10
|
#
|
9
11
|
# @param [String] uri URI to match.
|
10
|
-
# @return [
|
12
|
+
# @return [EquivalentUri] parameter matcher.
|
11
13
|
#
|
12
14
|
# @see Expectation#with
|
13
15
|
#
|
14
|
-
# @example Actual URI
|
16
|
+
# @example Actual URI is equivalent.
|
15
17
|
# object = mock()
|
16
|
-
# object.expects(:method_1).with(
|
18
|
+
# object.expects(:method_1).with(equivalent_uri('http://example.com/foo?a=1&b=2))
|
17
19
|
# object.method_1('http://example.com/foo?b=2&a=1')
|
18
20
|
# # no error raised
|
19
21
|
#
|
20
|
-
# @example Actual URI
|
22
|
+
# @example Actual URI is not equivalent.
|
21
23
|
# object = mock()
|
22
|
-
# object.expects(:method_1).with(
|
24
|
+
# object.expects(:method_1).with(equivalent_uri('http://example.com/foo?a=1&b=2))
|
23
25
|
# object.method_1('http://example.com/foo?a=1&b=3')
|
24
26
|
# # error raised, because the query parameters were different
|
27
|
+
def equivalent_uri(uri)
|
28
|
+
EquivalentUri.new(uri)
|
29
|
+
end
|
30
|
+
|
31
|
+
# @deprecated Use {#equivalent_uri} instead.
|
25
32
|
def has_equivalent_query_string(uri)
|
26
|
-
|
33
|
+
Mocha::Deprecation.warning("`has_equivalent_query_string` is deprecated. Please use `equivalent_uri` instead.")
|
34
|
+
|
35
|
+
equivalent_uri(uri)
|
27
36
|
end
|
28
37
|
|
29
38
|
# Parameter matcher which matches URIs with equivalent query strings.
|
30
|
-
class
|
39
|
+
class EquivalentUri < Base
|
31
40
|
|
32
41
|
# @private
|
33
42
|
def initialize(uri)
|
@@ -43,13 +52,13 @@ module Mocha
|
|
43
52
|
|
44
53
|
# @private
|
45
54
|
def mocha_inspect
|
46
|
-
"
|
55
|
+
"equivalent_uri(#{@uri.mocha_inspect})"
|
47
56
|
end
|
48
57
|
|
49
58
|
private
|
50
59
|
# @private
|
51
60
|
def explode(uri)
|
52
|
-
query_hash = (uri.query || '')
|
61
|
+
query_hash = CGI.parse(uri.query || '')
|
53
62
|
URI::Generic::COMPONENT.inject({}){ |h, k| h.merge(k => uri.__send__(k)) }.merge(:query => query_hash)
|
54
63
|
end
|
55
64
|
|
@@ -80,7 +80,8 @@ module Mocha
|
|
80
80
|
return false unless parameter.respond_to?(:include?)
|
81
81
|
if @items.size == 1
|
82
82
|
if parameter.respond_to?(:any?) && !parameter.is_a?(String)
|
83
|
-
|
83
|
+
parameter = parameter.keys if parameter.is_a?(Hash)
|
84
|
+
return parameter.any? { |p| @items.first.to_matcher.matches?([p]) }
|
84
85
|
else
|
85
86
|
return parameter.include?(@items.first)
|
86
87
|
end
|
data/lib/mocha/version.rb
CHANGED
data/mocha.gemspec
CHANGED
@@ -7,6 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.name = "mocha"
|
8
8
|
s.version = Mocha::VERSION
|
9
9
|
s.licenses = ['MIT', 'BSD-2-Clause']
|
10
|
+
s.required_ruby_version = '>= 1.8.7'
|
10
11
|
|
11
12
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
13
|
s.authors = ["James Mead"]
|
@@ -58,7 +58,7 @@ class FailureMessagesTest < Mocha::TestCase
|
|
58
58
|
test_result = run_as_test do
|
59
59
|
'Foo'.expects(:bar)
|
60
60
|
end
|
61
|
-
assert_match Regexp.new("
|
61
|
+
assert_match Regexp.new(%{"Foo"}), test_result.failures[0].message
|
62
62
|
end
|
63
63
|
|
64
64
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require File.expand_path('../acceptance_test_helper', __FILE__)
|
2
2
|
require 'mocha/setup'
|
3
|
+
require 'deprecation_disabler'
|
3
4
|
|
4
5
|
class MockWithInitializerBlockTest < Mocha::TestCase
|
5
6
|
|
@@ -15,35 +16,41 @@ class MockWithInitializerBlockTest < Mocha::TestCase
|
|
15
16
|
|
16
17
|
def test_should_expect_two_method_invocations_and_receive_both_of_them
|
17
18
|
test_result = run_as_test do
|
18
|
-
|
19
|
-
|
20
|
-
|
19
|
+
DeprecationDisabler.disable_deprecations do
|
20
|
+
mock = mock() do
|
21
|
+
expects(:method_1)
|
22
|
+
expects(:method_2)
|
23
|
+
end
|
24
|
+
mock.method_1
|
25
|
+
mock.method_2
|
21
26
|
end
|
22
|
-
mock.method_1
|
23
|
-
mock.method_2
|
24
27
|
end
|
25
28
|
assert_passed(test_result)
|
26
29
|
end
|
27
30
|
|
28
31
|
def test_should_expect_two_method_invocations_but_receive_only_one_of_them
|
29
32
|
test_result = run_as_test do
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
+
DeprecationDisabler.disable_deprecations do
|
34
|
+
mock = mock() do
|
35
|
+
expects(:method_1)
|
36
|
+
expects(:method_2)
|
37
|
+
end
|
38
|
+
mock.method_1
|
33
39
|
end
|
34
|
-
mock.method_1
|
35
40
|
end
|
36
41
|
assert_failed(test_result)
|
37
42
|
end
|
38
43
|
|
39
44
|
def test_should_stub_methods
|
40
45
|
test_result = run_as_test do
|
41
|
-
|
42
|
-
|
43
|
-
|
46
|
+
DeprecationDisabler.disable_deprecations do
|
47
|
+
mock = mock() do
|
48
|
+
stubs(:method_1).returns(1)
|
49
|
+
stubs(:method_2).returns(2)
|
50
|
+
end
|
51
|
+
assert_equal 1, mock.method_1
|
52
|
+
assert_equal 2, mock.method_2
|
44
53
|
end
|
45
|
-
assert_equal 1, mock.method_1
|
46
|
-
assert_equal 2, mock.method_2
|
47
54
|
end
|
48
55
|
assert_passed(test_result)
|
49
56
|
end
|
@@ -243,60 +243,24 @@ class ParameterMatcherTest < Mocha::TestCase
|
|
243
243
|
assert_failed(test_result)
|
244
244
|
end
|
245
245
|
|
246
|
-
def
|
246
|
+
def test_should_match_parameter_that_is_equivalent_uri
|
247
247
|
test_result = run_as_test do
|
248
248
|
mock = mock()
|
249
|
-
mock.expects(:method).with(
|
249
|
+
mock.expects(:method).with(equivalent_uri('http://example.com/foo?b=2&a=1'))
|
250
250
|
mock.method('http://example.com/foo?a=1&b=2')
|
251
251
|
end
|
252
252
|
assert_passed(test_result)
|
253
253
|
end
|
254
254
|
|
255
|
-
def
|
255
|
+
def test_should_not_match_parameter_that_is_not_equivalent
|
256
256
|
test_result = run_as_test do
|
257
257
|
mock = mock()
|
258
|
-
mock.expects(:method).with(
|
258
|
+
mock.expects(:method).with(equivalent_uri('http://example.com/foo?a=1'))
|
259
259
|
mock.method('http://example.com/foo?a=1&b=2')
|
260
260
|
end
|
261
|
-
assert_passed(test_result)
|
262
|
-
end
|
263
|
-
|
264
|
-
def test_should_not_match_parameter_that_does_not_have_the_same_query_parameters
|
265
|
-
test_result = run_as_test do
|
266
|
-
mock = mock()
|
267
|
-
mock.expects(:method).with(has_equivalent_query_string('http://example.com/foo?a=1'))
|
268
|
-
mock.method('http://example.com/foo?a=1&b=2')
|
269
|
-
end
|
270
|
-
assert_failed(test_result)
|
271
|
-
end
|
272
|
-
|
273
|
-
def test_should_not_match_parameter_that_has_no_query_parameters_when_they_are_expected
|
274
|
-
test_result = run_as_test do
|
275
|
-
mock = mock()
|
276
|
-
mock.expects(:method).with(has_equivalent_query_string('http://example.com/foo'))
|
277
|
-
mock.method('http://example.com/foo?a=1&b=2')
|
278
|
-
end
|
279
|
-
assert_failed(test_result)
|
280
|
-
end
|
281
|
-
|
282
|
-
def test_should_not_match_parameter_that_has_the_same_query_string_bit_which_differs_otherwise
|
283
|
-
test_result = run_as_test do
|
284
|
-
mock = mock()
|
285
|
-
mock.expects(:method).with(has_equivalent_query_string('http://a.example.com/foo?a=1&b=2'))
|
286
|
-
mock.method('http://b.example.com/foo?a=1&b=2')
|
287
|
-
end
|
288
261
|
assert_failed(test_result)
|
289
262
|
end
|
290
263
|
|
291
|
-
def test_should_match_parameter_with_no_domain_or_scheme
|
292
|
-
test_result = run_as_test do
|
293
|
-
mock = mock()
|
294
|
-
mock.expects(:method).with(has_equivalent_query_string('/foo?a=1&b=2'))
|
295
|
-
mock.method('/foo?a=1&b=2')
|
296
|
-
end
|
297
|
-
assert_passed(test_result)
|
298
|
-
end
|
299
|
-
|
300
264
|
def test_should_match_parameter_when_value_is_divisible_by_four
|
301
265
|
test_result = run_as_test do
|
302
266
|
mock = mock()
|
@@ -148,7 +148,7 @@ class SequenceTest < Mocha::TestCase
|
|
148
148
|
mock.first
|
149
149
|
end
|
150
150
|
assert_failed(test_result)
|
151
|
-
assert_match Regexp.new(
|
151
|
+
assert_match Regexp.new(%{in sequence "one"}), test_result.failures.first.message
|
152
152
|
end
|
153
153
|
|
154
154
|
def test_should_allow_expectations_to_be_in_more_than_one_sequence
|
@@ -166,8 +166,8 @@ class SequenceTest < Mocha::TestCase
|
|
166
166
|
mock.second
|
167
167
|
end
|
168
168
|
assert_failed(test_result)
|
169
|
-
assert_match Regexp.new(
|
170
|
-
assert_match Regexp.new(
|
169
|
+
assert_match Regexp.new(%{in sequence "one"}), test_result.failures.first.message
|
170
|
+
assert_match Regexp.new(%{in sequence "two"}), test_result.failures.first.message
|
171
171
|
end
|
172
172
|
|
173
173
|
def test_should_have_shortcut_for_expectations_to_be_in_more_than_one_sequence
|
@@ -185,8 +185,8 @@ class SequenceTest < Mocha::TestCase
|
|
185
185
|
mock.second
|
186
186
|
end
|
187
187
|
assert_failed(test_result)
|
188
|
-
assert_match Regexp.new(
|
189
|
-
assert_match Regexp.new(
|
188
|
+
assert_match Regexp.new(%{in sequence "one"}), test_result.failures.first.message
|
189
|
+
assert_match Regexp.new(%{in sequence "two"}), test_result.failures.first.message
|
190
190
|
end
|
191
191
|
|
192
192
|
end
|
@@ -14,7 +14,11 @@ class StubModuleMethodTest < Mocha::TestCase
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_should_stub_method_within_test
|
17
|
-
mod = Module.new
|
17
|
+
mod = Module.new do
|
18
|
+
def self.my_module_method
|
19
|
+
:original_return_value
|
20
|
+
end
|
21
|
+
end
|
18
22
|
test_result = run_as_test do
|
19
23
|
mod.stubs(:my_module_method).returns(:new_return_value)
|
20
24
|
assert_equal :new_return_value, mod.my_module_method
|
@@ -23,7 +27,14 @@ class StubModuleMethodTest < Mocha::TestCase
|
|
23
27
|
end
|
24
28
|
|
25
29
|
def test_should_leave_stubbed_public_method_unchanged_after_test
|
26
|
-
mod = Module.new
|
30
|
+
mod = Module.new do
|
31
|
+
class << self
|
32
|
+
def my_module_method
|
33
|
+
:original_return_value
|
34
|
+
end
|
35
|
+
public :my_module_method
|
36
|
+
end
|
37
|
+
end
|
27
38
|
run_as_test do
|
28
39
|
mod.stubs(:my_module_method).returns(:new_return_value)
|
29
40
|
end
|
@@ -32,7 +43,17 @@ class StubModuleMethodTest < Mocha::TestCase
|
|
32
43
|
end
|
33
44
|
|
34
45
|
def test_should_leave_stubbed_protected_method_unchanged_after_test
|
35
|
-
mod = Module.new
|
46
|
+
mod = Module.new do
|
47
|
+
class << self
|
48
|
+
def my_module_method
|
49
|
+
:original_return_value
|
50
|
+
end
|
51
|
+
protected :my_module_method
|
52
|
+
def my_unprotected_module_method
|
53
|
+
my_module_method
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
36
57
|
run_as_test do
|
37
58
|
mod.stubs(:my_module_method).returns(:new_return_value)
|
38
59
|
end
|
@@ -41,7 +62,14 @@ class StubModuleMethodTest < Mocha::TestCase
|
|
41
62
|
end
|
42
63
|
|
43
64
|
def test_should_leave_stubbed_private_method_unchanged_after_test
|
44
|
-
mod = Module.new
|
65
|
+
mod = Module.new do
|
66
|
+
class << self
|
67
|
+
def my_module_method
|
68
|
+
:original_return_value
|
69
|
+
end
|
70
|
+
private :my_module_method
|
71
|
+
end
|
72
|
+
end
|
45
73
|
run_as_test do
|
46
74
|
mod.stubs(:my_module_method).returns(:new_return_value)
|
47
75
|
end
|
@@ -50,7 +78,11 @@ class StubModuleMethodTest < Mocha::TestCase
|
|
50
78
|
end
|
51
79
|
|
52
80
|
def test_should_reset_expectations_after_test
|
53
|
-
mod = Module.new
|
81
|
+
mod = Module.new do
|
82
|
+
def self.my_module_method
|
83
|
+
:original_return_value
|
84
|
+
end
|
85
|
+
end
|
54
86
|
run_as_test do
|
55
87
|
mod.stubs(:my_module_method)
|
56
88
|
end
|
@@ -58,8 +90,14 @@ class StubModuleMethodTest < Mocha::TestCase
|
|
58
90
|
end
|
59
91
|
|
60
92
|
def test_should_be_able_to_stub_a_superclass_method
|
61
|
-
supermod = Module.new
|
62
|
-
|
93
|
+
supermod = Module.new do
|
94
|
+
def self.my_superclass_method
|
95
|
+
:original_return_value
|
96
|
+
end
|
97
|
+
end
|
98
|
+
mod = Module.new do
|
99
|
+
include supermod
|
100
|
+
end
|
63
101
|
test_result = run_as_test do
|
64
102
|
mod.stubs(:my_superclass_method).returns(:new_return_value)
|
65
103
|
assert_equal :new_return_value, mod.my_superclass_method
|
@@ -16,7 +16,10 @@ class StubbaTestResultTest < Mocha::TestCase
|
|
16
16
|
|
17
17
|
def test_should_include_expectation_verification_in_assertion_count
|
18
18
|
test_result = run_as_test do
|
19
|
-
object = Class.new
|
19
|
+
object = Class.new do
|
20
|
+
def message
|
21
|
+
end
|
22
|
+
end.new
|
20
23
|
object.expects(:message)
|
21
24
|
object.message
|
22
25
|
end
|
@@ -32,7 +35,10 @@ class StubbaTestResultTest < Mocha::TestCase
|
|
32
35
|
|
33
36
|
def test_should_not_include_stubbing_expectation_verification_in_assertion_count
|
34
37
|
test_result = run_as_test do
|
35
|
-
object = Class.new
|
38
|
+
object = Class.new do
|
39
|
+
def message
|
40
|
+
end
|
41
|
+
end.new
|
36
42
|
object.stubs(:message)
|
37
43
|
object.message
|
38
44
|
end
|
@@ -41,7 +47,10 @@ class StubbaTestResultTest < Mocha::TestCase
|
|
41
47
|
|
42
48
|
def test_should_include_expectation_verification_failure_in_failure_count
|
43
49
|
test_result = run_as_test do
|
44
|
-
object = Class.new
|
50
|
+
object = Class.new do
|
51
|
+
def message
|
52
|
+
end
|
53
|
+
end.new
|
45
54
|
object.expects(:message)
|
46
55
|
end
|
47
56
|
assert_equal 1, test_result.failure_count
|
@@ -15,7 +15,10 @@ class StubbingOnNonMockObjectTest < Mocha::TestCase
|
|
15
15
|
|
16
16
|
def test_should_allow_stubbing_method_on_non_mock_object
|
17
17
|
Mocha::Configuration.allow(:stubbing_method_on_non_mock_object)
|
18
|
-
non_mock_object = Class.new
|
18
|
+
non_mock_object = Class.new do
|
19
|
+
def existing_method
|
20
|
+
end
|
21
|
+
end
|
19
22
|
test_result = run_as_test do
|
20
23
|
non_mock_object.stubs(:existing_method)
|
21
24
|
end
|
@@ -25,7 +28,10 @@ class StubbingOnNonMockObjectTest < Mocha::TestCase
|
|
25
28
|
|
26
29
|
def test_should_warn_on_stubbing_method_on_non_mock_object
|
27
30
|
Mocha::Configuration.warn_when(:stubbing_method_on_non_mock_object)
|
28
|
-
non_mock_object = Class.new
|
31
|
+
non_mock_object = Class.new do
|
32
|
+
def existing_method
|
33
|
+
end
|
34
|
+
end
|
29
35
|
test_result = run_as_test do
|
30
36
|
non_mock_object.stubs(:existing_method)
|
31
37
|
end
|
@@ -35,7 +41,10 @@ class StubbingOnNonMockObjectTest < Mocha::TestCase
|
|
35
41
|
|
36
42
|
def test_should_prevent_stubbing_method_on_non_mock_object
|
37
43
|
Mocha::Configuration.prevent(:stubbing_method_on_non_mock_object)
|
38
|
-
non_mock_object = Class.new
|
44
|
+
non_mock_object = Class.new do
|
45
|
+
def existing_method
|
46
|
+
end
|
47
|
+
end
|
39
48
|
test_result = run_as_test do
|
40
49
|
non_mock_object.stubs(:existing_method)
|
41
50
|
end
|
@@ -44,7 +53,10 @@ class StubbingOnNonMockObjectTest < Mocha::TestCase
|
|
44
53
|
end
|
45
54
|
|
46
55
|
def test_should_default_to_allow_stubbing_method_on_non_mock_object
|
47
|
-
non_mock_object = Class.new
|
56
|
+
non_mock_object = Class.new do
|
57
|
+
def existing_method
|
58
|
+
end
|
59
|
+
end
|
48
60
|
test_result = run_as_test do
|
49
61
|
non_mock_object.stubs(:existing_method)
|
50
62
|
end
|
data/test/execution_point.rb
CHANGED
@@ -10,14 +10,16 @@ class ExecutionPoint
|
|
10
10
|
@backtrace = backtrace
|
11
11
|
end
|
12
12
|
|
13
|
+
def first_relevant_line_of_backtrace
|
14
|
+
@backtrace && (@backtrace.reject { |l| /\Aorg\/jruby\//.match(l) }.first || 'unknown:0')
|
15
|
+
end
|
16
|
+
|
13
17
|
def file_name
|
14
|
-
|
15
|
-
/\A(.*?):\d+/.match(@backtrace.first)[1]
|
18
|
+
/\A(.*?):\d+/.match(first_relevant_line_of_backtrace)[1]
|
16
19
|
end
|
17
20
|
|
18
21
|
def line_number
|
19
|
-
|
20
|
-
Integer(/\A.*?:(\d+)/.match(@backtrace.first)[1])
|
22
|
+
Integer(/\A.*?:(\d+)/.match(first_relevant_line_of_backtrace)[1])
|
21
23
|
end
|
22
24
|
|
23
25
|
def ==(other)
|
@@ -76,6 +76,7 @@ end
|
|
76
76
|
klass.define_instance_method(:any_instance) { any_instance }
|
77
77
|
method = AnyInstanceMethod.new(klass, :method_x)
|
78
78
|
method.replace_instance_method(:restore_original_method) { }
|
79
|
+
method.replace_instance_method(:reset_mocha) { }
|
79
80
|
method.define_instance_accessor(:remove_called)
|
80
81
|
method.replace_instance_method(:remove_new_method) { self.remove_called = true }
|
81
82
|
|
@@ -92,6 +93,7 @@ end
|
|
92
93
|
klass.define_instance_method(:any_instance) { any_instance }
|
93
94
|
method = AnyInstanceMethod.new(klass, :method_x)
|
94
95
|
method.replace_instance_method(:remove_new_method) { }
|
96
|
+
method.replace_instance_method(:reset_mocha) { }
|
95
97
|
method.define_instance_accessor(:restore_called)
|
96
98
|
method.replace_instance_method(:restore_original_method) { self.restore_called = true }
|
97
99
|
|
@@ -11,6 +11,7 @@ class ClassMethodTest < Mocha::TestCase
|
|
11
11
|
unless RUBY_V2_PLUS
|
12
12
|
def test_should_hide_original_method
|
13
13
|
klass = Class.new { def self.method_x; end }
|
14
|
+
klass.__metaclass__.send(:alias_method, :_method, :method)
|
14
15
|
method = ClassMethod.new(klass, :method_x)
|
15
16
|
|
16
17
|
method.hide_original_method
|
@@ -59,6 +60,7 @@ end
|
|
59
60
|
|
60
61
|
def test_should_restore_original_method
|
61
62
|
klass = Class.new { def self.method_x; :original_result; end }
|
63
|
+
klass.__metaclass__.send(:alias_method, :_method, :method)
|
62
64
|
method = ClassMethod.new(klass, :method_x)
|
63
65
|
|
64
66
|
method.hide_original_method
|
@@ -72,6 +74,7 @@ end
|
|
72
74
|
|
73
75
|
def test_should_restore_original_method_accepting_a_block_parameter
|
74
76
|
klass = Class.new { def self.method_x(&block); block.call if block_given? ; end }
|
77
|
+
klass.__metaclass__.send(:alias_method, :_method, :method)
|
75
78
|
method = ClassMethod.new(klass, :method_x)
|
76
79
|
|
77
80
|
method.hide_original_method
|
@@ -121,6 +124,7 @@ end
|
|
121
124
|
method = ClassMethod.new(klass, :method_x)
|
122
125
|
mocha = build_mock
|
123
126
|
klass.define_instance_method(:mocha) { mocha }
|
127
|
+
method.replace_instance_method(:reset_mocha) { }
|
124
128
|
method.define_instance_accessor(:remove_called)
|
125
129
|
method.replace_instance_method(:remove_new_method) { self.remove_called = true }
|
126
130
|
|
@@ -134,6 +138,7 @@ end
|
|
134
138
|
mocha = build_mock
|
135
139
|
klass.define_instance_method(:mocha) { mocha }
|
136
140
|
method = ClassMethod.new(klass, :method_x)
|
141
|
+
method.replace_instance_method(:reset_mocha) { }
|
137
142
|
method.define_instance_accessor(:restore_called)
|
138
143
|
method.replace_instance_method(:restore_original_method) { self.restore_called = true }
|
139
144
|
|
@@ -174,10 +179,9 @@ end
|
|
174
179
|
def test_should_return_mock_for_stubbee
|
175
180
|
mocha = Object.new
|
176
181
|
stubbee = Object.new
|
177
|
-
stubbee.
|
178
|
-
stubbee.mocha = nil
|
182
|
+
stubbee.define_instance_method(:mocha) { mocha }
|
179
183
|
method = ClassMethod.new(stubbee, :method_name)
|
180
|
-
assert_equal
|
184
|
+
assert_equal mocha, method.mock
|
181
185
|
end
|
182
186
|
|
183
187
|
def test_should_not_match_if_other_object_has_a_different_class
|
@@ -343,7 +343,7 @@ class ExpectationTest < Mocha::TestCase
|
|
343
343
|
sequence_two = Sequence.new('two')
|
344
344
|
expectation = Expectation.new(mock, :expected_method).with(1, 2, {'a' => true}, {:b => false}, [1, 2, 3]).in_sequence(sequence_one, sequence_two)
|
345
345
|
assert !expectation.verified?
|
346
|
-
assert_match
|
346
|
+
assert_match %{mock.expected_method(1, 2, {"a" => true}, {:b => false}, [1, 2, 3]); in sequence "one"; in sequence "two"}, expectation.mocha_inspect
|
347
347
|
end
|
348
348
|
|
349
349
|
class FakeConstraint
|
data/test/unit/mock_test.rb
CHANGED
@@ -334,6 +334,14 @@ class MockTest < Mocha::TestCase
|
|
334
334
|
assert_match(/unexpected invocation/, e.message)
|
335
335
|
end
|
336
336
|
|
337
|
+
unless PRE_RUBY_V19
|
338
|
+
def test_expectation_is_defined_on_mock
|
339
|
+
mock = build_mock
|
340
|
+
mock.expects(:method1)
|
341
|
+
assert defined? mock.method1
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
337
345
|
private
|
338
346
|
|
339
347
|
def build_mock
|
data/test/unit/mockery_test.rb
CHANGED
@@ -2,10 +2,12 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
require 'mocha/mockery'
|
3
3
|
require 'mocha/state_machine'
|
4
4
|
require 'mocha/expectation_error_factory'
|
5
|
+
require 'deprecation_disabler'
|
5
6
|
|
6
7
|
class MockeryTest < Mocha::TestCase
|
7
8
|
|
8
9
|
include Mocha
|
10
|
+
include DeprecationDisabler
|
9
11
|
|
10
12
|
def test_should_build_instance_of_mockery
|
11
13
|
mockery = Mockery.instance
|
@@ -28,16 +30,20 @@ class MockeryTest < Mocha::TestCase
|
|
28
30
|
|
29
31
|
def test_should_raise_expectation_error_because_not_all_expectations_are_satisfied
|
30
32
|
mockery = Mockery.new
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
33
|
+
disable_deprecations do
|
34
|
+
mock_1 = mockery.named_mock('mock-1') { expects(:method_1) }
|
35
|
+
mock_2 = mockery.named_mock('mock-2') { expects(:method_2) }
|
36
|
+
1.times { mock_1.method_1 }
|
37
|
+
0.times { mock_2.method_2 }
|
38
|
+
end
|
35
39
|
assert_raises(ExpectationErrorFactory.exception_class) { mockery.verify }
|
36
40
|
end
|
37
41
|
|
38
42
|
def test_should_reset_list_of_mocks_on_teardown
|
39
43
|
mockery = Mockery.new
|
40
|
-
|
44
|
+
disable_deprecations do
|
45
|
+
mockery.unnamed_mock { expects(:my_method) }
|
46
|
+
end
|
41
47
|
mockery.teardown
|
42
48
|
assert_nothing_raised(ExpectationErrorFactory.exception_class) { mockery.verify }
|
43
49
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.expand_path('../../../test_helper', __FILE__)
|
2
|
+
require 'deprecation_disabler'
|
3
|
+
require 'mocha/parameter_matchers/equivalent_uri'
|
4
|
+
|
5
|
+
class EquivalentUriMatchesTest < Mocha::TestCase
|
6
|
+
|
7
|
+
include Mocha::ParameterMatchers
|
8
|
+
include DeprecationDisabler
|
9
|
+
|
10
|
+
def test_should_match_identical_uri
|
11
|
+
matcher = equivalent_uri('http://example.com/foo?a=1&b=2')
|
12
|
+
assert matcher.matches?(['http://example.com/foo?a=1&b=2'])
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_should_support_legacy_matcher_method
|
16
|
+
disable_deprecations do
|
17
|
+
matcher = has_equivalent_query_string('http://example.com/foo?a=1&b=2')
|
18
|
+
assert matcher.matches?(['http://example.com/foo?a=1&b=2'])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_should_match_uri_with_rearranged_query_string
|
23
|
+
matcher = equivalent_uri('http://example.com/foo?b=2&a=1')
|
24
|
+
assert matcher.matches?(['http://example.com/foo?a=1&b=2'])
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_should_not_match_uri_with_different_query_string
|
28
|
+
matcher = equivalent_uri('http://example.com/foo?a=1')
|
29
|
+
assert !matcher.matches?(['http://example.com/foo?a=1&b=2'])
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_should_not_match_uri_when_no_query_string_expected
|
33
|
+
matcher = equivalent_uri('http://example.com/foo')
|
34
|
+
assert !matcher.matches?(['http://example.com/foo?a=1&b=2'])
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_should_not_match_uri_with_different_domain
|
38
|
+
matcher = equivalent_uri('http://a.example.com/foo?a=1&b=2')
|
39
|
+
assert !matcher.matches?(['http://b.example.com/foo?a=1&b=2'])
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_should_match_uri_without_scheme_and_domain
|
43
|
+
matcher = equivalent_uri('/foo?a=1&b=2')
|
44
|
+
assert matcher.matches?(['/foo?a=1&b=2'])
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_should_match_uri_with_query_string_containing_blank_value
|
48
|
+
matcher = equivalent_uri('http://example.com/foo?a=&b=2')
|
49
|
+
assert matcher.matches?(['http://example.com/foo?a=&b=2'])
|
50
|
+
end
|
51
|
+
end
|
@@ -31,12 +31,12 @@ class HasEntryTest < Mocha::TestCase
|
|
31
31
|
|
32
32
|
def test_should_describe_matcher_with_key_value_pair
|
33
33
|
matcher = has_entry(:key_1, 'value_1')
|
34
|
-
assert_equal
|
34
|
+
assert_equal %{has_entry(:key_1 => "value_1")}, matcher.mocha_inspect
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_should_describe_matcher_with_entry
|
38
38
|
matcher = has_entry(:key_1 => 'value_1')
|
39
|
-
assert_equal
|
39
|
+
assert_equal %{has_entry(:key_1 => "value_1")}, matcher.mocha_inspect
|
40
40
|
end
|
41
41
|
|
42
42
|
def test_should_match_hash_including_specified_entry_with_nested_key_matcher
|
@@ -21,7 +21,7 @@ class HasValueTest < Mocha::TestCase
|
|
21
21
|
|
22
22
|
def test_should_describe_matcher
|
23
23
|
matcher = has_value('value_1')
|
24
|
-
assert_equal
|
24
|
+
assert_equal %{has_value("value_1")}, matcher.mocha_inspect
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_should_match_hash_including_specified_value_with_nested_value_matcher
|
@@ -15,6 +15,11 @@ class IncludesTest < Mocha::TestCase
|
|
15
15
|
assert matcher.matches?([[:x, :y, :z]])
|
16
16
|
end
|
17
17
|
|
18
|
+
def test_should_match_object_including_array_value
|
19
|
+
matcher = includes([:x])
|
20
|
+
assert matcher.matches?([[[:x], [:y], [:z]]])
|
21
|
+
end
|
22
|
+
|
18
23
|
def test_should_match_object_including_all_values
|
19
24
|
matcher = includes(:x, :y, :z)
|
20
25
|
assert matcher.matches?([[:x, :y, :z]])
|
data/test/unit/sequence_test.rb
CHANGED
@@ -98,7 +98,7 @@ class SequenceTest < Mocha::TestCase
|
|
98
98
|
sequence = Sequence.new('wibble')
|
99
99
|
expectation = FakeExpectation.new
|
100
100
|
sequence.constrain_as_next_in_sequence(expectation)
|
101
|
-
assert_equal
|
101
|
+
assert_equal %{in sequence "wibble"}, expectation.ordering_constraints[0].mocha_inspect
|
102
102
|
end
|
103
103
|
|
104
104
|
end
|
@@ -3,9 +3,9 @@ require 'mocha/inspect'
|
|
3
3
|
|
4
4
|
class StringInspectTest < Mocha::TestCase
|
5
5
|
|
6
|
-
def
|
6
|
+
def test_should_use_default_inspect_method
|
7
7
|
string = "my_string"
|
8
|
-
assert_equal "
|
8
|
+
assert_equal %{"my_string"}, string.mocha_inspect
|
9
9
|
end
|
10
10
|
|
11
11
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mocha
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Mead
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: metaclass
|
@@ -179,6 +179,7 @@ files:
|
|
179
179
|
- lib/mocha/logger.rb
|
180
180
|
- lib/mocha/method_matcher.rb
|
181
181
|
- lib/mocha/mini_test.rb
|
182
|
+
- lib/mocha/minitest.rb
|
182
183
|
- lib/mocha/mock.rb
|
183
184
|
- lib/mocha/mockery.rb
|
184
185
|
- lib/mocha/module_method.rb
|
@@ -194,6 +195,7 @@ files:
|
|
194
195
|
- lib/mocha/parameter_matchers/anything.rb
|
195
196
|
- lib/mocha/parameter_matchers/base.rb
|
196
197
|
- lib/mocha/parameter_matchers/equals.rb
|
198
|
+
- lib/mocha/parameter_matchers/equivalent_uri.rb
|
197
199
|
- lib/mocha/parameter_matchers/has_entries.rb
|
198
200
|
- lib/mocha/parameter_matchers/has_entry.rb
|
199
201
|
- lib/mocha/parameter_matchers/has_key.rb
|
@@ -205,7 +207,6 @@ files:
|
|
205
207
|
- lib/mocha/parameter_matchers/not.rb
|
206
208
|
- lib/mocha/parameter_matchers/object.rb
|
207
209
|
- lib/mocha/parameter_matchers/optionally.rb
|
208
|
-
- lib/mocha/parameter_matchers/query_string.rb
|
209
210
|
- lib/mocha/parameter_matchers/regexp_matches.rb
|
210
211
|
- lib/mocha/parameter_matchers/responds_with.rb
|
211
212
|
- lib/mocha/parameter_matchers/yaml_equivalent.rb
|
@@ -330,6 +331,7 @@ files:
|
|
330
331
|
- test/unit/parameter_matchers/any_of_test.rb
|
331
332
|
- test/unit/parameter_matchers/anything_test.rb
|
332
333
|
- test/unit/parameter_matchers/equals_test.rb
|
334
|
+
- test/unit/parameter_matchers/equivalent_uri_test.rb
|
333
335
|
- test/unit/parameter_matchers/has_entries_test.rb
|
334
336
|
- test/unit/parameter_matchers/has_entry_test.rb
|
335
337
|
- test/unit/parameter_matchers/has_key_test.rb
|
@@ -368,7 +370,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
368
370
|
requirements:
|
369
371
|
- - ">="
|
370
372
|
- !ruby/object:Gem::Version
|
371
|
-
version:
|
373
|
+
version: 1.8.7
|
372
374
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
373
375
|
requirements:
|
374
376
|
- - ">="
|
@@ -376,7 +378,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
376
378
|
version: '0'
|
377
379
|
requirements: []
|
378
380
|
rubyforge_project: mocha
|
379
|
-
rubygems_version: 2.
|
381
|
+
rubygems_version: 2.6.11
|
380
382
|
signing_key:
|
381
383
|
specification_version: 3
|
382
384
|
summary: Mocking and stubbing library
|