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
data/test/mini_test_result.rb
CHANGED
@@ -2,16 +2,15 @@ require 'stringio'
|
|
2
2
|
require 'minitest/unit'
|
3
3
|
|
4
4
|
class MiniTestResult
|
5
|
-
|
6
5
|
minitest_version = Gem::Version.new(::MiniTest::Unit::VERSION)
|
7
6
|
if Gem::Requirement.new('<= 4.6.1').satisfied_by?(minitest_version)
|
8
|
-
FAILURE_PATTERN =
|
9
|
-
ERROR_PATTERN =
|
10
|
-
PATTERN_INDICES = { :method => 2, :testcase => 3 }
|
7
|
+
FAILURE_PATTERN = /(Failure)\:\n([^\(]+)\(([^\)]+)\) \[([^\]]+)\]\:\n(.*)\n/m
|
8
|
+
ERROR_PATTERN = /(Error)\:\n([^\(]+)\(([^\)]+)\)\:\n(.+?)\n/m
|
9
|
+
PATTERN_INDICES = { :method => 2, :testcase => 3 }.freeze
|
11
10
|
else
|
12
|
-
FAILURE_PATTERN =
|
13
|
-
ERROR_PATTERN =
|
14
|
-
PATTERN_INDICES = { :method => 3, :testcase => 2 }
|
11
|
+
FAILURE_PATTERN = /(Failure)\:\n.([^#]+)\#([^ ]+) \[([^\]]+)\]\:\n(.*)\n/m
|
12
|
+
ERROR_PATTERN = /(Error)\:\n.([^#]+)\#([^ ]+)\:\n(.+?)\n/m
|
13
|
+
PATTERN_INDICES = { :method => 3, :testcase => 2 }.freeze
|
15
14
|
end
|
16
15
|
|
17
16
|
def self.parse_failure(raw)
|
@@ -30,7 +29,10 @@ class MiniTestResult
|
|
30
29
|
class Failure
|
31
30
|
attr_reader :method, :test_case, :location, :message
|
32
31
|
def initialize(method, test_case, location, message)
|
33
|
-
@method
|
32
|
+
@method = method
|
33
|
+
@test_case = test_case
|
34
|
+
@location = location
|
35
|
+
@message = message
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
@@ -38,18 +40,22 @@ class MiniTestResult
|
|
38
40
|
class Exception
|
39
41
|
attr_reader :message, :backtrace
|
40
42
|
def initialize(message, location)
|
41
|
-
@message
|
43
|
+
@message = message
|
44
|
+
@backtrace = location
|
42
45
|
end
|
43
46
|
end
|
44
47
|
|
45
48
|
attr_reader :method, :test_case, :exception
|
46
49
|
def initialize(method, test_case, message, backtrace)
|
47
|
-
@method
|
50
|
+
@method = method
|
51
|
+
@test_case = test_case
|
52
|
+
@exception = Exception.new(message, backtrace)
|
48
53
|
end
|
49
54
|
end
|
50
55
|
|
51
56
|
def initialize(runner, tests)
|
52
|
-
@runner
|
57
|
+
@runner = runner
|
58
|
+
@tests = tests
|
53
59
|
end
|
54
60
|
|
55
61
|
def failure_count
|
data/test/minitest_result.rb
CHANGED
data/test/simple_counter.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -2,22 +2,26 @@ unless defined?(STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS)
|
|
2
2
|
STANDARD_OBJECT_PUBLIC_INSTANCE_METHODS = Object.instance_methods + Object.private_instance_methods
|
3
3
|
end
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
|
+
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__)))
|
7
|
+
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), 'unit'))
|
8
|
+
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), 'unit', 'parameter_matchers'))
|
9
|
+
$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), 'acceptance'))
|
10
10
|
|
11
11
|
require 'mocha/detection/mini_test'
|
12
12
|
|
13
13
|
begin
|
14
14
|
require 'minitest'
|
15
|
+
# rubocop:disable Lint/HandleExceptions
|
15
16
|
rescue LoadError
|
16
17
|
end
|
18
|
+
# rubocop:enable Lint/HandleExceptions
|
17
19
|
begin
|
18
20
|
require 'minitest/unit'
|
21
|
+
# rubocop:disable Lint/HandleExceptions
|
19
22
|
rescue LoadError
|
20
23
|
end
|
24
|
+
# rubocop:enable Lint/HandleExceptions
|
21
25
|
|
22
26
|
module Mocha; end
|
23
27
|
|
@@ -27,6 +31,7 @@ if (minitest_testcase = Mocha::Detection::MiniTest.testcase) && (ENV['MOCHA_RUN_
|
|
27
31
|
rescue LoadError
|
28
32
|
MiniTest::Unit.autorun
|
29
33
|
end
|
34
|
+
# rubocop:disable Style/ClassAndModuleChildren
|
30
35
|
class Mocha::TestCase < minitest_testcase
|
31
36
|
def assert_nothing_raised(exception = StandardError)
|
32
37
|
yield
|
@@ -39,12 +44,15 @@ if (minitest_testcase = Mocha::Detection::MiniTest.testcase) && (ENV['MOCHA_RUN_
|
|
39
44
|
alias_method :assert_not_same, :refute_same
|
40
45
|
alias_method :assert_no_match, :refute_match
|
41
46
|
end
|
47
|
+
# rubocop:enable Style/ClassAndModuleChildren
|
42
48
|
else
|
43
49
|
require 'test/unit'
|
50
|
+
# rubocop:disable Style/ClassAndModuleChildren
|
44
51
|
class Mocha::TestCase < Test::Unit::TestCase
|
45
52
|
def test_dummy
|
46
53
|
# Some versions (?) of Test::Unit try to run this base class as a test case
|
47
54
|
# and it fails because it has no test methods, so I'm adding a dummy test.
|
48
55
|
end
|
49
56
|
end
|
57
|
+
# rubocop:enable Style/ClassAndModuleChildren
|
50
58
|
end
|
data/test/test_runner.rb
CHANGED
@@ -23,9 +23,7 @@ module TestRunner
|
|
23
23
|
minitest_version = Gem::Version.new(Mocha::Detection::MiniTest.version)
|
24
24
|
if Gem::Requirement.new('>= 5.0.0').satisfied_by?(minitest_version)
|
25
25
|
require File.expand_path('../minitest_result', __FILE__)
|
26
|
-
tests.each
|
27
|
-
test.run
|
28
|
-
end
|
26
|
+
tests.each(&:run)
|
29
27
|
Minitest::Runnable.runnables.delete(test_class)
|
30
28
|
test_result = MinitestResult.new(tests)
|
31
29
|
elsif Gem::Requirement.new('> 0.0.0', '< 5.0.0').satisfied_by?(minitest_version)
|
@@ -53,6 +51,6 @@ module TestRunner
|
|
53
51
|
end
|
54
52
|
|
55
53
|
def assert_failed(test_result)
|
56
|
-
flunk
|
54
|
+
flunk 'Test passed unexpectedly' unless test_result.failure_count + test_result.error_count > 0
|
57
55
|
end
|
58
56
|
end
|
data/test/test_unit_result.rb
CHANGED
@@ -6,13 +6,15 @@ class TestUnitResult
|
|
6
6
|
class << test_result
|
7
7
|
attr_reader :failures, :errors
|
8
8
|
def failure_messages
|
9
|
-
failures.map
|
9
|
+
failures.map(&:message)
|
10
10
|
end
|
11
|
+
|
11
12
|
def failure_message_lines
|
12
13
|
failure_messages.map { |message| message.split("\n") }.flatten
|
13
14
|
end
|
15
|
+
|
14
16
|
def error_messages
|
15
|
-
errors.map
|
17
|
+
errors.map(&:message)
|
16
18
|
end
|
17
19
|
end
|
18
20
|
test_result
|
@@ -4,19 +4,18 @@ require 'mocha/mock'
|
|
4
4
|
require 'mocha/any_instance_method'
|
5
5
|
|
6
6
|
class AnyInstanceMethodTest < Mocha::TestCase
|
7
|
-
|
8
7
|
include Mocha
|
9
8
|
|
10
|
-
unless RUBY_V2_PLUS
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
unless RUBY_V2_PLUS
|
10
|
+
def test_should_hide_original_method
|
11
|
+
klass = Class.new { def method_x; end }
|
12
|
+
method = AnyInstanceMethod.new(klass, :method_x)
|
14
13
|
|
15
|
-
|
14
|
+
method.hide_original_method
|
16
15
|
|
17
|
-
|
16
|
+
assert_equal false, klass.method_defined?(:method_x)
|
17
|
+
end
|
18
18
|
end
|
19
|
-
end
|
20
19
|
|
21
20
|
def test_should_not_raise_error_hiding_method_that_isnt_defined
|
22
21
|
klass = Class.new
|
@@ -45,7 +44,11 @@ end
|
|
45
44
|
end
|
46
45
|
|
47
46
|
def test_should_restore_original_method
|
48
|
-
klass = Class.new
|
47
|
+
klass = Class.new do
|
48
|
+
def method_x
|
49
|
+
:original_result
|
50
|
+
end
|
51
|
+
end
|
49
52
|
method = AnyInstanceMethod.new(klass, :method_x)
|
50
53
|
|
51
54
|
method.hide_original_method
|
@@ -59,7 +62,11 @@ end
|
|
59
62
|
end
|
60
63
|
|
61
64
|
def test_should_not_restore_original_method_if_none_was_defined_in_first_place
|
62
|
-
klass = Class.new
|
65
|
+
klass = Class.new do
|
66
|
+
def method_x
|
67
|
+
:new_result
|
68
|
+
end
|
69
|
+
end
|
63
70
|
method = AnyInstanceMethod.new(klass, :method_x)
|
64
71
|
|
65
72
|
method.restore_original_method
|
@@ -75,8 +82,8 @@ end
|
|
75
82
|
any_instance.stubs(:mocha).returns(any_instance_mocha)
|
76
83
|
klass.define_instance_method(:any_instance) { any_instance }
|
77
84
|
method = AnyInstanceMethod.new(klass, :method_x)
|
78
|
-
method.replace_instance_method(:restore_original_method) {
|
79
|
-
method.replace_instance_method(:reset_mocha) {
|
85
|
+
method.replace_instance_method(:restore_original_method) {}
|
86
|
+
method.replace_instance_method(:reset_mocha) {}
|
80
87
|
method.define_instance_accessor(:remove_called)
|
81
88
|
method.replace_instance_method(:remove_new_method) { self.remove_called = true }
|
82
89
|
|
@@ -92,8 +99,8 @@ end
|
|
92
99
|
any_instance.stubs(:mocha).returns(any_instance_mocha)
|
93
100
|
klass.define_instance_method(:any_instance) { any_instance }
|
94
101
|
method = AnyInstanceMethod.new(klass, :method_x)
|
95
|
-
method.replace_instance_method(:remove_new_method) {
|
96
|
-
method.replace_instance_method(:reset_mocha) {
|
102
|
+
method.replace_instance_method(:remove_new_method) {}
|
103
|
+
method.replace_instance_method(:reset_mocha) {}
|
97
104
|
method.define_instance_accessor(:restore_called)
|
98
105
|
method.replace_instance_method(:restore_original_method) { self.restore_called = true }
|
99
106
|
|
@@ -107,9 +114,16 @@ end
|
|
107
114
|
|
108
115
|
method = AnyInstanceMethod.new(klass, :method_x)
|
109
116
|
|
110
|
-
method.replace_instance_method(:remove_new_method) {
|
111
|
-
method.replace_instance_method(:restore_original_method) {
|
112
|
-
mocha = Class.new
|
117
|
+
method.replace_instance_method(:remove_new_method) {}
|
118
|
+
method.replace_instance_method(:restore_original_method) {}
|
119
|
+
mocha = Class.new do
|
120
|
+
class << self
|
121
|
+
attr_accessor :unstub_method
|
122
|
+
end
|
123
|
+
def self.unstub(method)
|
124
|
+
self.unstub_method = method
|
125
|
+
end
|
126
|
+
end
|
113
127
|
mocha.define_instance_method(:any_expectations?) { true }
|
114
128
|
method.replace_instance_method(:mock) { mocha }
|
115
129
|
|
@@ -2,15 +2,13 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
require 'mocha/inspect'
|
3
3
|
|
4
4
|
class ArrayInspectTest < Mocha::TestCase
|
5
|
-
|
6
5
|
def test_should_use_inspect
|
7
6
|
array = [1, 2]
|
8
7
|
assert_equal array.inspect, array.mocha_inspect
|
9
8
|
end
|
10
9
|
|
11
10
|
def test_should_use_mocha_inspect_on_each_item
|
12
|
-
array = [1, 2,
|
13
|
-
assert_equal %
|
11
|
+
array = [1, 2, 'chris']
|
12
|
+
assert_equal %([1, 2, "chris"]), array.mocha_inspect
|
14
13
|
end
|
15
|
-
|
16
14
|
end
|
@@ -2,18 +2,16 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
require 'mocha/backtrace_filter'
|
3
3
|
|
4
4
|
class BacktraceFilterTest < Mocha::TestCase
|
5
|
-
|
6
5
|
include Mocha
|
7
6
|
|
8
7
|
def test_should_exclude_mocha_locations_from_backtrace
|
9
|
-
mocha_lib =
|
10
|
-
backtrace = [
|
8
|
+
mocha_lib = '/username/workspace/mocha_wibble/lib/'
|
9
|
+
backtrace = [mocha_lib + 'exclude/me/1', mocha_lib + 'exclude/me/2', '/keep/me', mocha_lib + 'exclude/me/3']
|
11
10
|
filter = BacktraceFilter.new(mocha_lib)
|
12
11
|
assert_equal ['/keep/me'], filter.filtered(backtrace)
|
13
12
|
end
|
14
13
|
|
15
14
|
def test_should_determine_path_for_mocha_lib_directory
|
16
|
-
assert_match Regexp.new(
|
15
|
+
assert_match Regexp.new('/lib/$'), BacktraceFilter::LIB_DIRECTORY
|
17
16
|
end
|
18
|
-
|
19
17
|
end
|
@@ -2,7 +2,6 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
2
2
|
require 'mocha/cardinality'
|
3
3
|
|
4
4
|
class CardinalityTest < Mocha::TestCase
|
5
|
-
|
6
5
|
include Mocha
|
7
6
|
|
8
7
|
def test_should_allow_invocations_if_invocation_count_has_not_yet_reached_maximum
|
@@ -52,5 +51,4 @@ class CardinalityTest < Mocha::TestCase
|
|
52
51
|
def test_should_not_need_verifying
|
53
52
|
assert_equal false, Cardinality.at_least(0).needs_verifying?
|
54
53
|
end
|
55
|
-
|
56
54
|
end
|
data/test/unit/central_test.rb
CHANGED
@@ -5,7 +5,6 @@ require 'mocha/mock'
|
|
5
5
|
require 'method_definer'
|
6
6
|
|
7
7
|
class CentralTest < Mocha::TestCase
|
8
|
-
|
9
8
|
include Mocha
|
10
9
|
|
11
10
|
def test_should_start_with_empty_stubba_methods
|
@@ -48,48 +47,48 @@ class CentralTest < Mocha::TestCase
|
|
48
47
|
|
49
48
|
def test_should_unstub_specified_method
|
50
49
|
stubba = Central.new
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
stubba.stubba_methods = [
|
50
|
+
method1 = build_mock
|
51
|
+
method1.stubs(:matches?).returns(false)
|
52
|
+
method2 = build_mock
|
53
|
+
method2.stubs(:matches?).returns(true)
|
54
|
+
method2.expects(:unstub)
|
55
|
+
stubba.stubba_methods = [method1, method2]
|
57
56
|
|
58
|
-
stubba.unstub(
|
57
|
+
stubba.unstub(method2)
|
59
58
|
|
60
|
-
assert_equal [
|
61
|
-
assert
|
59
|
+
assert_equal [method1], stubba.stubba_methods
|
60
|
+
assert method2.__verified__?
|
62
61
|
end
|
63
62
|
|
64
63
|
def test_should_not_unstub_specified_method_if_not_already_stubbed
|
65
64
|
stubba = Central.new
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
stubba.stubba_methods = [
|
65
|
+
method1 = build_mock
|
66
|
+
method1.stubs(:matches?).returns(false)
|
67
|
+
method2 = build_mock
|
68
|
+
method2.expects(:unstub).never
|
69
|
+
stubba.stubba_methods = [method1]
|
71
70
|
|
72
|
-
stubba.unstub(
|
71
|
+
stubba.unstub(method2)
|
73
72
|
|
74
|
-
assert_equal [
|
75
|
-
assert
|
73
|
+
assert_equal [method1], stubba.stubba_methods
|
74
|
+
assert method2.__verified__?
|
76
75
|
end
|
77
76
|
|
78
77
|
def test_should_unstub_all_methods
|
79
78
|
stubba = Central.new
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
stubba.stubba_methods = [
|
79
|
+
method1 = build_mock
|
80
|
+
method1.stubs(:matches?).returns(true)
|
81
|
+
method1.expects(:unstub)
|
82
|
+
method2 = build_mock
|
83
|
+
method2.stubs(:matches?).returns(true)
|
84
|
+
method2.expects(:unstub)
|
85
|
+
stubba.stubba_methods = [method1, method2]
|
87
86
|
|
88
87
|
stubba.unstub_all
|
89
88
|
|
90
89
|
assert_equal [], stubba.stubba_methods
|
91
|
-
assert
|
92
|
-
assert
|
90
|
+
assert method1.__verified__?
|
91
|
+
assert method2.__verified__?
|
93
92
|
end
|
94
93
|
|
95
94
|
private
|
@@ -3,11 +3,9 @@ require File.expand_path('../../test_helper', __FILE__)
|
|
3
3
|
require 'mocha/change_state_side_effect'
|
4
4
|
|
5
5
|
class ChangeStateSideEffectTest < Mocha::TestCase
|
6
|
-
|
7
6
|
include Mocha
|
8
7
|
|
9
8
|
class FakeState
|
10
|
-
|
11
9
|
attr_reader :active
|
12
10
|
attr_writer :description
|
13
11
|
|
@@ -18,7 +16,6 @@ class ChangeStateSideEffectTest < Mocha::TestCase
|
|
18
16
|
def mocha_inspect
|
19
17
|
@description
|
20
18
|
end
|
21
|
-
|
22
19
|
end
|
23
20
|
|
24
21
|
def test_should_activate_the_given_state
|
@@ -37,5 +34,4 @@ class ChangeStateSideEffectTest < Mocha::TestCase
|
|
37
34
|
|
38
35
|
assert_equal 'then the-new-state', side_effect.mocha_inspect
|
39
36
|
end
|
40
|
-
|
41
37
|
end
|
@@ -5,20 +5,19 @@ require 'mocha/mock'
|
|
5
5
|
require 'mocha/class_method'
|
6
6
|
|
7
7
|
class ClassMethodTest < Mocha::TestCase
|
8
|
-
|
9
8
|
include Mocha
|
10
9
|
|
11
|
-
unless RUBY_V2_PLUS
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
unless RUBY_V2_PLUS
|
11
|
+
def test_should_hide_original_method
|
12
|
+
klass = Class.new { def self.method_x; end }
|
13
|
+
klass.__metaclass__.send(:alias_method, :_method, :method)
|
14
|
+
method = ClassMethod.new(klass, :method_x)
|
16
15
|
|
17
|
-
|
16
|
+
method.hide_original_method
|
18
17
|
|
19
|
-
|
18
|
+
assert_equal false, klass.respond_to?(:method_x)
|
19
|
+
end
|
20
20
|
end
|
21
|
-
end
|
22
21
|
|
23
22
|
def test_should_not_raise_error_hiding_method_that_isnt_defined
|
24
23
|
klass = Class.new
|
@@ -59,7 +58,11 @@ end
|
|
59
58
|
end
|
60
59
|
|
61
60
|
def test_should_restore_original_method
|
62
|
-
klass = Class.new
|
61
|
+
klass = Class.new do
|
62
|
+
def self.method_x
|
63
|
+
:original_result
|
64
|
+
end
|
65
|
+
end
|
63
66
|
klass.__metaclass__.send(:alias_method, :_method, :method)
|
64
67
|
method = ClassMethod.new(klass, :method_x)
|
65
68
|
|
@@ -73,7 +76,11 @@ end
|
|
73
76
|
end
|
74
77
|
|
75
78
|
def test_should_restore_original_method_accepting_a_block_parameter
|
76
|
-
klass = Class.new
|
79
|
+
klass = Class.new do
|
80
|
+
def self.method_x(&block)
|
81
|
+
block.call if block_given?
|
82
|
+
end
|
83
|
+
end
|
77
84
|
klass.__metaclass__.send(:alias_method, :_method, :method)
|
78
85
|
method = ClassMethod.new(klass, :method_x)
|
79
86
|
|
@@ -88,7 +95,11 @@ end
|
|
88
95
|
end
|
89
96
|
|
90
97
|
def test_should_not_restore_original_method_if_none_was_defined_in_first_place
|
91
|
-
klass = Class.new
|
98
|
+
klass = Class.new do
|
99
|
+
def self.method_x
|
100
|
+
:new_result
|
101
|
+
end
|
102
|
+
end
|
92
103
|
method = ClassMethod.new(klass, :method_x)
|
93
104
|
|
94
105
|
method.restore_original_method
|
@@ -124,7 +135,7 @@ end
|
|
124
135
|
method = ClassMethod.new(klass, :method_x)
|
125
136
|
mocha = build_mock
|
126
137
|
klass.define_instance_method(:mocha) { mocha }
|
127
|
-
method.replace_instance_method(:reset_mocha) {
|
138
|
+
method.replace_instance_method(:reset_mocha) {}
|
128
139
|
method.define_instance_accessor(:remove_called)
|
129
140
|
method.replace_instance_method(:remove_new_method) { self.remove_called = true }
|
130
141
|
|
@@ -138,7 +149,7 @@ end
|
|
138
149
|
mocha = build_mock
|
139
150
|
klass.define_instance_method(:mocha) { mocha }
|
140
151
|
method = ClassMethod.new(klass, :method_x)
|
141
|
-
method.replace_instance_method(:reset_mocha) {
|
152
|
+
method.replace_instance_method(:reset_mocha) {}
|
142
153
|
method.define_instance_accessor(:restore_called)
|
143
154
|
method.replace_instance_method(:restore_original_method) { self.restore_called = true }
|
144
155
|
|
@@ -150,8 +161,15 @@ end
|
|
150
161
|
def test_should_call_mocha_unstub
|
151
162
|
klass = Class.new { def self.method_x; end }
|
152
163
|
method = ClassMethod.new(klass, :method_x)
|
153
|
-
method.replace_instance_method(:restore_original_method) {
|
154
|
-
mocha = Class.new
|
164
|
+
method.replace_instance_method(:restore_original_method) {}
|
165
|
+
mocha = Class.new do
|
166
|
+
class << self
|
167
|
+
attr_accessor :unstub_method
|
168
|
+
end
|
169
|
+
def self.unstub(method)
|
170
|
+
self.unstub_method = method
|
171
|
+
end
|
172
|
+
end
|
155
173
|
mocha.define_instance_method(:any_expectations?) { true }
|
156
174
|
method.replace_instance_method(:mock) { mocha }
|
157
175
|
|
@@ -162,13 +180,18 @@ end
|
|
162
180
|
def test_should_call_stubbee_reset_mocha_if_no_expectations_remaining
|
163
181
|
klass = Class.new { def self.method_x; end }
|
164
182
|
method = ClassMethod.new(klass, :method_x)
|
165
|
-
method.replace_instance_method(:remove_new_method) {
|
166
|
-
method.replace_instance_method(:restore_original_method) {
|
183
|
+
method.replace_instance_method(:remove_new_method) {}
|
184
|
+
method.replace_instance_method(:restore_original_method) {}
|
167
185
|
mocha = Class.new
|
168
186
|
mocha.define_instance_method(:unstub) { |method_name| }
|
169
187
|
mocha.define_instance_method(:any_expectations?) { false }
|
170
188
|
method.replace_instance_method(:mock) { mocha }
|
171
|
-
stubbee = Class.new
|
189
|
+
stubbee = Class.new do
|
190
|
+
attr_accessor :reset_mocha_called
|
191
|
+
def reset_mocha
|
192
|
+
self.reset_mocha_called = true
|
193
|
+
end
|
194
|
+
end.new
|
172
195
|
method.replace_instance_method(:stubbee) { stubbee }
|
173
196
|
|
174
197
|
method.unstub
|
@@ -191,34 +214,36 @@ end
|
|
191
214
|
end
|
192
215
|
|
193
216
|
def test_should_not_match_if_other_class_method_has_different_stubbee
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
assert !
|
217
|
+
stubbee1 = Object.new
|
218
|
+
stubbee2 = Object.new
|
219
|
+
class_method1 = ClassMethod.new(stubbee1, :method)
|
220
|
+
class_method2 = ClassMethod.new(stubbee2, :method)
|
221
|
+
assert !class_method1.matches?(class_method2)
|
199
222
|
end
|
200
223
|
|
201
224
|
def test_should_not_match_if_other_class_method_has_different_method
|
202
225
|
stubbee = Object.new
|
203
|
-
|
204
|
-
|
205
|
-
assert !
|
226
|
+
class_method1 = ClassMethod.new(stubbee, :method_1)
|
227
|
+
class_method2 = ClassMethod.new(stubbee, :method_2)
|
228
|
+
assert !class_method1.matches?(class_method2)
|
206
229
|
end
|
207
230
|
|
208
231
|
def test_should_match_if_other_class_method_has_same_stubbee_and_same_method_so_no_attempt_is_made_to_stub_a_method_twice
|
209
232
|
stubbee = Object.new
|
210
|
-
|
211
|
-
|
212
|
-
assert
|
233
|
+
class_method1 = ClassMethod.new(stubbee, :method)
|
234
|
+
class_method2 = ClassMethod.new(stubbee, :method)
|
235
|
+
assert class_method1.matches?(class_method2)
|
213
236
|
end
|
214
237
|
|
215
238
|
def test_should_match_if_other_class_method_has_same_stubbee_and_same_method_but_stubbee_equal_method_lies_like_active_record_association_proxy
|
216
239
|
stubbee = Class.new do
|
217
|
-
def equal?(
|
240
|
+
def equal?(_other)
|
241
|
+
false
|
242
|
+
end
|
218
243
|
end.new
|
219
|
-
|
220
|
-
|
221
|
-
assert
|
244
|
+
class_method1 = ClassMethod.new(stubbee, :method)
|
245
|
+
class_method2 = ClassMethod.new(stubbee, :method)
|
246
|
+
assert class_method1.matches?(class_method2)
|
222
247
|
end
|
223
248
|
|
224
249
|
private
|
@@ -1,13 +1,19 @@
|
|
1
1
|
require File.expand_path('../../test_helper', __FILE__)
|
2
2
|
require 'mocha/class_methods'
|
3
3
|
require 'mocha/object_methods'
|
4
|
+
require 'mocha/mockery'
|
5
|
+
require 'mocha/names'
|
4
6
|
|
5
7
|
class ClassMethodsTest < Mocha::TestCase
|
6
|
-
|
7
8
|
def setup
|
9
|
+
Mocha::Mockery.setup
|
8
10
|
@klass = Class.new.extend(Mocha::ClassMethods, Mocha::ObjectMethods)
|
9
11
|
end
|
10
12
|
|
13
|
+
def teardown
|
14
|
+
Mocha::Mockery.teardown
|
15
|
+
end
|
16
|
+
|
11
17
|
def test_should_build_any_instance_object
|
12
18
|
any_instance = @klass.any_instance
|
13
19
|
assert_not_nil any_instance
|
@@ -15,9 +21,33 @@ class ClassMethodsTest < Mocha::TestCase
|
|
15
21
|
end
|
16
22
|
|
17
23
|
def test_should_return_same_any_instance_object
|
18
|
-
|
19
|
-
|
20
|
-
assert_equal
|
24
|
+
any_instance1 = @klass.any_instance
|
25
|
+
any_instance2 = @klass.any_instance
|
26
|
+
assert_equal any_instance1, any_instance2
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_any_instance_should_build_mocha_referring_to_klass
|
30
|
+
mocha = @klass.any_instance.mocha
|
31
|
+
assert_not_nil mocha
|
32
|
+
assert mocha.is_a?(Mocha::Mock)
|
33
|
+
expected_name = Mocha::ImpersonatingAnyInstanceName.new(@klass).mocha_inspect
|
34
|
+
assert_equal expected_name, mocha.mocha_inspect
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_any_instance_should_not_build_mocha_if_instantiate_is_false
|
38
|
+
assert_nil @klass.any_instance.mocha(false)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_any_instance_should_reuse_existing_mocha
|
42
|
+
mocha1 = @klass.any_instance.mocha
|
43
|
+
mocha2 = @klass.any_instance.mocha
|
44
|
+
assert_equal mocha1, mocha2
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_any_instance_should_reuse_existing_mocha_even_if_instantiate_is_false
|
48
|
+
mocha1 = @klass.any_instance.mocha
|
49
|
+
mocha2 = @klass.any_instance.mocha(false)
|
50
|
+
assert_equal mocha1, mocha2
|
21
51
|
end
|
22
52
|
|
23
53
|
def test_should_use_stubba_class_method_for_class
|
@@ -36,5 +66,4 @@ class ClassMethodsTest < Mocha::TestCase
|
|
36
66
|
any_instance = @klass.any_instance
|
37
67
|
assert_equal @klass, any_instance.stubba_object
|
38
68
|
end
|
39
|
-
|
40
69
|
end
|