1import unittest
2
3import solution
4
5
6class TestSanity(unittest.TestCase):
7 """Check if all data is present."""
8
9 def test_lyutenitsa_data(self):
10 names = [
11 "BridgeKeeper",
12 ]
13 unimported = [name for name in names if name not in dir(solution)]
14 self.assertEqual(
15 unimported, [], "\n\nЕлементите по-горе липсват (проверете си имената)!"
16 )
17
18
19if __name__ == "__main__":
20 unittest.main()
1import unittest
2
3from solution import BridgeKeeper
4
5
6class TestBridgeKeeper(unittest.TestCase):
7 def test_allows_valid_function(self):
8 with BridgeKeeper("bridgekeeper_cases") as filtered:
9 self.assertEqual(filtered.multiply_text(3, "na"), "nanana")
10
11 def test_allows_zero_arg_callable_when_parameters_block_is_missing(self):
12 with BridgeKeeper("bridgekeeper_cases") as filtered:
13 self.assertEqual(filtered.silent_oracle(), 42)
14
15 def test_allows_union_typed_parameter(self):
16 with BridgeKeeper("bridgekeeper_cases") as filtered:
17 self.assertEqual(filtered.sum_group([1, 2, 3]), 6)
18 self.assertEqual(filtered.sum_group((4, 5)), 9)
19
20 def test_rejects_object_with_lowercase_name(self):
21 with BridgeKeeper("bridgekeeper_cases") as filtered:
22 with self.assertRaises(AttributeError):
23 filtered.shadow_name
24
25 def test_rejects_non_callable_object(self):
26 with BridgeKeeper("bridgekeeper_cases") as filtered:
27 with self.assertRaises(AttributeError):
28 filtered.artifact
29
30 def test_rejects_callable_without_valid_third_answer(self):
31 with BridgeKeeper("bridgekeeper_cases") as filtered:
32 with self.assertRaises(AttributeError):
33 filtered.almost_there
34
35 def test_ignores_parameter_like_lines_outside_parameters_block(self):
36 with BridgeKeeper("bridgekeeper_cases") as filtered:
37 self.assertEqual(filtered.tricky_doc(2, "xo"), "xoxo")
38
39 def test_rejects_docstring_with_parameter_order_mismatch(self):
40 with BridgeKeeper("bridgekeeper_cases") as filtered:
41 with self.assertRaises(AttributeError):
42 filtered.wrong_order
43
44 def test_rejects_docstring_with_arity_mismatch(self):
45 with BridgeKeeper("bridgekeeper_cases") as filtered:
46 with self.assertRaises(AttributeError):
47 filtered.wrong_arity
48
49 def test_allows_zero_arg_callable_with_missing_docstring(self):
50 with BridgeKeeper("bridgekeeper_cases") as filtered:
51 self.assertEqual(filtered.ghost_zero(), "boo")
52
53 def test_allows_attribute_whose_last_letter_is_uppercase_but_name_continues(self):
54 with BridgeKeeper("bridgekeeper_cases") as filtered:
55 self.assertEqual(filtered.trailing_marker(7), 70)
56
57 def test_rejects_callable_when_parameter_names_do_not_match(self):
58 with BridgeKeeper("bridgekeeper_cases") as filtered:
59 with self.assertRaises(AttributeError):
60 filtered.renamed_params
61
62 def test_allows_third_answer_name_with_trailing_double_underscores_if_not_dunder(self):
63 with BridgeKeeper("bridgekeeper_cases") as filtered:
64 self.assertEqual(filtered.trailing_underscores(4), 5)
65
66 def test_allows_dict_typed_parameter(self):
67 with BridgeKeeper("bridgekeeper_cases") as filtered:
68 self.assertEqual(filtered.score_map({"alice": 3, "bob": 7}), 10)
69
70 def test_rejects_union_when_callable_does_not_support_all_union_branches(self):
71 with BridgeKeeper("bridgekeeper_cases") as filtered:
72 with self.assertRaises(AttributeError):
73 filtered.union_requires_both
74
75 def test_allows_set_typed_parameter(self):
76 with BridgeKeeper("bridgekeeper_cases") as filtered:
77 self.assertEqual(filtered.gather_tags({"bridge", "keeper"}), "bridge,keeper")
78
79 def test_rejects_missing_parameters_block_when_callable_requires_arguments(self):
80 with BridgeKeeper("bridgekeeper_cases") as filtered:
81 with self.assertRaises(AttributeError):
82 filtered.no_params_but_requires_one
83
84 def test_allows_callable_instance(self):
85 with BridgeKeeper("bridgekeeper_cases") as filtered:
86 self.assertEqual(filtered.callable_box([1, 2, 3]), 6)
87
88 def test_rejects_dict_when_callable_does_not_work_with_documented_key_and_value_types(self):
89 with BridgeKeeper("bridgekeeper_cases") as filtered:
90 with self.assertRaises(AttributeError):
91 filtered.wrong_dict_shape
92
93 def test_allows_multi_argument_union_bonus_case(self):
94 with BridgeKeeper("bridgekeeper_cases") as filtered:
95 self.assertEqual(filtered.triple_union_pair(3, [1, 2]), 6)
96 self.assertEqual(filtered.triple_union_pair(3, (1, 2)), 6)
97 self.assertEqual(filtered.triple_union_pair("abc", [1, 2]), 6)
98 self.assertEqual(filtered.triple_union_pair("abc", (1, 2)), 6)
99
100 def test_rejects_list_when_callable_does_not_work_with_documented_element_type(self):
101 with BridgeKeeper("bridgekeeper_cases") as filtered:
102 with self.assertRaises(AttributeError):
103 filtered.list_inner_type_mismatch
104
105 def test_rejects_tuple_when_callable_does_not_work_with_documented_element_type(self):
106 with BridgeKeeper("bridgekeeper_cases") as filtered:
107 with self.assertRaises(AttributeError):
108 filtered.tuple_inner_type_mismatch
109
110 def test_rejects_set_when_callable_does_not_work_with_documented_element_type(self):
111 with BridgeKeeper("bridgekeeper_cases") as filtered:
112 with self.assertRaises(AttributeError):
113 filtered.set_inner_type_mismatch
114
115 def test_allows_third_answer_with_single_uppercase_letter_name(self):
116 with BridgeKeeper("bridgekeeper_cases") as filtered:
117 self.assertEqual(filtered.single_letter_answer(5), 15)
118
119 def test_rejects_third_answer_with_four_consecutive_uppercase_vowels(self):
120 with BridgeKeeper("bridgekeeper_cases") as filtered:
121 with self.assertRaises(AttributeError):
122 filtered.uppercase_vowels_answer
123
124
125if __name__ == "__main__":
126 unittest.main()
Милица Лазарова
29.04.2026 04:52Какво правим ако модулът не съществува? ModuleNotFoundError, AttributeError?
| |
Милан Георгиев
22.04.2026 22:58,,Последната буква задължително е главна" - А ако няма никакви букви отговаря ли на правилата?
Нишка |
Нишка
29.04.2026 10:20