167 lines
5.9 KiB
Python
167 lines
5.9 KiB
Python
|
import unittest
|
||
|
from pygame.tests.test_utils import question, prompt
|
||
|
|
||
|
import pygame
|
||
|
import pygame._sdl2.controller
|
||
|
|
||
|
|
||
|
class JoystickTypeTest(unittest.TestCase):
|
||
|
def todo_test_Joystick(self):
|
||
|
# __doc__ (as of 2008-08-02) for pygame.joystick.Joystick:
|
||
|
|
||
|
# pygame.joystick.Joystick(id): return Joystick
|
||
|
# create a new Joystick object
|
||
|
#
|
||
|
# Create a new joystick to access a physical device. The id argument
|
||
|
# must be a value from 0 to pygame.joystick.get_count()-1.
|
||
|
#
|
||
|
# To access most of the Joystick methods, you'll need to init() the
|
||
|
# Joystick. This is separate from making sure the joystick module is
|
||
|
# initialized. When multiple Joysticks objects are created for the
|
||
|
# same physical joystick device (i.e., they have the same ID number),
|
||
|
# the state and values for those Joystick objects will be shared.
|
||
|
#
|
||
|
# The Joystick object allows you to get information about the types of
|
||
|
# controls on a joystick device. Once the device is initialized the
|
||
|
# Pygame event queue will start receiving events about its input.
|
||
|
#
|
||
|
# You can call the Joystick.get_name() and Joystick.get_id() functions
|
||
|
# without initializing the Joystick object.
|
||
|
#
|
||
|
|
||
|
self.fail()
|
||
|
|
||
|
|
||
|
class JoystickModuleTest(unittest.TestCase):
|
||
|
def test_get_init(self):
|
||
|
# Check that get_init() matches what is actually happening
|
||
|
def error_check_get_init():
|
||
|
try:
|
||
|
pygame.joystick.get_count()
|
||
|
except pygame.error:
|
||
|
return False
|
||
|
return True
|
||
|
|
||
|
# Start uninitialised
|
||
|
self.assertEqual(pygame.joystick.get_init(), False)
|
||
|
|
||
|
pygame.joystick.init()
|
||
|
self.assertEqual(pygame.joystick.get_init(), error_check_get_init()) # True
|
||
|
pygame.joystick.quit()
|
||
|
self.assertEqual(pygame.joystick.get_init(), error_check_get_init()) # False
|
||
|
|
||
|
pygame.joystick.init()
|
||
|
pygame.joystick.init()
|
||
|
self.assertEqual(pygame.joystick.get_init(), error_check_get_init()) # True
|
||
|
pygame.joystick.quit()
|
||
|
self.assertEqual(pygame.joystick.get_init(), error_check_get_init()) # False
|
||
|
|
||
|
pygame.joystick.quit()
|
||
|
self.assertEqual(pygame.joystick.get_init(), error_check_get_init()) # False
|
||
|
|
||
|
for i in range(100):
|
||
|
pygame.joystick.init()
|
||
|
self.assertEqual(pygame.joystick.get_init(), error_check_get_init()) # True
|
||
|
pygame.joystick.quit()
|
||
|
self.assertEqual(pygame.joystick.get_init(), error_check_get_init()) # False
|
||
|
|
||
|
for i in range(100):
|
||
|
pygame.joystick.quit()
|
||
|
self.assertEqual(pygame.joystick.get_init(), error_check_get_init()) # False
|
||
|
|
||
|
def test_init(self):
|
||
|
"""
|
||
|
This unit test is for joystick.init()
|
||
|
It was written to help reduce maintenance costs
|
||
|
and to help test against changes to the code or
|
||
|
different platforms.
|
||
|
"""
|
||
|
pygame.quit()
|
||
|
# test that pygame.init automatically calls joystick.init
|
||
|
pygame.init()
|
||
|
self.assertEqual(pygame.joystick.get_init(), True)
|
||
|
|
||
|
# Controller module interferes with the joystick module.
|
||
|
pygame._sdl2.controller.quit()
|
||
|
|
||
|
# test that get_count doesn't work w/o joystick init
|
||
|
# this is done before and after an init to test
|
||
|
# that init activates the joystick functions
|
||
|
pygame.joystick.quit()
|
||
|
with self.assertRaises(pygame.error):
|
||
|
pygame.joystick.get_count()
|
||
|
|
||
|
# test explicit call(s) to joystick.init.
|
||
|
# Also test that get_count works once init is called
|
||
|
iterations = 20
|
||
|
for i in range(iterations):
|
||
|
pygame.joystick.init()
|
||
|
self.assertEqual(pygame.joystick.get_init(), True)
|
||
|
self.assertIsNotNone(pygame.joystick.get_count())
|
||
|
|
||
|
def test_quit(self):
|
||
|
"""Test if joystick.quit works."""
|
||
|
|
||
|
pygame.joystick.init()
|
||
|
|
||
|
self.assertIsNotNone(pygame.joystick.get_count()) # Is not None before quit
|
||
|
|
||
|
pygame.joystick.quit()
|
||
|
|
||
|
with self.assertRaises(pygame.error): # Raises error if quit worked
|
||
|
pygame.joystick.get_count()
|
||
|
|
||
|
def test_get_count(self):
|
||
|
# Test that get_count correctly returns a non-negative number of joysticks
|
||
|
pygame.joystick.init()
|
||
|
|
||
|
try:
|
||
|
count = pygame.joystick.get_count()
|
||
|
self.assertGreaterEqual(
|
||
|
count, 0, ("joystick.get_count() must " "return a value >= 0")
|
||
|
)
|
||
|
finally:
|
||
|
pygame.joystick.quit()
|
||
|
|
||
|
|
||
|
class JoystickInteractiveTest(unittest.TestCase):
|
||
|
__tags__ = ["interactive"]
|
||
|
|
||
|
def test_get_count_interactive(self):
|
||
|
# Test get_count correctly identifies number of connected joysticks
|
||
|
prompt(
|
||
|
"Please connect any joysticks/controllers now before starting the "
|
||
|
"joystick.get_count() test."
|
||
|
)
|
||
|
|
||
|
pygame.joystick.init()
|
||
|
# pygame.joystick.get_count(): return count
|
||
|
# number of joysticks on the system, 0 means no joysticks connected
|
||
|
count = pygame.joystick.get_count()
|
||
|
|
||
|
response = question(
|
||
|
"NOTE: Having Steam open may add an extra virtual controller for "
|
||
|
"each joystick/controller physically plugged in.\n"
|
||
|
f"joystick.get_count() thinks there is [{count}] joystick(s)/controller(s)"
|
||
|
"connected to this system. Is this correct?"
|
||
|
)
|
||
|
|
||
|
self.assertTrue(response)
|
||
|
|
||
|
# When you create Joystick objects using Joystick(id), you pass an
|
||
|
# integer that must be lower than this count.
|
||
|
# Test Joystick(id) for each connected joystick
|
||
|
if count != 0:
|
||
|
for x in range(count):
|
||
|
pygame.joystick.Joystick(x)
|
||
|
with self.assertRaises(pygame.error):
|
||
|
pygame.joystick.Joystick(count)
|
||
|
|
||
|
pygame.joystick.quit()
|
||
|
|
||
|
|
||
|
################################################################################
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
unittest.main()
|