redinger-rr 0.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +221 -0
- data/README.rdoc +343 -0
- data/Rakefile +88 -0
- data/VERSION.yml +4 -0
- data/lib/rr.rb +88 -0
- data/lib/rr/adapters/rr_methods.rb +122 -0
- data/lib/rr/adapters/rspec.rb +59 -0
- data/lib/rr/adapters/test_unit.rb +29 -0
- data/lib/rr/double.rb +152 -0
- data/lib/rr/double_definitions/child_double_definition_creator.rb +27 -0
- data/lib/rr/double_definitions/double_definition.rb +348 -0
- data/lib/rr/double_definitions/double_definition_creator.rb +167 -0
- data/lib/rr/double_definitions/double_definition_creator_proxy.rb +37 -0
- data/lib/rr/double_definitions/strategies/implementation/implementation_strategy.rb +15 -0
- data/lib/rr/double_definitions/strategies/implementation/proxy.rb +62 -0
- data/lib/rr/double_definitions/strategies/implementation/reimplementation.rb +14 -0
- data/lib/rr/double_definitions/strategies/implementation/strongly_typed_reimplementation.rb +17 -0
- data/lib/rr/double_definitions/strategies/scope/instance.rb +15 -0
- data/lib/rr/double_definitions/strategies/scope/instance_of_class.rb +50 -0
- data/lib/rr/double_definitions/strategies/scope/scope_strategy.rb +15 -0
- data/lib/rr/double_definitions/strategies/strategy.rb +70 -0
- data/lib/rr/double_definitions/strategies/verification/dont_allow.rb +34 -0
- data/lib/rr/double_definitions/strategies/verification/mock.rb +44 -0
- data/lib/rr/double_definitions/strategies/verification/stub.rb +45 -0
- data/lib/rr/double_definitions/strategies/verification/verification_strategy.rb +15 -0
- data/lib/rr/double_injection.rb +180 -0
- data/lib/rr/double_matches.rb +51 -0
- data/lib/rr/errors/argument_equality_error.rb +6 -0
- data/lib/rr/errors/double_definition_error.rb +6 -0
- data/lib/rr/errors/double_not_found_error.rb +6 -0
- data/lib/rr/errors/double_order_error.rb +6 -0
- data/lib/rr/errors/rr_error.rb +20 -0
- data/lib/rr/errors/spy_verification_errors/double_injection_not_found_error.rb +8 -0
- data/lib/rr/errors/spy_verification_errors/invocation_count_error.rb +8 -0
- data/lib/rr/errors/spy_verification_errors/spy_verification_error.rb +8 -0
- data/lib/rr/errors/subject_does_not_implement_method_error.rb +6 -0
- data/lib/rr/errors/subject_has_different_arity_error.rb +6 -0
- data/lib/rr/errors/times_called_error.rb +6 -0
- data/lib/rr/expectations/any_argument_expectation.rb +21 -0
- data/lib/rr/expectations/argument_equality_expectation.rb +41 -0
- data/lib/rr/expectations/times_called_expectation.rb +57 -0
- data/lib/rr/hash_with_object_id_key.rb +44 -0
- data/lib/rr/method_dispatches/base_method_dispatch.rb +108 -0
- data/lib/rr/method_dispatches/method_dispatch.rb +61 -0
- data/lib/rr/method_dispatches/method_missing_dispatch.rb +49 -0
- data/lib/rr/proc_from_block.rb +7 -0
- data/lib/rr/recorded_calls.rb +103 -0
- data/lib/rr/space.rb +123 -0
- data/lib/rr/spy_verification.rb +48 -0
- data/lib/rr/spy_verification_proxy.rb +18 -0
- data/lib/rr/times_called_matchers/any_times_matcher.rb +18 -0
- data/lib/rr/times_called_matchers/at_least_matcher.rb +15 -0
- data/lib/rr/times_called_matchers/at_most_matcher.rb +23 -0
- data/lib/rr/times_called_matchers/integer_matcher.rb +19 -0
- data/lib/rr/times_called_matchers/non_terminal.rb +27 -0
- data/lib/rr/times_called_matchers/proc_matcher.rb +11 -0
- data/lib/rr/times_called_matchers/range_matcher.rb +21 -0
- data/lib/rr/times_called_matchers/terminal.rb +20 -0
- data/lib/rr/times_called_matchers/times_called_matcher.rb +44 -0
- data/lib/rr/wildcard_matchers.rb +158 -0
- data/lib/rr/wildcard_matchers/anything.rb +18 -0
- data/lib/rr/wildcard_matchers/boolean.rb +23 -0
- data/lib/rr/wildcard_matchers/duck_type.rb +32 -0
- data/lib/rr/wildcard_matchers/hash_including.rb +29 -0
- data/lib/rr/wildcard_matchers/is_a.rb +25 -0
- data/lib/rr/wildcard_matchers/numeric.rb +13 -0
- data/lib/rr/wildcard_matchers/range.rb +7 -0
- data/lib/rr/wildcard_matchers/regexp.rb +7 -0
- data/lib/rr/wildcard_matchers/satisfy.rb +26 -0
- data/spec/core_spec_suite.rb +19 -0
- data/spec/environment_fixture_setup.rb +7 -0
- data/spec/high_level_spec.rb +398 -0
- data/spec/proc_from_block_spec.rb +14 -0
- data/spec/rr/adapters/rr_methods_argument_matcher_spec.rb +67 -0
- data/spec/rr/adapters/rr_methods_creator_spec.rb +149 -0
- data/spec/rr/adapters/rr_methods_space_spec.rb +115 -0
- data/spec/rr/adapters/rr_methods_spec_helper.rb +11 -0
- data/spec/rr/adapters/rr_methods_times_matcher_spec.rb +17 -0
- data/spec/rr/double_definitions/child_double_definition_creator_spec.rb +112 -0
- data/spec/rr/double_definitions/double_definition_creator_proxy_spec.rb +155 -0
- data/spec/rr/double_definitions/double_definition_creator_spec.rb +502 -0
- data/spec/rr/double_definitions/double_definition_spec.rb +1165 -0
- data/spec/rr/double_injection/double_injection_spec.rb +339 -0
- data/spec/rr/double_injection/double_injection_verify_spec.rb +29 -0
- data/spec/rr/double_spec.rb +352 -0
- data/spec/rr/errors/rr_error_spec.rb +67 -0
- data/spec/rr/expectations/any_argument_expectation_spec.rb +47 -0
- data/spec/rr/expectations/anything_argument_equality_expectation_spec.rb +14 -0
- data/spec/rr/expectations/argument_equality_expectation_spec.rb +135 -0
- data/spec/rr/expectations/boolean_argument_equality_expectation_spec.rb +34 -0
- data/spec/rr/expectations/hash_including_argument_equality_expectation_spec.rb +82 -0
- data/spec/rr/expectations/hash_including_spec.rb +17 -0
- data/spec/rr/expectations/satisfy_argument_equality_expectation_spec.rb +59 -0
- data/spec/rr/expectations/satisfy_spec.rb +14 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_any_times_spec.rb +46 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_least_spec.rb +69 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_most_spec.rb +71 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_helper.rb +23 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_integer_spec.rb +104 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_proc_spec.rb +81 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_range_spec.rb +83 -0
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_spec.rb +38 -0
- data/spec/rr/rspec/invocation_matcher_spec.rb +279 -0
- data/spec/rr/rspec/rspec_adapter_spec.rb +66 -0
- data/spec/rr/rspec/rspec_backtrace_tweaking_spec.rb +31 -0
- data/spec/rr/rspec/rspec_backtrace_tweaking_spec_fixture.rb +11 -0
- data/spec/rr/rspec/rspec_usage_spec.rb +86 -0
- data/spec/rr/space/hash_with_object_id_key_spec.rb +88 -0
- data/spec/rr/space/space_spec.rb +550 -0
- data/spec/rr/test_unit/test_helper.rb +7 -0
- data/spec/rr/test_unit/test_unit_backtrace_test.rb +36 -0
- data/spec/rr/test_unit/test_unit_integration_test.rb +57 -0
- data/spec/rr/times_called_matchers/any_times_matcher_spec.rb +47 -0
- data/spec/rr/times_called_matchers/at_least_matcher_spec.rb +55 -0
- data/spec/rr/times_called_matchers/at_most_matcher_spec.rb +70 -0
- data/spec/rr/times_called_matchers/integer_matcher_spec.rb +70 -0
- data/spec/rr/times_called_matchers/proc_matcher_spec.rb +55 -0
- data/spec/rr/times_called_matchers/range_matcher_spec.rb +76 -0
- data/spec/rr/times_called_matchers/times_called_matcher_spec.rb +118 -0
- data/spec/rr/wildcard_matchers/anything_spec.rb +24 -0
- data/spec/rr/wildcard_matchers/boolean_spec.rb +36 -0
- data/spec/rr/wildcard_matchers/duck_type_spec.rb +52 -0
- data/spec/rr/wildcard_matchers/is_a_spec.rb +32 -0
- data/spec/rr/wildcard_matchers/numeric_spec.rb +32 -0
- data/spec/rr/wildcard_matchers/range_spec.rb +35 -0
- data/spec/rr/wildcard_matchers/regexp_spec.rb +43 -0
- data/spec/rr_spec.rb +28 -0
- data/spec/rspec_spec_suite.rb +17 -0
- data/spec/spec_helper.rb +109 -0
- data/spec/spec_suite.rb +31 -0
- data/spec/spy_verification_spec.rb +129 -0
- data/spec/test_unit_spec_suite.rb +21 -0
- metadata +193 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module Errors
|
5
|
+
describe RRError do
|
6
|
+
describe "#backtrace" do
|
7
|
+
before do
|
8
|
+
@original_trim_backtrace = RR.trim_backtrace
|
9
|
+
end
|
10
|
+
after do
|
11
|
+
RR.trim_backtrace = @original_trim_backtrace
|
12
|
+
end
|
13
|
+
|
14
|
+
it "does not include the rr library files when trim_backtrace is true" do
|
15
|
+
RR.trim_backtrace = true
|
16
|
+
|
17
|
+
error = nil
|
18
|
+
begin
|
19
|
+
obj = Object.new
|
20
|
+
mock(obj).foobar
|
21
|
+
RR.verify_double(obj, :foobar)
|
22
|
+
rescue RRError=> e
|
23
|
+
error = e
|
24
|
+
end
|
25
|
+
backtrace = error.backtrace.join("\n")
|
26
|
+
|
27
|
+
backtrace.should_not include("lib/rr")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "includes the rr library files when trim_backtrace is false" do
|
31
|
+
RR.trim_backtrace = false
|
32
|
+
|
33
|
+
error = nil
|
34
|
+
begin
|
35
|
+
obj = Object.new
|
36
|
+
mock(obj).foobar
|
37
|
+
RR.verify_double(obj, :foobar)
|
38
|
+
rescue RRError=> e
|
39
|
+
error = e
|
40
|
+
end
|
41
|
+
backtrace = error.backtrace.join("\n")
|
42
|
+
|
43
|
+
backtrace.should include("lib/rr")
|
44
|
+
end
|
45
|
+
|
46
|
+
it "returns custom backtrace when backtrace is set" do
|
47
|
+
error = RRError.new
|
48
|
+
custom_backtrace = caller
|
49
|
+
error.backtrace = custom_backtrace
|
50
|
+
error.backtrace.should == custom_backtrace
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns normal backtrace when backtrace is not set" do
|
54
|
+
error = nil
|
55
|
+
expected_line = __LINE__ + 2
|
56
|
+
begin
|
57
|
+
raise RRError
|
58
|
+
rescue RRError => e
|
59
|
+
error = e
|
60
|
+
end
|
61
|
+
error.backtrace.first.should include(__FILE__)
|
62
|
+
error.backtrace.first.should include(expected_line.to_s)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module Expectations
|
5
|
+
describe AnyArgumentExpectation do
|
6
|
+
attr_reader :expectation
|
7
|
+
before do
|
8
|
+
@expectation = AnyArgumentExpectation.new
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#expected_arguments" do
|
12
|
+
it "returns an empty array" do
|
13
|
+
expectation.expected_arguments.should == []
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "==" do
|
18
|
+
it "returns true when comparing with another AnyArgumentExpectation" do
|
19
|
+
expectation.should == AnyArgumentExpectation.new
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns false when comparing with ArgumentEqualityExpectation" do
|
23
|
+
expectation.should_not == ArgumentEqualityExpectation.new(1)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#exact_match?" do
|
28
|
+
it "returns false" do
|
29
|
+
expectation.should_not be_exact_match(1, 2, 3)
|
30
|
+
expectation.should_not be_exact_match(1, 2)
|
31
|
+
expectation.should_not be_exact_match(1)
|
32
|
+
expectation.should_not be_exact_match()
|
33
|
+
expectation.should_not be_exact_match("does not match")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#wildcard_match?" do
|
38
|
+
it "returns true" do
|
39
|
+
expectation = AnyArgumentExpectation.new
|
40
|
+
expectation.should be_wildcard_match(1, 2, 3)
|
41
|
+
expectation.should be_wildcard_match("whatever")
|
42
|
+
expectation.should be_wildcard_match("whatever", "else")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module Expectations
|
5
|
+
describe ArgumentEqualityExpectation do
|
6
|
+
context "when matching anything" do
|
7
|
+
attr_reader :expectation
|
8
|
+
before do
|
9
|
+
@expectation = ArgumentEqualityExpectation.new(anything)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module Expectations
|
5
|
+
describe ArgumentEqualityExpectation do
|
6
|
+
attr_reader :expectation
|
7
|
+
before do
|
8
|
+
@expectation = ArgumentEqualityExpectation.new(1, 2, 3)
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#expected_arguments" do
|
12
|
+
it "returns the passed in expected_arguments" do
|
13
|
+
expectation.expected_arguments.should == [1, 2, 3]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "==" do
|
18
|
+
it "returns true when passed in expected_arguments are equal" do
|
19
|
+
expectation.should == ArgumentEqualityExpectation.new(1, 2, 3)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "returns false when passed in expected_arguments are not equal" do
|
23
|
+
expectation.should_not == ArgumentEqualityExpectation.new(1, 2)
|
24
|
+
expectation.should_not == ArgumentEqualityExpectation.new(1)
|
25
|
+
expectation.should_not == ArgumentEqualityExpectation.new(:something)
|
26
|
+
expectation.should_not == ArgumentEqualityExpectation.new()
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#exact_match?" do
|
31
|
+
context "when all arguments exactly match" do
|
32
|
+
it "returns true" do
|
33
|
+
expectation.should be_exact_match(1, 2, 3)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when all arguments do not exactly match" do
|
38
|
+
it "returns false" do
|
39
|
+
expectation.should_not be_exact_match(1, 2)
|
40
|
+
expectation.should_not be_exact_match(1)
|
41
|
+
expectation.should_not be_exact_match()
|
42
|
+
expectation.should_not be_exact_match("does not match")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe "#wildcard_match?" do
|
48
|
+
context "when not an exact match" do
|
49
|
+
it "returns false" do
|
50
|
+
expectation = ArgumentEqualityExpectation.new(1)
|
51
|
+
expectation.should_not be_wildcard_match(1, 2, 3)
|
52
|
+
expectation.should_not be_wildcard_match("whatever")
|
53
|
+
expectation.should_not be_wildcard_match("whatever", "else")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "when an exact match" do
|
58
|
+
it "returns true" do
|
59
|
+
expectation = ArgumentEqualityExpectation.new(1, 2)
|
60
|
+
expectation.should be_wildcard_match(1, 2)
|
61
|
+
expectation.should_not be_wildcard_match(1)
|
62
|
+
expectation.should_not be_wildcard_match("whatever", "else")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when not passed correct number of arguments" do
|
67
|
+
it "returns false" do
|
68
|
+
expectation.should_not be_wildcard_match()
|
69
|
+
expectation.should_not be_wildcard_match(Object.new, Object.new)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "Functional spec" do
|
75
|
+
class ArgumentEqualityFunctionalFixture
|
76
|
+
attr_reader :arg1, :arg2
|
77
|
+
def initialize(arg1, arg2)
|
78
|
+
@arg1, @arg2 = arg1, arg2
|
79
|
+
end
|
80
|
+
|
81
|
+
def ==(other)
|
82
|
+
arg1 == (other.arg1) &&
|
83
|
+
arg2 == (other.arg2)
|
84
|
+
end
|
85
|
+
|
86
|
+
def eql?(other)
|
87
|
+
arg1.eql?(other.arg1) &&
|
88
|
+
arg2.eql?(other.arg2)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
before(:each) do
|
93
|
+
@predicate1 = 'first' # these should be mocks, waiting on rr bug fix
|
94
|
+
@predicate2 = 'second'
|
95
|
+
@predicate3 = 'third'
|
96
|
+
end
|
97
|
+
|
98
|
+
describe "when mock.proxy ==" do
|
99
|
+
it "does not have infinite recursion" do
|
100
|
+
mock.proxy(@predicate1) == @predicate1
|
101
|
+
mock.proxy(@predicate2) == @predicate2
|
102
|
+
ArgumentEqualityFunctionalFixture.new(@predicate1, @predicate2).should == ArgumentEqualityFunctionalFixture.new(@predicate1, @predicate2)
|
103
|
+
|
104
|
+
mock.proxy(@predicate1) == @predicate1
|
105
|
+
mock.proxy(@predicate2) == @predicate3
|
106
|
+
ArgumentEqualityFunctionalFixture.new(@predicate1, @predicate2).should_not == ArgumentEqualityFunctionalFixture.new(@predicate1, @predicate3)
|
107
|
+
end
|
108
|
+
|
109
|
+
it "matches Hashes properly (using ==)" do
|
110
|
+
mock.proxy(@predicate1) == {:foo => :bar}
|
111
|
+
@predicate1 == {:foo => :bar}
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "when mock.proxy .eql?" do
|
116
|
+
it "does not have infinite recursion" do
|
117
|
+
mock.proxy(@predicate1).eql? @predicate1
|
118
|
+
mock.proxy(@predicate2).eql? @predicate2
|
119
|
+
ArgumentEqualityFunctionalFixture.new(@predicate1, @predicate2).should be_eql(ArgumentEqualityFunctionalFixture.new(@predicate1, @predicate2))
|
120
|
+
|
121
|
+
mock.proxy(@predicate1).eql? @predicate1
|
122
|
+
mock.proxy(@predicate2).eql? @predicate3
|
123
|
+
ArgumentEqualityFunctionalFixture.new(@predicate1, @predicate2).should_not be_eql(ArgumentEqualityFunctionalFixture.new(@predicate1, @predicate3))
|
124
|
+
end
|
125
|
+
|
126
|
+
it "matches Hashes properly (using ==)" do
|
127
|
+
mock.proxy(@predicate1).eql?({:foo => :bar})
|
128
|
+
@predicate1.eql?({:foo => :bar})
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module Expectations
|
5
|
+
describe ArgumentEqualityExpectation do
|
6
|
+
context "with a boolean matcher" do
|
7
|
+
attr_reader :expectation
|
8
|
+
|
9
|
+
before do
|
10
|
+
@expectation = ArgumentEqualityExpectation.new(boolean)
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#wildcard_match?" do
|
14
|
+
before do
|
15
|
+
expectation = ArgumentEqualityExpectation.new(boolean)
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when passed a Boolean" do
|
19
|
+
it "returns true" do
|
20
|
+
expectation.should be_wildcard_match(true)
|
21
|
+
expectation.should be_wildcard_match(false)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when not passed a Boolean" do
|
26
|
+
it "returns false" do
|
27
|
+
expectation.should_not be_wildcard_match(:not_a_boolean)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module Expectations
|
5
|
+
describe ArgumentEqualityExpectation, "with HashIncluding argument" do
|
6
|
+
attr_reader :expectation, :expected_hash
|
7
|
+
|
8
|
+
before do
|
9
|
+
@expected_hash = {:texas => "Austin", :maine => "Augusta"}
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#exact_match?" do
|
13
|
+
before do
|
14
|
+
@expectation = ArgumentEqualityExpectation.new(hash_including(expected_hash))
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns true when passed in a HashIncluding matcher with the same hash" do
|
18
|
+
expectation.should be_exact_match(WildcardMatchers::HashIncluding.new(expected_hash))
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns false when passed in a HashIncluding matcher with a different argument list" do
|
22
|
+
expectation.should_not be_exact_match(WildcardMatchers::HashIncluding.new(:foo => 1))
|
23
|
+
end
|
24
|
+
|
25
|
+
it "returns false otherwise" do
|
26
|
+
expectation.should_not be_exact_match("hello")
|
27
|
+
expectation.should_not be_exact_match(:hello)
|
28
|
+
expectation.should_not be_exact_match(1)
|
29
|
+
expectation.should_not be_exact_match(nil)
|
30
|
+
expectation.should_not be_exact_match(true)
|
31
|
+
expectation.should_not be_exact_match()
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#wildcard_match?" do
|
36
|
+
before do
|
37
|
+
@expectation = ArgumentEqualityExpectation.new(hash_including(expected_hash))
|
38
|
+
end
|
39
|
+
|
40
|
+
it "returns true when hash contains same key/values as the expectation" do
|
41
|
+
expectation.should be_wildcard_match(expected_hash)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "returns true when hash contains at least expectation's key/values" do
|
45
|
+
expectation.should be_wildcard_match(expected_hash.merge(:oregon => "Salem"))
|
46
|
+
end
|
47
|
+
|
48
|
+
it "returns true when passed the same hash, even after the original is modified" do
|
49
|
+
original_expected_hash = expected_hash.clone
|
50
|
+
expected_hash[:texas] = nil
|
51
|
+
expectation.should be_wildcard_match(original_expected_hash)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "returns true even if one of the expectation's values is nil" do
|
55
|
+
expectation = ArgumentEqualityExpectation.new(hash_including(:foo => nil))
|
56
|
+
expectation.should be_wildcard_match({:foo => nil})
|
57
|
+
end
|
58
|
+
|
59
|
+
it "returns false when hash matches only some required key/values" do
|
60
|
+
expectation.should_not be_wildcard_match({:texas => "Austin"})
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns false when hash matches all the keys but not all the values" do
|
64
|
+
expectation.should_not be_wildcard_match({:texas => "Austin", :maine => "Portland"})
|
65
|
+
end
|
66
|
+
|
67
|
+
it "returns false when passed a hash that matches all values but not all keys" do
|
68
|
+
expectation.should_not be_wildcard_match({:texas => "Austin", :georgia => "Augusta"})
|
69
|
+
end
|
70
|
+
|
71
|
+
it "returns true when an exact match" do
|
72
|
+
expectation.should be_wildcard_match(hash_including(expected_hash))
|
73
|
+
end
|
74
|
+
|
75
|
+
it "returns false when not passed correct number of arguments" do
|
76
|
+
expectation.should_not be_wildcard_match()
|
77
|
+
expectation.should_not be_wildcard_match(:a, :b)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module WildcardMatchers
|
5
|
+
describe HashIncluding do
|
6
|
+
describe "#inspect" do
|
7
|
+
it "returns hash_including with expected key/values" do
|
8
|
+
expected_hash = {:foo => "bar", :baz => "qux"}
|
9
|
+
matcher = HashIncluding.new(expected_hash)
|
10
|
+
matcher.inspect.should include("hash_including(")
|
11
|
+
matcher.inspect.should include(':foo=>"bar"')
|
12
|
+
matcher.inspect.should include(':baz=>"qux"')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
|
2
|
+
|
3
|
+
module RR
|
4
|
+
module Expectations
|
5
|
+
describe ArgumentEqualityExpectation, "with Satisfy argument" do
|
6
|
+
attr_reader :expectation, :expectation_proc, :expected_value, :satisfy_matcher
|
7
|
+
|
8
|
+
before do
|
9
|
+
@expected_value = :foo
|
10
|
+
@expectation_proc = lambda {|argument| argument == expected_value}
|
11
|
+
@satisfy_matcher = satisfy(&expectation_proc)
|
12
|
+
@expectation = ArgumentEqualityExpectation.new(satisfy_matcher)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#exact_match?" do
|
16
|
+
before do
|
17
|
+
end
|
18
|
+
|
19
|
+
it "returns true when passed a Satisfy matcher with the same proc" do
|
20
|
+
expectation.should be_exact_match(WildcardMatchers::Satisfy.new(expectation_proc))
|
21
|
+
end
|
22
|
+
|
23
|
+
it "returns false when passed a Satisfy matcher with another proc" do
|
24
|
+
expectation.should_not be_exact_match(WildcardMatchers::Satisfy.new(lambda {}))
|
25
|
+
end
|
26
|
+
|
27
|
+
it "returns false otherwise" do
|
28
|
+
expectation.should_not be_exact_match("hello")
|
29
|
+
expectation.should_not be_exact_match(:hello)
|
30
|
+
expectation.should_not be_exact_match(1)
|
31
|
+
expectation.should_not be_exact_match(nil)
|
32
|
+
expectation.should_not be_exact_match(true)
|
33
|
+
expectation.should_not be_exact_match()
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "#wildcard_match?" do
|
38
|
+
it "returns true when the proc returns a truthy value" do
|
39
|
+
(!!expectation_proc.call(expected_value)).should be_true
|
40
|
+
expectation.should be_wildcard_match(expected_value)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "returns false when the proc returns a falsey value" do
|
44
|
+
(!!expectation_proc.call(:bar)).should be_false
|
45
|
+
expectation.should_not be_wildcard_match(:bar)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "returns true when an exact match" do
|
49
|
+
expectation.should be_wildcard_match(satisfy_matcher)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "returns false when not passed correct number of arguments" do
|
53
|
+
expectation.should_not be_wildcard_match()
|
54
|
+
expectation.should_not be_wildcard_match(:a, :b)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|