xref: /openbsd/gnu/usr.bin/perl/cpan/Pod-Simple/t/items.t (revision 5486feef)
1use strict;
2use warnings;
3use Test::More tests => 22;
4
5BEGIN {
6  require FindBin;
7  unshift @INC, $FindBin::Bin . '/lib';
8}
9use helpers;
10
11my $d;
12#use Pod::Simple::Debug (\$d,0);
13
14use Pod::Simple::DumpAsXML;
15use Pod::Simple::XMLOutStream;
16print "# Pod::Simple version $Pod::Simple::VERSION\n";
17
18my $x = 'Pod::Simple::XMLOutStream';
19
20print "##### Tests for =item directives via class $x\n";
21
22$Pod::Simple::XMLOutStream::ATTR_PAD   = ' ';
23$Pod::Simple::XMLOutStream::SORT_ATTRS = 1; # for predictably testable output
24
25
26print "#\n# Tests for simple =item *'s\n";
27is( $x->_out("\n=over\n\n=item *\n\nStuff\n\n=item *\n\nBar I<baz>!\n\n=back\n\n"),
28    '<Document><over-bullet indent="4"><item-bullet>Stuff</item-bullet><item-bullet>Bar <I>baz</I>!</item-bullet></over-bullet></Document>'
29);
30is( $x->_out("\n=over\n\n=item *\n\nStuff\n\n=cut\n\nStuff\n\n=item *\n\nBar I<baz>!\n\n=back\n\n"),
31    '<Document><over-bullet indent="4"><item-bullet>Stuff</item-bullet><item-bullet>Bar <I>baz</I>!</item-bullet></over-bullet></Document>'
32);
33is( $x->_out("\n=over 10\n\n=item *\n\nStuff\n\n=cut\n\nStuff\n\n=item *\n\nBar I<baz>!\n\n=back\n\n"),
34    '<Document><over-bullet indent="10"><item-bullet>Stuff</item-bullet><item-bullet>Bar <I>baz</I>!</item-bullet></over-bullet></Document>'
35);
36is( $x->_out("\n=over\n\n=item *\n\nStuff\n=cut\nStuff\n\n=item *\n\nBar I<baz>!\n\n=back"),
37    '<Document><over-bullet indent="4"><item-bullet>Stuff</item-bullet><item-bullet>Bar <I>baz</I>!</item-bullet></over-bullet></Document>'
38);
39
40
41
42
43print "#\n# Tests for simple =item 1.'s\n";
44is( $x->_out("\n=over\n\n=item 1.\n\nStuff\n\n=item 2.\n\nBar I<baz>!\n\n=back\n\n"),
45    '<Document><over-number indent="4"><item-number number="1">Stuff</item-number><item-number number="2">Bar <I>baz</I>!</item-number></over-number></Document>'
46);
47is( $x->_out("\n=over\n\n=item 1.\n\nStuff\n\n=cut\n\nStuff\n\n=item 2.\n\nBar I<baz>!\n\n=back\n\n"),
48    '<Document><over-number indent="4"><item-number number="1">Stuff</item-number><item-number number="2">Bar <I>baz</I>!</item-number></over-number></Document>'
49);
50# Now without a dot
51is( $x->_out("\n=over\n\n=item 1\n\nStuff\n\n=cut\n\nStuff\n\n=item 2\n\nBar I<baz>!\n\n=back\n\n"),
52    '<Document><over-number indent="4"><item-number number="1">Stuff</item-number><item-number number="2">Bar <I>baz</I>!</item-number></over-number></Document>'
53);
54is( $x->_out("\n=over\n\n=item 1\n\nStuff\n=cut\nStuff\n\n=item 2\n\nBar I<baz>!\n\n=back"),
55    '<Document><over-number indent="4"><item-number number="1">Stuff</item-number><item-number number="2">Bar <I>baz</I>!</item-number></over-number></Document>'
56);
57
58
59
60print "#\n# Tests for =over blocks (without =items)\n";
61is( $x->_out("\n=over\n\nStuff\n\nBar I<baz>!\n\n=back\n\n"),
62    '<Document><over-block indent="4"><Para>Stuff</Para><Para>Bar <I>baz</I>!</Para></over-block></Document>'
63);
64is( $x->_out("\n=over\n\n Stuff\n\nBar I<baz>!\n\n=back\n\n"),
65    '<Document><over-block indent="4"><Verbatim xml:space="preserve"> Stuff</Verbatim><Para>Bar <I>baz</I>!</Para></over-block></Document>'
66);
67is( $x->_out("\n=over\n\nBar I<baz>!\n\n Stuff\n\n=back\n\n"),
68    '<Document><over-block indent="4"><Para>Bar <I>baz</I>!</Para><Verbatim xml:space="preserve"> Stuff</Verbatim></over-block></Document>'
69);
70
71
72
73
74print "#\n# Tests for =item Text blocks...\n";
75is( $x->_out("\n=over\n\n=item Foo\n\nStuff\n\n=cut\n\nCrunk\nZorp\n\n=item Bar I<baz>!\n\nQuux\n\n=back\n\n"),
76    '<Document><over-text indent="4"><item-text>Foo</item-text><Para>Stuff</Para><item-text>Bar <I>baz</I>!</item-text><Para>Quux</Para></over-text></Document>'
77);
78is( $x->_out("\n=over\n\n=item Foo\n\n Stuff\n\tSnork\n\n=cut\n\nCrunk\nZorp\n\n=item Bar I<baz>!\n\nQuux\n\n=back\n\n"),
79    qq{<Document><over-text indent="4"><item-text>Foo</item-text><Verbatim xml:space="preserve"> Stuff\n        Snork</Verbatim>}
80  . qq{<item-text>Bar <I>baz</I>!</item-text><Para>Quux</Para></over-text></Document>}
81);
82is( $x->_out("\n=over\n\n=item Foo\n\n Stuff\n\tSnork\n=cut\n\nCrunk\nZorp\n\n=item Bar I<baz>!\n\nQuux\n\n=back\n\n"),
83    qq{<Document><over-text indent="4"><item-text>Foo</item-text><Verbatim xml:space="preserve"> Stuff\n        Snork</Verbatim>}
84  . qq{<item-text>Bar <I>baz</I>!</item-text><Para>Quux</Para></over-text></Document>}
85);
86
87
88
89print "#\n# Test for mixed =item blocks...\n";
90is( $x->_out(
91  sub { $_[0]->no_errata_section(1) }, # We know this will complain
92  "\n=over\n\n=item Foo\n\nStuff\n\n=item 2.\n\nBar I<baz>!\n\nQuux\n\n=item *\n\nThwoong\n\n=back\n\n"),
93    qq{<Document><over-text indent="4"><item-text>Foo</item-text><Para>Stuff</Para>}
94  . qq{<item-text>2.</item-text><Para>Bar <I>baz</I>!</Para><Para>Quux</Para>}
95  . qq{<item-text>*</item-text><Para>Thwoong</Para></over-text></Document>}
96);
97
98# ok( $x->_out("\n=over\n\n=item *\n\nStuff\n\n=item 2.\n\nBar I<baz>!\n\nQuux\n\n=item *\n\nThwoong\n\n=back\n\n"),
99# ok( $x->_out("\n=over\n\n=item 1.\n\nStuff\n\n=item 2.\n\nBar I<baz>!\n\nQuux\n\n=item *\n\nThwoong\n\n=back\n\n"),
100
101print "#\n# Tests for indenting\n";
102is( $x->_out("\n=over 19\n\n=item *\n\nStuff\n\n=item *\n\nBar I<baz>!\n\n=back\n\n"),
103    '<Document><over-bullet indent="19"><item-bullet>Stuff</item-bullet><item-bullet>Bar <I>baz</I>!</item-bullet></over-bullet></Document>'
104);
105is( $x->_out("\n=over 19\n\n=item 1.\n\nStuff\n\n=item 2.\n\nBar I<baz>!\n\n=back\n\n"),
106    '<Document><over-number indent="19"><item-number number="1">Stuff</item-number><item-number number="2">Bar <I>baz</I>!</item-number></over-number></Document>'
107);
108is( $x->_out("\n=over 19\n\nStuff\n\nBar I<baz>!\n\n=back\n\n"),
109    '<Document><over-block indent="19"><Para>Stuff</Para><Para>Bar <I>baz</I>!</Para></over-block></Document>'
110);
111is( $x->_out("\n=over 19\n\n=item Foo\n\nStuff\n\n=cut\n\nCrunk\nZorp\n\n=item Bar I<baz>!\n\nQuux\n\n=back\n\n"),
112    '<Document><over-text indent="19"><item-text>Foo</item-text><Para>Stuff</Para><item-text>Bar <I>baz</I>!</item-text><Para>Quux</Para></over-text></Document>'
113);
114
115#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
116
117print "# Now testing nesting...\n";
118is( $x->_out(join "\n\n", '',
119  '=over',
120    '=item *',
121    'Stuff',
122    '=cut',
123    'Stuff',
124    '=over',
125      '=item 1.',
126      '=item 2.',
127      'Bar I<baz>!',
128    '=back',
129    '=item *',
130    'Bar I<baz>!',
131    '=back', ''
132  ), join '',
133   '<Document>',
134   '<over-bullet indent="4">',
135     '<item-bullet>Stuff</item-bullet>',
136     '<over-number indent="4">',
137       '<item-number number="1"></item-number>',
138       '<item-number number="2">Bar <I>baz</I>!</item-number>',
139     '</over-number>',
140     '<item-bullet>Bar <I>baz</I>!</item-bullet>',
141   '</over-bullet></Document>'
142);
143
144#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
145
146is( $x->_out( join "\n\n", '', '',
147  '=over',
148    '=item *',
149    'Stuff',
150    '=cut',
151    'Stuff',
152    '=over',
153      '=item 1.',
154        '=over 19',
155        'Gleiven',
156        'Squim F<.thingrc>!',
157        '=back',
158      '=item 2.',
159      'Bar I<baz>!',
160      '=back',
161    '=item *',
162    'Bar I<baz>!',
163  '=back',
164  '', ''
165  ), join '',
166   '<Document>',
167   '<over-bullet indent="4">',
168     '<item-bullet>Stuff</item-bullet>',
169     '<over-number indent="4">',
170       '<item-number number="1"></item-number>',
171
172       '<over-block indent="19">',
173         '<Para>Gleiven</Para>',
174         '<Para>Squim <F>.thingrc</F>!</Para>',
175       '</over-block>',
176
177       '<item-number number="2">Bar <I>baz</I>!</item-number>',
178     '</over-number>',
179     '<item-bullet>Bar <I>baz</I>!</item-bullet>',
180   '</over-bullet></Document>'
181);
182
183#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
184
185$d = 11;
186print "# Now checking that document-end closes things right...\n";
187
188is( $x->_out(
189  # We know there'd be a warning about implicit =back; disable it!
190  sub { $_[0]->no_whining(1); },
191  join( "\n\n", '', '',
192    '=over',
193      '=item *',
194      'Stuff',
195      '=cut',
196      'Stuff',
197      '=over',
198        '=item 1.',
199          '=over 19',
200          'Gleiven',
201          'Squim F<.thingrc>!',
202    '', '',
203  ),
204  ), join '',
205   '<Document>',
206   '<over-bullet indent="4">',
207     '<item-bullet>Stuff</item-bullet>',
208     '<over-number indent="4">',
209       '<item-number number="1"></item-number>',
210
211       '<over-block indent="19">',
212         '<Para>Gleiven</Para>',
213         '<Para>Squim <F>.thingrc</F>!</Para>',
214       '</over-block>',
215     '</over-number>',
216   '</over-bullet></Document>'
217);
218
219
220
221# TODO: more checking of coercion in nesting?
222