def runTest(self): for creator in self.creators: thumbdir = LocalFolder(self.create_tmp_dir(creator.__name__)) dir = LocalFolder(tests.ZIM_DATADIR).folder('pixmaps') for i, basename in enumerate(dir.list_names()): if basename.endswith('.svg'): continue # fails on windows in some cases file = dir.file(basename) thumbfile = thumbdir.file('thumb--' + basename) self.assertFalse(thumbfile.exists()) pixbuf = creator(file, thumbfile, THUMB_SIZE_NORMAL) self.assertIsInstance(pixbuf, GdkPixbuf.Pixbuf) self.assertTrue(thumbfile.exists()) pixbuf = GdkPixbuf.Pixbuf.new_from_file(thumbfile.path) self.assertEqual(pixbuf.get_option('tEXt::Thumb::URI'), file.uri) self.assertTrue(pixbuf.get_option('tEXt::Thumb::URI').startswith('file:///')) # Specific requirement of spec to use file:/// and not file://localhost/ self.assertEqual(int(pixbuf.get_option('tEXt::Thumb::MTime')), int(file.mtime())) self.assertTrue(i > 3) src_file = self.setUpFolder(mock=tests.MOCK_ALWAYS_REAL).file('test.txt') src_file.write('Test 123\n') thumbfile = thumbdir.file('thumb-test.txt') self.assertRaises( ThumbnailCreatorFailure, creator, src_file, thumbfile, THUMB_SIZE_NORMAL )
def testQueue(self): queue = ThumbnailQueue() self.assertTrue(queue.queue_empty()) # Test input / output src_file = self.setUpFolder(mock=tests.MOCK_ALWAYS_REAL).file('test.txt') src_file.write('Test 123\n') queue.queue_thumbnail_request(src_file, 64) # put an error in the queue dir = LocalFolder(tests.ZIM_DATADIR).folder('pixmaps') pixmaps = set() for basename in dir.list_names(): if not basename.endswith('.svg'): file = dir.file(basename) pixmaps.add(file.path) queue.queue_thumbnail_request(file, 64) self.assertFalse(queue.queue_empty()) with tests.LoggingFilter('zim.plugins.attachmentbrowser', 'Exception'): queue.start() seen = set() i = len(pixmaps) while i > 0: i -= 1 file, size, thumbfile, pixbuf, mtime = queue.get_ready_thumbnail(block=True) seen.add(file.path) self.assertEqual(size, 64) self.assertTrue(thumbfile.exists()) self.assertIsInstance(pixbuf, GdkPixbuf.Pixbuf) self.assertEqual(mtime, file.mtime()) self.assertEqual(seen, pixmaps) # Test clear self.assertTrue(queue.queue_empty()) for path in pixmaps: file = LocalFile(path) queue.queue_thumbnail_request(file, 64) self.assertFalse(queue.queue_empty()) queue.start() time.sleep(0.1) queue.clear_queue() self.assertTrue(queue.queue_empty())