import 'dart:io' show File; import 'package:actors/actors.dart'; import 'package:flutter/foundation.dart' show TargetPlatform, debugDefaultTargetPlatformOverride; import 'package:drift/native.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mews/application/actors/fetch_actor.dart'; import 'package:mews/application/controllers/browser_controller.dart' show BrokenPage, LoadFailed; import 'package:mews/database/database.dart'; import 'package:mews/l10n/strings.dart'; import 'package:mews/mews/document.dart'; import 'package:mews/mews/parser.dart'; import 'package:mews/application/internal_pages.dart'; import 'package:mews/presentation/app.dart'; import 'package:mews/presentation/reader/address_bar.dart'; import 'package:mews/presentation/reader/swipe_navigator.dart'; const pageSource = '''
Notes on old phones.
'''; /// Serves pages from an in-memory map without network or isolates, so /// navigation tests are deterministic. Cached pages parse back from their /// cached source, like the real actor does for revalidation. class _FakeFetch implements ActorHalf a page & more');
await tester.pumpAndSettle();
expect(find.textContaining('markup error'), findsOneWidget);
await tester.tap(find.textContaining('Show page text'));
await tester.pumpAndSettle();
expect(find.textContaining('Half a page & more'), findsOneWidget);
});
testWidgets('shows the load-failed error page', (tester) async {
await pumpApp(tester);
deps.browser.error.value = const LoadFailed();
await tester.pumpAndSettle();
expect(find.textContaining('could not be loaded'), findsOneWidget);
expect(find.textContaining('Try again'), findsOneWidget);
});
testWidgets('the settings page changes presentation and keeps its place',
(tester) async {
await pumpApp(tester);
// Settings opens from the left address bar icon.
await tester.tap(find.byIcon(Icons.tune));
await tester.pumpAndSettle();
expect(deps.browser.currentPage.value?.url, InternalPages.settingsUrl);
// Rendered like a Mews page with the option groups.
expect(find.text('Settings'), findsOneWidget);
expect(find.text('Typeface'), findsOneWidget);
expect(find.text('Theme'), findsOneWidget);
expect(find.text('Colors'), findsOneWidget);
expect(find.text('Library'), findsOneWidget);
// Tapping a theme link applies it and stays on the settings page; the
// lower sections scroll into view first.
Future No entries here.Plain