rspec-expectations 2.8.0 → 2.9.0.rc2
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/.document +5 -0
- data/.yardopts +3 -0
- data/Changelog.md +176 -0
- data/README.md +2 -13
- data/features/custom_matchers/access_running_example.feature +1 -1
- data/features/step_definitions/additional_cli_steps.rb +4 -4
- data/lib/rspec/expectations/fail_with.rb +3 -3
- data/lib/rspec/expectations/handler.rb +3 -5
- data/lib/rspec/expectations/version.rb +1 -1
- data/lib/rspec/matchers.rb +387 -21
- data/lib/rspec/matchers/built_in.rb +33 -0
- data/lib/rspec/matchers/built_in/base_matcher.rb +58 -0
- data/lib/rspec/matchers/built_in/be.rb +183 -0
- data/lib/rspec/matchers/built_in/be_instance_of.rb +13 -0
- data/lib/rspec/matchers/built_in/be_kind_of.rb +13 -0
- data/lib/rspec/matchers/built_in/be_within.rb +39 -0
- data/lib/rspec/matchers/built_in/change.rb +132 -0
- data/lib/rspec/matchers/built_in/cover.rb +22 -0
- data/lib/rspec/matchers/built_in/eq.rb +26 -0
- data/lib/rspec/matchers/built_in/eql.rb +25 -0
- data/lib/rspec/matchers/built_in/equal.rb +48 -0
- data/lib/rspec/matchers/built_in/exist.rb +28 -0
- data/lib/rspec/matchers/built_in/has.rb +47 -0
- data/lib/rspec/matchers/built_in/have.rb +107 -0
- data/lib/rspec/matchers/built_in/include.rb +52 -0
- data/lib/rspec/matchers/built_in/match.rb +13 -0
- data/lib/rspec/matchers/built_in/match_array.rb +52 -0
- data/lib/rspec/matchers/built_in/raise_error.rb +96 -0
- data/lib/rspec/matchers/built_in/respond_to.rb +73 -0
- data/lib/rspec/matchers/built_in/satisfy.rb +29 -0
- data/lib/rspec/matchers/built_in/throw_symbol.rb +93 -0
- data/lib/rspec/matchers/dsl.rb +1 -1
- data/lib/rspec/matchers/matcher.rb +263 -233
- data/lib/rspec/matchers/method_missing.rb +2 -2
- data/lib/rspec/matchers/operator_matcher.rb +19 -20
- data/spec/rspec/expectations/handler_spec.rb +1 -1
- data/spec/rspec/matchers/base_matcher_spec.rb +1 -2
- data/spec/rspec/matchers/change_spec.rb +3 -3
- data/spec/rspec/matchers/cover_spec.rb +46 -46
- data/spec/rspec/matchers/dsl_spec.rb +36 -3
- data/spec/rspec/matchers/have_spec.rb +2 -2
- data/spec/rspec/matchers/include_spec.rb +1 -1
- data/spec/rspec/matchers/matcher_spec.rb +319 -305
- data/spec/rspec/matchers/method_missing_spec.rb +1 -0
- data/spec/rspec/matchers/operator_matcher_spec.rb +2 -2
- data/spec/rspec/matchers/throw_symbol_spec.rb +103 -105
- metadata +93 -39
- data/lib/rspec/matchers/base_matcher.rb +0 -56
- data/lib/rspec/matchers/be.rb +0 -232
- data/lib/rspec/matchers/be_instance_of.rb +0 -24
- data/lib/rspec/matchers/be_kind_of.rb +0 -24
- data/lib/rspec/matchers/be_within.rb +0 -47
- data/lib/rspec/matchers/change.rb +0 -197
- data/lib/rspec/matchers/cover.rb +0 -36
- data/lib/rspec/matchers/eq.rb +0 -36
- data/lib/rspec/matchers/eql.rb +0 -35
- data/lib/rspec/matchers/equal.rb +0 -58
- data/lib/rspec/matchers/errors.rb +0 -5
- data/lib/rspec/matchers/exist.rb +0 -34
- data/lib/rspec/matchers/has.rb +0 -44
- data/lib/rspec/matchers/have.rb +0 -162
- data/lib/rspec/matchers/include.rb +0 -66
- data/lib/rspec/matchers/match.rb +0 -21
- data/lib/rspec/matchers/match_array.rb +0 -65
- data/lib/rspec/matchers/raise_error.rb +0 -116
- data/lib/rspec/matchers/respond_to.rb +0 -80
- data/lib/rspec/matchers/satisfy.rb +0 -46
- data/lib/rspec/matchers/throw_symbol.rb +0 -112
data/lib/rspec/matchers/be.rb
DELETED
@@ -1,232 +0,0 @@
|
|
1
|
-
require 'rspec/matchers/dsl'
|
2
|
-
|
3
|
-
module RSpec
|
4
|
-
module Matchers
|
5
|
-
class BeTrue
|
6
|
-
include BaseMatcher
|
7
|
-
|
8
|
-
def matches?(actual)
|
9
|
-
super(actual)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
# Passes if actual is truthy (anything but false or nil)
|
14
|
-
def be_true
|
15
|
-
BeTrue.new
|
16
|
-
end
|
17
|
-
|
18
|
-
class BeFalse
|
19
|
-
include BaseMatcher
|
20
|
-
|
21
|
-
def matches?(actual)
|
22
|
-
!super(actual)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
# Passes if actual is falsy (false or nil)
|
27
|
-
def be_false
|
28
|
-
BeFalse.new
|
29
|
-
end
|
30
|
-
|
31
|
-
class BeNil
|
32
|
-
include BaseMatcher
|
33
|
-
|
34
|
-
def matches?(actual)
|
35
|
-
super(actual).nil?
|
36
|
-
end
|
37
|
-
|
38
|
-
def failure_message_for_should
|
39
|
-
"expected: nil\n got: #{actual.inspect}"
|
40
|
-
end
|
41
|
-
|
42
|
-
def failure_message_for_should_not
|
43
|
-
"expected: not nil\n got: nil"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# Passes if actual is nil
|
48
|
-
def be_nil
|
49
|
-
BeNil.new
|
50
|
-
end
|
51
|
-
|
52
|
-
class Be
|
53
|
-
include RSpec::Matchers::Pretty
|
54
|
-
|
55
|
-
def initialize(*args, &block)
|
56
|
-
@args = args
|
57
|
-
end
|
58
|
-
|
59
|
-
def matches?(actual)
|
60
|
-
@actual = actual
|
61
|
-
!!@actual
|
62
|
-
end
|
63
|
-
|
64
|
-
def failure_message_for_should
|
65
|
-
"expected #{@actual.inspect} to evaluate to true"
|
66
|
-
end
|
67
|
-
|
68
|
-
def failure_message_for_should_not
|
69
|
-
"expected #{@actual.inspect} to evaluate to false"
|
70
|
-
end
|
71
|
-
|
72
|
-
def description
|
73
|
-
"be"
|
74
|
-
end
|
75
|
-
|
76
|
-
[:==, :<, :<=, :>=, :>, :===].each do |operator|
|
77
|
-
define_method operator do |operand|
|
78
|
-
BeComparedTo.new(operand, operator)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
private
|
83
|
-
|
84
|
-
def args_to_s
|
85
|
-
@args.empty? ? "" : parenthesize(inspected_args.join(', '))
|
86
|
-
end
|
87
|
-
|
88
|
-
def parenthesize(string)
|
89
|
-
"(#{string})"
|
90
|
-
end
|
91
|
-
|
92
|
-
def inspected_args
|
93
|
-
@args.collect{|a| a.inspect}
|
94
|
-
end
|
95
|
-
|
96
|
-
def expected_to_sentence
|
97
|
-
split_words(@expected)
|
98
|
-
end
|
99
|
-
|
100
|
-
def args_to_sentence
|
101
|
-
to_sentence(@args)
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
|
-
class BeComparedTo < Be
|
107
|
-
|
108
|
-
def initialize(operand, operator)
|
109
|
-
@expected, @operator = operand, operator
|
110
|
-
@args = []
|
111
|
-
end
|
112
|
-
|
113
|
-
def matches?(actual)
|
114
|
-
@actual = actual
|
115
|
-
@actual.__send__(@operator, @expected)
|
116
|
-
end
|
117
|
-
|
118
|
-
def failure_message_for_should
|
119
|
-
"expected: #{@operator} #{@expected.inspect}\n got: #{@operator.to_s.gsub(/./, ' ')} #{@actual.inspect}"
|
120
|
-
end
|
121
|
-
|
122
|
-
def failure_message_for_should_not
|
123
|
-
message = <<-MESSAGE
|
124
|
-
'should_not be #{@operator} #{@expected}' not only FAILED,
|
125
|
-
it is a bit confusing.
|
126
|
-
MESSAGE
|
127
|
-
|
128
|
-
raise message << ([:===,:==].include?(@operator) ?
|
129
|
-
"It might be more clearly expressed without the \"be\"?" :
|
130
|
-
"It might be more clearly expressed in the positive?")
|
131
|
-
end
|
132
|
-
|
133
|
-
def description
|
134
|
-
"be #{@operator} #{expected_to_sentence}#{args_to_sentence}"
|
135
|
-
end
|
136
|
-
|
137
|
-
end
|
138
|
-
|
139
|
-
class BePredicate < Be
|
140
|
-
|
141
|
-
def initialize(*args, &block)
|
142
|
-
@expected = parse_expected(args.shift)
|
143
|
-
@args = args
|
144
|
-
@block = block
|
145
|
-
end
|
146
|
-
|
147
|
-
def matches?(actual)
|
148
|
-
@actual = actual
|
149
|
-
begin
|
150
|
-
return @result = actual.__send__(predicate, *@args, &@block)
|
151
|
-
rescue NameError => predicate_missing_error
|
152
|
-
"this needs to be here or rcov will not count this branch even though it's executed in a code example"
|
153
|
-
end
|
154
|
-
|
155
|
-
begin
|
156
|
-
return @result = actual.__send__(present_tense_predicate, *@args, &@block)
|
157
|
-
rescue NameError
|
158
|
-
raise predicate_missing_error
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
def failure_message_for_should
|
163
|
-
"expected #{predicate}#{args_to_s} to return true, got #{@result.inspect}"
|
164
|
-
end
|
165
|
-
|
166
|
-
def failure_message_for_should_not
|
167
|
-
"expected #{predicate}#{args_to_s} to return false, got #{@result.inspect}"
|
168
|
-
end
|
169
|
-
|
170
|
-
def description
|
171
|
-
"#{prefix_to_sentence}#{expected_to_sentence}#{args_to_sentence}"
|
172
|
-
end
|
173
|
-
|
174
|
-
private
|
175
|
-
|
176
|
-
def predicate
|
177
|
-
"#{@expected}?".to_sym
|
178
|
-
end
|
179
|
-
|
180
|
-
def present_tense_predicate
|
181
|
-
"#{@expected}s?".to_sym
|
182
|
-
end
|
183
|
-
|
184
|
-
def parse_expected(expected)
|
185
|
-
@prefix, expected = prefix_and_expected(expected)
|
186
|
-
expected
|
187
|
-
end
|
188
|
-
|
189
|
-
def prefix_and_expected(symbol)
|
190
|
-
symbol.to_s =~ /^(be_(an?_)?)(.*)/
|
191
|
-
return $1, $3
|
192
|
-
end
|
193
|
-
|
194
|
-
def prefix_to_sentence
|
195
|
-
split_words(@prefix)
|
196
|
-
end
|
197
|
-
|
198
|
-
end
|
199
|
-
|
200
|
-
# @example
|
201
|
-
# actual.should be_true
|
202
|
-
# actual.should be_false
|
203
|
-
# actual.should be_nil
|
204
|
-
# actual.should be_[arbitrary_predicate](*args)
|
205
|
-
# actual.should_not be_nil
|
206
|
-
# actual.should_not be_[arbitrary_predicate](*args)
|
207
|
-
#
|
208
|
-
# Given true, false, or nil, will pass if actual value is true, false or
|
209
|
-
# nil (respectively). Given no args means the caller should satisfy an if
|
210
|
-
# condition (to be or not to be).
|
211
|
-
#
|
212
|
-
# Predicates are any Ruby method that ends in a "?" and returns true or
|
213
|
-
# false. Given be_ followed by arbitrary_predicate (without the "?"),
|
214
|
-
# RSpec will match convert that into a query against the target object.
|
215
|
-
#
|
216
|
-
# The arbitrary_predicate feature will handle any predicate prefixed with
|
217
|
-
# "be_an_" (e.g. be_an_instance_of), "be_a_" (e.g. be_a_kind_of) or "be_"
|
218
|
-
# (e.g. be_empty), letting you choose the prefix that best suits the
|
219
|
-
# predicate.
|
220
|
-
def be(*args)
|
221
|
-
args.empty? ?
|
222
|
-
Matchers::Be.new : equal(*args)
|
223
|
-
end
|
224
|
-
|
225
|
-
# passes if target.kind_of?(klass)
|
226
|
-
def be_a(klass)
|
227
|
-
be_a_kind_of(klass)
|
228
|
-
end
|
229
|
-
|
230
|
-
alias_method :be_an, :be_a
|
231
|
-
end
|
232
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module RSpec
|
2
|
-
module Matchers
|
3
|
-
class BeAnInstanceOf
|
4
|
-
include BaseMatcher
|
5
|
-
|
6
|
-
def matches?(actual)
|
7
|
-
super(actual).instance_of?(expected)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
# Passes if actual.instance_of?(expected)
|
12
|
-
#
|
13
|
-
# @example
|
14
|
-
#
|
15
|
-
# 5.should be_instance_of(Fixnum)
|
16
|
-
# 5.should_not be_instance_of(Numeric)
|
17
|
-
# 5.should_not be_instance_of(Float)
|
18
|
-
def be_an_instance_of(expected)
|
19
|
-
BeAnInstanceOf.new(expected)
|
20
|
-
end
|
21
|
-
|
22
|
-
alias_method :be_instance_of, :be_an_instance_of
|
23
|
-
end
|
24
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module RSpec
|
2
|
-
module Matchers
|
3
|
-
class BeAKindOf
|
4
|
-
include BaseMatcher
|
5
|
-
|
6
|
-
def matches?(actual)
|
7
|
-
super(actual).kind_of?(expected)
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
# Passes if actual.kind_of?(expected)
|
12
|
-
#
|
13
|
-
# @example
|
14
|
-
#
|
15
|
-
# 5.should be_kind_of(Fixnum)
|
16
|
-
# 5.should be_kind_of(Numeric)
|
17
|
-
# 5.should_not be_kind_of(Float)
|
18
|
-
def be_a_kind_of(expected)
|
19
|
-
BeAKindOf.new(expected)
|
20
|
-
end
|
21
|
-
|
22
|
-
alias_method :be_kind_of, :be_a_kind_of
|
23
|
-
end
|
24
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
module RSpec
|
2
|
-
module Matchers
|
3
|
-
class BeWithin
|
4
|
-
include BaseMatcher
|
5
|
-
|
6
|
-
attr_reader :delta
|
7
|
-
|
8
|
-
def initialize(delta)
|
9
|
-
@delta = delta
|
10
|
-
end
|
11
|
-
|
12
|
-
def matches?(actual)
|
13
|
-
unless defined?(@expected)
|
14
|
-
raise ArgumentError.new("You must set an expected value using #of: be_within(#{delta}).of(expected_value)")
|
15
|
-
end
|
16
|
-
(super(actual) - expected).abs < delta
|
17
|
-
end
|
18
|
-
|
19
|
-
def of(expected)
|
20
|
-
@expected = expected
|
21
|
-
self
|
22
|
-
end
|
23
|
-
|
24
|
-
def failure_message_for_should
|
25
|
-
"expected #{actual} to #{description}"
|
26
|
-
end
|
27
|
-
|
28
|
-
def failure_message_for_should_not
|
29
|
-
"expected #{actual} not to #{description}"
|
30
|
-
end
|
31
|
-
|
32
|
-
def description
|
33
|
-
"be within #{delta} of #{expected}"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# Passes if actual == expected +/- delta
|
38
|
-
#
|
39
|
-
# @example
|
40
|
-
#
|
41
|
-
# result.should be_within(0.5).of(3.0)
|
42
|
-
# result.should_not be_within(0.5).of(3.0)
|
43
|
-
def be_within(delta)
|
44
|
-
BeWithin.new(delta)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,197 +0,0 @@
|
|
1
|
-
module RSpec
|
2
|
-
module Matchers
|
3
|
-
class Change
|
4
|
-
def initialize(receiver=nil, message=nil, &block)
|
5
|
-
@message = message
|
6
|
-
@value_proc = block || lambda {receiver.__send__(message)}
|
7
|
-
@expected_after = @expected_before = @minimum = @maximum = @expected_delta = nil
|
8
|
-
@eval_before = @eval_after = false
|
9
|
-
end
|
10
|
-
|
11
|
-
def matches?(event_proc)
|
12
|
-
raise_block_syntax_error if block_given?
|
13
|
-
|
14
|
-
@actual_before = evaluate_value_proc
|
15
|
-
event_proc.call
|
16
|
-
@actual_after = evaluate_value_proc
|
17
|
-
|
18
|
-
(!change_expected? || changed?) && matches_before? && matches_after? && matches_expected_delta? && matches_min? && matches_max?
|
19
|
-
end
|
20
|
-
|
21
|
-
def raise_block_syntax_error
|
22
|
-
raise MatcherError.new(<<-MESSAGE
|
23
|
-
block passed to should or should_not change must use {} instead of do/end
|
24
|
-
MESSAGE
|
25
|
-
)
|
26
|
-
end
|
27
|
-
|
28
|
-
def evaluate_value_proc
|
29
|
-
case val = @value_proc.call
|
30
|
-
when Enumerable
|
31
|
-
val.dup
|
32
|
-
else
|
33
|
-
val
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def failure_message_for_should
|
38
|
-
if @eval_before && !expected_matches_actual?(@expected_before, @actual_before)
|
39
|
-
"#{message} should have initially been #{@expected_before.inspect}, but was #{@actual_before.inspect}"
|
40
|
-
elsif @eval_after && !expected_matches_actual?(@expected_after, @actual_after)
|
41
|
-
"#{message} should have been changed to #{@expected_after.inspect}, but is now #{@actual_after.inspect}"
|
42
|
-
elsif @expected_delta
|
43
|
-
"#{message} should have been changed by #{@expected_delta.inspect}, but was changed by #{actual_delta.inspect}"
|
44
|
-
elsif @minimum
|
45
|
-
"#{message} should have been changed by at least #{@minimum.inspect}, but was changed by #{actual_delta.inspect}"
|
46
|
-
elsif @maximum
|
47
|
-
"#{message} should have been changed by at most #{@maximum.inspect}, but was changed by #{actual_delta.inspect}"
|
48
|
-
else
|
49
|
-
"#{message} should have changed, but is still #{@actual_before.inspect}"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def actual_delta
|
54
|
-
@actual_after - @actual_before
|
55
|
-
end
|
56
|
-
|
57
|
-
def failure_message_for_should_not
|
58
|
-
"#{message} should not have changed, but did change from #{@actual_before.inspect} to #{@actual_after.inspect}"
|
59
|
-
end
|
60
|
-
|
61
|
-
def by(expected_delta)
|
62
|
-
@expected_delta = expected_delta
|
63
|
-
self
|
64
|
-
end
|
65
|
-
|
66
|
-
def by_at_least(minimum)
|
67
|
-
@minimum = minimum
|
68
|
-
self
|
69
|
-
end
|
70
|
-
|
71
|
-
def by_at_most(maximum)
|
72
|
-
@maximum = maximum
|
73
|
-
self
|
74
|
-
end
|
75
|
-
|
76
|
-
def to(to)
|
77
|
-
@eval_after = true
|
78
|
-
@expected_after = to
|
79
|
-
self
|
80
|
-
end
|
81
|
-
|
82
|
-
def from (before)
|
83
|
-
@eval_before = true
|
84
|
-
@expected_before = before
|
85
|
-
self
|
86
|
-
end
|
87
|
-
|
88
|
-
def description
|
89
|
-
"change ##{message}"
|
90
|
-
end
|
91
|
-
|
92
|
-
private
|
93
|
-
|
94
|
-
def message
|
95
|
-
@message || "result"
|
96
|
-
end
|
97
|
-
|
98
|
-
def change_expected?
|
99
|
-
@expected_delta != 0
|
100
|
-
end
|
101
|
-
|
102
|
-
def changed?
|
103
|
-
@actual_before != @actual_after
|
104
|
-
end
|
105
|
-
|
106
|
-
def matches_before?
|
107
|
-
@eval_before ? expected_matches_actual?(@expected_before, @actual_before) : true
|
108
|
-
end
|
109
|
-
|
110
|
-
def matches_after?
|
111
|
-
@eval_after ? expected_matches_actual?(@expected_after, @actual_after) : true
|
112
|
-
end
|
113
|
-
|
114
|
-
def matches_expected_delta?
|
115
|
-
@expected_delta ? (@actual_before + @expected_delta == @actual_after) : true
|
116
|
-
end
|
117
|
-
|
118
|
-
def matches_min?
|
119
|
-
@minimum ? (@actual_after - @actual_before >= @minimum) : true
|
120
|
-
end
|
121
|
-
|
122
|
-
def matches_max?
|
123
|
-
@maximum ? (@actual_after - @actual_before <= @maximum) : true
|
124
|
-
end
|
125
|
-
|
126
|
-
def expected_matches_actual?(expected, actual)
|
127
|
-
expected === actual
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
# Applied to a proc, specifies that its execution will cause some value to
|
132
|
-
# change.
|
133
|
-
#
|
134
|
-
# @param [Object] receiver
|
135
|
-
# @param [Symbol] message the message to send the receiver
|
136
|
-
#
|
137
|
-
# You can either pass <tt>receiver</tt> and <tt>message</tt>, or a block,
|
138
|
-
# but not both.
|
139
|
-
#
|
140
|
-
# When passing a block, it must use the <tt>{ ... }</tt> format, not
|
141
|
-
# do/end, as <tt>{ ... }</tt> binds to the +change+ method, whereas do/end
|
142
|
-
# would errantly bind to the +should+ or +should_not+ method.
|
143
|
-
#
|
144
|
-
# @example
|
145
|
-
#
|
146
|
-
# lambda {
|
147
|
-
# team.add_player(player)
|
148
|
-
# }.should change(roster, :count)
|
149
|
-
#
|
150
|
-
# lambda {
|
151
|
-
# team.add_player(player)
|
152
|
-
# }.should change(roster, :count).by(1)
|
153
|
-
#
|
154
|
-
# lambda {
|
155
|
-
# team.add_player(player)
|
156
|
-
# }.should change(roster, :count).by_at_least(1)
|
157
|
-
#
|
158
|
-
# lambda {
|
159
|
-
# team.add_player(player)
|
160
|
-
# }.should change(roster, :count).by_at_most(1)
|
161
|
-
#
|
162
|
-
# string = "string"
|
163
|
-
# lambda {
|
164
|
-
# string.reverse!
|
165
|
-
# }.should change { string }.from("string").to("gnirts")
|
166
|
-
#
|
167
|
-
# lambda {
|
168
|
-
# person.happy_birthday
|
169
|
-
# }.should change(person, :birthday).from(32).to(33)
|
170
|
-
#
|
171
|
-
# lambda {
|
172
|
-
# employee.develop_great_new_social_networking_app
|
173
|
-
# }.should change(employee, :title).from("Mail Clerk").to("CEO")
|
174
|
-
#
|
175
|
-
# lambda {
|
176
|
-
# doctor.leave_office
|
177
|
-
# }.should change(doctor, :sign).from(/is in/).to(/is out/)
|
178
|
-
#
|
179
|
-
# user = User.new(:type => "admin")
|
180
|
-
# lambda {
|
181
|
-
# user.symbolize_type
|
182
|
-
# }.should change(user, :type).from(String).to(Symbol)
|
183
|
-
#
|
184
|
-
# == Notes
|
185
|
-
#
|
186
|
-
# Evaluates <tt>receiver.message</tt> or <tt>block</tt> before and after it
|
187
|
-
# evaluates the proc object (generated by the lambdas in the examples
|
188
|
-
# above).
|
189
|
-
#
|
190
|
-
# <tt>should_not change</tt> only supports the form with no subsequent
|
191
|
-
# calls to <tt>by</tt>, <tt>by_at_least</tt>, <tt>by_at_most</tt>,
|
192
|
-
# <tt>to</tt> or <tt>from</tt>.
|
193
|
-
def change(receiver=nil, message=nil, &block)
|
194
|
-
Matchers::Change.new(receiver, message, &block)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|