mirror of
https://github.com/flutter/flutter
synced 2024-08-24 18:36:03 +00:00
[flutter_test] Use defaultTargetPlatform for key events simulation (#143579)
## Description This PRs changes the default value for the `platform` parameter used to simulate key events. With this PR, the default value is "web" on web, otherwise it is the operating system name retrieved from `defaultTargetPlatform`. Previously, for methods in `WidgetController`, it defaulted to âwebâ on web, and âandroidâ everywhere else. And for methods in `KeyEventSimulator` it defaulted to âwebâ on web, and the operating system that the test was running on everywhere else. Because the operating system was based on `Platform.operatingSystem`, it usually differed from the target platform the test was running on. AFAIK, the `platform` parameter is only meaningful for simulating `RawKeyEvent`. Once `RawKeyboard` will be fully removed, the `platform` parameter wonât be needed. @gspencergoog In the meantime, do you think it is worth merging this fix? ## Related Issue Fixes to https://github.com/flutter/flutter/issues/133955 ## Tests Adds one test.
This commit is contained in:
parent
4e63a6a2d9
commit
471a82856d
|
@ -22,8 +22,6 @@ import 'window.dart';
|
||||||
/// This value must be greater than [kTouchSlop].
|
/// This value must be greater than [kTouchSlop].
|
||||||
const double kDragSlopDefault = 20.0;
|
const double kDragSlopDefault = 20.0;
|
||||||
|
|
||||||
const String _defaultPlatform = kIsWeb ? 'web' : 'android';
|
|
||||||
|
|
||||||
// Finds the end index (exclusive) of the span at `startIndex`, or `endIndex` if
|
// Finds the end index (exclusive) of the span at `startIndex`, or `endIndex` if
|
||||||
// there are no other spans between `startIndex` and `endIndex`.
|
// there are no other spans between `startIndex` and `endIndex`.
|
||||||
// The InlineSpan protocol doesn't expose the length of the span so we'll
|
// The InlineSpan protocol doesn't expose the length of the span so we'll
|
||||||
|
@ -1957,8 +1955,8 @@ abstract class WidgetController {
|
||||||
///
|
///
|
||||||
/// Specify `platform` as one of the platforms allowed in
|
/// Specify `platform` as one of the platforms allowed in
|
||||||
/// [platform.Platform.operatingSystem] to make the event appear to be from
|
/// [platform.Platform.operatingSystem] to make the event appear to be from
|
||||||
/// that type of system. Defaults to "web" on web, and "android" everywhere
|
/// that type of system. If not specified, defaults to "web" on web, and the
|
||||||
/// else.
|
/// operating system name based on [defaultTargetPlatform] everywhere else.
|
||||||
///
|
///
|
||||||
/// Specify the `physicalKey` for the event to override what is included in
|
/// Specify the `physicalKey` for the event to override what is included in
|
||||||
/// the simulated event. If not specified, it uses a default from the US
|
/// the simulated event. If not specified, it uses a default from the US
|
||||||
|
@ -1982,7 +1980,7 @@ abstract class WidgetController {
|
||||||
/// - [sendKeyUpEvent] to simulate only a key up event.
|
/// - [sendKeyUpEvent] to simulate only a key up event.
|
||||||
Future<bool> sendKeyEvent(
|
Future<bool> sendKeyEvent(
|
||||||
LogicalKeyboardKey key, {
|
LogicalKeyboardKey key, {
|
||||||
String platform = _defaultPlatform,
|
String? platform,
|
||||||
String? character,
|
String? character,
|
||||||
PhysicalKeyboardKey? physicalKey
|
PhysicalKeyboardKey? physicalKey
|
||||||
}) async {
|
}) async {
|
||||||
|
@ -1999,8 +1997,8 @@ abstract class WidgetController {
|
||||||
///
|
///
|
||||||
/// Specify `platform` as one of the platforms allowed in
|
/// Specify `platform` as one of the platforms allowed in
|
||||||
/// [platform.Platform.operatingSystem] to make the event appear to be from
|
/// [platform.Platform.operatingSystem] to make the event appear to be from
|
||||||
/// that type of system. Defaults to "web" on web, and "android" everywhere
|
/// that type of system. If not specified, defaults to "web" on web, and the
|
||||||
/// else.
|
/// operating system name based on [defaultTargetPlatform] everywhere else.
|
||||||
///
|
///
|
||||||
/// Specify the `physicalKey` for the event to override what is included in
|
/// Specify the `physicalKey` for the event to override what is included in
|
||||||
/// the simulated event. If not specified, it uses a default from the US
|
/// the simulated event. If not specified, it uses a default from the US
|
||||||
|
@ -2021,7 +2019,7 @@ abstract class WidgetController {
|
||||||
/// - [sendKeyEvent] to simulate both the key up and key down in the same call.
|
/// - [sendKeyEvent] to simulate both the key up and key down in the same call.
|
||||||
Future<bool> sendKeyDownEvent(
|
Future<bool> sendKeyDownEvent(
|
||||||
LogicalKeyboardKey key, {
|
LogicalKeyboardKey key, {
|
||||||
String platform = _defaultPlatform,
|
String? platform,
|
||||||
String? character,
|
String? character,
|
||||||
PhysicalKeyboardKey? physicalKey
|
PhysicalKeyboardKey? physicalKey
|
||||||
}) async {
|
}) async {
|
||||||
|
@ -2036,8 +2034,8 @@ abstract class WidgetController {
|
||||||
///
|
///
|
||||||
/// Specify `platform` as one of the platforms allowed in
|
/// Specify `platform` as one of the platforms allowed in
|
||||||
/// [platform.Platform.operatingSystem] to make the event appear to be from
|
/// [platform.Platform.operatingSystem] to make the event appear to be from
|
||||||
/// that type of system. Defaults to "web" on web, and "android" everywhere
|
/// that type of system. If not specified, defaults to "web" on web, and the
|
||||||
/// else. May not be null.
|
/// operating system name based on [defaultTargetPlatform] everywhere else.
|
||||||
///
|
///
|
||||||
/// Specify the `physicalKey` for the event to override what is included in
|
/// Specify the `physicalKey` for the event to override what is included in
|
||||||
/// the simulated event. If not specified, it uses a default from the US
|
/// the simulated event. If not specified, it uses a default from the US
|
||||||
|
@ -2052,7 +2050,7 @@ abstract class WidgetController {
|
||||||
/// - [sendKeyEvent] to simulate both the key up and key down in the same call.
|
/// - [sendKeyEvent] to simulate both the key up and key down in the same call.
|
||||||
Future<bool> sendKeyUpEvent(
|
Future<bool> sendKeyUpEvent(
|
||||||
LogicalKeyboardKey key, {
|
LogicalKeyboardKey key, {
|
||||||
String platform = _defaultPlatform,
|
String? platform,
|
||||||
PhysicalKeyboardKey? physicalKey
|
PhysicalKeyboardKey? physicalKey
|
||||||
}) async {
|
}) async {
|
||||||
// Internally wrapped in async guard.
|
// Internally wrapped in async guard.
|
||||||
|
@ -2065,9 +2063,9 @@ abstract class WidgetController {
|
||||||
/// from a soft keyboard.
|
/// from a soft keyboard.
|
||||||
///
|
///
|
||||||
/// Specify `platform` as one of the platforms allowed in
|
/// Specify `platform` as one of the platforms allowed in
|
||||||
/// [platform.Platform.operatingSystem] to make the event appear to be from that type
|
/// [platform.Platform.operatingSystem] to make the event appear to be from
|
||||||
/// of system. Defaults to "web" on web, and "android" everywhere else. Must not be
|
/// that type of system. If not specified, defaults to "web" on web, and the
|
||||||
/// null.
|
/// operating system name based on [defaultTargetPlatform] everywhere else.
|
||||||
///
|
///
|
||||||
/// Specify the `physicalKey` for the event to override what is included in
|
/// Specify the `physicalKey` for the event to override what is included in
|
||||||
/// the simulated event. If not specified, it uses a default from the US
|
/// the simulated event. If not specified, it uses a default from the US
|
||||||
|
@ -2088,7 +2086,7 @@ abstract class WidgetController {
|
||||||
/// - [sendKeyEvent] to simulate both the key up and key down in the same call.
|
/// - [sendKeyEvent] to simulate both the key up and key down in the same call.
|
||||||
Future<bool> sendKeyRepeatEvent(
|
Future<bool> sendKeyRepeatEvent(
|
||||||
LogicalKeyboardKey key, {
|
LogicalKeyboardKey key, {
|
||||||
String platform = _defaultPlatform,
|
String? platform,
|
||||||
String? character,
|
String? character,
|
||||||
PhysicalKeyboardKey? physicalKey
|
PhysicalKeyboardKey? physicalKey
|
||||||
}) async {
|
}) async {
|
||||||
|
|
|
@ -711,7 +711,7 @@ abstract final class KeyEventSimulator {
|
||||||
@visibleForTesting
|
@visibleForTesting
|
||||||
static KeyDataTransitMode get transitMode => _transitMode;
|
static KeyDataTransitMode get transitMode => _transitMode;
|
||||||
|
|
||||||
static String get _defaultPlatform => kIsWeb ? 'web' : Platform.operatingSystem;
|
static String get _defaultPlatform => kIsWeb ? 'web' : defaultTargetPlatform.name.toLowerCase();
|
||||||
|
|
||||||
/// Simulates sending a hardware key down event.
|
/// Simulates sending a hardware key down event.
|
||||||
///
|
///
|
||||||
|
@ -720,7 +720,8 @@ abstract final class KeyEventSimulator {
|
||||||
///
|
///
|
||||||
/// Specify `platform` as one of the platforms allowed in
|
/// Specify `platform` as one of the platforms allowed in
|
||||||
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
||||||
/// system. Defaults to the operating system that the test is running on.
|
/// system. Defaults to "web" on web, and the operating system name based on
|
||||||
|
/// [defaultTargetPlatform] everywhere else.
|
||||||
///
|
///
|
||||||
/// Keys that are down when the test completes are cleared after each test.
|
/// Keys that are down when the test completes are cleared after each test.
|
||||||
///
|
///
|
||||||
|
@ -767,7 +768,8 @@ abstract final class KeyEventSimulator {
|
||||||
///
|
///
|
||||||
/// Specify `platform` as one of the platforms allowed in
|
/// Specify `platform` as one of the platforms allowed in
|
||||||
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
||||||
/// system. Defaults to the operating system that the test is running on.
|
/// system. Defaults to "web" on web, and the operating system name based on
|
||||||
|
/// [defaultTargetPlatform] everywhere else.
|
||||||
///
|
///
|
||||||
/// Returns true if the key event was handled by the framework.
|
/// Returns true if the key event was handled by the framework.
|
||||||
///
|
///
|
||||||
|
@ -811,7 +813,8 @@ abstract final class KeyEventSimulator {
|
||||||
///
|
///
|
||||||
/// Specify `platform` as one of the platforms allowed in
|
/// Specify `platform` as one of the platforms allowed in
|
||||||
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
||||||
/// system. Defaults to the operating system that the test is running on.
|
/// system. Defaults to "web" on web, and the operating system name based on
|
||||||
|
/// [defaultTargetPlatform] everywhere else.
|
||||||
///
|
///
|
||||||
/// Returns true if the key event was handled by the framework.
|
/// Returns true if the key event was handled by the framework.
|
||||||
///
|
///
|
||||||
|
@ -860,7 +863,8 @@ abstract final class KeyEventSimulator {
|
||||||
///
|
///
|
||||||
/// Specify `platform` as one of the platforms allowed in
|
/// Specify `platform` as one of the platforms allowed in
|
||||||
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
||||||
/// system. Defaults to the operating system that the test is running on.
|
/// system. Defaults to "web" on web, and the operating system name based on
|
||||||
|
/// [defaultTargetPlatform] everywhere else.
|
||||||
///
|
///
|
||||||
/// Keys that are down when the test completes are cleared after each test.
|
/// Keys that are down when the test completes are cleared after each test.
|
||||||
///
|
///
|
||||||
|
@ -894,7 +898,8 @@ Future<bool> simulateKeyDownEvent(
|
||||||
///
|
///
|
||||||
/// Specify `platform` as one of the platforms allowed in
|
/// Specify `platform` as one of the platforms allowed in
|
||||||
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
||||||
/// system. Defaults to the operating system that the test is running on.
|
/// system. Defaults to "web" on web, and the operating system name based on
|
||||||
|
/// [defaultTargetPlatform] everywhere else.
|
||||||
///
|
///
|
||||||
/// Returns true if the key event was handled by the framework.
|
/// Returns true if the key event was handled by the framework.
|
||||||
///
|
///
|
||||||
|
@ -922,7 +927,8 @@ Future<bool> simulateKeyUpEvent(
|
||||||
///
|
///
|
||||||
/// Specify `platform` as one of the platforms allowed in
|
/// Specify `platform` as one of the platforms allowed in
|
||||||
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
/// [Platform.operatingSystem] to make the event appear to be from that type of
|
||||||
/// system. Defaults to the operating system that the test is running on.
|
/// system. Defaults to "web" on web, and the operating system name based on
|
||||||
|
/// [defaultTargetPlatform] everywhere else.
|
||||||
///
|
///
|
||||||
/// Returns true if the key event was handled by the framework.
|
/// Returns true if the key event was handled by the framework.
|
||||||
///
|
///
|
||||||
|
|
|
@ -360,4 +360,33 @@ void main() {
|
||||||
|
|
||||||
debugKeyEventSimulatorTransitModeOverride = null;
|
debugKeyEventSimulatorTransitModeOverride = null;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('Key events are simulated using the default target platform', (WidgetTester tester) async {
|
||||||
|
// Regression test for https://github.com/flutter/flutter/issues/133955.
|
||||||
|
final List<RawKeyEvent> events = <RawKeyEvent>[];
|
||||||
|
final FocusNode focusNode = FocusNode();
|
||||||
|
|
||||||
|
await tester.pumpWidget(
|
||||||
|
RawKeyboardListener(
|
||||||
|
focusNode: focusNode,
|
||||||
|
onKey: events.add,
|
||||||
|
child: Container(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
focusNode.requestFocus();
|
||||||
|
await tester.idle();
|
||||||
|
|
||||||
|
await tester.sendKeyDownEvent(LogicalKeyboardKey.shift);
|
||||||
|
expect(events.length, 1);
|
||||||
|
final Type expectedType = isBrowser ? RawKeyEventDataWeb : switch (defaultTargetPlatform) {
|
||||||
|
TargetPlatform.android => RawKeyEventDataAndroid,
|
||||||
|
TargetPlatform.fuchsia => RawKeyEventDataFuchsia,
|
||||||
|
TargetPlatform.iOS => RawKeyEventDataIos,
|
||||||
|
TargetPlatform.linux => RawKeyEventDataLinux,
|
||||||
|
TargetPlatform.macOS => RawKeyEventDataMacOs,
|
||||||
|
TargetPlatform.windows => RawKeyEventDataWindows,
|
||||||
|
};
|
||||||
|
expect(events.first.data.runtimeType, expectedType);
|
||||||
|
}, variant: TargetPlatformVariant.all());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue