File size: 1,364 Bytes
76a8377
 
 
 
 
 
 
 
 
 
1b78d7e
 
76a8377
 
 
 
 
 
1b78d7e
 
 
76a8377
 
 
1b78d7e
76a8377
 
 
 
 
 
 
1b78d7e
76a8377
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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()