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
@@ -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