mocha-macruby 0.9.8.20100129120100
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 +3 -0
- data/MIT-LICENSE +7 -0
- data/README +39 -0
- data/RELEASE +294 -0
- data/Rakefile +214 -0
- data/examples/misc.rb +43 -0
- data/examples/mocha.rb +25 -0
- data/examples/stubba.rb +64 -0
- data/lib/mocha.rb +3 -0
- data/lib/mocha/any_instance_method.rb +59 -0
- data/lib/mocha/api.rb +173 -0
- data/lib/mocha/argument_iterator.rb +21 -0
- data/lib/mocha/backtrace_filter.rb +17 -0
- data/lib/mocha/cardinality.rb +95 -0
- data/lib/mocha/central.rb +27 -0
- data/lib/mocha/change_state_side_effect.rb +19 -0
- data/lib/mocha/class_method.rb +117 -0
- data/lib/mocha/configuration.rb +79 -0
- data/lib/mocha/deprecation.rb +22 -0
- data/lib/mocha/exception_raiser.rb +17 -0
- data/lib/mocha/expectation.rb +476 -0
- data/lib/mocha/expectation_error.rb +15 -0
- data/lib/mocha/expectation_list.rb +50 -0
- data/lib/mocha/in_state_ordering_constraint.rb +19 -0
- data/lib/mocha/inspect.rb +67 -0
- data/lib/mocha/instance_method.rb +16 -0
- data/lib/mocha/integration.rb +38 -0
- data/lib/mocha/integration/mini_test.rb +21 -0
- data/lib/mocha/integration/mini_test/assertion_counter.rb +23 -0
- data/lib/mocha/integration/mini_test/version_131_and_above.rb +50 -0
- data/lib/mocha/integration/test_unit.rb +40 -0
- data/lib/mocha/integration/test_unit/assertion_counter.rb +23 -0
- data/lib/mocha/integration/test_unit/gem_version_200.rb +49 -0
- data/lib/mocha/integration/test_unit/gem_version_201_and_above.rb +49 -0
- data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +48 -0
- data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +50 -0
- data/lib/mocha/is_a.rb +9 -0
- data/lib/mocha/logger.rb +15 -0
- data/lib/mocha/metaclass.rb +13 -0
- data/lib/mocha/method_matcher.rb +21 -0
- data/lib/mocha/mock.rb +200 -0
- data/lib/mocha/mockery.rb +181 -0
- data/lib/mocha/module_method.rb +16 -0
- data/lib/mocha/multiple_yields.rb +20 -0
- data/lib/mocha/names.rb +53 -0
- data/lib/mocha/no_yields.rb +11 -0
- data/lib/mocha/object.rb +187 -0
- data/lib/mocha/parameter_matchers.rb +27 -0
- data/lib/mocha/parameter_matchers/all_of.rb +42 -0
- data/lib/mocha/parameter_matchers/any_of.rb +47 -0
- data/lib/mocha/parameter_matchers/any_parameters.rb +40 -0
- data/lib/mocha/parameter_matchers/anything.rb +33 -0
- data/lib/mocha/parameter_matchers/base.rb +15 -0
- data/lib/mocha/parameter_matchers/equals.rb +42 -0
- data/lib/mocha/parameter_matchers/has_entries.rb +45 -0
- data/lib/mocha/parameter_matchers/has_entry.rb +57 -0
- data/lib/mocha/parameter_matchers/has_key.rb +43 -0
- data/lib/mocha/parameter_matchers/has_value.rb +43 -0
- data/lib/mocha/parameter_matchers/includes.rb +41 -0
- data/lib/mocha/parameter_matchers/instance_of.rb +42 -0
- data/lib/mocha/parameter_matchers/is_a.rb +42 -0
- data/lib/mocha/parameter_matchers/kind_of.rb +42 -0
- data/lib/mocha/parameter_matchers/not.rb +42 -0
- data/lib/mocha/parameter_matchers/object.rb +15 -0
- data/lib/mocha/parameter_matchers/optionally.rb +55 -0
- data/lib/mocha/parameter_matchers/regexp_matches.rb +44 -0
- data/lib/mocha/parameter_matchers/responds_with.rb +43 -0
- data/lib/mocha/parameter_matchers/yaml_equivalent.rb +43 -0
- data/lib/mocha/parameters_matcher.rb +37 -0
- data/lib/mocha/pretty_parameters.rb +28 -0
- data/lib/mocha/return_values.rb +31 -0
- data/lib/mocha/sequence.rb +42 -0
- data/lib/mocha/single_return_value.rb +17 -0
- data/lib/mocha/single_yield.rb +18 -0
- data/lib/mocha/standalone.rb +1 -0
- data/lib/mocha/state_machine.rb +91 -0
- data/lib/mocha/stubbing_error.rb +16 -0
- data/lib/mocha/unexpected_invocation.rb +18 -0
- data/lib/mocha/yield_parameters.rb +31 -0
- data/lib/mocha_standalone.rb +2 -0
- data/lib/stubba.rb +4 -0
- data/test/acceptance/acceptance_test_helper.rb +38 -0
- data/test/acceptance/api_test.rb +139 -0
- data/test/acceptance/bug_18914_test.rb +43 -0
- data/test/acceptance/bug_21465_test.rb +34 -0
- data/test/acceptance/bug_21563_test.rb +25 -0
- data/test/acceptance/expected_invocation_count_test.rb +196 -0
- data/test/acceptance/failure_messages_test.rb +64 -0
- data/test/acceptance/minitest_test.rb +153 -0
- data/test/acceptance/mocha_example_test.rb +98 -0
- data/test/acceptance/mocha_test_result_test.rb +84 -0
- data/test/acceptance/mock_test.rb +100 -0
- data/test/acceptance/mock_with_initializer_block_test.rb +51 -0
- data/test/acceptance/mocked_methods_dispatch_test.rb +78 -0
- data/test/acceptance/optional_parameters_test.rb +70 -0
- data/test/acceptance/parameter_matcher_test.rb +209 -0
- data/test/acceptance/partial_mocks_test.rb +47 -0
- data/test/acceptance/return_value_test.rb +52 -0
- data/test/acceptance/sequence_test.rb +186 -0
- data/test/acceptance/states_test.rb +70 -0
- data/test/acceptance/stub_any_instance_method_test.rb +195 -0
- data/test/acceptance/stub_class_method_test.rb +203 -0
- data/test/acceptance/stub_everything_test.rb +56 -0
- data/test/acceptance/stub_instance_method_test.rb +203 -0
- data/test/acceptance/stub_module_method_test.rb +163 -0
- data/test/acceptance/stub_test.rb +52 -0
- data/test/acceptance/stubba_example_test.rb +102 -0
- data/test/acceptance/stubba_test.rb +15 -0
- data/test/acceptance/stubba_test_result_test.rb +66 -0
- data/test/acceptance/stubbing_error_backtrace_test.rb +64 -0
- data/test/acceptance/stubbing_method_unnecessarily_test.rb +65 -0
- data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +130 -0
- data/test/acceptance/stubbing_non_existent_class_method_test.rb +157 -0
- data/test/acceptance/stubbing_non_existent_instance_method_test.rb +147 -0
- data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +130 -0
- data/test/acceptance/stubbing_non_public_class_method_test.rb +163 -0
- data/test/acceptance/stubbing_non_public_instance_method_test.rb +143 -0
- data/test/acceptance/stubbing_on_non_mock_object_test.rb +64 -0
- data/test/deprecation_disabler.rb +15 -0
- data/test/execution_point.rb +36 -0
- data/test/method_definer.rb +24 -0
- data/test/simple_counter.rb +13 -0
- data/test/test_helper.rb +25 -0
- data/test/test_runner.rb +33 -0
- data/test/unit/any_instance_method_test.rb +126 -0
- data/test/unit/array_inspect_test.rb +16 -0
- data/test/unit/backtrace_filter_test.rb +19 -0
- data/test/unit/cardinality_test.rb +56 -0
- data/test/unit/central_test.rb +65 -0
- data/test/unit/change_state_side_effect_test.rb +41 -0
- data/test/unit/class_method_test.rb +295 -0
- data/test/unit/configuration_test.rb +38 -0
- data/test/unit/date_time_inspect_test.rb +21 -0
- data/test/unit/exception_raiser_test.rb +42 -0
- data/test/unit/expectation_list_test.rb +57 -0
- data/test/unit/expectation_test.rb +480 -0
- data/test/unit/hash_inspect_test.rb +16 -0
- data/test/unit/in_state_ordering_constraint_test.rb +43 -0
- data/test/unit/metaclass_test.rb +22 -0
- data/test/unit/method_matcher_test.rb +23 -0
- data/test/unit/mock_test.rb +302 -0
- data/test/unit/mockery_test.rb +149 -0
- data/test/unit/multiple_yields_test.rb +18 -0
- data/test/unit/no_yields_test.rb +18 -0
- data/test/unit/object_inspect_test.rb +37 -0
- data/test/unit/object_test.rb +82 -0
- data/test/unit/parameter_matchers/all_of_test.rb +26 -0
- data/test/unit/parameter_matchers/any_of_test.rb +26 -0
- data/test/unit/parameter_matchers/anything_test.rb +21 -0
- data/test/unit/parameter_matchers/equals_test.rb +25 -0
- data/test/unit/parameter_matchers/has_entries_test.rb +51 -0
- data/test/unit/parameter_matchers/has_entry_test.rb +82 -0
- data/test/unit/parameter_matchers/has_key_test.rb +55 -0
- data/test/unit/parameter_matchers/has_value_test.rb +57 -0
- data/test/unit/parameter_matchers/includes_test.rb +44 -0
- data/test/unit/parameter_matchers/instance_of_test.rb +25 -0
- data/test/unit/parameter_matchers/is_a_test.rb +25 -0
- data/test/unit/parameter_matchers/kind_of_test.rb +25 -0
- data/test/unit/parameter_matchers/not_test.rb +26 -0
- data/test/unit/parameter_matchers/regexp_matches_test.rb +46 -0
- data/test/unit/parameter_matchers/responds_with_test.rb +25 -0
- data/test/unit/parameter_matchers/stub_matcher.rb +27 -0
- data/test/unit/parameter_matchers/yaml_equivalent_test.rb +25 -0
- data/test/unit/parameters_matcher_test.rb +121 -0
- data/test/unit/return_values_test.rb +63 -0
- data/test/unit/sequence_test.rb +104 -0
- data/test/unit/single_return_value_test.rb +14 -0
- data/test/unit/single_yield_test.rb +18 -0
- data/test/unit/state_machine_test.rb +98 -0
- data/test/unit/string_inspect_test.rb +11 -0
- data/test/unit/yield_parameters_test.rb +93 -0
- metadata +240 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'mocha/module_method'
|
2
|
+
|
3
|
+
module Mocha
|
4
|
+
|
5
|
+
class ModuleMethod < 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
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Mocha # :nodoc:
|
2
|
+
|
3
|
+
class MultipleYields # :nodoc:
|
4
|
+
|
5
|
+
attr_reader :parameter_groups
|
6
|
+
|
7
|
+
def initialize(*parameter_groups)
|
8
|
+
@parameter_groups = parameter_groups
|
9
|
+
end
|
10
|
+
|
11
|
+
def each
|
12
|
+
@parameter_groups.each do |parameter_group|
|
13
|
+
yield(parameter_group)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
data/lib/mocha/names.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
module Mocha
|
2
|
+
|
3
|
+
class ImpersonatingName
|
4
|
+
|
5
|
+
def initialize(object)
|
6
|
+
@object = object
|
7
|
+
end
|
8
|
+
|
9
|
+
def mocha_inspect
|
10
|
+
@object.mocha_inspect
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
class ImpersonatingAnyInstanceName
|
16
|
+
|
17
|
+
def initialize(klass)
|
18
|
+
@klass = klass
|
19
|
+
end
|
20
|
+
|
21
|
+
def mocha_inspect
|
22
|
+
"#<AnyInstance:#{@klass.mocha_inspect}>"
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
class Name
|
28
|
+
|
29
|
+
def initialize(name)
|
30
|
+
@name = name
|
31
|
+
end
|
32
|
+
|
33
|
+
def mocha_inspect
|
34
|
+
"#<Mock:#{@name}>"
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
class DefaultName
|
40
|
+
|
41
|
+
def initialize(mock)
|
42
|
+
@mock = mock
|
43
|
+
end
|
44
|
+
|
45
|
+
def mocha_inspect
|
46
|
+
address = @mock.__id__ * 2
|
47
|
+
address += 0x100000000 if address < 0
|
48
|
+
"#<Mock:0x#{'%x' % address}>"
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
data/lib/mocha/object.rb
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
require 'mocha/mockery'
|
2
|
+
require 'mocha/instance_method'
|
3
|
+
require 'mocha/class_method'
|
4
|
+
require 'mocha/module_method'
|
5
|
+
require 'mocha/any_instance_method'
|
6
|
+
require 'mocha/argument_iterator'
|
7
|
+
|
8
|
+
module Mocha
|
9
|
+
|
10
|
+
# Methods added all objects to allow mocking and stubbing on real objects.
|
11
|
+
#
|
12
|
+
# Methods return a Mocha::Expectation which can be further modified by methods on Mocha::Expectation.
|
13
|
+
module ObjectMethods
|
14
|
+
|
15
|
+
def mocha # :nodoc:
|
16
|
+
@mocha ||= Mocha::Mockery.instance.mock_impersonating(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def reset_mocha # :nodoc:
|
20
|
+
@mocha = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def stubba_method # :nodoc:
|
24
|
+
Mocha::InstanceMethod
|
25
|
+
end
|
26
|
+
|
27
|
+
def stubba_object # :nodoc:
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
# :call-seq: expects(method_name) -> expectation
|
32
|
+
# expects(method_names_vs_return_values) -> last expectation
|
33
|
+
#
|
34
|
+
# Adds an expectation that a method identified by +method_name+ Symbol must be called exactly once with any parameters.
|
35
|
+
# Returns the new expectation which can be further modified by methods on Mocha::Expectation.
|
36
|
+
# product = Product.new
|
37
|
+
# product.expects(:save).returns(true)
|
38
|
+
# assert_equal true, product.save
|
39
|
+
#
|
40
|
+
# The original implementation of <tt>Product#save</tt> is replaced temporarily.
|
41
|
+
#
|
42
|
+
# The original implementation of <tt>Product#save</tt> is restored at the end of the test.
|
43
|
+
#
|
44
|
+
# If +method_names_vs_return_values+ is a +Hash+, an expectation will be set up for each entry using the key as +method_name+ and value as +return_value+.
|
45
|
+
# product = Product.new
|
46
|
+
# product.expects(:valid? => true, :save => true)
|
47
|
+
#
|
48
|
+
# # exactly equivalent to
|
49
|
+
#
|
50
|
+
# product = Product.new
|
51
|
+
# product.expects(:valid?).returns(true)
|
52
|
+
# product.expects(:save).returns(true)
|
53
|
+
def expects(method_name_or_hash)
|
54
|
+
expectation = nil
|
55
|
+
mockery = Mocha::Mockery.instance
|
56
|
+
iterator = ArgumentIterator.new(method_name_or_hash)
|
57
|
+
iterator.each { |*args|
|
58
|
+
method_name = args.shift
|
59
|
+
mockery.on_stubbing(self, method_name)
|
60
|
+
method = stubba_method.new(stubba_object, method_name)
|
61
|
+
mockery.stubba.stub(method)
|
62
|
+
expectation = mocha.expects(method_name, caller)
|
63
|
+
expectation.returns(args.shift) if args.length > 0
|
64
|
+
}
|
65
|
+
expectation
|
66
|
+
end
|
67
|
+
|
68
|
+
# :call-seq: stubs(method_name) -> expectation
|
69
|
+
# stubs(method_names_vs_return_values) -> last expectation
|
70
|
+
#
|
71
|
+
# Adds an expectation that a method identified by +method_name+ Symbol may be called any number of times with any parameters.
|
72
|
+
# Returns the new expectation which can be further modified by methods on Mocha::Expectation.
|
73
|
+
# product = Product.new
|
74
|
+
# product.stubs(:save).returns(true)
|
75
|
+
# assert_equal true, product.save
|
76
|
+
#
|
77
|
+
# The original implementation of <tt>Product#save</tt> is replaced temporarily.
|
78
|
+
#
|
79
|
+
# The original implementation of <tt>Product#save</tt> is restored at the end of the test.
|
80
|
+
#
|
81
|
+
# If +method_names_vs_return_values+ is a +Hash+, an expectation will be set up for each entry using the key as +method_name+ and value as +return_value+.
|
82
|
+
# product = Product.new
|
83
|
+
# product.stubs(:valid? => true, :save => true)
|
84
|
+
#
|
85
|
+
# # exactly equivalent to
|
86
|
+
#
|
87
|
+
# product = Product.new
|
88
|
+
# product.stubs(:valid?).returns(true)
|
89
|
+
# product.stubs(:save).returns(true)
|
90
|
+
def stubs(method_name_or_hash)
|
91
|
+
expectation = nil
|
92
|
+
mockery = Mocha::Mockery.instance
|
93
|
+
iterator = ArgumentIterator.new(method_name_or_hash)
|
94
|
+
iterator.each { |*args|
|
95
|
+
method_name = args.shift
|
96
|
+
mockery.on_stubbing(self, method_name)
|
97
|
+
method = stubba_method.new(stubba_object, method_name)
|
98
|
+
mockery.stubba.stub(method)
|
99
|
+
expectation = mocha.stubs(method_name, caller)
|
100
|
+
expectation.returns(args.shift) if args.length > 0
|
101
|
+
}
|
102
|
+
expectation
|
103
|
+
end
|
104
|
+
|
105
|
+
def method_exists?(method, include_public_methods = true) # :nodoc:
|
106
|
+
if include_public_methods
|
107
|
+
return true if public_methods(include_superclass_methods = true).include?(method)
|
108
|
+
return true if respond_to?(method.to_sym)
|
109
|
+
end
|
110
|
+
return true if protected_methods(include_superclass_methods = true).include?(method)
|
111
|
+
return true if private_methods(include_superclass_methods = true).include?(method)
|
112
|
+
return false
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
module ModuleMethods # :nodoc:
|
118
|
+
|
119
|
+
def stubba_method
|
120
|
+
Mocha::ModuleMethod
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
# Methods added all classes to allow mocking and stubbing on real objects.
|
126
|
+
module ClassMethods
|
127
|
+
|
128
|
+
def stubba_method # :nodoc:
|
129
|
+
Mocha::ClassMethod
|
130
|
+
end
|
131
|
+
|
132
|
+
class AnyInstance # :nodoc:
|
133
|
+
|
134
|
+
def initialize(klass)
|
135
|
+
@stubba_object = klass
|
136
|
+
end
|
137
|
+
|
138
|
+
def mocha
|
139
|
+
@mocha ||= Mocha::Mockery.instance.mock_impersonating_any_instance_of(@stubba_object)
|
140
|
+
end
|
141
|
+
|
142
|
+
def stubba_method
|
143
|
+
Mocha::AnyInstanceMethod
|
144
|
+
end
|
145
|
+
|
146
|
+
def stubba_object
|
147
|
+
@stubba_object
|
148
|
+
end
|
149
|
+
|
150
|
+
def method_exists?(method, include_public_methods = true)
|
151
|
+
if include_public_methods
|
152
|
+
return true if @stubba_object.public_instance_methods(include_superclass_methods = true).include?(method)
|
153
|
+
end
|
154
|
+
return true if @stubba_object.protected_instance_methods(include_superclass_methods = true).include?(method)
|
155
|
+
return true if @stubba_object.private_instance_methods(include_superclass_methods = true).include?(method)
|
156
|
+
return false
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
# :call-seq: any_instance -> mock object
|
162
|
+
#
|
163
|
+
# Returns a mock object which will detect calls to any instance of this class.
|
164
|
+
# Product.any_instance.stubs(:save).returns(false)
|
165
|
+
# product_1 = Product.new
|
166
|
+
# assert_equal false, product_1.save
|
167
|
+
# product_2 = Product.new
|
168
|
+
# assert_equal false, product_2.save
|
169
|
+
def any_instance
|
170
|
+
@any_instance ||= AnyInstance.new(self)
|
171
|
+
end
|
172
|
+
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
176
|
+
|
177
|
+
class Object # :nodoc:
|
178
|
+
include Mocha::ObjectMethods
|
179
|
+
end
|
180
|
+
|
181
|
+
class Module # :nodoc:
|
182
|
+
include Mocha::ModuleMethods
|
183
|
+
end
|
184
|
+
|
185
|
+
class Class # :nodoc:
|
186
|
+
include Mocha::ClassMethods
|
187
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Mocha
|
2
|
+
|
3
|
+
# Used as parameters for Expectation#with to restrict the parameter values which will match the expectation. Can be nested.
|
4
|
+
module ParameterMatchers; end
|
5
|
+
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'mocha/parameter_matchers/object'
|
9
|
+
|
10
|
+
require 'mocha/parameter_matchers/all_of'
|
11
|
+
require 'mocha/parameter_matchers/any_of'
|
12
|
+
require 'mocha/parameter_matchers/any_parameters'
|
13
|
+
require 'mocha/parameter_matchers/anything'
|
14
|
+
require 'mocha/parameter_matchers/equals'
|
15
|
+
require 'mocha/parameter_matchers/has_entry'
|
16
|
+
require 'mocha/parameter_matchers/has_entries'
|
17
|
+
require 'mocha/parameter_matchers/has_key'
|
18
|
+
require 'mocha/parameter_matchers/has_value'
|
19
|
+
require 'mocha/parameter_matchers/includes'
|
20
|
+
require 'mocha/parameter_matchers/instance_of'
|
21
|
+
require 'mocha/parameter_matchers/is_a'
|
22
|
+
require 'mocha/parameter_matchers/kind_of'
|
23
|
+
require 'mocha/parameter_matchers/not'
|
24
|
+
require 'mocha/parameter_matchers/optionally'
|
25
|
+
require 'mocha/parameter_matchers/regexp_matches'
|
26
|
+
require 'mocha/parameter_matchers/responds_with'
|
27
|
+
require 'mocha/parameter_matchers/yaml_equivalent'
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'mocha/parameter_matchers/base'
|
2
|
+
|
3
|
+
module Mocha
|
4
|
+
|
5
|
+
module ParameterMatchers
|
6
|
+
|
7
|
+
# :call-seq: all_of(*parameter_matchers) -> parameter_matcher
|
8
|
+
#
|
9
|
+
# Matches if all +parameter_matchers+ match.
|
10
|
+
# object = mock()
|
11
|
+
# object.expects(:method_1).with(all_of(includes(1), includes(3)))
|
12
|
+
# object.method_1([1, 3])
|
13
|
+
# # no error raised
|
14
|
+
#
|
15
|
+
# object = mock()
|
16
|
+
# object.expects(:method_1).with(all_of(includes(1), includes(3)))
|
17
|
+
# object.method_1([1, 2])
|
18
|
+
# # error raised, because method_1 was not called with object including 1 and 3
|
19
|
+
def all_of(*matchers)
|
20
|
+
AllOf.new(*matchers)
|
21
|
+
end
|
22
|
+
|
23
|
+
class AllOf < Base # :nodoc:
|
24
|
+
|
25
|
+
def initialize(*matchers)
|
26
|
+
@matchers = matchers
|
27
|
+
end
|
28
|
+
|
29
|
+
def matches?(available_parameters)
|
30
|
+
parameter = available_parameters.shift
|
31
|
+
@matchers.all? { |matcher| matcher.to_matcher.matches?([parameter]) }
|
32
|
+
end
|
33
|
+
|
34
|
+
def mocha_inspect
|
35
|
+
"all_of(#{@matchers.map { |matcher| matcher.mocha_inspect }.join(", ") })"
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'mocha/parameter_matchers/base'
|
2
|
+
|
3
|
+
module Mocha
|
4
|
+
|
5
|
+
module ParameterMatchers
|
6
|
+
|
7
|
+
# :call-seq: any_of(*parameter_matchers) -> parameter_matcher
|
8
|
+
#
|
9
|
+
# Matches if any +parameter_matchers+ match.
|
10
|
+
# object = mock()
|
11
|
+
# object.expects(:method_1).with(any_of(1, 3))
|
12
|
+
# object.method_1(1)
|
13
|
+
# # no error raised
|
14
|
+
#
|
15
|
+
# object = mock()
|
16
|
+
# object.expects(:method_1).with(any_of(1, 3))
|
17
|
+
# object.method_1(3)
|
18
|
+
# # no error raised
|
19
|
+
#
|
20
|
+
# object = mock()
|
21
|
+
# object.expects(:method_1).with(any_of(1, 3))
|
22
|
+
# object.method_1(2)
|
23
|
+
# # error raised, because method_1 was not called with 1 or 3
|
24
|
+
def any_of(*matchers)
|
25
|
+
AnyOf.new(*matchers)
|
26
|
+
end
|
27
|
+
|
28
|
+
class AnyOf < Base # :nodoc:
|
29
|
+
|
30
|
+
def initialize(*matchers)
|
31
|
+
@matchers = matchers
|
32
|
+
end
|
33
|
+
|
34
|
+
def matches?(available_parameters)
|
35
|
+
parameter = available_parameters.shift
|
36
|
+
@matchers.any? { |matcher| matcher.to_matcher.matches?([parameter]) }
|
37
|
+
end
|
38
|
+
|
39
|
+
def mocha_inspect
|
40
|
+
"any_of(#{@matchers.map { |matcher| matcher.mocha_inspect }.join(", ") })"
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'mocha/parameter_matchers/base'
|
2
|
+
|
3
|
+
module Mocha
|
4
|
+
|
5
|
+
module ParameterMatchers
|
6
|
+
|
7
|
+
# :call-seq: any_parameters() -> parameter_matcher
|
8
|
+
#
|
9
|
+
# Matches any parameters.
|
10
|
+
# object = mock()
|
11
|
+
# object.expects(:method_1).with(any_parameters)
|
12
|
+
# object.method_1(1, 2, 3, 4)
|
13
|
+
# # no error raised
|
14
|
+
#
|
15
|
+
# object = mock()
|
16
|
+
# object.expects(:method_1).with(any_parameters)
|
17
|
+
# object.method_1(5, 6, 7, 8, 9, 0)
|
18
|
+
# # no error raised
|
19
|
+
def any_parameters
|
20
|
+
AnyParameters.new
|
21
|
+
end
|
22
|
+
|
23
|
+
class AnyParameters < Base # :nodoc:
|
24
|
+
|
25
|
+
def matches?(available_parameters)
|
26
|
+
while available_parameters.length > 0 do
|
27
|
+
available_parameters.shift
|
28
|
+
end
|
29
|
+
return true
|
30
|
+
end
|
31
|
+
|
32
|
+
def mocha_inspect
|
33
|
+
"any_parameters"
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|