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
|
#!/usr/bin/perl
# Test that we can pipe uncompressed mailboxes to STDIN
use strict;
use Test::More;
use lib 't';
use File::Spec::Functions qw(:ALL);
use Test::Utils;
use FileHandle;
my @files = <t/mailboxes/*.txt>;
mkdir catfile('t','temp'), 0700;
plan (tests => 1 * scalar (@files));
local $/ = undef;
my $test_program = <DATA>;
foreach my $filename (@files)
{
print "Testing filename: $filename\n";
TestImplementation($filename, $test_program);
}
# ---------------------------------------------------------------------------
sub TestImplementation
{
my $filename = shift;
my $test_program = shift;
my $testname = [splitdir($0)]->[-1];
$testname =~ s#\.t##;
my ($folder_name) = $filename =~ /\/([^\/\\]*)\.txt.*$/;
my $output_filename = catfile('t','temp',
"${testname}_${folder_name}.stdout");
local $/ = undef;
open TESTER, ">" . catfile('t','temp','stdin.pl');
binmode TESTER;
print TESTER $test_program;
close TESTER;
open MAILBOX, $filename;
binmode MAILBOX;
my $mailbox = <MAILBOX>;
close MAILBOX;
open PIPE, "|$^X -I" . catfile('blib','lib') . " " .
catfile('t','temp','stdin.pl') . " \"$output_filename\"";
binmode PIPE;
local $SIG{PIPE} = sub { die "test program pipe broke" };
print PIPE $mailbox;
close PIPE;
$filename =~ s#\.(tz|bz2|gz)$##;
CheckDiffs([$filename,$output_filename]);
}
################################################################################
__DATA__
use strict;
use Mail::Mbox::MessageParser;
use FileHandle;
die unless @ARGV == 1;
my $output_filename = shift @ARGV;
my $fileHandle = new FileHandle;
$fileHandle->open('-');
ParseFile($output_filename);
exit;
################################################################################
sub ParseFile
{
my $output_filename = shift;
my $file_handle = new FileHandle;
$file_handle->open('-') or die $!;
my $output_file_handle = new FileHandle(">$output_filename");
binmode $output_file_handle;
my $folder_reader =
new Mail::Mbox::MessageParser( {
'file_name' => undef,
'file_handle' => $file_handle,
'enable_cache' => 0,
'enable_grep' => 0,
} );
die $folder_reader unless ref $folder_reader;
print $output_file_handle $folder_reader->prologue();
while (!$folder_reader->end_of_file())
{
my $email_text = $folder_reader->read_next_email();
print $output_file_handle $$email_text;
}
close $output_file_handle;
}
################################################################################
|