rspec-expectations 2.12.1 → 2.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/Changelog.md +31 -0
  2. data/README.md +1 -1
  3. data/features/built_in_matchers/be.feature +6 -4
  4. data/features/built_in_matchers/be_within.feature +3 -1
  5. data/features/built_in_matchers/cover.feature +2 -0
  6. data/features/built_in_matchers/end_with.feature +2 -0
  7. data/features/built_in_matchers/equality.feature +9 -15
  8. data/features/built_in_matchers/exist.feature +2 -0
  9. data/features/built_in_matchers/expect_error.feature +14 -8
  10. data/features/built_in_matchers/have.feature +11 -5
  11. data/features/built_in_matchers/include.feature +53 -0
  12. data/features/built_in_matchers/match.feature +2 -0
  13. data/features/built_in_matchers/operators.feature +17 -11
  14. data/features/built_in_matchers/predicates.feature +21 -13
  15. data/features/built_in_matchers/respond_to.feature +7 -1
  16. data/features/built_in_matchers/satisfy.feature +2 -0
  17. data/features/built_in_matchers/start_with.feature +2 -0
  18. data/features/built_in_matchers/throw_symbol.feature +6 -0
  19. data/features/built_in_matchers/types.feature +8 -6
  20. data/lib/rspec/expectations/deprecation.rb +1 -1
  21. data/lib/rspec/expectations/differ.rb +8 -8
  22. data/lib/rspec/expectations/fail_with.rb +17 -3
  23. data/lib/rspec/expectations/syntax.rb +46 -0
  24. data/lib/rspec/expectations/version.rb +1 -1
  25. data/lib/rspec/matchers/built_in/be.rb +7 -3
  26. data/lib/rspec/matchers/built_in/be_within.rb +13 -4
  27. data/lib/rspec/matchers/built_in/change.rb +2 -2
  28. data/lib/rspec/matchers/built_in/equal.rb +5 -1
  29. data/lib/rspec/matchers/built_in/exist.rb +1 -1
  30. data/lib/rspec/matchers/built_in/have.rb +8 -8
  31. data/lib/rspec/matchers/built_in/include.rb +19 -3
  32. data/lib/rspec/matchers/built_in/respond_to.rb +1 -1
  33. data/lib/rspec/matchers/extensions/instance_eval_with_args.rb +1 -1
  34. data/lib/rspec/matchers/matcher.rb +4 -3
  35. data/lib/rspec/matchers/operator_matcher.rb +1 -1
  36. data/lib/rspec/matchers/pretty.rb +5 -1
  37. data/spec/rspec/expectations/differ_spec.rb +8 -15
  38. data/spec/rspec/expectations/expectation_target_spec.rb +18 -8
  39. data/spec/rspec/expectations/extensions/kernel_spec.rb +15 -15
  40. data/spec/rspec/expectations/fail_with_spec.rb +41 -16
  41. data/spec/rspec/expectations/handler_spec.rb +13 -13
  42. data/spec/rspec/expectations/syntax_spec.rb +70 -8
  43. data/spec/rspec/matchers/base_matcher_spec.rb +14 -12
  44. data/spec/rspec/matchers/be_close_spec.rb +1 -1
  45. data/spec/rspec/matchers/be_instance_of_spec.rb +14 -8
  46. data/spec/rspec/matchers/be_kind_of_spec.rb +12 -8
  47. data/spec/rspec/matchers/be_spec.rb +212 -148
  48. data/spec/rspec/matchers/be_within_spec.rb +91 -42
  49. data/spec/rspec/matchers/change_spec.rb +52 -38
  50. data/spec/rspec/matchers/configuration_spec.rb +19 -15
  51. data/spec/rspec/matchers/cover_spec.rb +19 -19
  52. data/spec/rspec/matchers/description_generation_spec.rb +86 -86
  53. data/spec/rspec/matchers/dsl_spec.rb +7 -7
  54. data/spec/rspec/matchers/eq_spec.rb +17 -11
  55. data/spec/rspec/matchers/eql_spec.rb +10 -10
  56. data/spec/rspec/matchers/equal_spec.rb +27 -9
  57. data/spec/rspec/matchers/exist_spec.rb +35 -21
  58. data/spec/rspec/matchers/has_spec.rb +33 -29
  59. data/spec/rspec/matchers/have_spec.rb +165 -151
  60. data/spec/rspec/matchers/include_matcher_integration_spec.rb +30 -0
  61. data/spec/rspec/matchers/include_spec.rb +282 -124
  62. data/spec/rspec/matchers/match_array_spec.rb +90 -49
  63. data/spec/rspec/matchers/match_spec.rb +21 -21
  64. data/spec/rspec/matchers/matcher_spec.rb +85 -48
  65. data/spec/rspec/matchers/matchers_spec.rb +12 -6
  66. data/spec/rspec/matchers/method_missing_spec.rb +5 -1
  67. data/spec/rspec/matchers/operator_matcher_spec.rb +216 -237
  68. data/spec/rspec/matchers/raise_error_spec.rb +132 -132
  69. data/spec/rspec/matchers/respond_to_spec.rb +109 -112
  70. data/spec/rspec/matchers/satisfy_spec.rb +16 -16
  71. data/spec/rspec/matchers/start_with_end_with_spec.rb +36 -32
  72. data/spec/rspec/matchers/throw_symbol_spec.rb +24 -24
  73. data/spec/rspec/matchers/yield_spec.rb +7 -7
  74. data/spec/spec_helper.rb +46 -19
  75. data/spec/support/in_sub_process.rb +27 -20
  76. metadata +81 -83
@@ -14,11 +14,50 @@ class UnsortableObject
14
14
  end
15
15
  end
16
16
 
17
- describe "using match_array with expect" do
18
- it_behaves_like "an RSpec matcher", :valid_value => [1, 2], :invalid_value => [1] do
19
- let(:matcher) { match_array([2, 1]) }
17
+ describe "should =~ array", :uses_should do
18
+ it "passes a valid positive expectation" do
19
+ [1, 2].should =~ [2, 1]
20
+ end
21
+
22
+ it "fails an invalid positive expectation" do
23
+ expect {
24
+ [1, 2, 3].should =~ [2, 1]
25
+ }.to fail_with(/expected collection contained/)
20
26
  end
21
27
 
28
+ context "when the array defines a `=~` method" do
29
+ it 'delegates to that method rather than using the match_array matcher' do
30
+ array = []
31
+ def array.=~(other)
32
+ other == :foo
33
+ end
34
+
35
+ array.should =~ :foo
36
+ expect {
37
+ array.should =~ :bar
38
+ }.to fail_with(/expected: :bar/)
39
+ end
40
+ end
41
+
42
+ context 'when the array defines a `send` method' do
43
+ it 'still works' do
44
+ array = [1, 2]
45
+ def array.send; :sent; end
46
+
47
+ array.should =~ array
48
+ end
49
+ end
50
+ end
51
+
52
+ describe "should_not =~ [:with, :multiple, :args]", :uses_should do
53
+ it "is not supported" do
54
+ expect {
55
+ [1,2,3].should_not =~ [1,2,3]
56
+ }.to fail_with(/Matcher does not support should_not/)
57
+ end
58
+ end
59
+
60
+ describe "using match_array with expect" do
22
61
  it "passes a valid positive expectation" do
23
62
  expect([1, 2]).to match_array [2, 1]
24
63
  end
@@ -30,19 +69,23 @@ describe "using match_array with expect" do
30
69
  end
31
70
  end
32
71
 
33
- describe "array.should =~ other_array" do
72
+ describe "expect(array).to match_array other_array" do
73
+ it_behaves_like "an RSpec matcher", :valid_value => [1, 2], :invalid_value => [1] do
74
+ let(:matcher) { match_array([2, 1]) }
75
+ end
76
+
34
77
  it "passes if target contains all items" do
35
- [1,2,3].should =~ [1,2,3]
78
+ expect([1,2,3]).to match_array [1,2,3]
36
79
  end
37
80
 
38
81
  it "passes if target contains all items out of order" do
39
- [1,3,2].should =~ [1,2,3]
82
+ expect([1,3,2]).to match_array [1,2,3]
40
83
  end
41
84
 
42
85
  it "fails if target includes extra items" do
43
- lambda {
44
- [1,2,3,4].should =~ [1,2,3]
45
- }.should fail_with(<<-MESSAGE)
86
+ expect {
87
+ expect([1,2,3,4]).to match_array [1,2,3]
88
+ }.to fail_with(<<-MESSAGE)
46
89
  expected collection contained: [1, 2, 3]
47
90
  actual collection contained: [1, 2, 3, 4]
48
91
  the extra elements were: [4]
@@ -50,9 +93,9 @@ MESSAGE
50
93
  end
51
94
 
52
95
  it "fails if target is missing items" do
53
- lambda {
54
- [1,2].should =~ [1,2,3]
55
- }.should fail_with(<<-MESSAGE)
96
+ expect {
97
+ expect([1,2]).to match_array [1,2,3]
98
+ }.to fail_with(<<-MESSAGE)
56
99
  expected collection contained: [1, 2, 3]
57
100
  actual collection contained: [1, 2]
58
101
  the missing elements were: [3]
@@ -60,10 +103,9 @@ MESSAGE
60
103
  end
61
104
 
62
105
  it "fails if target is missing items and has extra items" do
63
-
64
- lambda {
65
- [1,2,4].should =~ [1,2,3]
66
- }.should fail_with(<<-MESSAGE)
106
+ expect {
107
+ expect([1,2,4]).to match_array [1,2,3]
108
+ }.to fail_with(<<-MESSAGE)
67
109
  expected collection contained: [1, 2, 3]
68
110
  actual collection contained: [1, 2, 4]
69
111
  the missing elements were: [3]
@@ -72,9 +114,9 @@ MESSAGE
72
114
  end
73
115
 
74
116
  it "sorts items in the error message if they all respond to <=>" do
75
- lambda {
76
- [6,2,1,5].should =~ [4,1,2,3]
77
- }.should fail_with(<<-MESSAGE)
117
+ expect {
118
+ expect([6,2,1,5]).to match_array [4,1,2,3]
119
+ }.to fail_with(<<-MESSAGE)
78
120
  expected collection contained: [1, 2, 3, 4]
79
121
  actual collection contained: [1, 2, 5, 6]
80
122
  the missing elements were: [3, 4]
@@ -83,9 +125,9 @@ MESSAGE
83
125
  end
84
126
 
85
127
  it "does not sort items in the error message if they don't all respond to <=>" do
86
- lambda {
87
- [UnsortableObject.new(2), UnsortableObject.new(1)].should =~ [UnsortableObject.new(4), UnsortableObject.new(3)]
88
- }.should fail_with(<<-MESSAGE)
128
+ expect {
129
+ expect([UnsortableObject.new(2), UnsortableObject.new(1)]).to match_array [UnsortableObject.new(4), UnsortableObject.new(3)]
130
+ }.to fail_with(<<-MESSAGE)
89
131
  expected collection contained: [4, 3]
90
132
  actual collection contained: [2, 1]
91
133
  the missing elements were: [4, 3]
@@ -94,9 +136,9 @@ MESSAGE
94
136
  end
95
137
 
96
138
  it "accurately reports extra elements when there are duplicates" do
97
- lambda {
98
- [1,1,1,5].should =~ [1,5]
99
- }.should fail_with(<<-MESSAGE)
139
+ expect {
140
+ expect([1,1,1,5]).to match_array [1,5]
141
+ }.to fail_with(<<-MESSAGE)
100
142
  expected collection contained: [1, 5]
101
143
  actual collection contained: [1, 1, 1, 5]
102
144
  the extra elements were: [1, 1]
@@ -104,50 +146,49 @@ MESSAGE
104
146
  end
105
147
 
106
148
  it "accurately reports missing elements when there are duplicates" do
107
- lambda {
108
- [1,5].should =~ [1,1,5]
109
- }.should fail_with(<<-MESSAGE)
149
+ expect {
150
+ expect([1,5]).to match_array [1,1,5]
151
+ }.to fail_with(<<-MESSAGE)
110
152
  expected collection contained: [1, 1, 5]
111
153
  actual collection contained: [1, 5]
112
154
  the missing elements were: [1]
113
155
  MESSAGE
114
156
  end
115
-
116
- context "when the array defines a `=~` method" do
117
- it 'delegates to that method rather than using the match_array matcher' do
118
- array = []
119
- def array.=~(other)
120
- other == :foo
121
- end
122
-
123
- array.should =~ :foo
124
- expect { array.should =~ :bar }.to fail_with(/expected: :bar/)
125
- end
126
- end
127
157
  end
128
158
 
129
- describe "should_not =~ [:with, :multiple, :args]" do
159
+ describe "expect(...).to_not match_array [:with, :multiple, :args]" do
130
160
  it "is not supported" do
131
- lambda {
132
- [1,2,3].should_not =~ [1,2,3]
133
- }.should fail_with(/Matcher does not support should_not/)
161
+ expect {
162
+ expect([1,2,3]).not_to match_array [1,2,3]
163
+ }.to fail_with(/Matcher does not support should_not/)
134
164
  end
135
165
  end
136
166
 
137
167
  describe "matching against things that aren't arrays" do
138
168
  it "fails with nil and the expected error message is given" do
139
- expect { nil.should match_array([1,2,3]) }.to fail_with(/expected an array/)
169
+ expect {
170
+ expect(nil).to match_array([1,2,3])
171
+ }.to fail_with(/expected an array/)
140
172
  end
141
173
 
142
174
  it "fails with a float and the expected error message is given" do
143
- expect { (3.7).should match_array([1,2,3]) }.to fail_with(/expected an array/)
175
+ expect {
176
+ expect((3.7)).to match_array([1,2,3])
177
+ }.to fail_with(/expected an array/)
144
178
  end
145
179
 
146
180
  it "fails with a string and the expected error message is given" do
147
- expect { "I like turtles".should match_array([1,2,3]) }.to fail_with(/expected an array/)
181
+ expect {
182
+ expect("I like turtles").to match_array([1,2,3])
183
+ }.to fail_with(/expected an array/)
148
184
  end
149
185
 
150
- it 'fails with a clear message when given a hash using the `should =~` syntax' do
151
- expect { {}.should =~ {} }.to fail_with(/expected an array/)
186
+ context "when using the `should =~` syntax", :uses_should do
187
+ it 'fails with a clear message when given a hash' do
188
+ expect {
189
+ {}.should =~ {}
190
+ }.to fail_with(/expected an array/)
191
+ end
152
192
  end
153
193
  end
194
+
@@ -1,61 +1,61 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "should match(expected)" do
3
+ describe "expect(...).to match(expected)" do
4
4
  it_behaves_like "an RSpec matcher", :valid_value => 'ab', :invalid_value => 'bc' do
5
5
  let(:matcher) { match(/a/) }
6
6
  end
7
7
 
8
8
  it "passes when target (String) matches expected (Regexp)" do
9
- "string".should match(/tri/)
9
+ expect("string").to match(/tri/)
10
10
  end
11
11
 
12
12
  it "passes when target (String) matches expected (String)" do
13
- "string".should match("tri")
13
+ expect("string").to match("tri")
14
14
  end
15
15
 
16
16
  it "fails when target (String) does not match expected (Regexp)" do
17
- lambda {
18
- "string".should match(/rings/)
19
- }.should fail
17
+ expect {
18
+ expect("string").to match(/rings/)
19
+ }.to fail
20
20
  end
21
21
 
22
22
  it "fails when target (String) does not match expected (String)" do
23
- lambda {
24
- "string".should match("rings")
25
- }.should fail
23
+ expect {
24
+ expect("string").to match("rings")
25
+ }.to fail
26
26
  end
27
-
27
+
28
28
  it "provides message, expected and actual on failure" do
29
29
  matcher = match(/rings/)
30
30
  matcher.matches?("string")
31
- matcher.failure_message_for_should.should == "expected \"string\" to match /rings/"
31
+ expect(matcher.failure_message_for_should).to eq "expected \"string\" to match /rings/"
32
32
  end
33
33
  end
34
34
 
35
- describe "should_not match(expected)" do
35
+ describe "expect(...).to_not match(expected)" do
36
36
  it "passes when target (String) matches does not match (Regexp)" do
37
- "string".should_not match(/rings/)
37
+ expect("string").not_to match(/rings/)
38
38
  end
39
39
 
40
40
  it "passes when target (String) matches does not match (String)" do
41
- "string".should_not match("rings")
41
+ expect("string").not_to match("rings")
42
42
  end
43
43
 
44
44
  it "fails when target (String) matches expected (Regexp)" do
45
- lambda {
46
- "string".should_not match(/tri/)
47
- }.should fail
45
+ expect {
46
+ expect("string").not_to match(/tri/)
47
+ }.to fail
48
48
  end
49
49
 
50
50
  it "fails when target (String) matches expected (String)" do
51
- lambda {
52
- "string".should_not match("tri")
53
- }.should fail
51
+ expect {
52
+ expect("string").not_to match("tri")
53
+ }.to fail
54
54
  end
55
55
 
56
56
  it "provides message, expected and actual on failure" do
57
57
  matcher = match(/tri/)
58
58
  matcher.matches?("string")
59
- matcher.failure_message_for_should_not.should == "expected \"string\" not to match /tri/"
59
+ expect(matcher.failure_message_for_should_not).to eq "expected \"string\" not to match /tri/"
60
60
  end
61
61
  end
@@ -33,8 +33,8 @@ module RSpec::Matchers::DSL
33
33
  m1 = example_matcher(1)
34
34
  m2 = example_matcher(2)
35
35
 
36
- m1.matches?(1).should be_true
37
- m2.matches?(2).should be_true
36
+ expect(m1.matches?(1)).to be_true
37
+ expect(m2.matches?(2)).to be_true
38
38
  end
39
39
 
40
40
  context "with an included module" do
@@ -50,19 +50,19 @@ module RSpec::Matchers::DSL
50
50
  end
51
51
 
52
52
  it "runs the module's included hook" do
53
- matcher.should respond_to(:included_method)
53
+ expect(matcher).to respond_to(:included_method)
54
54
  end
55
55
 
56
56
  it "does not run the module's extended hook" do
57
- matcher.should_not respond_to(:extended_method)
57
+ expect(matcher).not_to respond_to(:extended_method)
58
58
  end
59
59
 
60
60
  it 'allows multiple modules to be included at once' do
61
61
  m = RSpec::Matchers::DSL::Matcher.new(:multiple_modules) do
62
62
  include Enumerable, Comparable
63
63
  end.for_expected
64
- m.should be_a(Enumerable)
65
- m.should be_a(Comparable)
64
+ expect(m).to be_a(Enumerable)
65
+ expect(m).to be_a(Comparable)
66
66
  end
67
67
  end
68
68
 
@@ -76,17 +76,17 @@ module RSpec::Matchers::DSL
76
76
  end
77
77
 
78
78
  it "provides a default description" do
79
- @matcher.description.should == "be a multiple of 3"
79
+ expect(@matcher.description).to eq "be a multiple of 3"
80
80
  end
81
81
 
82
82
  it "provides a default failure message for #should" do
83
83
  @matcher.matches?(8)
84
- @matcher.failure_message_for_should.should == "expected 8 to be a multiple of 3"
84
+ expect(@matcher.failure_message_for_should).to eq "expected 8 to be a multiple of 3"
85
85
  end
86
86
 
87
87
  it "provides a default failure message for #should_not" do
88
88
  @matcher.matches?(9)
89
- @matcher.failure_message_for_should_not.should == "expected 9 not to be a multiple of 3"
89
+ expect(@matcher.failure_message_for_should_not).to eq "expected 9 not to be a multiple of 3"
90
90
  end
91
91
  end
92
92
 
@@ -104,18 +104,18 @@ module RSpec::Matchers::DSL
104
104
  end
105
105
 
106
106
  it "invokes the match_for_should block for #matches?" do
107
- matcher.matches?(77).should be_true
108
- matcher.matches?(18).should be_false
107
+ expect(matcher.matches?(77)).to be_true
108
+ expect(matcher.matches?(18)).to be_false
109
109
  end
110
110
 
111
111
  it "invokes the match_for_should_not block for #does_not_match?" do
112
- matcher.does_not_match?(77).should be_false
113
- matcher.does_not_match?(18).should be_true
112
+ expect(matcher.does_not_match?(77)).to be_false
113
+ expect(matcher.does_not_match?(18)).to be_true
114
114
  end
115
115
 
116
116
  it "provides a default failure message for #should_not" do
117
117
  matcher.does_not_match?(77)
118
- matcher.failure_message_for_should_not.should == "expected 77 not to to be composed of 7 and 11"
118
+ expect(matcher.failure_message_for_should_not).to eq "expected 77 not to to be composed of 7 and 11"
119
119
  end
120
120
  end
121
121
 
@@ -124,22 +124,22 @@ module RSpec::Matchers::DSL
124
124
  define_method(:sum) { a + b }
125
125
  end.for_expected(3,4)
126
126
 
127
- matcher.sum.should == 7
127
+ expect(matcher.sum).to eq 7
128
128
  end
129
129
 
130
130
  it "is not diffable by default" do
131
131
  matcher = RSpec::Matchers::DSL::Matcher.new(:name) {}
132
- matcher.should_not be_diffable
132
+ expect(matcher).not_to be_diffable
133
133
  end
134
134
 
135
135
  it "is diffable when told to be" do
136
136
  matcher = RSpec::Matchers::DSL::Matcher.new(:name) { diffable }.for_expected
137
- matcher.should be_diffable
137
+ expect(matcher).to be_diffable
138
138
  end
139
139
 
140
140
  it "provides expected" do
141
141
  matcher = RSpec::Matchers::DSL::Matcher.new(:name) {}.for_expected('expected string')
142
- matcher.expected.should == ['expected string']
142
+ expect(matcher.expected).to eq ['expected string']
143
143
  end
144
144
 
145
145
  it "provides actual" do
@@ -149,26 +149,26 @@ module RSpec::Matchers::DSL
149
149
 
150
150
  matcher.matches?('actual string')
151
151
 
152
- matcher.actual.should == 'actual string'
152
+ expect(matcher.actual).to eq 'actual string'
153
153
  end
154
154
 
155
155
  context "wrapping another expectation (should == ...)" do
156
156
  it "returns true if the wrapped expectation passes" do
157
157
  matcher = RSpec::Matchers::DSL::Matcher.new(:name) do |expected|
158
158
  match do |actual|
159
- actual.should == expected
159
+ expect(actual).to eq expected
160
160
  end
161
161
  end.for_expected('value')
162
- matcher.matches?('value').should be_true
162
+ expect(matcher.matches?('value')).to be_true
163
163
  end
164
164
 
165
165
  it "returns false if the wrapped expectation fails" do
166
166
  matcher = RSpec::Matchers::DSL::Matcher.new(:name) do |expected|
167
167
  match do |actual|
168
- actual.should == expected
168
+ expect(actual).to eq expected
169
169
  end
170
170
  end.for_expected('value')
171
- matcher.matches?('other value').should be_false
171
+ expect(matcher.matches?('other value')).to be_false
172
172
  end
173
173
  end
174
174
 
@@ -191,25 +191,25 @@ module RSpec::Matchers::DSL
191
191
  end
192
192
 
193
193
  it "does not hide result of match block when true" do
194
- @matcher.matches?(true).should be_true
194
+ expect(@matcher.matches?(true)).to be_true
195
195
  end
196
196
 
197
197
  it "does not hide result of match block when false" do
198
- @matcher.matches?(false).should be_false
198
+ expect(@matcher.matches?(false)).to be_false
199
199
  end
200
200
 
201
201
  it "overrides the description" do
202
- @matcher.description.should == "be the boolean true"
202
+ expect(@matcher.description).to eq "be the boolean true"
203
203
  end
204
204
 
205
205
  it "overrides the failure message for #should" do
206
206
  @matcher.matches?(false)
207
- @matcher.failure_message_for_should.should == "expected false to be the boolean true"
207
+ expect(@matcher.failure_message_for_should).to eq "expected false to be the boolean true"
208
208
  end
209
209
 
210
210
  it "overrides the failure message for #should_not" do
211
211
  @matcher.matches?(true)
212
- @matcher.failure_message_for_should_not.should == "expected true not to be the boolean true"
212
+ expect(@matcher.failure_message_for_should_not).to eq "expected true not to be the boolean true"
213
213
  end
214
214
  end
215
215
 
@@ -220,7 +220,7 @@ module RSpec::Matchers::DSL
220
220
  actual == 5
221
221
  end
222
222
  end.for_expected
223
- matcher.matches?(5).should be_true
223
+ expect(matcher.matches?(5)).to be_true
224
224
  end
225
225
 
226
226
  it "exposes arg submitted through #new to matcher block" do
@@ -229,7 +229,7 @@ module RSpec::Matchers::DSL
229
229
  actual > expected
230
230
  end
231
231
  end.for_expected(4)
232
- matcher.matches?(5).should be_true
232
+ expect(matcher.matches?(5)).to be_true
233
233
  end
234
234
  end
235
235
 
@@ -243,11 +243,11 @@ module RSpec::Matchers::DSL
243
243
  end
244
244
 
245
245
  it "matches" do
246
- @matcher.matches?(5).should be_true
246
+ expect(@matcher.matches?(5)).to be_true
247
247
  end
248
248
 
249
249
  it "describes" do
250
- @matcher.description.should == "matcher name"
250
+ expect(@matcher.description).to eq "matcher name"
251
251
  end
252
252
  end
253
253
 
@@ -261,11 +261,11 @@ module RSpec::Matchers::DSL
261
261
  end
262
262
 
263
263
  it "matches" do
264
- @matcher.matches?(5).should be_true
264
+ expect(@matcher.matches?(5)).to be_true
265
265
  end
266
266
 
267
267
  it "describes" do
268
- @matcher.description.should == "matcher name 1"
268
+ expect(@matcher.description).to eq "matcher name 1"
269
269
  end
270
270
  end
271
271
 
@@ -279,11 +279,11 @@ module RSpec::Matchers::DSL
279
279
  end
280
280
 
281
281
  it "matches" do
282
- @matcher.matches?(10).should be_true
282
+ expect(@matcher.matches?(10)).to be_true
283
283
  end
284
284
 
285
285
  it "describes" do
286
- @matcher.description.should == "matcher name 1, 2, 3, and 4"
286
+ expect(@matcher.description).to eq "matcher name 1, 2, 3, and 4"
287
287
  end
288
288
  end
289
289
 
@@ -298,7 +298,7 @@ module RSpec::Matchers::DSL
298
298
  end
299
299
  end.for_expected([1,2,3])
300
300
 
301
- matcher.matches?([2,3,1]).should be_true
301
+ expect(matcher.matches?([2,3,1])).to be_true
302
302
  end
303
303
 
304
304
  it "supports fluent interface" do
@@ -308,7 +308,7 @@ module RSpec::Matchers::DSL
308
308
  end
309
309
  end.for_expected
310
310
 
311
- matcher.second_word.should == matcher
311
+ expect(matcher.second_word).to eq matcher
312
312
  end
313
313
 
314
314
  it "treats method missing normally for undeclared methods" do
@@ -320,11 +320,49 @@ module RSpec::Matchers::DSL
320
320
  matcher = RSpec::Matchers::DSL::Matcher.new(:ignore) do |expected|
321
321
  match do |actual|
322
322
  extend RSpec::Matchers
323
- actual.should eql(5 + expected)
323
+ expect(actual).to eql(5 + expected)
324
324
  end
325
325
  end.for_expected(3)
326
326
 
327
- matcher.matches?(8).should be_true
327
+ expect(matcher.matches?(8)).to be_true
328
+ end
329
+
330
+ context 'when multiple instances of the same matcher are used in the same example' do
331
+ RSpec::Matchers.define(:be_like_a) do |expected|
332
+ match { |actual| actual == expected }
333
+ description { "be like a #{expected}" }
334
+ failure_message_for_should { "expected to be like a #{expected}" }
335
+ failure_message_for_should_not { "expected not to be like a #{expected}" }
336
+ end
337
+
338
+ # Note: these bugs were only exposed when creating both instances
339
+ # first, then checking their descriptions/failure messages.
340
+ #
341
+ # That's why we eager-instantiate them here.
342
+ let!(:moose) { be_like_a("moose") }
343
+ let!(:horse) { be_like_a("horse") }
344
+
345
+ it 'allows them to use the expected value in the description' do
346
+ expect(horse.description).to eq("be like a horse")
347
+ expect(moose.description).to eq("be like a moose")
348
+ end
349
+
350
+ it 'allows them to use the expected value in the positive failure message' do
351
+ expect(moose.failure_message_for_should).to eq("expected to be like a moose")
352
+ expect(horse.failure_message_for_should).to eq("expected to be like a horse")
353
+ end
354
+
355
+ it 'allows them to use the expected value in the negative failure message' do
356
+ expect(moose.failure_message_for_should_not).to eq("expected not to be like a moose")
357
+ expect(horse.failure_message_for_should_not).to eq("expected not to be like a horse")
358
+ end
359
+
360
+ it 'allows them to match separately' do
361
+ expect("moose").to moose
362
+ expect("horse").to horse
363
+ expect("horse").not_to moose
364
+ expect("moose").not_to horse
365
+ end
328
366
  end
329
367
 
330
368
  describe "#match_unless_raises" do
@@ -348,19 +386,18 @@ module RSpec::Matchers::DSL
348
386
 
349
387
  context "with passing assertion" do
350
388
  it "passes" do
351
- matcher.matches?(4).should be_true
389
+ expect(matcher.matches?(4)).to be_true
352
390
  end
353
391
  end
354
392
 
355
393
  context "with failing assertion" do
356
394
  it "fails" do
357
- matcher.matches?(5).should be_false
395
+ expect(matcher.matches?(5)).to be_false
358
396
  end
359
397
 
360
398
  it "provides the raised exception" do
361
399
  matcher.matches?(5)
362
- matcher.rescued_exception.message.
363
- should eq("5 does not equal 4")
400
+ expect(matcher.rescued_exception.message).to eq("5 does not equal 4")
364
401
  end
365
402
  end
366
403
  end
@@ -391,8 +428,8 @@ module RSpec::Matchers::DSL
391
428
  match { |actual| actual == @expected_value }
392
429
  end.for_expected
393
430
 
394
- matcher.expecting('value').matches?('value').should be_true
395
- matcher.expecting('value').matches?('other value').should be_false
431
+ expect(matcher.expecting('value').matches?('value')).to be_true
432
+ expect(matcher.expecting('value').matches?('other value')).to be_false
396
433
  end
397
434
 
398
435
  it "prevents name collisions on chainable methods from different matchers" do
@@ -414,7 +451,7 @@ module RSpec::Matchers::DSL
414
451
  a_method_in_the_example == "method defined in the example"
415
452
  end
416
453
  end
417
- example.should __access_running_example
454
+ expect(example).to __access_running_example
418
455
  end
419
456
 
420
457
  it "raises NoMethodError for methods not in the running_example" do
@@ -425,7 +462,7 @@ module RSpec::Matchers::DSL
425
462
  end
426
463
 
427
464
  expect do
428
- example.should __raise_no_method_error
465
+ expect(example).to __raise_no_method_error
429
466
  end.to raise_error(/RSpec::Matchers::DSL::Matcher/)
430
467
  end
431
468
  end