"""Testes do gerador offline de legendas.""" import unittest from engine.editor.legendas import ConfiguracaoDeLegendas, GeradorDeLegendas from engine.editor.modelos import AcaoDeEdicao, TipoDeAcao from engine.scanner.modelos import PalavraDeTranscricao class TesteGeradorDeLegendas(unittest.TestCase): """Verifica filtragem, reposicionamento e agrupamento de palavras.""" def setUp(self) -> None: self.gerador = GeradorDeLegendas() self.corte = AcaoDeEdicao(TipoDeAcao.CORTE, 0.0, 2.0, "abertura") self.palavras = [ PalavraDeTranscricao("Olá", 2.1, 2.5), PalavraDeTranscricao("mundo", 2.6, 3.0), PalavraDeTranscricao("hoje", 5.0, 5.4), ] def test_remove_palavras_cortadas_e_reposiciona_as_restantes(self) -> None: legendas = self.gerador.gerar(self.palavras, [self.corte], 10.0) self.assertEqual([legenda.texto for legenda in legendas], ["Olá mundo", "hoje"]) self.assertAlmostEqual(legendas[0].inicio, 0.1) self.assertAlmostEqual(legendas[1].inicio, 3.0) def test_respeita_limites_de_palavras_e_caracteres(self) -> None: configuracao = ConfiguracaoDeLegendas(maximo_de_palavras=2, maximo_de_caracteres=10) palavras = [ PalavraDeTranscricao("uma", 0.0, 0.2), PalavraDeTranscricao("frase", 0.2, 0.4), PalavraDeTranscricao("longa", 0.4, 0.6), ] legendas = self.gerador.gerar(palavras, [], 2.0, configuracao) self.assertEqual([legenda.texto for legenda in legendas], ["uma frase", "longa"]) def test_rejeita_cortes_sobrepostos(self) -> None: cortes = [ self.corte, AcaoDeEdicao(TipoDeAcao.CORTE, 1.5, 3.0, "repetição"), ] with self.assertRaisesRegex(ValueError, "não podem se sobrepor"): self.gerador.gerar(self.palavras, cortes, 10.0)