• Bruno Leroux's avatar
    [flutter_test] Change KeyEventSimulator default transit mode (#143847) · 8ade81fb
    Bruno Leroux authored
    ## Description
    
    This PRs changes the default value transit mode for key event simulation.
    
    The default transit mode for key event simulation is currently `KeyDataTransitMode.rawKeyData` while on the framework side `KeyDataTransitMode.keyDataThenRawKeyData` is the preferred transit mode.
    
    `KeyDataTransitMode.keyDataThenRawKeyData` is more accurate and can help detect issues.
    
    For instance the following test will fail with `KeyDataTransitMode.rawKeyData` because raw keyboard logic for modifier keys is less accurate:
    
    ```dart
      testWidgets('Press control left once', (WidgetTester tester) async {
        debugKeyEventSimulatorTransitModeOverride = KeyDataTransitMode.keyDataThenRawKeyData;
    
        final List<KeyEvent> events = <KeyEvent>[];
        final FocusNode focusNode = FocusNode();
        addTearDown(focusNode.dispose);
    
        await tester.pumpWidget(
          Focus(
            focusNode: focusNode,
            autofocus: true,
            onKeyEvent: (_, KeyEvent event) {
              events.add(event);
              return KeyEventResult.handled;
            },
            child: Container(),
          ),
        );
    
        await simulateKeyDownEvent(LogicalKeyboardKey.controlLeft);
    
        // This will fail when transit mode is KeyDataTransitMode.rawKeyData
        // because a down event for controlRight is synthesized.
        expect(events.length, 1);
    
        debugKeyEventSimulatorTransitModeOverride = null;
      });
    ```
    
    And the following this test is ok with `KeyDataTransitMode.rawKeyData` but rightly fails with `KeyDataTransitMode.keyDataThenRawKeyData`:
    
    ```dart
      testWidgets('Simulates consecutive key down events', (WidgetTester tester) async {
        debugKeyEventSimulatorTransitModeOverride = KeyDataTransitMode.rawKeyData;
    
        // Simulating several key down events without key up in between is tolerated
        // when transit mode is KeyDataTransitMode.rawKeyData, it will trigger an
        // assert on KeyDataTransitMode.keyDataThenRawKeyData.
        await simulateKeyDownEvent(LogicalKeyboardKey.arrowDown);
        await simulateKeyDownEvent(LogicalKeyboardKey.arrowDown);
    
        debugKeyEventSimulatorTransitModeOverride = null;
      });
    ```
    
    ## Related Issue
    
    Related to https://github.com/flutter/flutter/issues/143845
    
    ## Tests
    
    Adds two tests.
    8ade81fb
Name
Last commit
Last update
..
_binding_io.dart Loading commit data...
_binding_web.dart Loading commit data...
_goldens_io.dart Loading commit data...
_goldens_web.dart Loading commit data...
_matchers_io.dart Loading commit data...
_matchers_web.dart Loading commit data...
accessibility.dart Loading commit data...
animation_sheet.dart Loading commit data...
binding.dart Loading commit data...
controller.dart Loading commit data...
deprecated.dart Loading commit data...
event_simulation.dart Loading commit data...
finders.dart Loading commit data...
frame_timing_summarizer.dart Loading commit data...
goldens.dart Loading commit data...
image.dart Loading commit data...
matchers.dart Loading commit data...
mock_canvas.dart Loading commit data...
mock_event_channel.dart Loading commit data...
nonconst.dart Loading commit data...
platform.dart Loading commit data...
recording_canvas.dart Loading commit data...
restoration.dart Loading commit data...
stack_manipulation.dart Loading commit data...
test_async_utils.dart Loading commit data...
test_compat.dart Loading commit data...
test_default_binary_messenger.dart Loading commit data...
test_exception_reporter.dart Loading commit data...
test_pointer.dart Loading commit data...
test_text_input.dart Loading commit data...
test_text_input_key_handler.dart Loading commit data...
test_vsync.dart Loading commit data...
tree_traversal.dart Loading commit data...
widget_tester.dart Loading commit data...
window.dart Loading commit data...