Coverage for test/unit/tasks/__init__.py: 92%
39 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 17:09 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 17:09 +0000
1import tempfile
2import unittest
3from typing import Union
4from unittest import mock
6from bim2sim.kernel.decision.decisionhandler import DebugDecisionHandler
7from bim2sim.sim_settings import BaseSimSettings
8from bim2sim.tasks.base import ITask
9from test.unit.elements.helper import SetupHelper
12class TestTask(unittest.TestCase):
13 """Base class for all task-related tests.
15 Provides common setup and teardown functionality including:
16 - Mock playground, project, and paths
17 - Temporary export directory
18 - Settings management
19 - Helper reset
21 To use this, please overwrite the abstract class methods
22 simSettingsClass(), testTask() and helper() in your own test class.
23 """
25 @classmethod
26 def setUpClass(cls) -> None:
27 """Set up infrastructure that remains constant for all test methods."""
28 if cls is TestTask:
29 raise unittest.SkipTest("Skip TestTask tests, it's a base class")
31 # Set up playground, project and paths via mocks
32 cls.playground = mock.Mock()
33 project = mock.Mock()
34 paths = mock.Mock()
35 cls.playground.project = project
36 cls.playground.sim_settings = cls.simSettingsClass()
38 cls.test_task = cls.testTask()
39 cls.test_task.paths = paths
40 cls.export_path = tempfile.TemporaryDirectory(prefix='bim2sim')
41 cls.test_task.paths.export = cls.export_path.name
43 # Setup helper
44 cls.helper = cls.helper()
46 def setUp(self) -> None:
47 """Set up infrastructure that needs to be fresh for each test."""
48 # Set up temporary export directory
49 self.test_task.prj_name = f'TestTask{self.__class__.__name__}'
51 def tearDown(self) -> None:
52 """Clean up after each test method."""
53 self.helper.reset()
54 self.playground.sim_settings.load_default_settings()
56 def run_task(self, answers, reads):
57 return DebugDecisionHandler(answers).handle(self.test_task.run(*reads))
59 @classmethod
60 def simSettingsClass(cls) -> Union[BaseSimSettings, None]:
61 return None
63 @classmethod
64 def testTask(cls) -> Union[ITask, None]:
65 return None
67 @classmethod
68 def helper(cls) -> Union[SetupHelper, None]:
69 return None