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