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 <david.schulz@qt.io>
This commit is contained in:
Christian Stenger
2022-09-09 12:09:40 +02:00
parent 2f0a26c1f5
commit cc3ec2dab8
2 changed files with 60 additions and 18 deletions

View File

@@ -259,25 +259,20 @@ void SquishTools::setState(SquishTools::State state)
{ {
// TODO check whether state transition is legal // TODO check whether state transition is legal
m_state = state; m_state = state;
if (m_request == RunnerQueryRequested || m_request == KillOldBeforeQueryRunner) {
handleSetStateQueryRunner();
return;
}
switch (m_state) { switch (m_state) {
case Idle: case Idle:
m_request = None; setIdle();
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();
break; break;
case ServerStarted: case ServerStarted:
if (m_request == RunTestRequested) { if (m_request == RunTestRequested) {
startSquishRunner(); startSquishRunner();
} else if (m_request == RecordTestRequested) { } else if (m_request == RecordTestRequested) {
} else if (m_request == RunnerQueryRequested) {
executeRunnerQuery();
} else if (m_request == ServerConfigChangeRequested) { // nothing to do here } else if (m_request == ServerConfigChangeRequested) { // nothing to do here
} else { } else {
QTC_ASSERT(false, qDebug() << m_state << m_request); QTC_ASSERT(false, qDebug() << m_state << m_request);
@@ -321,8 +316,6 @@ void SquishTools::setState(SquishTools::State state)
startSquishServer(RunTestRequested); startSquishServer(RunTestRequested);
} else if (m_request == KillOldBeforeRecordRunner) { } else if (m_request == KillOldBeforeRecordRunner) {
startSquishServer(RecordTestRequested); startSquishServer(RecordTestRequested);
} else if (m_request == KillOldBeforeQueryRunner) {
startSquishServer(RunnerQueryRequested);
} else { } else {
QTC_ASSERT(false, qDebug() << m_state << m_request); QTC_ASSERT(false, qDebug() << m_state << m_request);
} }
@@ -336,10 +329,7 @@ void SquishTools::setState(SquishTools::State state)
break; break;
case RunnerStartFailed: case RunnerStartFailed:
case RunnerStopped: case RunnerStopped:
if (m_request == RunnerQueryRequested) { if (m_testCases.isEmpty() || (m_squishRunnerState == RunnerState::Canceled)) {
m_request = ServerStopRequested;
stopSquishServer();
} else if (m_testCases.isEmpty() || (m_squishRunnerState == RunnerState::Canceled)) {
m_request = ServerStopRequested; m_request = ServerStopRequested;
stopSquishServer(); stopSquishServer();
QString error; 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) void SquishTools::startSquishServer(Request request)
{ {
if (m_shutdownInitiated) if (m_shutdownInitiated)

View File

@@ -96,6 +96,8 @@ private:
}; };
void setState(State state); void setState(State state);
void handleSetStateQueryRunner();
void setIdle();
void startSquishServer(Request request); void startSquishServer(Request request);
void stopSquishServer(); void stopSquishServer();
void startSquishRunner(); void startSquishRunner();