xref: /openbsd/gnu/usr.bin/perl/cpan/Pod-Simple/t/stree.t (revision e5dd7070)
1
2
3use strict;
4use Test;
5BEGIN { plan tests => 33 };
6
7#use Pod::Simple::Debug (6);
8
9ok 1;
10
11use Pod::Simple::SimpleTree;
12print "# Pod::Simple version $Pod::Simple::VERSION\n";
13
14my $hashes_dont_matter = 0;
15
16
17my $x = 'Pod::Simple::SimpleTree';
18sub x {
19 my $p = $x->new;
20 $p->merge_text(1);
21 $p->parse_string_document( shift )->root;
22}
23
24ok 1;
25
26print "# a bit of meta-testing...\n";
27&ok( deq( 1,     1     ));
28&ok(!deq( 2,     1     ));
29
30&ok( deq( undef, undef ));
31&ok(!deq( undef, 1     ));
32&ok(!deq( 1,     undef ));
33
34&ok( deq( [ ],   [ ]    ));
35&ok(!deq( [ ],   1      ));
36&ok(!deq( 1,     [ ]    ));
37
38&ok( deq( [1],   [1]    ));
39&ok(!deq( [1],   1      ));
40&ok(!deq( 1,     [1]    ));
41&ok(!deq( [1],   [ ]    ));
42&ok(!deq( [ ],   [1]    ));
43&ok(!deq( [1],   [2]    ));
44&ok(!deq( [2],   [1]    ));
45
46&ok( deq( [ ],   [ ]    ));
47&ok(!deq( [ ],   1      ));
48&ok(!deq( 1,     [ ]    ));
49
50&ok( deq( {},    {}     ));
51&ok(!deq( {},    1      ));
52&ok(!deq( 1,     {}     ));
53&ok(!deq( {1,2}, {}     ));
54&ok(!deq( {},    {1,2}  ));
55&ok( deq( {1,2}, {1,2}  ));
56&ok(!deq( {2,1}, {1,2}  ));
57
58
59
60
61print '# ', Pod::Simple::pretty(x( "=pod\n\nI like pie.\n" )), "\n";
62print "# Making sure we get a tree at all...\n";
63ok x( "=pod\n\nI like pie.\n" );
64
65
66print "# Some real tests...\n";
67&ok( deq( x( "=pod\n\nI like pie.\n"),
68  [ "Document", {"start_line"=>1},
69    [ "Para",   {"start_line"=>3},
70      "I like pie."
71    ]
72  ]
73));
74
75$hashes_dont_matter = 1;
76
77&ok( deq( x("=pod\n\nB<foo\t>\n"),
78  [ "Document", {},
79    [ "Para",   {},
80      ["B",     {},
81        "foo "
82      ]
83    ]
84  ]
85));
86
87
88&ok( deq( x("=pod\n\nB<pieF<zorch>X<foo>I<pling>>\n"),
89  [ "Document", {},
90    [ "Para",   {},
91      ["B",     {},
92        "pie",
93        ['F',{}, 'zorch'],
94        ['X',{}, 'foo'  ],
95        ['I',{}, 'pling'],
96      ]
97    ]
98  ]
99));
100
101&ok( deq( x("=over\n\n=item B<pieF<zorch>X<foo>I<pling>>!\n\n=back"),
102  [ "Document", {},
103    [ "over-text", {},
104      [ "item-text", {},
105        ["B",     {},
106          "pie",
107          ['F',{}, 'zorch'],
108          ['X',{}, 'foo'  ],
109          ['I',{}, 'pling'],
110        ],
111        '!'
112      ]
113    ]
114  ]
115));
116
117print "# Wrapping up... one for the road...\n";
118ok 1;
119print "# --- Done with ", __FILE__, " --- \n";
120
121sub deq { # deep-equals
122  #print "# deq ", Pod::Simple::pretty($_[0], $_[1]), "\n";
123  return 1 unless defined $_[0] or defined $_[1]; # two undefs = same
124  return '' if defined $_[0] xor defined $_[1];
125  return '' if ref($_[0]) ne ref($_[1]); # unequal referentiality
126  return $_[0] eq $_[1] unless ref $_[0];
127  # So it's a ref:
128  if(UNIVERSAL::isa($_[0], 'ARRAY')) {
129    return '' unless @{$_[0]} == @{$_[1]};
130    for(my $i = 0; $i < @{$_[0]}; $i++) {
131      print("# NEQ ", Pod::Simple::pretty($_[0]),
132          "\n#  != ", Pod::Simple::pretty($_[1]), "\n"),
133       return '' unless deq($_[0][$i], $_[1][$i]); # recurse!
134    }
135    return 1;
136  } elsif(UNIVERSAL::isa($_[0], 'HASH')) {
137    return 1 if $hashes_dont_matter;
138    return '' unless keys %{$_[0]} == keys %{$_[1]};
139    foreach my $k (keys %{$_[0]}) {
140      return '' unless exists $_[1]{$k};
141      return '' unless deq($_[0]{$k}, $_[1]{$k});
142    }
143    return 1;
144  } else {
145    print "# I don't know how to deque $_[0] & $_[1]\n";
146    return 1;
147  }
148}
149
150
151