/pygame2/test/sdl_keyboard_test.py

https://bitbucket.org/pcraven/pygame2 · Python · 194 lines · 156 code · 37 blank · 1 comment · 15 complexity · 59a41af703ff7762c98760a481387545 MD5 · raw file

  1. import sys
  2. import unittest
  3. import pygame2.sdl as sdl
  4. import pygame2.sdl.rect as rect
  5. import pygame2.sdl.keyboard as keyboard
  6. import pygame2.sdl.scancode as scancode
  7. import pygame2.sdl.keycode as keycode
  8. import pygame2.sdl.video as video
  9. class SDLKeyboardTest(unittest.TestCase):
  10. __tags__ = ["sdl"]
  11. def setUp(self):
  12. if sys.version.startswith("3.1"):
  13. self.assertIsInstance = \
  14. lambda x, t: self.assertTrue(isinstance(x, t))
  15. sdl.init(sdl.SDL_INIT_VIDEO)
  16. def tearDown(self):
  17. sdl.quit_subsystem(sdl.SDL_INIT_VIDEO)
  18. sdl.quit()
  19. def test_SDL_Keysym(self):
  20. keysym = keyboard.SDL_Keysym()
  21. self.assertEqual(keysym.scancode, 0)
  22. self.assertEqual(keysym.sym, 0)
  23. self.assertEqual(keysym.mod, 0)
  24. self.assertEqual(keysym.unicode, "\0")
  25. keysym = keyboard.SDL_Keysym(1, 2, 3, "b")
  26. self.assertEqual(keysym.scancode, 1)
  27. self.assertEqual(keysym.sym, 2)
  28. self.assertEqual(keysym.mod, 3)
  29. self.assertEqual(keysym.unicode, "b")
  30. uval = "\u0220"
  31. if sys.version_info[0] < 3:
  32. uval = unichr(8224)
  33. keysym = keyboard.SDL_Keysym(17, 32, 88, uval)
  34. self.assertEqual(keysym.scancode, 17)
  35. self.assertEqual(keysym.sym, 32)
  36. self.assertEqual(keysym.mod, 88)
  37. self.assertEqual(keysym.unicode, uval)
  38. def test_get_keyboard_focus(self):
  39. window = keyboard.get_keyboard_focus()
  40. self.assertEqual(window, None)
  41. rwin = video.create_window("", 10, 10, 10, 10, 0)
  42. window = keyboard.get_keyboard_focus()
  43. if window:
  44. self.assertEqual(video.get_window_id(window),
  45. video.get_window_id(rwin))
  46. video.destroy_window(rwin)
  47. window = keyboard.get_keyboard_focus()
  48. self.assertEqual(window, None)
  49. def test_get_keyboard_state(self):
  50. states = keyboard.get_keyboard_state()
  51. self.assertEqual(len(states), scancode.SDL_NUM_SCANCODES)
  52. for state in states:
  53. self.assertEqual(state, 0)
  54. def test_get_key_from_name(self):
  55. for x in range(26): # a-z
  56. key = keyboard.get_key_from_name(chr(x + 97))
  57. self.assertEqual(key, x + 97)
  58. val = keyboard.get_key_from_name(123)
  59. self.assertEqual(val, keycode.SDLK_UNKNOWN)
  60. for x in range(10):
  61. key = keyboard.get_key_from_name(x)
  62. self.assertEqual(key, 48 + x)
  63. val = keyboard.get_key_from_name(self)
  64. self.assertEqual(val, keycode.SDLK_UNKNOWN)
  65. def test_get_key_from_scancode(self):
  66. p = 0
  67. for x in (scancode.SDL_SCANCODE_A,
  68. scancode.SDL_SCANCODE_B,
  69. scancode.SDL_SCANCODE_C):
  70. key = keyboard.get_key_from_scancode(x)
  71. self.assertEqual(key, p + 97)
  72. p += 1
  73. p = 0
  74. for x in range(scancode.SDL_SCANCODE_1, scancode.SDL_SCANCODE_0):
  75. key = keyboard.get_key_from_scancode(x)
  76. self.assertEqual(key, 49 + p)
  77. p += 1
  78. self.assertRaises(TypeError, keyboard.get_key_from_scancode, self)
  79. self.assertRaises(ValueError, keyboard.get_key_from_scancode, "Test")
  80. self.assertRaises(TypeError, keyboard.get_key_from_scancode, None)
  81. def test_get_key_name(self):
  82. x = 65 # SDL maps everything against upper-case letters
  83. for key in range(ord('a'), ord('z')):
  84. ch = chr(x)
  85. name = keyboard.get_key_name(key)
  86. self.assertEqual(name, ch)
  87. x += 1
  88. def test_get_set_mod_state(self):
  89. initial = keyboard.get_mod_state()
  90. for state in(keycode.KMOD_NUM | keycode.KMOD_CAPS | keycode.KMOD_MODE,
  91. keycode.KMOD_NUM | keycode.KMOD_CAPS,
  92. keycode.KMOD_CAPS):
  93. keyboard.set_mod_state(state)
  94. self.assertEqual(keyboard.get_mod_state(), state)
  95. state = keycode.KMOD_NUM
  96. keyboard.set_mod_state(state)
  97. self.assertEqual(keyboard.get_mod_state(), state)
  98. keyboard.set_mod_state(initial)
  99. self.assertEqual(keyboard.get_mod_state(), initial)
  100. def test_get_scancode_from_key(self):
  101. codes = range(scancode.SDL_SCANCODE_1, scancode.SDL_SCANCODE_0)
  102. xoff = 0
  103. for key in range(ord('1'), ord('0')):
  104. code = keyboard.get_scancode_from_key(key)
  105. self.assertEqual(code, codes[xoff])
  106. xoff += 1
  107. key = keyboard.get_scancode_from_key(477)
  108. self.assertEqual(key, scancode.SDL_SCANCODE_UNKNOWN)
  109. self.assertRaises(TypeError, keyboard.get_scancode_from_key, None)
  110. self.assertRaises(ValueError, keyboard.get_scancode_from_key, "Test")
  111. self.assertRaises(TypeError, keyboard.get_scancode_from_key, self)
  112. def test_get_scancode_from_name(self):
  113. codes = range(scancode.SDL_SCANCODE_A, scancode.SDL_SCANCODE_Z)
  114. xoff = 0
  115. for key in range(ord('a'), ord('z')):
  116. ch = chr(key)
  117. code = keyboard.get_scancode_from_name(ch)
  118. self.assertEqual(code, codes[xoff])
  119. xoff += 1
  120. key = keyboard.get_scancode_from_name("")
  121. self.assertEqual(key, scancode.SDL_SCANCODE_UNKNOWN)
  122. key = keyboard.get_scancode_from_name(None)
  123. self.assertEqual(key, scancode.SDL_SCANCODE_UNKNOWN)
  124. key = keyboard.get_scancode_from_name("Test")
  125. self.assertEqual(key, scancode.SDL_SCANCODE_UNKNOWN)
  126. key = keyboard.get_scancode_from_name(self)
  127. self.assertEqual(key, scancode.SDL_SCANCODE_UNKNOWN)
  128. def test_get_scancode_name(self):
  129. names = range(ord('A'), ord('Z'))
  130. xoff = 0
  131. for code in range(scancode.SDL_SCANCODE_A, scancode.SDL_SCANCODE_Z):
  132. name = keyboard.get_scancode_name(code)
  133. self.assertEqual(name, chr(names[xoff]))
  134. xoff += 1
  135. name = keyboard.get_scancode_name(0)
  136. self.assertEqual(name, "")
  137. self.assertRaises(ValueError, keyboard.get_scancode_name, -22)
  138. self.assertRaises(ValueError, keyboard.get_scancode_name,
  139. scancode.SDL_NUM_SCANCODES)
  140. self.assertRaises(TypeError, keyboard.get_scancode_from_key, None)
  141. self.assertRaises(ValueError, keyboard.get_scancode_from_key, "Test")
  142. self.assertRaises(TypeError, keyboard.get_scancode_from_key, self)
  143. def test_set_text_input_rect(self):
  144. # TODO: this test is a bit pointless
  145. coords = [(0, 0, 0, 0), (-10, -70, 3, 6), (10, 10, 10, 10)]
  146. for x, y, w, h in coords:
  147. r = rect.SDL_Rect(x, y, w, h)
  148. keyboard.set_text_input_rect(r)
  149. keyboard.set_text_input_rect(rect.SDL_Rect())
  150. @unittest.skip("not implemented")
  151. def test_start_text_input(self):
  152. pass
  153. @unittest.skip("not implemented")
  154. def test_stop_text_input(self):
  155. pass
  156. if __name__ == '__main__':
  157. sys.exit(unittest.main())