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
|
import sys
import pytest
from sdl2 import ext as sdl2ext
from sdl2 import surface
try:
from sdl2 import sdlimage
_HASSDLIMAGE=True
except:
_HASSDLIMAGE=False
RESOURCES = sdl2ext.Resources(__file__, "resources")
is32bit = sys.maxsize <= 2**32
ismacos = sys.platform == "darwin"
formats = [ # Do not use bmp - it's contained in resources.zip
"cur",
"gif",
"ico",
"jpg",
"lbm",
"pbm",
"pcx",
"pgm",
"png",
"pnm",
"ppm",
"svg",
"tga",
"tif",
"webp",
"xcf",
"xpm",
# "xv",
]
# SVG unsupported on SDL2_image < 2.0.2
if _HASSDLIMAGE and sdlimage.dll.version < 2002:
formats.remove("svg")
# As of SDL2_image 2.0.5, XCF support seems to be broken on 32-bit builds
# XCF support is also broken in official SDL2_image macOS .frameworks
if is32bit or ismacos:
formats.remove("xcf")
# WEBP support seems to be broken in the 32-bit Windows SDL2_image 2.0.2 binary
bad_webp = is32bit and sdlimage.dll.version == 2002
if bad_webp:
formats.remove("webp")
class TestSDL2ExtImage(object):
__tags__ = ["sdl", "sdl2ext"]
@classmethod
def setup_class(cls):
try:
sdl2ext.init()
except sdl2ext.SDLError:
raise pytest.skip('Video subsystem not supported')
@classmethod
def teardown_class(cls):
sdl2ext.quit()
def test_get_image_formats(self):
assert isinstance(sdl2ext.get_image_formats(), tuple)
supformats = sdl2ext.get_image_formats()
for fmt in formats:
assert fmt in supformats
def test_load_image(self):
# TODO: add image comparision to check, if it actually does the
# right thing (SDL2 BMP loaded image?)
# Add argument tests
try:
import PIL
_HASPIL = True
except ImportError:
_HASPIL = False
fname = "surfacetest.%s"
for fmt in formats:
filename = RESOURCES.get_path(fname % fmt)
sf = sdl2ext.load_image(filename)
assert isinstance(sf, surface.SDL_Surface)
# Force only PIL
if _HASPIL and fmt not in ("webp", "xcf", "lbm", "svg"):
sf = sdl2ext.load_image(filename, enforce="PIL")
assert isinstance(sf, surface.SDL_Surface)
# Force only sdlimage
sf = sdl2ext.load_image(filename, enforce="SDL")
assert isinstance(sf, surface.SDL_Surface)
|