#include #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(); 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(); 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(); 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(); 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); }