@@ -169,10 +169,62 @@ describe "expectations" do
169169 end
170170
171171 describe " expect_raises" do
172- it " pass if raises MyError " do
172+ it " passes if expected message equals actual message and expected class equals actual class " do
173173 expect_raises(Exception , " Ops" ) { raise Exception .new(" Ops" ) }
174174 end
175175
176+ it " passes if expected message equals actual message and expected class is an ancestor of actual class" do
177+ expect_raises(Exception , " Ops" ) { raise ArgumentError .new(" Ops" ) }
178+ end
179+
180+ it " passes if expected regex matches actual message and expected class equals actual class" do
181+ expect_raises(Exception , /Ops/ ) { raise Exception .new(" Ops" ) }
182+ end
183+
184+ it " passes if expected regex matches actual message and expected class is an ancestor of actual class" do
185+ expect_raises(Exception , /Ops/ ) { raise ArgumentError .new(" Ops" ) }
186+ end
187+
188+ it " passes if given no message expectation and expected class equals actual class" do
189+ expect_raises(Exception ) { raise Exception .new(" Ops" ) }
190+ end
191+
192+ it " passes if given no message expectation and expected class is an ancestor of actual class" do
193+ expect_raises(Exception ) { raise ArgumentError .new(" Ops" ) }
194+ end
195+
196+ it " fails if expected message does not equal actual message and expected class equals actual class" do
197+ expect_raises(Exception , " Ops" ) { raise Exception .new(" Hm" ) }
198+ rescue Spec ::AssertionFailed
199+ # success
200+ else
201+ raise " expected Spec::AssertionFailed but nothing was raised"
202+ end
203+
204+ it " fails if expected regex does not match actual message and expected class equals actual class" do
205+ expect_raises(Exception , /Ops/ ) { raise Exception .new(" Hm" ) }
206+ rescue Spec ::AssertionFailed
207+ # success
208+ else
209+ raise " expected Spec::AssertionFailed but nothing was raised"
210+ end
211+
212+ it " fails if given no message expectation and expected class does not equal and is not an ancestor of actual class" do
213+ expect_raises(IndexError ) { raise ArgumentError .new(" Ops" ) }
214+ rescue Spec ::AssertionFailed
215+ # success
216+ else
217+ raise " expected Spec::AssertionFailed but nothing was raised"
218+ end
219+
220+ it " fails if nothing was raised" do
221+ expect_raises(IndexError ) { raise ArgumentError .new(" Ops" ) }
222+ rescue Spec ::AssertionFailed
223+ # success
224+ else
225+ raise " expected Spec::AssertionFailed but nothing was raised"
226+ end
227+
176228 describe " failure message format" do
177229 context " given string to compare with message" do
178230 it " contains expected exception, actual exception and backtrace" do
@@ -265,6 +317,16 @@ describe "expectations" do
265317 raise " nothing is raised"
266318 end
267319 end
320+
321+ context " nothing was raises" do
322+ it " contains expected class" do
323+ expect_raises(IndexError ) { }
324+ rescue e : Spec ::AssertionFailed
325+ e.message.as(String ).should contain(" Expected IndexError but nothing was raised" )
326+ else
327+ raise " expected Spec::AssertionFailed but nothing was raised"
328+ end
329+ end
268330 end
269331 end
270332end
0 commit comments