1import os
2import tempfile
3import unittest
4
5from bangaranga import does_the_banga_rang, TheBangaDoesNotRangError
6
7
8class DoesTheBangaRangTests(unittest.TestCase):
9 def create_temp_file(self, content):
10 temp = tempfile.NamedTemporaryFile(mode="w", delete=False)
11 self.addCleanup(lambda: os.remove(temp.name) if os.path.exists(temp.name) else None)
12
13 temp.write(content)
14 temp.close()
15
16 return temp.name
17
18 def test_returns_minimum_number_of_words(self):
19 filename = self.create_temp_file(
20 "bang a banga ranga bangaranga"
21 )
22
23 self.assertEqual(1, does_the_banga_rang(filename))
24
25 def test_finds_bangaranga_from_two_words(self):
26 filename = self.create_temp_file(
27 "The banga is doing some ranga!"
28 )
29
30 self.assertEqual(2, does_the_banga_rang(filename))
31
32 def test_finds_bangaranga_from_multiple_words(self):
33 filename = self.create_temp_file(
34 "bang a small ranga"
35 )
36
37 self.assertEqual(3, does_the_banga_rang(filename))
38
39 def test_returns_zero_when_words_are_in_wrong_order(self):
40 filename = self.create_temp_file(
41 "ranga before banga"
42 )
43
44 self.assertEqual(0, does_the_banga_rang(filename))
45
46 def test_returns_zero_when_bangaranga_cannot_be_formed(self):
47 filename = self.create_temp_file(
48 "Does the banga rang?"
49 )
50
51 self.assertEqual(0, does_the_banga_rang(filename))
52
53 def test_search_is_case_insensitive(self):
54 filename = self.create_temp_file(
55 "BaNgA RANGA"
56 )
57
58 self.assertEqual(2, does_the_banga_rang(filename))
59
60 def test_uses_only_whole_words(self):
61 filename = self.create_temp_file(
62 "xxbangayy rangazz"
63 )
64
65 self.assertEqual(0, does_the_banga_rang(filename))
66
67 def test_words_can_be_separated_by_non_word_content(self):
68 filename = self.create_temp_file(
69 "bang...a!!!ranga"
70 )
71
72 self.assertEqual(3, does_the_banga_rang(filename))
73
74 def test_raises_custom_error_when_file_cannot_be_read(self):
75 with self.assertRaises(TheBangaDoesNotRangError):
76 does_the_banga_rang("missing_file.txt")
77
78if __name__ == "__main__":
79 unittest.main()
..........
----------------------------------------------------------------------
Ran 10 tests in 0.059s
OK
31.05.2026 18:05
31.05.2026 18:05
31.05.2026 18:05