From 9750a380698cf1041b7bd6df089e9f0eb4a72ce9 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Tue, 18 Aug 2020 19:51:35 +0200 Subject: [PATCH] test: add test for edges on mostly overlapping outputs Inspired in commit b2a44fb08aa140646c879226ee82509aa201ec11 by Roman Gilg in kwinft. --- autotests/test_screen_edges.cpp | 52 ++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/autotests/test_screen_edges.cpp b/autotests/test_screen_edges.cpp index fb11e6ca76..7e9e9213b5 100644 --- a/autotests/test_screen_edges.cpp +++ b/autotests/test_screen_edges.cpp @@ -17,6 +17,7 @@ #include "../utils.h" #include "../virtualdesktops.h" #include "../xcbutils.h" +#include "../platform.h" #include "mock_screens.h" #include "mock_workspace.h" #include "mock_x11client.h" @@ -90,6 +91,8 @@ private Q_SLOTS: void testCreatingInitialEdges(); void testCallback(); void testCallbackWithCheck(); + void testOverlappingEdges_data(); + void testOverlappingEdges(); void testPushBack_data(); void testPushBack(); void testFullScreenBlocking(); @@ -567,6 +570,45 @@ void TestScreenEdges::testCallbackWithCheck() QCOMPARE(Cursors::self()->mouse()->pos(), QPoint(98, 50)); } +void TestScreenEdges::testOverlappingEdges_data() +{ + QTest::addColumn("geo1"); + QTest::addColumn("geo2"); + + QTest::newRow("topleft-1x1") << QRect{0, 1, 1024, 768} << QRect{1, 0, 1024, 768}; + QTest::newRow("left-1x1-same") << QRect{0, 1, 1024, 766} << QRect{1, 0, 1024, 768}; + QTest::newRow("left-1x1-exchanged") << QRect{0, 1, 1024, 768} << QRect{1, 0, 1024, 766}; + QTest::newRow("bottomleft-1x1") << QRect{0, 0, 1024, 768} << QRect{1, 0, 1024, 769}; + QTest::newRow("bottomright-1x1") << QRect{0, 0, 1024, 768} << QRect{0, 0, 1023, 769}; + QTest::newRow("right-1x1-same") << QRect{0, 0, 1024, 768} << QRect{0, 1, 1025, 766}; + QTest::newRow("right-1x1-exchanged") << QRect{0, 0, 1024, 768} << QRect{1, 1, 1024, 768}; +} + + +void TestScreenEdges::testOverlappingEdges() +{ + using namespace KWin; + QSignalSpy changedSpy(screens(), &Screens::changed); + QVERIFY(changedSpy.isValid()); + + QFETCH(QRect, geo1); + QFETCH(QRect, geo2); + + QList geometries{{geo1, geo2}}; + QMetaObject::invokeMethod(kwinApp()->platform(), + "setVirtualOutputs", + Qt::DirectConnection, + Q_ARG(int, geometries.count()), + Q_ARG(QVector, QVector::fromList(geometries)), + Q_ARG(QVector, QVector(geometries.count(), 1)) + ); + + QCOMPARE(changedSpy.count(), 1); + + auto screenEdges = ScreenEdges::self(); + screenEdges->init(); +} + void TestScreenEdges::testPushBack_data() { QTest::addColumn("border"); @@ -593,7 +635,15 @@ void TestScreenEdges::testPushBack() config->group("Windows").writeEntry("ElectricBorderPushbackPixels", pushback); config->sync(); - // TODO: add screens + QVector geometries{{QRect{0, 0, 1024, 768}, QRect{200, 768, 1024, 768}}}; + QMetaObject::invokeMethod(kwinApp()->platform(), + "setVirtualOutputs", + Qt::DirectConnection, + Q_ARG(int, geometries.count()), + Q_ARG(QVector, geometries), + Q_ARG(QVector, QVector(geometries.count(), 1)) + ); + auto s = ScreenEdges::self(); s->setConfig(config);