diff options
Diffstat (limited to 'test/test_path.py')
| -rw-r--r-- | test/test_path.py | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/test/test_path.py b/test/test_path.py new file mode 100644 index 0000000..0639339 --- /dev/null +++ b/test/test_path.py @@ -0,0 +1,297 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Copyright 2025 Mike Fährmann +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. + +import os +import sys +import unittest + +sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +from gallery_dl import path, extractor, config # noqa E402 + +KWDICT = { + "category" : "test", + "filename" : "file", + "extension": "ext", + "name" : "test-テスト-'&>-/:~", + "ext" : "txt", + "foo" : "bar", + "id" : 123, +} + + +class TestPath(unittest.TestCase): + + def _pfmt(self, data={}, kwdict=False, extr=extractor.find("noop")): + pathfmt = path.PathFormat(extr) + + if kwdict: + pathfmt.set_directory({ + **(kwdict if isinstance(kwdict, dict) else KWDICT), + **data, + }) + + return pathfmt + + def setUp(self): + config.clear() + path.WINDOWS = False + + +class TestPathObject(TestPath): + + def test_default(self): + pfmt = self._pfmt() + + self.assertEqual(pfmt.kwdict, {}) + self.assertEqual(pfmt.delete, False) + self.assertEqual(pfmt.filename, "") + self.assertEqual(pfmt.extension, "") + self.assertEqual(pfmt.directory, "") + self.assertEqual(pfmt.realdirectory, "") + self.assertEqual(pfmt.path, "") + self.assertEqual(pfmt.realpath, "") + self.assertEqual(pfmt.temppath, "") + self.assertEqual(pfmt.basedirectory, "./gallery-dl/") + self.assertEqual(pfmt.strip, "") + + self.assertIs(pfmt.filename_conditions, None) + self.assertIs(pfmt.directory_conditions, None) + + self.assertTrue(callable(pfmt.extension_map)) + self.assertTrue(callable(pfmt.extension_map)) + self.assertTrue(callable(pfmt.extension_map)) + self.assertTrue(callable(pfmt.clean_segment)) + self.assertTrue(callable(pfmt.clean_path)) + + self.assertTrue(callable(pfmt.filename_formatter)) + for fmt in pfmt.directory_formatters: + self.assertTrue(callable(fmt)) + + def test_str(self): + pfmt = self._pfmt() + self.assertEqual(str(pfmt), pfmt.realdirectory) + self.assertEqual(str(pfmt), "") + + pfmt = self._pfmt() + pfmt.set_directory(KWDICT) + pfmt.set_filename(KWDICT) + pfmt.build_path() + self.assertEqual(str(pfmt), pfmt.realpath) + self.assertEqual(str(pfmt), "./gallery-dl/test/file.ext") + + +class TestPathOptions(TestPath): + + def test_option_filename(self): + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname , "file.ext") + + config.set((), "filename", "foo.{foo}") + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "foo.bar") + + config.set((), "filename", { + "foo == 'baz'": "foo", + "id % 2" : "bar", + "" : "baz", + }) + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "bar") + + def test_option_directory(self): + pfmt = self._pfmt(kwdict=True) + self.assertEqual(pfmt.directory , "./gallery-dl/test/") + self.assertEqual(pfmt.realdirectory, "./gallery-dl/test/") + + config.set((), "directory", ["{foo}", "bar"]) + pfmt = self._pfmt(kwdict=True) + self.assertEqual(pfmt.directory , "./gallery-dl/bar/bar/") + self.assertEqual(pfmt.realdirectory, "./gallery-dl/bar/bar/") + + config.set((), "directory", { + "foo == 'baz'": ["a", "b", "c"], + "id % 2" : ["odd", "{id}"], + "" : ["{foo}", "bar"], + }) + pfmt = self._pfmt(kwdict=True) + self.assertEqual(pfmt.directory , "./gallery-dl/odd/123/") + self.assertEqual(pfmt.realdirectory, "./gallery-dl/odd/123/") + + def test_option_basedirectory(self): + config.set((), "base-directory", "{foo}") + pfmt = self._pfmt(kwdict=True) + self.assertEqual(pfmt.realdirectory, "{foo}/test/") + + config.set((), "base-directory", { + "foo == 'baz'": "bar", + "id % 2" : "./odd", + "" : "./default", + }) + pfmt = self._pfmt(kwdict=True) + self.assertEqual(pfmt.realdirectory, "./odd/test/") + + def test_option_keywordsdefault(self): + config.set((), "directory", ["{baz}"]) + config.set((), "base-directory", "") + + pfmt = self._pfmt(kwdict=True) + self.assertEqual(pfmt.realdirectory, "None/") + + config.set((), "keywords-default", "ND") + pfmt = self._pfmt(kwdict=True) + self.assertEqual(pfmt.realdirectory, "ND/") + + config.set((), "keywords-default", "") + pfmt = self._pfmt(kwdict=True) + self.assertEqual(pfmt.realdirectory, "") + + def test_option_extensionmap_default(self): + kwdict = KWDICT.copy() + pfmt = self._pfmt() + pfmt.set_filename(kwdict) + self.assertEqual(pfmt.extension, "ext") + + pfmt.set_extension("jpg") + self.assertEqual(pfmt.extension, "jpg") + self.assertEqual(kwdict["extension"], "jpg") + + pfmt.set_extension("png") + self.assertEqual(pfmt.extension, "png") + self.assertEqual(kwdict["extension"], "png") + + pfmt.set_extension("jpeg") + self.assertEqual(pfmt.extension, "jpg") + self.assertEqual(kwdict["extension"], "jpg") + + for ext, repl in path.EXTENSION_MAP.items(): + pfmt.set_extension(ext) + self.assertEqual(pfmt.extension, repl) + self.assertEqual(kwdict["extension"], repl) + + def test_option_extensionmap_custom(self): + extmap = { + "bitmap": "bmp", + "ping" : "png", + "jiff" : "gif", + } + config.set((), "extension-map", extmap) + + kwdict = KWDICT.copy() + pfmt = self._pfmt() + pfmt.set_filename(kwdict) + + pfmt.set_extension("jpg") + self.assertEqual(pfmt.extension, "jpg") + self.assertEqual(kwdict["extension"], "jpg") + + pfmt.set_extension("ping") + self.assertEqual(pfmt.extension, "png") + self.assertEqual(kwdict["extension"], "png") + + for ext, repl in extmap.items(): + pfmt.set_extension(ext) + self.assertEqual(pfmt.extension, repl) + self.assertEqual(kwdict["extension"], repl) + + for ext, repl in path.EXTENSION_MAP.items(): + pfmt.set_extension(ext) + self.assertNotEqual(pfmt.extension, repl) + self.assertNotEqual(kwdict["extension"], repl) + + def test_option_pathrestrict(self): + config.set((), "filename", "{name}.{ext}") + + config.set((), "path-restrict", "unix") + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "test-テスト-'&>-_:~.txt", "unix") + + config.set((), "path-restrict", "windows") + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "test-テスト-'&_-__~.txt", "windows") + + config.set((), "path-restrict", "ascii") + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "test____________.txt", "ascii") + + config.set((), "path-restrict", "ascii+") + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "test-___-'&_-__~.txt", "ascii+") + + def test_option_pathrestrict_custom(self): + config.set((), "filename", "{name}.{ext}") + + config.set((), "path-restrict", "ts-") + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "_e___テスト_'&>_/:~._x_", "custom str") + + config.set((), "path-restrict", { + "t": "A", + "s": "B", + "-": "###", + "/": "|" + }) + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "AeBA###テスト###'&>###|:~.AxA", "custom dict") + + config.set((), "path-restrict", { + "a-z": "x", + "テ": "te", + "ス": "su", + "ト": "to", + }) + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "xxxx-tesuto-'&>-/:~.xxx", "custom dict range") + + def test_option_pathreplace(self): + config.set((), "filename", "{name}.{ext}") + + config.set((), "path-restrict", "unix") + config.set((), "path-replace", "&") + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "test-テスト-'&>-&:~.txt", "&") + + config.set((), "path-restrict", "windows") + config.set((), "path-replace", "***") + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "test-テスト-'&***-******~.txt", "***") + + def test_option_pathremove(self): + config.set((), "filename", "{name}.{ext}") + + config.set((), "path-remove", "-&/") + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "testテスト'>_:~.txt") + + config.set((), "path-remove", "a-z0-9") + fname = self._pfmt().build_filename(KWDICT) + self.assertEqual(fname, "-テスト-'&>-_:~.") + + def test_option_pathstrip(self): + config.set((), "directory", [" . {name}.{ext} . "]) + config.set((), "base-directory", "") + config.set((), "path-restrict", "unix") + + config.set((), "path-strip", "unix") + pfmt = self._pfmt(kwdict=True) + self.assertEqual( + pfmt.realdirectory, ". test-テスト-'&>-_:~.txt ./", "unix") + + config.set((), "path-strip", "windows") + pfmt = self._pfmt(kwdict=True) + self.assertEqual( + pfmt.realdirectory, ". test-テスト-'&>-_:~.txt/", "windows") + + config.set((), "path-strip", "txt") + pfmt = self._pfmt(kwdict=True) + self.assertEqual( + pfmt.realdirectory, ". test-テスト-'&>-_:~.txt ./", "custom") + + +if __name__ == "__main__": + unittest.main() |
