from __future__ import annotations

from typing import Dict, List


REQUIREMENT_TYPES: List[str] = [
    "功能测试",
    "性能测试",
    "外部接口测试",
    "人机交互界面测试",
    "强度测试",
    "余量测试",
    "可靠性测试",
    "安全性测试",
    "恢复性测试",
    "边界测试",
    "安装性测试",
    "互操作性测试",
    "敏感性测试",
    "测试充分性要求",
]



TYPE_SIGNAL_RULES: Dict[str, str] = {
    "功能测试": "关注功能需求逐项验证、业务流程正确性、输入输出行为、状态转换与边界值处理。",
    "性能测试": "关注处理精度、响应时间、处理数据量、系统协调性、负载潜力与运行占用空间。",
    "外部接口测试": "关注外部输入输出接口的格式、内容、协议与正常/异常交互表现。",
    "人机交互界面测试": "关注界面一致性、界面风格、操作流程、误操作健壮性与错误提示能力。",
    "强度测试": "关注系统在极限、超负荷、饱和和降级条件下的稳定性与承受能力。",
    "余量测试": "关注存储余量、输入输出通道余量、功能处理时间余量等资源裕度。",
    "可靠性测试": "关注真实或仿真环境下的失效等级、运行剖面、输入覆盖和长期稳定运行能力。",
    "安全性测试": "关注危险状态响应、安全关键部件、异常输入防护、非法访问阻断和数据完整性保护。",
    "恢复性测试": "关注故障探测、备用切换、系统状态保护与从无错误状态继续执行能力。",
    "边界测试": "关注输入输出域边界、状态转换端点、功能界限、性能界限与容量界限。",
    "安装性测试": "关注不同配置下安装卸载流程和安装规程执行正确性。",
    "互操作性测试": "关注多个软件并行运行时的互操作能力与协同正确性。",
    "敏感性测试": "关注有效输入类中可能引发不稳定或不正常处理的数据组合。",
    "测试充分性要求": "关注需求覆盖率、配置项覆盖、语句覆盖、分支覆盖及未覆盖分析确认。",
}


DECOMPOSE_FORCE_RULES: List[str] = [
    "每个软件功能至少应被正常测试与被认可的异常场景覆盖；复杂功能需继续细分。",
    "每个测试项必须语义完整、可直接执行。",
    "覆盖必须包含：正常流程、边界条件（适用时）、异常条件。",
    "粒度需适中，避免过粗或过细。",
    "对未知类型必须执行通用分解，并保持正常/异常分组。",
    "对需求说明未显式给出但在用户手册或操作手册体现的功能，也应补充测试项覆盖。",
]


REQUIREMENT_RULES: Dict[str, Dict[str, List[str]]] = {
    "功能测试": {
        "keywords": ["功能", "业务流程", "输入输出", "状态转换", "边界值"],
        "normal": [
            "正常覆盖功能主路径、基本数据类型、合法边界值与状态转换。",
        ],
        "abnormal": [
            "异常覆盖非法输入、不规则输入、非法边界值与最坏情况。",
        ],
    },
    "性能测试": {
        "keywords": ["性能", "处理精度", "响应时间", "处理数据量", "负载", "占用空间"],
        "normal": [
            "正常覆盖处理精度、响应时间、处理数据量与模块协调性。",
        ],
        "abnormal": [
            "异常覆盖超负荷、软硬件限制、负载潜力上限与资源占用异常。",
        ],
    },
    "外部接口测试": {
        "keywords": ["外部接口", "输入接口", "输出接口", "格式", "内容", "协议", "异常交互"],
        "normal": [
            "正常覆盖全部外部接口格式与内容正确性。",
        ],
        "abnormal": [
            "异常覆盖每个输入输出接口的错误格式、错误内容与异常交互。",
        ],
    },
    "人机交互界面测试": {
        "keywords": ["界面", "风格", "交互", "误操作", "错误提示", "操作流程"],
        "normal": [
            "正常覆盖界面风格一致性与标准操作流程。",
        ],
        "abnormal": [
            "异常覆盖误操作、快速操作、非法输入、错误命令与错误流程提示。",
        ],
    },
    "强度测试": {
        "keywords": ["强度", "极限", "超负荷", "饱和", "降级", "健壮性"],
        "normal": [
            "正常覆盖设计极限下系统功能和性能表现。",
        ],
        "abnormal": [
            "异常覆盖超出极限时的降级行为、健壮性与饱和表现。",
        ],
    },
    "余量测试": {
        "keywords": ["余量", "存储余量", "通道余量", "处理时间余量", "资源裕度"],
        "normal": [
            "正常覆盖存储、通道、处理时间余量是否满足要求。",
        ],
        "abnormal": [
            "异常覆盖余量不足或耗尽时系统告警与受控行为。",
        ],
    },
    "可靠性测试": {
        "keywords": ["可靠性", "运行剖面", "失效等级", "输入覆盖", "长期稳定"],
        "normal": [
            "正常覆盖典型环境、运行剖面与输入变量组合。",
        ],
        "abnormal": [
            "异常覆盖失效等级场景、边界环境变化、不合法输入域及失效记录。",
        ],
    },
    "安全性测试": {
        "keywords": ["安全", "危险状态", "安全关键部件", "非法进入", "完整性", "防护"],
        "normal": [
            "正常覆盖安全关键部件、安全结构与合法操作路径。",
        ],
        "abnormal": [
            "异常覆盖危险状态、故障模式、边界接合部、非法进入与数据完整性保护。",
        ],
    },
    "恢复性测试": {
        "keywords": ["恢复", "故障探测", "备用切换", "状态保护", "继续执行", "reset"],
        "normal": [
            "正常覆盖故障探测、备用切换、恢复后继续执行。",
        ],
        "abnormal": [
            "异常覆盖故障中作业保护、状态保护与恢复失败路径。",
        ],
    },
    "边界测试": {
        "keywords": ["边界", "端点", "输入输出域", "状态转换", "性能界限", "容量界限"],
        "normal": [
            "正常覆盖输入输出域边界、状态转换端点与功能界限。",
        ],
        "abnormal": [
            "异常覆盖性能界限、容量界限和越界端点。",
        ],
    },
    "安装性测试": {
        "keywords": ["安装", "卸载", "配置", "安装规程", "部署", "中断"],
        "normal": [
            "正常覆盖标准及不同配置下安装卸载流程。",
        ],
        "abnormal": [
            "异常覆盖安装规程错误、依赖异常与中断后的处理。",
        ],
    },
    "互操作性测试": {
        "keywords": ["互操作", "并行运行", "协同", "兼容", "冲突", "互操作失败"],
        "normal": [
            "正常覆盖两个或多个软件同时运行与互操作过程。",
        ],
        "abnormal": [
            "异常覆盖互操作失败、并行冲突与协同异常。",
        ],
    },
    "敏感性测试": {
        "keywords": ["敏感性", "输入类", "数据组合", "不稳定", "不正常处理"],
        "normal": [
            "正常覆盖有效输入类中典型数据组合。",
        ],
        "abnormal": [
            "异常覆盖引发不稳定或不正常处理的特殊数据组合。",
        ],
    },
    "测试充分性要求": {
        "keywords": ["测试充分性", "需求覆盖率", "配置项覆盖", "语句覆盖", "分支覆盖", "未覆盖分析"],
        "normal": [
            "正常覆盖需求覆盖率、配置项覆盖与代码覆盖达标。",
        ],
        "abnormal": [
            "异常覆盖未覆盖部分逐项分析、确认与报告输出。",
        ],
    },
}


GENERIC_DECOMPOSITION_RULES: Dict[str, List[str]] = {
    "normal": [
        "主流程正确性。",
        "合法边界值。",
        "标准输入输出。",
    ],
    "abnormal": [
        "非法输入。",
        "越界输入。",
        "资源异常或状态冲突。",
    ],
}


EXPECTED_RESULT_PLACEHOLDER_MAP: Dict[str, str] = {
    "{{return_value}}": "接口或函数返回值验证。",
    "{{state_change}}": "系统状态变化验证。",
    "{{error_message}}": "异常场景错误信息验证。",
    "{{data_persistence}}": "数据库或存储落库结果验证。",
    "{{ui_display}}": "界面显示反馈验证。",
}
