1#!perl 2 3# Test the Maxrecurse option 4 5use strict; 6use Test::More tests => 32; 7use Data::Dumper; 8 9SKIP: { 10 skip "no XS available", 16 11 if $Data::Dumper::Useperl; 12 local $Data::Dumper::Useperl = 1; 13 test_recursion(); 14} 15 16test_recursion(); 17 18sub test_recursion { 19 my $pp = $Data::Dumper::Useperl ? "pure perl" : "XS"; 20 $Data::Dumper::Purity = 1; # make sure this has no effect 21 $Data::Dumper::Indent = 0; 22 $Data::Dumper::Maxrecurse = 1; 23 is(eval { Dumper([]) }, '$VAR1 = [];', "$pp: maxrecurse 1, []"); 24 is(eval { Dumper([[]]) }, undef, "$pp: maxrecurse 1, [[]]"); 25 ok($@, "exception thrown"); 26 is(eval { Dumper({}) }, '$VAR1 = {};', "$pp: maxrecurse 1, {}"); 27 is(eval { Dumper({ a => 1 }) }, q($VAR1 = {'a' => 1};), 28 "$pp: maxrecurse 1, { a => 1 }"); 29 is(eval { Dumper({ a => {} }) }, undef, "$pp: maxrecurse 1, { a => {} }"); 30 ok($@, "exception thrown"); 31 is(eval { Dumper(\1) }, "\$VAR1 = \\1;", "$pp: maxrecurse 1, \\1"); 32 is(eval { Dumper(\\1) }, undef, "$pp: maxrecurse 1, \\1"); 33 ok($@, "exception thrown"); 34 $Data::Dumper::Maxrecurse = 3; 35 is(eval { Dumper(\1) }, "\$VAR1 = \\1;", "$pp: maxrecurse 3, \\1"); 36 is(eval { Dumper(\(my $s = {})) }, "\$VAR1 = \\{};", "$pp: maxrecurse 3, \\{}"); 37 is(eval { Dumper(\(my $s = { a => [] })) }, "\$VAR1 = \\{'a' => []};", 38 "$pp: maxrecurse 3, \\{ a => [] }"); 39 is(eval { Dumper(\(my $s = { a => [{}] })) }, undef, 40 "$pp: maxrecurse 3, \\{ a => [{}] }"); 41 ok($@, "exception thrown"); 42 $Data::Dumper::Maxrecurse = 0; 43 is(eval { Dumper([[[[[]]]]]) }, q($VAR1 = [[[[[]]]]];), 44 "$pp: check Maxrecurse doesn't set limit to 0 recursion"); 45} 46