rspec-expectations 2.12.1 → 2.13.0

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.
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
@@ -11,17 +11,23 @@ module RSpec
11
11
  end
12
12
 
13
13
  context "once required" do
14
+ include TestUnitIntegrationSupport
15
+
14
16
  it "includes itself in Test::Unit::TestCase" do
15
- test_unit_case = Test::Unit::TestCase.allocate
16
- sample_matchers.each do |sample_matcher|
17
- test_unit_case.should respond_to(sample_matcher)
17
+ with_test_unit_loaded do
18
+ test_unit_case = Test::Unit::TestCase.allocate
19
+ sample_matchers.each do |sample_matcher|
20
+ expect(test_unit_case).to respond_to(sample_matcher)
21
+ end
18
22
  end
19
23
  end
20
24
 
21
25
  it "includes itself in MiniTest::Unit::TestCase", :if => defined?(MiniTest) do
22
- minitest_case = MiniTest::Unit::TestCase.allocate
23
- sample_matchers.each do |sample_matcher|
24
- minitest_case.should respond_to(sample_matcher)
26
+ with_test_unit_loaded do
27
+ minitest_case = MiniTest::Unit::TestCase.allocate
28
+ sample_matchers.each do |sample_matcher|
29
+ expect(minitest_case).to respond_to(sample_matcher)
30
+ end
25
31
  end
26
32
  end
27
33
 
@@ -1,8 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  shared_examples_for "a well-behaved method_missing hook" do
4
+ include TestUnitIntegrationSupport
5
+
4
6
  it "raises a NoMethodError (and not SystemStackError) for an undefined method" do
5
- expect { subject.some_undefined_method }.to raise_error(NoMethodError)
7
+ with_test_unit_loaded do
8
+ expect { subject.some_undefined_method }.to raise_error(NoMethodError)
9
+ end
6
10
  end
7
11
  end
8
12
 
@@ -1,244 +1,223 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "should ==" do
4
-
5
- it "delegates message to target" do
6
- subject = "apple"
7
- subject.should_receive(:==).with("apple").and_return(true)
8
- subject.should == "apple"
3
+ describe "operator matchers", :uses_should do
4
+ describe "should ==" do
5
+ it "delegates message to target" do
6
+ subject = "apple"
7
+ subject.should_receive(:==).with("apple").and_return(true)
8
+ subject.should == "apple"
9
+ end
10
+
11
+ it "returns true on success" do
12
+ subject = "apple"
13
+ (subject.should == "apple").should be_true
14
+ end
15
+
16
+ it "fails when target.==(actual) returns false" do
17
+ subject = "apple"
18
+ RSpec::Expectations.should_receive(:fail_with).with(%[expected: "orange"\n got: "apple" (using ==)], "orange", "apple")
19
+ subject.should == "orange"
20
+ end
21
+ end
22
+
23
+ describe "unsupported operators", :if => RUBY_VERSION.to_f == 1.9 do
24
+ it "raises an appropriate error for should != expected" do
25
+ expect {
26
+ "apple".should != "pear"
27
+ }.to raise_error(/does not support `should != expected`. Use `should_not == expected`/)
28
+ end
29
+
30
+ it "raises an appropriate error for should_not != expected" do
31
+ expect {
32
+ "apple".should_not != "pear"
33
+ }.to raise_error(/does not support `should_not != expected`. Use `should == expected`/)
34
+ end
35
+
36
+ it "raises an appropriate error for should !~ expected" do
37
+ expect {
38
+ "apple".should !~ /regex/
39
+ }.to raise_error(/does not support `should !~ expected`. Use `should_not =~ expected`/)
40
+ end
41
+
42
+ it "raises an appropriate error for should_not !~ expected" do
43
+ expect {
44
+ "apple".should_not !~ /regex/
45
+ }.to raise_error(/does not support `should_not !~ expected`. Use `should =~ expected`/)
46
+ end
47
+ end
48
+
49
+ describe "should_not ==" do
50
+ it "delegates message to target" do
51
+ subject = "orange"
52
+ subject.should_receive(:==).with("apple").and_return(false)
53
+ subject.should_not == "apple"
54
+ end
55
+
56
+ it "returns true on success" do
57
+ subject = "apple"
58
+ (subject.should_not == "orange").should be_false
59
+ end
60
+
61
+ it "fails when target.==(actual) returns false" do
62
+ subject = "apple"
63
+ RSpec::Expectations.should_receive(:fail_with).with(%[expected not: == "apple"\n got: "apple"], "apple", "apple")
64
+ subject.should_not == "apple"
65
+ end
66
+ end
67
+
68
+ describe "should ===" do
69
+ it "delegates message to target" do
70
+ subject = "apple"
71
+ subject.should_receive(:===).with("apple").and_return(true)
72
+ subject.should === "apple"
73
+ end
74
+
75
+ it "fails when target.===(actual) returns false" do
76
+ subject = "apple"
77
+ subject.should_receive(:===).with("orange").and_return(false)
78
+ RSpec::Expectations.should_receive(:fail_with).with(%[expected: "orange"\n got: "apple" (using ===)], "orange", "apple")
79
+ subject.should === "orange"
80
+ end
81
+ end
82
+
83
+ describe "should_not ===" do
84
+ it "delegates message to target" do
85
+ subject = "orange"
86
+ subject.should_receive(:===).with("apple").and_return(false)
87
+ subject.should_not === "apple"
88
+ end
89
+
90
+ it "fails when target.===(actual) returns false" do
91
+ subject = "apple"
92
+ subject.should_receive(:===).with("apple").and_return(true)
93
+ RSpec::Expectations.should_receive(:fail_with).with(%[expected not: === "apple"\n got: "apple"], "apple", "apple")
94
+ subject.should_not === "apple"
95
+ end
96
+ end
97
+
98
+ describe "should =~" do
99
+ it "delegates message to target" do
100
+ subject = "foo"
101
+ subject.should_receive(:=~).with(/oo/).and_return(true)
102
+ subject.should =~ /oo/
103
+ end
104
+
105
+ it "fails when target.=~(actual) returns false" do
106
+ subject = "fu"
107
+ subject.should_receive(:=~).with(/oo/).and_return(false)
108
+ RSpec::Expectations.should_receive(:fail_with).with(%[expected: /oo/\n got: "fu" (using =~)], /oo/, "fu")
109
+ subject.should =~ /oo/
110
+ end
111
+ end
112
+
113
+ describe "should_not =~" do
114
+ it "delegates message to target" do
115
+ subject = "fu"
116
+ subject.should_receive(:=~).with(/oo/).and_return(false)
117
+ subject.should_not =~ /oo/
118
+ end
119
+
120
+ it "fails when target.=~(actual) returns false" do
121
+ subject = "foo"
122
+ subject.should_receive(:=~).with(/oo/).and_return(true)
123
+ RSpec::Expectations.should_receive(:fail_with).with(%[expected not: =~ /oo/\n got: "foo"], /oo/, "foo")
124
+ subject.should_not =~ /oo/
125
+ end
126
+ end
127
+
128
+ describe "should >" do
129
+ it "passes if > passes" do
130
+ 4.should > 3
131
+ end
132
+
133
+ it "fails if > fails" do
134
+ RSpec::Expectations.should_receive(:fail_with).with(%[expected: > 5\n got: 4], 5, 4)
135
+ 4.should > 5
136
+ end
137
+ end
138
+
139
+ describe "should >=" do
140
+ it "passes if actual == expected" do
141
+ 4.should >= 4
142
+ end
143
+
144
+ it "passes if actual > expected" do
145
+ 4.should >= 3
146
+ end
147
+
148
+ it "fails if > fails" do
149
+ RSpec::Expectations.should_receive(:fail_with).with(%[expected: >= 5\n got: 4], 5, 4)
150
+ 4.should >= 5
151
+ end
152
+ end
153
+
154
+ describe "should <" do
155
+ it "passes if < passes" do
156
+ 4.should < 5
157
+ end
158
+
159
+ it "fails if > fails" do
160
+ RSpec::Expectations.should_receive(:fail_with).with(%[expected: < 3\n got: 4], 3, 4)
161
+ 4.should < 3
162
+ end
163
+ end
164
+
165
+ describe "should <=" do
166
+ it "passes if actual == expected" do
167
+ 4.should <= 4
168
+ end
169
+
170
+ it "passes if actual < expected" do
171
+ 4.should <= 5
172
+ end
173
+
174
+ it "fails if > fails" do
175
+ RSpec::Expectations.should_receive(:fail_with).with(%[expected: <= 3\n got: 4], 3, 4)
176
+ 4.should <= 3
177
+ end
178
+ end
179
+
180
+ describe "OperatorMatcher registry" do
181
+ let(:custom_klass) { Class.new }
182
+ let(:custom_subklass) { Class.new(custom_klass) }
183
+
184
+ after {
185
+ RSpec::Matchers::OperatorMatcher.unregister(custom_klass, "=~")
186
+ }
187
+
188
+ it "allows operator matchers to be registered for types" do
189
+ RSpec::Matchers::OperatorMatcher.register(custom_klass, "=~", RSpec::Matchers::BuiltIn::Match)
190
+ expect(RSpec::Matchers::OperatorMatcher.get(custom_klass, "=~")).to eq(RSpec::Matchers::BuiltIn::Match)
191
+ end
192
+
193
+ it "considers ancestors when finding an operator matcher" do
194
+ RSpec::Matchers::OperatorMatcher.register(custom_klass, "=~", RSpec::Matchers::BuiltIn::Match)
195
+ expect(RSpec::Matchers::OperatorMatcher.get(custom_subklass, "=~")).to eq(RSpec::Matchers::BuiltIn::Match)
196
+ end
197
+
198
+ it "returns nil if there is no matcher registered for a type" do
199
+ expect(RSpec::Matchers::OperatorMatcher.get(custom_klass, "=~")).to be_nil
200
+ end
201
+ end
202
+
203
+ describe RSpec::Matchers::BuiltIn::PositiveOperatorMatcher do
204
+ it "works when the target has implemented #send" do
205
+ o = Object.new
206
+ def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
207
+ expect {
208
+ o.should == o
209
+ }.not_to raise_error
210
+ end
9
211
  end
10
-
11
- it "returns true on success" do
12
- subject = "apple"
13
- (subject.should == "apple").should be_true
14
- end
15
-
16
- it "fails when target.==(actual) returns false" do
17
- subject = "apple"
18
- RSpec::Expectations.should_receive(:fail_with).with(%[expected: "orange"\n got: "apple" (using ==)], "orange", "apple")
19
- subject.should == "orange"
20
- end
21
-
22
- end
23
-
24
- describe "unsupported operators", :if => RUBY_VERSION.to_f == 1.9 do
25
- it "raises an appropriate error for should != expected" do
26
- expect {
27
- "apple".should != "pear"
28
- }.to raise_error(/does not support `should != expected`. Use `should_not == expected`/)
29
- end
30
-
31
- it "raises an appropriate error for should_not != expected" do
32
- expect {
33
- "apple".should_not != "pear"
34
- }.to raise_error(/does not support `should_not != expected`. Use `should == expected`/)
35
- end
36
-
37
- it "raises an appropriate error for should !~ expected" do
38
- expect {
39
- "apple".should !~ /regex/
40
- }.to raise_error(/does not support `should !~ expected`. Use `should_not =~ expected`/)
41
- end
42
-
43
- it "raises an appropriate error for should_not !~ expected" do
44
- expect {
45
- "apple".should_not !~ /regex/
46
- }.to raise_error(/does not support `should_not !~ expected`. Use `should =~ expected`/)
47
- end
48
- end
49
-
50
- describe "should_not ==" do
51
-
52
- it "delegates message to target" do
53
- subject = "orange"
54
- subject.should_receive(:==).with("apple").and_return(false)
55
- subject.should_not == "apple"
56
- end
57
-
58
- it "returns true on success" do
59
- subject = "apple"
60
- (subject.should_not == "orange").should be_false
61
- end
62
-
63
- it "fails when target.==(actual) returns false" do
64
- subject = "apple"
65
- RSpec::Expectations.should_receive(:fail_with).with(%[expected not: == "apple"\n got: "apple"], "apple", "apple")
66
- subject.should_not == "apple"
67
- end
68
-
69
- end
70
-
71
- describe "should ===" do
72
-
73
- it "delegates message to target" do
74
- subject = "apple"
75
- subject.should_receive(:===).with("apple").and_return(true)
76
- subject.should === "apple"
77
- end
78
-
79
- it "fails when target.===(actual) returns false" do
80
- subject = "apple"
81
- subject.should_receive(:===).with("orange").and_return(false)
82
- RSpec::Expectations.should_receive(:fail_with).with(%[expected: "orange"\n got: "apple" (using ===)], "orange", "apple")
83
- subject.should === "orange"
84
- end
85
-
86
- end
87
-
88
- describe "should_not ===" do
89
-
90
- it "delegates message to target" do
91
- subject = "orange"
92
- subject.should_receive(:===).with("apple").and_return(false)
93
- subject.should_not === "apple"
94
- end
95
-
96
- it "fails when target.===(actual) returns false" do
97
- subject = "apple"
98
- subject.should_receive(:===).with("apple").and_return(true)
99
- RSpec::Expectations.should_receive(:fail_with).with(%[expected not: === "apple"\n got: "apple"], "apple", "apple")
100
- subject.should_not === "apple"
101
- end
102
-
103
- end
104
-
105
- describe "should =~" do
106
-
107
- it "delegates message to target" do
108
- subject = "foo"
109
- subject.should_receive(:=~).with(/oo/).and_return(true)
110
- subject.should =~ /oo/
111
- end
112
-
113
- it "fails when target.=~(actual) returns false" do
114
- subject = "fu"
115
- subject.should_receive(:=~).with(/oo/).and_return(false)
116
- RSpec::Expectations.should_receive(:fail_with).with(%[expected: /oo/\n got: "fu" (using =~)], /oo/, "fu")
117
- subject.should =~ /oo/
118
- end
119
-
120
- end
121
-
122
- describe "should_not =~" do
123
-
124
- it "delegates message to target" do
125
- subject = "fu"
126
- subject.should_receive(:=~).with(/oo/).and_return(false)
127
- subject.should_not =~ /oo/
128
- end
129
-
130
- it "fails when target.=~(actual) returns false" do
131
- subject = "foo"
132
- subject.should_receive(:=~).with(/oo/).and_return(true)
133
- RSpec::Expectations.should_receive(:fail_with).with(%[expected not: =~ /oo/\n got: "foo"], /oo/, "foo")
134
- subject.should_not =~ /oo/
135
- end
136
-
137
- end
138
-
139
- describe "should >" do
140
-
141
- it "passes if > passes" do
142
- 4.should > 3
143
- end
144
-
145
- it "fails if > fails" do
146
- RSpec::Expectations.should_receive(:fail_with).with(%[expected: > 5\n got: 4], 5, 4)
147
- 4.should > 5
148
- end
149
-
150
- end
151
-
152
- describe "should >=" do
153
-
154
- it "passes if actual == expected" do
155
- 4.should >= 4
156
- end
157
-
158
- it "passes if actual > expected" do
159
- 4.should >= 3
160
- end
161
-
162
- it "fails if > fails" do
163
- RSpec::Expectations.should_receive(:fail_with).with(%[expected: >= 5\n got: 4], 5, 4)
164
- 4.should >= 5
165
- end
166
-
167
- end
168
-
169
- describe "should <" do
170
-
171
- it "passes if < passes" do
172
- 4.should < 5
173
- end
174
-
175
- it "fails if > fails" do
176
- RSpec::Expectations.should_receive(:fail_with).with(%[expected: < 3\n got: 4], 3, 4)
177
- 4.should < 3
178
- end
179
-
180
- end
181
-
182
- describe "should <=" do
183
-
184
- it "passes if actual == expected" do
185
- 4.should <= 4
186
- end
187
-
188
- it "passes if actual < expected" do
189
- 4.should <= 5
190
- end
191
-
192
- it "fails if > fails" do
193
- RSpec::Expectations.should_receive(:fail_with).with(%[expected: <= 3\n got: 4], 3, 4)
194
- 4.should <= 3
195
- end
196
-
197
- end
198
-
199
- describe "OperatorMatcher registry" do
200
- let(:custom_klass) { Class.new }
201
- let(:custom_subklass) { Class.new(custom_klass) }
202
-
203
- after {
204
- RSpec::Matchers::OperatorMatcher.unregister(custom_klass, "=~")
205
- }
206
-
207
- it "allows operator matchers to be registered for types" do
208
- RSpec::Matchers::OperatorMatcher.register(custom_klass, "=~", RSpec::Matchers::BuiltIn::Match)
209
- expect(RSpec::Matchers::OperatorMatcher.get(custom_klass, "=~")).to eq(RSpec::Matchers::BuiltIn::Match)
210
- end
211
-
212
- it "considers ancestors when finding an operator matcher" do
213
- RSpec::Matchers::OperatorMatcher.register(custom_klass, "=~", RSpec::Matchers::BuiltIn::Match)
214
- expect(RSpec::Matchers::OperatorMatcher.get(custom_subklass, "=~")).to eq(RSpec::Matchers::BuiltIn::Match)
215
- end
216
-
217
- it "returns nil if there is no matcher registered for a type" do
218
- expect(RSpec::Matchers::OperatorMatcher.get(custom_klass, "=~")).to be_nil
219
- end
220
- end
221
-
222
- describe RSpec::Matchers::BuiltIn::PositiveOperatorMatcher do
223
212
 
224
- it "works when the target has implemented #send" do
225
- o = Object.new
226
- def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
227
- lambda {
228
- o.should == o
229
- }.should_not raise_error
213
+ describe RSpec::Matchers::BuiltIn::NegativeOperatorMatcher do
214
+ it "works when the target has implemented #send" do
215
+ o = Object.new
216
+ def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
217
+ expect {
218
+ o.should_not == :foo
219
+ }.not_to raise_error
220
+ end
230
221
  end
231
-
232
222
  end
233
223
 
234
- describe RSpec::Matchers::BuiltIn::NegativeOperatorMatcher do
235
-
236
- it "works when the target has implemented #send" do
237
- o = Object.new
238
- def o.send(*args); raise "DOH! Library developers shouldn't use #send!" end
239
- lambda {
240
- o.should_not == :foo
241
- }.should_not raise_error
242
- end
243
-
244
- end