import unittest import io import re from unittest import mock import math import student_X as main #Replace student_X with your filename import sys import io from io import StringIO class PartialCountdownTests(unittest.TestCase): def test_default_case(self): function = main.partial_countdown try: docstring = function.__doc__ docstring = docstring.strip() except: docstring = "" correct = docstring != "" message = "docstring is blank." self.assertTrue(correct, message) with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout: function(5, 7) output = fake_stdout.getvalue().strip() correct = "Blastoff!" in output feedback = "'Blastoff!' is missing or misspelled in your output." self.assertTrue(correct, feedback) lines = output.split("\n") correct = len(lines) == 6 feedback = "Doesn't print the correct number of lines when the parameters are (5,7)." self.assertTrue(correct, feedback) regex = '5\\n4\\n3\\n2\\n1\\nBlastoff!?' correct = re.match(regex, output) feedback = "Doesn't print out the correct string when the parameters are (5,7)." self.assertTrue(correct, feedback) with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout: main.partial_countdown(21, 7) output = fake_stdout.getvalue().strip() regex = '21\\n14\\n10\\n9\\n8\\n7\\n6\\n5\\n4\\n3\\n2\\n1\\nBlastoff!?' correct = re.match(regex, output) feedback = "Doesn't print out the correct string when the parameters are (21,7)." self.assertTrue(correct, feedback) if __name__ == "__main__": tests = PartialCountdownTests() tests.test_default_case()