aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_path.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_path.py')
-rw-r--r--test/test_path.py297
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()