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