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