diff options
| author | 2019-07-20 05:51:44 -0400 | |
|---|---|---|
| committer | 2019-07-20 05:51:44 -0400 | |
| commit | 2a63a9c9b7032a76894c48ac4d9cea732fcaee49 (patch) | |
| tree | 3d5f633ff69cd393036a3dabc4d4533c8484f9ad /test/test_downloader.py | |
| parent | 195c45911e79c33cf0bb986721365fb06df5a153 (diff) | |
New upstream version 1.9.0upstream/1.9.0
Diffstat (limited to 'test/test_downloader.py')
| -rw-r--r-- | test/test_downloader.py | 75 |
1 files changed, 71 insertions, 4 deletions
diff --git a/test/test_downloader.py b/test/test_downloader.py index 3f301b0..caed983 100644 --- a/test/test_downloader.py +++ b/test/test_downloader.py @@ -8,13 +8,16 @@ # published by the Free Software Foundation. import re +import sys import base64 import os.path import tempfile -import unittest import threading import http.server +import unittest +from unittest.mock import Mock, MagicMock, patch + import gallery_dl.downloader as downloader import gallery_dl.extractor as extractor import gallery_dl.config as config @@ -23,6 +26,73 @@ from gallery_dl.output import NullOutput from gallery_dl.util import PathFormat +class MockDownloaderModule(Mock): + __downloader__ = "mock" + + +class TestDownloaderModule(unittest.TestCase): + + @classmethod + def setUpClass(cls): + # allow import of ytdl downloader module without youtube_dl installed + sys.modules["youtube_dl"] = MagicMock() + + @classmethod + def tearDownClass(cls): + del sys.modules["youtube_dl"] + + def tearDown(self): + downloader._cache.clear() + + def test_find(self): + cls = downloader.find("http") + self.assertEqual(cls.__name__, "HttpDownloader") + self.assertEqual(cls.scheme , "http") + + cls = downloader.find("https") + self.assertEqual(cls.__name__, "HttpDownloader") + self.assertEqual(cls.scheme , "http") + + cls = downloader.find("text") + self.assertEqual(cls.__name__, "TextDownloader") + self.assertEqual(cls.scheme , "text") + + cls = downloader.find("ytdl") + self.assertEqual(cls.__name__, "YoutubeDLDownloader") + self.assertEqual(cls.scheme , "ytdl") + + self.assertEqual(downloader.find("ftp"), None) + self.assertEqual(downloader.find("foo"), None) + self.assertEqual(downloader.find(1234) , None) + self.assertEqual(downloader.find(None) , None) + + @patch("importlib.import_module") + def test_cache(self, import_module): + import_module.return_value = MockDownloaderModule() + downloader.find("http") + downloader.find("text") + downloader.find("ytdl") + self.assertEqual(import_module.call_count, 3) + downloader.find("http") + downloader.find("text") + downloader.find("ytdl") + self.assertEqual(import_module.call_count, 3) + + @patch("importlib.import_module") + def test_cache_http(self, import_module): + import_module.return_value = MockDownloaderModule() + downloader.find("http") + downloader.find("https") + self.assertEqual(import_module.call_count, 1) + + @patch("importlib.import_module") + def test_cache_https(self, import_module): + import_module.return_value = MockDownloaderModule() + downloader.find("https") + downloader.find("http") + self.assertEqual(import_module.call_count, 1) + + class TestDownloaderBase(unittest.TestCase): @classmethod @@ -134,9 +204,6 @@ class TestTextDownloader(TestDownloaderBase): def test_text_offset(self): self._run_test("text:foobar", "foo", "foobar", "txt", "txt") - def test_text_extension(self): - self._run_test("text:foobar", None, "foobar", None, "txt") - def test_text_empty(self): self._run_test("text:", None, "", "txt", "txt") |
