#!/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;
