aboutsummaryrefslogtreecommitdiff
path: root/ttwhy/scanners/terminal_scanner.tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ttwhy/scanners/terminal_scanner.tests.cpp')
-rw-r--r--ttwhy/scanners/terminal_scanner.tests.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/ttwhy/scanners/terminal_scanner.tests.cpp b/ttwhy/scanners/terminal_scanner.tests.cpp
new file mode 100644
index 0000000..6fdc8af
--- /dev/null
+++ b/ttwhy/scanners/terminal_scanner.tests.cpp
@@ -0,0 +1,38 @@
+#include <catch2/catch_test_macros.hpp>
+
+#include <string_view> // IWYU pragma: keep
+#include <variant>
+#include <vector>
+
+import ttwhy.scanners;
+
+using namespace std::string_view_literals;
+
+[[nodiscard]] constexpr auto static is_character(ttwhy::scanners::input_event & event, char expected) -> bool
+{
+ auto const * data = std::get_if<ttwhy::scanners::character_event>(&event);
+ return data != nullptr && data->value == expected;
+}
+
+SCENARIO("The ANSI scanner processes printable ASCII and standard C0 control characters", "[scanner][ansi]")
+{
+ GIVEN("An initialized scanner and event sink")
+ {
+ auto queue = std::vector<ttwhy::scanners::input_event>{};
+ auto sink = [&queue](auto const & event) {
+ queue.push_back(event);
+ };
+ auto scanner = ttwhy::scanners::ansi{sink};
+
+ WHEN("Processing a standard printable character")
+ {
+ scanner.process("A");
+
+ THEN("It yields a single character event")
+ {
+ REQUIRE(queue.size() == 1);
+ CHECK(is_character(queue.at(0), 'A'));
+ }
+ }
+ }
+}