import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:spotiflac_android/l10n/l10n.dart'; import 'package:spotiflac_android/providers/repo_provider.dart'; import 'package:spotiflac_android/screens/repo_tab.dart'; import 'package:spotiflac_android/theme/app_theme.dart'; import 'package:spotiflac_android/theme/mornye_theme.dart'; import 'package:spotiflac_android/widgets/animation_utils.dart'; import 'package:spotiflac_android/widgets/extension_row.dart'; class _LoadingRepo extends RepoNotifier { @override RepoState build() => const RepoState( isLoading: true, isInitialized: true, registryUrl: 'https://example.invalid/registry.json', ); @override Future initialize(String cacheDir) async {} } void main() { for (final width in [320.0, 1024.0]) { for (final brightness in Brightness.values) { testWidgets('Material loading rows fit at $width in $brightness', ( tester, ) async { tester.view.physicalSize = Size(width, 1200); tester.view.devicePixelRatio = 1; addTearDown(tester.view.reset); for (final skeleton in const [ TrackListSkeleton(itemCount: 3), AlbumTrackListSkeleton(itemCount: 3), HomeSearchSkeleton(), ]) { await tester.pumpWidget( MaterialApp( theme: brightness == Brightness.light ? AppTheme.light() : AppTheme.dark(), home: Scaffold(body: skeleton), ), ); await tester.pump(const Duration(milliseconds: 100)); expect(tester.takeException(), isNull); } await tester.pumpWidget(const SizedBox.shrink()); }); } for (final mornye in [false, true]) { testWidgets('store skeleton fits at $width with Mornye=$mornye', ( tester, ) async { tester.view.physicalSize = Size(width, 1200); tester.view.devicePixelRatio = 1; addTearDown(tester.view.reset); const paths = MethodChannel('plugins.flutter.io/path_provider'); final messenger = TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger; messenger.setMockMethodCallHandler( paths, (_) async => '/tmp/spotiflac-loading-test', ); addTearDown(() => messenger.setMockMethodCallHandler(paths, null)); await tester.pumpWidget( ProviderScope( overrides: [repoProvider.overrideWith(_LoadingRepo.new)], child: MaterialApp( theme: mornye ? MornyeTheme.build(Brightness.dark) : AppTheme.light(), localizationsDelegates: AppLocalizations.localizationsDelegates, supportedLocales: AppLocalizations.supportedLocales, home: const RepoTab(), ), ), ); await tester.pump(const Duration(milliseconds: 100)); expect(find.byType(ExtensionRow), findsWidgets); expect(tester.takeException(), isNull); await tester.pumpWidget(const SizedBox.shrink()); }); } } }