3 # © Copyright 2021-2022, Scott Gasch
5 """string_utils unittest."""
10 import string_utils as su
11 import unittest_utils as uu
12 from ansi import bg, fg, reset
15 @uu.check_all_methods_for_perf_regressions()
16 class TestStringUtils(unittest.TestCase):
17 def test_is_none_or_empty(self):
18 self.assertTrue(su.is_none_or_empty(None))
19 self.assertTrue(su.is_none_or_empty(""))
20 self.assertTrue(su.is_none_or_empty("\n"))
21 self.assertTrue(su.is_none_or_empty(' '))
22 self.assertTrue(su.is_none_or_empty(' \n \r \t '))
23 self.assertFalse(su.is_none_or_empty("Covfefe"))
24 self.assertFalse(su.is_none_or_empty("1234"))
26 def test_is_string(self):
27 self.assertTrue(su.is_string("test"))
28 self.assertTrue(su.is_string(""))
29 self.assertFalse(su.is_string(bytes(0x1234)))
30 self.assertFalse(su.is_string(1234))
32 def test_is_empty_string(self):
33 self.assertTrue(su.is_empty_string(''))
34 self.assertTrue(su.is_empty_string(' \t\t \n \r '))
35 self.assertFalse(su.is_empty_string(' this is a test '))
36 self.assertFalse(su.is_empty_string(22))
38 def test_is_full_string(self):
39 self.assertFalse(su.is_full_string(''))
40 self.assertFalse(su.is_full_string(' \t\t \n \r '))
41 self.assertTrue(su.is_full_string(' this is a test '))
42 self.assertFalse(su.is_full_string(22))
44 def test_is_number(self):
45 self.assertTrue(su.is_number("1234"))
46 self.assertTrue(su.is_number("-1234"))
47 self.assertTrue(su.is_number("1234.55"))
48 self.assertTrue(su.is_number("-1234.55"))
49 self.assertTrue(su.is_number("+1234"))
50 self.assertTrue(su.is_number("+1234.55"))
51 self.assertTrue(su.is_number("-0.8485996602e10"))
52 self.assertTrue(su.is_number("-0.8485996602E10"))
53 self.assertFalse(su.is_number("-0.8485996602t10"))
54 self.assertFalse(su.is_number(" 1234 "))
55 self.assertFalse(su.is_number(" 1234"))
56 self.assertFalse(su.is_number("1234 "))
57 self.assertFalse(su.is_number("fifty"))
59 def test_is_integer_number(self):
60 self.assertTrue(su.is_integer_number("1234"))
61 self.assertTrue(su.is_integer_number("-1234"))
62 self.assertFalse(su.is_integer_number("1234.55"))
63 self.assertFalse(su.is_integer_number("-1234.55"))
64 self.assertTrue(su.is_integer_number("+1234"))
65 self.assertTrue(su.is_integer_number("0x1234"))
66 self.assertTrue(su.is_integer_number("0xdeadbeef"))
67 self.assertFalse(su.is_integer_number("+1234.55"))
68 self.assertTrue(su.is_octal_integer_number("+0o777"))
69 self.assertFalse(su.is_integer_number("-0.8485996602e10"))
70 self.assertFalse(su.is_integer_number("-0.8485996602E10"))
71 self.assertFalse(su.is_integer_number("-0.8485996602t10"))
72 self.assertFalse(su.is_integer_number(" 1234 "))
73 self.assertFalse(su.is_integer_number(" 1234"))
74 self.assertFalse(su.is_integer_number("1234 "))
75 self.assertFalse(su.is_integer_number("fifty"))
77 def test_is_hexidecimal_integer_number(self):
78 self.assertTrue(su.is_hexidecimal_integer_number("0x1234"))
79 self.assertTrue(su.is_hexidecimal_integer_number("0X1234"))
80 self.assertTrue(su.is_hexidecimal_integer_number("0x1234D"))
81 self.assertTrue(su.is_hexidecimal_integer_number("0xF1234"))
82 self.assertTrue(su.is_hexidecimal_integer_number("0xe1234"))
83 self.assertTrue(su.is_hexidecimal_integer_number("0x1234a"))
84 self.assertTrue(su.is_hexidecimal_integer_number("0xdeadbeef"))
85 self.assertTrue(su.is_hexidecimal_integer_number("-0xdeadbeef"))
86 self.assertTrue(su.is_hexidecimal_integer_number("+0xdeadbeef"))
87 self.assertFalse(su.is_hexidecimal_integer_number("0xH1234"))
88 self.assertFalse(su.is_hexidecimal_integer_number("0x1234H"))
89 self.assertFalse(su.is_hexidecimal_integer_number("nine"))
91 def test_is_octal_integer_number(self):
92 self.assertTrue(su.is_octal_integer_number("0o111"))
93 self.assertTrue(su.is_octal_integer_number("0O111"))
94 self.assertTrue(su.is_octal_integer_number("-0o111"))
95 self.assertTrue(su.is_octal_integer_number("+0o777"))
96 self.assertFalse(su.is_octal_integer_number("-+0o111"))
97 self.assertFalse(su.is_octal_integer_number("0o181"))
98 self.assertFalse(su.is_octal_integer_number("0o1a1"))
99 self.assertFalse(su.is_octal_integer_number("one"))
101 def test_is_binary_integer_number(self):
102 self.assertTrue(su.is_binary_integer_number("0b10100101110"))
103 self.assertTrue(su.is_binary_integer_number("+0b10100101110"))
104 self.assertTrue(su.is_binary_integer_number("-0b10100101110"))
105 self.assertTrue(su.is_binary_integer_number("0B10100101110"))
106 self.assertTrue(su.is_binary_integer_number("+0B10100101110"))
107 self.assertTrue(su.is_binary_integer_number("-0B10100101110"))
108 self.assertFalse(su.is_binary_integer_number("-0B10100101110 "))
109 self.assertFalse(su.is_binary_integer_number(" -0B10100101110"))
110 self.assertFalse(su.is_binary_integer_number("-0B10100 101110"))
111 self.assertFalse(su.is_binary_integer_number("0b10100201110"))
112 self.assertFalse(su.is_binary_integer_number("0b10100101e110"))
113 self.assertFalse(su.is_binary_integer_number("fred"))
115 def test_to_int(self):
116 self.assertEqual(su.to_int("1234"), 1234)
117 self.assertEqual(su.to_int("0x1234"), 4660)
118 self.assertEqual(su.to_int("0o777"), 511)
119 self.assertEqual(su.to_int("0b111"), 7)
121 def test_is_decimal_number(self):
122 self.assertTrue(su.is_decimal_number('4.3'))
123 self.assertTrue(su.is_decimal_number('.3'))
124 self.assertTrue(su.is_decimal_number('0.3'))
125 self.assertFalse(su.is_decimal_number('3.'))
126 self.assertTrue(su.is_decimal_number('3.0'))
127 self.assertTrue(su.is_decimal_number('3.0492949249e20'))
128 self.assertFalse(su.is_decimal_number('3'))
129 self.assertFalse(su.is_decimal_number('0x11'))
131 def test_strip_escape_sequences(self):
132 s = f' {fg("red")} this is a test {bg("white")} this is a test {reset()} '
134 su.strip_escape_sequences(s),
135 ' this is a test this is a test ',
137 s = ' this is another test '
138 self.assertEqual(su.strip_escape_sequences(s), s)
140 def test_is_url(self):
141 self.assertTrue(su.is_url("http://host.domain/uri/uri#shard?param=value+s"))
142 self.assertTrue(su.is_url("http://127.0.0.1/uri/uri#shard?param=value+s"))
144 self.assertTrue(su.is_url("ftp://127.0.0.1/uri/uri"))
146 def test_is_email(self):
149 self.assertFalse(su.is_email('@yahoo.com'))
150 self.assertFalse(su.is_email('indubidibly'))
153 def test_suffix_string_to_number(self):
154 self.assertEqual(1024, su.suffix_string_to_number('1Kb'))
155 self.assertEqual(1024 * 1024, su.suffix_string_to_number('1Mb'))
156 self.assertEqual(1024, su.suffix_string_to_number('1k'))
157 self.assertEqual(1024, su.suffix_string_to_number('1kb'))
158 self.assertEqual(None, su.suffix_string_to_number('1Jl'))
159 self.assertEqual(None, su.suffix_string_to_number('undeniable'))
161 def test_number_to_suffix_string(self):
162 self.assertEqual('1.0Kb', su.number_to_suffix_string(1024))
163 self.assertEqual('1.0Mb', su.number_to_suffix_string(1024 * 1024))
164 self.assertEqual('123', su.number_to_suffix_string(123))
166 def test_is_credit_card(self):
167 self.assertTrue(su.is_credit_card('4242424242424242'))
168 self.assertTrue(su.is_credit_card('5555555555554444'))
169 self.assertTrue(su.is_credit_card('378282246310005'))
170 self.assertTrue(su.is_credit_card('6011111111111117'))
171 self.assertTrue(su.is_credit_card('4000000360000006'))
172 self.assertFalse(su.is_credit_card('8000000360110099'))
173 self.assertFalse(su.is_credit_card(''))
175 def test_is_camel_case(self):
176 self.assertFalse(su.is_camel_case('thisisatest'))
177 self.assertTrue(su.is_camel_case('thisIsATest'))
178 self.assertFalse(su.is_camel_case('this_is_a_test'))
180 def test_is_snake_case(self):
181 self.assertFalse(su.is_snake_case('thisisatest'))
182 self.assertFalse(su.is_snake_case('thisIsATest'))
183 self.assertTrue(su.is_snake_case('this_is_a_test'))
185 def test_sprintf_context(self):
186 with su.SprintfStdout() as buf:
187 print("This is a test.")
188 print("This is another one.")
189 self.assertEqual('This is a test.\nThis is another one.\n', buf())
192 if __name__ == '__main__':
193 bootstrap.initialize(unittest.main)()