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 CountdownTests(unittest.TestCase):
    
    def test_default_case(self):
        function = main.countdown

        

        with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            function(0)
        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) == 1
        feedback = "Prints multiple lines when the parameter is zero."
        self.assertTrue(correct, feedback)

        correct = "Blastoff!" == output
        feedback = "Prints out extra stuff when the parameter is zero."
        self.assertTrue(correct, feedback)


        with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            function(10)
        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) == 11
        feedback = "Doesn't print the correct number of lines when the parameter is 10."
        self.assertTrue(correct, feedback)

        correct = "10\n9\n8\n7\n6\n5\n4\n3\n2\n1\nBlastoff!" == output
        feedback = "Doesn't print out the correct string when the parameter is 10."
        self.assertTrue(correct, feedback)


        with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            function(5)
        output = fake_stdout.getvalue().strip()

        correct = "5\n4\n3\n2\n1\nBlastoff!" == output
        feedback = "Doesn't print out the correct string when the parameter is 5."
        self.assertTrue(correct, feedback)
        
        
if __name__ == "__main__":
    tests = CountdownTests()
    tests.test_default_case()