From cc3ec2dab8cec99434b65fa656b5148ce567b833 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 9 Sep 2022 12:09:40 +0200 Subject: [PATCH] Squish: Separate state handling Different runner modes get different handlings, so reflect this in code and have easier maintenance. Change-Id: Ia879a0e2db1d99dd50e43dfbe439dc6d679d7da6 Reviewed-by: David Schulz --- src/plugins/squish/squishtools.cpp | 76 +++++++++++++++++++++++------- src/plugins/squish/squishtools.h | 2 + 2 files changed, 60 insertions(+), 18 deletions(-) diff --git a/src/plugins/squish/squishtools.cpp b/src/plugins/squish/squishtools.cpp index 0f299595da0..05da0d6d137 100644 --- a/src/plugins/squish/squishtools.cpp +++ b/src/plugins/squish/squishtools.cpp @@ -259,25 +259,20 @@ void SquishTools::setState(SquishTools::State state) { // TODO check whether state transition is legal m_state = state; + + if (m_request == RunnerQueryRequested || m_request == KillOldBeforeQueryRunner) { + handleSetStateQueryRunner(); + return; + } + switch (m_state) { case Idle: - m_request = None; - m_suitePath = QString(); - m_testCases.clear(); - m_currentTestCasePath.clear(); - m_reportFiles.clear(); - m_additionalRunnerArguments.clear(); - m_additionalServerArguments.clear(); - m_perspective.setPerspectiveMode(SquishPerspective::NoMode); - m_currentResultsDirectory.clear(); - m_lastTopLevelWindows.clear(); + setIdle(); break; case ServerStarted: if (m_request == RunTestRequested) { startSquishRunner(); } else if (m_request == RecordTestRequested) { - } else if (m_request == RunnerQueryRequested) { - executeRunnerQuery(); } else if (m_request == ServerConfigChangeRequested) { // nothing to do here } else { QTC_ASSERT(false, qDebug() << m_state << m_request); @@ -321,8 +316,6 @@ void SquishTools::setState(SquishTools::State state) startSquishServer(RunTestRequested); } else if (m_request == KillOldBeforeRecordRunner) { startSquishServer(RecordTestRequested); - } else if (m_request == KillOldBeforeQueryRunner) { - startSquishServer(RunnerQueryRequested); } else { QTC_ASSERT(false, qDebug() << m_state << m_request); } @@ -336,10 +329,7 @@ void SquishTools::setState(SquishTools::State state) break; case RunnerStartFailed: case RunnerStopped: - if (m_request == RunnerQueryRequested) { - m_request = ServerStopRequested; - stopSquishServer(); - } else if (m_testCases.isEmpty() || (m_squishRunnerState == RunnerState::Canceled)) { + if (m_testCases.isEmpty() || (m_squishRunnerState == RunnerState::Canceled)) { m_request = ServerStopRequested; stopSquishServer(); QString error; @@ -361,6 +351,56 @@ void SquishTools::setState(SquishTools::State state) } } +void SquishTools::handleSetStateQueryRunner() +{ + switch (m_state) { + case Idle: + setIdle(); + break; + case ServerStarted: + executeRunnerQuery(); + break; + case ServerStartFailed: + m_state = Idle; + m_request = None; + break; + case ServerStopped: + m_state = Idle; + emit shutdownFinished(); + if (m_request == KillOldBeforeQueryRunner) { + startSquishServer(RunnerQueryRequested); + } else { + QTC_ASSERT(false, qDebug() << m_state << m_request); + } + break; + case ServerStopFailed: + m_state = Idle; + break; + case RunnerStartFailed: + case RunnerStopped: + m_request = ServerStopRequested; + stopSquishServer(); + break; + default: + break; + } +} + +void SquishTools::setIdle() +{ + QTC_ASSERT(m_state == Idle, return); + m_request = None; + m_suitePath = QString(); + m_testCases.clear(); + m_currentTestCasePath.clear(); + m_reportFiles.clear(); + m_additionalRunnerArguments.clear(); + m_additionalServerArguments.clear(); + m_perspective.setPerspectiveMode(SquishPerspective::NoMode); + m_currentResultsDirectory.clear(); + m_lastTopLevelWindows.clear(); +} + void SquishTools::startSquishServer(Request request) { if (m_shutdownInitiated) diff --git a/src/plugins/squish/squishtools.h b/src/plugins/squish/squishtools.h index 1a64a01fc36..f0f68680b62 100644 --- a/src/plugins/squish/squishtools.h +++ b/src/plugins/squish/squishtools.h @@ -96,6 +96,8 @@ private: }; void setState(State state); + void handleSetStateQueryRunner(); + void setIdle(); void startSquishServer(Request request); void stopSquishServer(); void startSquishRunner();