import unittest import io import re from unittest import mock import math import copy import inspect import student_X as main #Replace student_X with your filename class MountainBasicsTests(unittest.TestCase): def test_default_case(self): #test the docstrings incorrect = "" try: doc = main.Mountain.__doc__ doc = doc.strip() except: doc = "" test = incorrect != doc message = "No docstring for Mountain." self.assertTrue(test, message) try: doc = main.Mountain.__init__.__doc__ doc = doc.strip() except: doc = "" test = incorrect != doc message = "No docstring for Mountain.__init__" self.assertTrue(test, message) try: doc = main.Mountain.__str__.__doc__ doc = doc.strip() except: doc = "" test = incorrect != doc message = "No docstring for Mountain.__str__" self.assertTrue(test, message) function = main.Mountain.__str__ mw_latitude = main.GeographicCoordinate('N', 44, 16, 13.8) mw_longitude = main.GeographicCoordinate('W', 71, 18, 11.7) mw_location = main.Location(mw_latitude, mw_longitude) washington = main.Mountain('Mount Washington', 1916.6, mw_location) inputs = (washington) tested_inputs = inputs #change this if you need to test specific inputs #expected answers correct_inputs = inputs correct_result = "Mount Washington (1916.6m tall @(44\N{DEGREE SIGN}16'13.8\"N, 71\N{DEGREE SIGN}18'11.7\"W))" correct_printed = "" #run the test with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout: if isinstance(inputs, tuple): result = function(*inputs) else: result = function(inputs) printed_output = fake_stdout.getvalue().strip() test = "m tall" in result message = "Doesn't include the 'm tall' correctly in the output." self.assertTrue(test, message) test = "@(44" in result message = "Doesn't put the @ in the output correctly." self.assertTrue(test, message) test = correct_printed == printed_output message = "Shouldn't print anything out." self.assertTrue(test, message) test = result == correct_result message = "Doesn't work on Mount Washington." self.assertTrue(test, message) test = tested_inputs == correct_inputs message = "Modifies the inputs." self.assertTrue(test, message) function = main.Mountain.__str__ bh_latitude = main.GeographicCoordinate('N', 30, 59, 19) bh_longitude = main.GeographicCoordinate('W', 86, 16, 55) #print("bh_latitude:", bh_latitude) bh_location = main.Location(bh_latitude, bh_longitude) britton = main.Mountain('Britton Hill', 105, bh_location) inputs = (britton) tested_inputs = inputs #change this if you need to test specific inputs #expected answers correct_inputs = inputs correct_result = "Britton Hill (105m tall @(30\N{DEGREE SIGN}59'19\"N, 86\N{DEGREE SIGN}16'55\"W))" correct_printed = "" #run the test with mock.patch('sys.stdout', new=io.StringIO()) as fake_stdout: if isinstance(inputs, tuple): result = function(*inputs) else: result = function(inputs) printed_output = fake_stdout.getvalue().strip() test = correct_printed == printed_output message = "Shouldn't print anything out." self.assertTrue(test, message) test = result == correct_result message = "Doesn't work on the highest point in Florida." self.assertTrue(test, message) test = tested_inputs == correct_inputs message = "Modifies the inputs." self.assertTrue(test, message) if __name__ == "__main__": tests = MountainBasicsTests() tests.test_default_case()