فهرست منبع

Add tests for mouse events

xuty 3 سال پیش
والد
کامیت
0600a4fe75
2فایلهای تغییر یافته به همراه121 افزوده شده و 0 حذف شده
  1. 27 0
      test/src/terminal_test.dart
  2. 94 0
      test/src/terminal_view_test.dart

+ 27 - 0
test/src/terminal_test.dart

@@ -22,6 +22,33 @@ void main() {
       expect(handler2.events, isNotEmpty);
     });
   });
+
+  group('Terminal.mouseInput', () {
+    test('can handle mouse events', () {
+      final output = <String>[];
+
+      final terminal = Terminal(onOutput: output.add);
+
+      terminal.mouseInput(
+        TerminalMouseButton.left,
+        TerminalMouseButtonState.down,
+        CellOffset(10, 10),
+      );
+
+      expect(output, isEmpty);
+
+      // enable mouse reporting
+      terminal.write('\x1b[?1000h');
+
+      terminal.mouseInput(
+        TerminalMouseButton.left,
+        TerminalMouseButtonState.down,
+        CellOffset(10, 10),
+      );
+
+      expect(output, ['\x1B[M +,']);
+    });
+  });
 }
 
 class _TestInputHandler implements TerminalInputHandler {

+ 94 - 0
test/src/terminal_view_test.dart

@@ -1,5 +1,6 @@
 import 'dart:io';
 
+import 'package:flutter/gestures.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:xterm/xterm.dart';
@@ -172,4 +173,97 @@ void main() {
       },
     );
   });
+
+  group('TerminalView.autofocus', () {
+    testWidgets(
+      'works',
+      (WidgetTester tester) async {
+        final terminal = Terminal();
+
+        final focusNode = FocusNode();
+
+        await tester.pumpWidget(
+          MaterialApp(
+            home: Scaffold(
+              body: TerminalView(
+                terminal,
+                autofocus: true,
+                focusNode: focusNode,
+              ),
+            ),
+          ),
+        );
+
+        await tester.pump();
+
+        expect(focusNode.hasFocus, isTrue);
+      },
+    );
+  });
+
+  group('TerminalController.pointerInputs', () {
+    testWidgets('works', (WidgetTester tester) async {
+      final output = <String>[];
+
+      final terminal = Terminal(onOutput: output.add);
+
+      // enable mouse reporting
+      terminal.write('\x1b[?1000h');
+
+      final terminalView = TerminalController(
+        pointerInputs: PointerInputs.all(),
+      );
+
+      await tester.pumpWidget(
+        MaterialApp(
+          home: Scaffold(
+            body: TerminalView(
+              terminal,
+              controller: terminalView,
+            ),
+          ),
+        ),
+      );
+
+      final pointer = TestPointer(1, PointerDeviceKind.mouse);
+
+      await tester.sendEventToBinding(pointer.down(Offset(1, 1)));
+
+      await tester.pumpAndSettle();
+
+      expect(output, isNotEmpty);
+    });
+  });
+
+  testWidgets('does not respond when disabled', (WidgetTester tester) async {
+    final output = <String>[];
+
+    final terminal = Terminal(onOutput: output.add);
+
+    // enable mouse reporting
+    terminal.write('\x1b[?1000h');
+
+    final terminalView = TerminalController(
+      pointerInputs: PointerInputs.none(),
+    );
+
+    await tester.pumpWidget(
+      MaterialApp(
+        home: Scaffold(
+          body: TerminalView(
+            terminal,
+            controller: terminalView,
+          ),
+        ),
+      ),
+    );
+
+    final pointer = TestPointer(1, PointerDeviceKind.mouse);
+
+    await tester.sendEventToBinding(pointer.down(Offset(1, 1)));
+
+    await tester.pumpAndSettle();
+
+    expect(output, isEmpty);
+  });
 }