| [3181] | 1 | #!./perl -- -*- mode: cperl; cperl-indent-level: 4 -*-
|
|---|
| 2 |
|
|---|
| 3 | BEGIN {
|
|---|
| 4 | chdir 't' if -d 't';
|
|---|
| 5 | @INC = '../lib';
|
|---|
| 6 | require Config;
|
|---|
| 7 | if (($Config::Config{'extensions'} !~ m!\bList/Util\b!) ){
|
|---|
| 8 | print "1..0 # Skip -- Perl configured without List::Util module\n";
|
|---|
| 9 | exit 0;
|
|---|
| 10 | }
|
|---|
| 11 | }
|
|---|
| 12 |
|
|---|
| 13 | use strict;
|
|---|
| 14 |
|
|---|
| 15 | $|=1;
|
|---|
| 16 |
|
|---|
| 17 | my @prgs;
|
|---|
| 18 | {
|
|---|
| 19 | local $/;
|
|---|
| 20 | @prgs = split "########\n", <DATA>;
|
|---|
| 21 | close DATA;
|
|---|
| 22 | }
|
|---|
| 23 |
|
|---|
| 24 | use Test::More;
|
|---|
| 25 |
|
|---|
| 26 | plan tests => scalar @prgs;
|
|---|
| 27 |
|
|---|
| 28 | require "dumpvar.pl";
|
|---|
| 29 |
|
|---|
| 30 | sub unctrl { print dumpvar::unctrl($_[0]), "\n" }
|
|---|
| 31 | sub uniescape { print dumpvar::uniescape($_[0]), "\n" }
|
|---|
| 32 | sub stringify { print dumpvar::stringify($_[0]), "\n" }
|
|---|
| 33 | sub dumpvalue {
|
|---|
| 34 | # Call main::dumpValue exactly as the perl5db.pl calls it.
|
|---|
| 35 | local $\ = '';
|
|---|
| 36 | local $, = '';
|
|---|
| 37 | local $" = ' ';
|
|---|
| 38 | my @params = @_;
|
|---|
| 39 | &main::dumpValue(\@params,-1);
|
|---|
| 40 | }
|
|---|
| 41 |
|
|---|
| 42 | package Foo;
|
|---|
| 43 |
|
|---|
| 44 | sub new { my $class = shift; bless [ @_ ], $class }
|
|---|
| 45 |
|
|---|
| 46 | package Bar;
|
|---|
| 47 |
|
|---|
| 48 | sub new { my $class = shift; bless [ @_ ], $class }
|
|---|
| 49 |
|
|---|
| 50 | use overload '""' => sub { "Bar<@{$_[0]}>" };
|
|---|
| 51 |
|
|---|
| 52 | package main;
|
|---|
| 53 |
|
|---|
| 54 | my $foo = Foo->new(1..5);
|
|---|
| 55 | my $bar = Bar->new(1..5);
|
|---|
| 56 |
|
|---|
| 57 | for (@prgs) {
|
|---|
| 58 | my($prog, $expected) = split(/\nEXPECT\n?/, $_);
|
|---|
| 59 | # TODO: dumpvar::stringify() is controlled by a pile of package
|
|---|
| 60 | # dumpvar variables: $printUndef, $unctrl, $quoteHighBit, $bareStringify,
|
|---|
| 61 | # and so forth. We need to test with various settings of those.
|
|---|
| 62 | my $out = tie *STDOUT, 'TieOut';
|
|---|
| 63 | eval $prog;
|
|---|
| 64 | my $ERR = $@;
|
|---|
| 65 | untie $out;
|
|---|
| 66 | if ($ERR) {
|
|---|
| 67 | ok(0, "$prog - $ERR");
|
|---|
| 68 | } else {
|
|---|
| 69 | if ($expected =~ m:^/:) {
|
|---|
| 70 | like($$out, $expected, $prog);
|
|---|
| 71 | } else {
|
|---|
| 72 | is($$out, $expected, $prog);
|
|---|
| 73 | }
|
|---|
| 74 | }
|
|---|
| 75 | }
|
|---|
| 76 |
|
|---|
| 77 | package TieOut;
|
|---|
| 78 |
|
|---|
| 79 | sub TIEHANDLE {
|
|---|
| 80 | bless( \(my $self), $_[0] );
|
|---|
| 81 | }
|
|---|
| 82 |
|
|---|
| 83 | sub PRINT {
|
|---|
| 84 | my $self = shift;
|
|---|
| 85 | $$self .= join('', @_);
|
|---|
| 86 | }
|
|---|
| 87 |
|
|---|
| 88 | sub read {
|
|---|
| 89 | my $self = shift;
|
|---|
| 90 | substr( $$self, 0, length($$self), '' );
|
|---|
| 91 | }
|
|---|
| 92 |
|
|---|
| 93 | __END__
|
|---|
| 94 | unctrl("A");
|
|---|
| 95 | EXPECT
|
|---|
| 96 | A
|
|---|
| 97 | ########
|
|---|
| 98 | unctrl("\cA");
|
|---|
| 99 | EXPECT
|
|---|
| 100 | ^A
|
|---|
| 101 | ########
|
|---|
| 102 | uniescape("A");
|
|---|
| 103 | EXPECT
|
|---|
| 104 | A
|
|---|
| 105 | ########
|
|---|
| 106 | uniescape("\x{100}");
|
|---|
| 107 | EXPECT
|
|---|
| 108 | \x{0100}
|
|---|
| 109 | ########
|
|---|
| 110 | stringify(undef);
|
|---|
| 111 | EXPECT
|
|---|
| 112 | undef
|
|---|
| 113 | ########
|
|---|
| 114 | stringify("foo");
|
|---|
| 115 | EXPECT
|
|---|
| 116 | 'foo'
|
|---|
| 117 | ########
|
|---|
| 118 | stringify("\cA");
|
|---|
| 119 | EXPECT
|
|---|
| 120 | "\cA"
|
|---|
| 121 | ########
|
|---|
| 122 | stringify(*a);
|
|---|
| 123 | EXPECT
|
|---|
| 124 | *main::a
|
|---|
| 125 | ########
|
|---|
| 126 | stringify(\undef);
|
|---|
| 127 | EXPECT
|
|---|
| 128 | /^'SCALAR\(0x[0-9a-f]+\)'$/i
|
|---|
| 129 | ########
|
|---|
| 130 | stringify([]);
|
|---|
| 131 | EXPECT
|
|---|
| 132 | /^'ARRAY\(0x[0-9a-f]+\)'$/i
|
|---|
| 133 | ########
|
|---|
| 134 | stringify({});
|
|---|
| 135 | EXPECT
|
|---|
| 136 | /^'HASH\(0x[0-9a-f]+\)'$/i
|
|---|
| 137 | ########
|
|---|
| 138 | stringify(sub{});
|
|---|
| 139 | EXPECT
|
|---|
| 140 | /^'CODE\(0x[0-9a-f]+\)'$/i
|
|---|
| 141 | ########
|
|---|
| 142 | stringify(\*a);
|
|---|
| 143 | EXPECT
|
|---|
| 144 | /^'GLOB\(0x[0-9a-f]+\)'$/i
|
|---|
| 145 | ########
|
|---|
| 146 | stringify($foo);
|
|---|
| 147 | EXPECT
|
|---|
| 148 | /^'Foo=ARRAY\(0x[0-9a-f]+\)'$/i
|
|---|
| 149 | ########
|
|---|
| 150 | stringify($bar);
|
|---|
| 151 | EXPECT
|
|---|
| 152 | /^'Bar=ARRAY\(0x[0-9a-f]+\)'$/i
|
|---|
| 153 | ########
|
|---|
| 154 | dumpValue(undef);
|
|---|
| 155 | EXPECT
|
|---|
| 156 | undef
|
|---|
| 157 | ########
|
|---|
| 158 | dumpValue(1);
|
|---|
| 159 | EXPECT
|
|---|
| 160 | 1
|
|---|
| 161 | ########
|
|---|
| 162 | dumpValue("\cA");
|
|---|
| 163 | EXPECT
|
|---|
| 164 | "\cA"
|
|---|
| 165 | ########
|
|---|
| 166 | dumpValue("\x{100}");
|
|---|
| 167 | EXPECT
|
|---|
| 168 | '\x{0100}'
|
|---|
| 169 | ########
|
|---|
| 170 | dumpValue("1\n2\n3");
|
|---|
| 171 | EXPECT
|
|---|
| 172 | '1
|
|---|
| 173 | 2
|
|---|
| 174 | 3'
|
|---|
| 175 | ########
|
|---|
| 176 | dumpValue([1..3],1);
|
|---|
| 177 | EXPECT
|
|---|
| 178 | 0 1
|
|---|
| 179 | 1 2
|
|---|
| 180 | 2 3
|
|---|
| 181 | ########
|
|---|
| 182 | dumpValue([1..3]);
|
|---|
| 183 | EXPECT
|
|---|
| 184 | 0 1
|
|---|
| 185 | 1 2
|
|---|
| 186 | 2 3
|
|---|
| 187 | ########
|
|---|
| 188 | dumpValue({1..4},1);
|
|---|
| 189 | EXPECT
|
|---|
| 190 | 1 => 2
|
|---|
| 191 | 3 => 4
|
|---|
| 192 | ########
|
|---|
| 193 | dumpValue({1..4});
|
|---|
| 194 | EXPECT
|
|---|
| 195 | 1 => 2
|
|---|
| 196 | 3 => 4
|
|---|
| 197 | ########
|
|---|
| 198 | dumpValue($foo,1);
|
|---|
| 199 | EXPECT
|
|---|
| 200 | 0 1
|
|---|
| 201 | 1 2
|
|---|
| 202 | 2 3
|
|---|
| 203 | 3 4
|
|---|
| 204 | 4 5
|
|---|
| 205 | ########
|
|---|
| 206 | dumpValue($foo);
|
|---|
| 207 | EXPECT
|
|---|
| 208 | 0 1
|
|---|
| 209 | 1 2
|
|---|
| 210 | 2 3
|
|---|
| 211 | 3 4
|
|---|
| 212 | 4 5
|
|---|
| 213 | ########
|
|---|
| 214 | dumpValue($bar,1);
|
|---|
| 215 | EXPECT
|
|---|
| 216 | 0 1
|
|---|
| 217 | 1 2
|
|---|
| 218 | 2 3
|
|---|
| 219 | 3 4
|
|---|
| 220 | 4 5
|
|---|
| 221 | ########
|
|---|
| 222 | dumpValue($bar);
|
|---|
| 223 | EXPECT
|
|---|
| 224 | 0 1
|
|---|
| 225 | 1 2
|
|---|
| 226 | 2 3
|
|---|
| 227 | 3 4
|
|---|
| 228 | 4 5
|
|---|
| 229 | ########
|
|---|
| 230 | dumpvalue("a");
|
|---|
| 231 | EXPECT
|
|---|
| 232 | 0 'a'
|
|---|
| 233 | ########
|
|---|
| 234 | dumpvalue("\cA");
|
|---|
| 235 | EXPECT
|
|---|
| |
|---|