aboutsummaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-03-18 21:57:03 +0530
committerAkshay Nair <phenax5@gmail.com>2025-03-18 23:36:03 +0530
commit1bd89088f1bb6103a34584ae39157abf2f732742 (patch)
tree2f8fd292bbfb710979bdc44507156524a97148b7 /spec
parent4c762b2516bc664293c2aec072074f1e34dda8c3 (diff)
downloadnull-browser-1bd89088f1bb6103a34584ae39157abf2f732742.tar.gz
null-browser-1bd89088f1bb6103a34584ae39157abf2f732742.zip
Add action for keymaps + test
Diffstat (limited to '')
-rw-r--r--spec/KeymapEvaluatorSpec.cpp121
-rw-r--r--spec/testUtils.h2
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