summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/compositor/compositor/mockclient.cpp19
-rw-r--r--tests/auto/compositor/compositor/mockclient.h8
-rw-r--r--tests/auto/compositor/compositor/tst_compositor.cpp58
3 files changed, 78 insertions, 7 deletions
diff --git a/tests/auto/compositor/compositor/mockclient.cpp b/tests/auto/compositor/compositor/mockclient.cpp
index f2fbc5de2..da1096fb9 100644
--- a/tests/auto/compositor/compositor/mockclient.cpp
+++ b/tests/auto/compositor/compositor/mockclient.cpp
@@ -52,6 +52,7 @@ MockClient::MockClient()
, wlshell(0)
, xdgShell(nullptr)
, iviApplication(nullptr)
+ , refreshRate(-1)
, error(0 /* means no error according to spec */)
, protocolError({0, 0, nullptr})
{
@@ -102,10 +103,22 @@ void MockClient::outputGeometryEvent(void *data, wl_output *,
resolve(data)->geometry.moveTopLeft(QPoint(x, y));
}
-void MockClient::outputModeEvent(void *data, wl_output *, uint32_t,
- int w, int h, int)
+void MockClient::outputModeEvent(void *data, wl_output *, uint32_t flags,
+ int w, int h, int refreshRate)
{
- resolve(data)->geometry.setSize(QSize(w, h));
+ QWaylandOutputMode mode(QSize(w, h), refreshRate);
+
+ if (flags & WL_OUTPUT_MODE_CURRENT) {
+ resolve(data)->geometry.setSize(QSize(w, h));
+ resolve(data)->resolution = QSize(w, h);
+ resolve(data)->refreshRate = refreshRate;
+ resolve(data)->currentMode = mode;
+ }
+
+ if (flags & WL_OUTPUT_MODE_PREFERRED)
+ resolve(data)->preferredMode = mode;
+
+ resolve(data)->modes.append(mode);
}
void MockClient::outputDone(void *, wl_output *)
diff --git a/tests/auto/compositor/compositor/mockclient.h b/tests/auto/compositor/compositor/mockclient.h
index ed9319af8..1881393a6 100644
--- a/tests/auto/compositor/compositor/mockclient.h
+++ b/tests/auto/compositor/compositor/mockclient.h
@@ -34,6 +34,7 @@
#include <QImage>
#include <QRect>
#include <QList>
+#include <QWaylandOutputMode>
class MockSeat;
@@ -73,6 +74,11 @@ public:
QList<MockSeat *> m_seats;
QRect geometry;
+ QSize resolution;
+ int refreshRate;
+ QWaylandOutputMode currentMode;
+ QWaylandOutputMode preferredMode;
+ QList<QWaylandOutputMode> modes;
int fd;
int error;
@@ -106,7 +112,7 @@ private:
uint32_t flags,
int width,
int height,
- int refresh);
+ int refreshRate);
static void outputDone(void *data, wl_output *output);
static void outputScale(void *data, wl_output *output, int factor);
diff --git a/tests/auto/compositor/compositor/tst_compositor.cpp b/tests/auto/compositor/compositor/tst_compositor.cpp
index 16aedd8ec..393b9f5b7 100644
--- a/tests/auto/compositor/compositor/tst_compositor.cpp
+++ b/tests/auto/compositor/compositor/tst_compositor.cpp
@@ -35,6 +35,7 @@
#include "qwaylandbufferref.h"
#include "qwaylandseat.h"
+#include <QtGui/QScreen>
#include <QtWaylandCompositor/QWaylandXdgShellV5>
#include <QtWaylandCompositor/QWaylandIviApplication>
#include <QtWaylandCompositor/QWaylandIviSurface>
@@ -58,6 +59,8 @@ private slots:
void singleClient();
void multipleClients();
void geometry();
+ void modes();
+ void sizeFollowsWindow();
void mapSurface();
void frameCallback();
@@ -202,12 +205,61 @@ void tst_WaylandCompositor::geometry()
TestCompositor compositor;
compositor.create();
- QRect geometry(0, 0, 4096, 3072);
- compositor.defaultOutput()->setGeometry(geometry);
+ QWaylandOutputMode mode(QSize(4096, 3072), 60000);
+ compositor.defaultOutput()->setPosition(QPoint(1024, 0));
+ compositor.defaultOutput()->addMode(mode, true);
+ compositor.defaultOutput()->setCurrentMode(mode);
MockClient client;
- QTRY_COMPARE(client.geometry, geometry);
+ QTRY_COMPARE(client.geometry, QRect(QPoint(1024, 0), QSize(4096, 3072)));
+ QTRY_COMPARE(client.resolution, QSize(4096, 3072));
+ QTRY_COMPARE(client.refreshRate, 60000);
+}
+
+void tst_WaylandCompositor::modes()
+{
+ TestCompositor compositor;
+ compositor.create();
+
+ // mode3 is current, mode4 is preferred
+ QWaylandOutputMode mode1(QSize(800, 600), 120000);
+ QWaylandOutputMode mode2(QSize(1024, 768), 100000);
+ QWaylandOutputMode mode3(QSize(1920, 1080), 60000);
+ QWaylandOutputMode mode4(QSize(2560, 1440), 59000);
+ compositor.defaultOutput()->addMode(mode1);
+ compositor.defaultOutput()->addMode(mode2, true);
+ compositor.defaultOutput()->addMode(mode3);
+ compositor.defaultOutput()->addMode(mode4, true);
+ compositor.defaultOutput()->setCurrentMode(mode3);
+
+ MockClient client;
+
+ QTRY_COMPARE(client.modes.size(), 4);
+ QTRY_COMPARE(client.currentMode, mode3);
+ QTRY_COMPARE(client.preferredMode, mode4);
+ QTRY_COMPARE(client.geometry, QRect(QPoint(0, 0), QSize(1920, 1080)));
+}
+
+void tst_WaylandCompositor::sizeFollowsWindow()
+{
+ TestCompositor compositor;
+
+ QWindow window;
+ window.resize(800, 600);
+
+ auto output = new QWaylandOutput(&compositor, &window);
+ output->setSizeFollowsWindow(true);
+
+ compositor.create();
+
+ QWaylandOutputMode mode(window.size(), qFloor(window.screen()->refreshRate() * 1000));
+
+ MockClient client;
+
+ QTRY_COMPARE(client.modes.size(), 1);
+ QTRY_COMPARE(client.currentMode, mode);
+ QTRY_COMPARE(client.preferredMode, mode);
}
void tst_WaylandCompositor::mapSurface()