diff options
Diffstat (limited to 'test/test_text.py')
| -rw-r--r-- | test/test_text.py | 76 |
1 files changed, 75 insertions, 1 deletions
diff --git a/test/test_text.py b/test/test_text.py index d42507c..13029d2 100644 --- a/test/test_text.py +++ b/test/test_text.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -# Copyright 2015-2022 Mike Fährmann +# Copyright 2015-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 @@ -23,6 +23,20 @@ INVALID_ALT = ((), [], {}, None, "") class TestText(unittest.TestCase): + def test_re(self): + p1 = text.re_compile("foo") + p2 = text.re("foo") + p3 = text.re("foo") + + Pattern = text.re_module.Pattern + self.assertIsInstance(p1, Pattern) + self.assertIsInstance(p2, Pattern) + self.assertIsInstance(p3, Pattern) + + self.assertEqual(p1, p2) + self.assertIsNot(p1, p2) + self.assertIs(p2, p3) + def test_remove_html(self, f=text.remove_html): result = "Hello World." @@ -92,6 +106,17 @@ class TestText(unittest.TestCase): self.assertEqual(f(1), "1") self.assertEqual(f(2.3), "23") + def test_sanitize_whitespace(self, f=text.sanitize_whitespace): + self.assertEqual(f("Hello World"), "Hello World") + self.assertEqual(f("Hello\tWorld"), "Hello World") + self.assertEqual(f(" Hello World "), "Hello World") + self.assertEqual(f("\tHello \n\tWorld "), "Hello World") + + self.assertEqual(f(""), "") + self.assertEqual(f(" "), "") + self.assertEqual(f(" "), "") + self.assertEqual(f(" \t\n "), "") + def test_ensure_http_scheme(self, f=text.ensure_http_scheme): result = "https://example.org/filename.ext" @@ -241,6 +266,29 @@ class TestText(unittest.TestCase): self.assertEqual(f(txt , value, ">") , (None, -1)) self.assertEqual(f(txt , "<" , value), (None, -1)) + def test_rextr(self, f=text.rextr): + txt = "<a><b>" + self.assertEqual(f(txt, "<", ">"), "b") + self.assertEqual(f(txt, "X", ">"), "") + self.assertEqual(f(txt, "<", "X"), "") + + # 'pos' argument + for i in range(10, 3, -1): + self.assertEqual(f(txt, "<", ">", i), "b") + for i in range(3, 0, -1): + self.assertEqual(f(txt, "<", ">", i), "a") + + # 'default' argument + self.assertEqual(f(txt, "[", "]", -1, "none"), "none") + self.assertEqual(f(txt, "[", "]", None, "none"), "none") + self.assertEqual(f(txt, "[", "]", default="none"), "none") + + # invalid arguments + for value in INVALID: + self.assertEqual(f(value, "<" , ">") , "") + self.assertEqual(f(txt , value, ">") , "") + self.assertEqual(f(txt , "<" , value), "") + def test_extract_all(self, f=text.extract_all): txt = "[c][b][a]: xyz! [d][e" @@ -336,6 +384,8 @@ class TestText(unittest.TestCase): ) def test_parse_bytes(self, f=text.parse_bytes): + self.assertEqual(f(0), 0) + self.assertEqual(f(50), 50) self.assertEqual(f("0"), 0) self.assertEqual(f("50"), 50) self.assertEqual(f("50k"), 50 * 1024**1) @@ -343,10 +393,13 @@ class TestText(unittest.TestCase): self.assertEqual(f("50g"), 50 * 1024**3) self.assertEqual(f("50t"), 50 * 1024**4) self.assertEqual(f("50p"), 50 * 1024**5) + self.assertEqual(f(" 50p "), 50 * 1024**5) # fractions + self.assertEqual(f(123.456), 123) self.assertEqual(f("123.456"), 123) self.assertEqual(f("123.567"), 124) + self.assertEqual(f(" 123.89 "), 124) self.assertEqual(f("0.5M"), round(0.5 * 1024**2)) # invalid arguments @@ -405,8 +458,12 @@ class TestText(unittest.TestCase): # missing value self.assertEqual(f("bar"), {}) + self.assertEqual(f("bar="), {"bar": ""}) self.assertEqual(f("foo=1&bar"), {"foo": "1"}) + self.assertEqual(f("foo=1&bar="), {"foo": "1", "bar": ""}) self.assertEqual(f("foo=1&bar&baz=3"), {"foo": "1", "baz": "3"}) + self.assertEqual(f("foo=1&bar=&baz=3"), + {"foo": "1", "bar": "", "baz": "3"}) # keys with identical names self.assertEqual(f("foo=1&foo=2"), {"foo": "1"}) @@ -424,6 +481,8 @@ class TestText(unittest.TestCase): self.assertEqual(f(""), {}) self.assertEqual(f("foo=1"), {"foo": "1"}) self.assertEqual(f("foo=1&bar=2"), {"foo": "1", "bar": "2"}) + self.assertEqual(f("%C3%A4%26=%E3%81%82%E3%81%A8&%23=%3F"), + {"ä&": "あと", "#": "?"}) # missing value self.assertEqual(f("bar"), {}) @@ -441,6 +500,21 @@ class TestText(unittest.TestCase): for value in INVALID: self.assertEqual(f(value), {}) + def test_build_query(self, f=text.build_query): + # standard usage + self.assertEqual(f({}), "") + self.assertEqual(f({"foo": "1"}), "foo=1") + self.assertEqual(f({"foo": "1", "bar": "2"}), "foo=1&bar=2") + + # missing value + self.assertEqual(f({"bar": ""}), "bar=") + self.assertEqual(f({"foo": "1", "bar": ""}), "foo=1&bar=") + self.assertEqual(f({"foo": "1", "bar": "", "baz": "3"}), + "foo=1&bar=&baz=3") + + self.assertEqual(f({"ä&": "あと", "#": "?"}), + "%C3%A4%26=%E3%81%82%E3%81%A8&%23=%3F") + def test_parse_timestamp(self, f=text.parse_timestamp): null = util.datetime_utcfromtimestamp(0) value = util.datetime_utcfromtimestamp(1555816235) |
