Traktor/myenv/Lib/site-packages/pygame/tests/joystick_test.py

167 lines
5.9 KiB
Python
Raw Normal View History

2024-05-26 05:12:46 +02:00
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()