blob: 050910b408e069943ac34bef6ea8d5abbf4ac003 [file]
#!/usr/bin/perl -T
use lib '.'; use lib 't';
use SATest; sa_t_init("handler_image_size");
use Test::More;
# ---------------------------------------------------------------------------
# Test the image_ocr_min_width / image_ocr_min_height gate in Handler::Image.
# The test image (data/nice/handler_image) is 800x200 and OCRs to OCRSENTINEL.
# - min_width 2000 -> image is below the gate -> OCR skipped (no hits)
# - min_width 100 -> image passes the gate -> OCR runs (hits)
# Requires tesseract; skip cleanly if not installed.
my $tesseract;
for my $dir (split(/:/, $ENV{PATH}),
qw(/usr/bin /usr/local/bin /opt/homebrew/bin /opt/local/bin)) {
if (-x "$dir/tesseract") { $tesseract = "$dir/tesseract"; last; }
}
if (!$tesseract) {
plan skip_all => "tesseract not found";
}
else {
plan tests => 6;
}
my $rules = "
body IMG_OCR /OCRSENTINEL/
score IMG_OCR 1.0
body IMG_HAS_OCR eval:check_image_text_ratio(0.01)
score IMG_HAS_OCR 1.0
";
# --- gate ABOVE the image size: OCR must be skipped -------------------------
tstpre ("
loadhandler Mail::SpamAssassin::Handler::Image
image_tesseract_path $tesseract
image_ocr_min_width 2000
");
tstlocalrules ($rules);
%patterns = ();
%anti_patterns = (
' IMG_OCR ', 'ocr_skipped_by_gate',
' IMG_HAS_OCR ', 'no_ocr_metadata_when_skipped',
);
ok (sarun ("-L -t < data/nice/handler_image", \&patterns_run_cb));
ok_all_patterns();
clear_pattern_counters();
# --- gate BELOW the image size: OCR must run --------------------------------
tstpre ("
loadhandler Mail::SpamAssassin::Handler::Image
image_tesseract_path $tesseract
image_ocr_min_width 100
");
tstlocalrules ($rules);
%patterns = (
' 1.0 IMG_OCR ', 'ocr_runs_below_gate',
' 1.0 IMG_HAS_OCR ', 'ocr_metadata_present',
);
%anti_patterns = ();
ok (sarun ("-L -t < data/nice/handler_image", \&patterns_run_cb));
ok_all_patterns();