perltodo.pod: add perlio todos/thinkabouts
[p5sagit/p5-mst-13.2.git] / ext / Devel / PPPort / t / call.t
CommitLineData
adfe19db 1################################################################################
2#
3# !!!!! Do NOT edit this file directly! !!!!!
4#
5# Edit mktests.PL and/or parts/inc/call instead.
6#
7################################################################################
8
9BEGIN {
10 if ($ENV{'PERL_CORE'}) {
11 chdir 't' if -d 't';
12 @INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';
13 require Config; import Config;
14 use vars '%Config';
a745474a 15 if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {
adfe19db 16 print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";
17 exit 0;
18 }
19 }
20 else {
21 unshift @INC, 't';
22 }
23
c07deaaf 24 sub load {
25 eval "use Test";
26 require 'testutil.pl' if $@;
adfe19db 27 }
c07deaaf 28
29 if (44) {
30 load();
adfe19db 31 plan(tests => 44);
32 }
33}
34
35use Devel::PPPort;
36use strict;
37$^W = 1;
38
236afa0a 39package Devel::PPPort;
40use vars '@ISA';
41require DynaLoader;
42@ISA = qw(DynaLoader);
43bootstrap Devel::PPPort;
44
45package main;
46
adfe19db 47sub eq_array
48{
49 my($a, $b) = @_;
50 join(':', @$a) eq join(':', @$b);
51}
52
53sub f
54{
55 shift;
56 unshift @_, 'b';
57 pop @_;
58 @_, defined wantarray ? wantarray ? 'x' : 'y' : 'z';
59}
60
61my $obj = bless [], 'Foo';
62
63sub Foo::meth
64{
65 return 'bad_self' unless @_ && ref $_[0] && ref($_[0]) eq 'Foo';
66 shift;
67 shift;
68 unshift @_, 'b';
69 pop @_;
70 @_, defined wantarray ? wantarray ? 'x' : 'y' : 'z';
71}
72
73my $test;
74
75for $test (
76 # flags args expected description
77 [ &Devel::PPPort::G_SCALAR, [ ], [ qw(y 1) ], '0 args, G_SCALAR' ],
78 [ &Devel::PPPort::G_SCALAR, [ qw(a p q) ], [ qw(y 1) ], '3 args, G_SCALAR' ],
79 [ &Devel::PPPort::G_ARRAY, [ ], [ qw(x 1) ], '0 args, G_ARRAY' ],
80 [ &Devel::PPPort::G_ARRAY, [ qw(a p q) ], [ qw(b p x 3) ], '3 args, G_ARRAY' ],
81 [ &Devel::PPPort::G_DISCARD, [ ], [ qw(0) ], '0 args, G_DISCARD' ],
82 [ &Devel::PPPort::G_DISCARD, [ qw(a p q) ], [ qw(0) ], '3 args, G_DISCARD' ],
83)
84{
85 my ($flags, $args, $expected, $description) = @$test;
86 print "# --- $description ---\n";
87 ok(eq_array( [ &Devel::PPPort::call_sv(\&f, $flags, @$args) ], $expected));
88 ok(eq_array( [ &Devel::PPPort::call_sv(*f, $flags, @$args) ], $expected));
89 ok(eq_array( [ &Devel::PPPort::call_sv('f', $flags, @$args) ], $expected));
90 ok(eq_array( [ &Devel::PPPort::call_pv('f', $flags, @$args) ], $expected));
91 ok(eq_array( [ &Devel::PPPort::call_argv('f', $flags, @$args) ], $expected));
92 ok(eq_array( [ &Devel::PPPort::eval_sv("f(qw(@$args))", $flags) ], $expected));
93 ok(eq_array( [ &Devel::PPPort::call_method('meth', $flags, $obj, @$args) ], $expected));
94};
95
96ok(&Devel::PPPort::eval_pv('f()', 0), 'y');
97ok(&Devel::PPPort::eval_pv('f(qw(a b c))', 0), 'y');
98