import unittest from pathlib import Path from numpy import ndarray from src.ddrescue_tui.ddrescue_tui_parser import parse_mapfile # ######### # # UNIT TEST # # ######### # # noinspection PyTypeChecker class TestParseMapfile(unittest.TestCase): MAP_A = Path("./mapfiles/2024-02-08_virt.map") X_A, Y_A = 90, 30 MAP_B = Path("./mapfiles/2024-02-10_virt.map") X_B, Y_B = 45, 30 MAP_C = Path("./mapfiles/running.map") X_C, Y_C = 92, 42 MAP_INEXISTANT = Path("./mapfiles/inexistant.map") MAP_INVALID = Path("./LICENSE") def test_inexistant_mapfile(self): """This file does not exist""" self.assertEqual(parse_mapfile(self.MAP_INEXISTANT, 90, 30)[0], None) def test_invalid_argument(self): """Handle bad arguments""" self.assertEqual(parse_mapfile("./mapfiles/2024-02-08_virt.map", 90, 30)[0], None) self.assertEqual(parse_mapfile(self.MAP_A, True, False)[0], None) self.assertEqual(parse_mapfile(None, None, None)[0], None) def test_invalid_mapfile(self): """This file is not a mapfile""" self.assertEqual(parse_mapfile(self.MAP_INVALID, 90, 30)[0], None) def test_invalid_arraysize(self): """Arrays cannot be smaller than 2x2 or numpy throws an error""" self.assertEqual(parse_mapfile(self.MAP_A, 1, 1)[0], None) def test_mapfile_A(self): arr, general = parse_mapfile(self.MAP_A, self.X_A, self.Y_A) self.assertIsInstance(general, dict) self.assertEqual(general["command"], 'ddrescue /dev/sdb 2024-02-08_virt.img 2024-02-08_virt.map') self.assertEqual(general["version"], "GNU ddrescue version 1.27") self.assertEqual(general["cur_pass"], 1) self.assertEqual(general["direction"], 'forwards') self.assertIsInstance(arr, ndarray) self.assertEqual(arr.max(), 5) self.assertEqual(arr.size, self.X_A*self.Y_A) self.assertEqual(arr.shape, (self.Y_A, self.X_A)) def test_mapfile_B(self): arr, general = parse_mapfile(self.MAP_B, self.X_B, self.Y_B) self.assertIsInstance(general, dict) self.assertIn("2024-02-10_virt.img 2024-02-10_virt.map", general["command"]) self.assertIsInstance(arr, ndarray) self.assertEqual(arr.max(), 6) self.assertEqual(arr.size, self.X_B*self.Y_B) self.assertEqual(arr.shape, (self.Y_B, self.X_B)) def test_mapfile_C(self): """Currently running map""" arr, general = parse_mapfile(self.MAP_C, self.X_C, self.Y_C) self.assertIsInstance(general, dict) self.assertEqual(general["direction"], "") self.assertIn("running.img running.map", general["command"]) self.assertIsInstance(arr, ndarray) self.assertEqual(arr.size, self.X_C*self.Y_C) self.assertEqual(arr.shape, (self.Y_C, self.X_C)) if __name__ == "__main__": unittest.main()