1use strict; 2use warnings; 3 4{ 5 package TEST; 6 use parent qw(Locale::Maketext); 7} 8 9{ 10 package TEST::en; 11 use parent -norequire, qw(TEST); 12 our %Lexicon = ( 13 _AUTO => 1, 14 ); 15} 16 17package main; 18use strict; 19use warnings; 20use Test::More tests => 12; 21 22my $lh = TEST->get_handle('en'); 23$@ = "foo"; 24is($lh->maketext("This works fine"), "This works fine", "straight forward _AUTO string test"); 25is($@, "foo", q{$@ isn't altered during calls to maketext}); 26 27my $err = eval { 28 $lh->maketext('this is ] an error'); 29}; 30is($err, undef, "no return from eval"); 31like("$@", qr/Unbalanced\s'\]',\sin/ms, '$@ shows that ] was unbalanced'); 32 33# _try_use doesn't pollute $@ 34$@ = 'foo2'; 35is(Locale::Maketext::_try_use("This::module::does::not::exist"), 0, "0 return if module is missing when _try_use is called"); 36is($@, 'foo2', '$@ is unmodified by a failed _try_use'); 37 38# _try_use doesn't pollute $@ for valid call 39$@ = ''; 40is(Locale::Maketext::_try_use("Locale::Maketext::Guts"), 1, "1 return using valid module Locale::Maketext::Guts"); 41is($@, '', '$@ is clean after failed _try_use'); 42 43# failure_handler_auto handles $@ locally. 44{ 45 $@ = ''; 46 my $err = ''; 47 $lh->{failure_lex}->{"foo_fail"} = sub {die("fail message");}; 48 $err = eval {$lh->failure_handler_auto("foo_fail")}; 49 is($err, undef, "die event calling failure_handler on bad code"); 50 like($@, qr/^Error in maketexting "foo_fail":/ms, "\$@ is re-written as expected."); 51} 52 53$@ = 'foo'; 54is($lh->maketext('Eval error: [_1]', $@), 'Eval error: foo', "Make sure \$@ is localized when passed to maketext"); 55is($@, 'foo', "\$@ wasn't modified during call"); 56