# Test that DBIx::DataModel::Schema::_State::DESTROY preserves $@ use strict; use warnings; use DBI; use constant N_DBI_MOCK_TESTS => 1; use Test::More tests => N_DBI_MOCK_TESTS + 1; BEGIN { use_ok("DBIx::DataModel", -compatibility=> 1.0); DBIx::DataModel->Schema('Foo'); } # fake method Foo::dbh() that uses an eval {} package Foo; sub dbh { my $class = shift; eval { 1 }; # this succesful eval{} will clear $@ ! $class->SUPER::dbh(@_); } # back to main package package main; SKIP: { eval "use DBD::Mock 1.36; 1" or skip "DBD::Mock 1.36 does not seem to be installed", N_DBI_MOCK_TESTS; my $dbh = DBI->connect('DBI:Mock:', '', '', {RaiseError => 1}); eval { Foo->dbh($dbh); { my $scope_guard = Foo->localizeState; die "aargh\n"; } # here $scope_guard is destroyed and calls Foo::dbh() }; # check that we didn't loose the error message is ($@, "aargh\n", "error message is preserved"); }