1#! /usr/bin/perl -Tw 2 3use strict; 4use warnings; 5use Test::Builder; 6use Test::Harness; 7use Test::Builder::Tester tests => 13; 8use Test::More; 9 10BEGIN { use_ok( 'Test::Exception' ) }; 11 12sub div { 13 my ($a, $b) = @_; 14 return( $a / $b ); 15}; 16 17my $filename = sub { return (caller)[1] }->(); 18 19{ 20 my $ok = dies_ok { div(1, 0) } 'dies_ok passed on die'; 21 ok($ok, 'dies_ok returned true when block dies'); 22} 23 24 25{ 26 test_out('not ok 1 - dies_ok failed'); 27 test_fail( +1 ); 28 my $ok = dies_ok { div(1, 1) } 'dies_ok failed'; 29 test_test('dies_ok fails when code does not die'); 30 31 ok(!$ok, 'dies_ok returned false on failure'); 32} 33 34 35{ 36 my $ok = throws_ok { div(1, 0) } '/./', 'throws_ok succeeded'; 37 ok($ok, 'throws_ok returned true on success'); 38} 39 40{ 41 test_out('not ok 1 - throws_ok failed'); 42 test_fail(+3); 43 test_err('# expecting: /./'); 44 test_err('# found: normal exit'); 45 my $ok = throws_ok { div(1, 1) } '/./', 'throws_ok failed'; 46 test_test('throws_ok fails when appropriate'); 47 48 ok(!$ok, 'throws_ok returned false on failure'); 49} 50 51{ 52 my $ok = lives_ok { div(1, 1) } 'lives_ok succeeded'; 53 ok($ok, 'lives_ok returned true on success'); 54} 55 56{ 57 test_out('not ok 1 - lives_ok failed'); 58 test_fail(+2); 59 test_err("# died: Illegal division by zero at $filename line 14."); 60 my $ok = lives_ok { div(1, 0) } 'lives_ok failed'; 61 test_test("dies_ok fails"); 62 63 ok(!$ok, 'lives_ok returned false on failure'); 64} 65