测试要点

	1. 操作模式
		1.1 常规模式
			1.1.1 只在该模式允许的操作：`节点选择`、`创建新节点`、`拖动到父节点`
		1.2 拖动模式
			1.1.2 只在该模式允许的操作：`画布拖放`
		1.3 文本编辑模式
			1.1.3 只在该模式允许的操作：`文本框选`、`文本编辑`
		1.4 模式切换
			1.4.1 常规模式下，在单个选中的节点上点击文字区域（多选的情况下不算），进入文本编辑模式，并且光标定在点击的位置上
			1.4.2 常规模式下，在任意节点上双击文字区域，进入文本编辑模式，并且文本被选中
			1.4.3 常规模式下，创建了新节点的时候，进入文本编辑模式，新节点文本被选中
			1.4.4 常规模式下，有唯一选中的节点，按下字母和数字的按键会进入文本编辑模式，并且文字变为刚输入的字母或数字，或是弹出输入法框
			1.4.5 文本编辑模式下，按 Tab 和 Enter 退出文本编辑模式，回到常规模式
			1.4.6 文本编辑模式下，点击非文本区域的任何位置，退出文本编辑模式，回到常规模式
			1.4.7 常规模式下，按 Space 或点击 UI 上的拖动图标进入拖动模式
			1.4.8 拖动模式下，按 Space 或点击 UI 上的拖动图标退出拖动模式，回到常规模式

	2. `节点选择` 交互
		2.1 该交互只在常规模式下有效
		2.2 点击任意未被选中的节点，会使其选中
		2.3 点击空白处，会取消节点的选择
		2.4 按着 Shift 键，点击的节点会切换选择状态
		2.5 在空白处按下鼠标并移动10像素后，会显示选框；当选框跟节点有重合的时候，节点会被选中，没有重合的节点不被选中
		2.6 按键盘方向键的时候：
			2.6.1 对于一个节点“方向”的定义为：
				2.6.1.1 以节点为坐标原点的直角坐标系顺时针旋转45度，第一象限为“上”，第二象限为“左”，第三象限为“右”，第四象限为“下”
			2.6.2 假如当前没有节点被选中，任何方向键都将选中根节点
			2.6.3 假如当前有唯一选中的节点，将导航至指定方向区域的最近的节点
			2.6.4 假如有多个选择的节点，以选择顺序第一个节点为参照，导航至其指定方向区域的最近的节点
			2.6.5 假如被导航的区域中没有节点，选区保持不变

	3. `创建新节点` 交互
		3.1 目标节点定义为：
			3.1.1 如果有唯一选中的节点，其为目标节点
			3.1.2 如果有多个选中的节点，则首个（时间上）被选中的节点为目标节点
		3.2 如果存在目标节点：
			3.2.1 按下键盘的 Tab 键，会创建一个目标节点的子节点，并且新节点在唯一选中状态，模式变为文本编辑模式
			3.2.2 按下键盘的 Enter 键，并且目标节点不是根节点，会创建一个目标节点的兄弟节点（紧邻的位置上），并且新节点在唯一选中，模式变为文本编辑模式
		3.3 如果存在目标节点：
			3.3.1 创建子节点的 UI 是可用的，否则不可用
			3.3.2 如果目标节点是根节点，则创建兄弟节点的 UI 是不可用的，否则是可用的
		3.4 该交互只在常规模式下有效

	4. `拖放到父节点` 交互
		4.1 该交互只在常规模式下有效
		4.2 在任意节点上 mousedown，并且移动10像素以上，确定拖放对象：
			4.2.1 如果节点没被选中，则节点被选中，并且作为拖动对象
			4.2.2 如果节点是被选中的，则所有选中的节点作为拖放对象
		4.3 排除无效拖放对象：
			4.3.1 如果存在一个拖放对象A和另一个拖放对象B，A是B的祖先，则B被排除
			4.3.2 排除后剩余的对象成为真正的拖放对象
		4.4 拖放对象表示为一个拖放图形，并且显示拖放对象的数量
		4.5 拖放图形随鼠标移动，并且每次移动会判断是否遇到拖放目标：
			4.5.1 拖放对象本身以及整棵子树都不能作为拖放目标
			4.5.2 如果拖放图形和拖放目标的图形有重合，拖放目标会高亮，否则不会高亮
		4.6 如果在遇到拖放目标的时候释放鼠标（mouseup），会让拖放对象成为拖放目标的子节点，并且：
			4.6.1 保持之前拖放目标的选中状态
			4.6.2 保证拖放目标的顺序与拖放之前保持一致

	5. `画布导航` 交互
		5.1 该交互只在拖动模式下有效
		5.2 在任意位置鼠标按下（mousedown）之后画布可以随鼠标移动
		5.3 鼠标释放（mouseup）之后画布不再随鼠标移动
		5.4 按下方向键会让画布用动画朝反方向移动一定的距离

	6. `画布缩放` 交互
		6.1 在非文本编辑模式下，点击 `+` 和 `-` 分别可以拉近视野（放大画布）和拉远视野（缩小画布）
		6.2 在任意模式下，使用鼠标滚轮可以缩放视野
			6.2.1 往上滚动拉近视野
			6.2.3 往下滚动拉远视野
		6.3 在任意模式下，UI 上的 zoom-in 和 zoom-out 分别可以拉近视野和拉远视野
		6.4 视野拉远和拉近都有最值，不能无限操作；当每个操作不可用的时候，UI 上的按钮呈不可用状态

	7. `文本框选` 和 `文本编辑` 和默认行为一致即可

	8. `字体样式` 功能
		8.1 该功能在 `拖放模式` 下不可用
		8.2 包括的子功能：
			8.2.1 加粗
			8.2.2 斜体
			8.2.3 字体
			8.2.4 字号
			8.2.5 颜色
		8.3 所有的子功能以节点为单位设置和读取
		8.4 对于选中的节点在 UI 上应该反映当前的样式状态
		8.5 UI 上设置样式针对所有选中的节点生效
		8.6 没有选中节点的时候，UI 上的功能按钮应该呈不可用状态

	9. `子节点收缩功能`
		9.1 在一级节点及以上，如果存在子节点，显示收缩功能的图标，否则不显示
		9.2 收缩图标显示 `-` 的时候，子节点显示；收缩图标显示 `+` 的时候，子节点不显示；点击图标切换这两种状态

	10. `节点删除功能`
		10.1 目标节点的计算方法同拖放到父节点的拖放目标的计算方法
		10.2 如果目标节点包含根，把根从目标节点中移除
		10.3 如果包含删除目标，删除操作的 UI 是可用的，否则是不可用的
		10.4 把所有目标节点从其父节点中移除

	11. `标签功能`
		11.1 对于选中的节点，点击优先级标签和完成度标签可以在节点文本前添加标签图形
		11.2 对于同一类的标签，只能添加一个标签
		11.3 选中单个节点的时候，标签面板显示选中节点的当前标签；
		11.4 多选的情况下，如果标签一致以任意一个节点为准来显示状态；标签不一致显示所有包含的状态

	12. `导入导出功能`
		12.1 导出数据应该能下载一个文件
		12.2 下载的文件拖动到画布上，可以还原原来的数据
