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 <noreply@anthropic.com>
This commit is contained in:
2026-04-18 14:43:32 +02:00
parent 43e3324f4a
commit 2686d845fe
2 changed files with 18 additions and 12 deletions

View File

@@ -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 ---

View File

@@ -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()