Tests for loading PNG images

This commit is contained in:
Kovid Goyal 2017-09-28 20:03:26 +05:30
parent 671bcafee5
commit c31e608ff9
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 77 additions and 27 deletions

View File

@ -20,6 +20,7 @@ matrix:
- libxcursor-dev - libxcursor-dev
- libunistring-dev - libunistring-dev
- libpng-dev - libpng-dev
- python3-pil
- os: linux - os: linux
dist: trusty dist: trusty
@ -40,6 +41,7 @@ matrix:
- libxcursor-dev - libxcursor-dev
- libunistring-dev - libunistring-dev
- libpng-dev - libpng-dev
- python3-pil
- os: linux - os: linux
dist: trusty dist: trusty
@ -60,6 +62,7 @@ matrix:
- libxcursor-dev - libxcursor-dev
- libunistring-dev - libunistring-dev
- libpng-dev - libpng-dev
- python3-pil
- clang - clang
- os: osx - os: osx
language: generic language: generic

View File

@ -4,13 +4,20 @@
import os import os
import tempfile import tempfile
import unittest
import zlib import zlib
from base64 import standard_b64encode from base64 import standard_b64encode
from io import BytesIO
from kitty.fast_data_types import parse_bytes from kitty.fast_data_types import parse_bytes
from . import BaseTest from . import BaseTest
try:
from PIL import Image
except ImportError:
Image = None
def relpath(name): def relpath(name):
base = os.path.dirname(os.path.abspath(__file__)) base = os.path.dirname(os.path.abspath(__file__))
@ -31,9 +38,7 @@ def send_command(screen, cmd, payload=b''):
return c.wtcbuf return c.wtcbuf
class TestGraphics(BaseTest): def helpers(self):
def test_load_images(self):
s = self.create_screen() s = self.create_screen()
g = s.grman g = s.grman
@ -59,6 +64,14 @@ class TestGraphics(BaseTest):
self.ae(img['is_4byte_aligned'], kw.get('f') != 24) self.ae(img['is_4byte_aligned'], kw.get('f') != 24)
return img return img
return s, g, l, sl
class TestGraphics(BaseTest):
def test_load_images(self):
s, g, l, sl = helpers(self)
# Test simple load # Test simple load
for f in 32, 24: for f in 32, 24:
p = 'abc' + ('d' if f == 32 else '') p = 'abc' + ('d' if f == 32 else '')
@ -76,7 +89,13 @@ class TestGraphics(BaseTest):
# Test compression # Test compression
random_data = os.urandom(3 * 1024) random_data = os.urandom(3 * 1024)
compressed_random_data = zlib.compress(random_data) compressed_random_data = zlib.compress(random_data)
sl(compressed_random_data, s=24, v=32, o='z', expecting_data=random_data) sl(
compressed_random_data,
s=24,
v=32,
o='z',
expecting_data=random_data
)
# Test loading from file # Test loading from file
f = tempfile.NamedTemporaryFile() f = tempfile.NamedTemporaryFile()
@ -85,10 +104,38 @@ class TestGraphics(BaseTest):
self.assertTrue(os.path.exists(f.name)) self.assertTrue(os.path.exists(f.name))
f.seek(0), f.truncate(), f.write(compressed_random_data), f.flush() f.seek(0), f.truncate(), f.write(compressed_random_data), f.flush()
sl(f.name, s=24, v=32, t='t', o='z', expecting_data=random_data) sl(f.name, s=24, v=32, t='t', o='z', expecting_data=random_data)
self.assertRaises(FileNotFoundError, f.close) # check that file was deleted self.assertRaises(
FileNotFoundError, f.close
) # check that file was deleted
# Test loading from POSIX SHM # Test loading from POSIX SHM
name = '/kitty-test-shm' name = '/kitty-test-shm'
g.shm_write(name, random_data) g.shm_write(name, random_data)
sl(name, s=24, v=32, t='s', expecting_data=random_data) sl(name, s=24, v=32, t='s', expecting_data=random_data)
self.assertRaises(FileNotFoundError, g.shm_unlink, name) # check that file was deleted self.assertRaises(
FileNotFoundError, g.shm_unlink, name
) # check that file was deleted
@unittest.skipIf(Image is None, 'PIL not available, skipping PNG tests')
def test_load_png(self):
s, g, l, sl = helpers(self)
w, h = 5, 3
img = Image.new('RGBA', (w, h), 'red')
rgba_data = img.tobytes()
def png(mode='RGBA'):
buf = BytesIO()
i = img
if mode != i.mode:
i = img.convert(mode)
i.save(buf, 'PNG')
return buf.getvalue()
for mode in 'RGBA RGB P'.split():
data = png(mode)
sl(data, f=100, S=len(data), expecting_data=rgba_data)
img = img.convert('L')
rgba_data = img.convert('RGBA').tobytes()
data = png('L')
sl(data, f=100, S=len(data), expecting_data=rgba_data)