import numpy as np from detectors.double_jpeg import (DoubleJpegDetector, dct_histogram, detect_double_compression) def test_histogram_has_expected_length(clean_image): from core.config import DCT_HIST_BINS hist = dct_histogram(clean_image) assert hist.shape == (DCT_HIST_BINS,) def test_score_in_range(clean_image): hist = dct_histogram(clean_image) score, regions = detect_double_compression(hist) assert 0.0 <= score <= 1.0 assert regions == [] def test_empty_histogram_is_zero(): score, _ = detect_double_compression(np.zeros(64, dtype=np.float32)) assert score == 0.0 def test_score_is_capped_conservatively(clean_image): # double-JPEG is a weak hint on documents and must never read as certain hist = dct_histogram(clean_image) score, _ = detect_double_compression(hist) assert score <= 0.6 def test_detector_runs(clean_image, base_context): det = DoubleJpegDetector().run(clean_image, base_context) assert det.detector_name == 'double_jpeg' assert det.heatmap is None assert 0.0 <= det.score <= 1.0