xref: /openbsd-src/gnu/usr.bin/perl/cpan/Text-Tabs/t/Wrap-JLB.t (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
1#!perl
2
3BEGIN {
4	if ($] <= 5.010) {
5		print "1..0 # skip this test requires perl 5.010 or greater\n";
6		exit 0;
7	}
8}
9
10use strict;
11use warnings "FATAL" => "all";
12use Text::Wrap;
13
14$Text::Wrap::columns = 72;
15
16require bytes;
17
18our $Errors = 0;
19
20$/ = q();
21binmode(DATA, ":utf8") || die "can't binmode DATA to utf8: $!";
22
23our @DATA = (
24    [ # paragraph 0
25	sub { die "there is no paragraph 0" }
26    ],
27    { # paragraph 1
28	OLD => { BYTES =>    44, CHARS =>   44, CHUNKS =>   44, WORDS =>   7, TABS =>  3, LINES =>  4 },
29	NEW => { BYTES =>    44, CHARS =>   44, CHUNKS =>   44, WORDS =>   7, TABS =>  3, LINES =>  4 },
30    },
31    { # paragraph 2
32	OLD => { BYTES =>  1766, CHARS => 1635, CHUNKS => 1507, WORDS => 275, TABS =>  0, LINES =>  2 },
33	NEW => { BYTES =>  1766, CHARS => 1635, CHUNKS => 1507, WORDS => 275, TABS =>  0, LINES => 24 },
34    },
35    { # paragraph 3
36	OLD => { BYTES =>   157, CHARS =>  148, CHUNKS =>  139, WORDS =>  27, TABS =>  0, LINES =>  2 },
37	NEW => { BYTES =>   157, CHARS =>  148, CHUNKS =>  139, WORDS =>  27, TABS =>  0, LINES =>  3 },
38    },
39    { # paragraph 4
40	OLD => { BYTES =>    30, CHARS =>   25, CHUNKS =>   24, WORDS =>   3, TABS =>  4, LINES =>  1 },
41	NEW => { BYTES =>    30, CHARS =>   25, CHUNKS =>   24, WORDS =>   3, TABS =>  4, LINES =>  1 },
42    },
43);
44
45$| = 1;
46my $numtests = @DATA;
47print "1..$numtests\n";
48
49$Errors += table_ok();
50check_data();
51
52if ($Errors) {
53    die "Error count: $Errors";
54} else {
55    exit(0);
56}
57
58
59# first some sanity checks
60sub table_ok {
61    my $bad = 0;
62    for my $i ( 1 .. $#DATA ) {
63	for my $item (qw[ bytes chars chunks words tabs ]) {
64	    if ( $DATA[$i]{NEW}{uc $item} != $DATA[$i]{OLD}{uc $item} ) {
65		warn "\u$item count shouldn't change upon wrapping at table paragraph $i";
66		$bad++;
67	    }
68	}
69    }
70    print $bad ? "not " : "", "ok 1\n";
71    return $bad;
72}
73
74sub check($$$$) {
75    die "expected 4 arguments" unless @_ == 4;
76    my ($found, $index, $version, $item) = @_;
77    my $expected = $DATA[$index]{$version}{$item};
78    return 1 if $found == $expected;
79    warn sprintf("%s paragraph %d expected %d %s, found %d instead",
80		  ucfirst(lc($version)),
81			  $index,     $expected,
82					 lc($item),
83						 $found);
84    return 0;
85}
86
87sub check_data {
88
89    binmode(DATA, ":utf8") || die "can't binmode DATA to utf8: $!";
90    local($_);
91    while ( <DATA> ) {
92
93	my $bad = 0;
94
95	if ($. > $#DATA) {
96	    die "too many paragraphs of data";
97	}
98
99	$DATA[$.]{OLD}{DATA} = $_;
100
101	my($char_count,  $byte_count, $chunk_count, $word_count, $tab_count, $line_count);
102
103	$byte_count  = bytes::length($_);
104	$char_count  = length();
105	$chunk_count = () = /\X/g;
106	$word_count  = () = /(?:(?=\pL)\X)+/g;
107	$tab_count   = y/\t//;
108	$line_count  = y/\n//;
109
110	$bad++ unless check($byte_count,  $., "OLD", "BYTES");
111	$bad++ unless check($char_count,  $., "OLD", "CHARS");
112	$bad++ unless check($chunk_count, $., "OLD", "CHUNKS");
113	$bad++ unless check($word_count,  $., "OLD", "WORDS");
114	$bad++ unless check($tab_count,   $., "OLD", "TABS");
115	$bad++ unless check($line_count,  $., "OLD", "LINES");
116
117	my $nl = "\n" x chomp;
118
119	$_ = wrap("", "", $_) . $nl;
120
121	$byte_count  = bytes::length($_);
122	$char_count  = length();
123	$chunk_count = () = /\X/g;
124	$word_count  = () = /(?:(?=\pL)\X)+/g;
125	$tab_count   = y/\t//;
126	$line_count  = y/\n//;
127
128	$bad++ unless check($byte_count,  $., "NEW", "BYTES");
129	$bad++ unless check($char_count,  $., "NEW", "CHARS");
130	$bad++ unless check($chunk_count, $., "NEW", "CHUNKS");
131	$bad++ unless check($word_count,  $., "NEW", "WORDS");
132	$bad++ unless check($tab_count,   $., "NEW", "TABS");
133	$bad++ unless check($line_count,  $., "NEW", "LINES");
134
135	my $num = $. + 1;
136	print $bad ? "not " : "", "ok $num\n";
137	$Errors += $bad;
138
139    }
140
141}
142
143__DATA__
144	Los dos reyes
145	     y
146	Los dos laberintos
147
148Cuentan 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 ms 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 mo, donde no hay escaleras que subir, ni puertas que forzar, ni fatigosas galerías que recorrer, ni muros que te veden el paso149
150Luego 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.
151
152				——Jorge Luís Borges
153