1N/A#!./perl -- -*- mode: cperl; cperl-indent-level: 4 -*-
1N/A
1N/ABEGIN {
1N/A chdir 't' if -d 't';
1N/A @INC = '../lib';
1N/A}
1N/A
1N/Ause strict;
1N/A
1N/A$|=1;
1N/A
1N/Amy @prgs;
1N/A{
1N/A local $/;
1N/A @prgs = split "########\n", <DATA>;
1N/A close DATA;
1N/A}
1N/A
1N/Ause Test::More;
1N/A
1N/Aplan tests => scalar @prgs;
1N/A
1N/Arequire "dumpvar.pl";
1N/A
1N/Asub unctrl { print dumpvar::unctrl($_[0]), "\n" }
1N/Asub uniescape { print dumpvar::uniescape($_[0]), "\n" }
1N/Asub stringify { print dumpvar::stringify($_[0]), "\n" }
1N/Asub dumpvalue {
1N/A # Call main::dumpValue exactly as the perl5db.pl calls it.
1N/A local $\ = '';
1N/A local $, = '';
1N/A local $" = ' ';
1N/A my @params = @_;
1N/A &main::dumpValue(\@params,-1);
1N/A}
1N/A
1N/Apackage Foo;
1N/A
1N/Asub new { my $class = shift; bless [ @_ ], $class }
1N/A
1N/Apackage Bar;
1N/A
1N/Asub new { my $class = shift; bless [ @_ ], $class }
1N/A
1N/Ause overload '""' => sub { "Bar<@{$_[0]}>" };
1N/A
1N/Apackage main;
1N/A
1N/Amy $foo = Foo->new(1..5);
1N/Amy $bar = Bar->new(1..5);
1N/A
1N/Afor (@prgs) {
1N/A my($prog, $expected) = split(/\nEXPECT\n?/, $_);
1N/A # TODO: dumpvar::stringify() is controlled by a pile of package
1N/A # dumpvar variables: $printUndef, $unctrl, $quoteHighBit, $bareStringify,
1N/A # and so forth. We need to test with various settings of those.
1N/A my $out = tie *STDOUT, 'TieOut';
1N/A eval $prog;
1N/A my $ERR = $@;
1N/A untie $out;
1N/A if ($ERR) {
1N/A ok(0, "$prog - $ERR");
1N/A } else {
1N/A if ($expected =~ m:^/:) {
1N/A like($$out, $expected, $prog);
1N/A } else {
1N/A is($$out, $expected, $prog);
1N/A }
1N/A }
1N/A}
1N/A
1N/Apackage TieOut;
1N/A
1N/Asub TIEHANDLE {
1N/A bless( \(my $self), $_[0] );
1N/A}
1N/A
1N/Asub PRINT {
1N/A my $self = shift;
1N/A $$self .= join('', @_);
1N/A}
1N/A
1N/Asub read {
1N/A my $self = shift;
1N/A substr( $$self, 0, length($$self), '' );
1N/A}
1N/A
1N/A__END__
1N/Aunctrl("A");
1N/AEXPECT
1N/AA
1N/A########
1N/Aunctrl("\cA");
1N/AEXPECT
1N/A^A
1N/A########
1N/Auniescape("A");
1N/AEXPECT
1N/AA
1N/A########
1N/Auniescape("\x{100}");
1N/AEXPECT
1N/A\x{0100}
1N/A########
1N/Astringify(undef);
1N/AEXPECT
1N/Aundef
1N/A########
1N/Astringify("foo");
1N/AEXPECT
1N/A'foo'
1N/A########
1N/Astringify("\cA");
1N/AEXPECT
1N/A"\cA"
1N/A########
1N/Astringify(*a);
1N/AEXPECT
1N/A*main::a
1N/A########
1N/Astringify(\undef);
1N/AEXPECT
1N/A/^'SCALAR\(0x[0-9a-f]+\)'$/i
1N/A########
1N/Astringify([]);
1N/AEXPECT
1N/A/^'ARRAY\(0x[0-9a-f]+\)'$/i
1N/A########
1N/Astringify({});
1N/AEXPECT
1N/A/^'HASH\(0x[0-9a-f]+\)'$/i
1N/A########
1N/Astringify(sub{});
1N/AEXPECT
1N/A/^'CODE\(0x[0-9a-f]+\)'$/i
1N/A########
1N/Astringify(\*a);
1N/AEXPECT
1N/A/^'GLOB\(0x[0-9a-f]+\)'$/i
1N/A########
1N/Astringify($foo);
1N/AEXPECT
1N/A/^'Foo=ARRAY\(0x[0-9a-f]+\)'$/i
1N/A########
1N/Astringify($bar);
1N/AEXPECT
1N/A/^'Bar=ARRAY\(0x[0-9a-f]+\)'$/i
1N/A########
1N/AdumpValue(undef);
1N/AEXPECT
1N/Aundef
1N/A########
1N/AdumpValue(1);
1N/AEXPECT
1N/A1
1N/A########
1N/AdumpValue("\cA");
1N/AEXPECT
1N/A"\cA"
1N/A########
1N/AdumpValue("\x{100}");
1N/AEXPECT
1N/A'\x{0100}'
1N/A########
1N/AdumpValue("1\n2\n3");
1N/AEXPECT
1N/A'1
1N/A2
1N/A3'
1N/A########
1N/AdumpValue([1..3],1);
1N/AEXPECT
1N/A0 1
1N/A1 2
1N/A2 3
1N/A########
1N/AdumpValue([1..3]);
1N/AEXPECT
1N/A0 1
1N/A1 2
1N/A2 3
1N/A########
1N/AdumpValue({1..4},1);
1N/AEXPECT
1N/A1 => 2
1N/A3 => 4
1N/A########
1N/AdumpValue({1..4});
1N/AEXPECT
1N/A1 => 2
1N/A3 => 4
1N/A########
1N/AdumpValue($foo,1);
1N/AEXPECT
1N/A0 1
1N/A1 2
1N/A2 3
1N/A3 4
1N/A4 5
1N/A########
1N/AdumpValue($foo);
1N/AEXPECT
1N/A0 1
1N/A1 2
1N/A2 3
1N/A3 4
1N/A4 5
1N/A########
1N/AdumpValue($bar,1);
1N/AEXPECT
1N/A0 1
1N/A1 2
1N/A2 3
1N/A3 4
1N/A4 5
1N/A########
1N/AdumpValue($bar);
1N/AEXPECT
1N/A0 1
1N/A1 2
1N/A2 3
1N/A3 4
1N/A4 5
1N/A########
1N/Adumpvalue("a");
1N/AEXPECT
1N/A0 'a'
1N/A########
1N/Adumpvalue("\cA");
1N/AEXPECT
1N/A0 "\cA"
1N/A########
1N/Adumpvalue("\x{100}");
1N/AEXPECT
1N/A0 '\x{0100}'
1N/A########
1N/Adumpvalue(undef);
1N/AEXPECT
1N/A0 undef
1N/A########
1N/Adumpvalue("foo");
1N/AEXPECT
1N/A0 'foo'
1N/A########
1N/Adumpvalue(\undef);
1N/AEXPECT
1N/A/0 SCALAR\(0x[0-9a-f]+\)\n -> undef\n/i
1N/A########
1N/Adumpvalue(\\undef);
1N/AEXPECT
1N/A/0 REF\(0x[0-9a-f]+\)\n -> SCALAR\(0x[0-9a-f]+\)\n -> undef\n/i
1N/A########
1N/Adumpvalue([]);
1N/AEXPECT
1N/A/0 ARRAY\(0x[0-9a-f]+\)\n empty array/i
1N/A########
1N/Adumpvalue({});
1N/AEXPECT
1N/A/0 HASH\(0x[0-9a-f]+\)\n\s+empty hash/i
1N/A########
1N/Adumpvalue(sub{});
1N/AEXPECT
1N/A/0 CODE\(0x[0-9a-f]+\)\n -> &CODE\(0x[0-9a-f]+\) in /i
1N/A########
1N/Adumpvalue(\*a);
1N/AEXPECT
1N/A/0 GLOB\(0x[0-9a-f]+\)\n -> \*main::a\n/i
1N/A########
1N/Adumpvalue($foo);
1N/AEXPECT
1N/A/0 Foo=ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n 4 5\n/i
1N/A########
1N/Adumpvalue($bar);
1N/AEXPECT
1N/A/0 Bar=ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n 4 5\n/i
1N/A########
1N/Adumpvalue("1\n2\n3")
1N/AEXPECT
1N/A/0 '1\n2\n3'\n/i
1N/A########
1N/Adumpvalue([1..4]);
1N/AEXPECT
1N/A/0 ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 3 4\n/i
1N/A########
1N/Adumpvalue({1..4});
1N/AEXPECT
1N/A/0 HASH\(0x[0-9a-f]+\)\n 1 => 2\n 3 => 4\n/i
1N/A########
1N/Adumpvalue({1=>2,3=>4});
1N/AEXPECT
1N/A/0 HASH\(0x[0-9a-f]+\)\n 1 => 2\n 3 => 4\n/i
1N/A########
1N/Adumpvalue({a=>1,b=>2});
1N/AEXPECT
1N/A/0 HASH\(0x[0-9a-f]+\)\n 'a' => 1\n 'b' => 2\n/i
1N/A########
1N/Adumpvalue([{a=>[1,2,3],b=>{c=>1,d=>2}},{e=>{f=>1,g=>2},h=>[qw(i j k)]}]);
1N/AEXPECT
1N/A/0 ARRAY\(0x[0-9a-f]+\)\n 0 HASH\(0x[0-9a-f]+\)\n 'a' => ARRAY\(0x[0-9a-f]+\)\n 0 1\n 1 2\n 2 3\n 'b' => HASH\(0x[0-9a-f]+\)\n 'c' => 1\n 'd' => 2\n 1 HASH\(0x[0-9a-f]+\)\n 'e' => HASH\(0x[0-9a-f]+\)\n 'f' => 1\n 'g' => 2\n 'h' => ARRAY\(0x[0-9a-f]+\)\n 0 'i'\n 1 'j'\n 2 'k'/i
1N/A########
1N/Adumpvalue({reverse map {$_=>1} sort qw(the quick brown fox)})
1N/AEXPECT
1N/A/0 HASH\(0x[0-9a-f]+\)\n 1 => 'brown'\n/i
1N/A########
1N/Amy @x=qw(a b c); dumpvalue(\@x);
1N/AEXPECT
1N/A/0 ARRAY\(0x[0-9a-f]+\)\n 0 'a'\n 1 'b'\n 2 'c'\n/i
1N/A########
1N/Amy %x=(a=>1, b=>2); dumpvalue(\%x);
1N/AEXPECT
1N/A/0 HASH\(0x[0-9a-f]+\)\n 'a' => 1\n 'b' => 2\n/i