Commit | Line | Data |
adfe19db |
1 | ################################################################################ |
2 | # |
3 | # !!!!! Do NOT edit this file directly! !!!!! |
4 | # |
5 | # Edit mktests.PL and/or parts/inc/call instead. |
6 | # |
7 | ################################################################################ |
8 | |
9 | BEGIN { |
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 | |
35 | use Devel::PPPort; |
36 | use strict; |
37 | $^W = 1; |
38 | |
39 | sub eq_array |
40 | { |
41 | my($a, $b) = @_; |
42 | join(':', @$a) eq join(':', @$b); |
43 | } |
44 | |
45 | sub f |
46 | { |
47 | shift; |
48 | unshift @_, 'b'; |
49 | pop @_; |
50 | @_, defined wantarray ? wantarray ? 'x' : 'y' : 'z'; |
51 | } |
52 | |
53 | my $obj = bless [], 'Foo'; |
54 | |
55 | sub Foo::meth |
56 | { |
57 | return 'bad_self' unless @_ && ref $_[0] && ref($_[0]) eq 'Foo'; |
58 | shift; |
59 | shift; |
60 | unshift @_, 'b'; |
61 | pop @_; |
62 | @_, defined wantarray ? wantarray ? 'x' : 'y' : 'z'; |
63 | } |
64 | |
65 | my $test; |
66 | |
67 | for $test ( |
68 | # flags args expected description |
69 | [ &Devel::PPPort::G_SCALAR, [ ], [ qw(y 1) ], '0 args, G_SCALAR' ], |
70 | [ &Devel::PPPort::G_SCALAR, [ qw(a p q) ], [ qw(y 1) ], '3 args, G_SCALAR' ], |
71 | [ &Devel::PPPort::G_ARRAY, [ ], [ qw(x 1) ], '0 args, G_ARRAY' ], |
72 | [ &Devel::PPPort::G_ARRAY, [ qw(a p q) ], [ qw(b p x 3) ], '3 args, G_ARRAY' ], |
73 | [ &Devel::PPPort::G_DISCARD, [ ], [ qw(0) ], '0 args, G_DISCARD' ], |
74 | [ &Devel::PPPort::G_DISCARD, [ qw(a p q) ], [ qw(0) ], '3 args, G_DISCARD' ], |
75 | ) |
76 | { |
77 | my ($flags, $args, $expected, $description) = @$test; |
78 | print "# --- $description ---\n"; |
79 | ok(eq_array( [ &Devel::PPPort::call_sv(\&f, $flags, @$args) ], $expected)); |
80 | ok(eq_array( [ &Devel::PPPort::call_sv(*f, $flags, @$args) ], $expected)); |
81 | ok(eq_array( [ &Devel::PPPort::call_sv('f', $flags, @$args) ], $expected)); |
82 | ok(eq_array( [ &Devel::PPPort::call_pv('f', $flags, @$args) ], $expected)); |
83 | ok(eq_array( [ &Devel::PPPort::call_argv('f', $flags, @$args) ], $expected)); |
84 | ok(eq_array( [ &Devel::PPPort::eval_sv("f(qw(@$args))", $flags) ], $expected)); |
85 | ok(eq_array( [ &Devel::PPPort::call_method('meth', $flags, $obj, @$args) ], $expected)); |
86 | }; |
87 | |
88 | ok(&Devel::PPPort::eval_pv('f()', 0), 'y'); |
89 | ok(&Devel::PPPort::eval_pv('f(qw(a b c))', 0), 'y'); |
90 | |