rr 0.4.8 → 0.4.9
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 +3 -0
- data/{README → README.rdoc} +14 -6
- data/Rakefile +2 -2
- data/lib/rr.rb +11 -3
- data/lib/rr/adapters/rr_methods.rb +12 -12
- data/lib/rr/adapters/rspec.rb +3 -3
- data/lib/rr/adapters/test_unit.rb +3 -3
- data/lib/rr/double.rb +12 -10
- data/lib/rr/double_creator.rb +48 -45
- data/lib/rr/double_definition.rb +17 -149
- data/lib/rr/double_definition_builder.rb +11 -11
- data/lib/rr/double_definition_creator.rb +156 -0
- data/lib/rr/{double_method_proxy.rb → double_definition_creator_proxy.rb} +2 -2
- data/lib/rr/double_injection.rb +6 -6
- data/lib/rr/double_matches.rb +40 -40
- data/lib/rr/errors/rr_error.rb +1 -1
- data/lib/rr/expectations/times_called_expectation.rb +1 -1
- data/lib/rr/space.rb +9 -30
- data/spec/high_level_spec.rb +140 -143
- data/spec/rr/adapters/rr_methods_creator_spec.rb +21 -21
- data/spec/rr/adapters/rr_methods_space_spec.rb +2 -2
- data/spec/rr/double/double_injection_dispatching_spec.rb +15 -15
- data/spec/rr/double/double_injection_reset_spec.rb +1 -1
- data/spec/rr/double/double_injection_verify_spec.rb +5 -4
- data/spec/rr/{double_method_proxy_spec.rb → double_definition_creator_proxy_spec.rb} +12 -10
- data/spec/rr/{double_creator_spec.rb → double_definition_creator_spec.rb} +166 -124
- data/spec/rr/double_definition_spec.rb +637 -642
- data/spec/rr/double_spec.rb +44 -43
- data/spec/rr/errors/rr_error_spec.rb +6 -6
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_any_times_spec.rb +3 -3
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_least_spec.rb +8 -8
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_most_spec.rb +11 -13
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_helper.rb +2 -2
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_integer_spec.rb +19 -19
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_proc_spec.rb +16 -16
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_range_spec.rb +16 -16
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_spec.rb +7 -11
- data/spec/rr/rspec/rspec_adapter_spec.rb +10 -10
- data/spec/rr/rspec/rspec_backtrace_tweaking_spec.rb +1 -1
- data/spec/rr/space/space_spec.rb +372 -18
- data/spec/rr/test_unit/test_unit_backtrace_test.rb +1 -1
- data/spec/rr/times_called_matchers/proc_matcher_spec.rb +3 -3
- data/spec/rr/times_called_matchers/times_called_matcher_spec.rb +3 -3
- data/spec/spec_helper.rb +14 -3
- data/spec/spec_suite.rb +2 -2
- metadata +47 -45
- data/spec/rr/double/double_injection_register_scenario_spec.rb +0 -24
- data/spec/rr/space/space_create_spec.rb +0 -268
- data/spec/rr/space/space_helper.rb +0 -7
- data/spec/rr/space/space_register_spec.rb +0 -32
- data/spec/rr/space/space_reset_spec.rb +0 -131
- data/spec/rr/space/space_verify_spec.rb +0 -181
@@ -1,5 +1,5 @@
|
|
1
1
|
module RR
|
2
|
-
class
|
2
|
+
class DoubleDefinitionCreatorProxy
|
3
3
|
def initialize(creator, object, &block) #:nodoc:
|
4
4
|
@creator = creator
|
5
5
|
@object = object
|
@@ -9,7 +9,7 @@ module RR
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def method_missing(method_name, *args, &block)
|
12
|
-
@creator.create
|
12
|
+
@creator.create(@object, method_name, *args, &block)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
yield(self) if block_given?
|
data/lib/rr/double_injection.rb
CHANGED
@@ -10,7 +10,7 @@ module RR
|
|
10
10
|
@object = object
|
11
11
|
@method_name = method_name.to_sym
|
12
12
|
if object_has_method?(method_name)
|
13
|
-
meta.
|
13
|
+
meta.__send__(:alias_method, original_method_name, method_name)
|
14
14
|
end
|
15
15
|
@doubles = []
|
16
16
|
end
|
@@ -47,12 +47,12 @@ module RR
|
|
47
47
|
# It binds the original method implementation on the object
|
48
48
|
# if one exists.
|
49
49
|
def reset
|
50
|
-
meta.
|
50
|
+
meta.__send__(:remove_method, placeholder_name)
|
51
51
|
if object_has_original_method?
|
52
|
-
meta.
|
53
|
-
meta.
|
52
|
+
meta.__send__(:alias_method, @method_name, original_method_name)
|
53
|
+
meta.__send__(:remove_method, original_method_name)
|
54
54
|
else
|
55
|
-
meta.
|
55
|
+
meta.__send__(:remove_method, @method_name)
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
@@ -80,7 +80,7 @@ module RR
|
|
80
80
|
end
|
81
81
|
|
82
82
|
def find_double_to_attempt(args)
|
83
|
-
matches = DoubleMatches.new(@doubles).find_all_matches
|
83
|
+
matches = DoubleMatches.new(@doubles).find_all_matches(args)
|
84
84
|
|
85
85
|
unless matches.exact_terminal_doubles_to_attempt.empty?
|
86
86
|
return matches.exact_terminal_doubles_to_attempt.first
|
data/lib/rr/double_matches.rb
CHANGED
@@ -1,51 +1,51 @@
|
|
1
1
|
module RR
|
2
|
-
class DoubleMatches
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
2
|
+
class DoubleMatches
|
3
|
+
attr_reader :matching_doubles,
|
4
|
+
:exact_terminal_doubles_to_attempt,
|
5
|
+
:exact_non_terminal_doubles_to_attempt,
|
6
|
+
:wildcard_terminal_doubles_to_attempt,
|
7
|
+
:wildcard_non_terminal_doubles_to_attempt
|
8
|
+
def initialize(doubles) #:nodoc:
|
9
|
+
@doubles = doubles
|
10
|
+
@matching_doubles = []
|
11
|
+
@exact_terminal_doubles_to_attempt = []
|
12
|
+
@exact_non_terminal_doubles_to_attempt = []
|
13
|
+
@wildcard_terminal_doubles_to_attempt = []
|
14
|
+
@wildcard_non_terminal_doubles_to_attempt = []
|
15
|
+
end
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
17
|
+
def find_all_matches(args)
|
18
|
+
@doubles.each do |double|
|
19
|
+
if double.exact_match?(*args)
|
20
|
+
matching_doubles << double
|
21
|
+
if double.attempt?
|
22
|
+
exact_double_is_terminal_or_non_terminal double
|
23
|
+
end
|
24
|
+
elsif double.wildcard_match?(*args)
|
25
|
+
matching_doubles << double
|
26
|
+
if double.attempt?
|
27
|
+
wildcard_double_is_terminal_or_non_terminal double
|
28
|
+
end
|
28
29
|
end
|
29
30
|
end
|
31
|
+
self
|
30
32
|
end
|
31
|
-
self
|
32
|
-
end
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
34
|
+
protected
|
35
|
+
def exact_double_is_terminal_or_non_terminal(double)
|
36
|
+
if double.terminal?
|
37
|
+
exact_terminal_doubles_to_attempt << double
|
38
|
+
else
|
39
|
+
exact_non_terminal_doubles_to_attempt << double
|
40
|
+
end
|
40
41
|
end
|
41
|
-
end
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
def wildcard_double_is_terminal_or_non_terminal(double)
|
44
|
+
if double.terminal?
|
45
|
+
wildcard_terminal_doubles_to_attempt << double
|
46
|
+
else
|
47
|
+
wildcard_non_terminal_doubles_to_attempt << double
|
48
|
+
end
|
48
49
|
end
|
49
50
|
end
|
50
|
-
end
|
51
51
|
end
|
data/lib/rr/errors/rr_error.rb
CHANGED
@@ -6,7 +6,7 @@ module RR
|
|
6
6
|
attr_writer :backtrace
|
7
7
|
def backtrace
|
8
8
|
original_backtrace = (@backtrace) ? @backtrace : super
|
9
|
-
return original_backtrace unless RR
|
9
|
+
return original_backtrace unless RR.trim_backtrace
|
10
10
|
|
11
11
|
return original_backtrace unless original_backtrace.respond_to?(:each)
|
12
12
|
new_backtrace = []
|
data/lib/rr/space.rb
CHANGED
@@ -1,14 +1,18 @@
|
|
1
1
|
module RR
|
2
|
-
# RR::Space is
|
3
|
-
# and global state object for the RR framework. The RR::Space.instance
|
4
|
-
# is a singleton that holds the state.
|
2
|
+
# RR::Space.instance is the global state object for the RR framework.
|
5
3
|
class Space
|
4
|
+
module Reader
|
5
|
+
def space
|
6
|
+
RR::Space.instance
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
6
10
|
class << self
|
7
11
|
def instance
|
8
12
|
@instance ||= new
|
9
13
|
end
|
10
14
|
attr_writer :instance
|
11
|
-
|
15
|
+
|
12
16
|
protected
|
13
17
|
def method_missing(method_name, *args, &block)
|
14
18
|
instance.__send__(method_name, *args, &block)
|
@@ -23,32 +27,6 @@ module RR
|
|
23
27
|
@trim_backtrace = false
|
24
28
|
end
|
25
29
|
|
26
|
-
def double_method_proxy(creator, object, method_name=nil, &definition)
|
27
|
-
if method_name && definition
|
28
|
-
raise ArgumentError, "Cannot pass in a method name and a block"
|
29
|
-
end
|
30
|
-
proxy = DoubleMethodProxy.new(creator, object, &definition)
|
31
|
-
return proxy unless method_name
|
32
|
-
proxy.__send__(method_name)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Creates a DoubleCreator.
|
36
|
-
def double_creator
|
37
|
-
DoubleCreator.new(self)
|
38
|
-
end
|
39
|
-
|
40
|
-
# Creates and registers a Double to be verified.
|
41
|
-
def double(double_injection, definition = double_definition)
|
42
|
-
double = Double.new(self, double_injection, definition)
|
43
|
-
double.definition.double = double
|
44
|
-
double_injection.register_double double
|
45
|
-
double
|
46
|
-
end
|
47
|
-
|
48
|
-
def double_definition
|
49
|
-
DoubleDefinition.new(self)
|
50
|
-
end
|
51
|
-
|
52
30
|
# Reuses or creates, if none exists, a DoubleInjection for the passed
|
53
31
|
# in object and method_name.
|
54
32
|
# When a DoubleInjection is created, it binds the dispatcher to the
|
@@ -94,6 +72,7 @@ module RR
|
|
94
72
|
end
|
95
73
|
end
|
96
74
|
end
|
75
|
+
alias_method :verify, :verify_doubles
|
97
76
|
|
98
77
|
# Resets the registered Doubles and ordered Doubles
|
99
78
|
def reset
|
data/spec/high_level_spec.rb
CHANGED
@@ -1,187 +1,184 @@
|
|
1
1
|
dir = File.dirname(__FILE__)
|
2
2
|
require "#{dir}/spec_helper"
|
3
3
|
|
4
|
-
|
4
|
+
class HighLevelSpec
|
5
|
+
end
|
6
|
+
|
7
|
+
describe "RR" do
|
5
8
|
before(:each) do
|
6
9
|
@obj = Object.new
|
7
10
|
extend RR::Adapters::RRMethods
|
8
11
|
end
|
9
12
|
|
10
13
|
after(:each) do
|
11
|
-
RR
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "RR mock:" do
|
16
|
-
it_should_behave_like "RR"
|
17
|
-
|
18
|
-
it "mocks via inline call" do
|
19
|
-
mock(@obj).to_s {"a value"}
|
20
|
-
@obj.to_s.should == "a value"
|
21
|
-
proc {@obj.to_s}.should raise_error(RR::Errors::TimesCalledError)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "allows ordering" do
|
25
|
-
mock(@obj).to_s {"value 1"}.ordered
|
26
|
-
mock(@obj).to_s {"value 2"}.twice.ordered
|
27
|
-
@obj.to_s.should == "value 1"
|
28
|
-
@obj.to_s.should == "value 2"
|
29
|
-
@obj.to_s.should == "value 2"
|
30
|
-
proc {@obj.to_s}.should raise_error(RR::Errors::TimesCalledError)
|
14
|
+
RR.reset
|
31
15
|
end
|
32
16
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
17
|
+
describe "RR mock:" do
|
18
|
+
it "mocks via inline call" do
|
19
|
+
mock(@obj).to_s {"a value"}
|
20
|
+
@obj.to_s.should == "a value"
|
21
|
+
lambda {@obj.to_s}.should raise_error(RR::Errors::TimesCalledError)
|
37
22
|
end
|
38
|
-
@obj.to_s.should == "a value"
|
39
|
-
@obj.to_sym.should == :crazy
|
40
|
-
end
|
41
|
-
|
42
|
-
it "has wildcard matchers" do
|
43
|
-
mock(@obj).foobar(
|
44
|
-
is_a(String),
|
45
|
-
anything,
|
46
|
-
numeric,
|
47
|
-
boolean,
|
48
|
-
duck_type(:to_s),
|
49
|
-
/abc/
|
50
|
-
) {"value 1"}.twice
|
51
|
-
@obj.foobar(
|
52
|
-
'hello',
|
53
|
-
Object.new,
|
54
|
-
99,
|
55
|
-
false,
|
56
|
-
"My String",
|
57
|
-
"Tabcola"
|
58
|
-
).should == "value 1"
|
59
|
-
proc do
|
60
|
-
@obj.foobar(:failure)
|
61
|
-
end.should raise_error( RR::Errors::DoubleNotFoundError )
|
62
|
-
end
|
63
|
-
|
64
|
-
it "mocks methods without letters" do
|
65
|
-
mock(@obj) == 55
|
66
|
-
|
67
|
-
@obj == 55
|
68
|
-
proc do
|
69
|
-
@obj == 99
|
70
|
-
end.should raise_error(RR::Errors::DoubleNotFoundError)
|
71
|
-
end
|
72
|
-
end
|
73
23
|
|
74
|
-
|
75
|
-
|
24
|
+
it "allows ordering" do
|
25
|
+
mock(@obj).to_s {"value 1"}.ordered
|
26
|
+
mock(@obj).to_s {"value 2"}.twice.ordered
|
27
|
+
@obj.to_s.should == "value 1"
|
28
|
+
@obj.to_s.should == "value 2"
|
29
|
+
@obj.to_s.should == "value 2"
|
30
|
+
lambda {@obj.to_s}.should raise_error(RR::Errors::TimesCalledError)
|
31
|
+
end
|
76
32
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
33
|
+
it "mocks via block" do
|
34
|
+
mock @obj do |c|
|
35
|
+
c.to_s {"a value"}
|
36
|
+
c.to_sym {:crazy}
|
37
|
+
end
|
38
|
+
@obj.to_s.should == "a value"
|
39
|
+
@obj.to_sym.should == :crazy
|
40
|
+
end
|
83
41
|
|
84
|
-
|
85
|
-
|
86
|
-
|
42
|
+
it "has wildcard matchers" do
|
43
|
+
mock(@obj).foobar(
|
44
|
+
is_a(String),
|
45
|
+
anything,
|
46
|
+
numeric,
|
47
|
+
boolean,
|
48
|
+
duck_type(:to_s),
|
49
|
+
/abc/
|
50
|
+
) {"value 1"}.twice
|
51
|
+
@obj.foobar(
|
52
|
+
'hello',
|
53
|
+
Object.new,
|
54
|
+
99,
|
55
|
+
false,
|
56
|
+
"My String",
|
57
|
+
"Tabcola"
|
58
|
+
).should == "value 1"
|
59
|
+
lambda do
|
60
|
+
@obj.foobar(:failure)
|
61
|
+
end.should raise_error( RR::Errors::DoubleNotFoundError )
|
87
62
|
end
|
88
|
-
mock.proxy(@obj).to_s(:foo).ordered
|
89
|
-
mock.proxy(@obj).to_s(:bar).twice.ordered
|
90
63
|
|
91
|
-
|
92
|
-
|
93
|
-
@obj.to_s(:bar).should == "Original to_s with arg bar"
|
94
|
-
proc {@obj.to_s(:bar)}.should raise_error(RR::Errors::TimesCalledError)
|
95
|
-
end
|
64
|
+
it "mocks methods without letters" do
|
65
|
+
mock(@obj) == 55
|
96
66
|
|
97
|
-
|
98
|
-
|
99
|
-
|
67
|
+
@obj == 55
|
68
|
+
lambda do
|
69
|
+
@obj == 99
|
70
|
+
end.should raise_error(RR::Errors::DoubleNotFoundError)
|
100
71
|
end
|
101
|
-
mock.proxy(@obj).to_s(:foo).ordered
|
102
|
-
mock.proxy(@obj).to_s(:bar).twice.ordered
|
103
|
-
|
104
|
-
@obj.to_s(:foo).should == "Original to_s with arg foo"
|
105
|
-
@obj.to_s(:bar).should == "Original to_s with arg bar"
|
106
|
-
@obj.to_s(:bar).should == "Original to_s with arg bar"
|
107
|
-
proc {@obj.to_s(:bar)}.should raise_error(RR::Errors::TimesCalledError)
|
108
72
|
end
|
109
73
|
|
110
|
-
|
111
|
-
|
112
|
-
|
74
|
+
describe "RR proxy:" do
|
75
|
+
it "proxies via inline call" do
|
76
|
+
expected_to_s_value = @obj.to_s
|
77
|
+
mock.proxy(@obj).to_s
|
78
|
+
@obj.to_s.should == expected_to_s_value
|
79
|
+
lambda {@obj.to_s}.should raise_error
|
113
80
|
end
|
114
81
|
|
115
|
-
|
116
|
-
|
82
|
+
it "proxy allows ordering" do
|
83
|
+
def @obj.to_s(arg)
|
84
|
+
"Original to_s with arg #{arg}"
|
85
|
+
end
|
86
|
+
mock.proxy(@obj).to_s(:foo).ordered
|
87
|
+
mock.proxy(@obj).to_s(:bar).twice.ordered
|
88
|
+
|
89
|
+
@obj.to_s(:foo).should == "Original to_s with arg foo"
|
90
|
+
@obj.to_s(:bar).should == "Original to_s with arg bar"
|
91
|
+
@obj.to_s(:bar).should == "Original to_s with arg bar"
|
92
|
+
lambda {@obj.to_s(:bar)}.should raise_error(RR::Errors::TimesCalledError)
|
117
93
|
end
|
118
94
|
|
119
|
-
|
120
|
-
|
121
|
-
|
95
|
+
it "proxy allows ordering" do
|
96
|
+
def @obj.to_s(arg)
|
97
|
+
"Original to_s with arg #{arg}"
|
98
|
+
end
|
99
|
+
mock.proxy(@obj).to_s(:foo).ordered
|
100
|
+
mock.proxy(@obj).to_s(:bar).twice.ordered
|
101
|
+
|
102
|
+
@obj.to_s(:foo).should == "Original to_s with arg foo"
|
103
|
+
@obj.to_s(:bar).should == "Original to_s with arg bar"
|
104
|
+
@obj.to_s(:bar).should == "Original to_s with arg bar"
|
105
|
+
lambda {@obj.to_s(:bar)}.should raise_error(RR::Errors::TimesCalledError)
|
122
106
|
end
|
123
|
-
@obj.foobar_1(1).should == :original_value_1
|
124
|
-
proc {@obj.foobar_1(:blah)}.should raise_error
|
125
107
|
|
126
|
-
|
127
|
-
|
128
|
-
|
108
|
+
it "proxies via block" do
|
109
|
+
def @obj.foobar_1(*args)
|
110
|
+
:original_value_1
|
111
|
+
end
|
129
112
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
end
|
113
|
+
def @obj.foobar_2
|
114
|
+
:original_value_2
|
115
|
+
end
|
134
116
|
|
135
|
-
|
136
|
-
|
137
|
-
|
117
|
+
mock.proxy @obj do |c|
|
118
|
+
c.foobar_1(1)
|
119
|
+
c.foobar_2
|
120
|
+
end
|
121
|
+
@obj.foobar_1(1).should == :original_value_1
|
122
|
+
lambda {@obj.foobar_1(:blah)}.should raise_error
|
138
123
|
|
139
|
-
|
140
|
-
|
141
|
-
c.foobar_2
|
124
|
+
@obj.foobar_2.should == :original_value_2
|
125
|
+
lambda {@obj.foobar_2(:blah)}.should raise_error
|
142
126
|
end
|
143
|
-
@obj.foobar_1(1).should == :original_value_1
|
144
|
-
proc {@obj.foobar_1(:blah)}.should raise_error
|
145
127
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
end
|
128
|
+
it "proxies via block" do
|
129
|
+
def @obj.foobar_1(*args)
|
130
|
+
:original_value_1
|
131
|
+
end
|
132
|
+
|
133
|
+
def @obj.foobar_2
|
134
|
+
:original_value_2
|
135
|
+
end
|
150
136
|
|
151
|
-
|
152
|
-
|
137
|
+
mock.proxy @obj do |c|
|
138
|
+
c.foobar_1(1)
|
139
|
+
c.foobar_2
|
140
|
+
end
|
141
|
+
@obj.foobar_1(1).should == :original_value_1
|
142
|
+
lambda {@obj.foobar_1(:blah)}.should raise_error
|
153
143
|
|
154
|
-
|
155
|
-
|
156
|
-
|
144
|
+
@obj.foobar_2.should == :original_value_2
|
145
|
+
lambda {@obj.foobar_2(:blah)}.should raise_error
|
146
|
+
end
|
157
147
|
end
|
158
148
|
|
159
|
-
|
160
|
-
|
161
|
-
|
149
|
+
describe "RR stub:" do
|
150
|
+
it "stubs via inline call" do
|
151
|
+
stub(@obj).to_s {"a value"}
|
152
|
+
@obj.to_s.should == "a value"
|
153
|
+
end
|
162
154
|
|
163
|
-
|
164
|
-
|
165
|
-
|
155
|
+
it "allows ordering" do
|
156
|
+
stub(@obj).to_s {"value 1"}.once.ordered
|
157
|
+
stub(@obj).to_s {"value 2"}.once.ordered
|
166
158
|
|
167
|
-
|
168
|
-
|
169
|
-
d.to_s {"a value"}
|
170
|
-
d.to_sym {:crazy}
|
159
|
+
@obj.to_s.should == "value 1"
|
160
|
+
@obj.to_s.should == "value 2"
|
171
161
|
end
|
172
|
-
@obj.to_s.should == "a value"
|
173
|
-
@obj.to_sym.should == :crazy
|
174
|
-
end
|
175
162
|
|
176
|
-
|
177
|
-
|
178
|
-
|
163
|
+
it "stubs via block" do
|
164
|
+
stub @obj do |d|
|
165
|
+
d.to_s {"a value"}
|
166
|
+
d.to_sym {:crazy}
|
167
|
+
end
|
168
|
+
@obj.to_s.should == "a value"
|
169
|
+
@obj.to_sym.should == :crazy
|
170
|
+
end
|
171
|
+
|
172
|
+
it "stubs instance_of" do
|
173
|
+
stub.instance_of(HighLevelSpec) do |o|
|
174
|
+
o.to_s {"High Level Spec"}
|
175
|
+
end
|
176
|
+
HighLevelSpec.new.to_s.should == "High Level Spec"
|
179
177
|
end
|
180
|
-
Date.new.to_s.should == "The Date"
|
181
|
-
end
|
182
178
|
|
183
|
-
|
184
|
-
|
185
|
-
|
179
|
+
it "stubs methods without letters" do
|
180
|
+
stub(@obj).__send__(:==) {:equality}
|
181
|
+
(@obj == 55).should == :equality
|
182
|
+
end
|
186
183
|
end
|
187
184
|
end
|