deskflow/src/unittests/base/EventQueueTests.cpp

59 lines
1.7 KiB
C++
Raw Normal View History

/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2026 Deskflow Developers
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#include "EventQueueTests.h"
#include "base/EventQueue.h"
#include <QTest>
#include <memory>
void EventQueueTests::initTestCase()
{
m_arch.init();
}
void EventQueueTests::dispatchEvent_noHandler_returnsFalse()
{
EventQueue events;
QVERIFY(!events.dispatchEvent(Event(EventTypes::ClientDisconnected, this)));
}
void EventQueueTests::dispatchEvent_noTypeHandler_dispatchesUnknownHandler()
{
EventQueue events;
bool fallbackCalled = false;
events.addHandler(EventTypes::Unknown, this, [&fallbackCalled](const Event &) { fallbackCalled = true; });
QVERIFY(events.dispatchEvent(Event(EventTypes::ClientDisconnected, this)));
QVERIFY(fallbackCalled);
}
void EventQueueTests::dispatchEvent_handlerRemovesItself_keepsHandlerAliveUntilReturn()
{
EventQueue events;
auto handlerLifetime = std::make_shared<int>(1);
std::weak_ptr<int> handlerLifetimeObserver = handlerLifetime;
bool handlerAliveAfterRemoval = false;
events.addHandler(
EventTypes::ClientDisconnected, this,
[this, &events, &handlerLifetimeObserver, &handlerAliveAfterRemoval, handlerLifetime](const Event &) {
events.removeHandler(EventTypes::ClientDisconnected, this);
handlerAliveAfterRemoval = handlerLifetime != nullptr && !handlerLifetimeObserver.expired();
}
);
handlerLifetime.reset();
QVERIFY(events.dispatchEvent(Event(EventTypes::ClientDisconnected, this)));
QVERIFY(handlerAliveAfterRemoval);
QVERIFY(handlerLifetimeObserver.expired());
}
QTEST_MAIN(EventQueueTests)