Просмотр исходного кода

Merge pull request #126 from tauu/set-input-handler

feat: enable changing the inputHandler of a terminal
xuty 3 лет назад
Родитель
Сommit
6ba4c20fc3
2 измененных файлов с 38 добавлено и 3 удалено
  1. 3 3
      lib/src/terminal.dart
  2. 35 0
      test/src/terminal_test.dart

+ 3 - 3
lib/src/terminal.dart

@@ -30,11 +30,11 @@ class Terminal with Observable implements TerminalState, EscapeHandler {
   void Function(int width, int height, int pixelWidth, int pixelHeight)?
       onResize;
 
+  TerminalInputHandler? inputHandler;
+
   /// Flag to toggle os specific behaviors.
   final TerminalTargetPlatform platform;
 
-  final TerminalInputHandler inputHandler;
-
   Terminal({
     this.maxLines = 1000,
     this.onBell,
@@ -169,7 +169,7 @@ class Terminal with Observable implements TerminalState, EscapeHandler {
     bool alt = false,
     bool ctrl = false,
   }) {
-    final output = inputHandler(
+    final output = inputHandler?.call(
       TerminalInputEvent(
         key: key,
         shift: shift,

+ 35 - 0
test/src/terminal_test.dart

@@ -0,0 +1,35 @@
+import 'package:test/test.dart';
+import 'package:xterm/core.dart';
+
+void main() {
+  group('Terminal.inputHandler', () {
+    test('can be set to null', () {
+      final terminal = Terminal(inputHandler: null);
+      expect(() => terminal.keyInput(TerminalKey.keyA), returnsNormally);
+    });
+
+    test('can be changed', () {
+      final handler1 = _TestInputHandler();
+      final handler2 = _TestInputHandler();
+      final terminal = Terminal(inputHandler: handler1);
+
+      terminal.keyInput(TerminalKey.keyA);
+      expect(handler1.events, isNotEmpty);
+
+      terminal.inputHandler = handler2;
+
+      terminal.keyInput(TerminalKey.keyA);
+      expect(handler2.events, isNotEmpty);
+    });
+  });
+}
+
+class _TestInputHandler implements TerminalInputHandler {
+  final events = <TerminalInputEvent>[];
+
+  @override
+  String? call(TerminalInputEvent event) {
+    events.add(event);
+    return null;
+  }
+}