diff --git a/crates/app-iced/src/pages/appearance/section/accent.rs b/crates/app-iced/src/pages/appearance/section/accent.rs index 676cad5..3944737 100644 --- a/crates/app-iced/src/pages/appearance/section/accent.rs +++ b/crates/app-iced/src/pages/appearance/section/accent.rs @@ -212,3 +212,24 @@ fn visible(ch: char) -> String { format!("U+{:04X}", u32::from(ch)) } } + +#[cfg(test)] +mod tests { + use super::visible; + + /// 错行里的字符必须**看得见**:不可见字符写成 `U+XXXX`,可见字符原样(r1 小事 2)。 + /// + /// 抓得住:把 `visible` 改回 `ch.to_string()`——`U+00A0` / `U+200B` 那两条立刻红(错行会变成 + /// 「强调色里有非十六进制字符:」后面一片空白,用户不知道自己错在哪)。 + /// 抓不住:句子本身(词表在 `unlucky-i18n`)。 + #[test] + fn invisible_characters_are_shown_as_code_points() { + assert_eq!(visible('\u{a0}'), "U+00A0", "不换行空格看不见"); + assert_eq!(visible('\u{200b}'), "U+200B", "零宽空格看不见"); + assert_eq!(visible('\u{202e}'), "U+202E", "RTL 覆盖符看不见"); + assert_eq!(visible(' '), "U+0020", "普通空格也看不见"); + assert_eq!(visible('z'), "z", "可见字符原样"); + assert_eq!(visible('#'), "#", "ASCII 标点原样"); + assert_eq!(visible('中'), "中", "非 ASCII 可见字符原样"); + } +}