Try to make TestShellClient::testUnresponsiveWindow more robust
Summary: When looking at the test results on build.kde.org we see this is the test which fails most often and it's always at the same line of code. So I just had a look with the thought: "what's special about this code, why could it fail?" Looking at it we start an external process which is supposed to connect to KWin. We wait for the process to start and then wait for the shell client added. This assumes that at the time we handle the wait for started the connection of the window has not happened yet. Waiting for the process in a blocking way, might make the process fail to connect to the Wayland session, so this is changed to not block and instead use a signal. Reviewers: #kwin Subscribers: kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D17748
This commit is contained in:
parent
d49642ca15
commit
feb1d443f1
1 changed files with 6 additions and 2 deletions
|
@ -982,11 +982,15 @@ void TestShellClient::testUnresponsiveWindow()
|
||||||
process->setProcessEnvironment(env);
|
process->setProcessEnvironment(env);
|
||||||
process->setProcessChannelMode(QProcess::ForwardedChannels);
|
process->setProcessChannelMode(QProcess::ForwardedChannels);
|
||||||
process->setProgram(kill);
|
process->setProgram(kill);
|
||||||
|
QSignalSpy processStartedSpy{process.data(), &QProcess::started};
|
||||||
|
QVERIFY(processStartedSpy.isValid());
|
||||||
process->start();
|
process->start();
|
||||||
QVERIFY(process->waitForStarted());
|
QVERIFY(processStartedSpy.wait());
|
||||||
|
|
||||||
AbstractClient *killClient = nullptr;
|
AbstractClient *killClient = nullptr;
|
||||||
QVERIFY(shellClientAddedSpy.wait());
|
if (shellClientAddedSpy.isEmpty()) {
|
||||||
|
QVERIFY(shellClientAddedSpy.wait());
|
||||||
|
}
|
||||||
killClient = shellClientAddedSpy.first().first().value<AbstractClient*>();
|
killClient = shellClientAddedSpy.first().first().value<AbstractClient*>();
|
||||||
QSignalSpy unresponsiveSpy(killClient, &AbstractClient::unresponsiveChanged);
|
QSignalSpy unresponsiveSpy(killClient, &AbstractClient::unresponsiveChanged);
|
||||||
QSignalSpy killedSpy(process.data(), static_cast<void(QProcess::*)(int,QProcess::ExitStatus)>(&QProcess::finished));
|
QSignalSpy killedSpy(process.data(), static_cast<void(QProcess::*)(int,QProcess::ExitStatus)>(&QProcess::finished));
|
||||||
|
|
Loading…
Reference in a new issue