[autotests] Extend SlidingPopupTests for Wayland windows
Same test case as for X11 windows added for Wayland windows.
This commit is contained in:
parent
b84fd50319
commit
3aeb7367bb
1 changed files with 133 additions and 0 deletions
|
@ -31,6 +31,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
#include <KConfigGroup>
|
||||
|
||||
#include <KWayland/Client/connection_thread.h>
|
||||
#include <KWayland/Client/registry.h>
|
||||
#include <KWayland/Client/surface.h>
|
||||
#include <KWayland/Client/shell.h>
|
||||
#include <KWayland/Client/slide.h>
|
||||
|
||||
#include <netwm.h>
|
||||
#include <xcb/xcb_icccm.h>
|
||||
|
||||
|
@ -47,6 +53,8 @@ private Q_SLOTS:
|
|||
|
||||
void testWithOtherEffect_data();
|
||||
void testWithOtherEffect();
|
||||
void testWithOtherEffectWayland_data();
|
||||
void testWithOtherEffectWayland();
|
||||
};
|
||||
|
||||
void SlidingPopupsTest::initTestCase()
|
||||
|
@ -86,10 +94,12 @@ void SlidingPopupsTest::initTestCase()
|
|||
|
||||
void SlidingPopupsTest::init()
|
||||
{
|
||||
QVERIFY(Test::setupWaylandConnection(s_socketName, Test::AdditionalWaylandInterface::Decoration));
|
||||
}
|
||||
|
||||
void SlidingPopupsTest::cleanup()
|
||||
{
|
||||
Test::destroyWaylandConnection();
|
||||
EffectsHandlerImpl *e = static_cast<EffectsHandlerImpl*>(effects);
|
||||
while (!e->loadedEffects().isEmpty()) {
|
||||
const QString effect = e->loadedEffects().first();
|
||||
|
@ -246,5 +256,128 @@ void SlidingPopupsTest::testWithOtherEffect()
|
|||
c.reset();
|
||||
}
|
||||
|
||||
void SlidingPopupsTest::testWithOtherEffectWayland_data()
|
||||
{
|
||||
QTest::addColumn<QStringList>("effectsToLoad");
|
||||
|
||||
QTest::newRow("scale, slide") << QStringList{QStringLiteral("kwin4_effect_scalein"), QStringLiteral("slidingpopups")};
|
||||
QTest::newRow("slide, scale") << QStringList{QStringLiteral("slidingpopups"), QStringLiteral("kwin4_effect_scalein")};
|
||||
QTest::newRow("fade, slide") << QStringList{QStringLiteral("kwin4_effect_fade"), QStringLiteral("slidingpopups")};
|
||||
QTest::newRow("slide, fade") << QStringList{QStringLiteral("slidingpopups"), QStringLiteral("kwin4_effect_fade")};
|
||||
|
||||
if (effects->compositingType() & KWin::OpenGLCompositing) {
|
||||
QTest::newRow("glide, slide") << QStringList{QStringLiteral("glide"), QStringLiteral("slidingpopups")};
|
||||
QTest::newRow("slide, glide") << QStringList{QStringLiteral("slidingpopups"), QStringLiteral("glide")};
|
||||
QTest::newRow("wobblywindows, slide") << QStringList{QStringLiteral("wobblywindows"), QStringLiteral("slidingpopups")};
|
||||
QTest::newRow("slide, wobblywindows") << QStringList{QStringLiteral("slidingpopups"), QStringLiteral("wobblywindows")};
|
||||
QTest::newRow("fallapart, slide") << QStringList{QStringLiteral("fallapart"), QStringLiteral("slidingpopups")};
|
||||
QTest::newRow("slide, fallapart") << QStringList{QStringLiteral("slidingpopups"), QStringLiteral("fallapart")};
|
||||
}
|
||||
}
|
||||
|
||||
void SlidingPopupsTest::testWithOtherEffectWayland()
|
||||
{
|
||||
// this test verifies that slidingpopups effect grabs the window added role
|
||||
// independently of the sequence how the effects are loaded.
|
||||
// see BUG 336866
|
||||
// the test is like testWithOtherEffect, but simulates using a Wayland window
|
||||
EffectsHandlerImpl *e = static_cast<EffectsHandlerImpl*>(effects);
|
||||
// find the effectsloader
|
||||
auto effectloader = e->findChild<AbstractEffectLoader*>();
|
||||
QVERIFY(effectloader);
|
||||
QSignalSpy effectLoadedSpy(effectloader, &AbstractEffectLoader::effectLoaded);
|
||||
QVERIFY(effectLoadedSpy.isValid());
|
||||
|
||||
Effect *slidingPoupus = nullptr;
|
||||
Effect *otherEffect = nullptr;
|
||||
QFETCH(QStringList, effectsToLoad);
|
||||
for (const QString &effectName : effectsToLoad) {
|
||||
QVERIFY(!e->isEffectLoaded(effectName));
|
||||
QVERIFY(e->loadEffect(effectName));
|
||||
QVERIFY(e->isEffectLoaded(effectName));
|
||||
|
||||
QCOMPARE(effectLoadedSpy.count(), 1);
|
||||
Effect *effect = effectLoadedSpy.first().first().value<Effect*>();
|
||||
if (effectName == QStringLiteral("slidingpopups")) {
|
||||
slidingPoupus = effect;
|
||||
} else {
|
||||
otherEffect = effect;
|
||||
}
|
||||
effectLoadedSpy.clear();
|
||||
}
|
||||
QVERIFY(slidingPoupus);
|
||||
QVERIFY(otherEffect);
|
||||
|
||||
QVERIFY(!slidingPoupus->isActive());
|
||||
QVERIFY(!otherEffect->isActive());
|
||||
QSignalSpy windowAddedSpy(effects, &EffectsHandler::windowAdded);
|
||||
QVERIFY(windowAddedSpy.isValid());
|
||||
|
||||
using namespace KWayland::Client;
|
||||
// the test created the slide protocol, let's create a Registry and listen for it
|
||||
QScopedPointer<Registry> registry(new Registry);
|
||||
registry->create(Test::waylandConnection());
|
||||
|
||||
QSignalSpy interfacesAnnouncedSpy(registry.data(), &Registry::interfacesAnnounced);
|
||||
QVERIFY(interfacesAnnouncedSpy.isValid());
|
||||
registry->setup();
|
||||
QVERIFY(interfacesAnnouncedSpy.wait());
|
||||
auto slideInterface = registry->interface(Registry::Interface::Slide);
|
||||
QVERIFY(slideInterface.name != 0);
|
||||
QScopedPointer<SlideManager> slideManager(registry->createSlideManager(slideInterface.name, slideInterface.version));
|
||||
QVERIFY(slideManager);
|
||||
|
||||
// create Wayland window
|
||||
QScopedPointer<Surface> surface(Test::createSurface());
|
||||
QVERIFY(surface);
|
||||
QScopedPointer<Slide> slide(slideManager->createSlide(surface.data()));
|
||||
slide->setLocation(Slide::Location::Left);
|
||||
slide->commit();
|
||||
QScopedPointer<ShellSurface> shellSurface(Test::createShellSurface(surface.data()));
|
||||
QVERIFY(shellSurface);
|
||||
QCOMPARE(windowAddedSpy.count(), 0);
|
||||
auto client = Test::renderAndWaitForShown(surface.data(), QSize(10, 20), Qt::blue);
|
||||
QVERIFY(client);
|
||||
QVERIFY(client->isNormalWindow());
|
||||
|
||||
// sliding popups should be active
|
||||
QCOMPARE(windowAddedSpy.count(), 1);
|
||||
QTRY_VERIFY(slidingPoupus->isActive());
|
||||
QEXPECT_FAIL("scale, slide", "bug 336866", Continue);
|
||||
QEXPECT_FAIL("fade, slide", "bug 336866", Continue);
|
||||
QEXPECT_FAIL("wobblywindows, slide", "bug 336866", Continue);
|
||||
QEXPECT_FAIL("slide, wobblywindows", "bug 336866", Continue);
|
||||
QVERIFY(!otherEffect->isActive());
|
||||
|
||||
// wait till effect ends
|
||||
QTRY_VERIFY(!slidingPoupus->isActive());
|
||||
QTest::qWait(300);
|
||||
QVERIFY(!otherEffect->isActive());
|
||||
|
||||
// and destroy the window again
|
||||
shellSurface.reset();
|
||||
surface.reset();
|
||||
|
||||
QSignalSpy windowClosedSpy(client, &Client::windowClosed);
|
||||
QVERIFY(windowClosedSpy.isValid());
|
||||
|
||||
QSignalSpy windowDeletedSpy(effects, &EffectsHandler::windowDeleted);
|
||||
QVERIFY(windowDeletedSpy.isValid());
|
||||
QVERIFY(windowClosedSpy.wait());
|
||||
|
||||
// again we should have the sliding popups active
|
||||
QVERIFY(slidingPoupus->isActive());
|
||||
QEXPECT_FAIL("wobblywindows, slide", "bug 336866", Continue);
|
||||
QEXPECT_FAIL("slide, wobblywindows", "bug 336866", Continue);
|
||||
QVERIFY(!otherEffect->isActive());
|
||||
|
||||
QVERIFY(windowDeletedSpy.wait());
|
||||
|
||||
QCOMPARE(windowDeletedSpy.count(), 1);
|
||||
QTRY_VERIFY(!slidingPoupus->isActive());
|
||||
QTest::qWait(300);
|
||||
QVERIFY(!otherEffect->isActive());
|
||||
}
|
||||
|
||||
WAYLANDTEST_MAIN(SlidingPopupsTest)
|
||||
#include "slidingpopups_test.moc"
|
||||
|
|
Loading…
Reference in a new issue