File: test_paths.py

package info (click to toggle)
python-asciimatics 1.15.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,488 kB
  • sloc: python: 15,713; sh: 8; makefile: 2
file content (90 lines) | stat: -rw-r--r-- 2,787 bytes parent folder | download
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import unittest
from asciimatics.event import MouseEvent
from asciimatics.paths import Path, DynamicPath


class TestPaths(unittest.TestCase):
    def assert_path_equals(self, path, oracle):
        path.reset()
        positions = []
        while not path.is_finished():
            positions.append(path.next_pos())
        self.assertEqual(positions, oracle)

    def test_jump_and_wait(self):
        """
        Check basic movement of cursor works.
        """
        path = Path()
        path.jump_to(10, 10)
        path.wait(3)
        self.assert_path_equals(path, [(10, 10), (10, 10), (10, 10), (10, 10)])

    def test_straight_lines(self):
        """
        Check a path works in straight lines.
        """
        # Horizontal
        path = Path()
        path.jump_to(10, 10)
        path.move_straight_to(15, 10, 5)
        self.assert_path_equals(
            path,
            [(10, 10), (11, 10), (12, 10), (13, 10), (14, 10), (15, 10)])

        # Vertical
        path = Path()
        path.jump_to(5, 5)
        path.move_straight_to(5, 10, 5)
        self.assert_path_equals(
            path,
            [(5, 5), (5, 6), (5, 7), (5, 8), (5, 9), (5, 10)])

        # Diagonal spaced
        path = Path()
        path.jump_to(5, 5)
        path.move_straight_to(15, 15, 5)
        self.assert_path_equals(
            path,
            [(5, 5), (7, 7), (9, 9), (11, 11), (13, 13), (15, 15)])

    def test_spline(self):
        """
        Check a path works with a spline curve.
        """
        path = Path()
        path.jump_to(0, 10)
        path.move_round_to([(0, 10), (20, 0), (40, 10), (20, 20), (0, 10)], 20)
        self.assert_path_equals(
            path,
            [(0, 10), (0, 10), (0, 10), (0, 10), (0, 10), (5, 7),
             (10, 4), (15, 1), (20, 0), (25, 1), (30, 3), (35, 7),
             (40, 10), (35, 12), (30, 16), (25, 18), (20, 20),  (15, 18),
             (10, 15), (5, 12), (0, 10)])

    def test_dynamic_path(self):
        """
        Check a dynamic path works as expected.
        """
        class TestPath(DynamicPath):
            def process_event(self, event):
                # Assume that we're always passing in a MouseEvent.
                self._x = event.x
                self._y = event.y

        # Initial path should start at specified location.
        path = TestPath(None, 0, 0)
        self.assertEqual(path.next_pos(), (0, 0))
        self.assertFalse(path.is_finished())

        # Process event should move location.
        path.process_event(MouseEvent(10, 5, 0))
        self.assertEqual(path.next_pos(), (10, 5))

        # Reset should return to original location.
        path.reset()
        self.assertEqual(path.next_pos(), (0, 0))


if __name__ == '__main__':
    unittest.main()