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 PrintAnimalSoundsTests(unittest.TestCase):
    
    def test_default_case(self):
        function = main.print_animal_sounds
        try:
            doc = function.__doc__
        except:
            doc = ""
        correct = doc.strip() != ""
        message = "docstring is blank."
        self.assertTrue(correct, message)

        with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout:
            function()
        output = fake_stdout.getvalue().strip()
        
        regex = "[nN]eigh[nN]eigh[nN]eigh[qQmMbB].*"
        feedback = "Incorrect number of neighs.  (Or they're in the wrong place.)"
        self.assertRegex(output, regex, feedback)
        
        regex = ".*h[qQ]uack[qQ]uack[qQ]uack[qQ]uack[mMbB].*"
        feedback = "Incorrect number of quacks.  (Or they're in the wrong place.)"
        self.assertRegex(output, regex, feedback)
        
        regex = ".*k[mM]oo[mM]oo[bB].*"
        feedback = "Incorrect number of moos.  (Or they're in the wrong place.)"
        self.assertRegex(output, regex, feedback)
        
        regex = ".*o[bB]leat"
        feedback = "Incorrect number of bleats.  (Or they're in the wrong place.)"
        self.assertRegex(output, regex, feedback)

        regex = "[nN]eigh[nN]eigh[nN]eigh[qQ]uack[qQ]uack[qQ]uack[qQ]uack[mM]oo[mM]oo[bB]leat"
        feedback = "Doesn't print the correct string."
        self.assertRegex(output, regex, feedback)
        
        
if __name__ == "__main__":
    tests = PrintAnimalSoundsTests()
    tests.test_default_case()