test(harmony): 判据按 pi 复核意见补强 —— 手写色登记表、玻璃叠用形状、按标题取小节、遮罩必须被用、废弃 API 清单从 SDK 生成
pi 逐行读了 `cross-client-theme.test.mjs` 与 `Theme.ets` 后指出五处(第一处是真缺口), 外加一条建议。全部处理,并且**每一处都用变异验证过**。 ## 一(真缺口):枚举 11 个"必须是系统资源"的名字,挡不住第 12 个新写死的手写色 `static readonly brandSecondary: string = '#123456'` 这种新增**三条判据都碰不到**: A(不在名单里)、B(六位、不是半透明)、裸色值那条(只管 `pages/`)。 原理与当初 14 处 Google 色逃出去是同一条 —— **枚举挡实例,类才挡漂移**, 只是这次枚举的单位是**名字**。补 `A2` 条: - 枚举 `Theme.ets` 里所有 `static readonly X: string = '#……'`,未登记的 → 红; - 名单里已不存在的名字 → 红(名单不能烂成化石); - `Theme.ets` 里的「手写色登记表」段必须逐个列出这些名字(理由不能只存在于记忆里); - 自检:把一个**新的**手写色塞进源码字符串,确认这条抓得到。 `Theme.ets` 因此新增登记表(17 项,每项一行理由,按品牌 / 业务语义 / 档位胶囊分组)。 变异:Theme.ets 加 `brandSecondary` → 红。 ## 二:C 的"玻璃只有一处"**说错了自己断言的东西** `assert.equal(glassCalls.length, 1)` 断言的是"全仓共一处",**不是**"没有嵌套": 同页两个**并列**玻璃面(没问题)会让它红,真嵌套它没在判。P5 正是悬浮玻璃导航, 到时若把 1 改成 2 就等于不判。改成形状判据: - 收集每个调用点所作用的**组件块**(按括号配对回溯;注意 ArkUI 修饰符是链式的, `X.blur(A).blur(B)` 前面是 `)` 不是 `}` —— 第一版只看一个字符,对这种写法**静默失效**, 是判据自检抓出来的); - 判两种叠法:同一组件上叠多次(同一块)、以及套在另一层玻璃的子树里; - 每一处玻璃都要在 `GLASS_REGISTRY` 里登记(附一句为什么),名单里的位置若已不存在 → 红。 变异:链式叠两层 → 红;通信页多开一处未登记玻璃 → 红;导航条块内嵌玻璃 → 红。 ## 三:文档小节用 `indexOf('有意差异')` 会**拿错段落** 别的段落正文里出现这四个字,切片就从那里开始,后面所有断言都在**别的段落**上判。 改成**按标题**定位(正则匹配 `^#{2,4}…有意差异…$`),并加了表头列名断言 (WebUI / 鸿蒙 / 为什么)—— 拿错段落时表头不会是这个形状,于是它自己会红。 顺带修掉一个**我自己的**同类毛病:品牌色那行原来用"关键词 + 80 字符窗口"判, 窗口宽度在赌表格单元格字符数(该行两格之和 > 80)。改成**按行取**那一行再断言。 另外把偏移算术的切片换成**按行**切片(偏移差一个字符就会把最后一行拦腰截断, 现象是"品牌色那行只剩 57 字符"这种看着像文案、其实像切片的怪事)。 变异:文件前面插入含「有意差异」的段落 → 仍绿(按标题定位生效); 再改坏真表里的品牌色行 → 红(确实读的是那一张表)。 ## 四:`Theme.overlay` 只判了"存在",没判"被用" 没使用点的令牌是自证。补断言:它必须在 `Theme.ets` **之外**有真实使用点 (实测 `SettingsPage.ets` / `MailDetailPage.ets` 两处自绘弹层在用), 并把 `overlayColor`/`overlayAlpha` 消失的理由写进 §7.12 —— 否则下一个人会当成漏改补回来。 ## 五:材质档次是这次替换里唯一"判据绿但可能观感错"的地方 `COMPONENT_THICK` 的依据(对 THIN / BACKGROUND_* / ULTRA_THICK 的取舍)写进 §7.12, 并把"材质档次在导航条上的实际观感"列为**模拟器起来后第一个要看的项**(间距是数字,材质是判断)。 ## 六(建议):废弃 API 判据**类化** —— 清单从 SDK 生成 原来是手写"不得再用全局 `promptAction.showToast`"(只挡已踩过的那个)。 现在从 SDK 生成:顶层(花括号深度 0)被标 `@deprecated` 的 `declare function` —— 实测 68 个名字(含 `animateTo` / `getContext` / `px2vp`),配一份**空**的 allow-list。 深度判定是必要的:`declare namespace fileIo { declare function open() }` 里的 `open` 是命名空间成员,算进来会造一堆假红。只算全局调用(排除 `x.name(`)。 变异:调 `px2vp(10)` → 红;`this.px2vp(10)`(成员调用)→ 绿(假阳性自检)。 ## 验证 `hvigorw assembleHap` BUILD SUCCESSFUL;`npm test` 退出码 0 (11 个判据文件全绿 + vitest 258/258)。cross-client-theme 13 → 14 条,harmony-system-api 4 → 5 条。
This commit is contained in:
@ -501,6 +501,21 @@ deb 也不必从 targets 里摘。已写进 `client/electron/BUILD.md`(含排
|
||||
| 遮罩 | 自声明 `--bg-scrim` + `--bg-dim` 两段式 | 系统 `sys.color.ohos_id_color_mask_regular` | 遮罩要随主题换向(浅色洗白/深色压黑),这件事系统已经做了 |
|
||||
| **品牌色** | `--c-blue-600: 37 99 235` | `Theme.accent = '#2563EB'` | **不允许差异** —— 两个客户端是同一个产品 |
|
||||
|
||||
**关于 `overlayColor` / `overlayAlpha` 消失**(pi 要求把删除理由记在这里,否则下一个人会当成漏改补回来):
|
||||
鸿蒙这边的模态走**系统弹窗**(`bindSheet` / 自绘 `Stack` 只做位置,遮罩本身用系统遮罩色),
|
||||
所以"遮罩色 + 遮罩透明度"这两个自定值**整类**都不需要了 —— 系统遮罩色自带随主题换向
|
||||
(浅色洗白 / 深色压黑)。保留的是**一个** `Theme.overlay`(值 = `sys.color.ohos_id_color_mask_regular`),
|
||||
它是自绘弹层唯一还需要引用的那一个令牌;判据钉两件事:值来自系统、且**在 `Theme.ets` 之外确有使用点**
|
||||
(只有声明没有使用 = 死令牌,pi 点过这条)。
|
||||
|
||||
**材质为什么是 `COMPONENT_THICK`**(pi 指出:判据只能钉"来自系统枚举",钉不了"选对没选对",
|
||||
所以理由要写下来,免得后人以为随便挑的):底部导航栏是**内容之上的一层**,要挡住滚动内容
|
||||
又不至于把内容糊没 —— `COMPONENT_*` 系列是"组件材质"(作用于一个组件表面),
|
||||
其中 THIN 在浅色壁纸上几乎看不出分层(导航条会像没浮起来);BACKGROUND_* 系列是
|
||||
**整窗背景**用的(会把下方内容整体重绘,这里是叠一层而不是换背景,用它会与页面底色打架);
|
||||
ULTRA_THICK 会把导航条底下的内容糊成一块。所以取 COMPONENT_THICK。
|
||||
**这条只有真机能判**,见下面「模拟器起来后第一个要看的项」。
|
||||
|
||||
### 7.13 系统方案替换(第一批)+ 跨端判据从"取值"改"意图"
|
||||
|
||||
**改了什么**(鸿蒙侧):
|
||||
@ -604,7 +619,7 @@ SDK 里写着:`@ohos.promptAction.d.ts` 的全局 `showToast` 标 `@deprecated
|
||||
`COMM_TABS[1.5]` → `undefined`(表现是"点哪都不亮")。范围检查挡不住非整数,
|
||||
已加 `Number.isInteger`。
|
||||
|
||||
**未验**:底部/内部页签在真机上的观感、悬浮加号的位置、徽标与文字的排版 ——
|
||||
**未验**(**模拟器起来后第一个要看的项**:§7.12 里那个材质档次 —— 间距是数字,材质是判断):底部/内部页签在真机上的观感、悬浮加号的位置、徽标与文字的排版 ——
|
||||
仍然只有真机(或模拟器,需人在命令行启动)能看。已验证:构建成功、28 条判据全绿、
|
||||
六种变异都能判红。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user