Blame t/callck.t

Packit b3426c
use warnings;
Packit b3426c
use strict;
Packit b3426c
Packit b3426c
BEGIN { unshift @INC, "./t/lib"; }
Packit b3426c
use Test::More tests => 79;
Packit b3426c
use t::LoadXS ();
Packit b3426c
use t::WriteHeader ();
Packit b3426c
Packit b3426c
t::WriteHeader::write_header("callchecker0", "t", "callck");
Packit b3426c
ok 1;
Packit b3426c
require_ok "Devel::CallChecker";
Packit b3426c
t::LoadXS::load_xs("callck", "t", [Devel::CallChecker::callchecker_linkable()]);
Packit b3426c
ok 1;
Packit b3426c
Packit b3426c
t::callck::test_cv_getset_call_checker();
Packit b3426c
ok 1;
Packit b3426c
Packit b3426c
my @z = ();
Packit b3426c
my @a = qw(a);
Packit b3426c
my @b = qw(a b);
Packit b3426c
my @c = qw(a b c);
Packit b3426c
Packit b3426c
my($foo_got, $foo_ret);
Packit b3426c
sub foo($@) { $foo_got = [ @_ ]; return "z"; }
Packit b3426c
Packit b3426c
sub bar (\@$) { }
Packit b3426c
sub baz { }
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ 2, qw(a b c) ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = &foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ qw(a b), qw(a b c) ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_lists(\&foo;;
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ qw(a b), qw(a b c) ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = &foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ qw(a b), qw(a b c) ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_scalars(\&foo;;
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ 2, 3 ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c, @a, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ 2, 3, 1, 3 ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ 2 ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo();};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = &foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ qw(a b), qw(a b c) ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto(\&foo, "\\\@\$");
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ \@b, 3 ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto(\&foo, undef);
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
like $@, qr/ with no proto[ ,]/;
Packit b3426c
is_deeply $foo_got, undef;
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto(\&foo, \&bar);
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ \@b, 3 ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto(\&foo, \&baz;;
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
like $@, qr/ with no proto[ ,]/;
Packit b3426c
is_deeply $foo_got, undef;
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto(\&foo, "\$");
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo();};
Packit b3426c
like $@, qr/\ANot enough arguments for main::foo /;
Packit b3426c
is_deeply $foo_got, undef;
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto(\&foo, "\$");
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(1,2);};
Packit b3426c
like $@, qr/\AToo many arguments for main::foo /;
Packit b3426c
is_deeply $foo_got, undef;
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto_or_list(\&foo, "\\\@\$");
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ \@b, 3 ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto_or_list(\&foo, undef);
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ qw(a b), qw(a b c) ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto_or_list(\&foo, \&bar);
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ \@b, 3 ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto_or_list(\&foo, \&baz;;
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, [ qw(a b), qw(a b c) ];
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto_or_list(\&foo, "\$");
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo();};
Packit b3426c
like $@, qr/\ANot enough arguments for main::foo /;
Packit b3426c
is_deeply $foo_got, undef;
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_proto_or_list(\&foo, "\$");
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(1,2);};
Packit b3426c
like $@, qr/\AToo many arguments for main::foo /;
Packit b3426c
is_deeply $foo_got, undef;
Packit b3426c
is $foo_ret, "z";
Packit b3426c
Packit b3426c
t::callck::cv_set_call_checker_multi_sum(\&foo;;
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, undef;
Packit b3426c
is $foo_ret, 5;
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, undef;
Packit b3426c
is $foo_ret, 2;
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo();};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, undef;
Packit b3426c
is $foo_ret, 0;
Packit b3426c
Packit b3426c
$foo_got = undef;
Packit b3426c
eval q{$foo_ret = foo(@b, @c, @a, @c);};
Packit b3426c
is $@, "";
Packit b3426c
is_deeply $foo_got, undef;
Packit b3426c
is $foo_ret, 9;
Packit b3426c
Packit b3426c
1;