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