// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include #include "CallbackStorage.hpp" #include 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); } }