treasurehunting2/PySDL2-0.9.5/sdl2/test/keyboard_test.py
2017-05-13 11:00:53 +02:00

189 lines
6.8 KiB
Python

import sys
import unittest
from .. import SDL_Init, SDL_Quit, SDL_QuitSubSystem, SDL_INIT_VIDEO
from .. import rect, keyboard, scancode, keycode, video
from ctypes import c_int, cast, POINTER
byteify = lambda x: x.encode("utf-8")
class SDLKeyboardTest(unittest.TestCase):
__tags__ = ["sdl"]
def setUp(self):
SDL_Init(SDL_INIT_VIDEO)
def tearDown(self):
SDL_QuitSubSystem(SDL_INIT_VIDEO)
SDL_Quit()
def test_SDL_Keysym(self):
keysym = keyboard.SDL_Keysym()
self.assertEqual(keysym.scancode, 0)
self.assertEqual(keysym.sym, 0)
self.assertEqual(keysym.mod, 0)
keysym = keyboard.SDL_Keysym(1, 2, 3, ord("b"))
self.assertEqual(keysym.scancode, 1)
self.assertEqual(keysym.sym, 2)
self.assertEqual(keysym.mod, 3)
uval = "\u0220"
if sys.version_info[0] < 3:
uval = unichr(8224)
keysym = keyboard.SDL_Keysym(17, 32, 88, ord(uval))
self.assertEqual(keysym.scancode, 17)
self.assertEqual(keysym.sym, 32)
self.assertEqual(keysym.mod, 88)
def test_SDL_GetKeyboardFocus(self):
# window = keyboard.SDL_GetKeyboardFocus()
# TODO: x
# self.assertEqual(window, None)
rwin = video.SDL_CreateWindow(b"test", 10, 10, 10, 10, 0)
window = keyboard.SDL_GetKeyboardFocus()
if window:
self.assertEqual(video.SDL_GetWindowID(window),
video.SDL_GetWindowID(rwin))
video.SDL_DestroyWindow(rwin)
window = keyboard.SDL_GetKeyboardFocus()
# TODO: x
# self.assertEqual(window, None)
def test_SDL_GetKeyboardState(self):
states = (c_int * scancode.SDL_NUM_SCANCODES)()
keyboard.SDL_GetKeyboardState(cast(states, POINTER(c_int)))
self.assertEqual(len(states), scancode.SDL_NUM_SCANCODES)
# TODO: x
# for state in states:
# self.assertEqual(state, 0)
def test_SDL_GetKeyFromName(self):
for x in range(26): # a-z
key = keyboard.SDL_GetKeyFromName(byteify(chr(x + 97)))
self.assertEqual(key, x + 97)
for x in range(10):
key = keyboard.SDL_GetKeyFromName(("%d" % x).encode("utf-8"))
self.assertEqual(key, 48 + x)
val = keyboard.SDL_GetKeyFromName(byteify(repr(self)))
self.assertEqual(val, keycode.SDLK_UNKNOWN)
def test_SDL_GetKeyFromScancode(self):
p = 0
for x in (scancode.SDL_SCANCODE_A,
scancode.SDL_SCANCODE_B,
scancode.SDL_SCANCODE_C):
key = keyboard.SDL_GetKeyFromScancode(x)
self.assertEqual(key, p + 97)
p += 1
p = 0
for x in range(scancode.SDL_SCANCODE_1, scancode.SDL_SCANCODE_0):
key = keyboard.SDL_GetKeyFromScancode(x)
self.assertEqual(key, 49 + p)
p += 1
# self.assertRaises(TypeError, keyboard.get_key_from_scancode, self)
# self.assertRaises(ValueError, keyboard.get_key_from_scancode, "Test")
# self.assertRaises(TypeError, keyboard.get_key_from_scancode, None)
def test_SDL_GetKeyName(self):
x = 65 # SDL maps everything against upper-case letters
for key in range(ord('a'), ord('z')):
ch = chr(x)
name = keyboard.SDL_GetKeyName(key)
self.assertEqual(name, byteify(ch))
x += 1
def test_SDL_GetSetModState(self):
initial = keyboard.SDL_GetModState()
for state in(keycode.KMOD_NUM | keycode.KMOD_CAPS | keycode.KMOD_MODE,
keycode.KMOD_NUM | keycode.KMOD_CAPS,
keycode.KMOD_CAPS):
keyboard.SDL_SetModState(state)
self.assertEqual(keyboard.SDL_GetModState(), state)
state = keycode.KMOD_NUM
keyboard.SDL_SetModState(state)
self.assertEqual(keyboard.SDL_GetModState(), state)
keyboard.SDL_SetModState(initial)
self.assertEqual(keyboard.SDL_GetModState(), initial)
def test_SDL_GetScancodeFromKey(self):
codes = range(scancode.SDL_SCANCODE_1, scancode.SDL_SCANCODE_0)
xoff = 0
for key in range(ord('1'), ord('0')):
code = keyboard.SDL_GetScancodeFromKey(key)
self.assertEqual(code, codes[xoff])
xoff += 1
key = keyboard.SDL_GetScancodeFromKey(477)
self.assertEqual(key, scancode.SDL_SCANCODE_UNKNOWN)
# self.assertRaises(TypeError, keyboard.get_scancode_from_key, None)
# self.assertRaises(ValueError, keyboard.get_scancode_from_key, "Test")
# self.assertRaises(TypeError, keyboard.get_scancode_from_key, self)
def test_SDL_GetScancodeFromName(self):
codes = range(scancode.SDL_SCANCODE_A, scancode.SDL_SCANCODE_Z)
xoff = 0
for key in range(ord('a'), ord('z')):
ch = chr(key)
code = keyboard.SDL_GetScancodeFromName(byteify(ch))
self.assertEqual(code, codes[xoff])
xoff += 1
key = keyboard.SDL_GetScancodeFromName(b"")
self.assertEqual(key, scancode.SDL_SCANCODE_UNKNOWN)
key = keyboard.SDL_GetScancodeFromName(None)
self.assertEqual(key, scancode.SDL_SCANCODE_UNKNOWN)
key = keyboard.SDL_GetScancodeFromName(b"Test")
self.assertEqual(key, scancode.SDL_SCANCODE_UNKNOWN)
key = keyboard.SDL_GetScancodeFromName(byteify(repr(self)))
self.assertEqual(key, scancode.SDL_SCANCODE_UNKNOWN)
def test_SDL_GetScancodeName(self):
names = range(ord('A'), ord('Z'))
xoff = 0
for code in range(scancode.SDL_SCANCODE_A, scancode.SDL_SCANCODE_Z):
name = keyboard.SDL_GetScancodeName(code)
self.assertEqual(name, byteify(chr(names[xoff])))
xoff += 1
name = keyboard.SDL_GetScancodeName(0)
self.assertEqual(name, b"")
# self.assertRaises(ValueError, keyboard.SDL_GetScancodeName, -22)
# self.assertRaises(ValueError, keyboard.SDL_GetScancodeName,
# scancode.SDL_NUM_SCANCODES)
# self.assertRaises(TypeError, keyboard.get_scancode_from_key, None)
# self.assertRaises(ValueError, keyboard.get_scancode_from_key, "Test")
# self.assertRaises(TypeError, keyboard.get_scancode_from_key, self)
def test_SDL_SetTextInputRect(self):
# TODO: this test is a bit pointless
coords = [(0, 0, 0, 0), (-10, -70, 3, 6), (10, 10, 10, 10)]
for x, y, w, h in coords:
r = rect.SDL_Rect(x, y, w, h)
keyboard.SDL_SetTextInputRect(r)
keyboard.SDL_SetTextInputRect(rect.SDL_Rect())
@unittest.skip("not implemented")
def test_SDL_StartTextInput(self):
keyboard.SDL_StartTextInput()
@unittest.skip("not implemented")
def test_SDL_StopTextInput(self):
keyboard.SDL_StopTextInput()
if __name__ == '__main__':
sys.exit(unittest.main())