From: Josh Cheek Date: 2010-11-05T02:31:18+09:00 Subject: Re: true! or false! --20cf300fa9e96a714304943d861b Content-Type: text/plain; charset=ISO-8859-1 On Thu, Nov 4, 2010 at 5:55 AM, Intransition wrote: > Making good use of polymorphism I had this idea for assertion methods: > > class TrueClass > # Assert true. > # > # (x == y).true! > # > def true! > true > end > # Assert false. > # > # (x == y).false! > # > def false! > raise "not false!" > end > end > > class FalseClass > # Assert true. > # > # (x == y).true! > # > def true! > raise "not true!" > end > # Assert false. > # > # (x == y).false! > # > def false! > true > end > end > > If only the error message could say something about WHAT was not true > or false, this could be pretty nifty. > > You would need to override at a higher level, I think, because I frequently use object/nil instead of true/false. require 'test/unit' class Object def true! ; self || raise("not true!") ; end def false! ; self && raise("not false!") ; end end class TrueBangFalseBang < Test::Unit::TestCase def test_object ; [1,2,3][2].true! ; end def test_non_object ; [1,2,3][3].false! ; end def test_true ; (1==1).true! ; end def test_false ; (1==2).false! ; end end I like it, except that it doesn't count these as assertions. Even if you mix the assertions module into object and use the assert methods, like this: class Object include Test::Unit::Assertions def true! ; assert self ; end def false! ; assert !self ; end end You would get results like "4 tests, 0 assertions, 2 failures", maybe if you look even further under the hood you could figure out how to get them to count. Or just choose to not care, but for me, that is a number I like to see :) --20cf300fa9e96a714304943d861b--