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 PrintFirstMultiplesTests(unittest.TestCase):

    def test_default_case(self):
        function = main.print_first_multiples

        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, 0)
        output = fake_stdout.getvalue().strip()

        correct = "" == output
        feedback = "Doesn't print out nothing when the second parameter is zero."
        self.assertTrue(correct, feedback)

        regex = ''
        correct = re.match(regex, output)
        feedback = "Doesn't print out nothing when the second parameter is zero."
        self.assertTrue(correct, feedback)


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

        correct = "0" == output
        feedback = "Doesn't just print out zero when the second parameter is 1."
        self.assertTrue(correct, feedback)

        regex = ''
        correct = re.match(regex, output)
        feedback = "Doesn't just print out zero when the second parameter is 1."
        self.assertTrue(correct, feedback)


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

        correct = output == "0 5"
        feedback = "Doesn't just print '0 5' when the parameters are (5,2)."
        self.assertTrue(correct, feedback)

        regex = '0 5'
        correct = re.match(regex, output)
        feedback = "Doesn't just print '0 5' when the parameters are (5,2)."
        self.assertTrue(correct, feedback)


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

        numbers = output.split(" ")
        correct = len(numbers) == 6
        feedback = "Doesn't print the correct amount of numbers when the second parameter is bigger than 1."
        self.assertTrue(correct, feedback)

        regex = '0 17 34 51 68 85'
        correct = re.match(regex, output)
        feedback = "Doesn't print out the correct numbers when the second parameter is bigger than 1."
        self.assertTrue(correct, feedback)
        
        
if __name__ == "__main__":
    tests = PrintFirstMultiplesTests()
    tests.test_default_case()