| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- from __future__ import annotations
- import ast
- from pathlib import Path
- import pytest
- def test_legacy_glob_module_reexports_the_canonical_tool() -> None:
- from agent.tools.builtin.file.glob import LIMIT as canonical_limit
- from agent.tools.builtin.file.glob import glob_files as canonical_glob
- from agent.tools.builtin.glob_tool import LIMIT as legacy_limit
- from agent.tools.builtin.glob_tool import glob_files as legacy_glob
- assert legacy_glob is canonical_glob
- assert legacy_limit == canonical_limit == 100
- assert canonical_glob.__module__ == "agent.tools.builtin.file.glob"
- def test_trace_tree_dump_imports_remain_compatible() -> None:
- from agent.debug.tree_dump import dump_tree as canonical_dump_tree
- from agent.trace import dump_tree as package_dump_tree
- from agent.trace.tree_dump import DEFAULT_DUMP_PATH, dump_tree as legacy_dump_tree
- assert legacy_dump_tree is canonical_dump_tree
- assert package_dump_tree is canonical_dump_tree
- assert DEFAULT_DUMP_PATH == ".trace/tree.txt"
- @pytest.mark.asyncio
- async def test_canonical_glob_still_lists_matching_files(tmp_path: Path) -> None:
- from agent.tools.builtin.file.glob import glob_files
- expected = tmp_path / "example.py"
- expected.write_text("pass\n", encoding="utf-8")
- (tmp_path / "ignored.txt").write_text("ignored\n", encoding="utf-8")
- result = await glob_files("*.py", path=str(tmp_path))
- assert result.error is None
- assert result.metadata["count"] == 1
- assert result.output == str(expected)
- def test_browser_download_uses_stdlib_url_decode_and_time() -> None:
- source_path = (
- Path(__file__).parents[1]
- / "agent"
- / "tools"
- / "builtin"
- / "browser"
- / "downloads.py"
- )
- tree = ast.parse(source_path.read_text(encoding="utf-8"), filename=str(source_path))
- imported_names = {
- alias.asname or alias.name
- for node in tree.body
- if isinstance(node, ast.Import)
- for alias in node.names
- }
- urllib_imports = {
- alias.asname or alias.name
- for node in tree.body
- if isinstance(node, ast.ImportFrom) and node.module == "urllib.parse"
- for alias in node.names
- }
- assert "time" in imported_names
- assert "unquote" in urllib_imports
- assert "unquote" not in {
- alias.name
- for node in ast.walk(tree)
- if isinstance(node, ast.Import)
- for alias in node.names
- }
|