// 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'; // @GenerateMocks([ // TerminalUiInteraction, // ]) void main() { // group('InputBehaviorDesktop', () { // test('can handle fast typing', () { // final mockTerminal = MockTerminalUiInteraction(); // final inputBehavior = InputBehaviorDesktop(); // inputBehavior.onTextEdit(composing('l', -1, -1), mockTerminal); // verify(mockTerminal.raiseOnInput('l')); // verifyNever(mockTerminal.updateComposingString(any)); // inputBehavior.onTextEdit(composing('ls', -1, -1), mockTerminal); // verify(mockTerminal.raiseOnInput('s')); // verifyNever(mockTerminal.updateComposingString(any)); // inputBehavior.onTextEdit(TextEditingValue.empty, mockTerminal); // verifyNever(mockTerminal.raiseOnInput(any)); // verifyNever(mockTerminal.updateComposingString(any)); // }); // test('can handle English', () { // final mockTerminal = MockTerminalUiInteraction(); // final inputBehavior = InputBehaviorDesktop(); // // typing 'hello' // inputBehavior.onTextEdit(composing('h', 1, 1), mockTerminal); // verify(mockTerminal.raiseOnInput('h')); // verifyNever(mockTerminal.updateComposingString(any)); // inputBehavior.onTextEdit(TextEditingValue.empty, mockTerminal); // inputBehavior.onTextEdit(composing('e', 1, 1), mockTerminal); // verify(mockTerminal.raiseOnInput('e')); // verifyNever(mockTerminal.updateComposingString(any)); // inputBehavior.onTextEdit(TextEditingValue.empty, mockTerminal); // inputBehavior.onTextEdit(composing('l', 1, 1), mockTerminal); // verify(mockTerminal.raiseOnInput('l')); // verifyNever(mockTerminal.updateComposingString(any)); // inputBehavior.onTextEdit(TextEditingValue.empty, mockTerminal); // inputBehavior.onTextEdit(composing('l', 1, 1), mockTerminal); // verify(mockTerminal.raiseOnInput('l')); // verifyNever(mockTerminal.updateComposingString(any)); // inputBehavior.onTextEdit(TextEditingValue.empty, mockTerminal); // inputBehavior.onTextEdit(composing('o', 1, 1), mockTerminal); // verify(mockTerminal.raiseOnInput('o')); // verifyNever(mockTerminal.updateComposingString(any)); // }); // test('can handle Chinese', () { // final mockTerminal = MockTerminalUiInteraction(); // final inputBehavior = InputBehaviorDesktop(); // // typing '你好' // inputBehavior.onTextEdit(composing('n', 0, 1), mockTerminal); // inputBehavior.onTextEdit(composing('ni', 0, 2), mockTerminal); // inputBehavior.onTextEdit(composing('ni h', 0, 4), mockTerminal); // inputBehavior.onTextEdit(composing('ni ha', 0, 5), mockTerminal); // inputBehavior.onTextEdit(composing('ni hao', 0, 6), mockTerminal); // inputBehavior.onTextEdit(composing('你好', 0, 2), mockTerminal); // verify(mockTerminal.updateComposingString(any)).called(6); // verifyNever(mockTerminal.raiseOnInput(any)); // inputBehavior.onTextEdit(composing('你好', -1, -1), mockTerminal); // verify(mockTerminal.raiseOnInput('你好')); // verify(mockTerminal.updateComposingString('')); // }); // test('can handle Japanese', () { // final mockTerminal = MockTerminalUiInteraction(); // final inputBehavior = InputBehaviorDesktop(); // // typing 'どうも' // inputBehavior.onTextEdit(composing('d', 0, 1), mockTerminal); // inputBehavior.onTextEdit(composing('ど', 0, 1), mockTerminal); // inputBehavior.onTextEdit(composing('どう', 0, 2), mockTerminal); // inputBehavior.onTextEdit(composing('どうm', 0, 3), mockTerminal); // inputBehavior.onTextEdit(composing('どうも', 0, 3), mockTerminal); // verify(mockTerminal.updateComposingString(any)).called(5); // verifyNever(mockTerminal.raiseOnInput(any)); // inputBehavior.onTextEdit(composing('どうも', -1, -1), mockTerminal); // verify(mockTerminal.raiseOnInput('どうも')); // verify(mockTerminal.updateComposingString('')); // }); // test('can handle Korean', () { // final mockTerminal = MockTerminalUiInteraction(); // final inputBehavior = InputBehaviorDesktop(); // // typing '안녕' // inputBehavior.onTextEdit(composing('ㅇ', 0, 1), mockTerminal); // inputBehavior.onTextEdit(composing('아', 0, 1), mockTerminal); // inputBehavior.onTextEdit(composing('안', 0, 1), mockTerminal); // inputBehavior.onTextEdit(composing('안', 0, 1), mockTerminal); // verify(mockTerminal.updateComposingString(any)).called(4); // verifyNever(mockTerminal.raiseOnInput(any)); // inputBehavior.onTextEdit(composing('안', 1, 1), mockTerminal); // verify(mockTerminal.raiseOnInput('안')); // verify(mockTerminal.updateComposingString('')); // inputBehavior.onTextEdit(TextEditingValue.empty, mockTerminal); // inputBehavior.onTextEdit(composing('ㄴ', 0, 1), mockTerminal); // inputBehavior.onTextEdit(composing('녀', 0, 1), mockTerminal); // inputBehavior.onTextEdit(composing('녕', 0, 1), mockTerminal); // verify(mockTerminal.updateComposingString(any)).called(3); // verifyNever(mockTerminal.raiseOnInput(any)); // inputBehavior.onTextEdit(composing('녕', 1, 1), mockTerminal); // verify(mockTerminal.raiseOnInput('녕')); // verify(mockTerminal.updateComposingString('')); // }); // }); // } // TextEditingValue composing(String text, int start, int end) { // return TextEditingValue( // text: text, // selection: TextSelection.collapsed(offset: text.length), // composing: TextRange(start: start, end: end), // ); }