# Revision history for Perl extension Encode.
#
-# $Id: Changes,v 2.34 2009/07/08 13:34:15 dankogai Exp $
-$Revision: 2.34 $ $Date: 2009/07/08 13:34:15 $
+# $Id: Changes,v 2.35 2009/07/13 02:06:30 dankogai Exp dankogai $
+$Revision: 2.35 $ $Date: 2009/07/13 02:06:30 $
+! lib/Encode/MIME/Header.pm
+ Addressed RT #40027:
+ decode of MIME-Header removes too much whitespace
+ http://rt.cpan.org/Ticket/Display.html?id=40027
+ http://rt.cpan.org/Ticket/Display.html?id=42902
+! t/piconv.t
+ Addressed by CSJEWELL: t/piconv.t loops infinitely on Win32
+ http://rt.cpan.org/Ticket/Display.html?id=47760
+
+2.34 2009/07/08 13:34:15
! bin/piconv
duplicate-BOM problem now fixed.
Message-Id: <10ECB9B7-006E-4570-9EB6-51C49F04ADCF@dan.co.jp>
#
-# $Id: piconv.t,v 0.1 2009/07/08 12:34:21 dankogai Exp $
+# $Id: piconv.t,v 0.2 2009/07/13 00:50:52 dankogai Exp $
#
BEGIN {
use IO::Select;
use Test::More;
+my $WIN = $^O eq 'MSWin32';
+
+if ($WIN) {
+ eval { require IPC::Run; IPC::Run->VERSION(0.83); 1; } or
+ plan skip_all => 'Win32 environments require IPC::Run 0.83 to complete this test';
+}
+
sub run_cmd (;$$);
my $blib =
File::Spec->rel2abs(
- File::Spec->catfile( $FindBin::RealBin, File::Spec->updir, 'blib' ) );
-my $script = "$blib/script/piconv";
+ File::Spec->catdir( $FindBin::RealBin, File::Spec->updir, 'blib' ) );
+my $script = File::Spec->catdir($blib, 'script', 'piconv');
my @base_cmd = ( $^X, "-Mblib=$blib", $script );
plan tests => 5;
{
my ( $st, $out, $err ) = run_cmd;
is( $st, 0, 'status for usage call' );
- is( $out, undef );
+ is( $out, $WIN ? undef : '' );
like( $err, qr{^piconv}, 'usage' );
}
sub run_cmd (;$$) {
my ( $args, $in ) = @_;
- $in ||= '';
- my ( $out, $err );
- my ( $in_fh, $out_fh, $err_fh );
- use Symbol 'gensym';
- $err_fh =
- gensym; # sigh... otherwise stderr gets just to $out_fh, not to $err_fh
- my $pid = open3( $in_fh, $out_fh, $err_fh, @base_cmd, @$args )
- or die "Can't run @base_cmd @$args: $!";
- print $in_fh $in;
- my $sel = IO::Select->new( $out_fh, $err_fh );
+
+ my $out = "x" x 10_000;
+ $out = "";
+ my $err = "x" x 10_000;
+ $err = "";
+
+ if ($WIN) {
+ IPC::Run->import(qw(run timeout));
+ my @cmd;
+ if (defined $args) {
+ @cmd = (@base_cmd, @$args);
+ } else {
+ @cmd = @base_cmd;
+ }
+ run(\@cmd, \$in, \$out, \$err, timeout(10));
+ my $st = $?;
+ $out = undef if ($out eq '');
+ ( $st, $out, $err );
+ } else {
+ $in ||= '';
+ my ( $in_fh, $out_fh, $err_fh );
+ use Symbol 'gensym';
+ $err_fh =
+ gensym; # sigh... otherwise stderr gets just to $out_fh, not to $err_fh
+ my $pid = open3( $in_fh, $out_fh, $err_fh, @base_cmd, @$args )
+ or die "Can't run @base_cmd @$args: $!";
+ print $in_fh $in;
+ my $sel = IO::Select->new( $out_fh, $err_fh );
- while ( my @ready = $sel->can_read ) {
- for my $fh (@ready) {
- if ( eof($fh) ) {
- $sel->remove($fh);
- last if !$sel->handles;
- }
- elsif ( $out_fh == $fh ) {
- my $line = <$fh>;
- $out .= $line;
- }
- elsif ( $err_fh == $fh ) {
- my $line = <$fh>;
- $err .= $line;
+ while ( my @ready = $sel->can_read ) {
+ for my $fh (@ready) {
+ if ( eof($fh) ) {
+ $sel->remove($fh);
+ last if !$sel->handles;
+ }
+ elsif ( $out_fh == $fh ) {
+ my $line = <$fh>;
+ $out .= $line;
+ }
+ elsif ( $err_fh == $fh ) {
+ my $line = <$fh>;
+ $err .= $line;
+ }
}
}
+ my $st = $?;
+ ( $st, $out, $err );
}
- my $st = $?;
- ( $st, $out, $err );
}