diff --git a/src/testium/main_win/test_runner.py b/src/testium/main_win/test_runner.py index b42ad00..9fb9f0a 100644 --- a/src/testium/main_win/test_runner.py +++ b/src/testium/main_win/test_runner.py @@ -1,5 +1,6 @@ import os import traceback +from enum import Enum, auto from tempfile import NamedTemporaryFile from PySide6 import QtGui @@ -10,12 +11,19 @@ from interpreter.utils.icons import icon_prefix import interpreter.utils.settings as prefs +class TestState(Enum): + IDLE = auto() + RUNNING = auto() + PAUSED = auto() + + class TestRunner: """Manages the test execution lifecycle: start/pause/stop, timers, log file, UI adaptation.""" def __init__(self, win) -> None: self._win = win self.logFileHandler = None + self.state = TestState.IDLE # --- Timer helpers --- @@ -31,16 +39,17 @@ class TestRunner: def on_start_test(self): w = self._win - if w._test_started: - if not w._test_paused: + if self.state != TestState.IDLE: + if self.state == TestState.RUNNING: w.test_service.pause() self.start_pause_timer() + self.state = TestState.PAUSED else: w.test_service.cont() w.timerPause.stop() w.timerPause.state = False self.on_timer_pause() - w._test_paused = not w._test_paused + self.state = TestState.RUNNING return w.start_time = QDateTime.currentDateTime() @@ -113,8 +122,7 @@ class TestRunner: w.on_actionExit_triggered() def on_breakpoint(self): - w = self._win - w._test_paused = True + self.state = TestState.PAUSED self.start_pause_timer() # --- Timer slots --- @@ -142,7 +150,7 @@ class TestRunner: def on_timer_pause(self): w = self._win - if w._test_paused: + if self.state == TestState.PAUSED: icon = QtGui.QIcon() if w.timerPause.state: icon.addPixmap(QtGui.QPixmap(icon_prefix() + "/pause2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) @@ -187,7 +195,7 @@ class TestRunner: self.set_blink_green() w.treeTests.clearGlobalSuccess() finally: - w._test_started = True + self.state = TestState.RUNNING def restore_interface_after_test(self): w = self._win @@ -217,7 +225,7 @@ class TestRunner: else: self.set_blink_red() finally: - w._test_started = False + self.state = TestState.IDLE # --- Blink indicator --- diff --git a/src/testium/main_win/testium_win.py b/src/testium/main_win/testium_win.py index 792576c..f2af3cb 100755 --- a/src/testium/main_win/testium_win.py +++ b/src/testium/main_win/testium_win.py @@ -52,7 +52,7 @@ from interpreter.utils.test_init import ( ) from lib.tum_except import ETUMFileError, ETUMRuntimeError from main_win.test_controller_service import TestControllerService -from main_win.test_runner import TestRunner +from main_win.test_runner import TestRunner, TestState from main_win.test_file_manager import TestFileManager @@ -92,8 +92,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.ts_controller = None self.test_service = None self.threadTestStatus = None - self._test_started = False - self._test_paused = False self._signals_connected = False self.timer = QTimer() @@ -361,7 +359,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): prefs.settings.sync() def on_exiting(self): - if not self._test_started: + if self.runner.state == TestState.IDLE: self.save_settings() self.file_manager.clear_process() self.threadTestStatus.stop()