[autotests/integration] Add test case for touch and decoration
The test for touch points is extended for decorated windows and as the test shows the client pos offset is not considered correctly. CCBUG: 374778
This commit is contained in:
parent
b868df2715
commit
e616925fb0
1 changed files with 31 additions and 7 deletions
|
@ -29,6 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include <KWayland/Client/connection_thread.h>
|
#include <KWayland/Client/connection_thread.h>
|
||||||
#include <KWayland/Client/seat.h>
|
#include <KWayland/Client/seat.h>
|
||||||
#include <KWayland/Client/shell.h>
|
#include <KWayland/Client/shell.h>
|
||||||
|
#include <KWayland/Client/server_decoration.h>
|
||||||
#include <KWayland/Client/surface.h>
|
#include <KWayland/Client/surface.h>
|
||||||
#include <KWayland/Client/touch.h>
|
#include <KWayland/Client/touch.h>
|
||||||
|
|
||||||
|
@ -44,12 +45,13 @@ private Q_SLOTS:
|
||||||
void initTestCase();
|
void initTestCase();
|
||||||
void init();
|
void init();
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
void testMultipleTouchPoints_data();
|
||||||
void testMultipleTouchPoints();
|
void testMultipleTouchPoints();
|
||||||
void testCancel();
|
void testCancel();
|
||||||
void testTouchMouseAction();
|
void testTouchMouseAction();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AbstractClient *showWindow();
|
AbstractClient *showWindow(bool decorated = false);
|
||||||
KWayland::Client::Touch *m_touch = nullptr;
|
KWayland::Client::Touch *m_touch = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -74,7 +76,7 @@ void TouchInputTest::initTestCase()
|
||||||
void TouchInputTest::init()
|
void TouchInputTest::init()
|
||||||
{
|
{
|
||||||
using namespace KWayland::Client;
|
using namespace KWayland::Client;
|
||||||
QVERIFY(Test::setupWaylandConnection(Test::AdditionalWaylandInterface::Seat));
|
QVERIFY(Test::setupWaylandConnection(Test::AdditionalWaylandInterface::Seat | Test::AdditionalWaylandInterface::Decoration));
|
||||||
QVERIFY(Test::waitForWaylandTouch());
|
QVERIFY(Test::waitForWaylandTouch());
|
||||||
m_touch = Test::waylandSeat()->createTouch(Test::waylandSeat());
|
m_touch = Test::waylandSeat()->createTouch(Test::waylandSeat());
|
||||||
QVERIFY(m_touch);
|
QVERIFY(m_touch);
|
||||||
|
@ -91,7 +93,7 @@ void TouchInputTest::cleanup()
|
||||||
Test::destroyWaylandConnection();
|
Test::destroyWaylandConnection();
|
||||||
}
|
}
|
||||||
|
|
||||||
AbstractClient *TouchInputTest::showWindow()
|
AbstractClient *TouchInputTest::showWindow(bool decorated)
|
||||||
{
|
{
|
||||||
using namespace KWayland::Client;
|
using namespace KWayland::Client;
|
||||||
#define VERIFY(statement) \
|
#define VERIFY(statement) \
|
||||||
|
@ -105,6 +107,15 @@ AbstractClient *TouchInputTest::showWindow()
|
||||||
VERIFY(surface);
|
VERIFY(surface);
|
||||||
ShellSurface *shellSurface = Test::createShellSurface(surface, surface);
|
ShellSurface *shellSurface = Test::createShellSurface(surface, surface);
|
||||||
VERIFY(shellSurface);
|
VERIFY(shellSurface);
|
||||||
|
if (decorated) {
|
||||||
|
auto deco = Test::waylandServerSideDecoration()->create(surface, surface);
|
||||||
|
QSignalSpy decoSpy(deco, &ServerSideDecoration::modeChanged);
|
||||||
|
VERIFY(decoSpy.isValid());
|
||||||
|
VERIFY(decoSpy.wait());
|
||||||
|
deco->requestMode(ServerSideDecoration::Mode::Server);
|
||||||
|
VERIFY(decoSpy.wait());
|
||||||
|
COMPARE(deco->mode(), ServerSideDecoration::Mode::Server);
|
||||||
|
}
|
||||||
// let's render
|
// let's render
|
||||||
auto c = Test::renderAndWaitForShown(surface, QSize(100, 50), Qt::blue);
|
auto c = Test::renderAndWaitForShown(surface, QSize(100, 50), Qt::blue);
|
||||||
|
|
||||||
|
@ -117,10 +128,20 @@ AbstractClient *TouchInputTest::showWindow()
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TouchInputTest::testMultipleTouchPoints_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<bool>("decorated");
|
||||||
|
|
||||||
|
QTest::newRow("undecorated") << false;
|
||||||
|
QTest::newRow("decorated") << true;
|
||||||
|
}
|
||||||
|
|
||||||
void TouchInputTest::testMultipleTouchPoints()
|
void TouchInputTest::testMultipleTouchPoints()
|
||||||
{
|
{
|
||||||
using namespace KWayland::Client;
|
using namespace KWayland::Client;
|
||||||
AbstractClient *c = showWindow();
|
QFETCH(bool, decorated);
|
||||||
|
AbstractClient *c = showWindow(decorated);
|
||||||
|
QCOMPARE(c->isDecorated(), decorated);
|
||||||
c->move(100, 100);
|
c->move(100, 100);
|
||||||
QVERIFY(c);
|
QVERIFY(c);
|
||||||
QSignalSpy sequenceStartedSpy(m_touch, &Touch::sequenceStarted);
|
QSignalSpy sequenceStartedSpy(m_touch, &Touch::sequenceStarted);
|
||||||
|
@ -135,30 +156,33 @@ void TouchInputTest::testMultipleTouchPoints()
|
||||||
QVERIFY(endedSpy.isValid());
|
QVERIFY(endedSpy.isValid());
|
||||||
|
|
||||||
quint32 timestamp = 1;
|
quint32 timestamp = 1;
|
||||||
kwinApp()->platform()->touchDown(1, QPointF(125, 125), timestamp++);
|
kwinApp()->platform()->touchDown(1, QPointF(125, 125) + c->clientPos(), timestamp++);
|
||||||
QVERIFY(sequenceStartedSpy.wait());
|
QVERIFY(sequenceStartedSpy.wait());
|
||||||
QCOMPARE(sequenceStartedSpy.count(), 1);
|
QCOMPARE(sequenceStartedSpy.count(), 1);
|
||||||
QCOMPARE(m_touch->sequence().count(), 1);
|
QCOMPARE(m_touch->sequence().count(), 1);
|
||||||
QCOMPARE(m_touch->sequence().first()->isDown(), true);
|
QCOMPARE(m_touch->sequence().first()->isDown(), true);
|
||||||
|
QEXPECT_FAIL("decorated", "BUG 374778", Continue);
|
||||||
QCOMPARE(m_touch->sequence().first()->position(), QPointF(25, 25));
|
QCOMPARE(m_touch->sequence().first()->position(), QPointF(25, 25));
|
||||||
QCOMPARE(pointAddedSpy.count(), 0);
|
QCOMPARE(pointAddedSpy.count(), 0);
|
||||||
QCOMPARE(pointMovedSpy.count(), 0);
|
QCOMPARE(pointMovedSpy.count(), 0);
|
||||||
|
|
||||||
// a point outside the window
|
// a point outside the window
|
||||||
kwinApp()->platform()->touchDown(2, QPointF(0, 0), timestamp++);
|
kwinApp()->platform()->touchDown(2, QPointF(0, 0) + c->clientPos(), timestamp++);
|
||||||
QVERIFY(pointAddedSpy.wait());
|
QVERIFY(pointAddedSpy.wait());
|
||||||
QCOMPARE(pointAddedSpy.count(), 1);
|
QCOMPARE(pointAddedSpy.count(), 1);
|
||||||
QCOMPARE(m_touch->sequence().count(), 2);
|
QCOMPARE(m_touch->sequence().count(), 2);
|
||||||
QCOMPARE(m_touch->sequence().at(1)->isDown(), true);
|
QCOMPARE(m_touch->sequence().at(1)->isDown(), true);
|
||||||
|
QEXPECT_FAIL("decorated", "BUG 374778", Continue);
|
||||||
QCOMPARE(m_touch->sequence().at(1)->position(), QPointF(-100, -100));
|
QCOMPARE(m_touch->sequence().at(1)->position(), QPointF(-100, -100));
|
||||||
QCOMPARE(pointMovedSpy.count(), 0);
|
QCOMPARE(pointMovedSpy.count(), 0);
|
||||||
|
|
||||||
// let's move that one
|
// let's move that one
|
||||||
kwinApp()->platform()->touchMotion(2, QPointF(100, 100), timestamp++);
|
kwinApp()->platform()->touchMotion(2, QPointF(100, 100) + c->clientPos(), timestamp++);
|
||||||
QVERIFY(pointMovedSpy.wait());
|
QVERIFY(pointMovedSpy.wait());
|
||||||
QCOMPARE(pointMovedSpy.count(), 1);
|
QCOMPARE(pointMovedSpy.count(), 1);
|
||||||
QCOMPARE(m_touch->sequence().count(), 2);
|
QCOMPARE(m_touch->sequence().count(), 2);
|
||||||
QCOMPARE(m_touch->sequence().at(1)->isDown(), true);
|
QCOMPARE(m_touch->sequence().at(1)->isDown(), true);
|
||||||
|
QEXPECT_FAIL("decorated", "BUG 374778", Continue);
|
||||||
QCOMPARE(m_touch->sequence().at(1)->position(), QPointF(0, 0));
|
QCOMPARE(m_touch->sequence().at(1)->position(), QPointF(0, 0));
|
||||||
|
|
||||||
kwinApp()->platform()->touchUp(1, timestamp++);
|
kwinApp()->platform()->touchUp(1, timestamp++);
|
||||||
|
|
Loading…
Reference in a new issue