1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
#!/usr/bin/perl -w
#
# man-utf8.t -- Test Pod::Man with UTF-8 input.
#
# Copyright 2002, 2004, 2006, 2008, 2009, 2012 Russ Allbery <rra@stanford.edu>
#
# This program is free software; you may redistribute it and/or modify it
# under the same terms as Perl itself.
BEGIN {
chdir 't' if -d 't';
if ($ENV{PERL_CORE}) {
@INC = '../lib';
}
unshift (@INC, '../blib/lib');
$| = 1;
}
use strict;
use Test::More;
# UTF-8 support requires Perl 5.8 or later.
BEGIN {
if ($] < 5.008) {
plan skip_all => 'Perl 5.8 required for UTF-8 support';
} else {
plan tests => 7;
}
}
BEGIN { use_ok ('Pod::Man') }
# Force UTF-8 on all relevant file handles. Do this inside eval in case the
# encoding parameter doesn't work.
eval { binmode (\*DATA, ':encoding(utf-8)') };
eval { binmode (\*STDOUT, ':encoding(utf-8)') };
my $builder = Test::More->builder;
eval { binmode ($builder->output, ':encoding(utf-8)') };
eval { binmode ($builder->failure_output, ':encoding(utf-8)') };
my $n = 1;
while (<DATA>) {
my %options;
next until $_ eq "###\n";
while (<DATA>) {
last if $_ eq "###\n";
my ($option, $value) = split;
$options{$option} = $value;
}
open (TMP, "> tmp$$.pod") or die "Cannot create tmp$$.pod: $!\n";
eval { binmode (\*TMP, ':encoding(utf-8)') };
print TMP "=encoding utf-8\n\n";
while (<DATA>) {
last if $_ eq "###\n";
print TMP $_;
}
close TMP;
my $parser = Pod::Man->new (%options);
isa_ok ($parser, 'Pod::Man', 'Parser object');
open (OUT, "> out$$.tmp") or die "Cannot create out$$.tmp: $!\n";
$parser->parse_from_file ("tmp$$.pod", \*OUT);
close OUT;
my $accents = 0;
open (TMP, "out$$.tmp") or die "Cannot open out$$.tmp: $!\n";
eval { binmode (\*TMP, ':encoding(utf-8)') };
while (<TMP>) {
$accents = 1 if /Accent mark definitions/;
last if /^\.nh/;
}
my $output;
{
local $/;
$output = <TMP>;
}
close TMP;
1 while unlink ("tmp$$.pod", "out$$.tmp");
if ($options{utf8}) {
ok (!$accents, "Saw no accent definitions for test $n");
} else {
ok ($accents, "Saw accent definitions for test $n");
}
my $expected = '';
while (<DATA>) {
last if $_ eq "###\n";
$expected .= $_;
}
is ($output, $expected, "Output correct for test $n");
$n++;
}
# Below the marker are bits of POD and corresponding expected text output.
# This is used to test specific features or problems with Pod::Man. The
# input and output are separated by lines containing only ###.
__DATA__
###
utf8 1
###
=head1 BEYONCÉ
Beyoncé! Beyoncé! Beyoncé!!
Beyoncé! Beyoncé!
Beyoncé! Beyoncé!
Beyoncé! Beyoncé!
Older versions did not convert Beyoncé in verbatim.
###
.SH "BEYONCÉ"
.IX Header "BEYONCÉ"
Beyoncé! Beyoncé! Beyoncé!!
.PP
.Vb 3
\& Beyoncé! Beyoncé!
\& Beyoncé! Beyoncé!
\& Beyoncé! Beyoncé!
.Ve
.PP
Older versions did not convert Beyoncé in verbatim.
###
###
utf8 1
###
=head1 SE<lt>E<gt> output with UTF-8
This is S<non-breaking output>.
###
.SH "S<> output with UTF\-8"
.IX Header "S<> output with UTF-8"
This is non-breaking output.
###
|