This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
df914fc77ff8da161dd5698991b819a064168235
[perl5.git] / ext / XS-APItest / t / svpeek.t
1 use strict;
2 use warnings;
3
4 use Test::More tests => 52;
5
6 BEGIN { use_ok('XS::APItest') };
7
8 $| = 1;
9
10   is (DPeek ($/),    'PVMG("\n"\0)',            '$/');
11   is (DPeek ($\),    'PVMG()',                  '$\\');
12   is (DPeek ($.),    'PVMG()',                  '$.');
13   is (DPeek ($,),    'UNDEF',                   '$,');
14   is (DPeek ($;),    'PV("\34"\0)',             '$;');
15   is (DPeek ($"),    'PV(" "\0)',               '$"');
16   is (DPeek ($:),    'PVMG(" \n-"\0)',          '$:');
17   is (DPeek ($~),    'PVMG()',                  '$~');
18   is (DPeek ($^),    'PVMG()',                  '$^');
19   is (DPeek ($=),    'PVMG()',                  '$=');
20   is (DPeek ($-),    'PVMG()',                  '$-');
21 like (DPeek ($!), qr'^PVMG\("',                 '$!');
22 if ($^O eq 'VMS') {
23   # VMS defines COMPLEX_STATUS and upgrades $? to PVLV
24   is (DPeek ($?),    'PVLV()',                  '$?');
25 } else {
26   is (DPeek ($?),    'PVMG()',                  '$?');
27 }
28   is (DPeek ($|),    'PVMG(1)',                 '$|');
29
30   "abc" =~ m/b/;        # Don't know why these magic vars have this content
31   () = $1 || '';
32   is (DPeek ($1),    'PVMG()',                  ' $1');
33   is (DPeek ($`),    'PVMG()',                  ' $`');
34   is (DPeek ($&),    'PVMG()',                  ' $&');
35   is (DPeek ($'),    'PVMG()',                  " \$'");
36
37   is (DPeek (undef), 'SV_UNDEF',                'undef');
38   is (DPeek (1),     'IV(1)',                   'constant 1');
39   is (DPeek (""),    'PV(""\0)',                'constant ""');
40   is (DPeek (1.),    'NV(1)',                   'constant 1.');
41   is (DPeek (\1),    '\IV(1)',                  'constant \1');
42   is (DPeek (\\1),   '\\\IV(1)',                'constant \\\1');
43
44   is (DPeek (\@ARGV),   '\AV()',                '\@ARGV');
45   is (DPeek (\@INC),    '\AV()',                '\@INC');
46   is (DPeek (\%INC),    '\HV()',                '\%INC');
47   is (DPeek (*STDOUT),  'GV()',                 '*STDOUT');
48   is (DPeek (sub {}),   '\CV(__ANON__)',        'sub {}');
49
50 { our ($VAR, @VAR, %VAR);
51 if ($^O eq 'vos') {
52   # VOS uses .pm as a required executable suffix
53   open VAR, "<", "$^X.pm" or die "Can't open $^X.pm: $!";
54 } else {
55   open VAR, "<", $^X or die "Can't open $^X: $!";
56 }
57   sub VAR {}
58   format VAR =
59 .
60
61   is (DPeek ( $VAR),    'UNDEF',                ' $VAR undef');
62   is (DPeek (\$VAR),    '\UNDEF',               '\$VAR undef');
63   $VAR = 1;
64   is (DPeek ($VAR),     'IV(1)',                ' $VAR 1');
65   is (DPeek (\$VAR),    '\IV(1)',               '\$VAR 1');
66   $VAR = "";
67   is (DPeek ($VAR),     'PVIV(""\0)',           ' $VAR ""');
68   is (DPeek (\$VAR),    '\PVIV(""\0)',          '\$VAR ""');
69   $VAR = "\xa8";
70   is (DPeek ($VAR),     'PVIV("\250"\0)',       ' $VAR "\xa8"');
71   is (DPeek (\$VAR),    '\PVIV("\250"\0)',      '\$VAR "\xa8"');
72   $VAR = "a\x0a\x{20ac}";
73   is (DPeek ($VAR), 'PVIV("a\n\342\202\254"\0) [UTF8 "a\n\x{20ac}"]',
74                                         ' $VAR "a\x0a\x{20ac}"');
75   $VAR = sub { "VAR" };
76   is (DPeek ($VAR),     '\CV(__ANON__)',        ' $VAR sub { "VAR" }');
77   is (DPeek (\$VAR),    '\\\CV(__ANON__)',      '\$VAR sub { "VAR" }');
78   
79   $VAR = eval qq{sub \x{30cd} { "VAR" } \\&\x{30cd}};
80   is (DPeek ($VAR),     '\CV(\x{30cd})',        ' $VAR sub \x{30cd} { "VAR" }');
81   is (DPeek (\$VAR),    '\\\\CV(\x{30cd})',      '\$VAR sub \x{30cd} { "VAR" }');
82
83   $VAR = 0;
84
85   is (DPeek (\&VAR),    '\CV(VAR)',             '\&VAR');
86   is (DPeek ( *VAR),    'GV()',                 ' *VAR');
87
88   is (DPeek (*VAR{GLOB}),       '\GV()',        ' *VAR{GLOB}');
89 like (DPeek (*VAR{SCALAR}), qr'\\PV(IV|MG)\(0\)',' *VAR{SCALAR}');
90   is (DPeek (*VAR{ARRAY}),      '\AV()',        ' *VAR{ARRAY}');
91   is (DPeek (*VAR{HASH}),       '\HV()',        ' *VAR{HASH}');
92   is (DPeek (*VAR{CODE}),       '\CV(VAR)',     ' *VAR{CODE}');
93   is (DPeek (*VAR{IO}),         '\IO()',        ' *VAR{IO}');
94   is (DPeek (*VAR{FORMAT}),$]<5.008?'SV_UNDEF':'\FM()',' *VAR{FORMAT}');
95   }
96
97 1;