On Thu, Jun 27, 2002 at 04:32:31PM +0200, Janek Schleicher wrote:
> I couldn't find a module doing this job on CPAN,
> so I'm ready to write a Test::Warn module.
> 
> I thought that two methods should be implemented:
> warns_ok     BLOCK  REGEX, TEST_NAME   (regex and test_name are optional)
> no_warns_ok  BLOCK  TEST_NAME          (test_name is optional)
> 
> (similar to throws_ok and lives_ok from Test::Exception)

You have to be extra careful about preserving the call stack, since the
BLOCK is called inside warns_ok() as a subroutine.  Consider:

      # line 5 "foo.pl"
      warns_ok { warn "Foo" } /^Foo in foo.pl at line 5$/;
      
Gotta make sure this comes out ok.  Test::Exception does this using
Sub::Uplevel.

Rather than restricting it to a regex, you might want to write functions
analgous to Test::More:

     warn_is    BLOCK  STRING, [TEST_NAME]
     warn_like  BLOCK  REGEX,  [TEST_NAME]

this also eliminates the awkward "no_warns_ok".  Instead, you just do:

     warn_is { foo() }  '',  'no warnings from foo';


-- 
This sig file temporarily out of order.

Reply via email to