use strict;
use lib '.';
use Texinfo::ModulePath (undef, undef, undef, 'updirs' => 2);
require 't/test_utils.pl';
my $simple_menu_text = '
Before menu.
@menu
comment
* menu entry name : node. description
* node name:: description new
* other entry: node,
* last::
description next line
still description
new comment
* last node entry ::
@end menu
After menu.
';
my @test_cases = (
['menu_title_before_entries',
'@node Top
@menu
Horizontal space
* chap subnode::
@end menu
@node chap subnode
'],
['simple', $simple_menu_text],
# there could be a nomenu in the converter/structuring options hash,
# too, but it would not change the output.
['simple_no_menu', $simple_menu_text, {}, {'FORMAT_MENU' => 'nomenu'}],
['menu_entry_node',
'@menu
* (f)a1::
* (f)a2::
* (f)a3:: d
* (f)@@a@:::
@end menu
'],
['menu_entry_node_comments',
'@menu
* (f)a1c::@c c
* (f)a2c:: @c c
* (f)a3c:: d@c c
* (f) a4 :: @c c
@end menu
'],
['menu_entry_name',
'@menu
* a: (f)b
* a: (f)b1.c,
* a: (f)b2.c,
* a: (f)b3.c, d
* a: (f)b1..
* a : (f) b2 ..
* a.n: (f)b3.. d
* a: (f)b1.c.
* a: (f)b2.c.
* a: (f)b3.c. d
@end menu
'],
['leading_space_before_menu_star',
'@node a node
@menu
* a node::
@end menu
'],
['menu_entry_name_comment',
'@menu
* a: (f)b@c c
* a: (f)b @c c
* a: (f)b1c.c,@c c
* a: (f)b2c.c, @c c
* a: (f)b3c.c, d@c c
@end menu
'],
['comment_on_menu_line',
'@node Top
@menu @c
* first::
@end menu
@chapter first
@node first
'],
['invalid_info_menu_entry',
'@node first
@menu
* (f)@asis{a:}::
* @asis{name:}: (f)node.
* name: (f)@asis{node. }. d
* name: (f)@asis{node,n}. d2
* name: (f)@asis{node n}. d3
@end menu
'],
['no_colon_in_menu',
'@node first
@menu
* a
@end menu
'],
['empty_menu_description',
'@node first
@menu
* a:(f)b
@end menu
'],
['detailmenu',
'
@menu
* Copying Conditions:: Your rights.
@detailmenu
* detailmenu::
@end detailmenu
@end menu
'],
['detailmenu_in_description',
'
@menu
* Copying Conditions:: Your rights.
@detailmenu
* detailmenu::
@end detailmenu
@end menu
'],
['entry_after_detailmenu',
'@node Top
@menu
@detailmenu
* second::
@end detailmenu
Menu comment
* chap first::
@detailmenu
* second::
@end detailmenu
* second::
@end menu
@node chap first
@node second
'],
['detailmenu_on_subnodes',
'@node Top
@top top
@menu
* chapter::
* chapter 2::
@detailmenu
* section::
@end detailmenu
@detailmenu
Chap 2
* section chap 2::
* unnumberedsec::
@end detailmenu
@end menu
@node chapter
@chapter chapter
@menu
* section::
@end menu
@node section
@section section
@node chapter 2
@chapter chapter 2
@menu
* section chap 2::
* unnumberedsec::
@end menu
@node section chap 2
@section section chap 2
@node unnumberedsec
@unnumberedsec unnumberedsec
'],
['detailmenu_unknown_node',
'@node Top
@menu
@detailmenu
* unknown::
@end detailmenu
@end menu
'],
['missing_detailmenu_on_subnodes', # same as above, but without detailmenu
# such that subnode menu entries appear
# in the Top node menu
'@node Top
@top top
@menu
* chapter::
* chapter 2::
* section::
Chap 2
* section chap 2::
* unnumberedsec::
@end menu
@node chapter
@chapter chapter
@menu
* section::
@end menu
@node section
@section section
@node chapter 2
@chapter chapter 2
@menu
* section chap 2::
* unnumberedsec::
@end menu
@node section chap 2
@section section chap 2
@node unnumberedsec
@unnumberedsec unnumberedsec
'],
['reference_to_external_manual',
'
@node first
@menu
* (info)::
@end menu
'],
['menu_entry_no_entry',
'@menu
* a1:
* a2:
* a1c:@c c
* a2c: @c c
* a4@b{a}:
* a5@b{b}: @c c
@end menu
'],
['menu_entry_no_entry_location',
'@menu
* (manual):: begin description
* not an entry ?
* (manual):: an entry
in description
* and here ?
with text.
* (last manual)::
@end menu
'],
['example_in_menu_comment',
'@menu
* entry::
@example
in
example
@end example
menu comment.
@end menu
'],
['dash_in_menu',
'
@menu
* entry---in: (manual)n---ode. description --- in.
comment --- in.
@end menu
'],
['example_in_menu_description',
'@node first
@top top
@menu
* (manual)::
@example
in
example
@end example
@end menu
'],
['block_commands_in_menu_description',
'@node first
@top top
@menu
* (manual)::
@itemize
@item in item
@end itemize
@table @asis
@item table item
Text.
@end table
@html
in html
@end html
@verbatim
@end verbatim
@end menu
'],
['verb_in_menu_description',
'@node first
@top top
@menu
* (manual)::
@verb{: in verb
:}
@end menu
'],
['inlineraw_in_menu_description',
'@node first
@top top
@menu
* (manual)::
@inlineraw{html, in inline raw
end inlineraw}
@end menu
'],
['sc_in_menu',
'
@node first
@menu
* @sc{value}:@sc{node}. @sc{descrip tion}
@sc{menu comment}
@example
* @sc{menu-example value}:(dir)@sc{menu-example node}. @sc{menu-example descrip tion}
@sc{menu-example comment}
@end example
@end menu
@node @sc{node}
@example
@menu
* @sc{example value}:(dir)@sc{example node}. @sc{example descrip tion}
@sc{example comment}
@end menu
@end example
'],
['formats_in_menu',
'@node first
@menu
* (gcc):: text
@table @asis
@item item
* table line::
@end table
* (info)::
@verbatim
some @ verb{x atim
* texinfo:: in @ verbatim
@end verbatim
* (manual2):: %
@html
@end html
Log$
* (truc):: @acronym{description
* acronym::}
@example
* subsubsection::
Menu comment
@end example
@end menu
'],
['menu_in_example',
'@node first
@example
@menu
* (entry)::
@cartouche
in cartouche in description in menu in example
@end cartouche
@cartouche
in cartouche in menu comment in menu in example
@end cartouche
* (node) menu:: a node in menu
* a menu name:(other) node.
@end menu
@end example
'],
['submenu_in_example',
'@node first
@example
in example
@menu
in submenu
@menu
@end menu
@menu
in submenu
@end menu
@menu
@quotation
A quot---ation in submenu
@end quotation
@end menu
@subheading subheading in menu
@enumerate
@item e--numerate
@end enumerate
@end menu
@end example
'],
['menu_pointing_to_anchor',
'@node Top
@top top
Text
@anchor{An anchor}
@menu
* An anchor:: menu entry pointing to the anchor.
@end menu
'],
['space_and_commands_in_menu_node',
'@node Top
@top top
@menu
* chap b::
* chap @: b::
* chap b::
* chap@ @ b::
* chap@ b::
* chap @ b::
* label: chap @: b.
* label: chap b.
* label: chap @ @ b.
@end menu
@node chap @: b
@chapter Chap
'],
['nodedescription_descriptions',
'@node Top
@top test of nodedescription used in menu
@menu
* toto::
* titi:: desc of titi
* name of other: other.
* name of last: last. desc of last
* a somewhat long node without description nor following space::
* a very long node without description with very little space left for::
* very very long node extending past the max columns and without description::
@end menu
@node toto
@chapter Toto
@nodedescription toto is there:: and the @emph{is a description}@w{slightly long} and @verb{:vv somewhat:} @ringaccent anexpected
@node titi
@chapter Titi
@nodedescription this describes titi
@node other
@chapter Other
@nodedescription other comes here
@node last
@chapter Last
@nodedescription we are last
@node a somewhat long node without description nor following space
@chapter Somewhat long
@nodedescription not as long as the node
@node a very long node without description with very little space left for
@chapter Very long
@nodedescription starting the desciption with a somewhat long word
@node very very long node extending past the max columns and without description
@chapter Past max columns
@nodedescription Not long
'],
['nodedescriptionblock_descriptions',
'@node Top
@top test of nodedescriptionblock used in menu
@menu
* toto::
* titi:: desc of titi
* name of other: other.
* a somewhat long node without description nor following space::
* node double nodedescriptionblock::
@end menu
@node toto
@chapter Toto
@nodedescription toto is there:: and the @emph{is a description}@w{slightly long} and @verb{:vv somewhat:} @ringaccent anexpected
@nodedescriptionblock
Block along line node description for toto
@end nodedescriptionblock
@node titi
@chapter Titi
@nodedescriptionblock
description of titi in block
@end nodedescriptionblock
@node other
@chapter Other
@nodedescriptionblock
Long description of other
Para2
@quotation
a quotation in description
@end quotation
@end nodedescriptionblock
@node a somewhat long node without description nor following space
@chapter Somewhat long
@nodedescriptionblock
Block description before, not as long as the node
@end nodedescriptionblock
@nodedescription not as long as the node
@node node double nodedescriptionblock
@chapter test double
@nodedescriptionblock
block desc 1
@end nodedescriptionblock
@nodedescriptionblock
block desc 2
@end nodedescriptionblock
'],
['commands_in_nodedescriptionblock',
'@node Top
@top test commands in nodedescriptionblock
@menu
* node1::
* node2::
@end menu
@ref{in nodescription}, @ref{f1}.
@node node1
@chapter chap1
@nodedescriptionblock
@anchor{in nodescription}
@ref{node2}. Footnote@footnote{in footnote}. Some text to see
where the max column could be. @w{in w}.
@cindex in nodedescriptionblock
@float tfloat, f1
@image{float_image}
@caption{Cap1}
@end float
@end nodedescriptionblock
@node node2
@chapter chap2
@ref{in nodescription}, @ref{f1}.
@menu
* node1::
@end menu
@printindex cp
@listoffloats tfloat
',{},{'AUTO_MENU_DESCRIPTION_ALIGN_COLUMN' => 16,
'AUTO_MENU_MAX_WIDTH' => 90}],
);
my @test_invalid = (
['bad_beginning',
'@menu
*
*
*something::
*@code{in code}::
@end menu'
],
['menu_no_closed_after_empty_line',
'@menu
* (manual_in_menu):: desc2
'],
['menu_no_closed_in_description',
'@menu
* (manual_in_menu):: desc'
],
['menu_no_closed_in_entry',
'@menu
* a1:'
],
['menu_no_closed_entry_beginning',
'@menu
* node'
],
['menu_no_closed_star',
'@menu
* '
],
['direntry_dircategory_after_first_node',
'@node Top
@top direntry direcategory after first node
@dircategory Cat
@direntry
* in text: (in_text). in text
@end direntry
'],
['menu_in_deffn',
'@node first
@deffn a b c
@menu
* (mynode)::
@end menu
@end deffn
'],
['multiple_menus',
'@node Top
@menu
* (a)a::
@end menu
@menu
* (b)b::
@end menu
'],
['empty_menu_entry_name',
'@node first
@menu
* : (vvv). fff
* :aaa,
@end menu
@node aaa
'],
['menu_node_unterminated',
'@node first
@menu
* Example: Examples of Login Verification Functions
@end menu
'],
);
foreach my $test (@test_cases) {
$test->[3]->{'FORMAT_MENU'} = 'menu' if (!defined($test->[3]->{'FORMAT_MENU'}));
push @{$test->[2]->{'test_formats'}}, 'plaintext';
push @{$test->[2]->{'test_formats'}}, 'html';
push @{$test->[2]->{'test_formats'}}, 'xml';
}
run_all('menu', [@test_cases, @test_invalid]);