mocha 1.6.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/RELEASE.md +7 -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 +7 -15
- data/lib/mocha/change_state_side_effect.rb +0 -4
- data/lib/mocha/class_method.rb +31 -37
- data/lib/mocha/class_methods.rb +5 -13
- data/lib/mocha/configuration.rb +3 -9
- 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 +0 -4
- 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 +0 -1
- 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.rb +3 -4
- 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 +3 -1
- data/lib/mocha/integration/mini_test/version_140.rb +3 -1
- data/lib/mocha/integration/mini_test/version_141.rb +3 -1
- data/lib/mocha/integration/mini_test/version_142_to_172.rb +3 -1
- data/lib/mocha/integration/mini_test/version_200.rb +3 -1
- data/lib/mocha/integration/mini_test/version_201_to_222.rb +3 -1
- data/lib/mocha/integration/mini_test/version_2110_to_2111.rb +3 -1
- data/lib/mocha/integration/mini_test/version_2112_to_320.rb +3 -1
- data/lib/mocha/integration/mini_test/version_230_to_2101.rb +3 -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 +4 -2
- data/lib/mocha/integration/test_unit/gem_version_201_to_202.rb +4 -2
- data/lib/mocha/integration/test_unit/gem_version_203_to_220.rb +4 -2
- data/lib/mocha/integration/test_unit/gem_version_230_to_250.rb +4 -2
- data/lib/mocha/integration/test_unit/nothing.rb +4 -4
- data/lib/mocha/integration/test_unit/ruby_version_185_and_below.rb +3 -1
- data/lib/mocha/integration/test_unit/ruby_version_186_and_above.rb +3 -1
- 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 +27 -43
- data/lib/mocha/module_method.rb +0 -2
- 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 +0 -2
- data/lib/mocha/object_methods.rb +10 -14
- data/lib/mocha/parameter_matchers.rb +0 -2
- 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/parameters_matcher.rb +6 -9
- data/lib/mocha/pretty_parameters.rb +0 -4
- data/lib/mocha/receivers.rb +6 -12
- 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 +0 -2
- 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 -4
- 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 +0 -2
- 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 +5 -4
- 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 +7 -4
- 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 +0 -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 +9 -11
- 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 +9 -4
- 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 +28 -26
- 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 +6 -8
- 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 +8 -6
- 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 +22 -6
@@ -1,21 +1,17 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
class ArgumentIterator
|
4
|
-
|
5
3
|
def initialize(argument)
|
6
4
|
@argument = argument
|
7
5
|
end
|
8
6
|
|
9
|
-
def each
|
10
|
-
if @argument.is_a?(Hash)
|
7
|
+
def each
|
8
|
+
if @argument.is_a?(Hash)
|
11
9
|
@argument.each do |method_name, return_value|
|
12
|
-
|
10
|
+
yield method_name, return_value
|
13
11
|
end
|
14
12
|
else
|
15
|
-
|
13
|
+
yield @argument
|
16
14
|
end
|
17
15
|
end
|
18
|
-
|
19
16
|
end
|
20
|
-
|
21
17
|
end
|
@@ -1,8 +1,6 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
class BacktraceFilter
|
4
|
-
|
5
|
-
LIB_DIRECTORY = File.expand_path(File.join(File.dirname(__FILE__), "..")) + File::SEPARATOR
|
3
|
+
LIB_DIRECTORY = File.expand_path(File.join(File.dirname(__FILE__), '..')) + File::SEPARATOR
|
6
4
|
|
7
5
|
def initialize(lib_directory = LIB_DIRECTORY)
|
8
6
|
@path_pattern = Regexp.new(lib_directory)
|
@@ -11,7 +9,5 @@ module Mocha
|
|
11
9
|
def filtered(backtrace)
|
12
10
|
backtrace.reject { |location| @path_pattern.match(File.expand_path(location)) }
|
13
11
|
end
|
14
|
-
|
15
12
|
end
|
16
|
-
|
17
13
|
end
|
data/lib/mocha/cardinality.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
class Cardinality
|
4
|
-
|
5
3
|
INFINITY = 1 / 0.0
|
6
4
|
|
7
5
|
class << self
|
8
|
-
|
9
6
|
def exactly(count)
|
10
7
|
new(count, count)
|
11
8
|
end
|
@@ -20,15 +17,15 @@ module Mocha
|
|
20
17
|
|
21
18
|
def times(range_or_count)
|
22
19
|
case range_or_count
|
23
|
-
|
24
|
-
|
20
|
+
when Range then new(range_or_count.first, range_or_count.last)
|
21
|
+
else new(range_or_count, range_or_count)
|
25
22
|
end
|
26
23
|
end
|
27
|
-
|
28
24
|
end
|
29
25
|
|
30
26
|
def initialize(required, maximum)
|
31
|
-
@required
|
27
|
+
@required = required
|
28
|
+
@maximum = maximum
|
32
29
|
end
|
33
30
|
|
34
31
|
def invocations_allowed?(invocation_count)
|
@@ -48,28 +45,26 @@ module Mocha
|
|
48
45
|
end
|
49
46
|
|
50
47
|
def allowed_any_number_of_times?
|
51
|
-
required
|
48
|
+
required.zero? && infinite?(maximum)
|
52
49
|
end
|
53
50
|
|
54
51
|
def used?(invocation_count)
|
55
|
-
(invocation_count > 0) ||
|
52
|
+
(invocation_count > 0) || maximum.zero?
|
56
53
|
end
|
57
54
|
|
58
55
|
def mocha_inspect
|
59
56
|
if allowed_any_number_of_times?
|
60
|
-
|
57
|
+
'allowed any number of times'
|
58
|
+
elsif required.zero? && maximum.zero?
|
59
|
+
'expected never'
|
60
|
+
elsif required == maximum
|
61
|
+
"expected exactly #{times(required)}"
|
62
|
+
elsif infinite?(maximum)
|
63
|
+
"expected at least #{times(required)}"
|
64
|
+
elsif required.zero?
|
65
|
+
"expected at most #{times(maximum)}"
|
61
66
|
else
|
62
|
-
|
63
|
-
"expected never"
|
64
|
-
elsif required == maximum
|
65
|
-
"expected exactly #{times(required)}"
|
66
|
-
elsif infinite?(maximum)
|
67
|
-
"expected at least #{times(required)}"
|
68
|
-
elsif required == 0
|
69
|
-
"expected at most #{times(maximum)}"
|
70
|
-
else
|
71
|
-
"expected between #{required} and #{times(maximum)}"
|
72
|
-
end
|
67
|
+
"expected between #{required} and #{times(maximum)}"
|
73
68
|
end
|
74
69
|
end
|
75
70
|
|
@@ -79,17 +74,15 @@ module Mocha
|
|
79
74
|
|
80
75
|
def times(number)
|
81
76
|
case number
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
77
|
+
when 0 then 'no times'
|
78
|
+
when 1 then 'once'
|
79
|
+
when 2 then 'twice'
|
80
|
+
else "#{number} times"
|
86
81
|
end
|
87
82
|
end
|
88
83
|
|
89
84
|
def infinite?(number)
|
90
85
|
number.respond_to?(:infinite?) && number.infinite?
|
91
86
|
end
|
92
|
-
|
93
87
|
end
|
94
|
-
|
95
88
|
end
|
data/lib/mocha/central.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
class Central
|
4
|
-
|
5
3
|
class Null < self
|
6
|
-
|
7
4
|
def initialize(&block)
|
8
5
|
super
|
9
6
|
@raise_not_initialized_error = block
|
@@ -16,7 +13,6 @@ module Mocha
|
|
16
13
|
def unstub(*)
|
17
14
|
@raise_not_initialized_error.call
|
18
15
|
end
|
19
|
-
|
20
16
|
end
|
21
17
|
|
22
18
|
attr_accessor :stubba_methods
|
@@ -26,25 +22,21 @@ module Mocha
|
|
26
22
|
end
|
27
23
|
|
28
24
|
def stub(method)
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
25
|
+
return if stubba_methods.detect { |m| m.matches?(method) }
|
26
|
+
method.stub
|
27
|
+
stubba_methods.push(method)
|
33
28
|
end
|
34
29
|
|
35
30
|
def unstub(method)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
end
|
31
|
+
return unless (existing = stubba_methods.detect { |m| m.matches?(method) })
|
32
|
+
existing.unstub
|
33
|
+
stubba_methods.delete(existing)
|
40
34
|
end
|
41
35
|
|
42
36
|
def unstub_all
|
43
|
-
while stubba_methods.any?
|
37
|
+
while stubba_methods.any?
|
44
38
|
unstub(stubba_methods.first)
|
45
39
|
end
|
46
40
|
end
|
47
|
-
|
48
41
|
end
|
49
|
-
|
50
42
|
end
|
data/lib/mocha/class_method.rb
CHANGED
@@ -2,16 +2,15 @@ require 'mocha/ruby_version'
|
|
2
2
|
require 'metaclass'
|
3
3
|
|
4
4
|
module Mocha
|
5
|
-
|
6
5
|
class ClassMethod
|
7
|
-
|
8
6
|
PrependedModule = Class.new(Module)
|
9
7
|
|
10
8
|
attr_reader :stubbee, :method
|
11
9
|
|
12
10
|
def initialize(stubbee, method)
|
13
11
|
@stubbee = stubbee
|
14
|
-
@original_method
|
12
|
+
@original_method = nil
|
13
|
+
@original_visibility = nil
|
15
14
|
@method = PRE_RUBY_V19 ? method.to_s : method.to_sym
|
16
15
|
end
|
17
16
|
|
@@ -24,9 +23,8 @@ module Mocha
|
|
24
23
|
remove_new_method
|
25
24
|
restore_original_method
|
26
25
|
mock.unstub(method.to_sym)
|
27
|
-
|
28
|
-
|
29
|
-
end
|
26
|
+
return if mock.any_expectations?
|
27
|
+
reset_mocha
|
30
28
|
end
|
31
29
|
|
32
30
|
def mock
|
@@ -38,21 +36,22 @@ module Mocha
|
|
38
36
|
end
|
39
37
|
|
40
38
|
def hide_original_method
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
end
|
39
|
+
return unless (@original_visibility = method_visibility(method))
|
40
|
+
begin
|
41
|
+
if RUBY_V2_PLUS
|
42
|
+
@definition_target = PrependedModule.new
|
43
|
+
stubbee.__metaclass__.__send__ :prepend, @definition_target
|
44
|
+
else
|
45
|
+
@original_method = stubbee._method(method)
|
46
|
+
if @original_method && @original_method.owner == stubbee.__metaclass__
|
47
|
+
stubbee.__metaclass__.send(:remove_method, method)
|
51
48
|
end
|
52
|
-
rescue NameError
|
53
|
-
# deal with nasties like ActiveRecord::Associations::AssociationProxy
|
54
49
|
end
|
50
|
+
# rubocop:disable Lint/HandleExceptions
|
51
|
+
rescue NameError
|
52
|
+
# deal with nasties like ActiveRecord::Associations::AssociationProxy
|
55
53
|
end
|
54
|
+
# rubocop:enable Lint/HandleExceptions
|
56
55
|
end
|
57
56
|
|
58
57
|
def define_new_method
|
@@ -61,9 +60,8 @@ module Mocha
|
|
61
60
|
mocha.method_missing(:#{method}, *args, &block)
|
62
61
|
end
|
63
62
|
CODE
|
64
|
-
|
65
|
-
|
66
|
-
end
|
63
|
+
return unless @original_visibility
|
64
|
+
Module.instance_method(@original_visibility).bind(definition_target).call(method)
|
67
65
|
end
|
68
66
|
|
69
67
|
def remove_new_method
|
@@ -71,26 +69,24 @@ module Mocha
|
|
71
69
|
end
|
72
70
|
|
73
71
|
def restore_original_method
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
end
|
81
|
-
else
|
82
|
-
stubbee.__metaclass__.send(:define_method, method, @original_method)
|
72
|
+
return if RUBY_V2_PLUS
|
73
|
+
if @original_method && @original_method.owner == stubbee.__metaclass__
|
74
|
+
if PRE_RUBY_V19
|
75
|
+
original_method = @original_method
|
76
|
+
stubbee.__metaclass__.send(:define_method, method) do |*args, &block|
|
77
|
+
original_method.call(*args, &block)
|
83
78
|
end
|
84
|
-
|
85
|
-
|
86
|
-
Module.instance_method(@original_visibility).bind(stubbee.__metaclass__).call(method)
|
79
|
+
else
|
80
|
+
stubbee.__metaclass__.send(:define_method, method, @original_method)
|
87
81
|
end
|
88
82
|
end
|
83
|
+
return unless @original_visibility
|
84
|
+
Module.instance_method(@original_visibility).bind(stubbee.__metaclass__).call(method)
|
89
85
|
end
|
90
86
|
|
91
87
|
def matches?(other)
|
92
|
-
return false unless
|
93
|
-
(stubbee.object_id == other.stubbee.object_id)
|
88
|
+
return false unless other.class == self.class
|
89
|
+
(stubbee.object_id == other.stubbee.object_id) && (method == other.method)
|
94
90
|
end
|
95
91
|
|
96
92
|
alias_method :==, :eql?
|
@@ -113,7 +109,5 @@ module Mocha
|
|
113
109
|
def definition_target
|
114
110
|
@definition_target ||= stubbee.__metaclass__
|
115
111
|
end
|
116
|
-
|
117
112
|
end
|
118
|
-
|
119
113
|
end
|
data/lib/mocha/class_methods.rb
CHANGED
@@ -3,10 +3,8 @@ require 'mocha/class_method'
|
|
3
3
|
require 'mocha/any_instance_method'
|
4
4
|
|
5
5
|
module Mocha
|
6
|
-
|
7
6
|
# Methods added to all classes to allow mocking and stubbing on real (i.e. non-mock) objects.
|
8
7
|
module ClassMethods
|
9
|
-
|
10
8
|
# @private
|
11
9
|
def stubba_method
|
12
10
|
Mocha::ClassMethod
|
@@ -14,7 +12,6 @@ module Mocha
|
|
14
12
|
|
15
13
|
# @private
|
16
14
|
class AnyInstance
|
17
|
-
|
18
15
|
def initialize(klass)
|
19
16
|
@stubba_object = klass
|
20
17
|
end
|
@@ -31,20 +28,17 @@ module Mocha
|
|
31
28
|
Mocha::AnyInstanceMethod
|
32
29
|
end
|
33
30
|
|
34
|
-
|
35
|
-
@stubba_object
|
36
|
-
end
|
31
|
+
attr_reader :stubba_object
|
37
32
|
|
38
33
|
def method_exists?(method, include_public_methods = true)
|
39
34
|
if include_public_methods
|
40
|
-
return true if @stubba_object.public_instance_methods(
|
35
|
+
return true if @stubba_object.public_instance_methods(true).include?(method)
|
41
36
|
return true if @stubba_object.allocate.respond_to?(method.to_sym)
|
42
37
|
end
|
43
|
-
return true if @stubba_object.protected_instance_methods(
|
44
|
-
return true if @stubba_object.private_instance_methods(
|
45
|
-
|
38
|
+
return true if @stubba_object.protected_instance_methods(true).include?(method)
|
39
|
+
return true if @stubba_object.private_instance_methods(true).include?(method)
|
40
|
+
false
|
46
41
|
end
|
47
|
-
|
48
42
|
end
|
49
43
|
|
50
44
|
# @return [Mock] a mock object which will detect calls to any instance of this class.
|
@@ -62,7 +56,5 @@ module Mocha
|
|
62
56
|
end
|
63
57
|
@any_instance ||= AnyInstance.new(self)
|
64
58
|
end
|
65
|
-
|
66
59
|
end
|
67
|
-
|
68
60
|
end
|
data/lib/mocha/configuration.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
module Mocha
|
2
|
-
|
3
2
|
# This class allows you to determine what should happen under certain circumstances. In each scenario, Mocha can be configured to {.allow do nothing}, {.warn_when display a warning message}, or {.prevent raise an exception}. The relevant scenario is identified using one of the following symbols:
|
4
3
|
#
|
5
4
|
# * +:stubbing_method_unnecessarily+ This is useful for identifying unused stubs. Unused stubs are often accidentally introduced when code is {http://martinfowler.com/bliki/DefinitionOfRefactoring.html refactored}. Allowed by default.
|
@@ -67,17 +66,15 @@ module Mocha
|
|
67
66
|
# # => no exception raised
|
68
67
|
# end
|
69
68
|
class Configuration
|
70
|
-
|
71
69
|
DEFAULTS = {
|
72
70
|
:stubbing_method_unnecessarily => :allow,
|
73
71
|
:stubbing_method_on_non_mock_object => :allow,
|
74
72
|
:stubbing_non_existent_method => :allow,
|
75
73
|
:stubbing_non_public_method => :allow,
|
76
|
-
:stubbing_method_on_nil => :prevent
|
77
|
-
}
|
74
|
+
:stubbing_method_on_nil => :prevent
|
75
|
+
}.freeze
|
78
76
|
|
79
77
|
class << self
|
80
|
-
|
81
78
|
# Allow the specified +action+.
|
82
79
|
#
|
83
80
|
# @param [Symbol] action one of +:stubbing_method_unnecessarily+, +:stubbing_method_on_non_mock_object+, +:stubbing_non_existent_method+, +:stubbing_non_public_method+, +:stubbing_method_on_nil+.
|
@@ -139,16 +136,13 @@ module Mocha
|
|
139
136
|
end
|
140
137
|
|
141
138
|
# @private
|
142
|
-
def temporarily_change_config(action, new_value
|
139
|
+
def temporarily_change_config(action, new_value)
|
143
140
|
original_value = configuration[action]
|
144
141
|
configuration[action] = new_value
|
145
142
|
yield
|
146
143
|
ensure
|
147
144
|
configuration[action] = original_value
|
148
145
|
end
|
149
|
-
|
150
146
|
end
|
151
|
-
|
152
147
|
end
|
153
|
-
|
154
148
|
end
|
data/lib/mocha/debug.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
module Mocha
|
2
2
|
module Debug
|
3
3
|
OPTIONS = (ENV['MOCHA_OPTIONS'] || '').split(',').inject({}) do |hash, key|
|
4
|
-
hash[key] = true
|
4
|
+
hash[key] = true
|
5
|
+
hash
|
5
6
|
end.freeze
|
6
7
|
|
7
8
|
def self.puts(message)
|
8
|
-
|
9
|
+
warn(message) if OPTIONS['debug']
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
data/lib/mocha/deprecation.rb
CHANGED
@@ -1,27 +1,20 @@
|
|
1
1
|
require 'mocha/backtrace_filter'
|
2
2
|
|
3
3
|
module Mocha
|
4
|
-
|
5
4
|
class Deprecation
|
6
|
-
|
7
5
|
class << self
|
8
|
-
|
9
6
|
attr_accessor :mode, :messages
|
10
7
|
|
11
8
|
def warning(message)
|
12
9
|
@messages << message
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
10
|
+
return if mode == :disabled
|
11
|
+
filter = BacktraceFilter.new
|
12
|
+
location = filter.filtered(caller)[0]
|
13
|
+
warn "Mocha deprecation warning at #{location}: #{message}"
|
18
14
|
end
|
19
|
-
|
20
15
|
end
|
21
16
|
|
22
17
|
self.mode = :enabled
|
23
18
|
self.messages = []
|
24
|
-
|
25
19
|
end
|
26
|
-
|
27
20
|
end
|