blob: dcd2040175dbd8c7b626bcd0e1eb895ea5295da3 [file] [log] [blame]
#!/usr/bin/perl -T
BEGIN {
if (-e 't/test_dir') { # if we are running "t/rule_tests.t", kluge around ...
chdir 't';
}
if (-e 'test_dir') { # running from test directory, not ..
unshift(@INC, '../blib/lib');
unshift(@INC, '../lib');
}
}
my $prefix = '.';
if (-e 'test_dir') { # running from test directory, not ..
$prefix = '..';
}
use strict;
use Test::More tests => 33;
use Mail::SpamAssassin;
use Digest::SHA qw(sha1_hex);
my %files = (
"$prefix/t/data/nice/mime1" => [
join("\n", 'multipart/alternative','text/plain',
'multipart/mixed,text/plain','application/andrew-inset'),
],
"$prefix/t/data/nice/mime2" => [
join("\n",'audio/basic'),
],
"$prefix/t/data/nice/mime3" => [
join("\n", 'multipart/mixed','multipart/mixed,text/plain,audio/x-sun',
'multipart/mixed,image/gif,image/gif,application/x-be2,application/atomicmail',
'audio/x-sun'),
],
"$prefix/t/data/nice/mime4" => [
join("\n", 'multipart/mixed','text/plain','image/pgm'),
],
"$prefix/t/data/nice/mime5" => [
join("\n", 'multipart/mixed','text/plain','image/pbm'),
'cfbc6b4dbe0d6fe764dd0e0f10023afb0eb0faa9',
'6c41ae723b78e63e3763473cd737b84fae366f80'
],
"$prefix/t/data/nice/mime6" => [
join("\n",'application/postscript'),
],
"$prefix/t/data/nice/mime7" => [
join("\n",'multipart/mixed','audio/basic','audio/basic'),
],
"$prefix/t/data/nice/mime8" => [
join("\n",'multipart/mixed','application/postscript','binary','message/rfc822,multipart/mixed,text/plain,multipart/parallel,image/gif,audio/basic,application/atomicmail,message/rfc822,audio/x-sun'),
'07fdde1c24f216b05813f6a1ae0c7c1c0f84c42b',
'03e5acb518e8aca0b3a7b18f2d94b5efe73495b2'
],
"$prefix/t/data/nice/base64.txt" => [
join("\n",'multipart/mixed','text/plain','text/plain'),
'0147e619903eb01721d04c4f05ab9c9d497be193',
'a0f062b1992b25de8607df1b829d29ede5687126'
],
"$prefix/t/data/spam/badmime.txt" => [
join("\n",'multipart/alternative','text/plain','text/html'),
'fe56ab5c4b0199cd2811871adc89cf2a9a3d9748',
'2e7fea381fe9f0b34f947ddb7a38b81ece68605d'
],
"$prefix/t/data/spam/badmime2.txt" => [
join("\n",'multipart/alternative','text/plain','text/html'),
'05c9e1f1f3638a5191542b0c278debe38ac98a83',
'e6e71e824aec0e204367bfdc9a9e227039f42815'
],
"$prefix/t/data/spam/badmime3.txt" => [
join("\n",'multipart/alternative','text/plain'),
'1c9972d2708b27f4da2e2ef87dd64d53bd11d086'
],
"$prefix/t/data/nice/mime9" => [
join("\n",'multipart/mixed','text/plain','message/rfc822,message/rfc822,multipart/mixed,multipart/alternative,text/plain,text/html,image/jpeg'),
'5cdcabdb89c5fbb3a5e0c0473599668927045d9c',
'f80584aff917e03d54663422918b58e4689cf993',
'0228600472b0820b3b326d9d7842eef3af811cb2',
'0b9fb462ad496d926ef65db0da8da451d7815ab6',
],
);
# initialize SpamAssassin
my $sa = Mail::SpamAssassin->new({
rules_filename => "$prefix/t/log/test_rules_copy",
site_rules_filename => "$prefix/t/log/test_default.cf",
userprefs_filename => "$prefix/masses/spamassassin/user_prefs",
local_tests_only => 1,
debug => 0,
dont_copy_prefs => 1,
});
foreach my $k ( sort keys %files ) {
open(INP, $k) || die "Can't find $k:$!";
my $mail = $sa->parse(\*INP, 1);
close(INP);
my $res = join("\n",$mail->content_summary());
my $want = shift @{$files{$k}};
# print "---$k---\n---\nGOT: $res\n---\nEXPECTED: $want\n---\n";
ok( $res eq $want );
if ( @{$files{$k}} ) {
my @parts = $mail->find_parts(qr/./,1);
# my $i = 0;
# foreach (@parts) { print "> $i ",$parts[$i]->{type},"\n"; $i++; }
foreach ( @{$files{$k}} ) {
$res = 1;
if ( $_ ne '' ) {
if ( !defined $parts[0] ) {
$res = '';
}
else {
$res = sha1_hex($parts[0]->decode());
}
# print ">> ",$parts[0]->{'type'}," = $res\n";
# print ">> ",$parts[0]->{'type'}," expected $_\n";
$res = $res eq $_;
}
ok ( $res );
shift @parts;
}
}
$mail->finish();
}
my @msg;
my $subject;
my $mail;
@msg = ("Subject: =?ISO-8859-1?Q?a?=\n", "\n");
$mail = $sa->parse(\@msg);
$subject = $mail->get_header("Subject");
$mail->finish();
ok($subject eq "a\n");
@msg = ("Subject: =?ISO-8859-1?Q?a?= b\n", "\n");
$mail = $sa->parse(\@msg);
$subject = $mail->get_header("Subject");
$mail->finish();
ok($subject eq "a b\n");
@msg = ("Subject: =?ISO-8859-1?Q?a?= \t =?ISO-8859-1?Q?b?=\n", "\n");
$mail = $sa->parse(\@msg);
$subject = $mail->get_header("Subject");
$mail->finish();
ok($subject eq "ab\n");
@msg = ("Subject: =?ISO-8859-1?Q?a?=\n", " =?ISO-8859-1?Q?_b?=\n", "\n");
$mail = $sa->parse(\@msg);
$subject = $mail->get_header("Subject");
$mail->finish();
ok($subject eq "a b\n");
@msg = ("Subject: =?ISO-8859-1?Q?a?=\n", " =?ISO-8859-1?Q?_b?= mem_brain =? invalid ?=\n", "\n");
$mail = $sa->parse(\@msg);
$subject = $mail->get_header("Subject");
$mail->finish();
ok($subject eq "a b mem_brain =? invalid ?=\n");