"""Tests for ops.envdev / sglang / msdownload 模块 (@px.tool 注册验证).""" from __future__ import annotations import pyflowx as px from pyflowx.ops import envdev, msdownload, sglang # noqa: F401 -- 触发 @px.tool 注册 from pyflowx.tools import _TOOL_REGISTRY, get_tool # ---------------------------------------------------------------------- # # envdev 注册验证 # ---------------------------------------------------------------------- # class TestEnvdevRegistration: """``envdev`` 模块 ``@px.tool`` 注册验证.""" def test_envdev_registered(self) -> None: """envdev 应在 _TOOL_REGISTRY 中注册.""" assert "envdev" in _TOOL_REGISTRY def test_visible_subcommands(self) -> None: """可见子命令应包含核心镜像源配置命令.""" subs = px.list_subcommands("envdev") assert "setup-python" in subs assert "setup-conda" in subs assert "setup-rust" in subs assert "setup-linux-mirror" in subs def test_install_subcommands_visible(self) -> None: """安装类子命令应可见.""" subs = px.list_subcommands("envdev") assert "download-rustup" in subs assert "install-rust" in subs assert "install-qt-libs" in subs assert "install-fonts" in subs assert "install-docker" in subs def test_setup_python_is_fn(self) -> None: """setup-python 应为 fn 任务 (非 cmd).""" spec = get_tool("envdev", "setup-python") assert spec.func is not None assert spec.cmd is None def test_setup_conda_is_fn(self) -> None: """setup-conda 应为 fn 任务.""" spec = get_tool("envdev", "setup-conda") assert spec.func is not None def test_setup_rust_is_fn(self) -> None: """setup-rust 应为 fn 任务.""" spec = get_tool("envdev", "setup-rust") assert spec.func is not None def test_setup_linux_mirror_is_fn(self) -> None: """setup-linux-mirror 应为 fn 任务.""" spec = get_tool("envdev", "setup-linux-mirror") assert spec.func is not None # ---------------------------------------------------------------------- # # sglang 注册验证 # ---------------------------------------------------------------------- # class TestSglangRegistration: """``sglang`` 模块 ``@px.tool`` 注册验证.""" def test_sglang_registered(self) -> None: """sglang 应在 _TOOL_REGISTRY 中注册.""" assert "sglang" in _TOOL_REGISTRY def test_visible_subcommands(self) -> None: """可见子命令: install, run.""" subs = px.list_subcommands("sglang") assert "install" in subs assert "run" in subs def test_run_needs_install(self) -> None: """run 应依赖 install.""" spec = get_tool("sglang", "run") assert "install" in spec.needs # ---------------------------------------------------------------------- # # msdownload 注册验证 # ---------------------------------------------------------------------- # class TestMsdownloadRegistration: """``msdownload`` 模块 ``@px.tool`` 注册验证.""" def test_msdownload_registered(self) -> None: """msdownload 应在 _TOOL_REGISTRY 中注册.""" assert "msdownload" in _TOOL_REGISTRY def test_msdownload_default_spec(self) -> None: """msdownload 默认 spec 应可获取且为 fn 任务.""" spec = get_tool("msdownload") assert spec.func is not None assert spec.cmd is None def test_msdownload_run_callable(self) -> None: """msdownload_run 应为可调用函数.""" assert callable(msdownload.msdownload_run)