Files
plezy/test/focus/focusable_chip_long_press_test.dart

63 lines
1.9 KiB
Dart

import 'dart:ui' show SemanticsAction, Tristate;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:plezy/widgets/focusable_tab_chip.dart';
void main() {
testWidgets('losing focus cancels a pending chip long press', (tester) async {
final firstNode = FocusNode(debugLabel: 'first');
final secondNode = FocusNode(debugLabel: 'second');
addTearDown(firstNode.dispose);
addTearDown(secondNode.dispose);
var longPressed = 0;
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: Row(
children: [
FocusableTabChip(
label: 'First',
isSelected: true,
focusNode: firstNode,
onSelect: () {},
onLongPress: () => longPressed++,
),
FocusableTabChip(label: 'Second', isSelected: false, focusNode: secondNode, onSelect: () {}),
],
),
),
),
);
firstNode.requestFocus();
await tester.pump();
await tester.sendKeyDownEvent(LogicalKeyboardKey.enter);
secondNode.requestFocus();
await tester.pump(const Duration(milliseconds: 600));
await tester.sendKeyUpEvent(LogicalKeyboardKey.enter);
expect(longPressed, 0);
});
testWidgets('tab chips expose one operable node with selected state', (tester) async {
final semantics = tester.ensureSemantics();
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: FocusableTabChip(label: 'Selected tab', isSelected: true, onSelect: () {}),
),
),
);
final node = tester.getSemantics(find.bySemanticsLabel('Selected tab')).getSemanticsData();
expect(node.flagsCollection.isButton, isTrue);
expect(node.flagsCollection.isSelected, Tristate.isTrue);
expect(node.hasAction(SemanticsAction.tap), isTrue);
semantics.dispose();
});
}