#!/usr/bin/perl -w
use strict;
use Wx;
use lib './t';
use Tests_Helper qw(test_app);
use Test::More Wx::wxMAC() ? ( 'skip_all' => 'Hangs on wxMac' ) :
( 'tests' => 6 );
use Wx::Event qw(EVT_TIMER);
my $app = test_app(
sub {
Wx::Frame->new( undef, -1, 'X' )->Show( 1 ); # to appease wxGTK
} );
my $timer = Wx::Timer->new($app, 123);
sub onTimer0 {
ok( 1, 'Timer fired' );
eval 'BEGIN { die "Fatal!" }';
ok( $@, 'Error was generated and trapped' );
EVT_TIMER( $app, 123, undef ); # disconnect
EVT_TIMER( $app, 123, \&onTimer1 );
$timer->Start( 20, 1 );
}
sub onTimer1 {
ok( 1, 'Second timer fired' );
eval 'use ThisModuleDoesNotExist';
ok( $@, 'Error was generated and trapped' );
EVT_TIMER( $app, 123, undef ); # disconnect
EVT_TIMER( $app, 123, \&onTimer2 );
$timer->Start( 20, 1 );
}
sub onTimer2 {
ok( 1, 'Third timer fired' );
die "I am going away...";
fail( 'panic: die() did not work' );
}
EVT_TIMER( $app, 123, \&onTimer0 );
$timer->Start( 10, 1 );
eval { $app->MainLoop };
like( $@, qr/^I am going away\.\.\./, 'Exception correctly propagated' );