The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl -w

use strict;
use Test::More;
use MIME::Lite;
use MIME::Lite::HTML;
use Cwd;
{
  require URI::URL;
  URI::URL->strict(1);
}


# For create ref file, use perl -Iblib/lib t/50generic.t 1

my $t = "/var/tmp/mime-lite-html-tests";
my $p = cwd;

my $o=(system("ln -s $p/t $t")==0);
my @files_to_test = glob("$t/docs/*.html");
if ($o) {  plan tests => (($#files_to_test+1)* 9 * 3)+1; }
else { plan skip_all => "Error on link ".$p."/t!"; }

foreach my $it ('cid', 'location', 'extern') {
  foreach my $f (@files_to_test) {
    my $ref = $f;
    $ref=~s/\.html/\.eml\.$it/; $ref=~s/docs\//ref\//;
    my $mailHTML = new MIME::Lite::HTML
      (
       From     => 'MIME-Lite@alianwebserver.com',
       To       => 'MIME-Lite@alianwebserver.com',
       Subject  => 'Mail in HTML with images',
       Debug    => 1,
       IncludeType => $it
      );
    my $url_file = "file://$f";
    print $url_file,"\n";
    my $rep = $mailHTML->parse($url_file, "A text message");
    $rep = $rep->as_string;
    $rep =~s/^Date: .*$//gm;
    my @bound;
    while ($rep=~m!boundary="(.*)"!gm) { push(@bound, $1);  }
    foreach (@bound) { $rep=~s/$_/alian-mime-lite-html/g; }

    if (!$ARGV[0]) {
      open(PROD,">$f.created_by_test")
	or die "Can't create $f.created_by_test:$!";
      print PROD $rep;
      close(PROD);
    my $r = `diff $ref $f.created_by_test`;
      cmp_ok($mailHTML->size, ">", (stat($ref))[7], "Same size");
      cmp_ok($mailHTML->size*0.945, "<", (stat($ref))[7], "Same size");
      is($r, "", $ref);
      unlink("$f.created_by_test");
    }
    # for create ref file
    elsif ($ARGV[0]) {
      ok(open(F,">$ref"),"Create $ref");
      print F $rep;
      close(F);
    }
  }
}

foreach my $it ('cid', 'location', 'extern') {
  foreach my $f (@files_to_test) {
    my $ref = $f;
    $ref=~s/\.html/\.eml2\.$it/; $ref=~s/docs\//ref\//;
    my $mailHTML = new MIME::Lite::HTML
      (
       From     => 'MIME-Lite@alianwebserver.com',
       To       => 'MIME-Lite@alianwebserver.com',
       Subject  => 'Mail in HTML with images',
       Debug    => 1,
       IncludeType => $it
      );
    my $url_file = "file://$f";
    print $url_file,"\n";
    my $rep = $mailHTML->parse($url_file);
    $rep = $rep->as_string;
    $rep =~s/^Date: .*$//gm;
    my @bound;
    while ($rep=~m!boundary="(.*)"!gm) { push(@bound, $1);  }
    foreach (@bound) { $rep=~s/$_/alian-mime-lite-html/g; }

    if (!$ARGV[0]) {
      open(PROD,">$f.created_by_test")
	or die "Can't create $f.created_by_test:$!";
      print PROD $rep;
      close(PROD);
    my $r = `diff $ref $f.created_by_test`;
      cmp_ok($mailHTML->size, ">", (stat($ref))[7], "Same size");
      cmp_ok($mailHTML->size*0.945, "<", (stat($ref))[7], "Same size");
      is($r, "", $ref);
      unlink("$f.created_by_test");
    }
    # for create ref file
    elsif ($ARGV[0]) {
      ok(open(F,">$ref"),"Create $ref");
      print F $rep;
      close(F);
    }
  }
}

foreach my $it ('cid', 'location', 'extern') {
  foreach my $f (@files_to_test) {
    my $ref = $f;
    $ref=~s/\.html/\.eml3\.$it/; $ref=~s/docs\//ref\//;
    my $mailHTML = new MIME::Lite::HTML
      (
       From     => 'MIME-Lite@alianwebserver.com',
       To       => 'MIME-Lite@alianwebserver.com',
       Subject  => 'Mail in HTML with images',
       Debug    => 1,
       IncludeType => $it
      );
    my $url_file = "file://$f";
    print $url_file,"\n";
    my $rep = $mailHTML->parse($url_file, 'file://'.$t.'/docs/Readme.txt');
#    print $mailHTML->errstr;
    $rep = $rep->as_string;
    $rep =~s/^Date: .*$//gm;
    my @bound;
    while ($rep=~m!boundary="(.*)"!gm) { push(@bound, $1);  }
    foreach (@bound) { $rep=~s/$_/alian-mime-lite-html/g; }

    if (!$ARGV[0]) {
      open(PROD,">$f.created_by_test")
	or die "Can't create $f.created_by_test:$!";
      print PROD $rep;
      close(PROD);
    my $r = `diff $ref $f.created_by_test`;
      cmp_ok($mailHTML->size, ">", (stat($ref))[7], "Same size");
      cmp_ok($mailHTML->size*0.945, "<", (stat($ref))[7], "Same size");
      is($r, "", $ref);
      unlink("$f.created_by_test");
    }
    # for create ref file
    elsif ($ARGV[0]) {
      ok(open(F,">$ref"),"Create $ref");
      print F $rep;
      close(F);
    }
  }
}

my $mailHTML = new MIME::Lite::HTML
  (
   From     => 'MIME-Lite@alianwebserver.com',
   To       => 'MIME-Lite@alianwebserver.com',
   Subject  => 'Mail in HTML with images',
   Debug    => 1,
  );

my %vars = ( 'perl' => 'fast', 'lng' => 'Ruby');
cmp_ok($mailHTML->fill_template('Perl is <? $perl ?>, <? $lng ?> suck',\%vars),
       'eq', 'Perl is fast, Ruby suck',"Call of fill_template do his job");
unlink($t);