preview/README.md · 3515 字节 · 下载原文
# 预览测试例子(preview/)
这些不是 VML 程序,是**编辑器「预览」功能的验收样本**:`.md` / `.json` / `.xml` / `.csv`
四种能预览的格式各给「正常」与「故意写坏」两类,用来验:
1. 四种预览都活着(Markdown 渲染 / JSON 缩进 / XML 缩进 / CSV 表格);
2. **格式错误 ⇒ 直接报错、不打开预览**(用户定的)。
`ok.*` 与 `multi.*` 的区别:`ok` 的 JSON / XML 源文件**故意写成一整行**(这样能一眼看出
"预览确实重新缩进了");`multi.*` 是**多行、接近真实**的文件(这样能看出"预览不会把已经
排好的版式弄坏",另外也够长,能顺带验滚动与横向滚动)。
| 文件 | 期望结果 |
|---|---|
| `ok.md` | 👁 渲染成 Markdown(标题 / 表格 / 代码块 / 列表) |
| `ok.json` | 👁 缩进美化(源文件是**一整行**,预览后应当有层级) |
| `ok.xml` | 👁 缩进美化(源文件同样是**一整行**) |
| `ok.csv` | 👁 表格(含带逗号的引号字段,最后一行**列数故意不齐**——那不算错) |
| `multi.json` | 👁 多行源:保留层级、只规范化缩进(含中文、数组、嵌套、转义换行) |
| `multi.xml` | 👁 多行源:含属性、注释、**CDATA**(CDATA 里的 `<标签>` 不该被解析) |
| `multi.csv` | 👁 表格(18 行 × 6 列;含**超长单元格**——应当横向滚动而不是硬折行) |
| `multi.md` | 👁 长文档:表格 / 两段代码块 / 三级嵌套列表 / 引用 / 行内代码 / 链接 |
| `bad.json` | ❌ 报错「这个 JSON 格式有错,无法预览」(缺右花括号) |
| `bad.xml` | ❌ 报错「这个 XML 格式有错,无法预览」(标签没闭合) |
| `bad.csv` | ❌ 报错「第 3 行的引号没有闭合」(该行引号是奇数个) |
| `empty.json` | ❌ 报错「文件是空的,没有可预览的内容」 |
## 非 UTF-8 文件(预览时自动转换)
默认按 **UTF-8** 读;不是 UTF-8 的由**打开文件那一步**统一解码
(`TextEncoding`:BOM → 严格 UTF-8 → **GB18030**,GB18030 是 GBK/GB2312 的超集),
预览渲染的是**解码后的文本**,所以四种预览都跟着自动转换。
| 文件 | 真实编码 | 期望结果 |
|---|---|---|
| `gbk.csv` | **GBK**(无 BOM,`d3 ef d1 d4`…) | 👁 表格里的中文正常(不是乱码) |
| `gbk.json` | **GBK**(无 BOM) | 👁 缩进美化,中文键值正常 |
| `utf16.json` | **UTF-16 LE 带 BOM**(`ff fe`) | 👁 正常;BOM 必须被剥掉(否则 JSON 解析会失败) |
| `bom.csv` | **UTF-8 带 BOM**(`ef bb bf`,Excel/记事本存 CSV 的常见形态) | 👁 第一列表头不该多出一个不可见字符 |
> 这四个是**真·非 UTF-8 字节**(不是改后缀名骗人)。接缝
> 「非 UTF-8 字节 → 解码 → 预览格式化仍成功」在 `Test/SelfTest.Chunk8Ui.cs` 的
> `[预览格式化]` 段里有判据钉住(解码那半边 `TextEncoding` 自己另有 21 条用例)。
判据与格式化都在 `WayCoder/UI/Shared/PreviewFormatter.cs`(**唯一实现**,
桌面自测覆盖 —— 见 `Test/SelfTest.Chunk8Ui.cs` 的 `[预览格式化]` 段),
编辑器页面只负责渲染与弹提示。
> 这些样本本身用标准库独立验过:`ok.json` / `multi.json` 是合法 JSON、`ok.xml` / `multi.xml`
> 是合法 XML、`bad.*` 与 `empty.json` 确实解析不了、`multi.csv` 没有奇数引号行、
> `bad.csv` 第 3 行是。