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