diff --git a/gallery_dl/util.py b/gallery_dl/util.py index 2ae6505d..cb99be68 100644 --- a/gallery_dl/util.py +++ b/gallery_dl/util.py @@ -87,6 +87,7 @@ def combine_dict(a, b): combine_dict(a[key], value) else: a[key] = value + return a def code_to_language(code, default=None): diff --git a/test/test_util.py b/test/test_util.py index 3283ff90..3c790992 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -9,6 +9,65 @@ import unittest import gallery_dl.util as util +import gallery_dl.exception as exception +import sys + + +class TestRange(unittest.TestCase): + + def test_parse_range(self): + self.assertEqual( + util.parse_range(""), + []) + self.assertEqual( + util.parse_range("1-2"), + [(1, 2)]) + self.assertEqual( + util.parse_range("-"), + [(1, sys.maxsize)]) + self.assertEqual( + util.parse_range("-2,4,6-8,10-"), + [(1, 2), (4, 4), (6, 8), (10, sys.maxsize)]) + self.assertEqual( + util.parse_range(" - 3 , 4- 4, 2-6"), + [(1, 3), (4, 4), (2, 6)]) + + def test_optimize_range(self): + self.assertEqual( + util.optimize_range([]), + []) + self.assertEqual( + util.optimize_range([(2, 4)]), + [(2, 4)]) + self.assertEqual( + util.optimize_range([(2, 4), (6, 8), (10, 12)]), + [(2, 4), (6, 8), (10, 12)]) + self.assertEqual( + util.optimize_range([(2, 4), (4, 6), (5, 8)]), + [(2, 8)]) + self.assertEqual( + util.optimize_range([(1, 1), (2, 2), (3, 6), (8, 9)]), + [(1, 6), (8, 9)]) + + def test_range_predicate(self): + pred = util.RangePredicate(" - 3 , 4- 4, 2-6") + for i in range(6): + self.assertTrue(pred) + with self.assertRaises(exception.StopExtraction): + bool(pred) + + pred = util.RangePredicate("1, 3, 5") + self.assertTrue(pred) + self.assertFalse(pred) + self.assertTrue(pred) + self.assertFalse(pred) + self.assertTrue(pred) + with self.assertRaises(exception.StopExtraction): + bool(pred) + + pred = util.RangePredicate("") + with self.assertRaises(exception.StopExtraction): + bool(pred) class TestISO639_1(unittest.TestCase): @@ -48,5 +107,32 @@ class TestISO639_1(unittest.TestCase): self.assertEqual(func(*args), result) +class TestOther(unittest.TestCase): + + def test_bdecode(self): + self.assertEqual(util.bdecode(""), 0) + self.assertEqual(util.bdecode("123"), 123) + self.assertEqual(util.bdecode("1111011", "01"), 123) + self.assertEqual(util.bdecode("AAAABAA", "BA"), 123) + + def test_combine_dict(self): + self.assertEqual( + util.combine_dict({}, {}), + {}) + self.assertEqual( + util.combine_dict({1: 1, 2: 2}, {2: 4, 4: 8}), + {1: 1, 2: 4, 4: 8}) + self.assertEqual( + util.combine_dict( + {1: {11: 22, 12: 24}, 2: {13: 26, 14: 28}}, + {1: {11: 33, 13: 39}, 2: "str"}), + {1: {11: 33, 12: 24, 13: 39}, 2: "str"}) + self.assertEqual( + util.combine_dict( + {1: {2: {3: {4: {"1": "a", "2": "b"}}}}}, + {1: {2: {3: {4: {"1": "A", "3": "C"}}}}}), + {1: {2: {3: {4: {"1": "A", "2": "b", "3": "C"}}}}}) + + if __name__ == '__main__': unittest.main()