On Sat, Feb 26, 2005 at 06:00:02PM -0500, Tom Moertel wrote: > How I do do this now is somewhat hackish. For the duration of a > property check, I redefine some Test::Builder internals like so: > > sub check_property { > no warnings 'redefine'; > my $property = shift; > my $diags = []; > local *Test::Builder::ok = sub { $_[1] ? 1 : 0 }; > local *Test::Builder::diag = sub { shift; push @$diags, @_; 0 }; > return ( $diags, > Test::LectroTest::TestRunner->new(@_)->run($property) ); > } > > The idea is to sever the part of Test::Builder that reports back to > the caller (which I want) from the part that reports back to the test > harness (which I do not want). It seems to work fine, but mucking > around with another module's internals carries with it an element of > risk that I don't like, and I would rather have a cleaner option.
That's pretty much it. ok() and diag() aren't internals so its ok to "override" them like that. What's missing, and why its so nasty, is a way to write a proper Test::Builder subclass and make everything use it. Its on the TODO list.