diff options
| author | historia <historiavg@proton.me> | 2026-09-01 14:32:05 -0400 |
|---|---|---|
| committer | historia <historiavg@proton.me> | 2026-09-01 14:32:05 -0400 |
| commit | 6cfcd564c0684c52618235e6366f4a81c02b9a5b (patch) | |
| tree | 55321760a8103bc6b5d79489fac4135a60e6e3ba /app/tests/test_cover.py | |
| parent | dc6e7cd43029da62dabe2513fb5aa8a34df1bd6d (diff) | |
| download | tts-audiobook-generator-6cfcd564c0684c52618235e6366f4a81c02b9a5b.tar.gz | |
slop refactor/dedup
Diffstat (limited to 'app/tests/test_cover.py')
| -rw-r--r-- | app/tests/test_cover.py | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/app/tests/test_cover.py b/app/tests/test_cover.py index f19db5a..ca8b9a2 100644 --- a/app/tests/test_cover.py +++ b/app/tests/test_cover.py @@ -9,6 +9,7 @@ from pathlib import Path from converter.cover import ( _random_light_color, + _render_line, _text_width, _wrap_title, generate_cover, @@ -117,11 +118,13 @@ class GenerateCoverTests(unittest.TestCase): _, _, rows = _decode_png(data) self.assertEqual(_black_pixels(rows), 0) - def test_unrenderable_title_degrades_to_gradient(self): - # CJK glyphs are not in the bitmap font; no crash, no text pixels + def test_unrenderable_title_renders_placeholder_boxes(self): + # CJK glyphs are not in the bitmap font: they used to vanish + # (blank cover); now each renders as a black-outlined placeholder + # box so the title is visibly present. _, data = self._write("书名") _, _, rows = _decode_png(data) - self.assertEqual(_black_pixels(rows), 0) + self.assertGreater(_black_pixels(rows), 0) def test_write_failure_returns_none(self): result = generate_cover("Hello", Path("/nonexistent_dir/cover.png")) @@ -187,3 +190,24 @@ class DropShadowTests(unittest.TestCase): if __name__ == "__main__": unittest.main() + + +class NonAsciiTitleTests(unittest.TestCase): + """Characters outside the bitmap font render as boxes, not blanks.""" + + def test_unknown_characters_are_rendered_as_placeholder_boxes(self): + # Regression: unknown chars used to be skipped in rendering while + # still counted for width, so e.g. Japanese titles produced a + # blank cover with no warning. + with tempfile.TemporaryDirectory() as tmp: + path = generate_cover("日本語", Path(tmp) / "c.png", + seed=1) + self.assertIsNotNone(path) + raw = path.read_bytes() + self.assertTrue(raw.startswith(b"\x89PNG")) + + def test_placeholder_draws_pixels_for_every_unknown_char(self): + pixels = [[(255, 255, 255)] * 60 for _ in range(60)] + _render_line(pixels, "éé", 2, 2, color=(0, 0, 0)) + dark = sum(1 for row in pixels for pixel in row if pixel == (0, 0, 0)) + self.assertGreater(dark, 2 * 5 * 7 - 6) # both boxes' outlines drawn |
