rr 1.1.1 → 3.0.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/Appraisals +6 -0
- data/CHANGES.md +102 -1
- data/CREDITS.md +5 -0
- data/Gemfile +3 -0
- data/README.md +91 -110
- data/Rakefile +43 -0
- data/doc/02_syntax_comparison.md +1 -0
- data/gemfiles/ruby_19_rspec_2.gemfile +14 -0
- data/gemfiles/ruby_19_rspec_2.gemfile.lock +49 -0
- data/gemfiles/ruby_19_rspec_2_rails_4.gemfile +15 -0
- data/gemfiles/ruby_19_rspec_2_rails_4.gemfile.lock +119 -0
- data/lib/rr/class_instance_method_defined.rb +1 -1
- data/lib/rr/core_ext/array.rb +2 -0
- data/lib/rr/core_ext/hash.rb +2 -0
- data/lib/rr/deprecations.rb +97 -0
- data/lib/rr/double.rb +28 -10
- data/lib/rr/double_definitions/double_definition.rb +39 -16
- data/lib/rr/double_definitions/double_definition_create.rb +5 -5
- data/lib/rr/double_definitions/double_definition_create_blank_slate.rb +10 -4
- data/lib/rr/double_definitions/double_injections/any_instance_of.rb +1 -1
- data/lib/rr/double_definitions/double_injections/instance.rb +2 -2
- data/lib/rr/double_definitions/strategies/strategy.rb +27 -8
- data/lib/rr/double_definitions/strategies/verification/mock.rb +8 -2
- data/lib/rr/double_matches.rb +4 -3
- data/lib/rr/dsl.rb +152 -0
- data/lib/rr/expectations/any_argument_expectation.rb +4 -4
- data/lib/rr/expectations/argument_equality_expectation.rb +43 -5
- data/lib/rr/injections/double_injection.rb +67 -19
- data/lib/rr/injections/method_missing_injection.rb +37 -6
- data/lib/rr/integrations.rb +13 -12
- data/lib/rr/integrations/decorator.rb +4 -1
- data/lib/rr/integrations/minitest_4.rb +1 -1
- data/lib/rr/integrations/minitest_4_active_support.rb +1 -1
- data/lib/rr/integrations/rspec/invocation_matcher.rb +0 -8
- data/lib/rr/integrations/rspec_2.rb +28 -3
- data/lib/rr/keyword_arguments.rb +15 -0
- data/lib/rr/method_dispatches/base_method_dispatch.rb +22 -5
- data/lib/rr/method_dispatches/method_dispatch.rb +21 -10
- data/lib/rr/method_dispatches/method_missing_dispatch.rb +14 -5
- data/lib/rr/recorded_call.rb +35 -0
- data/lib/rr/recorded_calls.rb +23 -9
- data/lib/rr/space.rb +15 -5
- data/lib/rr/spy_verification.rb +13 -5
- data/lib/rr/version.rb +1 -2
- data/lib/rr/wildcard_matchers.rb +10 -10
- data/lib/rr/without_autohook.rb +7 -14
- data/rr.gemspec +14 -5
- data/spec/custom_formatter_for_rspec.rb +18 -0
- data/spec/custom_formatter_for_rspec_2.rb +40 -0
- data/spec/defines_spec_suite_tasks.rb +57 -0
- data/spec/fixtures/rubygems_patch_for_187.rb +598 -0
- data/spec/global_helper.rb +38 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_suite_configuration.rb +126 -0
- data/spec/spec_suite_runner.rb +47 -0
- data/spec/suites.yml +10 -0
- data/spec/suites/rspec_2/functional/any_instance_of_spec.rb +147 -0
- data/spec/suites/rspec_2/functional/dont_allow_spec.rb +17 -0
- data/spec/suites/rspec_2/functional/mock_bang_spec.rb +20 -0
- data/spec/suites/rspec_2/functional/mock_instance_of_spec.rb +14 -0
- data/spec/suites/rspec_2/functional/mock_instance_of_strong_spec.rb +15 -0
- data/spec/suites/rspec_2/functional/mock_proxy_instance_of_spec.rb +15 -0
- data/spec/suites/rspec_2/functional/mock_proxy_spec.rb +14 -0
- data/spec/suites/rspec_2/functional/mock_spec.rb +17 -0
- data/spec/suites/rspec_2/functional/mock_strong_spec.rb +14 -0
- data/spec/suites/rspec_2/functional/received_spec.rb +16 -0
- data/spec/suites/rspec_2/functional/spy_spec.rb +102 -0
- data/spec/suites/rspec_2/functional/stub_bang_spec.rb +20 -0
- data/spec/suites/rspec_2/functional/stub_instance_of_spec.rb +15 -0
- data/spec/suites/rspec_2/functional/stub_instance_of_strong_spec.rb +15 -0
- data/spec/suites/rspec_2/functional/stub_proxy_instance_of_spec.rb +16 -0
- data/spec/suites/rspec_2/functional/stub_proxy_spec.rb +45 -0
- data/spec/suites/rspec_2/functional/stub_spec.rb +71 -0
- data/spec/suites/rspec_2/functional/stub_strong_spec.rb +15 -0
- data/spec/suites/rspec_2/functional/wildcard_matchers_spec.rb +128 -0
- data/spec/suites/rspec_2/helper.rb +28 -0
- data/spec/suites/rspec_2/integration/minitest_4_spec.rb +109 -0
- data/spec/suites/rspec_2/integration/minitest_spec.rb +109 -0
- data/spec/suites/rspec_2/spec_helper.rb +3 -0
- data/spec/suites/rspec_2/support/matchers/wildcard_matcher_matchers.rb +32 -0
- data/spec/suites/rspec_2/support/mixins/double_definition_creator_helpers.rb +173 -0
- data/spec/suites/rspec_2/support/mixins/mock_definition_creator_helpers.rb +45 -0
- data/spec/suites/rspec_2/support/mixins/proxy_definition_creator_helpers.rb +33 -0
- data/spec/suites/rspec_2/support/mixins/stub_creator_helpers.rb +43 -0
- data/spec/suites/rspec_2/support/mixins/stub_definition_creator_helpers.rb +45 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_with_never_called_qualifier.rb +39 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_with_times_called_qualifier.rb +50 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/argument_expectations_without_qualifiers.rb +131 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/dont_allow.rb +148 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_instance_of.rb +26 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_instance_of_strong.rb +28 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_proxy.rb +11 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mock_strong.rb +37 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/mocking.rb +107 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_instance_of.rb +32 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_instance_of_strong.rb +39 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_proxy.rb +11 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stub_strong.rb +37 -0
- data/spec/suites/rspec_2/support/shared_contexts/double_definition_creators/stubbing.rb +57 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/array_flatten_bug.rb +35 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/block_form.rb +31 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/comparing_arity.rb +63 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/object_is_proxy.rb +43 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/sequential_invocations.rb +26 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/setting_implementation.rb +51 -0
- data/spec/suites/rspec_2/support/shared_examples/double_definition_creators/yields.rb +81 -0
- data/spec/suites/rspec_2/support/shared_examples/space.rb +13 -0
- data/spec/suites/rspec_2/support/shared_examples/times_called_expectation.rb +9 -0
- data/spec/suites/rspec_2/unit/core_ext/array_spec.rb +39 -0
- data/spec/suites/rspec_2/unit/core_ext/enumerable_spec.rb +53 -0
- data/spec/suites/rspec_2/unit/core_ext/hash_spec.rb +55 -0
- data/spec/suites/rspec_2/unit/core_ext/range_spec.rb +41 -0
- data/spec/suites/rspec_2/unit/core_ext/regexp_spec.rb +41 -0
- data/spec/suites/rspec_2/unit/deprecations_spec.rb +27 -0
- data/spec/suites/rspec_2/unit/double_definitions/child_double_definition_create_spec.rb +114 -0
- data/spec/suites/rspec_2/unit/double_definitions/double_definition_create_blank_slate_spec.rb +93 -0
- data/spec/suites/rspec_2/unit/double_definitions/double_definition_create_spec.rb +446 -0
- data/spec/suites/rspec_2/unit/dsl/double_creators_spec.rb +133 -0
- data/spec/suites/rspec_2/unit/dsl/space_spec.rb +99 -0
- data/spec/suites/rspec_2/unit/dsl/wildcard_matchers_spec.rb +67 -0
- data/spec/suites/rspec_2/unit/errors/rr_error_spec.rb +67 -0
- data/spec/suites/rspec_2/unit/expectations/any_argument_expectation_spec.rb +48 -0
- data/spec/suites/rspec_2/unit/expectations/anything_argument_equality_expectation_spec.rb +14 -0
- data/spec/suites/rspec_2/unit/expectations/argument_equality_expectation_spec.rb +135 -0
- data/spec/suites/rspec_2/unit/expectations/boolean_argument_equality_expectation_spec.rb +30 -0
- data/spec/suites/rspec_2/unit/expectations/hash_including_argument_equality_expectation_spec.rb +92 -0
- data/spec/suites/rspec_2/unit/expectations/satisfy_argument_equality_expectation_spec.rb +61 -0
- data/spec/suites/rspec_2/unit/expectations/times_called_expectation/any_times_matcher_spec.rb +22 -0
- data/spec/suites/rspec_2/unit/expectations/times_called_expectation/at_least_matcher_spec.rb +37 -0
- data/spec/suites/rspec_2/unit/expectations/times_called_expectation/at_most_matcher_spec.rb +43 -0
- data/spec/suites/rspec_2/unit/expectations/times_called_expectation/integer_matcher_spec.rb +58 -0
- data/spec/suites/rspec_2/unit/expectations/times_called_expectation/proc_matcher_spec.rb +35 -0
- data/spec/suites/rspec_2/unit/expectations/times_called_expectation/range_matcher_spec.rb +39 -0
- data/spec/suites/rspec_2/unit/hash_with_object_id_key_spec.rb +88 -0
- data/spec/suites/rspec_2/unit/injections/double_injection/double_injection_spec.rb +533 -0
- data/spec/suites/rspec_2/unit/injections/double_injection/double_injection_verify_spec.rb +32 -0
- data/spec/suites/rspec_2/unit/integrations/rspec/invocation_matcher_spec.rb +297 -0
- data/spec/suites/rspec_2/unit/integrations/rspec_spec.rb +70 -0
- data/spec/suites/rspec_2/unit/rr_spec.rb +28 -0
- data/spec/suites/rspec_2/unit/space_spec.rb +598 -0
- data/spec/suites/rspec_2/unit/spy_verification_spec.rb +133 -0
- data/spec/suites/rspec_2/unit/times_called_matchers/any_times_matcher_spec.rb +46 -0
- data/spec/suites/rspec_2/unit/times_called_matchers/at_least_matcher_spec.rb +54 -0
- data/spec/suites/rspec_2/unit/times_called_matchers/at_most_matcher_spec.rb +69 -0
- data/spec/suites/rspec_2/unit/times_called_matchers/integer_matcher_spec.rb +69 -0
- data/spec/suites/rspec_2/unit/times_called_matchers/proc_matcher_spec.rb +54 -0
- data/spec/suites/rspec_2/unit/times_called_matchers/range_matcher_spec.rb +75 -0
- data/spec/suites/rspec_2/unit/times_called_matchers/times_called_matcher_spec.rb +117 -0
- data/spec/suites/rspec_2/unit/wildcard_matchers/anything_spec.rb +33 -0
- data/spec/suites/rspec_2/unit/wildcard_matchers/boolean_spec.rb +45 -0
- data/spec/suites/rspec_2/unit/wildcard_matchers/duck_type_spec.rb +64 -0
- data/spec/suites/rspec_2/unit/wildcard_matchers/hash_including_spec.rb +64 -0
- data/spec/suites/rspec_2/unit/wildcard_matchers/is_a_spec.rb +55 -0
- data/spec/suites/rspec_2/unit/wildcard_matchers/numeric_spec.rb +46 -0
- data/spec/suites/rspec_2/unit/wildcard_matchers/satisfy_spec.rb +57 -0
- data/spec/support/adapter.rb +22 -0
- data/spec/support/adapter_tests/base.rb +45 -0
- data/spec/support/adapter_tests/minitest.rb +7 -0
- data/spec/support/adapter_tests/rspec.rb +70 -0
- data/spec/support/adapter_tests/test_unit.rb +47 -0
- data/spec/support/command_runner.rb +105 -0
- data/spec/support/generator.rb +56 -0
- data/spec/support/integration_tests/base.rb +64 -0
- data/spec/support/integration_tests/rails.rb +60 -0
- data/spec/support/integration_tests/rails_minitest.rb +13 -0
- data/spec/support/integration_tests/rails_rspec.rb +13 -0
- data/spec/support/integration_tests/rails_test_unit.rb +13 -0
- data/spec/support/integration_tests/rails_test_unit_like.rb +13 -0
- data/spec/support/integration_tests/ruby.rb +7 -0
- data/spec/support/integration_tests/ruby_minitest.rb +13 -0
- data/spec/support/integration_tests/ruby_rspec.rb +13 -0
- data/spec/support/integration_tests/ruby_test_unit.rb +13 -0
- data/spec/support/matchers/be_a_subset_of_matcher.rb +24 -0
- data/spec/support/project/cucumber.rb +50 -0
- data/spec/support/project/generator.rb +348 -0
- data/spec/support/project/minitest.rb +39 -0
- data/spec/support/project/rails.rb +199 -0
- data/spec/support/project/rails_minitest.rb +17 -0
- data/spec/support/project/rails_rspec.rb +50 -0
- data/spec/support/project/rails_test_unit.rb +17 -0
- data/spec/support/project/rails_test_unit_like.rb +17 -0
- data/spec/support/project/rspec.rb +69 -0
- data/spec/support/project/ruby.rb +34 -0
- data/spec/support/project/ruby_minitest.rb +11 -0
- data/spec/support/project/ruby_rspec.rb +29 -0
- data/spec/support/project/ruby_test_unit.rb +11 -0
- data/spec/support/project/ruby_test_unit_like.rb +21 -0
- data/spec/support/project/test_unit.rb +29 -0
- data/spec/support/project/test_unit_like.rb +7 -0
- data/spec/support/project/tests_runner.rb +22 -0
- data/spec/support/test.sqlite3 +0 -0
- data/spec/support/test_case/generator.rb +53 -0
- data/spec/support/test_case/minitest.rb +13 -0
- data/spec/support/test_case/rspec.rb +19 -0
- data/spec/support/test_case/test_unit.rb +21 -0
- data/spec/support/test_file/generator.rb +120 -0
- data/spec/support/test_file/minitest.rb +19 -0
- data/spec/support/test_file/rails_minitest.rb +7 -0
- data/spec/support/test_file/rails_rspec.rb +12 -0
- data/spec/support/test_file/rails_test_unit.rb +25 -0
- data/spec/support/test_file/rspec.rb +33 -0
- data/spec/support/test_file/test_unit.rb +36 -0
- data/spec/support/test_helper/generator.rb +27 -0
- data/spec/support/test_helper/minitest.rb +7 -0
- data/spec/support/test_helper/rails.rb +31 -0
- data/spec/support/test_helper/rails_minitest.rb +7 -0
- data/spec/support/test_helper/rails_rspec.rb +25 -0
- data/spec/support/test_helper/rails_test_unit.rb +23 -0
- data/spec/support/test_helper/rspec.rb +7 -0
- data/spec/support/test_helper/ruby.rb +31 -0
- data/spec/support/test_helper/test_unit.rb +7 -0
- metadata +240 -19
- data/VERSION +0 -1
- data/lib/rr/adapters.rb +0 -44
- data/lib/rr/adapters/rr_methods.rb +0 -142
- data/lib/rr/integrations/rspec_1.rb +0 -46
- data/lib/rr/integrations/test_unit_1.rb +0 -63
- data/lib/rr/integrations/test_unit_2.rb +0 -15
- data/lib/rr/integrations/test_unit_200.rb +0 -27
- data/lib/rr/integrations/test_unit_200_active_support.rb +0 -25
- data/lib/rr/integrations/test_unit_2_active_support.rb +0 -38
- data/lib/rr/proc_from_block.rb +0 -11
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../spec_helper")
|
|
2
|
+
|
|
3
|
+
class Alpha
|
|
4
|
+
def bob
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
describe RR::SpyVerification do
|
|
9
|
+
subject { Object.new }
|
|
10
|
+
|
|
11
|
+
attr_reader :recorded_calls
|
|
12
|
+
|
|
13
|
+
include_examples "Swapped Space"
|
|
14
|
+
|
|
15
|
+
include RR::DSL
|
|
16
|
+
|
|
17
|
+
before(:each) do
|
|
18
|
+
stub(subject).foobar
|
|
19
|
+
@recorded_calls = RR::RecordedCalls.new([[subject, :foobar, [1, 2], nil]])
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe "#call" do
|
|
23
|
+
context "when a subject is expected to receive a method with exact arguments" do
|
|
24
|
+
context "when the number of times the subject received a method is not specified" do
|
|
25
|
+
context "when there is an exact match one time" do
|
|
26
|
+
it "verifies that the method with arguments was called once" do
|
|
27
|
+
subject.foobar(1, 2)
|
|
28
|
+
received(subject).foobar(1, 2).call
|
|
29
|
+
subject.foobar(1, 2)
|
|
30
|
+
expect {
|
|
31
|
+
received(subject).foobar(1, 2).call
|
|
32
|
+
}.to raise_error(RR::Errors::SpyVerificationErrors::InvocationCountError)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context "when the number of times the subject received a method is specified" do
|
|
38
|
+
context "as one time" do
|
|
39
|
+
it "verifies that the method with arugments was called once" do
|
|
40
|
+
subject.foobar(1, 2)
|
|
41
|
+
received(subject).foobar(1, 2).once.call
|
|
42
|
+
subject.foobar(1, 2)
|
|
43
|
+
expect {
|
|
44
|
+
received(subject).foobar(1, 2).once.call
|
|
45
|
+
}.to raise_error(RR::Errors::SpyVerificationErrors::InvocationCountError)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context "as an at least matcher" do
|
|
50
|
+
it "verifies that the method with arugments was called at least the specified number of times" do
|
|
51
|
+
subject.foobar(1, 2)
|
|
52
|
+
expect {
|
|
53
|
+
received(subject).foobar(1, 2).at_least(2).call
|
|
54
|
+
}.to raise_error(RR::Errors::SpyVerificationErrors::InvocationCountError)
|
|
55
|
+
subject.foobar(1, 2)
|
|
56
|
+
received(subject).foobar(1, 2).at_least(2).call
|
|
57
|
+
subject.foobar(1, 2)
|
|
58
|
+
received(subject).foobar(1, 2).at_least(2).call
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context "when a subject is expected to receive a method with wildcard arguments" do
|
|
65
|
+
context "when the number of times the subject received a method is not specified" do
|
|
66
|
+
context "when there is a wildcard match one time" do
|
|
67
|
+
it "verifies that the method with arguments was called once" do
|
|
68
|
+
subject.foobar(1, 2)
|
|
69
|
+
received(subject).foobar(1, is_a(Fixnum)).call
|
|
70
|
+
subject.foobar(1, 2)
|
|
71
|
+
expect {
|
|
72
|
+
received(subject).foobar(1, is_a(Fixnum)).call
|
|
73
|
+
}.to raise_error(RR::Errors::SpyVerificationErrors::InvocationCountError)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
context "when the number of times the subject received a method is specified" do
|
|
79
|
+
context "as one time" do
|
|
80
|
+
it "verifies that the method with arugments was called once" do
|
|
81
|
+
subject.foobar(1, 2)
|
|
82
|
+
received(subject).foobar(1, is_a(Fixnum)).once.call
|
|
83
|
+
subject.foobar(1, 2)
|
|
84
|
+
expect {
|
|
85
|
+
received(subject).foobar(1, is_a(Fixnum)).once.call
|
|
86
|
+
}.to raise_error(RR::Errors::SpyVerificationErrors::InvocationCountError)
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
context "as an at least matcher" do
|
|
91
|
+
it "verifies that the method with arugments was called at least the specified number of times" do
|
|
92
|
+
subject.foobar(1, is_a(Fixnum))
|
|
93
|
+
expect {
|
|
94
|
+
received(subject).foobar(1, is_a(Fixnum)).at_least(2).call
|
|
95
|
+
}.to raise_error(RR::Errors::SpyVerificationErrors::InvocationCountError)
|
|
96
|
+
subject.foobar(1, 2)
|
|
97
|
+
received(subject).foobar(1, is_a(Fixnum)).at_least(2).call
|
|
98
|
+
subject.foobar(1, 2)
|
|
99
|
+
received(subject).foobar(1, is_a(Fixnum)).at_least(2).call
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
context "when checking for ordering" do
|
|
106
|
+
it "when the order is incorrect; raises an error" do
|
|
107
|
+
subject.foobar(3, 4)
|
|
108
|
+
subject.foobar(1, 2)
|
|
109
|
+
expect {
|
|
110
|
+
received(subject).foobar(1, 2).ordered.call
|
|
111
|
+
received(subject).foobar(3, 4).ordered.call
|
|
112
|
+
}.to raise_error(RR::Errors::SpyVerificationErrors::InvocationCountError)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it "when the order is correct; does not raise an error" do
|
|
116
|
+
subject.foobar(1, 2)
|
|
117
|
+
subject.foobar(1, 2)
|
|
118
|
+
subject.foobar(3, 4)
|
|
119
|
+
received(subject).foobar(1, 2).ordered.call
|
|
120
|
+
received(subject).foobar(3, 4).ordered.call
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
context "when the subject is expected where there is not DoubleInjection" do
|
|
125
|
+
it "raises a DoubleInjectionNotFoundError" do
|
|
126
|
+
expect(::RR::Injections::DoubleInjection.exists?(subject, :method_that_does_not_exist)).to be_false
|
|
127
|
+
expect {
|
|
128
|
+
received(subject).method_that_does_not_exist.call
|
|
129
|
+
}.to raise_error(RR::Errors::SpyVerificationErrors::DoubleInjectionNotFoundError)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
module RR
|
|
4
|
+
module TimesCalledMatchers
|
|
5
|
+
describe AnyTimesMatcher do
|
|
6
|
+
attr_reader :matcher
|
|
7
|
+
before do
|
|
8
|
+
@matcher = AnyTimesMatcher.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe AnyTimesMatcher, "#possible_match?" do
|
|
12
|
+
it "always returns true" do
|
|
13
|
+
expect(matcher).to be_possible_match(0)
|
|
14
|
+
expect(matcher).to be_possible_match(99999)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe AnyTimesMatcher, "#matches?" do
|
|
19
|
+
it "always returns true" do
|
|
20
|
+
expect(matcher).to be_matches(0)
|
|
21
|
+
expect(matcher).to be_matches(99999)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe AnyTimesMatcher, "#attempt?" do
|
|
26
|
+
it "always returns true" do
|
|
27
|
+
expect(matcher).to be_attempt(0)
|
|
28
|
+
expect(matcher).to be_attempt(99999)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe AnyTimesMatcher, "#terminal?" do
|
|
33
|
+
it "returns false" do
|
|
34
|
+
matcher.should_not be_terminal
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe AnyTimesMatcher, "#error_message" do
|
|
39
|
+
it "has an error message" do
|
|
40
|
+
expect(matcher.error_message(2)).to eq \
|
|
41
|
+
"Called 2 times.\nExpected any number of times."
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
module RR
|
|
4
|
+
module TimesCalledMatchers
|
|
5
|
+
describe AtLeastMatcher do
|
|
6
|
+
attr_reader :matcher, :times
|
|
7
|
+
before do
|
|
8
|
+
@times = 3
|
|
9
|
+
@matcher = AtLeastMatcher.new(times)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "#possible_match?" do
|
|
13
|
+
it "always returns true" do
|
|
14
|
+
expect(matcher).to be_possible_match(99999)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "#matches?" do
|
|
19
|
+
it "returns false when times_called less than times" do
|
|
20
|
+
matcher.should_not be_matches(2)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "returns true when times_called == times" do
|
|
24
|
+
expect(matcher).to be_matches(3)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "returns true when times_called > times" do
|
|
28
|
+
expect(matcher).to be_matches(4)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "#attempt?" do
|
|
33
|
+
it "always returns true" do
|
|
34
|
+
expect(matcher).to be_attempt(1)
|
|
35
|
+
expect(matcher).to be_attempt(100000)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe AnyTimesMatcher, "#terminal?" do
|
|
40
|
+
it "returns false" do
|
|
41
|
+
matcher.should_not be_terminal
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "#error_message" do
|
|
46
|
+
it "has an error message" do
|
|
47
|
+
expect(matcher.error_message(2)).to eq \
|
|
48
|
+
"Called 2 times.\nExpected at least 3 times."
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
module RR
|
|
4
|
+
module TimesCalledMatchers
|
|
5
|
+
describe AtMostMatcher do
|
|
6
|
+
attr_reader :matcher, :times
|
|
7
|
+
before do
|
|
8
|
+
@times = 3
|
|
9
|
+
@matcher = AtMostMatcher.new(times)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe AtMostMatcher, "#possible_match?" do
|
|
13
|
+
it "returns true when times called < times" do
|
|
14
|
+
expect(matcher).to be_possible_match(2)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "returns true when times called == times" do
|
|
18
|
+
expect(matcher).to be_possible_match(3)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "returns false when times called > times" do
|
|
22
|
+
matcher.should_not be_possible_match(4)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe AtMostMatcher, "#matches?" do
|
|
27
|
+
it "returns true when times_called less than times" do
|
|
28
|
+
expect(matcher).to be_matches(2)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "returns true when times_called == times" do
|
|
32
|
+
expect(matcher).to be_matches(3)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "returns false when times_called > times" do
|
|
36
|
+
matcher.should_not be_matches(4)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe AtMostMatcher, "#attempt?" do
|
|
41
|
+
it "returns true when less than expected times" do
|
|
42
|
+
expect(matcher).to be_attempt(2)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "returns false when == expected times" do
|
|
46
|
+
matcher.should_not be_attempt(3)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "returns false when > expected times" do
|
|
50
|
+
matcher.should_not be_attempt(4)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe AnyTimesMatcher, "#terminal?" do
|
|
55
|
+
it "returns true" do
|
|
56
|
+
expect(matcher).to be_terminal
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe AtMostMatcher, "#error_message" do
|
|
61
|
+
it "has an error message" do
|
|
62
|
+
expect(matcher.error_message(5)).to eq \
|
|
63
|
+
"Called 5 times.\nExpected at most 3 times."
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
module RR
|
|
4
|
+
module TimesCalledMatchers
|
|
5
|
+
describe IntegerMatcher do
|
|
6
|
+
attr_reader :matcher, :times
|
|
7
|
+
before do
|
|
8
|
+
@times = 3
|
|
9
|
+
@matcher = IntegerMatcher.new(times)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "#possible_match?" do
|
|
13
|
+
it "returns true when times called < times" do
|
|
14
|
+
expect(matcher).to be_possible_match(2)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "returns true when times called == times" do
|
|
18
|
+
expect(matcher).to be_possible_match(3)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "returns false when times called > times" do
|
|
22
|
+
matcher.should_not be_possible_match(4)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "#matches?" do
|
|
27
|
+
it "returns false when times_called less than times" do
|
|
28
|
+
matcher.should_not be_matches(2)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "returns true when times_called == times" do
|
|
32
|
+
expect(matcher).to be_matches(3)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "returns false when times_called > times" do
|
|
36
|
+
matcher.should_not be_matches(4)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe "#attempt?" do
|
|
41
|
+
it "returns true when less than expected times" do
|
|
42
|
+
expect(matcher).to be_attempt(2)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "returns false when == expected times" do
|
|
46
|
+
matcher.should_not be_attempt(3)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "returns false when > expected times" do
|
|
50
|
+
matcher.should_not be_attempt(4)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe AnyTimesMatcher, "#terminal?" do
|
|
55
|
+
it "returns true" do
|
|
56
|
+
expect(matcher).to be_terminal
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe "#error_message" do
|
|
61
|
+
it "has an error message" do
|
|
62
|
+
expect(matcher.error_message(2)).to eq \
|
|
63
|
+
"Called 2 times.\nExpected 3 times."
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
module RR
|
|
4
|
+
module TimesCalledMatchers
|
|
5
|
+
describe ProcMatcher do
|
|
6
|
+
attr_reader :matcher, :times
|
|
7
|
+
before do
|
|
8
|
+
@times = lambda {|other| other == 3}
|
|
9
|
+
@matcher = ProcMatcher.new(times)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "#possible_match?" do
|
|
13
|
+
it "always returns true" do
|
|
14
|
+
expect(matcher).to be_possible_match(2)
|
|
15
|
+
expect(matcher).to be_possible_match(3)
|
|
16
|
+
expect(matcher).to be_possible_match(10)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "#matches?" do
|
|
21
|
+
it "returns false when lambda returns false" do
|
|
22
|
+
expect(times.call(2)).to be_false
|
|
23
|
+
matcher.should_not be_matches(2)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "returns true when lambda returns true" do
|
|
27
|
+
expect(times.call(3)).to be_true
|
|
28
|
+
expect(matcher).to be_matches(3)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe "#attempt?" do
|
|
33
|
+
it "always returns true" do
|
|
34
|
+
expect(matcher).to be_attempt(2)
|
|
35
|
+
expect(matcher).to be_attempt(3)
|
|
36
|
+
expect(matcher).to be_attempt(10)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe "#terminal?" do
|
|
41
|
+
it "returns false" do
|
|
42
|
+
matcher.should_not be_terminal
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "#error_message" do
|
|
47
|
+
it "has an error message" do
|
|
48
|
+
expect(matcher.error_message(1)).to match(/Called 1 time.\nExpected #<Proc.*> times./)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
module RR
|
|
4
|
+
module TimesCalledMatchers
|
|
5
|
+
describe RangeMatcher do
|
|
6
|
+
attr_reader :matcher, :times
|
|
7
|
+
before do
|
|
8
|
+
@times = 2..4
|
|
9
|
+
@matcher = RangeMatcher.new(times)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "#possible_match?" do
|
|
13
|
+
it "returns true when times called < start of range" do
|
|
14
|
+
expect(matcher).to be_possible_match(1)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "returns true when times called in range" do
|
|
18
|
+
expect(matcher).to be_possible_match(2)
|
|
19
|
+
expect(matcher).to be_possible_match(3)
|
|
20
|
+
expect(matcher).to be_possible_match(4)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "returns false when times called > end of range" do
|
|
24
|
+
matcher.should_not be_possible_match(5)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "#matches?" do
|
|
29
|
+
it "returns false when times_called less than start of range" do
|
|
30
|
+
matcher.should_not be_matches(1)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "returns true when times_called in range" do
|
|
34
|
+
expect(matcher).to be_matches(2)
|
|
35
|
+
expect(matcher).to be_matches(3)
|
|
36
|
+
expect(matcher).to be_matches(4)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "returns false when times_called > end of range" do
|
|
40
|
+
matcher.should_not be_matches(5)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "#attempt?" do
|
|
45
|
+
it "returns true when less than start of range" do
|
|
46
|
+
expect(matcher).to be_attempt(1)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "returns true when in range" do
|
|
50
|
+
expect(matcher).to be_attempt(2)
|
|
51
|
+
expect(matcher).to be_attempt(3)
|
|
52
|
+
expect(matcher).to be_attempt(4)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "returns false when > end of range" do
|
|
56
|
+
matcher.should_not be_attempt(5)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe "#terminal?" do
|
|
61
|
+
it "returns true" do
|
|
62
|
+
expect(matcher).to be_terminal
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe "#error_message" do
|
|
67
|
+
it "has an error message" do
|
|
68
|
+
expect(matcher.error_message(1)).to eq \
|
|
69
|
+
"Called 1 time.\nExpected 2..4 times."
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
end
|