# (X)Emacs mode: -*- cperl -*-
use strict;
=head1 Unit Test Package for Class::MethodMaker
This package tests the ability of Class::MethodMaker to insert methods into a
class other than the "Calling" class.
=cut
use Data::Dumper qw( Dumper );
use Fatal 1.02 qw( sysopen close );
use Fcntl 1.03 qw( :DEFAULT );
use File::stat qw( stat );
use FindBin 1.42 qw( $Bin $Script );
use IO::File 1.08 qw( );
use POSIX 1.03 qw( S_ISREG );
use Test 1.13 qw( ok plan );
use lib $Bin;
use test qw( DATA_DIR
evcheck restore_output save_output );
BEGIN {
# 1 for compilation test,
plan tests => 22,
todo => [],
}
# ----------------------------------------------------------------------------
=head2 Test 1: compilation
This test confirms that the test script and the modules it calls compiled
successfully.
=cut
use Class::MethodMaker
[ -target_class => 'X',
scalar => [qw/ a /],
-target_class => 'Y',
scalar => [qw/ b /],
];
ok 1, 1, 'compilation';
# -------------------------------------
=head2 Test 2: bless
=cut
my ($x, $y);
ok evcheck(sub { $x = bless {}, 'X'; $y = bless {}, 'Y'; },
'bless ( 1)'), 1, 'bless ( 1)';
goto "TEST_$ENV{START_TEST}"
if $ENV{START_TEST};
# -------------------------------------
=head2 Tests 3--22: simple non-static
=cut
{
my $n;
ok(evcheck(sub { $n = $x->a_isset; }, 'simple non-static ( 1)'), 1,
'simple non-static ( 1)');
ok ! $n; # simple non-static ( 2)
ok(evcheck(sub { $n = $x->b_isset; }, 'simple non-static ( 3)'), 0,
'simple non-static ( 3)');
ok(evcheck(sub { $n = $y->b_isset; }, 'simple non-static ( 4)'), 1,
'simple non-static ( 4)');
ok(evcheck(sub { $x->a(4); }, 'simple non-static ( 5)'),
1, 'simple non-static ( 5)');
ok(evcheck(sub { $n = $x->a; }, 'simple non-static ( 6)'), 1,
'simple non-static ( 6)');
ok $n, 4, 'simple non-static ( 7)';
ok(evcheck(sub { $n = $x->a(7); }, 'simple non-static ( 8)'), 1,
'simple non-static ( 8)');
ok $n, 7, 'simple non-static ( 9)';
ok(evcheck(sub { $n = $x->a_isset; }, 'simple non-static (10)'), 1,
'simple non-static (10)');
ok $n; # simple non-static (11)
ok(evcheck(sub { $n = $y->b_isset; }, 'simple non-static (12)'), 1,
'simple non-static (12)');
ok ! $n; # simple non-static (13)
ok(evcheck(sub { $n = $x->a_reset; }, 'simple non-static (14)'), 1,
'simple non-static (14)');
ok(evcheck(sub { $n = $x->a_isset; }, 'simple non-static (15)'), 1,
'simple non-static (15)');
ok ! $n; # simple non-static (16)
ok(evcheck(sub { $n = $x->a; }, 'simple non-static (17)'), 1,
'simple non-static (17)');
ok $n, undef, 'simple non-static (18)';
ok(evcheck(sub { $n = $x->a_isset; }, 'simple non-static (19)'), 1,
'simple non-static (19)');
ok ! $n; # simple non-static (20)
}
# -------------------------------------