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