Skip to content

Commit

Permalink
fix testing multiple backends
Browse files Browse the repository at this point in the history
The decorator for rerunning with a different backend did not take the
side effects into account.
Create different TestCases objects instead.
  • Loading branch information
hydrargyrum committed Dec 13, 2016
1 parent b707c52 commit 4b6bc5f
Showing 1 changed file with 37 additions and 18 deletions.
55 changes: 37 additions & 18 deletions test.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,35 @@
import vignette


def do_all_backends(func):
@wraps(func)
def decorator(*args):
assert vignette.get_metadata_backend(), 'there are no testable backends'
ALL_THUMBNAIL = vignette.THUMBNAILER_BACKENDS
IMAGE_THUMBNAIL = [vignette.QtBackend(), vignette.PilBackend(), vignette.MagickBackend()]
IMAGE_THUMBNAIL = [b for b in IMAGE_THUMBNAIL if b.is_available()]

all_backends = vignette.METADATA_BACKENDS
for backend in all_backends:
if backend.is_available():
vignette.METADATA_BACKENDS = [backend]
try:
func(*args)
except:
logging.warning('backend %r failed', type(backend))
raise
vignette.METADATA_BACKENDS = all_backends

return decorator
ALL_METADATA = vignette.METADATA_BACKENDS
AVAIL_METADATA = [b for b in ALL_METADATA if b.is_available()]


class ThumbnailTests(unittest.TestCase):
def __init__(self, metadata=None, thumbnail=None, *args, **kwargs):
super(ThumbnailTests, self).__init__(*args, **kwargs)
self.metadata_backends = metadata
self.thumbnail_backends = thumbnail

def setUp(self):
self.dir = os.environ['XDG_CACHE_HOME'] = tempfile.mkdtemp()
self.filename = os.path.join(os.environ['XDG_CACHE_HOME'], 'test.png')
shutil.copyfile('test.png', self.filename)

if self.metadata_backends is None:
vignette.METADATA_BACKENDS = ALL_METADATA
else:
vignette.METADATA_BACKENDS = self.metadata_backends

if self.thumbnail_backends is None:
vignette.THUMBNAILER_BACKENDS = ALL_THUMBNAIL
else:
vignette.THUMBNAILER_BACKENDS = self.thumbnail_backends

def tearDown(self):
shutil.rmtree(self.dir)

Expand All @@ -44,7 +48,6 @@ def test_hash(self):
dest = os.path.join(self.dir, 'thumbnails', 'large', hashlib.md5(uri.encode('utf-8')).hexdigest()) + '.png'
self.assertEqual(dest, vignette.build_thumbnail_path(self.filename, 'large'))

@do_all_backends
def test_basic(self):
dest = vignette.build_thumbnail_path(self.filename, 'large')
assert dest
Expand Down Expand Up @@ -139,6 +142,22 @@ def test_put_fail(self):
self.assertEqual(dest, vignette.get_thumbnail(self.filename, use_fail_appname='foo'))


class MultiBackendsLoader(unittest.TestLoader):
def loadTestsFromTestCase(self, testCaseClass):
testCaseNames = self.getTestCaseNames(testCaseClass)
tests = []
for name in testCaseNames:
tests.append(testCaseClass(methodName=name))
for b in AVAIL_METADATA:
tests.append(testCaseClass(metadata=[b], methodName=name))

for b in IMAGE_THUMBNAIL:
tests.append(testCaseClass(thumbnail=[b], methodName=name))

loaded_suite = self.suiteClass(tests)
return loaded_suite


if __name__ == '__main__':
logging.basicConfig()
unittest.main()
unittest.main(testLoader=MultiBackendsLoader())

0 comments on commit 4b6bc5f

Please sign in to comment.