Skip to content

Commit 7b62033

Browse files
committed
test(popup): 补齐应用示例展开态 Golden
1 parent a954bfa commit 7b62033

9 files changed

Lines changed: 76 additions & 19 deletions

specs/020-popup-demo-alignment/acceptance.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
- Flutter 3.32.0 / latest 3.47.0 严格 analyze:均为 0 error / 0 warning。
66
- Popup 完整组件回归在本轮 Flutter 3.32.0 复跑 169 项通过;当前覆盖率调度器口径下生产源码 `519/532 = 97.56%`
77
- Popup Demo 功能测试:两个版本各 4 项通过。
8-
- Flutter 3.32.0 Linux 明暗主题 Golden:更新后立即无更新参数复跑,2 项完整页面与 10 项五方向展开态共 12 项通过;固定 375dp、DPR 1、受控 Roboto/CJK/TIcons 字体,展开态截取包含蒙层与 Popup Route 的 `Overlay`,未保留缺字符号。
8+
- Flutter 3.32.0 Linux 明暗主题 Golden:更新后立即无更新参数复跑,2 项完整页面与 14 项全部七个公开实例展开态共 16 项通过;固定 375dp、DPR 1、受控 Roboto/CJK/TIcons 字体,展开态截取包含蒙层与 Popup Route 的 `Overlay`,未保留缺字符号。
99
- 示例代码生成 check、回归调度器自测与 `git diff --check` 通过。
1010

1111
## 人工证据

specs/020-popup-demo-alignment/plan.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@
2424
## 验证策略
2525

2626
- 双版本执行 Popup 组件测试、Demo 功能测试与严格 analyze。
27-
- Flutter 3.32.0 Linux 生成并复跑明暗主题完整页面 Golden,以及顶部、左侧、居中、底部、右侧五个基础方向的展开态 Golden。
27+
- Flutter 3.32.0 Linux 生成并复跑明暗主题完整页面 Golden,以及顶部、左侧、居中、底部、右侧五个基础方向和两个应用示例的展开态 Golden。
2828
-`lib/src/components/popup/` 过滤 LCOV,要求 LH/LF 不低于 95%。
2929
- 运行生成器 check、调度器自测和 `git diff --check`

specs/020-popup-demo-alignment/spec.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Popup Flutter Demo 虽覆盖了小程序公开页面的 7 个场景,但分组
1010
- 基础实例按顶部、左侧、居中、底部、右侧排列。
1111
- 对齐 5 个基础实例和 2 个应用实例的文案、尺寸、头部与关闭按钮结构。
1212
- Popup 默认贴合屏幕边缘,不主动避让系统安全区;需要避让时由调用方显式开启或在内容中组合 `SafeArea`
13-
- 增加独立的双版本功能测试,以及 Flutter 3.32.0 Linux 明暗主题完整页面与五方向展开态 Golden,并接入集中式 CI 调度器。
13+
- 增加独立的双版本功能测试,以及 Flutter 3.32.0 Linux 明暗主题完整页面与全部七个公开实例展开态 Golden,并接入集中式 CI 调度器。
1414

1515
## 非目标
1616

@@ -32,7 +32,7 @@ Popup Flutter Demo 虽覆盖了小程序公开页面的 7 个场景,但分组
3232

3333
- [x] 分组、说明、实例数量、顺序和按钮文案由 Demo Widget 测试精确断言。
3434
- [x] 基础底部与两个应用实例的关键结构、尺寸和关闭交互通过测试。
35-
- [x] 明暗主题完整页面及五个基础方向展开态 Golden 在 Flutter 3.32.0 Linux 可复现。
35+
- [x] 明暗主题完整页面及全部七个公开实例展开态 Golden 在 Flutter 3.32.0 Linux 可复现。
3636
- [x] 已用微信开发者工具实际页截图与 Flutter Golden 比对,公开矩阵一致。
3737
- [x] Popup 组件测试、覆盖率目标、Demo 功能测试与 Golden 均进入 CI 实际调度入口。
3838
- [x] Popup 生产源码行覆盖率不低于 95%。

specs/020-popup-demo-alignment/tasks.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
- [x] 删除公开嵌套示例
77
- [x] 新增 Demo 结构与交互测试
88
- [x] 登记 Popup 组件回归、覆盖率、功能测试与视觉回归
9-
- [x] Flutter 3.32.0 Linux 生成并无更新参数复跑明暗主题完整页面与五方向展开态 Golden
9+
- [x] Flutter 3.32.0 Linux 生成并无更新参数复跑明暗主题完整页面与全部七个公开实例展开态 Golden
1010
- [x] Flutter 3.32.0 与 latest 完整验证
37.8 KB
Loading
39.1 KB
Loading
32.8 KB
Loading
34.1 KB
Loading

tdesign-component/example/test/popup_demo_golden_test.dart

Lines changed: 71 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,93 @@ import 'package:flutter_test/flutter_test.dart';
44
import 'demo_page_test_utils.dart';
55
import 'popup_demo_test_spec.dart';
66

7+
class _OpenedPopupGoldenCase {
8+
const _OpenedPopupGoldenCase({
9+
required this.name,
10+
required this.triggerKey,
11+
this.visibleText,
12+
this.visibleTextCount = 1,
13+
this.tooltip,
14+
});
15+
16+
final String name;
17+
final String triggerKey;
18+
final String? visibleText;
19+
final int visibleTextCount;
20+
final String? tooltip;
21+
}
22+
723
void main() {
824
registerDemoGoldenTests(popupDemoPageTestSpec);
925

10-
const basicPopupCases = {
11-
'top': ('popup-top-trigger', '顶部弹出'),
12-
'left': ('popup-left-trigger', '左侧弹出'),
13-
'center': ('popup-center-trigger', '中间弹出'),
14-
'bottom': ('popup-bottom-trigger', '底部弹出'),
15-
'right': ('popup-right-trigger', '右侧弹出'),
16-
};
26+
const openedPopupCases = [
27+
_OpenedPopupGoldenCase(
28+
name: 'basic_top',
29+
triggerKey: 'popup-top-trigger',
30+
visibleText: '顶部弹出',
31+
visibleTextCount: 2,
32+
),
33+
_OpenedPopupGoldenCase(
34+
name: 'basic_left',
35+
triggerKey: 'popup-left-trigger',
36+
visibleText: '左侧弹出',
37+
visibleTextCount: 2,
38+
),
39+
_OpenedPopupGoldenCase(
40+
name: 'basic_center',
41+
triggerKey: 'popup-center-trigger',
42+
visibleText: '中间弹出',
43+
visibleTextCount: 2,
44+
),
45+
_OpenedPopupGoldenCase(
46+
name: 'basic_bottom',
47+
triggerKey: 'popup-bottom-trigger',
48+
visibleText: '底部弹出',
49+
visibleTextCount: 2,
50+
),
51+
_OpenedPopupGoldenCase(
52+
name: 'basic_right',
53+
triggerKey: 'popup-right-trigger',
54+
visibleText: '右侧弹出',
55+
visibleTextCount: 2,
56+
),
57+
_OpenedPopupGoldenCase(
58+
name: 'application_with_title',
59+
triggerKey: 'popup-with-title-trigger',
60+
visibleText: '标题文字',
61+
),
62+
_OpenedPopupGoldenCase(
63+
name: 'application_custom_close',
64+
triggerKey: 'popup-custom-close-trigger',
65+
tooltip: '关闭',
66+
),
67+
];
1768

1869
for (final mode in [ThemeMode.light, ThemeMode.dark]) {
19-
for (final entry in basicPopupCases.entries) {
20-
final placement = entry.key;
21-
final popupCase = entry.value;
22-
testWidgets('popup basic $placement ${mode.name} opened golden', (
70+
for (final popupCase in openedPopupCases) {
71+
testWidgets('popup ${popupCase.name} ${mode.name} opened golden', (
2372
tester,
2473
) async {
2574
await pumpDemoPageAtPhoneViewport(tester, popupDemoPageTestSpec, mode);
2675

27-
final trigger = find.byKey(ValueKey(popupCase.$1));
76+
final trigger = find.byKey(ValueKey(popupCase.triggerKey));
2877
expect(trigger, findsOneWidget);
2978
await tester.tap(trigger);
3079
await tester.pumpAndSettle();
3180

32-
expect(find.text(popupCase.$2), findsAtLeastNWidgets(2));
81+
if (popupCase.visibleText case final visibleText?) {
82+
expect(
83+
find.text(visibleText),
84+
findsNWidgets(popupCase.visibleTextCount),
85+
);
86+
}
87+
if (popupCase.tooltip case final tooltip?) {
88+
expect(find.byTooltip(tooltip), findsOneWidget);
89+
}
3390
await expectLater(
3491
find.byType(Overlay),
3592
matchesGoldenFile(
36-
'goldens/popup_basic_${placement}_opened_${mode.name}.png',
93+
'goldens/popup_${popupCase.name}_opened_${mode.name}.png',
3794
),
3895
);
3996
await disposeDemoPage(tester);

0 commit comments

Comments
 (0)