Files
TPSchedule/mobile/test/widgets/tablet_layout_test.dart
T

111 lines
4.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:timezone/data/latest.dart' as tzdata;
import 'package:hepan_everyday/app/hepan_app.dart';
import 'package:hepan_everyday/features/timetable/week_grid.dart';
import 'package:hepan_everyday/features/exams/exams_page.dart';
import 'package:hepan_everyday/features/profile/profile_page.dart';
import 'package:hepan_everyday/widgets/glass_dock.dart';
import 'package:hepan_everyday/features/profile/settings_page.dart';
import 'package:hepan_everyday/features/feedback/feedback_page.dart';
import 'navigation_test.dart' show uiController;
void main() {
setUpAll(tzdata.initializeTimeZones);
for (final size in [const Size(800, 1280), const Size(1280, 800)]) {
testWidgets('tablet $size fits seven days and limits reading width', (
tester,
) async {
tester.view.devicePixelRatio = 1;
tester.view.physicalSize = size;
addTearDown(tester.view.resetPhysicalSize);
addTearDown(tester.view.resetDevicePixelRatio);
final controller = uiController();
await controller.initialize();
await controller.showDemo();
await tester.pumpWidget(HepanApp(controller: controller));
await tester.pumpAndSettle();
expect(tester.takeException(), isNull);
expect(tester.getRect(find.text('周一')).left, greaterThan(0));
expect(tester.getRect(find.text('周日')).right, lessThan(size.width));
final monday = tester.widget<Text>(find.text('周一'));
expect(monday.style!.fontSize, greaterThanOrEqualTo(12));
expect(tester.getSize(find.byType(GlassDock)).width, 300);
expect(tester.getSize(find.byType(GlassDock)).height, 58);
await tester.drag(find.text('周三'), const Offset(-160, 0));
await tester.pumpAndSettle();
expect(find.text('第 2 周'), findsOneWidget);
await tester.tap(find.byIcon(Icons.assignment_rounded));
await tester.pumpAndSettle();
expect(
tester.getSize(find.byType(ExamsPage)).width,
lessThanOrEqualTo(840),
);
await tester.tap(find.byIcon(Icons.person_rounded));
await tester.pumpAndSettle();
expect(
tester.getSize(find.byType(ProfilePage)).width,
lessThanOrEqualTo(840),
);
expect(tester.takeException(), isNull);
await tester.tap(find.byIcon(Icons.calendar_month_rounded));
await tester.pumpAndSettle();
expect(find.text('第 2 周'), findsOneWidget);
tester.view.physicalSize = const Size(480, 800);
await tester.pumpAndSettle();
expect(tester.getSize(find.byType(GlassDock)).width, 264);
expect(find.text('第 2 周'), findsOneWidget);
expect(
tester.getRect(find.byType(WeekGrid)).right,
lessThanOrEqualTo(480),
);
expect(tester.takeException(), isNull);
controller.dispose();
});
}
testWidgets(
'wide settings and feedback remain centered and usable with large text',
(tester) async {
tester.view.devicePixelRatio = 1;
tester.view.physicalSize = const Size(1280, 800);
addTearDown(tester.view.resetPhysicalSize);
addTearDown(tester.view.resetDevicePixelRatio);
final controller = uiController();
await controller.initialize();
await tester.pumpWidget(
MaterialApp(
home: MediaQuery(
data: const MediaQueryData(
size: Size(1280, 800),
textScaler: TextScaler.linear(1.5),
),
child: SettingsPage(controller: controller),
),
),
);
await tester.pumpAndSettle();
expect(tester.getSize(find.byType(ListView)).width, 760);
expect(tester.getRect(find.byType(ListView)).center.dx, 640);
expect(tester.takeException(), isNull);
await tester.pumpWidget(
MaterialApp(
home: MediaQuery(
data: const MediaQueryData(
size: Size(1280, 800),
textScaler: TextScaler.linear(1.5),
),
child: const FeedbackPage(),
),
),
);
await tester.pumpAndSettle();
expect(tester.getSize(find.byType(ListView)).width, 760);
expect(tester.takeException(), isNull);
await tester.enterText(find.byKey(const Key('feedback-message')), '平板反馈');
expect(find.text('平板反馈'), findsOneWidget);
controller.dispose();
},
);
}