summaryrefslogtreecommitdiff
path: root/urwid/tests/test_escapes.py
blob: 7b1fe53f8abaccb218a52234bf238c37b75208dd (plain)
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
#!/usr/bin/python
# -*- coding: utf-8 -*-

""" Tests covering escape sequences processing """

import unittest

import urwid.escape


class InputEscapeSequenceParserTest(unittest.TestCase):
    """ Tests for parser of input escape sequences """

    def test_bare_escape(self):
        codes = [27]
        expected = ['esc']
        actual, rest = urwid.escape.process_keyqueue(codes, more_available=False)
        self.assertListEqual(expected, actual)
        self.assertListEqual([], rest)

    def test_meta(self):
        codes = [27, ord('4'), ord('2')]
        expected = ['meta 4']
        actual, rest = urwid.escape.process_keyqueue(codes, more_available=False)
        self.assertListEqual(expected, actual)
        self.assertListEqual([ord('2')], rest)

    def test_shift_arrows(self):
        codes = [27, ord('['), ord('a')]
        expected = ['shift up']
        actual, rest = urwid.escape.process_keyqueue(codes, more_available=False)
        self.assertListEqual(expected, actual)
        self.assertListEqual([], rest)

    def test_ctrl_pgup(self):
        codes = [27, 91, 53, 59, 53, 126]
        expected = ['ctrl page up']
        actual, rest = urwid.escape.process_keyqueue(codes, more_available=False)
        self.assertListEqual(expected, actual)
        self.assertListEqual([], rest)

    def test_esc_meta_1(self):
        codes = [27, 27, 49]
        expected = ['esc', 'meta 1']
        actual, rest = urwid.escape.process_keyqueue(codes, more_available=False)
        self.assertListEqual(expected, actual)
        self.assertListEqual([], rest)

    def test_midsequence(self):
        # '[11~' is F1, '[12~' is F2, etc
        codes = [27, ord('['), ord('1')]

        with self.assertRaises(urwid.escape.MoreInputRequired):
            urwid.escape.process_keyqueue(codes, more_available=True)

        actual, rest = urwid.escape.process_keyqueue(codes, more_available=False)
        self.assertListEqual(['meta ['], actual)
        self.assertListEqual([ord('1')], rest)

    def test_mouse_press(self):
        codes = [27, 91, 77, 32, 41, 48]
        expected = [('mouse press', 1.0, 8, 15)]
        actual, rest = urwid.escape.process_keyqueue(codes, more_available=False)
        self.assertListEqual(expected, actual)
        self.assertListEqual([], rest)

    def test_bug_104(self):
        """ GH #104: click-Esc & Esc-click crashes urwid apps """
        codes = [27, 27, 91, 77, 32, 127, 59]
        expected = ['esc', ('mouse press', 1.0, 94, 26)]
        actual, rest = urwid.escape.process_keyqueue(codes, more_available=False)
        self.assertListEqual(expected, actual)
        self.assertListEqual([], rest)

        codes = [27, 27, 91, 77, 35, 120, 59]
        expected = ['esc', ('mouse release', 0, 87, 26)]
        actual, rest = urwid.escape.process_keyqueue(codes, more_available=False)
        self.assertListEqual(expected, actual)
        self.assertListEqual([], rest)