# CLI Testing Specification ## Purpose 定义 CLI 命令行工具的功能测试规范,包括输出格式、选项处理、错误处理等。 ## Requirements ### Requirement: CLI 输出解析内容 CLI 在不指定任何选项时,MUST 输出完整的解析后 Markdown 内容到标准输出。 #### Scenario: 解析 DOCX 文件 - **WHEN** 用户执行 `python lyxy_document_reader.py file.docx` - **THEN** 标准输出包含解析后的 Markdown 内容 #### Scenario: 解析 PDF 文件 - **WHEN** 用户执行 `python lyxy_document_reader.py file.pdf` - **THEN** 标准输出包含解析后的 Markdown 内容 #### Scenario: 解析 HTML 文件 - **WHEN** 用户执行 `python lyxy_document_reader.py file.html` - **THEN** 标准输出包含解析后的 Markdown 内容 ### Requirement: CLI 统计字数 CLI 使用 `-c` 或 `--count` 选项时,MUST 输出解析后内容的字符总数(不包含换行符)。 #### Scenario: 统计 DOCX 字数 - **WHEN** 用户执行 `python lyxy_document_reader.py file.docx -c` - **THEN** 标准输出仅包含一个表示字符总数的数字 ### Requirement: CLI 统计行数 CLI 使用 `-l` 或 `--lines` 选项时,MUST 输出解析后的行数。 #### Scenario: 统计行数 - **WHEN** 用户执行 `python lyxy_document_reader.py file.docx -l` - **THEN** 标准输出仅包含一个表示行数的数字 ### Requirement: CLI 提取标题 CLI 使用 `-t` 或 `--titles` 选项时,MUST 输出所有 1-6 级标题行。 #### Scenario: 提取所有标题 - **WHEN** 用户执行 `python lyxy_document_reader.py file.docx -t` - **THEN** 标准输出包含所有标题行,每行一个标题 ### Requirement: CLI 提取标题内容 CLI 使用 `-tc` 或 `--title-content` 选项时,MUST 输出指定标题及其下级内容。 #### Scenario: 提取存在的标题内容 - **WHEN** 用户执行 `python lyxy_document_reader.py file.docx -tc "章节标题"` - **THEN** 标准输出包含该标题及其下级内容(不包含 # 号) #### Scenario: 提取不存在的标题 - **WHEN** 用户执行 `python lyxy_document_reader.py file.docx -tc "不存在的标题"` - **THEN** 程序输出错误信息并以非零状态退出 ### Requirement: CLI 搜索内容 CLI 使用 `-s` 或 `--search` 选项时,MUST 使用正则表达式搜索文档并输出匹配结果。 #### Scenario: 搜索匹配内容 - **WHEN** 用户执行 `python lyxy_document_reader.py file.docx -s "关键词"` - **THEN** 标准输出包含所有匹配的上下文,用 `---` 分隔 #### Scenario: 搜索无匹配内容 - **WHEN** 用户执行 `python lyxy_document_reader.py file.docx -s "不存在的内容"` - **THEN** 程序输出错误信息并以非零状态退出 #### Scenario: 搜索使用上下文行数 - **WHEN** 用户执行 `python lyxy_document_reader.py file.docx -s "关键词" -n 5` - **THEN** 输出每个匹配结果前后各 5 行非空内容 ### Requirement: CLI 错误处理 CLI 遇到错误时,MUST 输出清晰的错误信息并以非零状态退出。 #### Scenario: 文件不存在 - **WHEN** 用户执行 `python lyxy_document_reader.py nonexistent.docx` - **THEN** 程序输出错误信息并以状态码 1 退出 #### Scenario: 不支持的文件类型 - **WHEN** 用户执行 `python lyxy_document_reader.py unsupported.xyz` - **THEN** 程序输出未找到支持 reader 的错误信息 #### Scenario: 所有解析方法失败 - **WHEN** 所有 Reader 解析均失败 - **THEN** 程序输出各 Reader 的失败原因列表 ### Requirement: CLI 选项互斥 CLI 的输出选项(`-c`、`-l`、`-t`、`-tc`、`-s`)MUST 互斥,不能同时使用。 #### Scenario: 默认输出与其他选项冲突 - **WHEN** 用户尝试使用多个输出选项 - **THEN** argparse 自动处理互斥,只允许一个选项生效