Files
plezy/test/focus/focus_memory_tracker_test.dart
T

61 lines
1.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:plezy/focus/focus_memory_tracker.dart';
void main() {
testWidgets('tracks and restores focus without a rebuild callback', (tester) async {
final tracker = FocusMemoryTracker(debugLabelPrefix: 'test');
addTearDown(tracker.dispose);
final first = tracker.get('first');
final second = tracker.get('second');
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: Column(
children: [
Focus(focusNode: first, child: const SizedBox(width: 10, height: 10)),
Focus(focusNode: second, child: const SizedBox(width: 10, height: 10)),
],
),
),
),
);
first.requestFocus();
await tester.pump();
expect(tracker.lastFocusedKey, 'first');
expect(tracker.isFocused('first'), isTrue);
second.requestFocus();
await tester.pump();
expect(tracker.lastFocusedKey, 'second');
expect(tracker.isFocused('first'), isFalse);
expect(tracker.isFocused('second'), isTrue);
first.requestFocus();
await tester.pump();
second.unfocus();
expect(tracker.restoreFocus(), isTrue);
await tester.pump();
expect(first.hasFocus, isTrue);
});
testWidgets('uses the fallback key before any item has been focused', (tester) async {
final tracker = FocusMemoryTracker(debugLabelPrefix: 'test');
addTearDown(tracker.dispose);
final fallback = tracker.get('fallback');
await tester.pumpWidget(
MaterialApp(
home: Focus(focusNode: fallback, child: const SizedBox(width: 10, height: 10)),
),
);
expect(tracker.restoreFocus(fallbackKey: 'fallback'), isTrue);
await tester.pump();
expect(fallback.hasFocus, isTrue);
expect(tracker.lastFocusedKey, 'fallback');
});
}