Bladeren bron

Add tests for keyboard inputs

xuty 3 jaren geleden
bovenliggende
commit
5a84480cb8
2 gewijzigde bestanden met toevoegingen van 87 en 0 verwijderingen
  1. 54 0
      test/src/terminal_view_test.dart
  2. 33 0
      test/src/terminal_view_test.mocks.dart

+ 54 - 0
test/src/terminal_view_test.dart

@@ -4,10 +4,15 @@ import 'package:flutter/gestures.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:flutter_test/flutter_test.dart';
+import 'package:mockito/annotations.dart';
+import 'package:mockito/mockito.dart';
 import 'package:xterm/xterm.dart';
 
 import '../_fixture/_fixture.dart';
 
+@GenerateNiceMocks([MockSpec<TerminalInputHandler>()])
+import 'terminal_view_test.mocks.dart';
+
 void main() {
   final binding = TestWidgetsFlutterBinding.ensureInitialized();
 
@@ -365,4 +370,53 @@ void main() {
       );
     });
   });
+
+  group('TerminalView.inputHandler', () {
+    testWidgets('works', (tester) async {
+      final terminalOutput = <String>[];
+      final terminal = Terminal(onOutput: terminalOutput.add);
+
+      await tester.pumpWidget(MaterialApp(
+        home: TerminalView(terminal, autofocus: true),
+      ));
+
+      await tester.tap(find.byType(TerminalView));
+      await tester.pump(Duration(seconds: 1));
+
+      await tester.sendKeyDownEvent(LogicalKeyboardKey.control);
+      await tester.sendKeyDownEvent(LogicalKeyboardKey.keyD);
+      await tester.sendKeyUpEvent(LogicalKeyboardKey.keyD);
+      await tester.sendKeyUpEvent(LogicalKeyboardKey.control);
+
+      await tester.pumpAndSettle();
+
+      expect(terminalOutput.join(), '\x04');
+    });
+
+    testWidgets('can convert text input to key events', (tester) async {
+      final inputHandler = MockTerminalInputHandler();
+      when(inputHandler.call(any)).thenAnswer((invocation) => 'AAA');
+
+      final terminalOutput = <String>[];
+      final terminal = Terminal(
+        inputHandler: inputHandler,
+        onOutput: terminalOutput.add,
+      );
+
+      await tester.pumpWidget(MaterialApp(
+        home: TerminalView(terminal, autofocus: true),
+      ));
+
+      await tester.tap(find.byType(TerminalView));
+      await tester.pump(Duration(seconds: 1));
+
+      binding.testTextInput.enterText('c');
+      await binding.idle();
+
+      await tester.pumpAndSettle();
+
+      verify(inputHandler.call(any));
+      expect(terminalOutput.join(), 'AAA');
+    });
+  });
 }

+ 33 - 0
test/src/terminal_view_test.mocks.dart

@@ -0,0 +1,33 @@
+// Mocks generated by Mockito 5.3.1 from annotations
+// in xterm/test/src/terminal_view_test.dart.
+// Do not manually edit this file.
+
+// ignore_for_file: no_leading_underscores_for_library_prefixes
+import 'package:mockito/mockito.dart' as _i1;
+import 'package:xterm/src/core/input/handler.dart' as _i2;
+
+// ignore_for_file: type=lint
+// ignore_for_file: avoid_redundant_argument_values
+// ignore_for_file: avoid_setters_without_getters
+// ignore_for_file: comment_references
+// ignore_for_file: implementation_imports
+// ignore_for_file: invalid_use_of_visible_for_testing_member
+// ignore_for_file: prefer_const_constructors
+// ignore_for_file: unnecessary_parenthesis
+// ignore_for_file: camel_case_types
+// ignore_for_file: subtype_of_sealed_class
+
+/// A class which mocks [TerminalInputHandler].
+///
+/// See the documentation for Mockito's code generation for more information.
+class MockTerminalInputHandler extends _i1.Mock
+    implements _i2.TerminalInputHandler {
+  @override
+  String? call(_i2.TerminalInputEvent? event) => (super.noSuchMethod(
+        Invocation.method(
+          #call,
+          [event],
+        ),
+        returnValueForMissingStub: null,
+      ) as String?);
+}