## ADDED Requirements ### Requirement: Convert 命令端到端测试 系统 SHALL 提供 convert 命令的端到端测试。 #### Scenario: 基本转换 - **WHEN** 执行 `yaml2pptx.py convert input.yaml output.pptx` - **THEN** 输出文件成功生成 - **AND** 文件可以打开并包含正确内容 #### Scenario: 自动输出文件名 - **WHEN** 执行 `yaml2pptx.py convert input.yaml`(不指定输出) - **THEN** 使用输入文件名生成 .pptx 文件 #### Scenario: 使用模板 - **WHEN** 执行转换时指定 --template-dir - **THEN** 模板被正确加载和应用 #### Scenario: 跳过验证 - **WHEN** 执行转换时指定 --skip-validation - **THEN** 验证步骤被跳过 #### Scenario: 强制覆盖 - **WHEN** 输出文件已存在并使用 --force - **THEN** 现有文件被覆盖 #### Scenario: 文件已存在不强制 - **WHEN** 输出文件已存在且不使用 --force - **THEN** 程序提示文件已存在并退出 #### Scenario: 无效输入文件 - **WHEN** 输入文件不存在 - **THEN** 程序显示错误信息并退出 #### Scenario: 包含所有元素类型的转换 - **WHEN** YAML 包含所有元素类型(文本、图片、形状、表格) - **THEN** 生成的 PPTX 包含所有元素并正确渲染 ### Requirement: Check 命令端到端测试 系统 SHALL 提供 check 命令的端到端测试。 #### Scenario: 验证通过 - **WHEN** 执行 `yaml2pptx.py check valid.yaml` - **THEN** 显示验证通过消息 - **AND** 退出码为 0 #### Scenario: 验证失败 - **WHEN** 执行 `yaml2pptx.py check invalid.yaml` - **THEN** 显示错误信息 - **AND** 退出码非 0 #### Scenario: 验证包含警告 - **WHEN** YAML 文件有问题但不阻止转换 - **THEN** 显示警告信息 - **AND** 验证标记为通过 #### Scenario: 使用模板验证 - **WHEN** YAML 使用模板并指定 --template-dir - **THEN** 模板文件也被验证 #### Scenario: 多错误报告 - **WHEN** YAML 文件包含多个错误 - **THEN** 所有错误被列出 - **AND** 每个错误包含位置信息 ### Requirement: Preview 命令端到端测试 系统 SHALL 提供 preview 命令的端到端测试(不启动真实服务器)。 #### Scenario: HTML 生成 - **WHEN** 调用 generate_preview_html() 并传入有效 YAML - **THEN** 返回完整的 HTML 页面 - **AND** HTML 包含所有幻灯片的渲染 #### Scenario: HTML 包含幻灯片元素 - **WHEN** 生成的预览 HTML - **THEN** 每张幻灯片包含正确的元素渲染 - **AND** CSS 样式正确应用 #### Scenario: 错误处理 - **WHEN** YAML 文件包含错误 - **THEN** generate_preview_html() 返回错误页面 HTML - **AND** 错误信息正确显示 #### Scenario: SSE 事件流路由 - **WHEN** 访问 /events 路由 - **THEN** 返回 text/event-stream 内容类型 #### Scenario: 文件变化处理 - **WHEN** YAML 文件被修改 - **THEN** YAMLChangeHandler 检测到变化 - **AND** 将 'reload' 消息放入队列 #### Scenario: Flask 应用创建 - **WHEN** 调用 create_flask_app() - **THEN** 返回配置好的 Flask 应用 - **AND** 包含 / 和 /events 路由