"""CLI 入口(`dwg_review.__main__`)参数解析与来源判定单测。 只测**纯逻辑**(不真连 CAD、不真调 LLM):位置参数 → (source, source_path) 的判定, 以及 CAD-only 选项在离线源下被拒绝。 """ from PIL import Image from dwg_review.__main__ import _resolve_source_arg, build_parser def test_parser_accepts_positional_source(): args = build_parser().parse_args(["a.pdf"]) assert args.source == "a.pdf" def test_parser_source_optional(): assert build_parser().parse_args([]).source is None def test_parser_keeps_existing_flags(): args = build_parser().parse_args(["a.pdf", "--plan-only", "--frames", "3"]) assert args.plan_only is True and args.frames == 3 def test_resolve_no_source_is_cad_mode(): assert _resolve_source_arg(None) == (None, None) def test_resolve_pdf(tmp_path): path = tmp_path / "d.pdf" path.write_bytes(b"%PDF-1.4\n") resolved, err = _resolve_source_arg(str(path)) assert err is None assert resolved[0] == "pdf" assert resolved[1].endswith("d.pdf") def test_resolve_image(tmp_path): path = tmp_path / "d.png" Image.new("RGB", (10, 10)).save(path) resolved, err = _resolve_source_arg(str(path)) assert err is None and resolved[0] == "image" def test_resolve_dwg_falls_back_to_cad_mode(capsys): """DWG 参数无法在 Python 侧打开 → 提示后按 CAD 在线模式运行(source=None)。""" resolved, err = _resolve_source_arg("x.dwg") assert resolved is None and err is None assert "CAD 在线模式" in capsys.readouterr().out def test_resolve_missing_file_errors(tmp_path): resolved, err = _resolve_source_arg(str(tmp_path / "nope.pdf")) assert resolved is None and "文件不存在" in err def test_resolve_unknown_extension_errors(): resolved, err = _resolve_source_arg("x.svg") assert resolved is None and "无法识别" in err