autotests: Add more test cases in OutputChangesTest
It adds more test cases in OutputChangesTest, particularly swapping outputs. Swapping outputs is an interesting case because outputs can temporarily overlap so workspace()->outputAt() can return wrong output and the window is going to stick to wrong output.
This commit is contained in:
parent
a1e1d72f4b
commit
7b7a179396
1 changed files with 68 additions and 0 deletions
|
@ -33,6 +33,8 @@ private Q_SLOTS:
|
||||||
void testWindowSticksToOutputAfterOutputIsDisabled();
|
void testWindowSticksToOutputAfterOutputIsDisabled();
|
||||||
void testWindowSticksToOutputAfterAnotherOutputIsDisabled();
|
void testWindowSticksToOutputAfterAnotherOutputIsDisabled();
|
||||||
void testWindowSticksToOutputAfterOutputIsMoved();
|
void testWindowSticksToOutputAfterOutputIsMoved();
|
||||||
|
void testWindowSticksToOutputAfterOutputsAreSwappedLeftToRight();
|
||||||
|
void testWindowSticksToOutputAfterOutputsAreSwappedRightToLeft();
|
||||||
};
|
};
|
||||||
|
|
||||||
void OutputChangesTest::initTestCase()
|
void OutputChangesTest::initTestCase()
|
||||||
|
@ -149,7 +151,73 @@ void OutputChangesTest::testWindowSticksToOutputAfterOutputIsMoved()
|
||||||
QCOMPARE(window->frameGeometry(), QRect(-10 + 42, 20 + 67, 100, 50));
|
QCOMPARE(window->frameGeometry(), QRect(-10 + 42, 20 + 67, 100, 50));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OutputChangesTest::testWindowSticksToOutputAfterOutputsAreSwappedLeftToRight()
|
||||||
|
{
|
||||||
|
// This test verifies that a window placed on the left monitor sticks
|
||||||
|
// to that monitor even after the monitors are swapped horizontally.
|
||||||
|
|
||||||
|
const auto outputs = kwinApp()->platform()->outputs();
|
||||||
|
|
||||||
|
// Create a window.
|
||||||
|
std::unique_ptr<KWayland::Client::Surface> surface(Test::createSurface());
|
||||||
|
std::unique_ptr<Test::XdgToplevel> shellSurface(Test::createXdgToplevelSurface(surface.get()));
|
||||||
|
auto window = Test::renderAndWaitForShown(surface.get(), QSize(100, 50), Qt::blue);
|
||||||
|
QVERIFY(window);
|
||||||
|
|
||||||
|
// Move the window to the left output.
|
||||||
|
window->move(QPointF(0, 0));
|
||||||
|
QCOMPARE(window->output(), outputs[0]);
|
||||||
|
QCOMPARE(window->frameGeometry(), QRectF(0, 0, 100, 50));
|
||||||
|
|
||||||
|
// Swap outputs.
|
||||||
|
OutputConfiguration config;
|
||||||
|
{
|
||||||
|
auto changeSet1 = config.changeSet(outputs[0]);
|
||||||
|
changeSet1->pos = QPoint(1280, 0);
|
||||||
|
auto changeSet2 = config.changeSet(outputs[1]);
|
||||||
|
changeSet2->pos = QPoint(0, 0);
|
||||||
}
|
}
|
||||||
|
workspace()->applyOutputConfiguration(config);
|
||||||
|
|
||||||
|
// The window should be still on its original output.
|
||||||
|
QCOMPARE(window->output(), outputs[0]);
|
||||||
|
QCOMPARE(window->frameGeometry(), QRectF(1280, 0, 100, 50));
|
||||||
|
}
|
||||||
|
|
||||||
|
void OutputChangesTest::testWindowSticksToOutputAfterOutputsAreSwappedRightToLeft()
|
||||||
|
{
|
||||||
|
// This test verifies that a window placed on the right monitor sticks
|
||||||
|
// to that monitor even after the monitors are swapped horizontally.
|
||||||
|
|
||||||
|
const auto outputs = kwinApp()->platform()->outputs();
|
||||||
|
|
||||||
|
// Create a window.
|
||||||
|
std::unique_ptr<KWayland::Client::Surface> surface(Test::createSurface());
|
||||||
|
std::unique_ptr<Test::XdgToplevel> shellSurface(Test::createXdgToplevelSurface(surface.get()));
|
||||||
|
auto window = Test::renderAndWaitForShown(surface.get(), QSize(100, 50), Qt::blue);
|
||||||
|
QVERIFY(window);
|
||||||
|
|
||||||
|
// Move the window to the right output.
|
||||||
|
window->move(QPointF(1280, 0));
|
||||||
|
QCOMPARE(window->output(), outputs[1]);
|
||||||
|
QCOMPARE(window->frameGeometry(), QRectF(1280, 0, 100, 50));
|
||||||
|
|
||||||
|
// Swap outputs.
|
||||||
|
OutputConfiguration config;
|
||||||
|
{
|
||||||
|
auto changeSet1 = config.changeSet(outputs[0]);
|
||||||
|
changeSet1->pos = QPoint(1280, 0);
|
||||||
|
auto changeSet2 = config.changeSet(outputs[1]);
|
||||||
|
changeSet2->pos = QPoint(0, 0);
|
||||||
|
}
|
||||||
|
workspace()->applyOutputConfiguration(config);
|
||||||
|
|
||||||
|
// The window should be still on its original output.
|
||||||
|
QCOMPARE(window->output(), outputs[1]);
|
||||||
|
QCOMPARE(window->frameGeometry(), QRectF(0, 0, 100, 50));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace KWin
|
||||||
|
|
||||||
WAYLANDTEST_MAIN(KWin::OutputChangesTest)
|
WAYLANDTEST_MAIN(KWin::OutputChangesTest)
|
||||||
#include "outputchanges_test.moc"
|
#include "outputchanges_test.moc"
|
||||||
|
|
Loading…
Reference in a new issue