Spaces:
Running on Zero
Running on Zero
| import unittest | |
| from timeline_utils import normalize_timeline | |
| class TimelineValidationTests(unittest.TestCase): | |
| def test_builds_contiguous_frame_ranges(self): | |
| result = normalize_timeline( | |
| [ | |
| ["Walk forward two steps.", 2], | |
| ["Turn around.", 2], | |
| ["Wave.", 2], | |
| ], | |
| fps=20, | |
| ) | |
| self.assertEqual(result[0]["start_frame"], 0) | |
| self.assertEqual(result[0]["end_frame"], 40) | |
| self.assertEqual(result[1]["start_frame"], 40) | |
| self.assertEqual(result[1]["end_frame"], 80) | |
| self.assertEqual(result[2]["start_frame"], 80) | |
| self.assertEqual(result[2]["end_frame"], 120) | |
| def test_ignores_blank_rows(self): | |
| result = normalize_timeline( | |
| [["Stand still.", 2], ["", None]], | |
| fps=20, | |
| ) | |
| self.assertEqual(len(result), 1) | |
| def test_rejects_more_than_eight_seconds(self): | |
| with self.assertRaisesRegex(ValueError, "may not exceed 8 seconds"): | |
| normalize_timeline( | |
| [["Walk.", 4], ["Wave.", 4], ["Sit.", 2]], | |
| fps=20, | |
| ) | |
| def test_rejects_missing_prompt(self): | |
| with self.assertRaisesRegex(ValueError, "action prompt"): | |
| normalize_timeline([["", 2]], fps=20) | |
| if __name__ == "__main__": | |
| unittest.main() | |