develooper Front page | perl.qa | Postings from August 2005

Re: Test::Exception and XS code

Thread Previous | Thread Next
From:
Sébastien Aperghis-Tramoni
Date:
August 15, 2005 08:58
Subject:
Re: Test::Exception and XS code
Sébastien Aperghis-Tramoni wrote:

> While rewriting Net::Pcap test suite, I quickly stumbled upon this 
> problem: it looks like Test::Exception can't catch croak() or die() 
> thrown from XS code.
> [...]

Ok, I corrected a mistake (I was using dies_ok() instead of 
throws_ok()), and reduced the problem to this test case:

     use strict;
     use Test::More tests => 2;
     use Test::Exception;
     use Net::Pcap;

     throws_ok(
         sub { Net::Pcap::lookupdev() },
         '/^Usage: Net::Pcap::lookupdev\(err\)/',
         "calling lookupdev() with no argument"
     );

     throws_ok
         { Net::Pcap::lookupdev() }
         '/^Usage: Net::Pcap::lookupdev\(err\)/',
         "calling lookupdev() with no argument"
     ;

Executing this script works as expected:

     $ perl -W exception.pl
     1..1
     ok 1 - calling lookupdev() with no argument
     ok 2 - calling lookupdev() with no argument
     # Looks like you planned 1 test but ran 1 extra.

Now, if I move the "use Test::Exception" inside an eval-string and 
execute the new script:

     $ perl -W exception.pl
     1..2
     ok 1 - calling lookupdev() with no argument
     Usage: Net::Pcap::lookupdev(err) at exception.pl line 13.
     # Looks like you planned 2 tests but only ran 1.
     # Looks like your test died just after 1.

Aha! The first test, which uses the normal form of throws_ok() passes, 
but the second one, which uses the grep-like form, fails.


Sébastien Aperghis-Tramoni
  -- - --- -- - -- - --- -- - --- -- - --[ http://maddingue.org ]
Close the world, txEn eht nepO


Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About