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 PrintHoursHandTests(unittest.TestCase): def test_default_case(self): function = main.print_hours_hand 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(17) output = fake_stdout.getvalue().strip() regex = "17.*" test = re.match(regex, output) feedback = "Doesn't print the parameter at the beginning of the output." self.assertTrue(test, feedback) regex = ".* minutes after noon, the little hand is pointing to.*hours" test = re.match(regex, output) feedback = "Doesn't include the correct words in the correct order." self.assertTrue(test, feedback) correct = output.endswith(".") feedback = "The output doesn't end with a period." self.assertTrue(correct, feedback) correct = "17 minutes after noon, the little hand is pointing to 0 hours." test = output == correct feedback = "Doesn't print out the correct sentence when given 17 minutes. Is your spacing okay?" self.assertTrue(test, feedback) with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout: function(213) output = fake_stdout.getvalue().strip() correct = "213 minutes after noon, the little hand is pointing to 3 hours." test = output == correct feedback = "Doesn't print out the correct sentence when given 213 minutes." self.assertTrue(test, feedback) with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout: function(1205) output = fake_stdout.getvalue().strip() correct = "1205 minutes after noon, the little hand is pointing to 8 hours." test = output == correct feedback = "Doesn't print out the correct sentence when given 1205 minutes." self.assertTrue(test, feedback) if __name__ == "__main__": tests = PrintHoursHandTests() tests.test_default_case()