// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md #include "WindowsPopupFilter.hpp" #include #include gui::popup::Filter filter; TEST_CASE("WindowsPopupQueue creation") { auto wp = app::WindowsPopupQueue(); std::optional r = wp.popRequest(filter); REQUIRE(not r); } TEST_CASE("WindowsPopupQueue push") { using namespace gui::popup; auto wp = app::WindowsPopupQueue(); Blueprint blueprint; SECTION("single") { Request request( gui::popup::ID::Alarm, std::make_unique(gui::popup::ID::Alarm), blueprint); wp.pushRequest(std::move(request)); wp.popRequest(filter); auto r = wp.popRequest(filter); REQUIRE(not r); } /// we should be able to have multiple same requests stored on the popups queue SECTION("multiple") { const auto count = 3; auto request_gen = [blueprint]() { return Request( gui::popup::ID::Alarm, std::make_unique(gui::popup::ID::Alarm), blueprint); }; Request request[count] = {request_gen(), request_gen(), request_gen()}; for (auto &val : request) { wp.pushRequest(std::move(val)); } for (auto i = count; i != 0; --i) { auto r = wp.popRequest(filter); REQUIRE(r); } } } class NoneFilter : public gui::popup::Filter { bool isPermitted(const gui::PopupRequestParams & /*params*/) const override { return false; } }; TEST_CASE("WindowsPopupQueue filter") { using namespace gui::popup; auto wp = app::WindowsPopupQueue(); Blueprint blueprint; auto noneFilter = NoneFilter(); Request request(gui::popup::ID::Alarm, std::make_unique(gui::popup::ID::Alarm), blueprint); wp.pushRequest(std::move(request)); { auto r = wp.popRequest(noneFilter); REQUIRE(not r); } { auto r = wp.popRequest(filter); REQUIRE(r); } { auto r = wp.popRequest(noneFilter); REQUIRE(not r); } { auto r = wp.popRequest(filter); REQUIRE(not r); } } TEST_CASE("WindowsPopupRequest - handle empty request foo") { using namespace gui::popup; SECTION("no blueprint") { Blueprint blueprint; Request request( gui::popup::ID::Alarm, std::make_unique(gui::popup::ID::Alarm), blueprint); REQUIRE_THROWS_AS(request.handle(), std::bad_function_call); } SECTION("failing blueprint") { Blueprint blueprint = [](gui::popup::ID, std::unique_ptr &) -> bool { return false; }; Request request( gui::popup::ID::Alarm, std::make_unique(gui::popup::ID::Alarm), blueprint); REQUIRE(not request.handle()); } SECTION("successful blueprint") { Blueprint blueprint = [](gui::popup::ID, std::unique_ptr &) -> bool { return true; }; Request request( gui::popup::ID::Alarm, std::make_unique(gui::popup::ID::Alarm), blueprint); REQUIRE(request.handle()); } }