import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:spotiflac_android/l10n/app_localizations.dart'; import 'package:spotiflac_android/screens/settings/about_page.dart'; import 'package:spotiflac_android/screens/settings/settings_tab.dart'; import 'package:spotiflac_android/theme/app_theme.dart'; void main() { setUp(() { SharedPreferences.setMockInitialValues({}); }); Future pumpSettings(WidgetTester tester) async { await tester.pumpWidget( ProviderScope( child: MaterialApp( theme: AppTheme.light(), localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, home: const Scaffold(body: SettingsTab()), ), ), ); await tester.pumpAndSettle(); } testWidgets('finds controls nested inside a settings page', (tester) async { await pumpSettings(tester); await tester.enterText(find.byType(TextField), 'parallel downloads'); await tester.pump(); expect(find.text('Concurrent downloads'), findsOneWidget); expect(find.text('Download'), findsOneWidget); expect( find.text('No settings found for "parallel downloads"'), findsNothing, ); }); testWidgets( 'returning from a search result does not restore keyboard focus', (tester) async { await pumpSettings(tester); final searchField = find.byType(TextField); await tester.tap(searchField); await tester.enterText(searchField, 'build number'); await tester.pump(); final focusedField = tester.widget(searchField); expect(focusedField.focusNode?.hasFocus, isTrue); expect(find.text('Version'), findsOneWidget); await tester.tap(find.text('Version')); await tester.pumpAndSettle(); expect(find.byType(AboutPage), findsOneWidget); await tester.pageBack(); await tester.pumpAndSettle(); final restoredField = tester.widget(find.byType(TextField)); expect(restoredField.focusNode?.hasFocus, isFalse); expect(tester.testTextInput.isVisible, isFalse); expect(find.text('Version'), findsOneWidget); }, ); }