| //--------------------------------------------------------------------------------------------- |
| // Copyright (c) 2022 Google LLC |
| // Licensed under the MIT License. See License.txt in the project root for license information. |
| //--------------------------------------------------------------------------------------------*/ |
| |
| import 'package:test/test.dart'; |
| import 'package:web_locale_keymap/web_locale_keymap.dart'; |
| |
| final int _kLowerA = 'a'.codeUnitAt(0); |
| final int _kUpperA = 'A'.codeUnitAt(0); |
| final int _kLowerZ = 'z'.codeUnitAt(0); |
| final int _kUpperZ = 'Z'.codeUnitAt(0); |
| |
| bool _isLetter(String char) { |
| if (char.length != 1) { |
| return false; |
| } |
| final int charCode = char.codeUnitAt(0); |
| return (charCode >= _kLowerA && charCode <= _kLowerZ) |
| || (charCode >= _kUpperA && charCode <= _kUpperZ); |
| } |
| |
| String _fromCharCode(int? logicalKey) { |
| if (logicalKey == null) { |
| return ''; |
| } |
| return String.fromCharCode(logicalKey); |
| } |
| |
| void verifyEntry(LocaleKeymap mapping, String eventCode, List<String> eventKeys, String mappedResult) { |
| // If the first two entry of KeyboardEvent.key are letter keys such as "a" and |
| // "A", then KeyboardEvent.keyCode is the upper letter such as "A". Otherwise, |
| // this field must not be used (in reality this field may or may not be |
| // platform independent). |
| int? eventKeyCode; |
| { |
| if (_isLetter(eventKeys[0]) && _isLetter(eventKeys[1])) { |
| eventKeyCode = eventKeys[0].toLowerCase().codeUnitAt(0); |
| } |
| } |
| |
| int index = 0; |
| for (final String eventKey in eventKeys) { |
| if (eventKey.isEmpty) { |
| continue; |
| } |
| test('$eventCode $index', () { |
| expect( |
| _fromCharCode(mapping.getLogicalKey(eventCode, eventKey, eventKeyCode ?? 0)), |
| mappedResult, |
| ); |
| }); |
| index += 1; |
| } |
| } |