xref: /openbsd-src/gnu/usr.bin/perl/cpan/Text-Tabs/t/Wrap-JLB.t (revision 3d61058aa5c692477b6d18acfbbdb653a9930ff9)
1use strict; use warnings FATAL => 'all';
2
3use Text::Wrap;
4
5$Text::Wrap::columns = 72;
6
7require bytes;
8
9our $Errors = 0;
10
11$/ = q();
12
13our @DATA = (
14    [ # paragraph 0
15	sub { die "there is no paragraph 0" }
16    ],
17    { # paragraph 1
18	OLD => { BYTES =>    44, CHARS =>   44, CHUNKS =>   44, WORDS =>   7, TABS =>  3, LINES =>  4 },
19	NEW => { BYTES =>    44, CHARS =>   44, CHUNKS =>   44, WORDS =>   7, TABS =>  3, LINES =>  4 },
20    },
21    { # paragraph 2
22	OLD => { BYTES =>  1766, CHARS => 1635, CHUNKS => 1507, WORDS => 275, TABS =>  0, LINES =>  2 },
23	NEW => { BYTES =>  1766, CHARS => 1635, CHUNKS => 1507, WORDS => 275, TABS =>  0, LINES => 24 },
24    },
25    { # paragraph 3
26	OLD => { BYTES =>   157, CHARS =>  148, CHUNKS =>  139, WORDS =>  27, TABS =>  0, LINES =>  2 },
27	NEW => { BYTES =>   157, CHARS =>  148, CHUNKS =>  139, WORDS =>  27, TABS =>  0, LINES =>  3 },
28    },
29    { # paragraph 4
30	OLD => { BYTES =>    30, CHARS =>   25, CHUNKS =>   24, WORDS =>   3, TABS =>  4, LINES =>  1 },
31	NEW => { BYTES =>    30, CHARS =>   25, CHUNKS =>   24, WORDS =>   3, TABS =>  4, LINES =>  1 },
32    },
33);
34
35
36my $numtests = @DATA;
37print "1..$numtests\n";
38
39$Errors += table_ok();
40check_data();
41
42if ($Errors) {
43    die "Error count: $Errors";
44} else {
45    exit(0);
46}
47
48
49# first some sanity checks
50sub table_ok {
51    my $bad = 0;
52    for my $i ( 1 .. $#DATA ) {
53	for my $item (qw[ bytes chars chunks words tabs ]) {
54	    if ( $DATA[$i]{NEW}{uc $item} != $DATA[$i]{OLD}{uc $item} ) {
55		warn "\u$item count shouldn't change upon wrapping at table paragraph $i";
56		$bad++;
57	    }
58	}
59    }
60    print $bad ? "not " : "", "ok 1\n";
61    return $bad;
62}
63
64sub check($$$$) {
65    die "expected 4 arguments" unless @_ == 4;
66    my ($found, $index, $version, $item) = @_;
67    my $expected = $DATA[$index]{$version}{$item};
68    return 1 if $found == $expected;
69    warn sprintf("%s paragraph %d expected %d %s, found %d instead",
70		  ucfirst(lc($version)),
71			  $index,     $expected,
72					 lc($item),
73						 $found);
74    return 0;
75}
76
77sub check_data {
78
79    local($_);
80    while ( <DATA> ) {
81	$_ = pack "U0a*", $_;
82
83	my $bad = 0;
84
85	if ($. > $#DATA) {
86	    die "too many paragraphs of data";
87	}
88
89	$DATA[$.]{OLD}{DATA} = $_;
90
91	my($char_count,  $byte_count, $chunk_count, $word_count, $tab_count, $line_count);
92
93	$byte_count  = bytes::length($_);
94	$char_count  = length();
95	$chunk_count = () = /\PM/g;
96	$word_count  = () = /(?:\pL\pM*)+/g;
97	$tab_count   = y/\t//;
98	$line_count  = y/\n//;
99
100	$bad++ unless check($byte_count,  $., "OLD", "BYTES");
101	$bad++ unless check($char_count,  $., "OLD", "CHARS");
102	$bad++ unless check($chunk_count, $., "OLD", "CHUNKS");
103	$bad++ unless check($word_count,  $., "OLD", "WORDS");
104	$bad++ unless check($tab_count,   $., "OLD", "TABS");
105	$bad++ unless check($line_count,  $., "OLD", "LINES");
106
107	my $nl = "\n" x chomp;
108
109	$_ = wrap("", "", $_) . $nl;
110
111	$byte_count  = bytes::length($_);
112	$char_count  = length();
113	$chunk_count = () = /\PM/g;
114	$word_count  = () = /(?:\pL\pM*)+/g;
115	$tab_count   = y/\t//;
116	$line_count  = y/\n//;
117
118	$bad++ unless check($byte_count,  $., "NEW", "BYTES");
119	$bad++ unless check($char_count,  $., "NEW", "CHARS");
120	$bad++ unless check($chunk_count, $., "NEW", "CHUNKS");
121	$bad++ unless check($word_count,  $., "NEW", "WORDS");
122	$bad++ unless check($tab_count,   $., "NEW", "TABS");
123	$bad++ unless check($line_count,  $., "NEW", "LINES");
124
125	my $num = $. + 1;
126	print $bad ? "not " : "", "ok $num\n";
127	$Errors += $bad;
128
129    }
130
131}
132
133__DATA__
134	Los dos reyes
135	     y
136	Los dos laberintos
137
138Cuentan los hombres dignos de fe (pero A̳l̳á̳ sabe más) que en los primeros días hubo un rey de l̲a̲s̲ i̲s̲l̲a̲s̲ d̲e̲ B̲a̲b̲i̲l̲o̲n̲i̲a̲ que congregó a sus arquitectos y magos y les mandó construir un laberinto tan perplejo y sutil que los varones más prudentes no se aventuraban a entrar, y los que entraban se perdían.  Esa obra era un escándalo, porque la confusión y la maravilla son operaciones propias de D̳i̳o̳s̳ y no de los hombres.  Con el andar del tiempo vino a su corte un rey de los árabes, y el rey de B̲a̲b̲i̲l̲o̲n̲i̲a̲ (para hacer burla de la simplicidad de su huésped) lo hizo penetrar en el laberinto, donde vagó afrentado y confundido hasta la declinación de la tarde.  Entonces imploró socorro divino y dio con la puerta.  Sus labios no profirieron queja ninguna, pero le dijo al rey de B̲a̲b̲i̲l̲o̲n̲i̲a̲ que él en A̲r̲a̲b̲i̲a̲ tenía otro laberinto y que, si D̳i̳o̳s̳ era servido, se lo daría a conocer algún día.  Luego regresó a A̲r̲a̲b̲i̲a̲, juntó sus capitanes y sus alcaides y estragó l̲o̲s̲ r̲e̲i̲n̲o̲s̲ d̲e̲ B̲a̲b̲i̲l̲o̲n̲i̲a̲ con tan venturosa fortuna que derribó sus castillos, rompió sus gentes e hizo cautivo al mismo rey.  Lo amarró encima de un camello veloz y lo llevó al desierto.  Cabalgaron tres días, y le dijo: «¡Oh, rey del tiempo y substancia y cifra del siglo!, en B̲a̲b̲i̲l̲o̲n̲i̲a̲ me quisiste perder en un laberinto de bronce con muchas escaleras, puertas y muros; ahora e̳l̳ P̳o̳d̳e̳r̳o̳s̳o̳ ha tenido a bien que te muestre el mío, donde no hay escaleras que subir, ni puertas que forzar, ni fatigosas galerías que recorrer, ni muros que te veden el paso.»
139
140Luego le desató las ligaduras y lo abandonó en mitad del desierto, donde murió de hambre y de sed.  La gloria sea con A̳q̳u̳é̳l̳ que no muere.
141
142				——Jorge Luís Borges
143