a76724b385
新增 DatePickerField 日期选择器与 date_util;可搜索下拉 SearchableOptionField 支持内联新建选项;入库/出库录单表单、商品页、财务页、app_shell 导航相应调整。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
57 lines
2.1 KiB
Dart
57 lines
2.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:jiu_client/core/utils/date_util.dart';
|
|
import 'package:jiu_client/widgets/date_picker_field.dart';
|
|
|
|
void main() {
|
|
group('date_util', () {
|
|
test('formatYmd 补零', () {
|
|
expect(formatYmd(DateTime(2026, 6, 9)), '2026-06-09');
|
|
expect(formatYmd(DateTime(2026, 12, 31)), '2026-12-31');
|
|
});
|
|
test('parseYmd 解析/容错', () {
|
|
expect(parseYmd('2026-06-19'), DateTime(2026, 6, 19));
|
|
expect(parseYmd('2026-06-19T08:00:00'), DateTime(2026, 6, 19));
|
|
expect(parseYmd(null), isNull);
|
|
expect(parseYmd(''), isNull);
|
|
});
|
|
test('composeYmd 正常组合', () {
|
|
expect(composeYmd(2026, 6, 15), '2026-06-15');
|
|
});
|
|
test('composeYmd 把超界的日 clamp 回当月最大值', () {
|
|
expect(composeYmd(2026, 2, 31), '2026-02-28'); // 平年 2 月
|
|
expect(composeYmd(2024, 2, 31), '2024-02-29'); // 闰年 2 月
|
|
expect(composeYmd(2026, 4, 31), '2026-04-30'); // 4 月 30 天
|
|
});
|
|
test('composeYmd 任一为空返回 null', () {
|
|
expect(composeYmd(null, 6, 15), isNull);
|
|
expect(composeYmd(2026, null, 15), isNull);
|
|
expect(composeYmd(2026, 6, null), isNull);
|
|
});
|
|
});
|
|
|
|
group('DatePickerField', () {
|
|
testWidgets('渲染三个年/月/日下拉框', (tester) async {
|
|
await tester.pumpWidget(MaterialApp(
|
|
home: Scaffold(
|
|
body: DatePickerField(value: '2026-06-19', onChanged: (_) {}),
|
|
),
|
|
));
|
|
await tester.pumpAndSettle();
|
|
expect(find.byType(DropdownMenu<int>), findsNWidgets(3));
|
|
});
|
|
|
|
testWidgets('初始值回显到三个下拉框', (tester) async {
|
|
await tester.pumpWidget(MaterialApp(
|
|
home: Scaffold(
|
|
body: DatePickerField(value: '2026-06-19', onChanged: (_) {}),
|
|
),
|
|
));
|
|
await tester.pumpAndSettle();
|
|
expect(find.widgetWithText(DropdownMenu<int>, '2026'), findsOneWidget);
|
|
expect(find.widgetWithText(DropdownMenu<int>, '6'), findsOneWidget);
|
|
expect(find.widgetWithText(DropdownMenu<int>, '19'), findsOneWidget);
|
|
});
|
|
});
|
|
}
|