110 lines
2.1 KiB
C++
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);
|
||
|
}
|