87 lines
3.7 KiB
Dart
87 lines
3.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter/rendering.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:timezone/data/latest.dart' as tzdata;
|
|
import 'package:hepan_everyday/features/timetable/week_grid.dart';
|
|
import 'package:hepan_everyday/domain/schedule_engine.dart';
|
|
import 'package:hepan_everyday/domain/app_settings.dart';
|
|
|
|
void main() {
|
|
setUpAll(tzdata.initializeTimeZones);
|
|
for (final scale in [1.0, 2.0]) {
|
|
testWidgets(
|
|
'seven days and full teacher/room fit equal duration cards at scale $scale',
|
|
(tester) async {
|
|
tester.view.physicalSize = const Size(360, 800);
|
|
tester.view.devicePixelRatio = 1;
|
|
addTearDown(tester.view.resetPhysicalSize);
|
|
addTearDown(tester.view.resetDevicePixelRatio);
|
|
final term = Semester(startDate: DateTime(2026, 9, 7), totalWeeks: 1);
|
|
Course c(String id, int day, String teacher, String room) => Course(
|
|
id: id,
|
|
name: '很长的课程名称应当可以省略但点击后显示完整课程名称$id',
|
|
teacher: teacher,
|
|
room: room,
|
|
weekday: day,
|
|
startPeriod: 3,
|
|
endPeriod: 4,
|
|
weeks: {1},
|
|
source: CourseSource.file,
|
|
);
|
|
final events = ScheduleEngine.occurrences([
|
|
c('a', 1, '张晓玲、杨拥军', '品学楼B102'),
|
|
c('b', 7, '李老师', '立人楼教学实验中心B412'),
|
|
], term);
|
|
await tester.pumpWidget(
|
|
MaterialApp(
|
|
home: MediaQuery(
|
|
data: MediaQueryData(
|
|
size: const Size(360, 800),
|
|
textScaler: TextScaler.linear(scale),
|
|
),
|
|
child: Scaffold(
|
|
body: SingleChildScrollView(
|
|
child: WeekGrid(
|
|
events: events,
|
|
monday: term.firstMonday,
|
|
today: term.startDate,
|
|
settings: const AppSettings(),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
await tester.pumpAndSettle();
|
|
expect(tester.getRect(find.text('周一')).left, greaterThanOrEqualTo(0));
|
|
expect(tester.getRect(find.text('周日')).right, lessThanOrEqualTo(360));
|
|
final first = tester.getRect(
|
|
find.bySemanticsLabel('${events.first.course.name},张晓玲、杨拥军,品学楼B102'),
|
|
);
|
|
final last = tester.getRect(
|
|
find.bySemanticsLabel('${events.last.course.name},李老师,立人楼教学实验中心B412'),
|
|
);
|
|
expect(first.height, last.height);
|
|
for (final text in ['张晓玲、杨拥军', '品学楼B102', '李老师', '立人楼教学实验中心B412']) {
|
|
final finder = find.text(text);
|
|
final widget = tester.widget<Text>(finder);
|
|
expect(widget.maxLines, isNull);
|
|
expect(widget.overflow, isNot(TextOverflow.ellipsis));
|
|
final paragraph = tester.renderObject<RenderParagraph>(finder);
|
|
expect(paragraph.didExceedMaxLines, isFalse);
|
|
final rect = tester.getRect(finder);
|
|
final card = text == '张晓玲、杨拥军' || text == '品学楼B102' ? first : last;
|
|
expect(rect.bottom, lessThanOrEqualTo(card.bottom));
|
|
expect(rect.left, greaterThanOrEqualTo(card.left));
|
|
expect(rect.right, lessThanOrEqualTo(card.right));
|
|
}
|
|
expect(tester.takeException(), isNull);
|
|
await tester.ensureVisible(find.text(events.first.course.name));
|
|
await tester.tap(find.text(events.first.course.name));
|
|
await tester.pumpAndSettle();
|
|
expect(find.text(events.first.course.name), findsNWidgets(2));
|
|
},
|
|
);
|
|
}
|
|
}
|