Squish: Separate server handling

Change-Id: Ibcafe31bc8fd7dfaea165b95ed8898a7bff69d21
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Stenger
2023-01-03 14:28:45 +01:00
parent bef44699a3
commit 3d7baa65f9
2 changed files with 92 additions and 66 deletions

View File

@@ -83,6 +83,11 @@ static void logRunnerStateChange(RunnerState from, RunnerState to)
qCInfo(LOG) << "Runner state change:" << runnerStateName(from) << ">" << runnerStateName(to); qCInfo(LOG) << "Runner state change:" << runnerStateName(from) << ">" << runnerStateName(to);
} }
static void logToolsStateChange(SquishTools::State from, SquishTools::State to)
{
qCInfo(LOG) << "State change:" << toolsStateName(from) << ">" << toolsStateName(to);
}
class SquishLocationMark : public TextEditor::TextMark class SquishLocationMark : public TextEditor::TextMark
{ {
public: public:
@@ -327,19 +332,28 @@ void SquishTools::onServerStateChanged(SquishProcessState state)
{ {
switch (state) { switch (state) {
case Starting: case Starting:
setState(SquishTools::ServerStarting); logToolsStateChange(m_state, SquishTools::ServerStarting);
m_state = SquishTools::ServerStarting;
break; break;
case Started: case Started:
setState(SquishTools::ServerStarted); logToolsStateChange(m_state, SquishTools::ServerStarted);
m_state = SquishTools::ServerStarted;
onServerStarted();
break; break;
case StartFailed: case StartFailed:
setState(SquishTools::ServerStartFailed); logToolsStateChange(m_state, SquishTools::ServerStartFailed);
m_state = SquishTools::ServerStartFailed;
onServerStartFailed();
break; break;
case Stopped: case Stopped:
setState(SquishTools::ServerStopped); logToolsStateChange(m_state, SquishTools::ServerStopped);
m_state = SquishTools::ServerStopped;
onServerStopped();
break; break;
case StopFailed: case StopFailed:
setState(SquishTools::ServerStopFailed); logToolsStateChange(m_state, SquishTools::ServerStopFailed);
m_state = SquishTools::ServerStopFailed;
onServerStopFailed();
break; break;
default: default:
// Idle currently unhandled / not needed? // Idle currently unhandled / not needed?
@@ -347,17 +361,8 @@ void SquishTools::onServerStateChanged(SquishProcessState state)
} }
} }
void SquishTools::setState(SquishTools::State state) void SquishTools::onServerStarted()
{ {
qCInfo(LOG) << "State change:" << toolsStateName(m_state) << ">" << toolsStateName(state);
// TODO check whether state transition is legal
m_state = state;
switch (m_state) {
case Idle:
setIdle();
break;
case ServerStarted:
if (m_request == RunnerQueryRequested) { if (m_request == RunnerQueryRequested) {
executeRunnerQuery(); executeRunnerQuery();
} else if (m_request == RunTestRequested || m_request == RecordTestRequested) { } else if (m_request == RunTestRequested || m_request == RecordTestRequested) {
@@ -366,24 +371,16 @@ void SquishTools::setState(SquishTools::State state)
} else { } else {
QTC_ASSERT(false, qDebug() << m_state << m_request); QTC_ASSERT(false, qDebug() << m_state << m_request);
} }
break; }
case ServerStartFailed:
m_state = Idle; void SquishTools::onServerStopped()
if (m_request == RunTestRequested) {
emit squishTestRunFinished();
m_perspective.setPerspectiveMode(SquishPerspective::NoMode);
m_request = None;
if (toolsSettings.minimizeIDE)
restoreQtCreatorWindows();
m_perspective.destroyControlBar();
break;
case ServerStopped:
m_state = Idle; m_state = Idle;
emit shutdownFinished(); emit shutdownFinished();
if (m_request == ServerConfigChangeRequested) { if (m_request == ServerConfigChangeRequested) {
if (m_serverProcess.result() == ProcessResult::FinishedWithError) { if (m_serverProcess.result() == ProcessResult::FinishedWithError) {
emit configChangesFailed(m_serverProcess.error()); emit configChangesFailed(m_serverProcess.error());
break; return;
} }
m_serverConfigChanges.removeFirst(); m_serverConfigChanges.removeFirst();
@@ -407,15 +404,40 @@ void SquishTools::setState(SquishTools::State state)
} else if (m_request == KillOldBeforeRecordRunner) { } else if (m_request == KillOldBeforeRecordRunner) {
startSquishServer(RecordTestRequested); startSquishServer(RecordTestRequested);
} else { } else {
QTC_ASSERT(false, qDebug() << m_state << m_request); QTC_ASSERT(false, qDebug() << m_request);
} }
break; }
case ServerStopFailed:
void SquishTools::onServerStartFailed()
{
m_state = Idle;
if (m_request == RunTestRequested)
emit squishTestRunFinished();
m_perspective.setPerspectiveMode(SquishPerspective::NoMode);
m_request = None;
if (toolsSettings.minimizeIDE)
restoreQtCreatorWindows();
m_perspective.destroyControlBar();
}
void SquishTools::onServerStopFailed()
{
m_serverProcess.closeProcess(); m_serverProcess.closeProcess();
if (toolsSettings.minimizeIDE) if (toolsSettings.minimizeIDE)
restoreQtCreatorWindows(); restoreQtCreatorWindows();
m_perspective.destroyControlBar(); m_perspective.destroyControlBar();
m_state = Idle; m_state = Idle;
}
void SquishTools::setState(SquishTools::State state)
{
qCInfo(LOG) << "State change:" << toolsStateName(m_state) << ">" << toolsStateName(state);
// TODO check whether state transition is legal
m_state = state;
switch (m_state) {
case Idle:
setIdle();
break; break;
case RunnerStartFailed: case RunnerStartFailed:
case RunnerStopped: case RunnerStopped:
@@ -1291,7 +1313,7 @@ bool SquishTools::isValidToStartRunner()
.arg(m_state) .arg(m_state)
.arg(m_request)); .arg(m_request));
// setting state to ServerStartFailed will terminate/kill the current unusable server // setting state to ServerStartFailed will terminate/kill the current unusable server
setState(ServerStartFailed); onServerStateChanged(StartFailed);
return false; return false;
} }

View File

@@ -90,6 +90,10 @@ private:
enum RunnerQuery { ServerInfo, GetGlobalScriptDirs, SetGlobalScriptDirs }; enum RunnerQuery { ServerInfo, GetGlobalScriptDirs, SetGlobalScriptDirs };
void onServerStateChanged(SquishProcessState state); void onServerStateChanged(SquishProcessState state);
void onServerStarted();
void onServerStopped();
void onServerStartFailed();
void onServerStopFailed();
void setState(State state); void setState(State state);
void setIdle(); void setIdle();
void startSquishServer(Request request); void startSquishServer(Request request);