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()