do_master_menu.t 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. use strict;
  2. BEGIN {
  3. require Texinfo::ModulePath;
  4. Texinfo::ModulePath::init(undef, undef, 'updirs' => 2);
  5. }
  6. use Test::More;
  7. BEGIN { plan tests => 5; }
  8. use Texinfo::Parser qw(parse_texi_text);
  9. use Texinfo::Transformations;
  10. use Texinfo::Convert::Texinfo;
  11. use Data::Dumper;
  12. ok(1);
  13. sub _get_in($;$)
  14. {
  15. my $fragment = shift;
  16. my $other_fragment = shift;
  17. $other_fragment = '' if (!defined($other_fragment));
  18. my $in = '@node Top
  19. @top top
  20. @menu
  21. * chap1::
  22. * chap @code{in code} 2::
  23. * lone node::
  24. * (the manual)::
  25. '.$fragment.
  26. '
  27. @end menu
  28. @menu
  29. * unnumbered1::
  30. '.$other_fragment.
  31. '@end menu
  32. @node chap1
  33. @chapter chap
  34. @menu
  35. * sec0::
  36. * sec1:: D1
  37. GGG
  38. Menu comment
  39. * label: sec2. D2
  40. @end menu
  41. @node sec0
  42. @section sec0
  43. @menu
  44. * subsec::
  45. @end menu
  46. @node subsec
  47. @subsection sss
  48. @node sec1
  49. @section sec1
  50. @node sec2
  51. @section sec2
  52. @node chap @code{in code} 2, lone node, chap1, Top
  53. @chapter chapter @code{in code} 2
  54. @menu
  55. * sec 2-0::
  56. * sec 2-1::
  57. @end menu
  58. @node sec 2-0
  59. @section sec 2-0
  60. @node sec 2-1
  61. @section sec 2-1
  62. @node lone node, chap1, unnumbered1, Top
  63. @menu
  64. * inter node::
  65. * inter node 2::
  66. @end menu
  67. @node inter node
  68. @node inter node 2
  69. @node unnumbered1, , lone node, Top
  70. @unnumbered unnumbered1
  71. @menu
  72. * sec un0:: D
  73. * sec un1::
  74. * (some no manual) sec::
  75. @end menu
  76. @node sec un0
  77. @section un0
  78. @node sec un1
  79. @section un1
  80. ';
  81. return $in;
  82. }
  83. my $in_detailmenu = _get_in('@detailmenu
  84. * sec1::
  85. @end detailmenu
  86. ');
  87. my $no_detailmenu = _get_in('');
  88. #print STDERR $no_detailmenu;
  89. #print STDERR "GGG\n";
  90. #print STDERR $in_detailmenu;
  91. my $parser = Texinfo::Parser::parser();
  92. my $tree = $parser->parse_texi_text($in_detailmenu);
  93. Texinfo::Structuring::associate_internal_references($parser);
  94. my $master_menu = Texinfo::Transformations::new_master_menu($parser);
  95. my $out = Texinfo::Convert::Texinfo::convert($master_menu);
  96. my $reference = '@detailmenu
  97. --- The Detailed Node Listing ---
  98. chap
  99. * sec0::
  100. * sec1:: D1
  101. GGG
  102. * label: sec2. D2
  103. sec0
  104. * subsec::
  105. chapter @code{in code} 2
  106. * sec 2-0::
  107. * sec 2-1::
  108. lone node
  109. * inter node::
  110. * inter node 2::
  111. unnumbered1
  112. * sec un0:: D
  113. * sec un1::
  114. * (some no manual) sec::
  115. @end detailmenu
  116. ';
  117. #print STDERR $out;
  118. is ($out, $reference, 'master menu');
  119. $parser = Texinfo::Parser::parser();
  120. $tree = $parser->parse_texi_text($no_detailmenu);
  121. Texinfo::Structuring::associate_internal_references($parser);
  122. $master_menu = Texinfo::Transformations::new_master_menu($parser);
  123. $out = Texinfo::Convert::Texinfo::convert($master_menu);
  124. is ($out, $reference, 'master menu no detailmenu');
  125. $parser = Texinfo::Parser::parser();
  126. $tree = $parser->parse_texi_text($in_detailmenu);
  127. Texinfo::Structuring::associate_internal_references($parser);
  128. Texinfo::Transformations::regenerate_master_menu($parser);
  129. $out = Texinfo::Convert::Texinfo::convert($tree);
  130. is ($out, _get_in($reference), 'regenerate with existing detailmenu');
  131. #print STDERR "$out";
  132. $parser = Texinfo::Parser::parser();
  133. $tree = $parser->parse_texi_text($no_detailmenu);
  134. Texinfo::Structuring::associate_internal_references($parser);
  135. Texinfo::Transformations::regenerate_master_menu($parser);
  136. $out = Texinfo::Convert::Texinfo::convert($tree);
  137. is ($out, _get_in('',"\n".$reference), 'regenerate with no detailmenu');