1import os
2from os import path
3import unittest
4import tempfile
5
6from bangaranga import does_the_banga_rang, TheBangaDoesNotRangError
7
8
9def write_temp(content):
10 """Helper: writes content to a temp file and returns its path."""
11 f = tempfile.NamedTemporaryFile(mode="w", suffix=".txt", delete=False)
12 f.write(content)
13 f.close()
14 return f.name
15
16
17class TestDoesTheBangaRang(unittest.TestCase):
18
19 def setUp(self):
20 self.temp = tempfile.NamedTemporaryFile(
21 mode="w", suffix=".txt", delete=False
22 )
23 self.temp.close()
24
25 def tearDown(self):
26 os.unlink(self.temp.name)
27
28 def write(self, content):
29 with open(self.temp.name, "w") as f:
30 f.write(content)
31
32 def test_two_words_form_bangaranga(self):
33 self.write("The banga is doing some ranga!")
34 self.assertEqual(does_the_banga_rang(self.temp.name), 2)
35
36 def test_three_words_form_bangaranga(self):
37 self.write("bang a small ranga")
38 self.assertEqual(does_the_banga_rang(self.temp.name), 3)
39
40 def test_one_word_is_bangaranga(self):
41 self.write("bangaranga")
42 self.assertEqual(does_the_banga_rang(self.temp.name), 1)
43
44 def test_multiple_solutions_returns_minimum(self):
45 self.write("bang a banga ranga bangaranga")
46 self.assertEqual(does_the_banga_rang(self.temp.name), 1)
47
48 def test_case_insensitive(self):
49 self.write("BANGA RANGA")
50 self.assertEqual(does_the_banga_rang(self.temp.name), 2)
51
52 def test_wrong_order_returns_zero(self):
53 self.write("ranga is banga")
54 self.assertEqual(does_the_banga_rang(self.temp.name), 0)
55
56 def test_partial_match_not_valid(self):
57 self.write("Does the banga rang?")
58 self.assertEqual(does_the_banga_rang(self.temp.name), 0)
59
60 def test_empty_file_returns_zero(self):
61 self.write("")
62 self.assertEqual(does_the_banga_rang(self.temp.name), 0)
63
64 def test_no_latin_letters_returns_zero(self):
65 self.write("123 !!! ???")
66 self.assertEqual(does_the_banga_rang(self.temp.name), 0)
67
68 def test_words_not_matching_bangaranga_prefix_returns_zero(self):
69 self.write("hello world foo bar")
70 self.assertEqual(does_the_banga_rang(self.temp.name), 0)
71
72 def test_nonexistent_file_raises_custom_error(self):
73 with self.assertRaises(TheBangaDoesNotRangError):
74 does_the_banga_rang("/nonexistent/path/to/file.txt")
75
76 def test_raises_custom_error_not_os_error(self):
77 with self.assertRaises(TheBangaDoesNotRangError):
78 does_the_banga_rang("/no/such/file.txt")
79 try:
80 does_the_banga_rang("/no/such/file.txt")
81 except OSError as e:
82 self.fail(f"Raw OSError was raised instead of TheBangaDoesNotRangError: {e}")
83 except TheBangaDoesNotRangError:
84 pass
85
86
87if __name__ == "__main__":
88 unittest.main()
Timed out.
31.05.2026 18:12
31.05.2026 18:14