tianguiti's picture
Publish local.face_tracking_application 0.2.1
9ae4cb2 verified
Raw
History Blame Contribute Delete
2.83 kB
"""Regression tests for preview-image rendering."""
from __future__ import annotations
from io import BytesIO
import json
from pathlib import Path
from types import SimpleNamespace
import unittest
from unittest.mock import patch
from PIL import Image
from ui import PREVIEW_MAX_SIZE, PreviewWindow, render_preview_image
class PreviewRenderTests(unittest.TestCase):
def test_preview_size_leaves_room_for_music_controls(self) -> None:
self.assertEqual(PREVIEW_MAX_SIZE, (300, 300))
def test_manifest_uses_face_tracking_application_identity(self) -> None:
manifest_path = Path(__file__).resolve().parents[1] / "app.json"
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
self.assertEqual(manifest["id"], "local.face_tracking_application")
self.assertEqual(manifest["name"], "人脸跟随应用")
self.assertEqual(manifest["supported_host_platforms"], ["windows", "macos"])
self.assertEqual(
manifest["description"],
"An SDK-powered face-tracking and music playback application.",
)
self.assertIn("av>=16,<17", manifest["dependencies"])
def test_renders_sdk_jpeg_and_face_box_within_preview_bounds(self) -> None:
source = Image.new("RGB", (300, 300), "white")
encoded = BytesIO()
source.save(encoded, format="JPEG")
face = SimpleNamespace(x=150, y=150, width=100, height=80, score=88)
rendered = render_preview_image(encoded.getvalue(), (face,))
self.assertLessEqual(rendered.width, PREVIEW_MAX_SIZE[0])
self.assertLessEqual(rendered.height, PREVIEW_MAX_SIZE[1])
self.assertNotEqual(rendered.getpixel((100, 110)), (255, 255, 255))
self.assertEqual(rendered.getpixel((150, 150)), (255, 255, 255))
def test_closed_window_skips_widget_updates_during_shutdown(self) -> None:
window = PreviewWindow.__new__(PreviewWindow)
window._is_open = False
window._set_pairing_enabled(True)
window._set_preview_buttons(online=True, running=False)
def test_music_stop_needs_explicit_confirmation(self) -> None:
window = PreviewWindow.__new__(PreviewWindow)
window._root = object()
window._music_action = None
with patch("ui.messagebox.askyesno", return_value=False):
window._request_stop_music()
self.assertIsNone(window._music_action)
def test_confirmed_music_stop_queues_the_stop_action(self) -> None:
window = PreviewWindow.__new__(PreviewWindow)
window._root = object()
window._music_action = None
with patch("ui.messagebox.askyesno", return_value=True):
window._request_stop_music()
self.assertEqual(window._music_action, "stop")
if __name__ == "__main__":
unittest.main()