libvips/test/test_iofuncs.py
John Cupitt 7134c64836 notes
2017-08-11 09:23:59 +01:00

88 lines
2.6 KiB
Python
Executable File

#!/usr/bin/python3
from __future__ import division
import unittest
import math
#import logging
#logging.basicConfig(level = logging.DEBUG)
import gi
gi.require_version('Vips', '8.0')
from gi.repository import Vips
Vips.leak_set(True)
# an expanding zip ... if either of the args is not a list, duplicate it down
# the other
def zip_expand(x, y):
if isinstance(x, list) and isinstance(y, list):
return list(zip(x, y))
elif isinstance(x, list):
return [[i, y] for i in x]
elif isinstance(y, list):
return [[x, j] for j in y]
else:
return [[x, y]]
class TestIofuncs(unittest.TestCase):
# test a pair of things which can be lists for approx. equality
def assertEqualObjects(self, a, b, msg = ''):
#print('assertEqualObjects %s = %s' % (a, b))
for x, y in zip_expand(a, b):
self.assertEqual(x, y, msg = msg)
# test the vips7 filename splitter ... this is very fragile and annoying
# code with lots of cases
def test_split7(self):
def split(path):
filename7 = Vips.path_filename7(path)
mode7 = Vips.path_mode7(path)
return [filename7, mode7]
cases = [
["c:\\silly:dir:name\\fr:ed.tif:jpeg:95,,,,c:\\icc\\srgb.icc",
["c:\\silly:dir:name\\fr:ed.tif",
"jpeg:95,,,,c:\\icc\\srgb.icc"]],
["I180:",
["I180",
""]],
["c:\\silly:",
["c:\\silly",
""]],
["c:\\program files\\x:hello",
["c:\\program files\\x",
"hello"]],
["C:\\fixtures\\2569067123_aca715a2ee_o.jpg",
["C:\\fixtures\\2569067123_aca715a2ee_o.jpg",
""]]
]
for case in cases:
self.assertEqualObjects(split(case[0]), case[1])
def test_new_from_image(self):
im = Vips.Image.mask_ideal(100, 100, 0.5, reject = True, optical = True)
im2 = im.new_from_image(12)
self.assertEqual(im2.width, im.width)
self.assertEqual(im2.height, im.height)
self.assertEqual(im2.interpretation, im.interpretation)
self.assertEqual(im2.format, im.format)
self.assertEqual(im2.xres, im.xres)
self.assertEqual(im2.yres, im.yres)
self.assertEqual(im2.xoffset, im.xoffset)
self.assertEqual(im2.yoffset, im.yoffset)
self.assertEqual(im2.bands, 1)
self.assertEqual(im2.avg(), 12)
im2 = im.new_from_image([1,2,3])
self.assertEqual(im2.bands, 3)
self.assertEqual(im2.avg(), 2)
if __name__ == '__main__':
unittest.main()