test_transcription.py 1.4 KB

1234567891011121314151617181920212223242526272829
  1. import ast
  2. import re
  3. import unicodedata
  4. import unittest
  5. from pathlib import Path
  6. from types import SimpleNamespace
  7. from threading import Lock
  8. from unittest.mock import Mock
  9. class TranscriptionTests(unittest.TestCase):
  10. def test_artifacts_are_removed_without_losing_real_speech(self):
  11. tree = ast.parse(Path('app.py').read_text(encoding='utf-8'))
  12. functions = [node for node in tree.body if isinstance(node, ast.FunctionDef)
  13. and node.name in ('is_subtitle_artifact', 'transcribe_audio')]
  14. model = Mock()
  15. texts = ["Sous-titrage ST' 501", 'Bonjour Satoko', 'Sous-titres MFP',
  16. 'Peux-tu afficher les sous-titres ?', 'Sous-titres réalisés par la communauté d’Amara.org']
  17. model.transcribe.return_value = ([SimpleNamespace(text=t) for t in texts], SimpleNamespace(language='fr'))
  18. ns = dict(re=re, unicodedata=unicodedata, model=model, model_lock=Lock(),
  19. VAD_ENABLED=True, BEAM_SIZE=3, HOTWORDS='Satoko', logger=Mock())
  20. exec(compile(ast.Module(body=functions, type_ignores=[]), '<stt>', 'exec'), ns)
  21. self.assertEqual(ns['transcribe_audio'](None),
  22. ('Bonjour Satoko Peux-tu afficher les sous-titres ?', 'fr'))
  23. self.assertFalse(ns['is_subtitle_artifact']('Explique le sous-titrage ST 501'))
  24. if __name__ == '__main__':
  25. unittest.main()