1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
import sys
import pytest
import sdl2
from sdl2 import SDL_WINDOW_SHOWN
from sdl2 import ext as sdl2ext
from sdl2 import surface, video
from .conftest import SKIP_ANNOYING
# Some tests don't work properly with some video drivers, so check the name
DRIVER_DUMMY = False
DRIVER_X11 = False
try:
sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO)
driver_name = video.SDL_GetCurrentVideoDriver()
sdl2.SDL_Quit()
DRIVER_DUMMY = driver_name == b"dummy"
DRIVER_X11 = driver_name == b"x11"
except:
pass
class TestExtWindow(object):
__tags__ = ["sdl", "sdl2ext"]
def test_init(self, with_sdl):
flags = video.SDL_WINDOW_BORDERLESS
sizes = ((1, 1), (10, 10), (10, 20), (200, 17), (640, 480))
for w, h in sizes:
window = sdl2ext.Window("Window", size=(w, h), flags=flags)
assert window.size == (w, h)
window.close()
def test_title(self, with_sdl):
window = sdl2ext.Window("Window", size=(10, 10))
assert window.title == "Window"
window.title = b"Test1234"
assert window.title == "Test1234"
video.SDL_SetWindowTitle(window.window, b"manual override")
assert window.title == "manual override"
window.close()
assert window.title == "Test1234"
window.title = "set when closed"
assert window.title == "set when closed"
def test_show_hide(self, with_sdl):
get_flags = video.SDL_GetWindowFlags
window = sdl2ext.Window("Test Show Window", size=(200, 200))
assert get_flags(window.window) & SDL_WINDOW_SHOWN != SDL_WINDOW_SHOWN
window.show()
assert get_flags(window.window) & SDL_WINDOW_SHOWN == SDL_WINDOW_SHOWN
window.hide()
assert get_flags(window.window) & SDL_WINDOW_SHOWN != SDL_WINDOW_SHOWN
window.close()
# Test informative exceptions for closed window
with pytest.raises(RuntimeError):
window.show()
with pytest.raises(RuntimeError):
window.hide()
@pytest.mark.skipif(SKIP_ANNOYING, reason="Skip unless requested")
def test_maximize(self, with_sdl):
get_flags = video.SDL_GetWindowFlags
max_flag = video.SDL_WINDOW_MAXIMIZED
flags = video.SDL_WINDOW_RESIZABLE
window = sdl2ext.Window("Test", size=(200, 200), flags=flags)
window.show()
assert get_flags(window.window) & max_flag != max_flag
window.maximize()
if not DRIVER_DUMMY:
assert get_flags(window.window) & max_flag == max_flag
window.close()
# Test informative exception for closed window
with pytest.raises(RuntimeError):
window.maximize()
@pytest.mark.skipif(SKIP_ANNOYING, reason="Skip unless requested")
def test_minimize_restore(self, with_sdl):
get_flags = video.SDL_GetWindowFlags
min_flag = video.SDL_WINDOW_MINIMIZED
window = sdl2ext.Window("Test", size=(200, 200))
window.show()
assert get_flags(window.window) & min_flag != min_flag
window.minimize()
if not (DRIVER_DUMMY or DRIVER_X11):
assert get_flags(window.window) & min_flag == min_flag
window.restore()
assert get_flags(window.window) & min_flag != min_flag
window.close()
# Test informative exceptions for closed window
with pytest.raises(RuntimeError):
window.minimize()
with pytest.raises(RuntimeError):
window.restore()
@pytest.mark.skip("not implemented")
def test_refresh(self, with_sdl):
pass
def test_get_surface(self, with_sdl):
window = sdl2ext.Window("Surface", size=(200, 200))
sf = window.get_surface()
assert isinstance(sf, surface.SDL_Surface)
window.close()
# Test informative exception for closed window
with pytest.raises(RuntimeError):
sf = window.get_surface()
def test_open_close(self, with_sdl):
get_flags = video.SDL_GetWindowFlags
window = sdl2ext.Window("Test", size=(200, 200))
window.close()
assert window.window == None
window.open()
assert isinstance(window.window, video.SDL_Window)
assert get_flags(window.window) & SDL_WINDOW_SHOWN == SDL_WINDOW_SHOWN
window.close()
def test_position(self, with_sdl):
window = sdl2ext.Window("Position", size=(200, 200), position=(100, 100))
assert window.position == (100, 100)
window.position = 70, 300
assert window.position == (70, 300)
window.close()
def test_size(self, with_sdl):
# This may fail for fullscreen WMs or Win10 tablet modes
flags = video.SDL_WINDOW_RESIZABLE
window = sdl2ext.Window("Size", size=(200, 200), flags=flags)
assert window.size == (200, 200)
window.size = 150, 77
assert window.size == (150, 77)
window.close()
|