Add libwx-perl
[pkg-perl] / deb-src / libwx-perl / libwx-perl-0.96 / t / 03_event.t
1 #!/usr/bin/perl -w
2
3 # tests the ability of sending events directly
4 # to windows
5
6 use strict;
7 use Wx;
8 use lib './t';
9 use Test::More 'tests' => 17;
10 use Tests_Helper qw(test_frame);
11
12 test_frame( 'MyFrame' );
13
14 package MyEvent;
15
16 use base 'Wx::PlCommandEvent';
17
18 our $destroyed; BEGIN { $destroyed = 0 };
19
20 sub DESTROY {
21     $destroyed++;
22     # print "D: $_[0]\n";
23     $_[0]->SUPER::DESTROY;
24 }
25
26 sub Clone {
27     my( $self ) = @_;
28     my $class = ref $self;
29     # my $c = $class->new( $self->GetEventType, $self->GetId ); print "C: $c\n"; return $c;
30     return $class->new( $self->GetEventType, $self->GetId );
31 }
32
33 package MyFrame;
34
35 use base 'Wx::Frame';
36 use Wx::Event qw(EVT_BUTTON);
37
38 sub new {
39   my $class = shift;
40   my $this = $class->SUPER::new( undef, -1, 'Test' );
41
42   my $button = Wx::Button->new( $this, -1, 'Button' );
43
44   my $var = 0;
45
46   EVT_BUTTON( $this, $button,
47               sub {
48                   my( $this, $evt ) = @_;
49
50                   $var = 1;
51               } );
52
53   {
54       my $event = Wx::CommandEvent->new( &Wx::wxEVT_COMMAND_BUTTON_CLICKED,
55                                          $button->GetId() );
56
57       $button->GetEventHandler->ProcessEvent( $event );
58   }
59   main::ok( $var, "event succesfully received" );
60   main::is( $MyEvent::destroyed, 0, "no object destroyed" );
61
62   $var = 0;
63   {
64       my $event = MyEvent->new( &Wx::wxEVT_COMMAND_BUTTON_CLICKED,
65                                 $button->GetId() );
66
67       $button->GetEventHandler->ProcessEvent( $event );
68       main::is( $MyEvent::destroyed, 0, "still no object destroyed" );
69   }
70   main::ok( $var, "event succesfully received" );
71   main::is( $MyEvent::destroyed, 1, "one event destroyed" );
72
73   $var = 0;
74   {
75       my $event = MyEvent->new( &Wx::wxEVT_COMMAND_BUTTON_CLICKED,
76                                 $button->GetId() );
77       # print "E: $event\n";
78       $button->GetEventHandler->AddPendingEvent( $event );
79       main::is( $MyEvent::destroyed, 1, "still one event destroyed" );
80   }
81   main::is( $MyEvent::destroyed, 2, "original event destroyed" );
82   main::ok( !$var, "event not received before yield" );
83   Wx::wxTheApp->ProcessPendingEvents;
84   main::ok( $var, "event received after yield" );
85   main::is( $MyEvent::destroyed, 3, "cloned event destroyed" );
86
87   $var = 0;
88   EVT_BUTTON( $this, $button, undef );
89   {
90       my $event = MyEvent->new( &Wx::wxEVT_COMMAND_BUTTON_CLICKED,
91                                 $button->GetId() );
92
93   }
94   main::is( $MyEvent::destroyed, 4 );
95
96   {
97       my $event = MyEvent->new( &Wx::wxEVT_COMMAND_BUTTON_CLICKED,
98                                 $button->GetId() );
99
100       $button->GetEventHandler->ProcessEvent( $event );
101   }
102   main::ok( !$var, "event handler disconnected" );
103   main::is( $MyEvent::destroyed, 5 );
104
105   $var = 0;
106   {
107       my $event = MyEvent->new( &Wx::wxEVT_COMMAND_BUTTON_CLICKED,
108                                 $button->GetId() );
109
110       $button->GetEventHandler->AddPendingEvent( $event );
111   }
112   main::is( $MyEvent::destroyed, 6, "original event destroyed" );
113   main::ok( !$var, "event not received before yield" );
114   Wx::wxTheApp->ProcessPendingEvents;
115   main::ok( !$var, "event not received after yield" );
116   main::is( $MyEvent::destroyed, 7, "cloned event destroyed" );
117
118   $this->Destroy;
119 }
120
121 # Local variables: #
122 # mode: cperl #
123 # End: #