1import unittest
2import tempfile
3import os
4
5from bangaranga import does_the_banga_rang, TheBangaDoesNotRangError
6
7
8class TestBangaRang(unittest.TestCase):
9
10 def make_file(self, text):
11 file = tempfile.NamedTemporaryFile(mode="w", delete=False, encoding="utf-8")
12 file.write(text)
13 file.close()
14 return file.name
15
16 def test_whole_word_bangaranga_returns_1(self):
17 filename = self.make_file("hello bangaranga world")
18 result = does_the_banga_rang(filename)
19 os.remove(filename)
20 self.assertEqual(result, 1)
21
22 def test_two_words_banga_ranga_returns_2(self):
23 filename = self.make_file("The banga is doing some ranga!")
24 result = does_the_banga_rang(filename)
25 os.remove(filename)
26 self.assertEqual(result, 2)
27
28 def test_three_words_bang_a_ranga_returns_3(self):
29 filename = self.make_file("bang a small ranga")
30 result = does_the_banga_rang(filename)
31 os.remove(filename)
32 self.assertEqual(result, 3)
33
34 def test_chooses_minimum_number_of_words(self):
35 filename = self.make_file("bang a banga ranga bangaranga")
36 result = does_the_banga_rang(filename)
37 os.remove(filename)
38 self.assertEqual(result, 1)
39
40 def test_words_must_be_in_correct_order(self):
41 filename = self.make_file("ranga something banga")
42 result = does_the_banga_rang(filename)
43 os.remove(filename)
44 self.assertEqual(result, 0)
45
46 def test_case_insensitive(self):
47 filename = self.make_file("BANGA something RANGA")
48 result = does_the_banga_rang(filename)
49 os.remove(filename)
50 self.assertEqual(result, 2)
51
52 def test_partial_match_is_not_enough(self):
53 filename = self.make_file("banga rang")
54 result = does_the_banga_rang(filename)
55 os.remove(filename)
56 self.assertEqual(result, 0)
57
58 def test_no_valid_solution_returns_0(self):
59 filename = self.make_file("hello bang rang banana")
60 result = does_the_banga_rang(filename)
61 os.remove(filename)
62 self.assertEqual(result, 0)
63
64 def test_no_words_returns_0(self):
65 filename = self.make_file("12345 !!! ???")
66 result = does_the_banga_rang(filename)
67 os.remove(filename)
68 self.assertEqual(result, 0)
69
70 def test_empty_file_returns_0(self):
71 filename = self.make_file("")
72 result = does_the_banga_rang(filename)
73 os.remove(filename)
74 self.assertEqual(result, 0)
75
76 def test_file_error_raises_custom_error(self):
77 with self.assertRaises(TheBangaDoesNotRangError):
78 does_the_banga_rang("file_that_does_not_exist.txt")
79
80
81if __name__ == "__main__":
82 unittest.main()
....F.....
======================================================================
FAIL: test_student_tests_catch_bad_implementation_matches_partial_words (test.StudentTestSuiteEvaluationTests.test_student_tests_catch_bad_implementation_matches_partial_words)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 98, in test
self.assertTrue(
~~~~~~~~~~~~~~~^
bad_result["failed_test_ids"],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
f"Student tests passed against incorrect implementation: {implementation_name!r}.\n{format_student_output(bad_result['output'])}",
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
AssertionError: set() is not true : Student tests passed against incorrect implementation: 'bad_implementation_matches_partial_words'.
| Output:
| ----------------------------------------------------------------------
| Ran 11 tests in 0.003s
|
| OK
----------------------------------------------------------------------
Ran 10 tests in 0.076s
FAILED (failures=1)
31.05.2026 18:18
31.05.2026 18:19