summaryrefslogtreecommitdiffstats
path: root/gnu/usr.bin/perl/dist/Data-Dumper/t/recurse.t
blob: 275a89d23627f916ae850a6411ac1e6914a4a918 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!perl

# Test the Maxrecurse option

use strict;
use Test::More tests => 32;
use Data::Dumper;

SKIP: {
    skip "no XS available", 16
      if $Data::Dumper::Useperl;
    local $Data::Dumper::Useperl = 1;
    test_recursion();
}

test_recursion();

sub test_recursion {
    my $pp = $Data::Dumper::Useperl ? "pure perl" : "XS";
    $Data::Dumper::Purity = 1; # make sure this has no effect
    $Data::Dumper::Indent = 0;
    $Data::Dumper::Maxrecurse = 1;
    is(eval { Dumper([]) }, '$VAR1 = [];', "$pp: maxrecurse 1, []");
    is(eval { Dumper([[]]) }, undef, "$pp: maxrecurse 1, [[]]");
    ok($@, "exception thrown");
    is(eval { Dumper({}) }, '$VAR1 = {};', "$pp: maxrecurse 1, {}");
    is(eval { Dumper({ a => 1 }) }, q($VAR1 = {'a' => 1};),
       "$pp: maxrecurse 1, { a => 1 }");
    is(eval { Dumper({ a => {} }) }, undef, "$pp: maxrecurse 1, { a => {} }");
    ok($@, "exception thrown");
    is(eval { Dumper(\1) }, "\$VAR1 = \\1;", "$pp: maxrecurse 1, \\1");
    is(eval { Dumper(\\1) }, undef, "$pp: maxrecurse 1, \\1");
    ok($@, "exception thrown");
    $Data::Dumper::Maxrecurse = 3;
    is(eval { Dumper(\1) }, "\$VAR1 = \\1;", "$pp: maxrecurse 3, \\1");
    is(eval { Dumper(\(my $s = {})) }, "\$VAR1 = \\{};", "$pp: maxrecurse 3, \\{}");
    is(eval { Dumper(\(my $s = { a => [] })) }, "\$VAR1 = \\{'a' => []};",
       "$pp: maxrecurse 3, \\{ a => [] }");
    is(eval { Dumper(\(my $s = { a => [{}] })) }, undef,
       "$pp: maxrecurse 3, \\{ a => [{}] }");
    ok($@, "exception thrown");
    $Data::Dumper::Maxrecurse = 0;
    is(eval { Dumper([[[[[]]]]]) }, q($VAR1 = [[[[[]]]]];),
       "$pp: check Maxrecurse doesn't set limit to 0 recursion");
}