import unittest import build_pack def rec(i, speaker="asuna", text="今天也請多指教喔", conf="high", fn="greet", vol=1, ch=1, **kw): base = {"id": i, "volume": vol, "chapter": ch, "text": text, "before": "", "after": "", "prev_par": "", "next_par": "", "final_speaker": speaker, "suspect_duplicate": False, "label": {"confidence": conf, "function": fn, "emotion": "neutral"}} base.update(kw) return base class Usable(unittest.TestCase): def test_keeps_high_confidence_of_the_speaker(self): self.assertTrue(build_pack.usable(rec("a"), "asuna")) def test_rejects_other_speaker_low_confidence_duplicates_and_bad_length(self): self.assertFalse(build_pack.usable(rec("a", speaker="kirito"), "asuna")) self.assertFalse(build_pack.usable(rec("a", conf="medium"), "asuna")) self.assertFalse(build_pack.usable(rec("a", suspect_duplicate=True), "asuna")) self.assertFalse(build_pack.usable(rec("a", text="嗯"), "asuna")) self.assertFalse(build_pack.usable(rec("a", text="字" * 81), "asuna")) def test_short_other_is_dropped(self): self.assertFalse(build_pack.usable(rec("a", text="咦咦咦咦", fn="other"), "asuna")) class Modes(unittest.TestCase): def test_asuna_modes(self): self.assertEqual(build_pack.mode_asuna(rec("a", vol=1)), "ingame") self.assertEqual(build_pack.mode_asuna(rec("a", vol=4)), "reunion") self.assertEqual(build_pack.mode_asuna(rec("a", vol=4, before="明日奈露出笑容")), "real") self.assertEqual(build_pack.mode_asuna(rec("a", vol=4, prev_par="須鄉冷笑著")), "captive") def test_suguha_modes(self): self.assertEqual(build_pack.mode_suguha(rec("a", before="莉法拔出劍")), "leafa") self.assertEqual(build_pack.mode_suguha(rec("a", before="直葉看著和人")), "real") self.assertIsNone(build_pack.mode_suguha(rec("a"))) class Build(unittest.TestCase): def test_dedupes_by_text_and_fills_mode_from_chapter_majority(self): rows = build_pack.build([ rec("a", speaker="suguha", text="我一定會贏的喔", before="莉法握緊劍", vol=3, ch=2), rec("b", speaker="suguha", text="我一定會贏的喔", vol=3, ch=2), rec("c", speaker="suguha", text="那我們走吧", vol=3, ch=2), ], "suguha") self.assertEqual([r["id"] for r in rows], ["a", "c"]) self.assertEqual(rows[1]["mode"], "leafa") if __name__ == "__main__": unittest.main()