blob: c3e7ad4a16c5e0eb4b7a9071c5cfad094147bee1 [file]
#!/usr/bin/perl -w -T
use strict;
use lib '.'; use lib 't';
use SATest; sa_t_init("scan_text_attach");
use Test::More tests => 8;
use Mail::SpamAssassin;
# A text/html part marked Content-Disposition: attachment is, by default,
# excluded from the rendered body text that body rules see. The
# scan_text_attachments option includes it. See t/data/nice/scan_text_attach.
#
# scan_text_attachments gates all three rendered arrays uniformly (rendered,
# visible, invisible): whether a text attachment participates at all is this
# option's job. Which streams Bayes tokenizes is bayes_token_sources' job --
# the two are orthogonal, so with the flag off the attachment's *invisible*
# text is excluded too (not just its visible text).
my $vis_marker = 'UNIQUEPHISHMARKER'; # visible attachment text
my $inv_marker = 'UNIQUEHIDDENMARKER'; # display:none attachment text
sub bodies {
my ($post_config_text) = @_;
my $sa = create_saobj({
dont_copy_prefs => 1,
post_config_text => $post_config_text,
});
$sa->init(0);
open (IN, "<data/nice/scan_text_attach") or die "cannot open fixture: $!";
my $mail = $sa->parse(\*IN);
close IN;
my %b = (
rendered => join('||', @{$mail->get_rendered_body_text_array()}),
invisible => join('||', @{$mail->get_invisible_rendered_body_text_array()}),
);
$mail->finish;
$sa->finish;
return %b;
}
# ---------------------------------------------------------------------------
# Default: attachment text is excluded from ALL arrays, including invisible
my %off = bodies('');
unlike($off{rendered}, qr/\Q$vis_marker\E/,
'attachment visible text excluded from body by default');
like($off{rendered}, qr/remittance advice/i,
'inline text/plain body part still present by default');
unlike($off{invisible}, qr/\Q$inv_marker\E/,
'attachment invisible text excluded from invisible array by default');
# ---------------------------------------------------------------------------
# scan_text_attachments 1: attachment text is included in all arrays
my %on = bodies('scan_text_attachments 1');
like($on{rendered}, qr/\Q$vis_marker\E/,
'attachment visible text included in body with scan_text_attachments 1');
like($on{rendered}, qr/remittance advice/i,
'inline text/plain body part still present with scan_text_attachments 1');
like($on{rendered}, qr/\Q$inv_marker\E/,
'attachment invisible text folded into body with scan_text_attachments 1');
like($on{invisible}, qr/\Q$inv_marker\E/,
'attachment invisible text included in invisible array with scan_text_attachments 1');
unlike($on{invisible}, qr/\Q$vis_marker\E/,
'visible text does not leak into the invisible array');