mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-24 13:58:00 -05:00
71 lines
1.8 KiB
C++
71 lines
1.8 KiB
C++
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#include <catch2/catch.hpp>
|
|
|
|
#include "CallbackStorage.hpp"
|
|
|
|
#include <functional>
|
|
|
|
using namespace app;
|
|
|
|
class TestCallbacksDeleter : public AsyncCallbacksDeleter
|
|
{
|
|
public:
|
|
explicit TestCallbacksDeleter(CallbackStorage &storage) : storage{storage}
|
|
{}
|
|
|
|
void cancelCallbacks(AsyncCallbackReceiver *receiver) override
|
|
{
|
|
storage.removeAll(receiver);
|
|
}
|
|
|
|
private:
|
|
CallbackStorage &storage;
|
|
};
|
|
|
|
class TestReceiver : public AsyncCallbackReceiver
|
|
{
|
|
public:
|
|
TestReceiver(TestCallbacksDeleter *deleter = nullptr) : AsyncCallbackReceiver(deleter)
|
|
{}
|
|
};
|
|
|
|
TEST_CASE("CallbackStorageTests")
|
|
{
|
|
CallbackStorage storage;
|
|
|
|
SECTION("Get callback")
|
|
{
|
|
constexpr auto MessageId = 1;
|
|
sys::ResponseMessage response{};
|
|
response.uniID = MessageId;
|
|
|
|
TestReceiver receiver;
|
|
storage.registerCallback(MessageId, &receiver);
|
|
REQUIRE(storage.containsCallbackFor(&response));
|
|
|
|
[[maybe_unused]] auto callback = storage.getCallback(&response);
|
|
REQUIRE(!storage.containsCallbackFor(&response));
|
|
}
|
|
|
|
SECTION("Remove receiver")
|
|
{
|
|
constexpr auto MessageId = 2;
|
|
sys::ResponseMessage response{};
|
|
response.uniID = MessageId;
|
|
|
|
{
|
|
TestCallbacksDeleter deleter{storage};
|
|
TestReceiver receiver{&deleter};
|
|
|
|
storage.registerCallback(MessageId, &receiver);
|
|
REQUIRE(storage.containsCallbackFor(&response));
|
|
}
|
|
|
|
REQUIRE(!storage.containsCallbackFor(&response));
|
|
[[maybe_unused]] auto callback = storage.getCallback(&response);
|
|
REQUIRE(callback->execute() == false);
|
|
}
|
|
}
|