This repository has been archived on 2024-03-07. You can view files and clone it, but cannot push or open issues/pull-requests.
pix-draw-studio/tests/ShortcutListener.cpp

110 lines
2.1 KiB
C++

#include <catch2/catch.hpp>
#include "../src/cmd/ShortcutListener.hpp"
#include "../src/cmd/Command.hpp"
#include "../src/keys/KeyMod.hpp"
class ShortcutListenerTest
{
public:
explicit ShortcutListenerTest() {}
virtual ~ShortcutListenerTest() {}
protected:
pix::ShortcutListener sl;
};
struct CmdMock: public pix::Command {
int count = 0;
CmdMock(): pix::Command("Command Mock")
{
}
void execute() override
{
count++;
}
};
TEST_CASE_METHOD(ShortcutListenerTest, "ShortcutListener_OneCommand")
{
auto cmd = std::make_shared<CmdMock>();
sl.bind("a", cmd);
REQUIRE(cmd->count == 0);
sl.update(pix::KeyMod {"b"});
REQUIRE(cmd->count == 0);
sl.update(pix::KeyMod {"a"});
REQUIRE(cmd->count == 1);
}
TEST_CASE_METHOD(ShortcutListenerTest, "ShortcutListener_LongerShortcut")
{
auto cmd_0 = std::make_shared<CmdMock>();
sl.bind("a b C-c A-d", cmd_0);
sl.update(pix::KeyMod {"a"});
REQUIRE(cmd_0->count == 0);
sl.update(pix::KeyMod {"b"});
REQUIRE(cmd_0->count == 0);
sl.update(pix::KeyMod {"c", PIX_MOD(pix::PIX_CTRL)});
REQUIRE(cmd_0->count == 0);
sl.update(pix::KeyMod {"d", PIX_MOD(pix::PIX_ALT)});
REQUIRE(cmd_0->count == 1);
sl.update(pix::KeyMod {"d", PIX_MOD(pix::PIX_CTRL)});
REQUIRE(cmd_0->count == 1);
}
TEST_CASE_METHOD(ShortcutListenerTest, "ShortcutListener_CommandFailed")
{
auto cmd = std::make_shared<CmdMock>();
sl.bind("b a t", cmd);
REQUIRE(cmd->count == 0);
sl.update(pix::KeyMod {"b"});
REQUIRE(cmd->count == 0);
sl.update(pix::KeyMod {"a"});
REQUIRE(cmd->count == 0);
sl.update(pix::KeyMod {"b"});
REQUIRE(cmd->count == 0);
sl.update(pix::KeyMod {"a"});
REQUIRE(cmd->count == 0);
sl.update(pix::KeyMod {"t"});
REQUIRE(cmd->count == 1);
}
TEST_CASE_METHOD(ShortcutListenerTest, "ShortcutListener_FailedMiddle")
{
auto cmd = std::make_shared<CmdMock>();
sl.bind("b a t", cmd);
REQUIRE(cmd->count == 0);
sl.update(pix::KeyMod {"b"});
REQUIRE(cmd->count == 0);
sl.update(pix::KeyMod {"a"});
REQUIRE(cmd->count == 0);
sl.update(pix::KeyMod {"x"});
REQUIRE(cmd->count == 0);
sl.update(pix::KeyMod {"t"});
REQUIRE(cmd->count == 0);
}