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