blob: d9877fc529214aa6737b04531ff50431c474b8b2 [file]
use strict;
use lib '.';
use Texinfo::ModulePath (undef, undef, undef, 'updirs' => 3);
use Test::More;
BEGIN { plan tests => 7; };
#use Data::Dumper;
use Texinfo::Convert::Text;
use Texinfo::Parser;
use Texinfo::Document;
use Texinfo::Indices;
# for cmp_deeply
use Test::Deep;
# package Texinfo::MainConfig is in Texinfo::Config
use Texinfo::Config;
ok(1, 'modules loading');
my $parser = Texinfo::Parser::parser();
my $tree = $parser->parse_texi_line('@copyright{} @quotedblbase{}');
my $result = Texinfo::Convert::Text::convert_to_text($tree, {'sort_string' => 1});
is($result, 'C ,,', 'sort no encoding');
$result = Texinfo::Convert::Text::convert_to_text($tree, {'sort_string' => 1,
'enabled_encoding' => 'utf-8'});
is($result, "\x{00A9} \x{201E}", 'sort utf-8');
$result = Texinfo::Convert::Text::convert_to_text($tree, {'sort_string' => 1,
'enabled_encoding' => 'iso-8859-1'});
is($result, "\x{00A9} ,,", 'sort iso-8859-1');
$parser = Texinfo::Parser::parser();
my $document = $parser->parse_texi_text('@node Top
@cindex !
@cindex e
@cindex E
@cindex ``
@cindex @~e
@cindex
@cindex aaaaaaaaaaaa
@cindex @l{}
');
my $main_configuration = Texinfo::MainConfig::new();
Texinfo::Config::GNUT_initialize_customization(undef, {}, {});
# To set $indices_sort_strings, calling
# Texinfo::Document::document_indices_sort_strings is more natural, but we want
# to test direct call of Texinfo::Indices::setup_index_entries_sort_strings.
my $indices_information = $document->indices_information();
my $index_entries = $document->merged_indices();
my $document_options = $main_configuration->get_customization_options_hash();
$document->register_document_options($document_options);
my $indices_sort_strings
= Texinfo::Indices::setup_index_entries_sort_strings($document, undef,
$index_entries, $indices_information);
my $index_entries_sort_strings
= Texinfo::Indices::format_index_entries_sort_strings($indices_sort_strings);
#my $indices_sort_strings
# = Texinfo::Document::document_indices_sort_strings($document);
my $sorted_index_entries
= Texinfo::Indices::sort_indices_by_index($indices_sort_strings);
my @entries = ();
foreach my $entry (@{$sorted_index_entries->{'cp'}}) {
push @entries, $index_entries_sort_strings->{$entry};
}
use utf8;
# When e and E are equal, e is before E as it appears before in the document
my @entries_ref = ('!', '"', 'aaaaaaaaaaaa', 'e', 'E', 'ẽ', 'ł');
cmp_deeply (\@entries, \@entries_ref, 'sorted index entries');
my $sorted_index_entries_by_letter
= Texinfo::Indices::sort_indices_by_letter($indices_sort_strings);
my @letter_entries_ref = (
{'!' => [ '!' ]},
{'"' => [ '"' ]},
{'A' => [ 'aaaaaaaaaaaa' ]},
# result with accented letters separate
# {'E' => [ 'e', 'E']},
# {'Ẽ' => [ 'ẽ' ]},
{'E' => [ 'e', 'E', 'ẽ' ]},
{'Ł' => [ 'ł' ]},
);
my @letter_entries;
foreach my $letter (@{$sorted_index_entries_by_letter->{'cp'}}) {
my $letter_entry = {};
push @letter_entries, $letter_entry;
foreach my $entry (@{$letter->{'entries'}}) {
push @{$letter_entry->{$letter->{'letter'}}},
$index_entries_sort_strings->{$entry};
}
}
#{
#local $Data::Dumper::Purity = 1;
#local $Data::Dumper::Maxdepth = 2;
#local $Data::Dumper::Indent = 1;
#print STDERR "".Data::Dumper->Dump([$sorted_index_entries_by_letter])."\n";
#foreach my $letter (@{$sorted_index_entries_by_letter->{'cp'}}) {
# print STDERR "AAA $letter->{'letter'} ".join('|',keys(%$letter))."\n";
#}
# print STDERR "".Data::Dumper->Dump([\@letter_entries])."\n";
#}
cmp_deeply (\@letter_entries, \@letter_entries_ref, 'by letter index entries');
$parser = Texinfo::Parser::parser();
$document = $parser->parse_texi_text('@node Top
@cindex hhh @subentry jjj @subentry lll
@cindex hhh @subentry jjj
@cindex hhh jjj
@cindex hhh @subentry k
@cindex hhh @subentry
@cindex hhh
@cindex hhh @subentry jjj @subentry lll
@cindex hhh
@cindex @samp{hhh} @subentry jjj
@cindex @kbd{hhh} @subentry @sc{jjj} @subentry @email{jjj,mymail}
@cindex @subentry aa
@cindex hhh @subentry jjj @subentry lll @sortas{A}
');
$document->register_document_options($document_options);
$indices_sort_strings
= Texinfo::Document::document_indices_sort_strings($document);
$index_entries_sort_strings
= Texinfo::Indices::format_index_entries_sort_strings($indices_sort_strings);
$sorted_index_entries
= Texinfo::Indices::sort_indices_by_index($indices_sort_strings);
@entries = ();
foreach my $entry (@{$sorted_index_entries->{'cp'}}) {
push @entries, $index_entries_sort_strings->{$entry};
}
#print STDERR join(', ', map {"'$_'"} @entries)."\n";
# the entry @cindex @subentry aa does not appear, has a missing argument
@entries_ref = (', aa', 'hhh', 'hhh', 'hhh, ', 'hhh, jjj', 'hhh, jjj',
'hhh, jjj, A',
'hhh, jjj, lll', 'hhh, jjj, lll', 'hhh, JJJ, mymail', 'hhh, k', 'hhh jjj');
cmp_deeply(\@entries, \@entries_ref, 'subentry sorted');