Add a case to keep the words' case as-is
authorGregor Dschung <redacted>
Sat, 29 Jan 2022 12:33:31 +0000 (13:33 +0100)
committerGregor Dschung <redacted>
Sat, 29 Jan 2022 12:33:31 +0000 (13:33 +0100)
tests/test_xkcdpass.py
xkcdpass/xkcd_password.py

index 55b7fc3cba9fbad6d2f0c55f2404934cbb06bb5f..f19b7cb9309b91214c49ef3d69908147eb6f96ee 100644 (file)
@@ -49,33 +49,37 @@ class XkcdPasswordTests(unittest.TestCase):
         self.assertIsNotNone(re.match('([a-z]+(_|$))+', result))
 
     def test_set_case(self):
-        words = "this is only a test".lower().split()
+        words = "this is only a GREAT Test".lower().split()
         words_before = set(words)
 
         results = {}
 
+        results["as-is"] = xkcd_password.set_case(words, method="as-is")
         results["lower"] = xkcd_password.set_case(words, method="lower")
         results["upper"] = xkcd_password.set_case(words, method="upper")
+        results["first"] = xkcd_password.set_case(words, method="first")
         results["alternating"] = xkcd_password.set_case(words, method="alternating")
         results["random"] = xkcd_password.set_case(words, method="random", testing=True)
-        results["first"] = xkcd_password.set_case(words, method="first")
 
         words_after = set(word.lower() for group in list(results.values()) for word in group)
 
         # Test that no words have been fundamentally mutated by any of the methods
         self.assertTrue(words_before == words_after)
 
+        # Test that no words have been uppered or lowered for method "as-is"
+        self.assertEqual(results["as-is"], words)
+
         # Test that the words have been uppered or lowered respectively.
         self.assertTrue(all(word.islower() for word in results["lower"]))
         self.assertTrue(all(word.isupper() for word in results["upper"]))
         self.assertTrue(all(word.istitle() for word in results["first"]))
         # Test that the words have been correctly uppered randomly.
-        expected_random_result_1_py3 = ['THIS', 'IS', 'ONLY', 'a', 'test']
-        expected_random_result_2_py3 = ['THIS', 'IS', 'a', 'test', 'ALSO']
-        expected_random_result_1_py2 = ['this', 'is', 'only', 'a', 'TEST']
-        expected_random_result_2_py2 = ['this', 'is', 'a', 'TEST', 'also']
+        expected_random_result_1_py3 = ['THIS', 'IS', 'ONLY', 'a', 'GREAT', 'test']
+        expected_random_result_2_py3 = ['THIS', 'IS', 'a', 'test', 'ALSO', 'GREAT']
+        expected_random_result_1_py2 = ['this', 'is', 'only', 'a', 'GREAT', 'TEST']
+        expected_random_result_2_py2 = ['this', 'is', 'a', 'TEST', 'also', 'GREAT']
 
-        words_extra = "this is a test also".lower().split()
+        words_extra = "this is a test also great".lower().split()
         observed_random_result_1 = results["random"]
         observed_random_result_2 = xkcd_password.set_case(
             words_extra,
index c64470d7ccc8f1c888741d7cffb204e35a995103..901e232ebf70920e3332d08a64a17cb05eae4304 100755 (executable)
@@ -231,6 +231,12 @@ def try_input(prompt, validate):
     return validate(answer)
 
 
+def as_is_case(words):
+    """
+    Keeps the words' case.
+    """
+    return words
+
 def alternating_case(words):
     """
     Set EVERY OTHER word to UPPER case.
@@ -240,7 +246,6 @@ def alternating_case(words):
             else word
             for i, word in enumerate(lower_case(words))]
 
-
 def upper_case(words):
     """
     Set ALL words to UPPER case.
@@ -283,14 +288,15 @@ def random_case(words, testing=False):
     return [make_upper(word) for word in lower_case(words)]
 
 
-CASE_METHODS = {"alternating": alternating_case,
-                "upper": upper_case,
-                "lower": lower_case,
-                "random": random_case,
-                "first": first_upper_case,
-                "capitalize":capitalize_case}
-
-
+CASE_METHODS = {
+    "as-is": as_is_case,
+    "lower": lower_case,
+    "upper": upper_case,
+    "first": first_upper_case,
+    "capitalize": capitalize_case,
+    "alternating": alternating_case,
+    "random": random_case
+}
 
 def set_case(words, method="lower", testing=False):
     """
@@ -301,8 +307,8 @@ def set_case(words, method="lower", testing=False):
     Args:
         words (list):   word list generated by `choose_words()` or
                         `find_acrostic()`.
-        method (str):   one of {"alternating", "upper", "lower",
-                        "random"}.
+        method (str):   one of {"as-is", "lower", "upper", "first",
+                        "capitalize", "alternating", "random"}.
         testing (bool): only affects method="random".
                         If True: the random seed will be set to each word
                         prior to choosing True or False before setting the
git clone https://git.99rst.org/PROJECT