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,
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.
else word
for i, word in enumerate(lower_case(words))]
-
def upper_case(words):
"""
Set ALL words to UPPER case.
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):
"""
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