On Monday, January 10, 2011 14:41:51 Jonathan M Davis wrote: > On Monday, January 10, 2011 13:48:50 Tomek Sowiński wrote: > > Another example: > > > > { > > > > bool thrown = false; > > try > > > > assertNotThrown!AssertError(throwEx(new AssertError("It's an > > > > AssertError", __FILE__, __LINE__)), "It's a message"); catch(AssertError) > > > > thrown = true; > > > > assert(thrown); > > > > } > > > > can be: > > try { > > > > assertNotThrown!AssertError(throwEx(new AssertError("It's an > > > > AssertError", __FILE__, __LINE__)), "It's a message"); assert(false); > > > > } catch(AssertError) { /*OK*/ } > > > > and you don't have to introduce a new scope every time. > > Doesn't work actually - at least not in the general case (for this > particular test, it's arguably okay). It doesn't take into account the > case where an exception other than AssertError is thrown. The exception > escapes instead of hitting the assertion. I believe that they are the way > they are because I was essentialy re-writing assertThrown to test > assertThrown. Regardless, we're talking about the unit tests here, not the > actual code, so I don't think that it's as big a deal.
Actually, I now remember the big reason that your version doesn't work at all. The AssertError thrown by assert(false); inside of the try block would just be caught by the catch block. So, it doesn't work at all. You have to do it pretty much the way that I did it. It was one of those nuances in writing assertNotThrown that initially missed when coming up with it in the first place. So, the ugly way is necessary. - Jonathan M Davis