xref: /openbsd-src/gnu/usr.bin/perl/t/uni/write.t (revision b8851fcc53cbe24fd20b090f26dd149e353f6174)
185009909Smillert#!./perl -w
285009909Smillertuse strict;
385009909Smillert
485009909SmillertBEGIN {
5*b8851fccSafresh1    chdir 't' if -d 't';
6898184e3Ssthen    require './test.pl';
7898184e3Ssthen    skip_all_without_perlio();
885009909Smillert}
985009909Smillert
10898184e3Ssthenplan tests => 8;
1185009909Smillert
1285009909Smillert# Some tests for UTF8 and format/write
1385009909Smillert
1485009909Smillertour ($bitem1, $uitem1) = ("\x{ff}", "\x{100}");
1585009909Smillertour ($bitem2, $uitem2) = ("\x{fe}", "\x{101}");
1685009909Smillertour ($blite1, $ulite1) = ("\x{fd}", "\x{102}");
1785009909Smillertour ($blite2, $ulite2) = ("\x{fc}", "\x{103}");
1885009909Smillertour ($bmulti, $umulti) = ("\x{fb}\n\x{fa}\n\x{f9}\n",
1985009909Smillert			  "\x{104}\n\x{105}\n\x{106}\n");
2085009909Smillert
2185009909Smillertsub fmwrtest {
2285009909Smillert  no strict 'refs';
2385009909Smillert  my ($out, $format, $expect, $name) = @_;
2485009909Smillert  eval "format $out =\n$format.\n"; die $@ if $@;
2585009909Smillert  open $out, '>:utf8', 'Uni_write.tmp' or die "Can't create Uni_write.tmp";
2685009909Smillert  write $out;
2785009909Smillert  close $out or die "Could not close $out: $!";
2885009909Smillert
2985009909Smillert  open UIN, '<:utf8', 'Uni_write.tmp' or die "Can't open Uni_write.tmp";;
3085009909Smillert  my $result = do { local $/; <UIN>; };
3185009909Smillert  close UIN;
3285009909Smillert
3385009909Smillert  is($result, $expect, $name);
3485009909Smillert}
3585009909Smillert
3685009909Smillertfmwrtest OUT1 => <<EOFORMAT, <<EOEXPECT, "non-UTF8 literal / UTF8 item (1)";
3785009909Smillert$blite1 @<<
3885009909Smillert\$uitem1
3985009909Smillert$blite2 @<<
4085009909Smillert\$bitem2
4185009909SmillertEOFORMAT
4285009909Smillert$blite1 $uitem1
4385009909Smillert$blite2 $bitem2
4485009909SmillertEOEXPECT
4585009909Smillert
4685009909Smillertfmwrtest OUT2 => <<EOFORMAT, <<EOEXPECT, "non-UTF8 literal / UTF8 item (2)";
4785009909Smillert$blite1 @<<
4885009909Smillert\$bitem1
4985009909Smillert$blite2 @<<
5085009909Smillert\$uitem2
5185009909SmillertEOFORMAT
5285009909Smillert$blite1 $bitem1
5385009909Smillert$blite2 $uitem2
5485009909SmillertEOEXPECT
5585009909Smillert
5685009909Smillertfmwrtest OUT3 => <<EOFORMAT, <<EOEXPECT, "UTF8 literal / non-UTF8 item (1)";
5785009909Smillert$ulite1 @<<
5885009909Smillert\$bitem1
5985009909Smillert$blite2 @<<
6085009909Smillert\$bitem2
6185009909SmillertEOFORMAT
6285009909Smillert$ulite1 $bitem1
6385009909Smillert$blite2 $bitem2
6485009909SmillertEOEXPECT
6585009909Smillert
6685009909Smillertfmwrtest OUT4 => <<EOFORMAT, <<EOEXPECT, "UTF8 literal / non-UTF8 item (2)";
6785009909Smillert$blite1 @<<
6885009909Smillert\$bitem1
6985009909Smillert$ulite2 @<<
7085009909Smillert\$bitem2
7185009909SmillertEOFORMAT
7285009909Smillert$blite1 $bitem1
7385009909Smillert$ulite2 $bitem2
7485009909SmillertEOEXPECT
7585009909Smillert
7685009909Smillertfmwrtest OUT5 => <<EOFORMAT, <<EOEXPECT, "non-UTF8 literal / UTF8 multiline";
7785009909Smillert$blite1
7885009909Smillert@*
7985009909Smillert\$umulti
8085009909Smillert$blite2
8185009909SmillertEOFORMAT
8285009909Smillert$blite1
8385009909Smillert$umulti$blite2
8485009909SmillertEOEXPECT
8585009909Smillert
8685009909Smillertfmwrtest OUT6 => <<EOFORMAT, <<EOEXPECT, "UTF8 literal / non-UTF8 multiline";
8785009909Smillert$ulite1
8885009909Smillert@*
8985009909Smillert\$bmulti
9085009909Smillert$blite2
9185009909SmillertEOFORMAT
9285009909Smillert$ulite1
9385009909Smillert$bmulti$blite2
9485009909SmillertEOEXPECT
9585009909Smillert
96898184e3Ssthen{
97898184e3Ssthen    use utf8;
98898184e3Ssthen    use open qw( :utf8 :std );
99898184e3Ssthen
100898184e3Ssthen    local $~ = "놋웇ʱFᚖṀŦ";
101898184e3Ssthen    eval { write };
102898184e3Ssthen    like $@, qr/Undefined format "놋웇ʱFᚖṀŦ/u, 'no such format, with format name in UTF-8.';
103898184e3Ssthen}
104898184e3Ssthen
105898184e3Ssthen{
106898184e3Ssthen
107898184e3Ssthenformat OUT =
108898184e3Ssthen
109898184e3Ssthen
110898184e3Ssthen.
111898184e3Ssthen    use utf8;
112898184e3Ssthen    use open qw( :utf8 :std );
113898184e3Ssthen    open OUT, '>', 'Uni_write2.tmp';
114898184e3Ssthen
115898184e3Ssthen    my $oldfh = select OUT;
116898184e3Ssthen    local $^ = "უデfiᕣネḓ_FᚖṀŦɐȾ";#"UNDEFINED_FORMAT";
117898184e3Ssthen    eval { write };
118898184e3Ssthen    like $@, qr/Undefined top format "უデfiᕣネḓ_FᚖṀŦɐȾ/u, 'no such top format';
119898184e3Ssthen    select $oldfh;
120898184e3Ssthen    close OUT;
121898184e3Ssthen}
122898184e3Ssthen
123898184e3Ssthenunlink_all qw( Uni_write.tmp Uni_write2.tmp );
124