rr 0.10.10 → 0.10.11
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +4 -0
- data/VERSION.yml +1 -1
- data/lib/rr.rb +5 -3
- data/lib/rr/adapters/rr_methods.rb +5 -5
- data/lib/rr/blank_slate.rb +17 -0
- data/lib/rr/double_definitions/{child_double_definition_creator.rb → child_double_definition_create.rb} +1 -1
- data/lib/rr/double_definitions/double_definition.rb +13 -11
- data/lib/rr/double_definitions/{double_definition_creator.rb → double_definition_create.rb} +52 -43
- data/lib/rr/double_definitions/double_definition_create_blank_slate.rb +26 -0
- data/lib/rr/double_definitions/strategies/implementation/implementation_strategy.rb +2 -2
- data/lib/rr/double_definitions/strategies/scope/instance.rb +1 -1
- data/lib/rr/double_definitions/strategies/scope/instance_of_class.rb +6 -6
- data/lib/rr/double_definitions/strategies/scope/scope_strategy.rb +2 -2
- data/lib/rr/double_definitions/strategies/strategy.rb +15 -16
- data/lib/rr/double_definitions/strategies/verification/mock.rb +1 -1
- data/lib/rr/double_definitions/strategies/verification/stub.rb +1 -1
- data/lib/rr/double_definitions/strategies/verification/verification_strategy.rb +2 -2
- data/lib/rr/injections/double_injection.rb +59 -4
- data/lib/rr/injections/injection.rb +6 -0
- data/lib/rr/injections/method_missing_injection.rb +13 -1
- data/lib/rr/injections/singleton_method_added_injection.rb +14 -3
- data/lib/rr/method_dispatches/base_method_dispatch.rb +2 -2
- data/lib/rr/method_dispatches/method_missing_dispatch.rb +2 -2
- data/lib/rr/recorded_calls.rb +1 -1
- data/lib/rr/space.rb +17 -68
- data/lib/rr/spy_verification_proxy.rb +1 -6
- data/spec/rr/adapters/rr_methods_creator_spec.rb +9 -21
- data/spec/rr/adapters/rr_methods_space_spec.rb +10 -25
- data/spec/rr/double_definitions/child_double_definition_creator_spec.rb +16 -16
- data/spec/rr/double_definitions/double_definition_create_blank_slate_spec.rb +87 -0
- data/spec/rr/double_definitions/{double_definition_creator_spec.rb → double_definition_create_spec.rb} +64 -72
- data/spec/rr/double_injection/double_injection_verify_spec.rb +2 -2
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_any_times_spec.rb +5 -29
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_least_spec.rb +7 -39
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_most_spec.rb +19 -47
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_helper.rb +1 -9
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_integer_spec.rb +18 -64
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_proc_spec.rb +7 -53
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_range_spec.rb +12 -56
- data/spec/rr/rspec/rspec_adapter_spec.rb +8 -11
- data/spec/rr/space/space_spec.rb +72 -212
- data/spec/spec_helper.rb +0 -76
- data/spec/spy_verification_spec.rb +1 -1
- metadata +8 -11
- data/lib/rr/double_definitions/double_definition_creator_proxy.rb +0 -37
- data/ruby_19_spec.rb +0 -12
- data/spec/rr/double_definitions/double_definition_creator_proxy_spec.rb +0 -124
- data/spec/rr/double_definitions/double_definition_spec.rb +0 -1168
- data/spec/rr/double_spec.rb +0 -361
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_spec.rb +0 -38
@@ -12,7 +12,7 @@ module RR
|
|
12
12
|
# or
|
13
13
|
# proxy.mock(subject).method_name_1
|
14
14
|
#
|
15
|
-
# When passed the subject, a
|
15
|
+
# When passed the subject, a DoubleDefinitionCreateBlankSlate is returned. Passing
|
16
16
|
# a method with arguments to the proxy will set up expectations that
|
17
17
|
# the a call to the subject's method with the arguments will happen,
|
18
18
|
# and return the prescribed value.
|
@@ -12,7 +12,7 @@ module RR
|
|
12
12
|
# or
|
13
13
|
# proxy.stub(subject).method_name_1
|
14
14
|
#
|
15
|
-
# When passed the subject, a
|
15
|
+
# When passed the subject, a DoubleDefinitionCreateBlankSlate is returned. Passing
|
16
16
|
# a method with arguments to the proxy will set up expectations that
|
17
17
|
# the a call to the subject's method with the arguments will happen,
|
18
18
|
# and return the prescribed value.
|
@@ -4,8 +4,8 @@ module RR
|
|
4
4
|
module Verification
|
5
5
|
class VerificationStrategy < Strategy
|
6
6
|
class << self
|
7
|
-
def
|
8
|
-
|
7
|
+
def register_self_at_double_definition_create(strategy_method_name)
|
8
|
+
DoubleDefinitionCreate.register_verification_strategy_class(self, strategy_method_name)
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
@@ -4,6 +4,57 @@ module RR
|
|
4
4
|
# A double_injection has 0 to many Double objects. Each Double
|
5
5
|
# has Argument Expectations and Times called Expectations.
|
6
6
|
class DoubleInjection < Injection
|
7
|
+
class << self
|
8
|
+
def create(subject, method_name)
|
9
|
+
instances[subject][method_name.to_sym] ||= begin
|
10
|
+
new(subject, method_name.to_sym, (class << subject; self; end)).bind
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def exists?(subject, method_name)
|
15
|
+
instances.include?(subject) && instances[subject].include?(method_name.to_sym)
|
16
|
+
end
|
17
|
+
|
18
|
+
def reset
|
19
|
+
instances.each do |subject, method_double_map|
|
20
|
+
method_double_map.keys.each do |method_name|
|
21
|
+
reset_double(subject, method_name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def verify(*subjects)
|
27
|
+
subjects = Injections::DoubleInjection.instances.keys if subjects.empty?
|
28
|
+
subjects.each do |subject|
|
29
|
+
instances.include?(subject) &&
|
30
|
+
instances[subject].keys.each do |method_name|
|
31
|
+
verify_double(subject, method_name)
|
32
|
+
end &&
|
33
|
+
instances.delete(subject)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Verifies the DoubleInjection for the passed in subject and method_name.
|
38
|
+
def verify_double(subject, method_name)
|
39
|
+
Injections::DoubleInjection.instances[subject][method_name].verify
|
40
|
+
ensure
|
41
|
+
reset_double subject, method_name
|
42
|
+
end
|
43
|
+
|
44
|
+
# Resets the DoubleInjection for the passed in subject and method_name.
|
45
|
+
def reset_double(subject, method_name)
|
46
|
+
double_injection = Injections::DoubleInjection.instances[subject].delete(method_name)
|
47
|
+
Injections::DoubleInjection.instances.delete(subject) if Injections::DoubleInjection.instances[subject].empty?
|
48
|
+
double_injection.reset
|
49
|
+
end
|
50
|
+
|
51
|
+
def instances
|
52
|
+
@instances ||= HashWithObjectIdKey.new do |hash, subject_object|
|
53
|
+
hash.set_with_object_id(subject_object, {})
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
7
58
|
attr_reader :subject_class, :method_name, :doubles
|
8
59
|
|
9
60
|
MethodArguments = Struct.new(:arguments, :block)
|
@@ -34,8 +85,8 @@ module RR
|
|
34
85
|
bind_method_with_alias
|
35
86
|
end
|
36
87
|
else
|
37
|
-
|
38
|
-
|
88
|
+
Injections::MethodMissingInjection.create(subject)
|
89
|
+
Injections::SingletonMethodAddedInjection.create(subject)
|
39
90
|
end
|
40
91
|
else
|
41
92
|
bind_method
|
@@ -50,6 +101,7 @@ module RR
|
|
50
101
|
double.verify
|
51
102
|
end
|
52
103
|
end
|
104
|
+
|
53
105
|
# RR::DoubleInjection#reset removes the injected dispatcher method.
|
54
106
|
|
55
107
|
# It binds the original method implementation on the subject
|
@@ -100,7 +152,10 @@ module RR
|
|
100
152
|
|
101
153
|
protected
|
102
154
|
def subject_is_proxy_for_method?(method_name_in_question)
|
103
|
-
!(
|
155
|
+
!(
|
156
|
+
class << @subject;
|
157
|
+
self;
|
158
|
+
end).
|
104
159
|
instance_methods.
|
105
160
|
detect {|method_name| method_name.to_sym == method_name_in_question.to_sym}
|
106
161
|
end
|
@@ -122,7 +177,7 @@ module RR
|
|
122
177
|
subject_class.class_eval(<<-METHOD, __FILE__, __LINE__ + 1)
|
123
178
|
def #{@method_name}(*args, &block)
|
124
179
|
arguments = MethodArguments.new(args, block)
|
125
|
-
RR::
|
180
|
+
RR::Injections::DoubleInjection.create(#{subject}, :#{@method_name}).dispatch_method(arguments.arguments, arguments.block)
|
126
181
|
end
|
127
182
|
METHOD
|
128
183
|
end
|
@@ -1,6 +1,18 @@
|
|
1
1
|
module RR
|
2
2
|
module Injections
|
3
3
|
class MethodMissingInjection < Injection
|
4
|
+
class << self
|
5
|
+
def create(subject)
|
6
|
+
instances[subject] ||= begin
|
7
|
+
new(subject).bind
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def exists?(subject)
|
12
|
+
instances.include?(subject)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
4
16
|
def initialize(subject)
|
5
17
|
@subject = subject
|
6
18
|
@placeholder_method_defined = false
|
@@ -48,7 +60,7 @@ module RR
|
|
48
60
|
def bind_method
|
49
61
|
returns_method = <<-METHOD
|
50
62
|
def method_missing(method_name, *args, &block)
|
51
|
-
RR::
|
63
|
+
RR::Injections::MethodMissingInjection.create(self).dispatch_method(method_name, args, block)
|
52
64
|
end
|
53
65
|
METHOD
|
54
66
|
subject_class.class_eval(returns_method, __FILE__, __LINE__ - 4)
|
@@ -1,6 +1,18 @@
|
|
1
1
|
module RR
|
2
2
|
module Injections
|
3
3
|
class SingletonMethodAddedInjection < Injection
|
4
|
+
class << self
|
5
|
+
def create(subject)
|
6
|
+
instances[subject] ||= begin
|
7
|
+
new(subject).bind
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def exists?(subject)
|
12
|
+
instances.include?(subject)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
4
16
|
def initialize(subject)
|
5
17
|
@subject = subject
|
6
18
|
@placeholder_method_defined = false
|
@@ -18,12 +30,11 @@ module RR
|
|
18
30
|
end
|
19
31
|
|
20
32
|
memoized_subject = subject
|
21
|
-
memoized_space = space
|
22
33
|
memoized_original_method_alias_name = original_method_alias_name
|
23
34
|
subject_class.__send__(:alias_method, original_method_alias_name, :singleton_method_added)
|
24
35
|
subject_class.__send__(:define_method, :singleton_method_added) do |method_name_arg|
|
25
|
-
if
|
26
|
-
|
36
|
+
if Injections::DoubleInjection.exists?(memoized_subject, method_name_arg)
|
37
|
+
Injections::DoubleInjection.create(memoized_subject, method_name_arg).send(:deferred_bind_method)
|
27
38
|
end
|
28
39
|
send(memoized_original_method_alias_name, method_name_arg)
|
29
40
|
end
|
@@ -59,8 +59,8 @@ module RR
|
|
59
59
|
case return_value
|
60
60
|
when DoubleDefinitions::DoubleDefinition
|
61
61
|
return_value.root_subject
|
62
|
-
when DoubleDefinitions::
|
63
|
-
return_value.
|
62
|
+
when DoubleDefinitions::DoubleDefinitionCreateBlankSlate
|
63
|
+
return_value.__double_definition_create__.root_subject
|
64
64
|
else
|
65
65
|
return_value
|
66
66
|
end
|
@@ -13,7 +13,7 @@ module RR
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def call
|
16
|
-
if
|
16
|
+
if Injections::DoubleInjection.exists?(subject, method_name)
|
17
17
|
space.record_call(subject, method_name, args, block)
|
18
18
|
@double = find_double_to_attempt
|
19
19
|
|
@@ -50,7 +50,7 @@ module RR
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def double_injection
|
53
|
-
|
53
|
+
Injections::DoubleInjection.create(subject, method_name)
|
54
54
|
end
|
55
55
|
|
56
56
|
def_delegators 'self.class', :original_method_missing_alias_name
|
data/lib/rr/recorded_calls.rb
CHANGED
@@ -40,7 +40,7 @@ module RR
|
|
40
40
|
attr_accessor :ordered_index
|
41
41
|
|
42
42
|
def double_injection_exists_error(spy_verification)
|
43
|
-
unless
|
43
|
+
unless Injections::DoubleInjection.exists?(spy_verification.subject, spy_verification.method_name)
|
44
44
|
RR::Errors::SpyVerificationErrors::DoubleInjectionNotFoundError.new(
|
45
45
|
"A Double Injection for the subject and method call:\n" <<
|
46
46
|
"#{spy_verification.subject.inspect}\n" <<
|
data/lib/rr/space.rb
CHANGED
@@ -19,53 +19,14 @@ module RR
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
attr_reader :
|
22
|
+
attr_reader :ordered_doubles, :recorded_calls
|
23
23
|
attr_accessor :trim_backtrace
|
24
24
|
def initialize
|
25
|
-
@double_injections = HashWithObjectIdKey.new do |hash, subject_object|
|
26
|
-
hash.set_with_object_id(subject_object, {})
|
27
|
-
end
|
28
|
-
@method_missing_injections = HashWithObjectIdKey.new
|
29
|
-
@singleton_method_added_injections = HashWithObjectIdKey.new
|
30
25
|
@ordered_doubles = []
|
31
26
|
@trim_backtrace = false
|
32
27
|
@recorded_calls = RR::RecordedCalls.new
|
33
28
|
end
|
34
29
|
|
35
|
-
# Reuses or creates, if none exists, a DoubleInjection for the passed
|
36
|
-
# in subject and method_name.
|
37
|
-
# When a DoubleInjection is created, it binds the dispatcher to the
|
38
|
-
# subject.
|
39
|
-
def double_injection(subject, method_name)
|
40
|
-
@double_injections[subject][method_name.to_sym] ||= begin
|
41
|
-
Injections::DoubleInjection.new(subject, method_name.to_sym, (class << subject; self; end)).bind
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def double_injection_exists?(subject, method_name)
|
46
|
-
@double_injections.include?(subject) && @double_injections[subject].include?(method_name.to_sym)
|
47
|
-
end
|
48
|
-
|
49
|
-
def method_missing_injection(subject)
|
50
|
-
@method_missing_injections[subject] ||= begin
|
51
|
-
Injections::MethodMissingInjection.new(subject).bind
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def method_missing_injection_exists?(subject)
|
56
|
-
@method_missing_injections.include?(subject)
|
57
|
-
end
|
58
|
-
|
59
|
-
def singleton_method_added_injection(subject)
|
60
|
-
@singleton_method_added_injections[subject] ||= begin
|
61
|
-
Injections::SingletonMethodAddedInjection.new(subject).bind
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def singleton_method_added_injection_exists?(subject)
|
66
|
-
@singleton_method_added_injections.include?(subject)
|
67
|
-
end
|
68
|
-
|
69
30
|
# Registers the ordered Double to be verified.
|
70
31
|
def register_ordered_double(double)
|
71
32
|
@ordered_doubles << double unless ordered_doubles.include?(double)
|
@@ -90,20 +51,15 @@ module RR
|
|
90
51
|
|
91
52
|
# Verifies all the DoubleInjection objects have met their
|
92
53
|
# TimesCalledExpectations.
|
93
|
-
def verify_doubles(*
|
94
|
-
|
95
|
-
objects.each do |subject|
|
96
|
-
@double_injections[subject].keys.each do |method_name|
|
97
|
-
verify_double(subject, method_name)
|
98
|
-
end
|
99
|
-
end
|
54
|
+
def verify_doubles(*subjects)
|
55
|
+
Injections::DoubleInjection.verify(*subjects)
|
100
56
|
end
|
101
57
|
alias_method :verify, :verify_doubles
|
102
58
|
|
103
59
|
# Resets the registered Doubles and ordered Doubles
|
104
60
|
def reset
|
105
61
|
reset_ordered_doubles
|
106
|
-
|
62
|
+
Injections::DoubleInjection.reset
|
107
63
|
reset_method_missing_injections
|
108
64
|
reset_singleton_method_added_injections
|
109
65
|
reset_recorded_calls
|
@@ -111,49 +67,42 @@ module RR
|
|
111
67
|
|
112
68
|
# Verifies the DoubleInjection for the passed in subject and method_name.
|
113
69
|
def verify_double(subject, method_name)
|
114
|
-
|
115
|
-
ensure
|
116
|
-
reset_double subject, method_name
|
70
|
+
Injections::DoubleInjection.verify_double(subject, method_name)
|
117
71
|
end
|
118
72
|
|
119
73
|
# Resets the DoubleInjection for the passed in subject and method_name.
|
120
74
|
def reset_double(subject, method_name)
|
121
|
-
|
122
|
-
@double_injections.delete(subject) if @double_injections[subject].empty?
|
123
|
-
double_injection.reset
|
75
|
+
Injections::DoubleInjection.reset_double(subject, method_name)
|
124
76
|
end
|
125
|
-
|
77
|
+
|
126
78
|
def record_call(subject, method_name, arguments, block)
|
127
79
|
@recorded_calls << [subject, method_name, arguments, block]
|
128
80
|
end
|
129
81
|
|
82
|
+
def blank_slate_whitelist
|
83
|
+
@blank_slate_whitelist ||= [
|
84
|
+
"object_id", "respond_to?", "method_missing", "instance_eval", "instance_exec", "class_eval"
|
85
|
+
]
|
86
|
+
end
|
87
|
+
|
130
88
|
protected
|
131
89
|
# Removes the ordered Doubles from the list
|
132
90
|
def reset_ordered_doubles
|
133
91
|
@ordered_doubles.clear
|
134
92
|
end
|
135
93
|
|
136
|
-
# Resets the registered Doubles for the next test run.
|
137
|
-
def reset_double_injections
|
138
|
-
@double_injections.each do |subject, method_double_map|
|
139
|
-
method_double_map.keys.each do |method_name|
|
140
|
-
reset_double(subject, method_name)
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
94
|
def reset_method_missing_injections
|
146
|
-
|
95
|
+
Injections::MethodMissingInjection.instances.each do |subject, injection|
|
147
96
|
injection.reset
|
148
97
|
end
|
149
|
-
|
98
|
+
Injections::MethodMissingInjection.instances.clear
|
150
99
|
end
|
151
100
|
|
152
101
|
def reset_singleton_method_added_injections
|
153
|
-
|
102
|
+
Injections::SingletonMethodAddedInjection.instances.each do |subject, injection|
|
154
103
|
injection.reset
|
155
104
|
end
|
156
|
-
|
105
|
+
Injections::SingletonMethodAddedInjection.instances.clear
|
157
106
|
end
|
158
107
|
|
159
108
|
def reset_recorded_calls
|
@@ -1,11 +1,6 @@
|
|
1
1
|
module RR
|
2
2
|
class SpyVerificationProxy
|
3
|
-
|
4
|
-
unless m =~ /^_/ || m.to_s == 'object_id' || m.to_s == "instance_eval" || m.to_s == "instance_exec" || m.to_s == 'respond_to?'
|
5
|
-
alias_method "__blank_slated_#{m}", m
|
6
|
-
undef_method m
|
7
|
-
end
|
8
|
-
end
|
3
|
+
BlankSlate.call(self)
|
9
4
|
|
10
5
|
def initialize(subject)
|
11
6
|
@subject = subject
|
@@ -23,11 +23,9 @@ module RR
|
|
23
23
|
@strategy_method_name = :mock
|
24
24
|
end
|
25
25
|
|
26
|
-
send("normal strategy definition")
|
27
|
-
|
28
26
|
context "when passing no args" do
|
29
|
-
it "returns a
|
30
|
-
call_strategy.class.should == RR::DoubleDefinitions::
|
27
|
+
it "returns a DoubleDefinitionCreate" do
|
28
|
+
call_strategy.class.should == RR::DoubleDefinitions::DoubleDefinitionCreate
|
31
29
|
end
|
32
30
|
end
|
33
31
|
|
@@ -47,11 +45,9 @@ module RR
|
|
47
45
|
@strategy_method_name = :stub
|
48
46
|
end
|
49
47
|
|
50
|
-
send("normal strategy definition")
|
51
|
-
|
52
48
|
context "when passing no args" do
|
53
|
-
it "returns a
|
54
|
-
call_strategy.class.should == RR::DoubleDefinitions::
|
49
|
+
it "returns a DoubleDefinitionCreate" do
|
50
|
+
call_strategy.class.should == RR::DoubleDefinitions::DoubleDefinitionCreate
|
55
51
|
end
|
56
52
|
end
|
57
53
|
|
@@ -70,11 +66,9 @@ module RR
|
|
70
66
|
@strategy_method_name = :dont_allow
|
71
67
|
end
|
72
68
|
|
73
|
-
send("normal strategy definition")
|
74
|
-
|
75
69
|
context "when passing no args" do
|
76
|
-
it "returns a
|
77
|
-
call_strategy.class.should == RR::DoubleDefinitions::
|
70
|
+
it "returns a DoubleDefinitionCreate" do
|
71
|
+
call_strategy.class.should == RR::DoubleDefinitions::DoubleDefinitionCreate
|
78
72
|
end
|
79
73
|
end
|
80
74
|
|
@@ -104,12 +98,10 @@ module RR
|
|
104
98
|
@strategy_method_name = :mock!
|
105
99
|
end
|
106
100
|
|
107
|
-
send("! strategy definition")
|
108
|
-
|
109
101
|
context "when passed a method_name argument" do
|
110
102
|
it "sets #verification_strategy to Mock" do
|
111
103
|
proxy = mock!(:foobar)
|
112
|
-
proxy.
|
104
|
+
proxy.double_definition_create.verification_strategy.class.should == RR::DoubleDefinitions::Strategies::Verification::Mock
|
113
105
|
end
|
114
106
|
end
|
115
107
|
end
|
@@ -119,12 +111,10 @@ module RR
|
|
119
111
|
@strategy_method_name = :stub!
|
120
112
|
end
|
121
113
|
|
122
|
-
send("! strategy definition")
|
123
|
-
|
124
114
|
context "when passed a method_name argument" do
|
125
115
|
it "sets #verification_strategy to Stub" do
|
126
116
|
proxy = stub!(:foobar)
|
127
|
-
proxy.
|
117
|
+
proxy.double_definition_create.verification_strategy.class.should == RR::DoubleDefinitions::Strategies::Verification::Stub
|
128
118
|
end
|
129
119
|
end
|
130
120
|
end
|
@@ -134,12 +124,10 @@ module RR
|
|
134
124
|
@strategy_method_name = :dont_allow!
|
135
125
|
end
|
136
126
|
|
137
|
-
send("! strategy definition")
|
138
|
-
|
139
127
|
context "when passed a method_name argument" do
|
140
128
|
it "sets #verification_strategy to DontAllow" do
|
141
129
|
proxy = dont_allow!(:foobar)
|
142
|
-
proxy.
|
130
|
+
proxy.double_definition_create.verification_strategy.class.should == RR::DoubleDefinitions::Strategies::Verification::DontAllow
|
143
131
|
end
|
144
132
|
end
|
145
133
|
end
|