diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-03-18 21:57:03 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-03-18 23:36:03 +0530 |
| commit | 1bd89088f1bb6103a34584ae39157abf2f732742 (patch) | |
| tree | 2f8fd292bbfb710979bdc44507156524a97148b7 /spec | |
| parent | 4c762b2516bc664293c2aec072074f1e34dda8c3 (diff) | |
| download | null-browser-1bd89088f1bb6103a34584ae39157abf2f732742.tar.gz null-browser-1bd89088f1bb6103a34584ae39157abf2f732742.zip | |
Add action for keymaps + test
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/KeymapEvaluatorSpec.cpp | 121 | ||||
| -rw-r--r-- | spec/testUtils.h | 2 |
2 files changed, 123 insertions, 0 deletions
diff --git a/spec/KeymapEvaluatorSpec.cpp b/spec/KeymapEvaluatorSpec.cpp new file mode 100644 index 0000000..4c19dfd --- /dev/null +++ b/spec/KeymapEvaluatorSpec.cpp @@ -0,0 +1,121 @@ +#include "testUtils.h" +#include <QtCore> + +#include "keymap/KeymapEvaluator.hpp" + +class KeymapEvaluatorSpec : public QObject { + Q_OBJECT + +private slots: + void testEvaluateSingleKeyChord() { + context("when the key sequence is mapped"); + it("calls mapping") { + int keymapWasCalled = false; + KeymapEvaluator evaluator; + evaluator.addKeymap(KeyMode::Normal, "<c-t>", + [&keymapWasCalled]() { keymapWasCalled = true; }); + + evaluator.evaluate(Qt::ControlModifier, Qt::Key_T); + + QVERIFY(keymapWasCalled); + } + + context("when the key sequence is not mapped"); + it("does not call mapping") { + int keymapWasCalled = false; + KeymapEvaluator evaluator; + evaluator.addKeymap(KeyMode::Normal, "<c-t>", + [&keymapWasCalled]() { keymapWasCalled = true; }); + + evaluator.evaluate(Qt::ControlModifier, Qt::Key_K); + + QVERIFY(NOT keymapWasCalled); + } + } + + void testEvaluateMultiKeySequence() { + context("when the full key sequence is mapped"); + it("calls mapping") { + int keymapWasCalled = false; + KeymapEvaluator evaluator; + evaluator.addKeymap(KeyMode::Normal, "<c-t>a", + [&keymapWasCalled]() { keymapWasCalled = true; }); + + evaluator.evaluate(Qt::ControlModifier, Qt::Key_T); + evaluator.evaluate(Qt::NoModifier, Qt::Key_A); + + QVERIFY(keymapWasCalled); + } + + context("when only part of a mapped key sequence is entered"); + it("does not call mapping") { + int keymapWasCalled = false; + KeymapEvaluator evaluator; + evaluator.addKeymap(KeyMode::Normal, "<c-t>a", + [&keymapWasCalled]() { keymapWasCalled = true; }); + + evaluator.evaluate(Qt::ControlModifier, Qt::Key_T); + + QVERIFY(NOT keymapWasCalled); + } + + context("when the key sequence is not mapped"); + it("does not call mapping") { + int keymapWasCalled = false; + KeymapEvaluator evaluator; + evaluator.addKeymap(KeyMode::Normal, "<c-t>a", + [&keymapWasCalled]() { keymapWasCalled = true; }); + + evaluator.evaluate(Qt::ControlModifier, Qt::Key_K); + + QVERIFY(NOT keymapWasCalled); + } + + context("when the key sequence is not mapped"); + it("does not call mapping") { + int keymapWasCalled = false; + KeymapEvaluator evaluator; + evaluator.addKeymap(KeyMode::Normal, "<c-t>a", + [&keymapWasCalled]() { keymapWasCalled = true; }); + + evaluator.evaluate(Qt::ControlModifier, Qt::Key_T); + evaluator.evaluate(Qt::NoModifier, Qt::Key_B); + + QVERIFY(NOT keymapWasCalled); + } + + context("when an incorrect sequence is entered before the correct one"); + it("calls mapping") { + int keymapWasCalled = false; + KeymapEvaluator evaluator; + evaluator.addKeymap(KeyMode::Normal, "<c-t>a", + [&keymapWasCalled]() { keymapWasCalled = true; }); + + evaluator.evaluate(Qt::ControlModifier, Qt::Key_T); + evaluator.evaluate(Qt::NoModifier, Qt::Key_B); + evaluator.evaluate(Qt::ControlModifier, Qt::Key_T); + evaluator.evaluate(Qt::NoModifier, Qt::Key_A); + + QVERIFY(keymapWasCalled); + } + + // TODO: maybe fix this behavior + context( + "when partial mapped sequence is entered before an entire sequence"); + it("does not call mapping") { + int keymapWasCalled = false; + KeymapEvaluator evaluator; + evaluator.addKeymap(KeyMode::Normal, "<c-t>a", + [&keymapWasCalled]() { keymapWasCalled = true; }); + + evaluator.evaluate(Qt::ControlModifier, Qt::Key_T); + evaluator.evaluate(Qt::ControlModifier, Qt::Key_T); + evaluator.evaluate(Qt::NoModifier, Qt::Key_A); + + QVERIFY(NOT keymapWasCalled); + } + } +}; + +QTEST_REGISTER(KeymapEvaluatorSpec) +#include "KeymapEvaluatorSpec.moc" diff --git a/spec/testUtils.h b/spec/testUtils.h index 20b3ba8..fd0c30b 100644 --- a/spec/testUtils.h +++ b/spec/testUtils.h @@ -4,6 +4,8 @@ #include <QtTest/qtestcase.h> #include <cstdio> +#define NOT ! + #define ANSI_BOLD "\x1b[1m" #define COLOR_CONTEXT "\x1b[32m" ANSI_BOLD #define COLOR_IT "\x1b[36m" ANSI_BOLD |
