1de8cc8edSafresh1# t/rtf_utf8.t - Check that RTF works with UTF-8 input 2de8cc8edSafresh1use strict; 3256a93a4Safresh1use warnings; 4de8cc8edSafresh1use Test::More; 5de8cc8edSafresh1 6de8cc8edSafresh1if ($] < 5.008) { 7de8cc8edSafresh1 plan skip_all => "Doesn't work before 5.8"; 8de8cc8edSafresh1} 9de8cc8edSafresh1else { 10de8cc8edSafresh1 plan tests => 5; 11de8cc8edSafresh1} 12de8cc8edSafresh1 13*5486feefSafresh1use File::Spec; 14*5486feefSafresh1use Cwd (); 15*5486feefSafresh1use File::Basename (); 16*5486feefSafresh1 17*5486feefSafresh1my $t_dir = File::Basename::dirname(Cwd::abs_path(__FILE__)); 18*5486feefSafresh1 19*5486feefSafresh1my $expected = join "", <DATA>; 20*5486feefSafresh1 21de8cc8edSafresh1for my $format (qw(RTF)) { 22de8cc8edSafresh1 my $class = "Pod::Simple::RTF"; 23de8cc8edSafresh1 use_ok $class or next; 24de8cc8edSafresh1 ok my $parser = $class->new, "Construct RTF parser"; 25de8cc8edSafresh1 26de8cc8edSafresh1 my $output = ''; 27de8cc8edSafresh1 ok $parser->output_string(\$output), "Set RTF output string"; 28*5486feefSafresh1 ok $parser->parse_file(File::Spec->catfile($t_dir, qw(corpus polish_utf8.txt))), 29de8cc8edSafresh1 "Parse to RTF via parse_file()"; 30de8cc8edSafresh1 $output =~ s/\\info.*?author \[see doc\]\}/VARIANT TEXT DELETED/s; 31de8cc8edSafresh1 $output =~ s/$/\n/; 32de8cc8edSafresh1 33de8cc8edSafresh1 my $msg = "got expected output"; 34de8cc8edSafresh1 if ($output eq $expected) { 35de8cc8edSafresh1 pass($msg); 36de8cc8edSafresh1 } 37de8cc8edSafresh1 elsif ($ENV{PERL_TEST_DIFF}) { 38de8cc8edSafresh1 fail($msg); 39de8cc8edSafresh1 require File::Temp; 40de8cc8edSafresh1 my $orig_file = File::Temp->new(); 41de8cc8edSafresh1 local $/ = "\n"; 42de8cc8edSafresh1 chomp $expected; 43de8cc8edSafresh1 print $orig_file $expected, "\n"; 44de8cc8edSafresh1 close $orig_file || die "Can't close orig_file: $!"; 45de8cc8edSafresh1 46de8cc8edSafresh1 chomp $output; 47de8cc8edSafresh1 my $parsed_file = File::Temp->new(); 48de8cc8edSafresh1 print $parsed_file $output, "\n"; 49de8cc8edSafresh1 close $parsed_file || die "Can't close parsed_file"; 50de8cc8edSafresh1 51de8cc8edSafresh1 my $diff = File::Temp->new(); 52de8cc8edSafresh1 system("$ENV{PERL_TEST_DIFF} $orig_file $parsed_file > $diff"); 53de8cc8edSafresh1 54de8cc8edSafresh1 open my $fh, "<", $diff || die "Can't open $diff"; 55de8cc8edSafresh1 my @diffs = <$fh>; 56de8cc8edSafresh1 diag(@diffs); 57de8cc8edSafresh1 } 58de8cc8edSafresh1 else { 59de8cc8edSafresh1 eval { require Text::Diff; }; 60de8cc8edSafresh1 if ($@) { 61de8cc8edSafresh1 is($output, $expected, $msg); 62de8cc8edSafresh1 diag("Set environment variable PERL_TEST_DIFF=diff_tool or install" 63de8cc8edSafresh1 . " Text::Diff to see just the differences."); 64de8cc8edSafresh1 } 65de8cc8edSafresh1 else { 66de8cc8edSafresh1 fail($msg); 67de8cc8edSafresh1 diag Text::Diff::diff(\$expected, \$output, { STYLE => 'Unified' }); 68de8cc8edSafresh1 } 69de8cc8edSafresh1 } 70de8cc8edSafresh1} 71de8cc8edSafresh1 72de8cc8edSafresh1__DATA__ 73de8cc8edSafresh1{\rtf1\ansi\deff0 74de8cc8edSafresh1 75de8cc8edSafresh1{\fonttbl 76de8cc8edSafresh1{\f0\froman Times New Roman;} 77de8cc8edSafresh1{\f1\fmodern Courier New;} 78de8cc8edSafresh1{\f2\fswiss Arial;} 79de8cc8edSafresh1} 80de8cc8edSafresh1 81de8cc8edSafresh1{\stylesheet 82de8cc8edSafresh1{\snext0 Normal;} 83de8cc8edSafresh1{\*\cs10 \additive Default Paragraph Font;} 84de8cc8edSafresh1{\*\cs16 \additive \i \sbasedon10 pod-I;} 85de8cc8edSafresh1{\*\cs17 \additive \i\lang1024\noproof \sbasedon10 pod-F;} 86de8cc8edSafresh1{\*\cs18 \additive \b \sbasedon10 pod-B;} 87de8cc8edSafresh1{\*\cs19 \additive \f1\lang1024\noproof\sbasedon10 pod-C;} 88de8cc8edSafresh1{\s20\ql \li0\ri0\sa180\widctlpar\f1\fs18\lang1024\noproof\sbasedon0 \snext0 pod-codeblock;} 89de8cc8edSafresh1{\*\cs21 \additive \lang1024\noproof \sbasedon10 pod-computerese;} 90de8cc8edSafresh1{\*\cs22 \additive \i\lang1024\noproof\sbasedon10 pod-L-pod;} 91de8cc8edSafresh1{\*\cs23 \additive \i\lang1024\noproof\sbasedon10 pod-L-url;} 92de8cc8edSafresh1{\*\cs24 \additive \i\lang1024\noproof\sbasedon10 pod-L-man;} 93de8cc8edSafresh1 94de8cc8edSafresh1{\*\cs25 \additive \f1\lang1024\noproof\sbasedon0 pod-codelbock-plain;} 95de8cc8edSafresh1{\*\cs26 \additive \f1\lang1024\noproof\sbasedon25 pod-codelbock-ital;} 96de8cc8edSafresh1{\*\cs27 \additive \f1\lang1024\noproof\sbasedon25 pod-codelbock-bold;} 97de8cc8edSafresh1{\*\cs28 \additive \f1\lang1024\noproof\sbasedon25 pod-codelbock-bold-ital;} 98de8cc8edSafresh1 99de8cc8edSafresh1{\s31\ql \keepn\sb90\sa180\f2\fs32\ul\sbasedon0 \snext0 pod-head1;} 100de8cc8edSafresh1{\s32\ql \keepn\sb90\sa180\f2\fs28\ul\sbasedon0 \snext0 pod-head2;} 101de8cc8edSafresh1{\s33\ql \keepn\sb90\sa180\f2\fs25\ul\sbasedon0 \snext0 pod-head3;} 102de8cc8edSafresh1{\s34\ql \keepn\sb90\sa180\f2\fs22\ul\sbasedon0 \snext0 pod-head4;} 103de8cc8edSafresh1} 104de8cc8edSafresh1 105de8cc8edSafresh1{\colortbl;\red255\green0\blue0;\red0\green0\blue255;} 106de8cc8edSafresh1{VARIANT TEXT DELETED{\company [see doc]}{\operator [see doc]} 107de8cc8edSafresh1} 108de8cc8edSafresh1 109de8cc8edSafresh1\deflang1033\plain\lang1033\widowctrl 110de8cc8edSafresh1{\header\pard\qr\plain\f2\fs17 111de8cc8edSafresh1W\uc1\u346?R\'d3D NOCNEJ CISZY \_\_ explicitly utf8 test document in Polish, 112de8cc8edSafresh1p.\chpgn\par} 113de8cc8edSafresh1\fs25 114de8cc8edSafresh1 115de8cc8edSafresh1 116de8cc8edSafresh1 117de8cc8edSafresh1{\pard\li0\s31\keepn\sb90\sa180\f2\fs32\ul{ 118de8cc8edSafresh1NAME 119de8cc8edSafresh1}\par} 120de8cc8edSafresh1 121de8cc8edSafresh1{\pard\li0\sa180 122de8cc8edSafresh1W\uc1\u346?R\'d3D NOCNEJ CISZY \_\_ explicitly utf8 test document 123de8cc8edSafresh1in Polish 124de8cc8edSafresh1\par} 125de8cc8edSafresh1 126de8cc8edSafresh1{\pard\li0\s31\keepn\sb90\sa180\f2\fs32\ul{ 127de8cc8edSafresh1DESCRIPTION 128de8cc8edSafresh1}\par} 129de8cc8edSafresh1 130de8cc8edSafresh1{\pard\li0\sa180 131de8cc8edSafresh1This is a test Pod document in UT\'468. Its content is the lyrics 132de8cc8edSafresh1to the Polish Christmas carol "W\uc1\u347?r\'f3d nocnej ciszy", except 133de8cc8edSafresh1it includes a few lines to test RT\'46 specially. 134de8cc8edSafresh1\par} 135de8cc8edSafresh1 136de8cc8edSafresh1{\pard\li0\sa180 137de8cc8edSafresh1\uc1\u-1280? is a character in the upper half of Plane 0, so should 138de8cc8edSafresh1be negative in RT\'46 \uc1\u-10187\u-8904? is a character in Plane 139de8cc8edSafresh11, so should be expressed as a surrogate pair in RT\'46 140de8cc8edSafresh1\par} 141de8cc8edSafresh1 142de8cc8edSafresh1{\pard\li0\sa180 143de8cc8edSafresh1All the ASCII printables !"#$%&\'5c'()*+,\_./0123456789:;<=>?@ ABCDE\'46GHIJKLMNOPQRSTUVWXYZ[{ 144de8cc8edSafresh1\cs21\lang1024\noproof \'5c]^\'5f`} abcdefghijklmnopqrstuvwxyz\'7b|\'7d~ 145de8cc8edSafresh1\par} 146de8cc8edSafresh1 147de8cc8edSafresh1{\pard\li0\sa180 148de8cc8edSafresh1W\uc1\u347?r\'f3d nocnej ciszy g\uc1\u322?os si\uc1\u281? rozchodzi: 149de8cc8edSafresh1/ Wsta\uc1\u324?cie, pasterze, B\'f3g si\uc1\u281? nam rodzi! / Czym 150de8cc8edSafresh1pr\uc1\u281?dzej si\uc1\u281? wybierajcie, / Do Betlejem pospieszajcie 151de8cc8edSafresh1/ Przywita\uc1\u263? Pana. 152de8cc8edSafresh1\par} 153de8cc8edSafresh1 154de8cc8edSafresh1{\pard\li0\sa180 155de8cc8edSafresh1Poszli, znale\uc1\u378?li Dzieci\uc1\u261?tko w \uc1\u380?\uc1\u322?obie 156de8cc8edSafresh1/ Z wszystkimi znaki danymi sobie. / Jako Bogu cze\uc1\u347?\uc1\u263? 157de8cc8edSafresh1Mu dali, / A witaj\uc1\u261?c zawo\uc1\u322?ali / Z wielkiej rado\uc1\u347?ci: 158de8cc8edSafresh1\par} 159de8cc8edSafresh1 160de8cc8edSafresh1{\pard\li0\sa180 161de8cc8edSafresh1Ach, witaj Zbawco z dawno \uc1\u380?\uc1\u261?dany, / Wiele tysi\uc1\u281?cy 162de8cc8edSafresh1lat wygl\uc1\u261?dany / Na Ciebie kr\'f3le, prorocy / Czekali, a 163de8cc8edSafresh1Ty\uc1\u347? tej nocy / Nam si\uc1\u281? objawi\uc1\u322?. 164de8cc8edSafresh1\par} 165de8cc8edSafresh1 166de8cc8edSafresh1{\pard\li0\sa180 167de8cc8edSafresh1I my czekamy na Ciebie, Pana, / A skoro przyjdziesz na g\uc1\u322?os 168de8cc8edSafresh1kap\uc1\u322?ana, / Padniemy na twarz przed Tob\uc1\u261?, / Wierz\uc1\u261?c, 169de8cc8edSafresh1\uc1\u380?e\uc1\u347? jest pod os\uc1\u322?on\uc1\u261? / Chleba i 170de8cc8edSafresh1wina. 171de8cc8edSafresh1\par} 172de8cc8edSafresh1 173de8cc8edSafresh1{\pard\li0\s32\keepn\sb90\sa180\f2\fs28\ul{ 174de8cc8edSafresh1As Verbatim 175de8cc8edSafresh1}\par} 176de8cc8edSafresh1 177de8cc8edSafresh1{\pard\li0\sa180 178de8cc8edSafresh1And now as verbatim text: 179de8cc8edSafresh1\par} 180de8cc8edSafresh1 181de8cc8edSafresh1{\pard\li0\plain\s20\sa180\f1\fs18\lang1024\noproof 182de8cc8edSafresh1 \uc1\u-1280? upper half, Plane 0\line 183de8cc8edSafresh1 \uc1\u-10187\u-8904? Plane 1\line 184de8cc8edSafresh1\line 185de8cc8edSafresh1 All the ASCII printables\line 186de8cc8edSafresh1 !"#$%&\'5c'()*+,-./0123456789:;<=>?@\line 187de8cc8edSafresh1 ABCDE\'46GHIJKLMNOPQRSTUVWXYZ[\'5c]^\'5f`\line 188de8cc8edSafresh1 abcdefghijklmnopqrstuvwxyz\'7b|\'7d~\line 189de8cc8edSafresh1\line 190de8cc8edSafresh1 W\uc1\u347?r\'f3d nocnej ciszy g\uc1\u322?os si\uc1\u281? rozchodzi:\line 191de8cc8edSafresh1 Wsta\uc1\u324?cie, pasterze, B\'f3g si\uc1\u281? nam rodzi!\line 192de8cc8edSafresh1 Czym pr\uc1\u281?dzej si\uc1\u281? wybierajcie,\line 193de8cc8edSafresh1 Do Betlejem pospieszajcie\line 194de8cc8edSafresh1 Przywita\uc1\u263? Pana.\line 195de8cc8edSafresh1\line 196de8cc8edSafresh1 Poszli, znale\uc1\u378?li Dzieci\uc1\u261?tko w \uc1\u380?\uc1\u322?obie\line 197de8cc8edSafresh1 Z wszystkimi znaki danymi sobie.\line 198de8cc8edSafresh1 Jako Bogu cze\uc1\u347?\uc1\u263? Mu dali,\line 199de8cc8edSafresh1 A witaj\uc1\u261?c zawo\uc1\u322?ali\line 200de8cc8edSafresh1 Z wielkiej rado\uc1\u347?ci:\line 201de8cc8edSafresh1\line 202de8cc8edSafresh1 Ach, witaj Zbawco z dawno \uc1\u380?\uc1\u261?dany,\line 203de8cc8edSafresh1 Wiele tysi\uc1\u281?cy lat wygl\uc1\u261?dany\line 204de8cc8edSafresh1 Na Ciebie kr\'f3le, prorocy\line 205de8cc8edSafresh1 Czekali, a Ty\uc1\u347? tej nocy\line 206de8cc8edSafresh1 Nam si\uc1\u281? objawi\uc1\u322?.\line 207de8cc8edSafresh1\line 208de8cc8edSafresh1 I my czekamy na Ciebie, Pana,\line 209de8cc8edSafresh1 A skoro przyjdziesz na g\uc1\u322?os kap\uc1\u322?ana,\line 210de8cc8edSafresh1 Padniemy na twarz przed Tob\uc1\u261?,\line 211de8cc8edSafresh1 Wierz\uc1\u261?c, \uc1\u380?e\uc1\u347? jest pod os\uc1\u322?on\uc1\u261?\line 212de8cc8edSafresh1 Chleba i wina. 213de8cc8edSafresh1\par} 214de8cc8edSafresh1 215de8cc8edSafresh1{\pard\li0\sa180 216de8cc8edSafresh1[end] 217de8cc8edSafresh1\par} 218de8cc8edSafresh1} 219