#!/usr/bin/perl -w
use strict;
use warnings;
use Test::More tests => 30;
use MIME::Body;
use MIME::Tools;
use Cwd;
# Check bodies:
my @bodies = (
MIME::Body::Scalar->new(),
MIME::Body::File->new('./testout/fbody'),
MIME::Body::InCore->new(),
);
my $buf;
my @lines;
my $line;
my $pos;
foreach my $body ( @bodies ) {
my $io;
my $class = ref($body);
# diag("Checking class: ", ref($body));
# Open body for writing, and write stuff:
$io = $body->open("w");
ok($io, "$class: opened for writing");
$io->print("Line 1\nLine 2\nLine 3");
$io->close;
# Open body for reading:
$io = $body->open("r");
ok($io, "$class: able to open body for reading?");
# Read all lines:
@lines = $io->getlines;
ok((($lines[0] eq "Line 1\n") &&
($lines[1] eq "Line 2\n") &&
($lines[2] eq "Line 3")),
"$class: getlines method works?"
);
# Seek forward, read:
$io->seek(3, 0);
$io->read($buf, 3);
is($buf, 'e 1', "$class: seek(SEEK_START) plus read works?");
# Tell, seek, and read:
$pos = $io->tell;
$io->seek(-5, 1);
$pos = $io->tell;
is($pos, 1, "$class: tell and seek(SEEK_CUR) works?");
$io->read($buf, 5);
is($buf, 'ine 1', "$class: seek(SEEK_CUR) plus read works?");
# Read all lines, one at a time:
@lines = ();
$io->seek(0, 0);
while ($line = $io->getline()) { push @lines, $line }
ok((($lines[0] eq "Line 1\n") &&
($lines[1] eq "Line 2\n") &&
($lines[2] eq "Line 3")),
"$class: getline works?"
);
# Done!
$io->close;
# Slurp lines:
@lines = $body->as_lines;
ok((($lines[0] eq "Line 1\n") &&
($lines[1] eq "Line 2\n") &&
($lines[2] eq "Line 3")),
"$class: as_lines works?"
);
# Slurp string:
my $str = $body->as_string;
is($str, "Line 1\nLine 2\nLine 3", "$class: as_string works?");
}
# Check that we can open files with leading whitespace in name
# (RT ticket #22680)
{
my $cwd = cwd();
ok( chdir './testout', 'chdir to ./testout to avoid clutter');
eval {
my $body = MIME::Body::File->new(" bad file ");
my $fh = $body->open('w');
$fh->close();
ok( -e ' bad file ', 'file created with leading whitespace, as expected');
unlink(' bad file ');
};
ok( chdir $cwd, 'chdir back');
}
1;