| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:html' as html; |
| import 'dart:typed_data'; |
| |
| import 'package:ui/src/engine.dart'; |
| import 'package:ui/ui.dart' as ui; |
| |
| import 'package:test/test.dart'; |
| |
| void main() { |
| group('Keyboard', () { |
| test('initializes', () { |
| expect(Keyboard.instance, isNull); |
| Keyboard.initialize(); |
| expect(Keyboard.instance, isNotNull); |
| }); |
| |
| test('dispatches keyup to flutter/keyevent channel', () { |
| String channelReceived; |
| Map dataReceived; |
| ui.window.onPlatformMessage = (String channel, ByteData data, |
| ui.PlatformMessageResponseCallback callback) { |
| channelReceived = channel; |
| dataReceived = JSONMessageCodec().decodeMessage(data); |
| }; |
| |
| html.window.dispatchEvent(html.KeyboardEvent('keyup')); |
| |
| expect(channelReceived, 'flutter/keyevent'); |
| expect(dataReceived['type'], 'keyup'); |
| expect(dataReceived['keymap'], 'android'); |
| |
| // Unfortunately there's no way to fake `keyCode`. |
| expect(dataReceived['keyCode'], 0); |
| |
| // Unfortunately there's no way to fake `key`. |
| expect(dataReceived, isNot(contains('codePoint'))); |
| }); |
| |
| test('dispatches keydown to flutter/keyevent channel', () { |
| String channelReceived; |
| Map dataReceived; |
| ui.window.onPlatformMessage = (String channel, ByteData data, |
| ui.PlatformMessageResponseCallback callback) { |
| channelReceived = channel; |
| dataReceived = JSONMessageCodec().decodeMessage(data); |
| }; |
| |
| html.window.dispatchEvent(html.KeyboardEvent('keydown')); |
| |
| expect(channelReceived, 'flutter/keyevent'); |
| expect(dataReceived['type'], 'keydown'); |
| expect(dataReceived['keymap'], 'android'); |
| |
| // Unfortunately there's no way to fake `keyCode`. |
| expect(dataReceived['keyCode'], 0); |
| |
| // Unfortunately there's no way to fake `key`. |
| expect(dataReceived, isNot(contains('codePoint'))); |
| }); |
| |
| test('stops dispatching events after dispose', () { |
| int count = 0; |
| ui.window.onPlatformMessage = (String channel, ByteData data, |
| ui.PlatformMessageResponseCallback callback) { |
| count += 1; |
| }; |
| |
| html.window.dispatchEvent(html.KeyboardEvent('keydown')); |
| expect(count, 1); |
| html.window.dispatchEvent(html.KeyboardEvent('keyup')); |
| expect(count, 2); |
| |
| Keyboard.instance.dispose(); |
| expect(Keyboard.instance, isNull); |
| |
| // No more event dispatching. |
| html.window.dispatchEvent(html.KeyboardEvent('keydown')); |
| expect(count, 2); |
| html.window.dispatchEvent(html.KeyboardEvent('keyup')); |
| expect(count, 2); |
| }); |
| }); |
| } |