From 2686d845fe3cd0bc2c24cecea614228d11e02ce6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois?= Date: Sat, 18 Apr 2026 14:43:32 +0200 Subject: [PATCH] Replace _test_started/_test_paused booleans with TestState enum Introduce TestState(IDLE/RUNNING/PAUSED) in TestRunner, eliminating two boolean flags on MainWindow that encoded the same three-state logic. Co-Authored-By: Claude Sonnet 4.6 --- src/testium/main_win/test_runner.py | 24 ++++++++++++++++-------- src/testium/main_win/testium_win.py | 6 ++---- 2 files changed, 18 insertions(+), 12 deletions(-) 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()