#!/usr/bin/perl -w use strict; use Test::More tests => 14; BEGIN { use_ok('Exception::Class::DBI') or die } use DBI; eval { DBI->connect( 'dbi:Bogus', '', '', { PrintError => 0, RaiseError => 0, HandleError => Exception::Class::DBI->handler }); }; ok( my $err = $@, "Catch exception" ); SKIP: { # Remove this skip when DBI->connect uses exceptions. skip 'HandleError not yet fully supported by DBI->connect', 12 unless ref $@; isa_ok( $err, 'Exception::Class::DBI' ); like( $err->error, qr{Can't connect\(dbi:Bogus HASH\([^\)]+\)\), no database driver specified and DBI_DSN env var not set}, "Check error" ); ok( ! defined $err->err, "Check err" ); ok( ! defined $err->errstr, "Check errstr" ); ok( ! defined $err->state, "Check state" ); ok( ! defined $err->retval, "Check retval" ); # Try to trigger a usage exception. eval { DBI->connect('', '', {}, # uh-oh, referenced password. { PrintError => 0, RaiseError => 0, HandleError => Exception::Class::DBI->handler }); }; ok( $err = $@, "Catch usage exception" ); isa_ok( $err, 'Exception::Class::DBI' ); is( $err->error, 'Usage: $class->connect([$dsn [,$user [,$passwd ' . '[,\%attr]]]])', "Check usage error" ); TODO: { # Remove this TODO when DBI->install_driver uses exceptions. local $TODO = "DBI->install_driver doesn't use HandleError Yet"; # Try to trigger a install driver error. eval { DBI->connect('dbi:dummy:foo', '', '', # dummy driver. { PrintError => 0, RaiseError => 0, HandleError => Exception::Class::DBI->handler }); }; ok( $err = $@, "Catch usage exception" ); isa_ok( $err, 'Exception::Class::DBI' ); SKIP: { # Remove this SKIP when DBI->install_driver uses exceptions. skip 'HandleError not logic not yet used by DBI->install_driver', 1 unless ref $err; # Can take out "ref $err" when the TODO is completed. is( $err->error, 'panic: $class->install_driver(dummy) failed', "Check driver error" ); } } } # This keeps Perl 5.6.2 from trying to run tests again. I've no idea why it # does that. :-( exit;