--- /dev/null
+#!/usr/bin/perl -w
+
+use strict;
+use Wx;
+use lib './t';
+
+use Tests_Helper qw(test_app);
+use Test::More 'tests' => 110;
+
+my $undef = undef;
+
+my $app = test_app( sub { 1 } );
+
+for my $i ( [ \&Wx::_match, 'match' ],
+ [ \&Wx::_xsmatch, 'xsmatch' ] ) {
+ my( $m, $t ) = @$i;
+ local *xx = $m;
+
+ # some simple cases
+ ok( xx( [ [] ], $Wx::_arr ), "$t: match an array" );
+ ok( xx( [ [], 1 ], $Wx::_arr ),
+ "$t: more arguments than in prototype" );
+ ok( !xx( [ '' ], $Wx::_arr ), "$t: wrong arguments" );
+ ok( xx( [ [] ], $Wx::_arr ), "$t: match with required arguments" );
+ ok( !xx( [ [], 1 ], $Wx::_arr, 1 ),
+ "$t: don't match with more than required" );
+ ok( xx( [ [] ], $Wx::_arr, 1, 1 ),
+ "$t: match with required arguments and allow_more" );
+ ok( xx( [ [], 1 ], $Wx::_arr, 1, 1 ),
+ "$t: match with more than required and allow_more" );
+
+ # tests for boolean
+ ok( xx( [ [] ], $Wx::_b ), "$t: boolean matches reference" );
+ ok( xx( [ 1 ], $Wx::_b ), "$t: boolean matches integer" );
+ ok( xx( [ 0 ], $Wx::_b ), "$t: boolean matches zero" );
+ ok( xx( [ undef ], $Wx::_b ), "$t: boolean matches literal undef" );
+ ok( xx( [ $undef ], $Wx::_b ), "$t: boolean matches undefined variable" );
+ ok( xx( [ 'foo' ], $Wx::_b ), "$t: boolean matches string" );
+
+ # test for string
+ ok( xx( [ [] ], $Wx::_s ), "$t: string matches reference" );
+ ok( xx( [ 1 ], $Wx::_s ), "$t: string matches integer" );
+ ok( xx( [ 0 ], $Wx::_s ), "$t: string matches zero" );
+ ok( xx( [ undef ], $Wx::_s ), "$t: string matches literal undef" );
+ ok( xx( [ $undef ], $Wx::_s ), "$t: string matches undefined variable" );
+ ok( xx( [ 'foo' ], $Wx::_s ), "$t: string matches string" );
+
+ # test for number
+ ok( !xx( [ [] ], $Wx::_n ), "$t: number does not match reference" );
+ ok( xx( [ 1 ], $Wx::_n ), "$t: number matches integer" );
+ ok( xx( [ 0 ], $Wx::_n ), "$t: number matches zero" );
+ ok( xx( [ 1.2 ], $Wx::_n ), "$t: number matches floating point" );
+ ok( xx( [ 0.0 ], $Wx::_n ), "$t: number matches floating point zero" );
+ ok( !xx( [ undef ], $Wx::_n ), "$t: number does not match literal undef" );
+ ok( !xx( [ $undef ], $Wx::_n ),
+ "$t: number does not match undefined variable" );
+ ok( !xx( [ 'foo' ], $Wx::_n ), "$t: number does not match string" );
+
+ # test Wx::Sizer
+ ok( !xx( [ [] ], $Wx::_wszr ),
+ "$t: Wx::Sizer does not match reference" );
+ ok( !xx( [ 1 ], $Wx::_wszr ), "$t: Wx::Sizer does not match integer" );
+ ok( !xx( [ 0 ], $Wx::_wszr ), "$t: Wx::Sizer does not match zero" );
+ ok( xx( [ undef ], $Wx::_wszr ), "$t: Wx::Sizer matches literal undef" );
+ ok( xx( [ $undef ], $Wx::_wszr ),
+ "$t: Wx::Sizer matches undefined variable" );
+ ok( !xx( [ 'foo' ], $Wx::_wszr ), "$t: Wx::Sizer does not match string" );
+ ok( xx( [ Wx::BoxSizer->new( Wx::wxVERTICAL() ) ], $Wx::_wszr ),
+ "$t: Wx::Sizer matches Wx::Sizer" );
+
+ # test Wx::Image
+ ok( !xx( [ [] ], $Wx::_wimg ),
+ "$t: Wx::Image does not match reference" );
+ ok( !xx( [ 1 ], $Wx::_wimg ), "$t: Wx::Image does not match integer" );
+ ok( !xx( [ 0 ], $Wx::_wimg ), "$t: Wx::Image does not match zero" );
+ ok( xx( [ undef ], $Wx::_wimg ), "$t: Wx::Image matches literal undef" );
+ ok( xx( [ $undef ], $Wx::_wimg ),
+ "$t: Wx::Image matches undefined variable" );
+ ok( !xx( [ 'foo' ], $Wx::_wimg ), "$t: Wx::Image does not match string" );
+ ok( xx( [ Wx::Image->new( 1, 2 ) ], $Wx::_wimg ),
+ "$t: Wx::Image matches Wx::Image" );
+
+ # test for Wx::Point/Wx::Size
+ ok( xx( [ [] ], $Wx::_wpoi ),
+ "$t: Wx::Point matches ARRAY reference" );
+ ok( !xx( [ {} ], $Wx::_wpoi ),
+ "$t: Wx::Point does not match other reference" );
+ ok( !xx( [ 1 ], $Wx::_wpoi ), "$t: Wx::Point does not match integer" );
+ ok( !xx( [ 0 ], $Wx::_wpoi ), "$t: Wx::Point does not match zero" );
+ ok( xx( [ $undef ], $Wx::_wpoi ),
+ "$t: Wx::Point matches undefined variable" );
+ ok( !xx( [ 'foo' ], $Wx::_wpoi ), "$t: Wx::Point does not match string" );
+ ok( xx( [ Wx::Point->new( 1, 1 ) ], $Wx::_wpoi ),
+ "$t: Wx::Point matches Wx::Point" );
+ ok( xx( [ Wx::Size->new( 1, 2 ) ], $Wx::_wsiz ),
+ "$t: Wx::Size matches Wx::Size" );
+
+ # test for Wx::Input/OutputStream
+ ok( xx( [ [], 1 ], $Wx::_wist_n ),
+ "$t: Wx::InputStream matches references" );
+ ok( xx( [ {}, 1 ], $Wx::_wist_n ),
+ "$t: Wx::InputStream matches references (again)" );
+ ok( !xx( [ 1, 1 ], $Wx::_wist_n ),
+ "$t: Wx::InputStream does not match integer" );
+ ok( !xx( [ 'foo', 1 ], $Wx::_wist_n ),
+ "$t: Wx::InputStream does not match string" );
+ ok( xx( [ undef, 1 ], $Wx::_wist_n ),
+ "$t: Wx::InputStream matches undef" );
+ ok( xx( [ *main::bar, 1 ], $Wx::_wist_n ),
+ "$t: Wx::InputStream matches typeglobs" );
+ *main::bar = *main::bar; # fool warning
+}
+