测试计划
- GUI 功能测试(结果见测试 bug 列表)
- 新增扩展语法单元测试
- Markdown 解析测试
- 场景测试
测试 Bug 列表
- 滚轮,字体,树枝的颜色,sidebar 宽度相关样式没有正确合并。
- 进入榕图模式后无法进入其他模式(点侧边栏没有效果)
- 窗口缩小后再放大,榕图不会随之变化
- 在有些模式下显示只有单文档才可用的功能按钮
- 热更新在特权目录下 (如 C:\Program Files) 无法自动完成提权,导致更新失败
- 进入榕树模式时,榕树显示位置不在页面中心
- 执行撤回操作后,光标位置会回到文档起始位置
- 执行撤回操作后,文档中的多个连续换行符丢失
- 直接复制图片文件粘贴时,会将图片内容转为 base64 格式进行渲染,对于比较大的图片有可能会卡死软件。
- 从系统托盘点击软件的关闭窗口按钮,会导致当前编辑的文件内容丢失
- Markdown 内的网页超链接,点击后会打开一个没有关闭按键的网页窗口
- 对齐问题
- 代码高亮较少
- 连续输入 —- 报错
- 光标位置太靠下
- 帮助菜单没有绑
- 无法从打字机模式退出,模式提示不清晰
- 文本区的宽度过窄
- 被引用数目错误
- 公式不支持
\begin{align}
这样的对齐 - 如果在公式框里面打入 ,会变成两对 ,会变成两对 ,会变成两对,而 typora 则会给报错
- 较大文件进入榕树模式时,加载较慢且没有提示
扩展语法测试
针对扩展语法,我们修改使用 go 语言编写的 lute 解析器,进行解析。对修改后的 lute,加入了一些扩展语法相关的单元测试保证扩展语法正确性。
我们的扩展语法形如 -[label](ficus link)
,前面是 ficus 链接的 tag,后面是 ficus 链接指向的文件位置,类似 Markdown 中图片的语法。
var markTests = []parseTest{
{"f1", "-[1](./testmd.md)", "<p><a class='ficus-filelink' href=\"./testmd.md\">1</a></p>\n"},
{"f2", "-[==foo==](bar)\n", "<p><a class='ficus-filelink' href=\"bar\"><mark>foo</mark></a></p>\n"},
{"f3", "==-[*foo*==](bar)\n", "<p>==<a class='ficus-filelink' href=\"bar\"><em>foo</em>==</a></p>\n"},
{"f4", "==-[*foo*](bar)==\n", "<p><mark><a class='ficus-filelink' href=\"bar\"><em>foo</em></a></mark></p>\n"},
{"f5", "==*-[foo](bar)*==\n", "<p><mark><em><a class='ficus-filelink' href=\"bar\">foo</a></em></mark></p>\n"}
}
lute 与渲染器实现实时渲染,所见即所得是依赖一套 markdown->html,html->markdown 的互相转换机制。前端的修改直接作用在 html dom上,通过 lute 将修改后的 html 转回 markdown。因此对于拓展语法,也需要实现相应的转换。对这一部分也扩展了单元测试,这一部分基本上就是把之前的markdown2html的测试反过来
var vditorDOM2MdTests = []parseTest{
{"f1", "<a class='ficus-filelink' href=\"./testmd.md\">1</a>", "-[1](./testmd.md)\n"},
{"f2", "<a class='ficus-filelink' href=\"bar\"><mark>foo</mark></a>", "-[==foo==](bar)\n"},
{"f3", "<p>==<a class='ficus-filelink' href=\"bar\"><em>foo</em>==</a></p>", "==-[*foo*==](bar)\n"},
{"f4", "<mark><a class='ficus-filelink' href=\"bar\"><em>foo</em></a></mark>", "==-[*foo*](bar)==\n"},
{"f5", "<mark><em><a class='ficus-filelink' href=\"bar\">foo</a></em></mark>", "==*-[foo](bar)*==\n"}
}
Markdown 解析单元测试
由于 Ficus 需要结构化的管理 Markdown 文本,因此需要支持对 Markdown 文本的层次化解析,并支持我们的扩展语法如须等。由我们完成 Markdown 解析部分的同学,编写了相关的解析测试。
测试结果及覆盖率如图
场景测试
预期用户
笔记场景
姓名 | 沈强 |
---|---|
年龄 | 17 |
职业 | 高中学生 |
专业 | 高中生物竞赛生 |
工作生活 | 整理生物笔记备考竞赛 |
需求 | 生物知识过于庞大,盘根错节,难以整理 |
姓名 | 郭笑笑 |
---|---|
年龄 | 25 |
职业 | 自由职业 |
专业 | 计算机 |
工作生活 | 在博客上发表自己的知识博客 |
需求 | 博客内容的呈现形式需要反复地斟酌润色 |
测试场景描述
沈强
沈强是一位热爱生物竞赛的高中生,他发现自己的笔记零散且不易管理。于是他开始使用 Ficus,一款功能强大的 Markdown 文本编辑器,来整理他的生物竞赛笔记。
沈强打开 Ficus 软件,进入主界面,他看到左侧是文件浏览器,文件大纲浏览器,右侧是一个文本的实时所见即所得编辑区域。他打开了他存放所有笔记的文件夹,并在 Ficus 里面创建了一个名为 “生物竞赛笔记” 的文件,然后开始输入他的笔记。
沈强像使用其他 Markdown 笔记软件一样,熟练的输入了一系列笔记正文内容,沈强使用 Markdown 中的标题功能,将它的文档组织成一个清晰的树状结构。
当沈强写完一段笔记后,他切换到了 Ficus 的榕树模式,这个模式下, 格式化的展示了沈强编辑的文档。
沈强可以以一个树状的视图查看他完成的笔记。沈强发现,树的结构和他期望有一些差异,某个二级结构应该成为一个一级的结构,沈强随后熟练的用鼠标拖拽二级结构到一级根下,这个修改立即同步到了文档中,完成了对文档的同步修改。榕树模式下展现的文档更有层次化,沈强使用榕树导出图片的功能导出了一份 png
沈强回到所见即所得的编辑模式下, 在界面左侧选择进入了大纲视图,沈强想针对之前完成的某一节进行一些修改,沈强在左侧大纲视图中,选中了相应的一节,编辑器文本框跳到了沈强期望的节处,沈强完成了修改,Ficus 自动保存了编辑后的文件,沈强使用 pdf 导出功能,导出了完成的笔记文档打印。
郭笑笑
郭笑笑是一位大学计算机本科生,她热爱博客写作,并且喜欢使用 Markdown 编辑器来书写博客。计算机专业的博客常需要输入一些数学公式。她使用 Ficus 这款内置 katex 的 Markdown 文本编辑器完成她的博客编写。
郭笑笑打开 Ficus 软件,进入主界面,她从左侧的文件浏览器打开了她存放博客文档的文件夹,并新建了一篇博客,开始了文档编辑。郭笑笑需要插入数学公式时,她借助了 Ficus 内置的 katex 支持,实现了公式编辑的所见即所得。当郭笑笑编辑完她的博客后,她使用 Ficus 的导出功能,将博客导出为 PDF 格式的文档,方便她进行分享。
编辑完成这篇博客后,郭笑笑通过侧边栏打开了榕图模式,这里展示了她当前打开的博客文件夹中所有的文件,以及层次关系,互相引用关系。
由于 Ficus 使用标准的 Markdown语法,她的博客也可以很容易的被上传到一些静态的博客网站上。
测试矩阵
平台信息 | 构建 | 基本MD编辑-富文本模式 | 基本MD编辑-源码模式 | 大纲视图 | 文件操作(正常) | 文件操作(非法) | 文件刷新 | 本地ficus链 | 网页超链接 | 引用计数 | 字数统计 | 场景测试-沈强 | 场景测试-郭笑笑 | 热更新 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows NT 10.0.22621.1555; x64 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Linux 5.15.90.1-microsoft-standard-WSL2; ubuntu 22.04.2 LTS; x86_64 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Windows NT 10.0.22621.1555; x64 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Linux 5.15.90.1-microsoft-standard-WSL2; ubuntu 20.04 LTS; x86_64 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Windows NT 10.0.19043.1381; x64 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Windows NT 10.0.19044.1704; x64 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Linux 5.15.108-1-manjaro; manjaro; x86_64 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Linux 5.15.102-1-manjaro; manjaro; x86_64 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Windows NT 10.0.22621.1546; x64 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Macintosh OS X 10.14.6; Apple Silicon; arm64 | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
出口条件
功能条件
完成基本文档编辑,文件基本操作,对 Markdown 基本语法支持无问题,支持榕树模式、榕图模式显示、大纲视图、引用计数,支持 PDF 导出等常用文本编辑器功能,支持热更新。在主流操作系统平台(windows,linux)上运行没有问题。
测试条件
编写并通过全部 Markdown 相关的单元测试,可以通过场景测试中的场景验证,通过矩阵测试,保证各平台用户的数据安全,保证软件有热更新功能,可以快速更新修正bug。
姓名 | 郭笑笑 |
---|---|
年龄 | 25 |
职业 | 自由职业 |
专业 | 计算机 |
工作生活 | 在博客上发表自己的知识博客 |
需求 | 博客内容的呈现形式需要反复地斟酌润色 |