12#include "compositor.h"
20#include <KWayland/Client/surface.h>
25static const QString s_socketName = QStringLiteral(
"wayland_test_kwin_dont_crash_reinitialize_compositor-0");
36 void testReinitializeCompositor_data();
37 void testReinitializeCompositor();
40void DontCrashReinitializeCompositorTest::initTestCase()
43 QSKIP(
"no render node available");
46 qputenv(
"XDG_DATA_DIRS", QCoreApplication::applicationDirPath().toUtf8());
48 qRegisterMetaType<KWin::Window *>();
52 QRect(0, 0, 1280, 1024),
53 QRect(1280, 0, 1280, 1024),
56 auto config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig);
57 KConfigGroup plugins(config, QStringLiteral(
"Plugins"));
58 const auto builtinNames = EffectLoader().listOfKnownEffects();
59 for (
const QString &name : builtinNames) {
60 plugins.writeEntry(name + QStringLiteral(
"Enabled"),
false);
63 kwinApp()->setConfig(config);
65 qputenv(
"KWIN_COMPOSE", QByteArrayLiteral(
"O2"));
66 qputenv(
"KWIN_EFFECTS_FORCE_ANIMATIONS", QByteArrayLiteral(
"1"));
69 QVERIFY(applicationStartedSpy.wait());
72 QCOMPARE(outputs[0]->geometry(), QRect(0, 0, 1280, 1024));
73 QCOMPARE(outputs[1]->geometry(), QRect(1280, 0, 1280, 1024));
76void DontCrashReinitializeCompositorTest::init()
81void DontCrashReinitializeCompositorTest::cleanup()
90void DontCrashReinitializeCompositorTest::testReinitializeCompositor_data()
92 QTest::addColumn<QString>(
"effectName");
94 QTest::newRow(
"Fade") << QStringLiteral(
"fade");
95 QTest::newRow(
"Glide") << QStringLiteral(
"glide");
96 QTest::newRow(
"Scale") << QStringLiteral(
"scale");
99void DontCrashReinitializeCompositorTest::testReinitializeCompositor()
107 QVERIFY(surface !=
nullptr);
109 QVERIFY(shellSurface !=
nullptr);
114 QFETCH(QString, effectName);
120 QVERIFY(!effect->isActive());
124 shellSurface.reset();
126 QVERIFY(windowClosedSpy.wait());
130 QVERIFY(effect->isActive());
141#include "dont_crash_reinitialize_compositor.moc"
virtual void reinitialize()
static Compositor * self()
QStringList loadedEffects
Q_SCRIPTABLE bool loadEffect(const QString &name)
Effect * findEffect(const QString &name) const
QList< Output * > outputs() const
#define WAYLANDTEST_MAIN(TestObject)
Window * renderAndWaitForShown(KWayland::Client::Surface *surface, const QSize &size, const QColor &color, const QImage::Format &format=QImage::Format_ARGB32, int timeout=5000)
void destroyWaylandConnection()
void setOutputConfig(const QList< QRect > &geometries)
bool setupWaylandConnection(AdditionalWaylandInterfaces flags=AdditionalWaylandInterfaces())
QList< KWayland::Client::Output * > outputs
bool renderNodeAvailable()
std::unique_ptr< KWayland::Client::Surface > createSurface()
XdgToplevel * createXdgToplevelSurface(KWayland::Client::Surface *surface, QObject *parent=nullptr)
WaylandServer * waylandServer()