The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*- Perl -*-

# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl 1.t'

#########################

# change 'tests => 1' to 'tests => last_test_to_print';

use Test::More tests => 1 + 2*8 + 2 + 1 + 2 +3;
BEGIN { use_ok('Convert::yEnc::Decoder') };

#########################

use strict;
use warnings;
use Config;
use IO::File;
require "t/utils.pl";

my $NTX = "t/ntx";
my $Dir = "t/Decoder.d";
mkdir $Dir;
my $NL  = whats_my_line();

Singles    ();
Name       ();
DecodeSTDIN();
OutDir     ();
Multiple   ();

sub Singles
{
    my $in = "$NTX/00000005.$NL";
    Single($in);
    open IN, $in or die "Can't open $in: $!\n";
    Single(\*IN);
    close IN;
}

sub Single
{
    my $in      = shift;
    my $out	= "$Dir/testfile.txt";
    my $exp 	= "$NTX/testfile.exp";
    my $decoder = new Convert::yEnc::Decoder $Dir;

    unlink $out;
    eval { $decoder->decode($in) };
    is($@, '', "decode $in");

    ok(CmpFiles($out, $exp), "cmp $out $exp");

    is($decoder->name, "testfile.txt", "name");
    is($decoder->file, $out          , "file");
    is($decoder->size, 584           , "size");

    my $ybegin = qq(=ybegin line=128 size=584 name=testfile.txt \n);
    my $yend   = qq(=yend size=584 crc32=ded29f4f \n);

    is($decoder->ybegin, $ybegin, "ybegin");
    is($decoder->ypart , undef  , "ypart" );
    is($decoder->yend  , $yend  , "yend"  );
}

sub Name
{
    my $in      = "$NTX/vole.$NL";
    my $out	= "$Dir/Who Stole My Vole";
    my $exp 	= "$NTX/testfile.exp";
    my $decoder = new Convert::yEnc::Decoder $Dir;

    unlink $out;
    eval { $decoder->decode($in) };
    is($@, '', "decode $in");

    ok(CmpFiles($out, $exp), "cmp $out $exp");
}

sub DecodeSTDIN
{
    my $in  = "$NTX/00000005.$NL";
    my $out = "$Dir/testfile.txt";
    my $exp = "$NTX/testfile.exp";

    unlink $out;
    system "cat $in | $Config{perlpath} $Dir/decoder.pl $Dir";

    ok(CmpFiles($out, $exp), "DeocdeSTDIN: cmp $out $exp");
}


sub OutDir
{
    my $in      = "$NTX/00000005.$NL";
    my $out	= "$Dir/testfile.txt";
    my $exp 	= "$NTX/testfile.exp";
    my $decoder = new Convert::yEnc::Decoder;
       $decoder->out_dir($Dir);

    unlink $out;
    eval { $decoder->decode($in) };
    is($@, '', "decode $in");

    ok(CmpFiles($out, $exp), "cmp $out $exp");
}


sub Multiple
{
    my $out 	= "$Dir/joystick.jpg";
    my $exp 	= "$NTX/joystick.exp";
    my $decoder = new Convert::yEnc::Decoder $Dir;

    unlink $out;
    Part($decoder, "00000020");
    Part($decoder, "00000021");

    ok(CmpFiles($out, $exp), "cmp $out $exp");
}

sub Part
{
    my($decoder, $base) = @_;
    my $in = "$NTX/$base.$NL";

    eval { $decoder->decode($in) };
    is($@, '', "decode $in");
}