This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Merge branch 'vlb' into blead
[perl5.git] / lib / dumpvar.t
index 9dddddc..3e48b17 100644 (file)
@@ -3,8 +3,9 @@
 BEGIN {
     chdir 't' if -d 't';
     @INC = '../lib';
-    unless (find PerlIO::Layer 'perlio') { # no perlio, no PerlIO::scalar.
-       print "1..0 # Skip: not perlio\n";
+    require Config;
+    if (($Config::Config{'extensions'} !~ m!\bList/Util\b!) ){
+       print "1..0 # Skip -- Perl configured without List::Util module\n";
        exit 0;
     }
 }
@@ -29,6 +30,14 @@ require "dumpvar.pl";
 sub unctrl    { print dumpvar::unctrl($_[0]), "\n" }
 sub uniescape { print dumpvar::uniescape($_[0]), "\n" }
 sub stringify { print dumpvar::stringify($_[0]), "\n" }
+sub dumpvalue { 
+       # Call main::dumpValue exactly as the perl5db.pl calls it.
+        local $\ = '';
+        local $, = '';
+        local $" = ' ';
+        my @params = @_;
+        &main::dumpValue(\@params,-1);
+}
 
 package Foo;
 
@@ -40,6 +49,16 @@ sub new { my $class = shift; bless [ @_ ], $class }
 
 use overload '""' => sub { "Bar<@{$_[0]}>" };
 
+package Tyre;
+
+sub TIESCALAR{bless[]}
+# other methods intentionally omitted
+
+package Kerb;
+
+sub TIEHASH{bless{}}
+# other methods intentionally omitted
+
 package main;
 
 my $foo = Foo->new(1..5);
@@ -170,11 +189,22 @@ EXPECT
 1  2
 2  3
 ########
+dumpValue([1..3]);
+EXPECT
+0  1
+1  2
+2  3
+########
 dumpValue({1..4},1);
 EXPECT
 1 => 2
 3 => 4
 ########
+dumpValue({1..4});
+EXPECT
+1 => 2
+3 => 4
+########
 dumpValue($foo,1);
 EXPECT
 0  1
@@ -183,6 +213,14 @@ EXPECT
 3  4
 4  5
 ########
+dumpValue($foo);
+EXPECT
+0  1
+1  2
+2  3
+3  4
+4  5
+########
 dumpValue($bar,1);
 EXPECT
 0  1
@@ -191,3 +229,114 @@ EXPECT
 3  4
 4  5
 ########
+dumpValue($bar);
+EXPECT
+0  1
+1  2
+2  3
+3  4
+4  5
+########
+dumpvalue("a");
+EXPECT
+0  'a'
+########
+dumpvalue("\cA");
+EXPECT
+0  "\cA"
+########
+dumpvalue("\x{100}");
+EXPECT
+0  '\x{0100}'
+########
+dumpvalue(undef);
+EXPECT
+0  undef
+########
+dumpvalue("foo");
+EXPECT
+0  'foo'
+########
+dumpvalue(\undef);
+EXPECT
+/0  SCALAR\(0x[0-9a-f]+\)\n   -> undef\n/i
+########
+dumpvalue(\\undef);
+EXPECT
+/0  REF\(0x[0-9a-f]+\)\n   -> SCALAR\(0x[0-9a-f]+\)\n         -> undef\n/i
+########
+dumpvalue([]);
+EXPECT
+/0  ARRAY\(0x[0-9a-f]+\)\n     empty array/i
+########
+dumpvalue({});
+EXPECT
+/0  HASH\(0x[0-9a-f]+\)\n\s+empty hash/i
+########
+dumpvalue(sub{});
+EXPECT
+/0  CODE\(0x[0-9a-f]+\)\n   -> &CODE\(0x[0-9a-f]+\) in /i
+########
+dumpvalue(\*a);
+EXPECT
+/0  GLOB\(0x[0-9a-f]+\)\n   -> \*main::a\n/i
+########
+dumpvalue($foo);
+EXPECT
+/0  Foo=ARRAY\(0x[0-9a-f]+\)\n   0  1\n   1  2\n   2  3\n   3  4\n   4  5\n/i
+########
+dumpvalue($bar);
+EXPECT
+/0  Bar=ARRAY\(0x[0-9a-f]+\)\n   0  1\n   1  2\n   2  3\n   3  4\n   4  5\n/i
+########
+dumpvalue("1\n2\n3")
+EXPECT
+/0  '1\n2\n3'\n/i
+########
+dumpvalue([1..4]);
+EXPECT
+/0  ARRAY\(0x[0-9a-f]+\)\n   0  1\n   1  2\n   2  3\n   3  4\n/i
+########
+dumpvalue({1..4});
+EXPECT
+/0  HASH\(0x[0-9a-f]+\)\n   1 => 2\n   3 => 4\n/i
+########
+dumpvalue({1=>2,3=>4});
+EXPECT
+/0  HASH\(0x[0-9a-f]+\)\n   1 => 2\n   3 => 4\n/i
+########
+dumpvalue({a=>1,b=>2});
+EXPECT
+/0  HASH\(0x[0-9a-f]+\)\n   'a' => 1\n   'b' => 2\n/i
+########
+dumpvalue([{a=>[1,2,3],b=>{c=>1,d=>2}},{e=>{f=>1,g=>2},h=>[qw(i j k)]}]);
+EXPECT
+/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
+########
+dumpvalue({reverse map {$_=>1} sort qw(the quick brown fox)})
+EXPECT
+/0  HASH\(0x[0-9a-f]+\)\n   1 => 'brown'\n/i
+########
+my @x=qw(a b c); dumpvalue(\@x);
+EXPECT
+/0  ARRAY\(0x[0-9a-f]+\)\n   0  'a'\n   1  'b'\n   2  'c'\n/i
+########
+my %x=(a=>1, b=>2); dumpvalue(\%x);
+EXPECT
+/0  HASH\(0x[0-9a-f]+\)\n   'a' => 1\n   'b' => 2\n/i
+########
+dumpvalue(bless[1,2,3,4],"a=b=c");
+EXPECT
+/0  a=b=c=ARRAY\(0x[0-9a-f]+\)\n   0  1\n   1  2\n   2  3\n   3  4\n/i
+########
+local *_; tie $_, 'Tyre'; stringify('');
+EXPECT
+''
+########
+local *_; tie $_, 'Tyre'; unctrl('abc');
+EXPECT
+abc
+########
+tie my %h, 'Kerb'; my $v = { a => 1, b => \%h, c => 2 }; dumpvalue($v);
+EXPECT
+/'a' => 1\n.+Can't locate object method.+'c' => 2/s