use strict; use lib '.'; use Texinfo::ModulePath (undef, undef, undef, 'updirs' => 2); require 't/test_utils.pl'; my $invalid_node_name_text = ' @node Top @menu * @asis{truc:}: @asis{nodename. a} * machin: node@comma{}comma, def * @asis{bidule:}:: @end menu @node @asis{nodename. a} @node node@comma{}comma @node @asis{bidule:} @ref{@asis{nodename. a}, @asis{truc:}}. @ref{node@comma{}comma, machin}. @ref{@asis{bidule:}}. '; my @test_cases = ( ['no_nodes', 'Text.'], ['no_top_node', '@node node Top not Top node '], ['paragraphindent_and_preamble', '@copying In copying. Copying second para. @end copying @paragraphindent 1 After paragraphindent. @node Top @top test @@paragraphindent in preamble effect in preamble First para. Second para. @bye ', {'full_document' => 1}], ['two_paragraphindent_in_preamble', '@copying In copying. Copying second para. @end copying @paragraphindent 1 @paragraphindent 6 After two paragraphindent. @node Top @top test @@paragraphindent in preamble effect in preamble First para. Second para. @bye ', {'full_document' => 1}], ['paragraphindent_in_preamble_and_in_document', '@copying In copying. Copying second para. @end copying @paragraphindent 1 After paragraphindent. @node Top @top test @@paragraphindent in preamble effect in preamble First para. Second para. @paragraphindent 3 Third para after second paragraphindent. @bye ', {'full_document' => 1}], ['two_paragraphindent_in_preamble_and_in_document', '@copying In copying. Copying second para. @end copying @paragraphindent 1 @paragraphindent 6 After two paragraphindent. @node Top @top test @@paragraphindent in preamble effect in preamble First para. Second para. @paragraphindent 3 Third para after third paragraphindent. @bye ', {'full_document' => 1}], ['paragraphindent_not_in_preamble', '@copying In copying. Copying second para. @end copying @node Top @top test @@paragraphindent effect in preamble First para. Before paragraphindent. @paragraphindent 1 After paragraphindent. @bye ', {'full_document' => 1}], ['paragraphindent_asis_first', ' bbb @paragraphindent asis ccc '], ['paragraphindent_none_first', ' first second @paragraphindent none after none '], ['space_at_menu_end', '@node Top @menu * (out):: @end menu A para. '], ['space_in_menu', '@node Top @top Element Text. @menu * node:: @end menu @node node @chapter node in chapter. '], ['text_before_node', '@node Top @top top @menu * chapter node:: @end menu text. @node chapter node @chapter chapter' ], ['ref_tests', ' @node Top @ref{(m)in ref followed by comma}, @ref{(m)in ref not followed by comma} after ref. @code{@ref{(m)in ref followed by end command}}. @ref{(m)in ref followed by comma, name}, @ref{(m)in ref not followed by comma, name} after ref. @code{@ref{(m)in ref followed by end command, name}}. @ref{(m)in ref ending with a dot., name} after ref. '], ['xref_test', ' @node Top @xref{(m)in xref}. @xref{(m)bad xref} after xref. @code{@xref{(m)bad nested xref}}. @xref{(m)in ref ending with a dot., name} ! after xref and dot inside. @xref{(m)in ref followed by symbol}# g. '], ['pxref_test', '@node Top Hey (@pxref{(m) in pxref}) and continue (@pxref{(m) in pxref, name}) and end. @pxref{(m) n}. @pxref{(m) n, name}. '], ['anchor_in_command', '@node Top @strong{aaa @TeX{} @emph{in emph} after @c emph @emph{emph2 @anchor{anchor in emph} }}. emph @emph{emph2 @anchor{anchor in emph}}}. '], ['anchor_and_spaces', '@node Top @top Element @anchor{anchor 0} Now @anchor{anchor1}. No space@anchor{anchor2}. '], ['before_node_and_section', 'Garbage ref to Top @ref{Top}. @cindex index entry before anything Hey@footnote{a footnote}. An anchor @anchor{anchor1}. @menu * node1:: @end menu @node Top @top top @@top section Node top ref to anchor1@footnote{another footnote}, which is before @@node Top: @ref{anchor1}. @menu * node1:: @end menu @node node1 @chapter node1 chapter @printindex cp '], ['image_text_file_only_and_alt', '@node Top @image{text_only_image,,,alt} '], ['image_quotes', '@node Top @image{f--ile,,,alt""\\} '], ['image_in_paragraph', '@node Top Para. @image{f--ile,,,alt""\\}. End para. '], ['image_not_found', '@node Top @image{n_f_image} '], ['image_extension', '@node Top @image{fext,,,,ext} @image{fdotext,,,,ext} @image{f--ile,,,,ext} '], ['image_text_encoded', '@documentencoding utf-8 @image{image_encoded} '], ['image_and_spaces_formatting', '@node Top @image{words} @image{words} @image{words} @image{words} @image{words} @image{words} @image{words} Some text @image{words} @image{words} @image{words} @image{words} @image{words} @image{words} @image{words}. Some text @image{words} text aaaaaaaaa @image{words} text bbbbbbbbbbb @image{words} text ccccccccccccc @image{words} text ddddddddddddd @image{words} text eeeeeeeeeeeeeee @image{words} text fffffffffff @image{words}. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @image{words} AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBB @image{words} Text. @image{words} @image{words}. '], ['image_and_punctuation', '@node Top One space. @image{f--ile}. Two spaces. @image{f--ile}. End line. @image{f--ile}. One space. @image{words}. Two spaces. @image{words}. End line. @image{words}. '], [ 'multitable_anchor_and_index_entry', '@node Top @multitable @columnfractions 0.4 0.6 @headitem mu--ltitable headitem @tab another tab @item mu--ltitable item @tab multitable tab @c comment in multitable @item mu--ltitable item 2 @tab multitable tab 2 @cindex index entry within multitable @anchor{anchor in multitable} @item lone mu--ltitable item @end multitable @multitable {A} {B} @item A B C @tab G @item lsfd mlkdsf lk s mlsdmjlfdsjm mdsfk @cindex index entry @item lsfd2 mlkdsf2 lk2 s2 mlsdmjlfdsjm mdsfk2 @tab ATTTTTTTTTTTTTTTTTTTTT BTTTTTTt @anchor{mark} CTTTTTT @end multitable @printindex cp @ref{mark} @ref{anchor in multitable} '], ['note_in_strong', '@node Top 3 One @strong{Note}. 5 @strong{Note a}. 9 @strong{note}. 11 @strong{note b}. 13 @strong{ note}. 15 @strong{note-bbb}. '], ['note_in_strong_end_of_line', '@node Top bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb vvvvvvvvvvvvvvvv @strong{note a} bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb vvvvvvvvvvvvvvvv @strong{note a} '], ['nested_multitable_anchor_index', '@node Top @multitable {truc AAAA machin} {bidule} @item @multitable {AAAA} {machin} @item AAAA @tab machin @anchor{mark inside} @cindex index entry inside @end multitable @tab bidule @item other item @tab in tab @anchor{mark} @cindex index entry @end multitable @printindex cp @xref{mark}. @xref{mark inside}. '], ['def_in_copying', '@macro mymacro @deffn aa bb cc @deffnx aax bbx ccx deffnx lines @end deffn @end macro @node Top @top Test for definition commands @copying In copying @mymacro{} @end copying In text @mymacro{} @printindex fn '], ['file_only_png', '@node Top Just before an image @image{this_is_a_long_unknown_file} text after the image, and more text, and more @image{this_is_a_long_unknown_file} text. '], ['float_long_captions', '@node Top @float Text, text1 @caption{AAAAAAAAAAAAAAAA BBBBB CCCCCCCCCCC} @end float @float Text, text2 @caption{AAAAAAAAAAAAAAAA BBBBBB CCCCCCCCCCC} @end float @listoffloats Text '], ['error_in_footnote', ' @node Top @float Text, label Float text1 @caption{Caption. @TeX. In caption @strong{note caption}. Now footnote@footnote{@LaTeX. and strong @strong{Note footnote}.}} @end float @listoffloats Text @listoffloats Text '], ['nested_footnotes_separate', '@footnotestyle separate @node Top F@footnote{F1 V@footnote{F2} } '], ['encoding_us_ascii', ' @documentencoding US-ASCII @node Top '], ['known_encoding', ' @documentencoding latin1 @node Top '], ['unknown_encoding', ' @documentencoding ggg @node Top '], ['top_node_normalization', '@node ToP @xref{TOP}. @xref{tOP}. @menu * tOP:: @end menu '], # since there is no split in the test suite, there is no split tested # here, in fact. ['split_no_copying', '\input texinfo @setfilename split_no_copying.info @node Top @top Top This is the top node. @menu * Ch1:: @end menu @node Ch1 @chapter Ch1 First chapter. @bye ',{},{'SPLIT_SIZE' => 10}], ['no_node_but_top', '@top top '], ['space_in_setfilename', '@setfilename @ @verb{: name :}@ @node Top '], ['novalidate_empty_refs', ' @novalidate @node Top @xref{@:}. @xref{@asis{ }}. @node @ @node @: @node @asis{ } '], ['invalid_node_name_warning', $invalid_node_name_text ], ['invalid_node_name_no_warning', $invalid_node_name_text, {},{'INFO_SPECIAL_CHARS_WARNING' => 0} ], ['only_documentencoding', '@documentencoding ISO-8859-1'], ['direntry_dircategory_and_commands', '@dircategory ``category---@var{th ere}?\'\' @direntry * foo: (foo). ``hello---@var{there}?\'\' @end direntry @dircategory cat2 @direntry * aaa :: aaaa bbbbb menutitle @end direntry @node Top @top Test dircategory and direntry Text '], ['colon_in_index_entry', '@node Top @synindex vr cp @cindex a:b @vtable @emph @item %main::value @end vtable @defvr {a:b} {c:d} e f @defvrx {x:y} {z:t} n m o @end defvr @printindex cp '], ['test_index', '@node Top @top Element top @xref{a counting anchor}. before menu. @cindex in Top @cindex @@ @cindex @exclamdown{} @cindex " @deffn fset @var{i} a g @deffnx truc machin bidule chose @end deffn @ftable @emph @item a fun Var text @item second fun @itemx itemx fun @end ftable @menu * name:: * name1 looooooooooooooooooooooooooooooooooooooooooooooooooooooooong:: @end menu @node name @chapter A chapter @cindex index entry looooooooooooooooooooooooooooooooooooooooooooooooooooooooong @findex function index entry A paragraph @findex other function end paragraph a a a a a @findex after lines. b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b @findex after more than 100 lines @node name1 looooooooooooooooooooooooooooooooooooooooooooooooooooooooong @appendix Index @cindex index entry in appendix before para Para. Concept index @printindex cp @findex index entry between indices Functions index @printindex fn @appendixsec appendixsec @appendixsubsec appendixsubsec @appendixsubsubsec appendixsubsubsec @chapheading chapheading @centerchap centerchap @chapter chapter end @cindex index in chapter end @anchor{a counting anchor} @bye '], ['index_entry_at_end_node', '@node Top @top Element @menu * chapter:: * indices:: @end menu @node chapter @chapter Chapter @cindex index entry @node indices @appendix indices @printindex cp '], ['center_flush', '@center centered @flushleft left and left2 left3. left Last with space. Now anchor @anchor{anchor in flushleft} after anchor @end flushleft @flushright right and right2 Right3 Right last with space. Now anchor @anchor{anchor in flushright} after anchor Second anchor in text @anchor{second anchor in flushright} after anchor. @end flushright '], # if this test is changed, the corresponding test in t/plaintext_tests.t # should be changed too ['multiline_image_and_align', '@center @image{figure} @center CCCC @image{figure} @center fffffffffffffffffffffffffffffffffffffff @image{figure} @center dddd @image{figure} iiiii @flushright AAA @image{figure} BBB @image{figure} gggg @image{figure} HHH @image{figure} JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ @end flushright @center @image{figure, , , ,txt} @center CCCC @image{figure, , , ,txt} @center fffffffffffffffffffffffffffffffffffffff @image{figure, , , ,txt} @center dddd @image{figure, , , ,txt} iiiii @flushright AAA @image{figure, , , ,txt} BBB @image{figure, , , ,txt} gggg @image{figure, , , ,txt} HHH @image{figure, , , ,txt} JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ @end flushright '], ['empty_copying_not_ended', ' @copying '], ['empty_arguments', ' @strong{} @uref{,} @abbr{a,} '], ['float_without_type', ' @node Top @float a, aa @end float @listoffloats a '], ['empty_caption', ' @node Top @float a,b aa @caption{} @end float @listoffloats a '], # not clearly useful, the mix of counted things in one node # may not be found elsewhere. ['one_node_counted_elements', 'Garbage @cindex before nodes @node one node,,,(dir) Top node @cindex Top node anchor ref @anchor{ref}. @menu * (some_manual_name_with_gcc):: ref to gcc @end menu ref to ref @ref{ref}. Some text. @printindex cp '], ); my @file_tests = ( ['split_test_before_first_node', '@setfilename split_test_before_first_node.info truc machin et reuc machin ze aze zea zae eaz eaz zae @node Top @top top In top node @menu * chap1:: @end menu @node chap1 @chapter chap In chap1. ',{},{'SPLIT_SIZE' => 10}], ['split_test_before_first_node_no_empty_line', '@setfilename split_test_before_first_node_no_empty_line.info truc machin et reuc machin ze aze zea zae eaz eaz zae @node Top @top top In top node @menu * chap1:: @end menu @node chap1 @chapter chap In chap1. ',{},{'SPLIT_SIZE' => 10}], ['split_nocopying', undef, {'test_file' => '../../tests/formatting/split_nocopying.texi',}, ], ['split_nocopying_split', undef, {'test_file' => '../../tests/formatting/split_nocopying.texi',}, {'SPLIT_SIZE' => 10}, ], ['direntry_dircategory', undef, {'test_file' => 'direntry_dircategory.texi'}, {'SPLIT_SIZE' => 1} ], ['quote_node_names_info', undef, {'test_file' => 'nodequote.texi',}, {'INFO_SPECIAL_CHARS_QUOTE' => 1, 'INFO_SPECIAL_CHARS_WARNING' => 0,} ], ['end_of_line_command_in_node_lines', # the reference to the node with two end of line is not found # by the Info reader, but it is a feature. References are not # searched for too far to avoid risking to run into markup # significant for cross-reference for text that is not cross-reference. '@node Top @top top @node chap @* f nl Something? @* After punct @chapter Chap @anchor{ankh @* p} text @* f nl Something? @* After punct @cindex a @* b @printindex cp @node new n @chapter Ochap @xref{chap @* f nl Something? @* After punct}. @xref{ankh @* p}. @xref{ankh @* p, addll@*gg}. @menu * chap @* f nl Something? @* After punct:: * ankh @* p:: * what @* is: ankh @* p. * what @* is: ankh p. @end menu '], ['chinese_mixed_with_en_EUC_CN', undef, {'test_file' => 'chinese_mixed_with_en_EUC_CN.texi', 'skip' => $Texinfo::ModulePath::conversion_from_euc_cn ne 'yes' ? 'No conversion from EUC-CN' : undef, } ], ); my $colons_in_index_entries_and_node = '@node Top @menu * One@asis{::}node@comma{} with entries.:: * Concept Index:: @end menu @node One@asis{::}node@comma{} with entries. @cindex : @cindex :a @cindex b:c @example some example just to have text @end example @cindex d::e @cindex f :d @cindex g: h node one @node Concept Index @printindex cp '; push @file_tests, ['colons_in_index_entries_and_node', $colons_in_index_entries_and_node, undef, {'INFO_SPECIAL_CHARS_QUOTE' => 1, 'INFO_SPECIAL_CHARS_WARNING' => 0,}], ['colons_in_index_entries_and_node_no_quoting', $colons_in_index_entries_and_node, undef, {'INFO_SPECIAL_CHARS_QUOTE' => 0, 'INFO_SPECIAL_CHARS_WARNING' => 1,}], ; foreach my $test (@test_cases) { push @{$test->[2]->{'test_formats'}}, 'info'; } foreach my $test (@file_tests) { push @{$test->[2]->{'test_formats'}}, 'file_info'; $test->[2]->{'test_input_file_name'} = $test->[0] . '.texi'; } run_all('info_tests', [@test_cases, @file_tests]);