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()
|