Compare commits
36 Commits
Author | SHA256 | Date | |
---|---|---|---|
2f7b12a3a1 | |||
5108f4523e | |||
6216048b07 | |||
eba4322251 | |||
de884e4146 | |||
896af8564c | |||
25334c3745 | |||
ee3fd83d2a | |||
28ee5c8ba2 | |||
281fd181e2 | |||
d2c494849e | |||
2d8a1faf06 | |||
d16beaf49a | |||
c71d14fbbf | |||
cedae050dd | |||
86112310d6 | |||
fe78af4f94 | |||
d1f823d20e | |||
ebf70fbc7a | |||
9c7fa542fa | |||
fe750cfef3 | |||
e0ab0957ff | |||
12d3a593d1 | |||
793affa45b | |||
d60e66748e | |||
50b2e4869b | |||
e8bd4b23f1 | |||
|
df21fcd728 | ||
665c01933c | |||
f4a4d71537 | |||
30250a237e | |||
63f0b473fd | |||
07d1d483c3 | |||
6f18e5493d | |||
45fbae4822 | |||
|
4ad4c5394f |
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:1027406badbecdd30fe56e800a5a76ad7d7271a3aec0b7acf780ee26a00f2d40
|
|
||||||
size 773537
|
|
@@ -1,240 +0,0 @@
|
|||||||
From ed28ea6305dede1b6ba046e36ddae9ba2016b62e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon McVittie <smcv@collabora.com>
|
|
||||||
Date: Sat, 19 Aug 2023 23:44:03 +0100
|
|
||||||
Subject: [PATCH] Partially resolve #257: video_test (#270)
|
|
||||||
|
|
||||||
* video_test: Don't check error unless a function failed
|
|
||||||
|
|
||||||
Helps: https://github.com/py-sdl/py-sdl2/issues/257
|
|
||||||
Signed-off-by: Simon McVittie <smcv@debian.org>
|
|
||||||
|
|
||||||
* video_test: Use _check_error_msg() a bit more often
|
|
||||||
|
|
||||||
Signed-off-by: Simon McVittie <smcv@debian.org>
|
|
||||||
|
|
||||||
* video_test: Mitigate unsuitability of SDL_GetError() for detecting failure
|
|
||||||
|
|
||||||
SDL_GetError() is like errno: it's documented not to be suitable for
|
|
||||||
detecting failure, only for getting more details if failure was already
|
|
||||||
detected (its result is unspecified on success, because a successful
|
|
||||||
API call might have been implemented by doing something that failed,
|
|
||||||
detecting that, and falling back to doing something different).
|
|
||||||
However, some functions in SDL2 return void, so we have no other way
|
|
||||||
to tell whether they have failed (they do return a result in SDL3).
|
|
||||||
|
|
||||||
To make it less likely that upgrading SDL2 will make these tests regress,
|
|
||||||
clear the error indicator immediately before calling the function under
|
|
||||||
test. It is still not guaranteed to be empty on success, but at least
|
|
||||||
this way we make sure it doesn't already contain an error message from
|
|
||||||
a previous function call.
|
|
||||||
|
|
||||||
Helps: https://github.com/py-sdl/py-sdl2/issues/257
|
|
||||||
Signed-off-by: Simon McVittie <smcv@debian.org>
|
|
||||||
|
|
||||||
---------
|
|
||||||
|
|
||||||
Signed-off-by: Simon McVittie <smcv@debian.org>
|
|
||||||
---
|
|
||||||
sdl2/test/video_test.py | 58 +++++++++++++++++++++--------------------
|
|
||||||
1 file changed, 30 insertions(+), 28 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/sdl2/test/video_test.py b/sdl2/test/video_test.py
|
|
||||||
index 83cb620..ca5a8e4 100644
|
|
||||||
--- a/sdl2/test/video_test.py
|
|
||||||
+++ b/sdl2/test/video_test.py
|
|
||||||
@@ -52,8 +52,7 @@ def with_sdl_gl(with_sdl):
|
|
||||||
def window(with_sdl):
|
|
||||||
flag = sdl2.SDL_WINDOW_BORDERLESS
|
|
||||||
w = sdl2.SDL_CreateWindow(b"Test", 10, 40, 12, 13, flag)
|
|
||||||
- if not w:
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
+ assert w, _check_error_msg()
|
|
||||||
assert isinstance(w.contents, sdl2.SDL_Window)
|
|
||||||
sdl2.SDL_ClearError()
|
|
||||||
yield w
|
|
||||||
@@ -63,8 +62,7 @@ def window(with_sdl):
|
|
||||||
def decorated_window(with_sdl):
|
|
||||||
flag = sdl2.SDL_WINDOW_RESIZABLE
|
|
||||||
w = sdl2.SDL_CreateWindow(b"Test", 10, 40, 12, 13, flag)
|
|
||||||
- if not w:
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
+ assert w, _check_error_msg()
|
|
||||||
assert isinstance(w.contents, sdl2.SDL_Window)
|
|
||||||
sdl2.SDL_ClearError()
|
|
||||||
yield w
|
|
||||||
@@ -74,20 +72,18 @@ def decorated_window(with_sdl):
|
|
||||||
def gl_window(with_sdl_gl):
|
|
||||||
flag = sdl2.SDL_WINDOW_OPENGL
|
|
||||||
w = sdl2.SDL_CreateWindow(b"OpenGL", 10, 40, 12, 13, flag)
|
|
||||||
- if not w:
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
+ assert w, _check_error_msg()
|
|
||||||
assert isinstance(w.contents, sdl2.SDL_Window)
|
|
||||||
sdl2.SDL_ClearError()
|
|
||||||
ctx = sdl2.SDL_GL_CreateContext(w)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
+ assert ctx, _check_error_msg()
|
|
||||||
yield (w, ctx)
|
|
||||||
sdl2.SDL_GL_DeleteContext(ctx)
|
|
||||||
sdl2.SDL_DestroyWindow(w)
|
|
||||||
|
|
||||||
def _create_window(name, h, w, x, y, flags):
|
|
||||||
window = sdl2.SDL_CreateWindow(name, h, w, x, y, flags)
|
|
||||||
- if not window:
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
+ assert window, _check_error_msg()
|
|
||||||
assert isinstance(window.contents, sdl2.SDL_Window)
|
|
||||||
sdl2.SDL_ClearError()
|
|
||||||
return window
|
|
||||||
@@ -193,7 +189,7 @@ def test_SDL_VideoInitQuit():
|
|
||||||
# Test with default driver
|
|
||||||
assert sdl2.SDL_WasInit(0) & sdl2.SDL_INIT_VIDEO != sdl2.SDL_INIT_VIDEO
|
|
||||||
ret = sdl2.SDL_VideoInit(None)
|
|
||||||
- assert ret == 0, sdl2.SDL_GetError().decode('utf-8', 'replace')
|
|
||||||
+ assert ret == 0, _check_error_msg()
|
|
||||||
assert sdl2.SDL_GetCurrentVideoDriver() # If initialized, should be string
|
|
||||||
sdl2.SDL_VideoQuit()
|
|
||||||
assert not sdl2.SDL_GetCurrentVideoDriver()
|
|
||||||
@@ -234,8 +230,7 @@ def test_SDL_GetDisplayMode(with_sdl):
|
|
||||||
for mode in range(modes):
|
|
||||||
dmode = sdl2.SDL_DisplayMode()
|
|
||||||
ret = sdl2.SDL_GetDisplayMode(index, mode, byref(dmode))
|
|
||||||
- assert sdl2.SDL_GetError() == b""
|
|
||||||
- assert ret == 0
|
|
||||||
+ assert ret == 0, _check_error_msg()
|
|
||||||
if not DRIVER_DUMMY:
|
|
||||||
assert dmode.w > 0
|
|
||||||
assert dmode.h > 0
|
|
||||||
@@ -245,8 +240,7 @@ def test_SDL_GetCurrentDisplayMode(with_sdl):
|
|
||||||
for index in range(numdisplays):
|
|
||||||
dmode = sdl2.SDL_DisplayMode()
|
|
||||||
ret = sdl2.SDL_GetCurrentDisplayMode(index, byref(dmode))
|
|
||||||
- assert sdl2.SDL_GetError() == b""
|
|
||||||
- assert ret == 0
|
|
||||||
+ assert ret == 0, _check_error_msg()
|
|
||||||
assert dmode.w > 0
|
|
||||||
assert dmode.h > 0
|
|
||||||
|
|
||||||
@@ -255,8 +249,7 @@ def test_SDL_GetDesktopDisplayMode(with_sdl):
|
|
||||||
for index in range(numdisplays):
|
|
||||||
dmode = sdl2.SDL_DisplayMode()
|
|
||||||
ret = sdl2.SDL_GetDesktopDisplayMode(index, byref(dmode))
|
|
||||||
- assert sdl2.SDL_GetError() == b""
|
|
||||||
- assert ret == 0
|
|
||||||
+ assert ret == 0, _check_error_msg()
|
|
||||||
assert dmode.w > 0
|
|
||||||
assert dmode.h > 0
|
|
||||||
|
|
||||||
@@ -266,8 +259,7 @@ def test_SDL_GetClosestDisplayMode(with_sdl):
|
|
||||||
for index in range(numdisplays):
|
|
||||||
dmode = sdl2.SDL_DisplayMode()
|
|
||||||
ret = sdl2.SDL_GetCurrentDisplayMode(index, byref(dmode))
|
|
||||||
- assert sdl2.SDL_GetError() == b""
|
|
||||||
- assert ret == 0
|
|
||||||
+ assert ret == 0, _check_error_msg()
|
|
||||||
cmode = sdl2.SDL_DisplayMode(
|
|
||||||
dmode.format, dmode.w - 1, dmode.h - 1, dmode.refresh_rate
|
|
||||||
)
|
|
||||||
@@ -286,8 +278,7 @@ def test_SDL_GetDisplayBounds(with_sdl):
|
|
||||||
for index in range(numdisplays):
|
|
||||||
bounds = rect.SDL_Rect()
|
|
||||||
ret = sdl2.SDL_GetDisplayBounds(index, byref(bounds))
|
|
||||||
- assert sdl2.SDL_GetError() == b""
|
|
||||||
- assert ret == 0
|
|
||||||
+ assert ret == 0, _check_error_msg()
|
|
||||||
assert bounds.w > 0
|
|
||||||
assert bounds.h > 0
|
|
||||||
assert not rect.SDL_RectEmpty(bounds)
|
|
||||||
@@ -345,8 +336,8 @@ def test_GetDisplayInfo(with_sdl):
|
|
||||||
def test_SDL_CreateDestroyWindow(with_sdl):
|
|
||||||
flag = sdl2.SDL_WINDOW_BORDERLESS
|
|
||||||
window = sdl2.SDL_CreateWindow(b"Test", 10, 40, 12, 13, flag)
|
|
||||||
+ assert window, _check_error_msg()
|
|
||||||
if not isinstance(window.contents, sdl2.SDL_Window):
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
assert isinstance(window.contents, sdl2.SDL_Window)
|
|
||||||
sdl2.SDL_DestroyWindow(window)
|
|
||||||
|
|
||||||
@@ -453,7 +444,10 @@ def test_SDL_SetWindowIcon(window):
|
|
||||||
0, 16, 16, 16, 0xF000, 0x0F00, 0x00F0, 0x000F
|
|
||||||
)
|
|
||||||
assert isinstance(sf.contents, surface.SDL_Surface)
|
|
||||||
+ sdl2.SDL_ClearError()
|
|
||||||
sdl2.SDL_SetWindowIcon(window, sf)
|
|
||||||
+ # TODO: This is not 100% safe, but in SDL2, SetWindowIcon returns void,
|
|
||||||
+ # so we can't reliably detect error
|
|
||||||
assert SDL_GetError() == b""
|
|
||||||
|
|
||||||
@pytest.mark.xfail(is_pypy, reason="PyPy can't create proper py_object values")
|
|
||||||
@@ -535,7 +529,10 @@ def test_SDL_GetSetWindowMinimumSize(window):
|
|
||||||
sdl2.SDL_GetWindowSize(window, byref(sx), byref(sy))
|
|
||||||
assert (sx.value, sy.value) == (12, 13)
|
|
||||||
# Set and verify the minimum window size
|
|
||||||
+ sdl2.SDL_ClearError()
|
|
||||||
sdl2.SDL_SetWindowMinimumSize(window, 10, 10)
|
|
||||||
+ # TODO: This is not 100% safe, but in SDL2, SetWindowMinimumSize returns
|
|
||||||
+ # void, so we can't reliably detect error
|
|
||||||
assert SDL_GetError() == b""
|
|
||||||
sdl2.SDL_GetWindowMinimumSize(window, byref(minx), byref(miny))
|
|
||||||
assert (minx.value, miny.value) == (10, 10)
|
|
||||||
@@ -549,8 +546,11 @@ def test_SDL_GetSetWindowMaximumSize(window):
|
|
||||||
maxx, maxy = c_int(0), c_int(0)
|
|
||||||
sdl2.SDL_GetWindowSize(window, byref(sx), byref(sy))
|
|
||||||
assert (sx.value, sy.value) == (12, 13)
|
|
||||||
+ sdl2.SDL_ClearError()
|
|
||||||
# Set and verify the maximum window size
|
|
||||||
sdl2.SDL_SetWindowMaximumSize(window, 32, 32)
|
|
||||||
+ # TODO: This is not 100% safe, but in SDL2, SetWindowMaximumSize returns
|
|
||||||
+ # void, so we can't reliably detect error
|
|
||||||
assert SDL_GetError() == b""
|
|
||||||
sdl2.SDL_GetWindowMaximumSize(window, byref(maxx), byref(maxy))
|
|
||||||
assert (maxx.value, maxy.value) == (32, 32)
|
|
||||||
@@ -660,7 +660,7 @@ def test_SDL_HasWindowSurface(window):
|
|
||||||
|
|
||||||
def test_SDL_GetWindowSurface(window):
|
|
||||||
sf = sdl2.SDL_GetWindowSurface(window)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
+ assert sf, _check_error_msg()
|
|
||||||
assert isinstance(sf.contents, surface.SDL_Surface)
|
|
||||||
|
|
||||||
def test_SDL_UpdateWindowSurface(window):
|
|
||||||
@@ -857,23 +857,22 @@ def test_SDL_GL_CreateDeleteContext(with_sdl_gl):
|
|
||||||
b"OpenGL", 10, 40, 32, 24, sdl2.SDL_WINDOW_OPENGL
|
|
||||||
)
|
|
||||||
ctx = sdl2.SDL_GL_CreateContext(window)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
+ assert ctx, _check_error_msg()
|
|
||||||
sdl2.SDL_GL_DeleteContext(ctx)
|
|
||||||
ctx = sdl2.SDL_GL_CreateContext(window)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
+ assert ctx, _check_error_msg()
|
|
||||||
sdl2.SDL_GL_DeleteContext(ctx)
|
|
||||||
sdl2.SDL_DestroyWindow(window)
|
|
||||||
|
|
||||||
@pytest.mark.skipif(DRIVER_DUMMY, reason="Doesn't work with dummy driver")
|
|
||||||
def test_SDL_GL_GetProcAddress(gl_window):
|
|
||||||
procaddr = sdl2.SDL_GL_GetProcAddress(b"glGetString")
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
- assert procaddr is not None and int(procaddr) != 0
|
|
||||||
+ assert procaddr is not None and int(procaddr) != 0, _check_error_msg()
|
|
||||||
|
|
||||||
@pytest.mark.skipif(DRIVER_DUMMY, reason="Doesn't work with dummy driver")
|
|
||||||
def test_SDL_GL_ExtensionSupported(gl_window):
|
|
||||||
- assert sdl2.SDL_GL_ExtensionSupported(b"GL_EXT_bgra")
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
+ sdl2.SDL_ClearError()
|
|
||||||
+ assert sdl2.SDL_GL_ExtensionSupported(b"GL_EXT_bgra"), _check_error_msg()
|
|
||||||
|
|
||||||
@pytest.mark.skipif(DRIVER_DUMMY, reason="Doesn't work with dummy driver")
|
|
||||||
def test_SDL_GL_GetSetResetAttribute(with_sdl_gl):
|
|
||||||
@@ -946,7 +945,10 @@ def test_SDL_GL_SwapWindow(gl_window):
|
|
||||||
window, ctx = gl_window
|
|
||||||
ret = sdl2.SDL_GL_MakeCurrent(window, ctx)
|
|
||||||
assert ret == 0, _check_error_msg()
|
|
||||||
+ sdl2.SDL_ClearError()
|
|
||||||
sdl2.SDL_GL_SwapWindow(window)
|
|
||||||
sdl2.SDL_GL_SwapWindow(window)
|
|
||||||
sdl2.SDL_GL_SwapWindow(window)
|
|
||||||
+ # TODO: This is not 100% safe, but in SDL2, GL_SwapWindow returns
|
|
||||||
+ # void, so we can't reliably detect error
|
|
||||||
assert SDL_GetError() == b""
|
|
@@ -1,43 +0,0 @@
|
|||||||
From d7c0604381f6cbefa2c8b51c84b879e2f927e91e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Simon McVittie <smcv@collabora.com>
|
|
||||||
Date: Sat, 19 Aug 2023 23:38:36 +0100
|
|
||||||
Subject: [PATCH] test: Don't assert that SDL_hid_enumerate doesn't set error
|
|
||||||
(#269)
|
|
||||||
|
|
||||||
On my Linux system, enumeration succeeds, but the error indicator gets
|
|
||||||
set as a side-effect (which appears to be because the loader checks
|
|
||||||
whether the symbol exists in SDL or a direct dependency before it
|
|
||||||
dlopens libudev).
|
|
||||||
|
|
||||||
The API of SDL_hid_enumerate does not make it possible to distinguish
|
|
||||||
between successfully returning an empty list of devices (returns NULL
|
|
||||||
with the error indicator in an undefined state) and a failure (returns
|
|
||||||
NULL with the error indicator set), and systems that run automated tests
|
|
||||||
usually don't have any HID game controllers connected, so we can't make
|
|
||||||
any meaningful use of the error indicator here.
|
|
||||||
|
|
||||||
Helps: https://github.com/py-sdl/py-sdl2/issues/257
|
|
||||||
|
|
||||||
Signed-off-by: Simon McVittie <smcv@debian.org>
|
|
||||||
---
|
|
||||||
sdl2/test/hidapi_test.py | 5 +++--
|
|
||||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/sdl2/test/hidapi_test.py b/sdl2/test/hidapi_test.py
|
|
||||||
index 68bb9f9..5422d42 100644
|
|
||||||
--- a/sdl2/test/hidapi_test.py
|
|
||||||
+++ b/sdl2/test/hidapi_test.py
|
|
||||||
@@ -38,10 +38,11 @@ def test_SDL_hid_device_change_count(hidapi_setup):
|
|
||||||
|
|
||||||
def test_SDL_hid_enumerate(hidapi_setup):
|
|
||||||
devices = sdl2.SDL_hid_enumerate(0, 0)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
+ # Cannot check the error indicator here: a non-error empty list is
|
|
||||||
+ # indistinguishable from an error, and it is not guaranteed that the
|
|
||||||
+ # error indicator will not be set as a side-effect of a successful load
|
|
||||||
if devices != None:
|
|
||||||
sdl2.SDL_hid_free_enumeration(devices)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skip("not implemented")
|
|
@@ -1,148 +0,0 @@
|
|||||||
From 1c865e3f751e678f3ad2d8f3fca17a0755fbeaf7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: basak <robie@justgohome.co.uk>
|
|
||||||
Date: Fri, 11 Aug 2023 17:52:01 +0100
|
|
||||||
Subject: [PATCH] tests: SDL_GetError() != b'' isn't an error (#267)
|
|
||||||
|
|
||||||
* tests: SDL_GetError() != b'' isn't an error
|
|
||||||
|
|
||||||
In Ubuntu, we're seeing test failures of the following pattern when
|
|
||||||
moving from libsdl2 2.28.1+dfsg-1 to 2.28.2+dfsg-1:
|
|
||||||
|
|
||||||
> assert sdl2.SDL_GetError() == b""
|
|
||||||
E AssertionError: assert b'Unexpected ...r element crc' == b''
|
|
||||||
E Full diff:
|
|
||||||
E - b''
|
|
||||||
E + b'Unexpected controller element crc'
|
|
||||||
|
|
||||||
This looks like an issue similar to that fixed in commit 8c39f40. We
|
|
||||||
should check the relevant return value, and only if it indicates failure
|
|
||||||
should we attach any particular meaning to the return value of
|
|
||||||
SDL_GetError().
|
|
||||||
|
|
||||||
* Add myself to AUTHORS.txt
|
|
||||||
|
|
||||||
As instructed in #267
|
|
||||||
---
|
|
||||||
AUTHORS.txt | 1 +
|
|
||||||
sdl2/test/gamecontroller_test.py | 16 +++-------------
|
|
||||||
2 files changed, 4 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/AUTHORS.txt b/AUTHORS.txt
|
|
||||||
index 287109e..6d40500 100644
|
|
||||||
--- a/AUTHORS.txt
|
|
||||||
+++ b/AUTHORS.txt
|
|
||||||
@@ -45,6 +45,7 @@ Thanks to everyone else for their assistance, support, fixes and improvements:
|
|
||||||
* Radomir Dopieralski
|
|
||||||
* Rob Rolls
|
|
||||||
* Robert Winkler
|
|
||||||
+* Robie Basak
|
|
||||||
* Roger Flores
|
|
||||||
* Simon McVittie
|
|
||||||
* smea lum
|
|
||||||
diff --git a/sdl2/test/gamecontroller_test.py b/sdl2/test/gamecontroller_test.py
|
|
||||||
index 7a00aac..f509a88 100644
|
|
||||||
--- a/sdl2/test/gamecontroller_test.py
|
|
||||||
+++ b/sdl2/test/gamecontroller_test.py
|
|
||||||
@@ -51,7 +51,7 @@ def gamepads(with_sdl):
|
|
||||||
for i in range(count):
|
|
||||||
if sdl2.SDL_IsGameController(i) == SDL_TRUE:
|
|
||||||
pad = sdl2.SDL_GameControllerOpen(i)
|
|
||||||
- assert sdl2.SDL_GetError() == b""
|
|
||||||
+ assert pad, _check_error_msg()
|
|
||||||
assert isinstance(pad.contents, sdl2.SDL_GameController)
|
|
||||||
devices.append(pad)
|
|
||||||
yield devices
|
|
||||||
@@ -133,21 +133,18 @@ def test_SDL_GameControllerMappingForGUID(with_sdl):
|
|
||||||
def test_SDL_GameControllerMapping(gamepads):
|
|
||||||
for pad in gamepads:
|
|
||||||
mapping = sdl2.SDL_GameControllerMapping(pad)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
assert mapping == None or type(mapping) in (str, bytes)
|
|
||||||
|
|
||||||
def test_SDL_IsGameController(with_sdl):
|
|
||||||
count = joystick.SDL_NumJoysticks()
|
|
||||||
for index in range(count):
|
|
||||||
ret = sdl2.SDL_IsGameController(index)
|
|
||||||
- assert sdl2.SDL_GetError() == b""
|
|
||||||
assert ret in [SDL_TRUE, SDL_FALSE]
|
|
||||||
|
|
||||||
def test_SDL_GameControllerNameForIndex(with_sdl):
|
|
||||||
count = joystick.SDL_NumJoysticks()
|
|
||||||
for index in range(count):
|
|
||||||
name = sdl2.SDL_GameControllerNameForIndex(index)
|
|
||||||
- assert sdl2.SDL_GetError() == b""
|
|
||||||
assert name == None or type(name) in (str, bytes)
|
|
||||||
|
|
||||||
@pytest.mark.skipif(sdl2.dll.version < 2231, reason="not available")
|
|
||||||
@@ -174,7 +171,7 @@ def test_SDL_GameControllerOpenClose(with_sdl):
|
|
||||||
for index in range(count):
|
|
||||||
if sdl2.SDL_IsGameController(index) == SDL_TRUE:
|
|
||||||
pad = sdl2.SDL_GameControllerOpen(index)
|
|
||||||
- assert sdl2.SDL_GetError() == b""
|
|
||||||
+ assert pad, _check_error_msg()
|
|
||||||
assert isinstance(pad.contents, sdl2.SDL_GameController)
|
|
||||||
sdl2.SDL_GameControllerClose(pad)
|
|
||||||
|
|
||||||
@@ -220,7 +217,6 @@ def test_SDL_GameControllerPath(gamepads):
|
|
||||||
def test_SDL_GameControllerGetType(gamepads):
|
|
||||||
for pad in gamepads:
|
|
||||||
padtype = sdl2.SDL_GameControllerGetType(pad)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
assert padtype in gamepad_types
|
|
||||||
if is_virtual(pad):
|
|
||||||
assert padtype == sdl2.SDL_CONTROLLER_TYPE_VIRTUAL
|
|
||||||
@@ -244,7 +240,6 @@ def test_SDL_GameControllerSetPlayerIndex(gamepads):
|
|
||||||
def test_SDL_GameControllerGetVendor(gamepads):
|
|
||||||
for pad in gamepads:
|
|
||||||
vid = sdl2.SDL_GameControllerGetVendor(pad)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
if not is_virtual(pad):
|
|
||||||
assert vid > 0
|
|
||||||
|
|
||||||
@@ -252,7 +247,6 @@ def test_SDL_GameControllerGetVendor(gamepads):
|
|
||||||
def test_SDL_GameControllerGetProduct(gamepads):
|
|
||||||
for pad in gamepads:
|
|
||||||
pid = sdl2.SDL_GameControllerGetProduct(pad)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
if not is_virtual(pad):
|
|
||||||
assert pid > 0
|
|
||||||
|
|
||||||
@@ -260,21 +254,18 @@ def test_SDL_GameControllerGetProduct(gamepads):
|
|
||||||
def test_SDL_GameControllerGetProductVersion(gamepads):
|
|
||||||
for pad in gamepads:
|
|
||||||
pver = sdl2.SDL_GameControllerGetProductVersion(pad)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
assert pver >= 0
|
|
||||||
|
|
||||||
@pytest.mark.skipif(sdl2.dll.version < 2231, reason="not available")
|
|
||||||
def test_SDL_GameControllerGetFirmwareVersion(gamepads):
|
|
||||||
for pad in gamepads:
|
|
||||||
fw_ver = sdl2.SDL_GameControllerGetFirmwareVersion(pad)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
assert fw_ver >= 0
|
|
||||||
|
|
||||||
@pytest.mark.skipif(sdl2.dll.version < 2014, reason="not available")
|
|
||||||
def test_SDL_GameControllerGetSerial(gamepads):
|
|
||||||
for pad in gamepads:
|
|
||||||
serial = sdl2.SDL_GameControllerGetSerial(pad)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
assert serial == None or type(serial) in (str, bytes)
|
|
||||||
|
|
||||||
def test_SDL_GameControllerGetAttached(gamepads):
|
|
||||||
@@ -285,7 +276,7 @@ def test_SDL_GameControllerGetAttached(gamepads):
|
|
||||||
def test_SDL_GameControllerGetJoystick(gamepads):
|
|
||||||
for pad in gamepads:
|
|
||||||
stick = sdl2.SDL_GameControllerGetJoystick(pad)
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
+ assert stick, _check_error_msg()
|
|
||||||
assert isinstance(stick.contents, joystick.SDL_Joystick)
|
|
||||||
|
|
||||||
def test_SDL_GameControllerEventState(with_sdl):
|
|
||||||
@@ -298,7 +289,6 @@ def test_SDL_GameControllerEventState(with_sdl):
|
|
||||||
def test_SDL_GameControllerUpdate(with_sdl):
|
|
||||||
# NOTE: Returns void, can't really test anything else
|
|
||||||
sdl2.SDL_GameControllerUpdate()
|
|
||||||
- assert SDL_GetError() == b""
|
|
||||||
|
|
||||||
def test_SDL_GameControllerGetAxisFromString(with_sdl):
|
|
||||||
expected = {
|
|
Reference in New Issue
Block a user