1import unittest
2from unittest.mock import patch, mock_open
3
4from bangaranga import does_the_banga_rang, TheBangaDoesNotRangError
5
6class TestBangaRang(unittest.TestCase):
7
8 def setUp(self):
9 self.filename = "any.txt"
10
11 def tearDown(self):
12 del self.filename
13
14 @patch("builtins.open", mock_open(read_data="The banga is doing some ranga!"))
15 def test_two_words_forming_bangaranga(self):
16 self.assertEqual(2, does_the_banga_rang(self.filename))
17
18 @patch("builtins.open", mock_open(read_data="bang a small ranga"))
19 def test_three_words_forming_bangaranga(self):
20 self.assertEqual(3, does_the_banga_rang(self.filename))
21
22 @patch("builtins.open", mock_open(read_data="bang a banga ranga bangaranga"))
23 def test_single_word_bangaranga_is_minimum(self):
24 self.assertEqual(1, does_the_banga_rang(self.filename))
25
26 @patch("builtins.open", mock_open(read_data="BANGA RANGA"))
27 def test_case_insensitive(self):
28 self.assertEqual(2, does_the_banga_rang(self.filename))
29
30 @patch("builtins.open", mock_open(read_data="ranga is banga"))
31 def test_wrong_order_returns_zero(self):
32 self.assertEqual(0, does_the_banga_rang(self.filename))
33
34 @patch("builtins.open", mock_open(read_data="Does the banga rang?"))
35 def test_no_matching_words_returns_zero(self):
36 self.assertEqual(0, does_the_banga_rang(self.filename))
37
38 @patch("builtins.open", mock_open(read_data=""))
39 def test_empty_file_returns_zero(self):
40 self.assertEqual(0, does_the_banga_rang(self.filename))
41
42 @patch("builtins.open", mock_open(read_data="just banga here"))
43 def test_partial_match_only_returns_zero(self):
44 self.assertEqual(0, does_the_banga_rang(self.filename))
45
46 @patch("builtins.open", mock_open(read_data="bangarangaXYZ"))
47 def test_words_must_be_whole_words(self):
48 self.assertEqual(0, does_the_banga_rang(self.filename))
49
50 @patch("builtins.open", mock_open(read_data="banga ranga bangaranga"))
51 def test_minimum_word_count_is_returned(self):
52 self.assertEqual(1, does_the_banga_rang(self.filename))
53
54 @patch("builtins.open", side_effect=OSError)
55 def test_os_error_raises_custom_exception(self, _):
56 self.assertRaises(TheBangaDoesNotRangError, does_the_banga_rang, self.filename)
57
58 @patch("builtins.open", side_effect=IOError)
59 def test_io_error_raises_custom_exception(self, _):
60 self.assertRaises(TheBangaDoesNotRangError, does_the_banga_rang, self.filename)
61
62if __name__ == "__main__":
63 unittest.main()
..........
----------------------------------------------------------------------
Ran 10 tests in 0.270s
OK
31.05.2026 18:18