############################################################################# ## Name: t/WxTesting.pm ## Purpose: helper functions ## Author: Mark Dootson ## Created: 20070326 ## Copyright: Based on the Wx distribution test helper which is ## (c) 2005,2006,2007 Mattia Barbon and is available in the ## wxPerl distribution. ## This code is copyright (c) 2007 Mark Dootson ## Licence: This program is free software; you can redistribute it and/or ## modify it under the same terms as Perl itself ############################################################################# package WxTesting::Handler; use strict; use Wx; use base qw(Wx::EvtHandler); use Wx::Event qw(EVT_TIMER); sub new { my $class = shift; my $self = $class->SUPER::new( @_ ); EVT_TIMER( $self, -1, \&OnTimer ); return $self; } sub OnTimer { # run once when app starts my $frame = Wx::wxTheApp()->GetTopWindow; $frame->RunTests(); $frame->Destroy; Wx::WakeUpIdle; } package WxTesting::Frame; use strict; use Wx; use base qw( Wx::Frame ); sub new { my $class = shift; my $self = $class->SUPER::new( @_ ); # start the test run timer $self->{_testtimer} = Wx::Timer->new( WxTesting::Handler->new ); $self->{_testtimer}->Start( 800, 1 ); return $self; } sub RunTests { my $self = shift; die 'RunTests must be overridden in test script'; } sub TestAppTimeOut { my $self = shift; $self->Destroy; } sub Destroy { my $self = shift; $self->SUPER::Destroy; $self->{_testtimer}->Destroy; Wx::wxTheApp()->ExitMainLoop; Wx::WakeUpIdle(); } package WxTesting::App; use base qw( Wx::App ); my $framesub; sub new { my $class = shift; my ( $frameclass ) = @_; $framesub = sub { $frameclass; }; my $self = $class->SUPER::new(); $self->SetExitOnFrameDelete(1); return $self; } sub OnInit { my $self = shift; my $frameclass = &$framesub; my $mainwindow = $frameclass->new(undef, -1, 'Wx Testing Frame'); $self->SetTopWindow($mainwindow); #$mainwindow->Show(1); return 1; } package WxTesting; use strict; use Wx; require Exporter; use vars qw(@ISA @EXPORT_OK); @ISA = qw(Exporter); @EXPORT_OK = qw( app_from_wxtesting_frame ); sub app_from_wxtesting_frame { my ( $frameclass ) = @_; my $app = WxTesting::App->new( $frameclass ); return $app; } 1; __END__