From 40be4933b8533f698312379e3f95f0dee079bc3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Sun, 26 Feb 2017 02:06:56 +0100 Subject: [PATCH] fix exception based tests --- gallery_dl/job.py | 62 ++++++++++++++++++++++++----------------- test/test_extractors.py | 17 ++++++----- 2 files changed, 45 insertions(+), 34 deletions(-) diff --git a/gallery_dl/job.py b/gallery_dl/job.py index 08cc4a12..b51fe456 100644 --- a/gallery_dl/job.py +++ b/gallery_dl/job.py @@ -32,29 +32,7 @@ class Job(): """Execute or run the job""" try: for msg in self.extractor: - if msg[0] == Message.Url and self.pred_url: - self.update_kwdict(msg[2]) - self.handle_url(msg[1], msg[2]) - - elif msg[0] == Message.Directory: - self.update_kwdict(msg[1]) - self.handle_directory(msg[1]) - - elif msg[0] == Message.Queue and self.pred_queue: - self.handle_queue(msg[1]) - - elif msg[0] == Message.Headers: - self.handle_headers(msg[1]) - - elif msg[0] == Message.Cookies: - self.handle_cookies(msg[1]) - - elif msg[0] == Message.Version: - if msg[1] != 1: - raise "unsupported message-version ({}, {})".format( - self.extractor.category, msg[1] - ) - # TODO: support for multiple message versions + self.dispatch(msg) except exception.AuthenticationError: print("Authentication failed. Please provide a valid " "username/password pair.", file=sys.stderr) @@ -68,6 +46,32 @@ class Job(): except exception.StopExtraction: pass + def dispatch(self, msg): + """Call the appropriate message handler""" + if msg[0] == Message.Url and self.pred_url: + self.update_kwdict(msg[2]) + self.handle_url(msg[1], msg[2]) + + elif msg[0] == Message.Directory: + self.update_kwdict(msg[1]) + self.handle_directory(msg[1]) + + elif msg[0] == Message.Queue and self.pred_queue: + self.handle_queue(msg[1]) + + elif msg[0] == Message.Headers: + self.handle_headers(msg[1]) + + elif msg[0] == Message.Cookies: + self.handle_cookies(msg[1]) + + elif msg[0] == Message.Version: + if msg[1] != 1: + raise "unsupported message-version ({}, {})".format( + self.extractor.category, msg[1] + ) + # TODO: support for multiple message versions + def handle_url(self, url, kexwords): """Handle Message.Url""" @@ -192,8 +196,8 @@ class UrlJob(Job): pass -class HashJob(DownloadJob): - """Generate SHA1 hashes for extractor results""" +class TestJob(DownloadJob): + """Generate test-results for extractor runs""" class HashIO(): """Minimal file-like interface""" @@ -219,12 +223,20 @@ class HashJob(DownloadJob): def __init__(self, url, content=False): DownloadJob.__init__(self, url) self.content = content + self.exception = None self.hash_url = hashlib.sha1() self.hash_keyword = hashlib.sha1() self.hash_content = hashlib.sha1() if content: self.fileobj = self.HashIO(self.hash_content) + def run(self): + try: + for msg in self.extractor: + self.dispatch(msg) + except Exception as e: + self.exception = e + def handle_url(self, url, keywords): self.update_url(url) self.update_keyword(keywords) diff --git a/test/test_extractors.py b/test/test_extractors.py index 84f4bb9f..a99bb794 100644 --- a/test/test_extractors.py +++ b/test/test_extractors.py @@ -24,18 +24,17 @@ class TestExtractors(unittest.TestCase): config.set(("extractor", "seiga", "username"), email) def _run_test(self, extr, url, result): - hjob = job.HashJob(url, "content" in result) - self.assertEqual(extr, hjob.extractor.__class__) - if "exception" in result: - self.assertRaises(result["exception"], hjob.run) - return - hjob.run() + tjob = job.TestJob(url, "content" in result) + self.assertEqual(extr, tjob.extractor.__class__) + tjob.run() if "url" in result: - self.assertEqual(hjob.hash_url.hexdigest(), result["url"]) + self.assertEqual(tjob.hash_url.hexdigest(), result["url"]) if "keyword" in result: - self.assertEqual(hjob.hash_keyword.hexdigest(), result["keyword"]) + self.assertEqual(tjob.hash_keyword.hexdigest(), result["keyword"]) if "content" in result: - self.assertEqual(hjob.hash_content.hexdigest(), result["content"]) + self.assertEqual(tjob.hash_content.hexdigest(), result["content"]) + if "exception" in result: + self.assertEqual(tjob.exception.__class__, result["exception"]) # dynamically genertate tests