File: test_keyboard.py

package info (click to toggle)
pgzero 1.2.post4%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 2,980 kB
  • sloc: python: 4,273; makefile: 165
file content (90 lines) | stat: -rw-r--r-- 2,728 bytes parent folder | download | duplicates (3)
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
import warnings
from contextlib import contextmanager

from pygame import locals

from pgzero.constants import keys
from pgzero.keyboard import keyboard


@contextmanager
def assert_warning():
    with warnings.catch_warnings(record=True) as w:
        warnings.simplefilter("always")
        yield
    assert len(w) > 0, \
        "Expected a warning, but no warnings received."


@contextmanager
def assert_no_warning():
    with warnings.catch_warnings(record=True) as w:
        yield
    assert len(w) == 0, \
        "Expected no warnings, but %d warnings received." % len(w)


class KeyboardTest(unittest.TestCase):
    def setUp(self):
        keyboard._press(locals.K_a)
        keyboard._press(locals.K_RIGHT)

    def test_never_pressed(self):
        """A key value is false if never pressed."""
        self.assertFalse(keyboard.q)

    def test_press(self):
        """We can check for depressed keys by enum lookup."""
        with assert_no_warning():
            self.assertTrue(keyboard.a)

    def test_release(self):
        """We can release a previously pressed key."""
        keyboard._release(locals.K_a)
        self.assertFalse(keyboard.a)

    def test_getitem(self):
        """Getting a key press by string lookup works, but warns."""
        with assert_warning():
            self.assertTrue(keyboard['a'])

    def test_getattr_uppercase(self):
        """Uppercase variants of the attribute raise a warning"""
        with assert_warning():
            self.assertTrue(keyboard.A)

    def test_getattr_prefixed(self):
        """Prefixed variants of the attribute names raise a warning"""
        with assert_warning():
            self.assertTrue(keyboard.K_a)

    def test_uppercase_number(self):
        """Uppercase prefixed numbers raise a warning."""
        with assert_warning():
            self.assertFalse(keyboard.K_0)

    def test_getitem_keysenum(self):
        """We can check for depressed keys by enum lookup."""
        with assert_no_warning():
            self.assertTrue(keyboard[keys.A])

    def test_getitem_keysenum_never_pressed(self):
        """We can check for depressed keys by enum lookup."""
        self.assertFalse(keyboard[keys.Q])

    def test_uppercase_constants(self):
        """The uppercase attribute names in the earlier documentation work."""
        with warnings.catch_warnings():
            warnings.simplefilter("ignore")
            self.assertFalse(keyboard.LEFT)
            self.assertTrue(keyboard.RIGHT)

    def test_named_constants(self):
        """The lowercase attribute names work."""
        self.assertFalse(keyboard.left)
        self.assertTrue(keyboard.right)


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