import 'dart:io'; import 'package:fl_clash/common/common.dart'; import 'package:fl_clash/enum/enum.dart'; import 'package:fl_clash/models/models.dart'; import 'package:fl_clash/providers/app.dart'; import 'package:fl_clash/providers/config.dart'; import 'package:fl_clash/providers/database.dart'; import 'package:fl_clash/state.dart'; import 'package:fl_clash/ui/icons/icons.dart'; import 'package:fl_clash/views/resources.dart'; import 'package:fl_clash/widgets/widgets.dart'; import 'package:flutter/services.dart'; import 'package:material_ui/material_ui.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:path/path.dart' hide context; import '../helpers/app_paths.dart'; import '../helpers/context_menu.dart'; import '../helpers/glyph_finders.dart'; import '../helpers/test_app.dart'; import '../helpers/test_database_providers.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); late Directory home; setUpAll(() async { home = Directory.systemTemp.createTempSync('flclash-resources-'); await useAppPaths(home); }); tearDownAll(() { if (home.existsSync()) home.deleteSync(recursive: true); }); // `getFileInfo` stats the file on the real event loop, outside fake-async. Future settle(WidgetTester tester, {int rounds = 1}) async { for (var i = 0; i < rounds; i++) { await tester.runAsync( () => Future.delayed(const Duration(milliseconds: 20)), ); await tester.pump(const Duration(milliseconds: 50)); } } ProviderContainer createContainer({ List iconSets = const [], List ruleProviders = const [], List