mocha 1.4.0 → 1.7.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 +5 -5
- data/.rubocop.yml +58 -0
- data/.rubocop_todo.yml +50 -0
- data/README.md +12 -71
- data/RELEASE.md +19 -0
- data/Rakefile +35 -28
- data/bin/build-matrix +17 -18
- data/lib/mocha/any_instance_method.rb +19 -25
- data/lib/mocha/api.rb +1 -5
- data/lib/mocha/argument_iterator.rb +4 -8
- data/lib/mocha/backtrace_filter.rb +1 -5
- data/lib/mocha/cardinality.rb +20 -27
- data/lib/mocha/central.rb +21 -12
- data/lib/mocha/change_state_side_effect.rb +0 -4
- data/lib/mocha/class_method.rb +31 -37
- data/lib/mocha/class_methods.rb +11 -15
- data/lib/mocha/configuration.rb +69 -10
- data/lib/mocha/debug.rb +3 -2
- data/lib/mocha/deprecation.rb +4 -11
- data/lib/mocha/detection/mini_test.rb +0 -2
- data/lib/mocha/detection/test_unit.rb +4 -4
- data/lib/mocha/error_with_filtered_backtrace.rb +13 -0
- data/lib/mocha/exception_raiser.rb +2 -5
- data/lib/mocha/expectation.rb +15 -18
- data/lib/mocha/expectation_error.rb +2 -0
- data/lib/mocha/expectation_error_factory.rb +0 -1
- data/lib/mocha/expectation_list.rb +2 -6
- data/lib/mocha/hooks.rb +1 -3
- data/lib/mocha/in_state_ordering_constraint.rb +0 -4
- data/lib/mocha/inspect.rb +3 -5
- data/lib/mocha/instance_method.rb +0 -2
- data/lib/mocha/integration/mini_test/adapter.rb +2 -4
- data/lib/mocha/integration/mini_test/exception_translation.rb +1 -1
- data/lib/mocha/integration/mini_test/nothing.rb +4 -4
- data/lib/mocha/integration/mini_test/version_13.rb +4 -1
- data/lib/mocha/integration/mini_test/version_140.rb +4 -1
- data/lib/mocha/integration/mini_test/version_141.rb +4 -1
- data/lib/mocha/integration/mini_test/version_142_to_172.rb +4 -1
- data/lib/mocha/integration/mini_test/version_200.rb +4 -1
- data/lib/mocha/integration/mini_test/version_201_to_222.rb +4 -1
- data/lib/mocha/integration/mini_test/version_2110_to_2111.rb +4 -1
- data/lib/mocha/integration/mini_test/version_2112_to_320.rb +4 -1
- data/lib/mocha/integration/mini_test/version_230_to_2101.rb +4 -1
- data/lib/mocha/integration/monkey_patcher.rb +5 -7
- data/lib/mocha/integration/test_unit/adapter.rb +5 -6
- data/lib/mocha/integration/test_unit/gem_version_200.rb +5 -2
- data/lib/mocha/integration/test_unit/gem_version_201_to_202.rb +5 -2
- data/lib/mocha/integration/test_unit/gem_version_203_to_220.rb +5 -2
- data/lib/mocha/integration/test_unit/gem_version_230_to_250.rb +5 -2
- data/lib/mocha/integration/test_unit/nothing.rb +4 -4
- data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +4 -1
- data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +4 -1
- data/lib/mocha/integration.rb +3 -4
- data/lib/mocha/is_a.rb +0 -2
- data/lib/mocha/logger.rb +0 -4
- data/lib/mocha/method_matcher.rb +1 -5
- data/lib/mocha/minitest.rb +1 -1
- data/lib/mocha/mock.rb +25 -30
- data/lib/mocha/mockery.rb +62 -43
- data/lib/mocha/module_method.rb +0 -10
- data/lib/mocha/module_methods.rb +0 -4
- data/lib/mocha/multiple_yields.rb +0 -5
- data/lib/mocha/names.rb +1 -11
- data/lib/mocha/no_yields.rb +1 -7
- data/lib/mocha/not_initialized_error.rb +7 -0
- data/lib/mocha/object_methods.rb +16 -16
- data/lib/mocha/parameter_matchers/all_of.rb +1 -7
- data/lib/mocha/parameter_matchers/any_of.rb +1 -7
- data/lib/mocha/parameter_matchers/any_parameters.rb +3 -9
- data/lib/mocha/parameter_matchers/anything.rb +2 -8
- data/lib/mocha/parameter_matchers/base.rb +6 -12
- data/lib/mocha/parameter_matchers/equals.rb +0 -6
- data/lib/mocha/parameter_matchers/equivalent_uri.rb +6 -6
- data/lib/mocha/parameter_matchers/has_entries.rb +2 -6
- data/lib/mocha/parameter_matchers/has_entry.rb +8 -11
- data/lib/mocha/parameter_matchers/has_key.rb +2 -6
- data/lib/mocha/parameter_matchers/has_value.rb +2 -6
- data/lib/mocha/parameter_matchers/includes.rb +2 -6
- data/lib/mocha/parameter_matchers/instance_of.rb +0 -6
- data/lib/mocha/parameter_matchers/is_a.rb +2 -6
- data/lib/mocha/parameter_matchers/kind_of.rb +2 -6
- data/lib/mocha/parameter_matchers/not.rb +2 -6
- data/lib/mocha/parameter_matchers/object.rb +0 -2
- data/lib/mocha/parameter_matchers/optionally.rb +4 -10
- data/lib/mocha/parameter_matchers/regexp_matches.rb +0 -6
- data/lib/mocha/parameter_matchers/responds_with.rb +3 -8
- data/lib/mocha/parameter_matchers/yaml_equivalent.rb +2 -6
- data/lib/mocha/parameter_matchers.rb +0 -2
- data/lib/mocha/parameters_matcher.rb +6 -9
- data/lib/mocha/pretty_parameters.rb +0 -4
- data/lib/mocha/receivers.rb +10 -14
- data/lib/mocha/return_values.rb +3 -7
- data/lib/mocha/sequence.rb +4 -9
- data/lib/mocha/single_return_value.rb +0 -4
- data/lib/mocha/single_yield.rb +0 -5
- data/lib/mocha/state_machine.rb +6 -10
- data/lib/mocha/stubbing_error.rb +2 -13
- data/lib/mocha/test_unit.rb +1 -1
- data/lib/mocha/thrower.rb +2 -5
- data/lib/mocha/unexpected_invocation.rb +3 -5
- data/lib/mocha/version.rb +1 -1
- data/lib/mocha/yield_parameters.rb +3 -7
- data/mocha.gemspec +34 -58
- data/test/acceptance/acceptance_test_helper.rb +0 -6
- data/test/acceptance/bug_18914_test.rb +7 -12
- data/test/acceptance/bug_21465_test.rb +0 -2
- data/test/acceptance/bug_21563_test.rb +0 -2
- data/test/acceptance/exception_rescue_test.rb +7 -8
- data/test/acceptance/expectations_on_multiple_methods_test.rb +2 -1
- data/test/acceptance/expected_invocation_count_test.rb +27 -29
- data/test/acceptance/failure_messages_test.rb +3 -5
- data/test/acceptance/issue_272_test.rb +0 -1
- data/test/acceptance/issue_65_test.rb +15 -13
- data/test/acceptance/issue_70_test.rb +0 -1
- data/test/acceptance/mocha_example_test.rb +5 -6
- data/test/acceptance/mocha_test_result_test.rb +7 -7
- data/test/acceptance/mock_test.rb +2 -4
- data/test/acceptance/mock_with_initializer_block_test.rb +0 -2
- data/test/acceptance/mocked_methods_dispatch_test.rb +0 -2
- data/test/acceptance/multiple_expectations_failure_message_test.rb +16 -17
- data/test/acceptance/optional_parameters_test.rb +0 -2
- data/test/acceptance/parameter_matcher_test.rb +2 -3
- data/test/acceptance/partial_mocks_test.rb +4 -6
- data/test/acceptance/prepend_test.rb +14 -16
- data/test/acceptance/prevent_use_of_mocha_outside_test_test.rb +77 -0
- data/test/acceptance/raise_exception_test.rb +2 -4
- data/test/acceptance/return_value_test.rb +0 -2
- data/test/acceptance/sequence_test.rb +9 -11
- data/test/acceptance/states_test.rb +6 -4
- data/test/acceptance/stub_any_instance_method_defined_on_superclass_test.rb +33 -2
- data/test/acceptance/stub_any_instance_method_test.rb +19 -17
- data/test/acceptance/stub_class_method_defined_on_active_record_association_proxy_test.rb +8 -8
- data/test/acceptance/stub_class_method_defined_on_class_test.rb +2 -1
- data/test/acceptance/stub_class_method_defined_on_module_test.rb +0 -1
- data/test/acceptance/stub_class_method_defined_on_superclass_test.rb +34 -1
- data/test/acceptance/stub_everything_test.rb +1 -3
- data/test/acceptance/stub_instance_method_defined_on_active_record_association_proxy_test.rb +6 -7
- data/test/acceptance/stub_instance_method_defined_on_class_and_aliased_test.rb +0 -1
- data/test/acceptance/stub_instance_method_defined_on_class_test.rb +0 -1
- data/test/acceptance/stub_instance_method_defined_on_kernel_module_test.rb +63 -1
- data/test/acceptance/stub_instance_method_defined_on_module_test.rb +0 -1
- data/test/acceptance/stub_instance_method_defined_on_object_class_test.rb +2 -1
- data/test/acceptance/stub_instance_method_defined_on_singleton_class_test.rb +0 -2
- data/test/acceptance/stub_instance_method_defined_on_superclass_test.rb +0 -1
- data/test/acceptance/stub_module_method_test.rb +13 -13
- data/test/acceptance/stub_test.rb +1 -3
- data/test/acceptance/stubba_example_test.rb +6 -14
- data/test/acceptance/stubba_test_result_test.rb +5 -8
- data/test/acceptance/stubbing_error_backtrace_test.rb +2 -2
- data/test/acceptance/stubbing_frozen_object_test.rb +2 -1
- data/test/acceptance/stubbing_method_accepting_block_parameter_test.rb +12 -7
- data/test/acceptance/stubbing_method_unnecessarily_test.rb +0 -2
- data/test/acceptance/stubbing_nil_test.rb +4 -5
- data/test/acceptance/stubbing_non_existent_any_instance_method_test.rb +1 -3
- data/test/acceptance/stubbing_non_existent_class_method_test.rb +3 -3
- data/test/acceptance/stubbing_non_existent_instance_method_test.rb +1 -3
- data/test/acceptance/stubbing_non_public_any_instance_method_test.rb +0 -2
- data/test/acceptance/stubbing_non_public_class_method_test.rb +3 -3
- data/test/acceptance/stubbing_non_public_instance_method_test.rb +1 -3
- data/test/acceptance/stubbing_on_non_mock_object_test.rb +4 -10
- data/test/acceptance/stubbing_same_class_method_on_parent_and_child_classes_test.rb +3 -4
- data/test/acceptance/throw_test.rb +0 -2
- data/test/acceptance/unexpected_invocation_test.rb +2 -3
- data/test/acceptance/unstubbing_test.rb +41 -14
- data/test/deprecation_disabler.rb +0 -1
- data/test/execution_point.rb +2 -4
- data/test/integration/mini_test_test.rb +2 -2
- data/test/integration/shared_tests.rb +24 -22
- data/test/integration/test_unit_test.rb +2 -2
- data/test/method_definer.rb +1 -3
- data/test/mini_test_result.rb +17 -11
- data/test/minitest_result.rb +0 -1
- data/test/simple_counter.rb +0 -2
- data/test/test_helper.rb +13 -5
- data/test/test_runner.rb +2 -4
- data/test/test_unit_result.rb +4 -2
- data/test/unit/any_instance_method_test.rb +31 -17
- data/test/unit/array_inspect_test.rb +2 -4
- data/test/unit/backtrace_filter_test.rb +3 -5
- data/test/unit/cardinality_test.rb +0 -2
- data/test/unit/central_test.rb +26 -27
- data/test/unit/change_state_side_effect_test.rb +0 -4
- data/test/unit/class_method_test.rb +59 -34
- data/test/unit/class_methods_test.rb +34 -5
- data/test/unit/configuration_test.rb +1 -2
- data/test/unit/date_time_inspect_test.rb +1 -3
- data/test/unit/exception_raiser_test.rb +0 -2
- data/test/unit/expectation_list_test.rb +0 -2
- data/test/unit/expectation_test.rb +41 -46
- data/test/unit/hash_inspect_test.rb +3 -5
- data/test/unit/hooks_test.rb +14 -8
- data/test/unit/in_state_ordering_constraint_test.rb +0 -4
- data/test/unit/method_matcher_test.rb +1 -3
- data/test/unit/mock_test.rb +35 -22
- data/test/unit/mockery_test.rb +45 -28
- data/test/unit/module_methods_test.rb +0 -2
- data/test/unit/multiple_yields_test.rb +0 -2
- data/test/unit/no_yields_test.rb +0 -2
- data/test/unit/object_inspect_test.rb +16 -7
- data/test/unit/object_methods_test.rb +22 -6
- data/test/unit/parameter_matchers/all_of_test.rb +0 -2
- data/test/unit/parameter_matchers/any_of_test.rb +0 -2
- data/test/unit/parameter_matchers/anything_test.rb +2 -4
- data/test/unit/parameter_matchers/equals_test.rb +1 -3
- data/test/unit/parameter_matchers/equivalent_uri_test.rb +0 -1
- data/test/unit/parameter_matchers/has_entries_test.rb +2 -2
- data/test/unit/parameter_matchers/has_entry_test.rb +13 -14
- data/test/unit/parameter_matchers/has_key_test.rb +0 -1
- data/test/unit/parameter_matchers/has_value_test.rb +0 -2
- data/test/unit/parameter_matchers/includes_test.rb +8 -9
- data/test/unit/parameter_matchers/instance_of_test.rb +1 -3
- data/test/unit/parameter_matchers/is_a_test.rb +1 -3
- data/test/unit/parameter_matchers/kind_of_test.rb +1 -3
- data/test/unit/parameter_matchers/not_test.rb +0 -2
- data/test/unit/parameter_matchers/regexp_matches_test.rb +1 -2
- data/test/unit/parameter_matchers/responds_with_test.rb +9 -3
- data/test/unit/parameter_matchers/stub_matcher.rb +0 -4
- data/test/unit/parameter_matchers/yaml_equivalent_test.rb +1 -3
- data/test/unit/parameters_matcher_test.rb +2 -4
- data/test/unit/receivers_test.rb +35 -5
- data/test/unit/return_values_test.rb +3 -5
- data/test/unit/sequence_test.rb +1 -5
- data/test/unit/single_return_value_test.rb +0 -2
- data/test/unit/single_yield_test.rb +0 -2
- data/test/unit/state_machine_test.rb +1 -3
- data/test/unit/string_inspect_test.rb +2 -4
- data/test/unit/thrower_test.rb +0 -2
- data/test/unit/yield_parameters_test.rb +0 -2
- data/yard-templates/default/layout/html/setup.rb +2 -3
- metadata +25 -6
@@ -1,7 +1,5 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
module ParameterMatchers
|
4
|
-
|
5
3
|
# Matches optional parameters if available.
|
6
4
|
#
|
7
5
|
# @param [*Array<Base>] matchers matchers for optional parameters.
|
@@ -38,30 +36,26 @@ module Mocha
|
|
38
36
|
|
39
37
|
# Parameter matcher which allows optional parameters to be specified.
|
40
38
|
class Optionally < Base
|
41
|
-
|
42
39
|
# @private
|
43
40
|
def initialize(*parameters)
|
44
|
-
@matchers = parameters.map
|
41
|
+
@matchers = parameters.map(&:to_matcher)
|
45
42
|
end
|
46
43
|
|
47
44
|
# @private
|
48
45
|
def matches?(available_parameters)
|
49
46
|
index = 0
|
50
|
-
while
|
47
|
+
while !available_parameters.empty? && (index < @matchers.length)
|
51
48
|
matcher = @matchers[index]
|
52
49
|
return false unless matcher.matches?(available_parameters)
|
53
50
|
index += 1
|
54
51
|
end
|
55
|
-
|
52
|
+
true
|
56
53
|
end
|
57
54
|
|
58
55
|
# @private
|
59
56
|
def mocha_inspect
|
60
|
-
"optionally(#{@matchers.map
|
57
|
+
"optionally(#{@matchers.map(&:mocha_inspect).join(', ')})"
|
61
58
|
end
|
62
|
-
|
63
59
|
end
|
64
|
-
|
65
60
|
end
|
66
|
-
|
67
61
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/parameter_matchers/base'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
module ParameterMatchers
|
6
|
-
|
7
5
|
# Matches any object that matches +regexp+.
|
8
6
|
#
|
9
7
|
# @param [Regexp] regexp regular expression to match.
|
@@ -29,7 +27,6 @@ module Mocha
|
|
29
27
|
|
30
28
|
# Parameter matcher which matches if specified regular expression matches actual paramter.
|
31
29
|
class RegexpMatches < Base
|
32
|
-
|
33
30
|
# @private
|
34
31
|
def initialize(regexp)
|
35
32
|
@regexp = regexp
|
@@ -46,9 +43,6 @@ module Mocha
|
|
46
43
|
def mocha_inspect
|
47
44
|
"regexp_matches(#{@regexp.mocha_inspect})"
|
48
45
|
end
|
49
|
-
|
50
46
|
end
|
51
|
-
|
52
47
|
end
|
53
|
-
|
54
48
|
end
|
@@ -2,9 +2,7 @@ require 'mocha/parameter_matchers/base'
|
|
2
2
|
require 'yaml'
|
3
3
|
|
4
4
|
module Mocha
|
5
|
-
|
6
5
|
module ParameterMatchers
|
7
|
-
|
8
6
|
# Matches any object that responds to +message+ with +result+. To put it another way, it tests the quack, not the duck.
|
9
7
|
#
|
10
8
|
# @param [Symbol] message method to invoke.
|
@@ -30,25 +28,22 @@ module Mocha
|
|
30
28
|
|
31
29
|
# Parameter matcher which matches if actual parameter returns expected result when specified method is invoked.
|
32
30
|
class RespondsWith < Base
|
33
|
-
|
34
31
|
# @private
|
35
32
|
def initialize(message, result)
|
36
|
-
@message
|
33
|
+
@message = message
|
34
|
+
@result = result
|
37
35
|
end
|
38
36
|
|
39
37
|
# @private
|
40
38
|
def matches?(available_parameters)
|
41
39
|
parameter = available_parameters.shift
|
42
|
-
@result.to_matcher.matches?(
|
40
|
+
@result.to_matcher.matches?([parameter.__send__(@message)])
|
43
41
|
end
|
44
42
|
|
45
43
|
# @private
|
46
44
|
def mocha_inspect
|
47
45
|
"responds_with(#{@message.mocha_inspect}, #{@result.mocha_inspect})"
|
48
46
|
end
|
49
|
-
|
50
47
|
end
|
51
|
-
|
52
48
|
end
|
53
|
-
|
54
49
|
end
|
@@ -2,9 +2,7 @@ require 'mocha/parameter_matchers/base'
|
|
2
2
|
require 'yaml'
|
3
3
|
|
4
4
|
module Mocha
|
5
|
-
|
6
5
|
module ParameterMatchers
|
7
|
-
|
8
6
|
# Matches any YAML that represents the specified +object+
|
9
7
|
#
|
10
8
|
# @param [Object] object object whose YAML to compare.
|
@@ -29,7 +27,6 @@ module Mocha
|
|
29
27
|
|
30
28
|
# Parameter matcher which matches if actual parameter is YAML equivalent of specified object.
|
31
29
|
class YamlEquivalent < Base
|
32
|
-
|
33
30
|
# @private
|
34
31
|
def initialize(object)
|
35
32
|
@object = object
|
@@ -38,16 +35,15 @@ module Mocha
|
|
38
35
|
# @private
|
39
36
|
def matches?(available_parameters)
|
40
37
|
parameter = available_parameters.shift
|
38
|
+
# rubocop:disable Security/YAMLLoad
|
41
39
|
@object == YAML.load(parameter)
|
40
|
+
# rubocop:enable Security/YAMLLoad
|
42
41
|
end
|
43
42
|
|
44
43
|
# @private
|
45
44
|
def mocha_inspect
|
46
45
|
"yaml_equivalent(#{@object.mocha_inspect})"
|
47
46
|
end
|
48
|
-
|
49
47
|
end
|
50
|
-
|
51
48
|
end
|
52
|
-
|
53
49
|
end
|
@@ -2,23 +2,22 @@ require 'mocha/inspect'
|
|
2
2
|
require 'mocha/parameter_matchers'
|
3
3
|
|
4
4
|
module Mocha
|
5
|
-
|
6
5
|
class ParametersMatcher
|
7
|
-
|
8
6
|
def initialize(expected_parameters = [ParameterMatchers::AnyParameters.new], &matching_block)
|
9
|
-
@expected_parameters
|
7
|
+
@expected_parameters = expected_parameters
|
8
|
+
@matching_block = matching_block
|
10
9
|
end
|
11
10
|
|
12
11
|
def match?(actual_parameters = [])
|
13
12
|
if @matching_block
|
14
|
-
|
13
|
+
@matching_block.call(*actual_parameters)
|
15
14
|
else
|
16
|
-
|
15
|
+
parameters_match?(actual_parameters)
|
17
16
|
end
|
18
17
|
end
|
19
18
|
|
20
19
|
def parameters_match?(actual_parameters)
|
21
|
-
matchers.all? { |matcher| matcher.matches?(actual_parameters) } &&
|
20
|
+
matchers.all? { |matcher| matcher.matches?(actual_parameters) } && actual_parameters.empty?
|
22
21
|
end
|
23
22
|
|
24
23
|
def mocha_inspect
|
@@ -29,9 +28,7 @@ module Mocha
|
|
29
28
|
end
|
30
29
|
|
31
30
|
def matchers
|
32
|
-
@expected_parameters.map
|
31
|
+
@expected_parameters.map(&:to_matcher)
|
33
32
|
end
|
34
|
-
|
35
33
|
end
|
36
|
-
|
37
34
|
end
|
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/inspect'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
class PrettyParameters
|
6
|
-
|
7
5
|
def initialize(params)
|
8
6
|
@params = params
|
9
7
|
@params_string = params.mocha_inspect
|
@@ -22,7 +20,5 @@ module Mocha
|
|
22
20
|
def remove_outer_hash_braces!
|
23
21
|
@params_string = @params_string.gsub(/^\{|\}$/, '') if @params.length == 1
|
24
22
|
end
|
25
|
-
|
26
23
|
end
|
27
|
-
|
28
24
|
end
|
data/lib/mocha/receivers.rb
CHANGED
@@ -1,41 +1,39 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
class ObjectReceiver
|
4
|
-
|
5
3
|
def initialize(object)
|
6
4
|
@object = object
|
7
5
|
end
|
8
6
|
|
9
7
|
def mocks
|
10
|
-
object
|
11
|
-
|
12
|
-
|
8
|
+
object = @object
|
9
|
+
mocks = []
|
10
|
+
while object
|
11
|
+
mocha = object.mocha(false)
|
12
|
+
mocks << mocha if mocha
|
13
13
|
object = object.is_a?(Class) ? object.superclass : nil
|
14
14
|
end
|
15
15
|
mocks
|
16
16
|
end
|
17
|
-
|
18
17
|
end
|
19
18
|
|
20
19
|
class AnyInstanceReceiver
|
21
|
-
|
22
20
|
def initialize(klass)
|
23
21
|
@klass = klass
|
24
22
|
end
|
25
23
|
|
26
24
|
def mocks
|
27
|
-
klass
|
28
|
-
|
29
|
-
|
25
|
+
klass = @klass
|
26
|
+
mocks = []
|
27
|
+
while klass
|
28
|
+
mocha = klass.any_instance.mocha(false)
|
29
|
+
mocks << mocha if mocha
|
30
30
|
klass = klass.superclass
|
31
31
|
end
|
32
32
|
mocks
|
33
33
|
end
|
34
|
-
|
35
34
|
end
|
36
35
|
|
37
36
|
class DefaultReceiver
|
38
|
-
|
39
37
|
def initialize(mock)
|
40
38
|
@mock = mock
|
41
39
|
end
|
@@ -43,7 +41,5 @@ module Mocha
|
|
43
41
|
def mocks
|
44
42
|
[@mock]
|
45
43
|
end
|
46
|
-
|
47
44
|
end
|
48
|
-
|
49
45
|
end
|
data/lib/mocha/return_values.rb
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
require 'mocha/single_return_value'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
class ReturnValues
|
6
|
-
|
7
5
|
def self.build(*values)
|
8
6
|
new(*values.map { |value| SingleReturnValue.new(value) })
|
9
7
|
end
|
@@ -16,16 +14,14 @@ module Mocha
|
|
16
14
|
|
17
15
|
def next
|
18
16
|
case @values.length
|
19
|
-
|
20
|
-
|
21
|
-
|
17
|
+
when 0 then nil
|
18
|
+
when 1 then @values.first.evaluate
|
19
|
+
else @values.shift.evaluate
|
22
20
|
end
|
23
21
|
end
|
24
22
|
|
25
23
|
def +(other)
|
26
24
|
self.class.new(*(@values + other.values))
|
27
25
|
end
|
28
|
-
|
29
26
|
end
|
30
|
-
|
31
27
|
end
|
data/lib/mocha/sequence.rb
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
# Used to constrain the order in which expectations can occur.
|
4
3
|
#
|
5
4
|
# @see API#sequence
|
6
5
|
# @see Expectation#in_sequence
|
7
6
|
class Sequence
|
8
|
-
|
9
7
|
# @private
|
10
8
|
class InSequenceOrderingConstraint
|
11
|
-
|
12
9
|
def initialize(sequence, index)
|
13
|
-
@sequence
|
10
|
+
@sequence = sequence
|
11
|
+
@index = index
|
14
12
|
end
|
15
13
|
|
16
14
|
def allows_invocation_now?
|
@@ -20,7 +18,6 @@ module Mocha
|
|
20
18
|
def mocha_inspect
|
21
19
|
"in sequence #{@sequence.mocha_inspect}"
|
22
20
|
end
|
23
|
-
|
24
21
|
end
|
25
22
|
|
26
23
|
# @private
|
@@ -38,14 +35,12 @@ module Mocha
|
|
38
35
|
|
39
36
|
# @private
|
40
37
|
def satisfied_to_index?(index)
|
41
|
-
@expectations[0...index].all?
|
38
|
+
@expectations[0...index].all?(&:satisfied?)
|
42
39
|
end
|
43
40
|
|
44
41
|
# @private
|
45
42
|
def mocha_inspect
|
46
|
-
|
43
|
+
@name.mocha_inspect.to_s
|
47
44
|
end
|
48
|
-
|
49
45
|
end
|
50
|
-
|
51
46
|
end
|
data/lib/mocha/single_yield.rb
CHANGED
data/lib/mocha/state_machine.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
# A state machine that is used to constrain the order of invocations.
|
4
3
|
# An invocation can be constrained to occur when a state {#is}, or {#is_not}, active.
|
5
4
|
class StateMachine
|
6
|
-
|
7
5
|
# Provides a mechanism to change the state of a {StateMachine} at some point in the future.
|
8
6
|
class State
|
9
|
-
|
10
7
|
# @private
|
11
8
|
def initialize(state_machine, state)
|
12
|
-
@state_machine
|
9
|
+
@state_machine = state_machine
|
10
|
+
@state = state
|
13
11
|
end
|
14
12
|
|
15
13
|
# @private
|
@@ -26,15 +24,14 @@ module Mocha
|
|
26
24
|
def mocha_inspect
|
27
25
|
"#{@state_machine.name} is #{@state.mocha_inspect}"
|
28
26
|
end
|
29
|
-
|
30
27
|
end
|
31
28
|
|
32
29
|
# Provides the ability to determine whether a {StateMachine} is in a specified state at some point in the future.
|
33
30
|
class StatePredicate
|
34
|
-
|
35
31
|
# @private
|
36
32
|
def initialize(state_machine, state)
|
37
|
-
@state_machine
|
33
|
+
@state_machine = state_machine
|
34
|
+
@state = state
|
38
35
|
end
|
39
36
|
|
40
37
|
# @private
|
@@ -46,7 +43,6 @@ module Mocha
|
|
46
43
|
def mocha_inspect
|
47
44
|
"#{@state_machine.name} is not #{@state.mocha_inspect}"
|
48
45
|
end
|
49
|
-
|
50
46
|
end
|
51
47
|
|
52
48
|
# @private
|
@@ -88,9 +84,11 @@ module Mocha
|
|
88
84
|
end
|
89
85
|
|
90
86
|
# Provides a mechanism to determine whether the {StateMachine} is not in the state specified by +state_name+ at some point in the future.
|
87
|
+
# rubocop:disable Naming/PredicateName
|
91
88
|
def is_not(state_name)
|
92
89
|
StatePredicate.new(self, state_name)
|
93
90
|
end
|
91
|
+
# rubocop:enable Naming/PredicateName
|
94
92
|
|
95
93
|
# @private
|
96
94
|
def mocha_inspect
|
@@ -100,7 +98,5 @@ module Mocha
|
|
100
98
|
"#{@name} has no current state"
|
101
99
|
end
|
102
100
|
end
|
103
|
-
|
104
101
|
end
|
105
|
-
|
106
102
|
end
|
data/lib/mocha/stubbing_error.rb
CHANGED
@@ -1,19 +1,8 @@
|
|
1
|
-
require 'mocha/
|
1
|
+
require 'mocha/error_with_filtered_backtrace'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
# Exception raised when stubbing a particular method is not allowed.
|
6
5
|
#
|
7
6
|
# @see Configuration.prevent
|
8
|
-
class StubbingError <
|
9
|
-
|
10
|
-
# @private
|
11
|
-
def initialize(message = nil, backtrace = [])
|
12
|
-
super(message)
|
13
|
-
filter = BacktraceFilter.new
|
14
|
-
set_backtrace(filter.filtered(backtrace))
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
|
7
|
+
class StubbingError < ErrorWithFilteredBacktrace; end
|
19
8
|
end
|
data/lib/mocha/test_unit.rb
CHANGED
data/lib/mocha/thrower.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
# Exception raised when an unexpected method is invoked
|
4
3
|
class UnexpectedInvocation
|
5
|
-
|
6
4
|
# @private
|
7
5
|
def initialize(mock, symbol, *arguments)
|
8
|
-
@mock
|
6
|
+
@mock = mock
|
7
|
+
@symbol = symbol
|
8
|
+
@arguments = arguments
|
9
9
|
end
|
10
10
|
|
11
11
|
# @private
|
@@ -20,7 +20,5 @@ module Mocha
|
|
20
20
|
def short_description
|
21
21
|
"unexpected invocation: #{@symbol}(#{@arguments.join(', ')})"
|
22
22
|
end
|
23
|
-
|
24
23
|
end
|
25
|
-
|
26
24
|
end
|
data/lib/mocha/version.rb
CHANGED
@@ -3,18 +3,16 @@ require 'mocha/single_yield'
|
|
3
3
|
require 'mocha/multiple_yields'
|
4
4
|
|
5
5
|
module Mocha
|
6
|
-
|
7
6
|
class YieldParameters
|
8
|
-
|
9
7
|
def initialize
|
10
8
|
@parameter_groups = []
|
11
9
|
end
|
12
10
|
|
13
11
|
def next_invocation
|
14
12
|
case @parameter_groups.length
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
when 0 then NoYields.new
|
14
|
+
when 1 then @parameter_groups.first
|
15
|
+
else @parameter_groups.shift
|
18
16
|
end
|
19
17
|
end
|
20
18
|
|
@@ -25,7 +23,5 @@ module Mocha
|
|
25
23
|
def multiple_add(*parameter_groups)
|
26
24
|
@parameter_groups << MultipleYields.new(*parameter_groups)
|
27
25
|
end
|
28
|
-
|
29
26
|
end
|
30
|
-
|
31
27
|
end
|
data/mocha.gemspec
CHANGED
@@ -1,76 +1,52 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
1
|
lib = File.expand_path('../lib/', __FILE__)
|
3
2
|
$LOAD_PATH.unshift lib unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
3
|
+
require 'mocha/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
6
|
+
s.name = 'mocha'
|
8
7
|
s.version = Mocha::VERSION
|
9
8
|
s.licenses = ['MIT', 'BSD-2-Clause']
|
10
9
|
s.required_ruby_version = '>= 1.8.7'
|
11
10
|
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
s.email = "mocha-developer@googlegroups.com"
|
11
|
+
s.authors = ['James Mead']
|
12
|
+
s.description = 'Mocking and stubbing library with JMock/SchMock syntax, which allows mocking and stubbing of methods on real (non-mock) classes.'
|
13
|
+
s.email = 'mocha-developer@googlegroups.com'
|
16
14
|
|
17
15
|
s.files = `git ls-files`.split("\n")
|
18
|
-
s.files.delete(
|
19
|
-
s.files.delete(
|
16
|
+
s.files.delete('.travis.yml')
|
17
|
+
s.files.delete('.gitignore')
|
20
18
|
|
21
|
-
s.homepage =
|
22
|
-
s.require_paths = [
|
23
|
-
s.
|
24
|
-
s.
|
25
|
-
s.has_rdoc = "yard"
|
19
|
+
s.homepage = 'http://gofreerange.com/mocha/docs'
|
20
|
+
s.require_paths = ['lib']
|
21
|
+
s.summary = 'Mocking and stubbing library'
|
22
|
+
s.has_rdoc = 'yard'
|
26
23
|
|
27
|
-
s.add_dependency(
|
28
|
-
if s.respond_to? :specification_version then
|
29
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
30
|
-
s.specification_version = 3
|
24
|
+
s.add_dependency('metaclass', '~> 0.0.1')
|
31
25
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
s.add_development_dependency("rake", "~> 10.0")
|
37
|
-
end
|
38
|
-
s.add_development_dependency("introspection", "~> 0.0.1")
|
39
|
-
if RUBY_VERSION >= '2.2.0'
|
40
|
-
s.add_development_dependency("minitest")
|
41
|
-
end
|
42
|
-
if ENV["MOCHA_GENERATE_DOCS"]
|
43
|
-
s.add_development_dependency("yard")
|
44
|
-
s.add_development_dependency("redcarpet")
|
45
|
-
end
|
46
|
-
else
|
47
|
-
if RUBY_VERSION >= '1.9.3'
|
48
|
-
s.add_development_dependency("rake", ">= 0")
|
49
|
-
else
|
50
|
-
s.add_development_dependency("rake", "~> 10.0")
|
51
|
-
end
|
52
|
-
s.add_dependency("introspection", "~> 0.0.1")
|
53
|
-
if RUBY_VERSION >= '2.2.0'
|
54
|
-
s.add_dependency("minitest")
|
55
|
-
end
|
56
|
-
if ENV["MOCHA_GENERATE_DOCS"]
|
57
|
-
s.add_dependency("yard")
|
58
|
-
s.add_dependency("redcarpet")
|
26
|
+
unless s.respond_to?(:add_development_dependency)
|
27
|
+
class << s
|
28
|
+
def add_development_dependency(*args)
|
29
|
+
add_dependency(*args)
|
59
30
|
end
|
60
31
|
end
|
32
|
+
end
|
33
|
+
|
34
|
+
if RUBY_VERSION >= '1.9.3'
|
35
|
+
s.add_development_dependency('rake')
|
61
36
|
else
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
37
|
+
# Rake >= v11 does not support Ruby < v1.9.3 so use
|
38
|
+
s.add_development_dependency('rake', '~> 10.0')
|
39
|
+
end
|
40
|
+
s.add_development_dependency('introspection', '~> 0.0.1')
|
41
|
+
if RUBY_VERSION >= '2.2.0'
|
42
|
+
# No test libraries in standard library
|
43
|
+
s.add_development_dependency('minitest')
|
44
|
+
end
|
45
|
+
if RUBY_VERSION >= '1.9.2'
|
46
|
+
s.add_development_dependency('rubocop')
|
47
|
+
end
|
48
|
+
if ENV['MOCHA_GENERATE_DOCS']
|
49
|
+
s.add_development_dependency('redcarpet')
|
50
|
+
s.add_development_dependency('yard')
|
75
51
|
end
|
76
52
|
end
|