Since this thing is on the innerwebs I suppose it should have a
[python_utils.git] / tests / string_utils_test.py
index 157de0a8df9044b614e47a2b943aa79803b948c5..c111b64f9bbb934a1fcb4ae2b8133a085ad62edd 100755 (executable)
@@ -1,11 +1,18 @@
 #!/usr/bin/env python3
 
+# © Copyright 2021-2022, Scott Gasch
+
+"""string_utils unittest."""
+
 import unittest
 
-from ansi import fg, bg, reset
+import bootstrap
 import string_utils as su
+import unittest_utils as uu
+from ansi import bg, fg, reset
 
 
[email protected]_all_methods_for_perf_regressions()
 class TestStringUtils(unittest.TestCase):
     def test_is_none_or_empty(self):
         self.assertTrue(su.is_none_or_empty(None))
@@ -125,7 +132,7 @@ class TestStringUtils(unittest.TestCase):
         s = f' {fg("red")}  this is a test  {bg("white")}  this is a test  {reset()}  '
         self.assertEqual(
             su.strip_escape_sequences(s),
-            '   this is a test    this is a test    '
+            '   this is a test    this is a test    ',
         )
         s = ' this is another test '
         self.assertEqual(su.strip_escape_sequences(s), s)
@@ -136,5 +143,51 @@ class TestStringUtils(unittest.TestCase):
         self.assertTrue(su.is_url("http://user:[email protected]:81/uri/uri#shard?param=value+s"))
         self.assertTrue(su.is_url("ftp://127.0.0.1/uri/uri"))
 
+    def test_is_email(self):
+        self.assertTrue(su.is_email('[email protected]'))
+        self.assertTrue(su.is_email('[email protected]'))
+        self.assertFalse(su.is_email('@yahoo.com'))
+        self.assertFalse(su.is_email('indubidibly'))
+        self.assertFalse(su.is_email('[email protected]'))
+
+    def test_suffix_string_to_number(self):
+        self.assertEqual(1024, su.suffix_string_to_number('1Kb'))
+        self.assertEqual(1024 * 1024, su.suffix_string_to_number('1Mb'))
+        self.assertEqual(1024, su.suffix_string_to_number('1k'))
+        self.assertEqual(1024, su.suffix_string_to_number('1kb'))
+        self.assertEqual(None, su.suffix_string_to_number('1Jl'))
+        self.assertEqual(None, su.suffix_string_to_number('undeniable'))
+
+    def test_number_to_suffix_string(self):
+        self.assertEqual('1.0Kb', su.number_to_suffix_string(1024))
+        self.assertEqual('1.0Mb', su.number_to_suffix_string(1024 * 1024))
+        self.assertEqual('123', su.number_to_suffix_string(123))
+
+    def test_is_credit_card(self):
+        self.assertTrue(su.is_credit_card('4242424242424242'))
+        self.assertTrue(su.is_credit_card('5555555555554444'))
+        self.assertTrue(su.is_credit_card('378282246310005'))
+        self.assertTrue(su.is_credit_card('6011111111111117'))
+        self.assertTrue(su.is_credit_card('4000000360000006'))
+        self.assertFalse(su.is_credit_card('8000000360110099'))
+        self.assertFalse(su.is_credit_card(''))
+
+    def test_is_camel_case(self):
+        self.assertFalse(su.is_camel_case('thisisatest'))
+        self.assertTrue(su.is_camel_case('thisIsATest'))
+        self.assertFalse(su.is_camel_case('this_is_a_test'))
+
+    def test_is_snake_case(self):
+        self.assertFalse(su.is_snake_case('thisisatest'))
+        self.assertFalse(su.is_snake_case('thisIsATest'))
+        self.assertTrue(su.is_snake_case('this_is_a_test'))
+
+    def test_sprintf_context(self):
+        with su.SprintfStdout() as buf:
+            print("This is a test.")
+            print("This is another one.")
+        self.assertEqual('This is a test.\nThis is another one.\n', buf())
+
+
 if __name__ == '__main__':
-    unittest.main()
+    bootstrap.initialize(unittest.main)()