mirror of
https://github.com/ultraworkers/claw-code.git
synced 2026-06-17 17:11:26 +08:00
71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
|
|
"""Tests for --output-format on command-graph and tool-pool (ROADMAP #169).
|
||
|
|
|
||
|
|
Diagnostic inventory surfaces now speak the CLI family's JSON contract.
|
||
|
|
"""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import json
|
||
|
|
import subprocess
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
|
||
|
|
|
||
|
|
|
||
|
|
def _run(args: list[str]) -> subprocess.CompletedProcess:
|
||
|
|
return subprocess.run(
|
||
|
|
[sys.executable, '-m', 'src.main', *args],
|
||
|
|
cwd=Path(__file__).resolve().parent.parent,
|
||
|
|
capture_output=True,
|
||
|
|
text=True,
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
class TestCommandGraphOutputFormat:
|
||
|
|
def test_command_graph_json(self) -> None:
|
||
|
|
result = _run(['command-graph', '--output-format', 'json'])
|
||
|
|
assert result.returncode == 0, result.stderr
|
||
|
|
|
||
|
|
envelope = json.loads(result.stdout)
|
||
|
|
assert 'builtins_count' in envelope
|
||
|
|
assert 'plugin_like_count' in envelope
|
||
|
|
assert 'skill_like_count' in envelope
|
||
|
|
assert 'total_count' in envelope
|
||
|
|
assert envelope['total_count'] == (
|
||
|
|
envelope['builtins_count'] + envelope['plugin_like_count'] + envelope['skill_like_count']
|
||
|
|
)
|
||
|
|
assert isinstance(envelope['builtins'], list)
|
||
|
|
if envelope['builtins']:
|
||
|
|
assert set(envelope['builtins'][0].keys()) == {'name', 'source_hint'}
|
||
|
|
|
||
|
|
def test_command_graph_text_backward_compat(self) -> None:
|
||
|
|
result = _run(['command-graph'])
|
||
|
|
assert result.returncode == 0
|
||
|
|
assert '# Command Graph' in result.stdout
|
||
|
|
assert 'Builtins:' in result.stdout
|
||
|
|
# Not JSON
|
||
|
|
assert not result.stdout.strip().startswith('{')
|
||
|
|
|
||
|
|
|
||
|
|
class TestToolPoolOutputFormat:
|
||
|
|
def test_tool_pool_json(self) -> None:
|
||
|
|
result = _run(['tool-pool', '--output-format', 'json'])
|
||
|
|
assert result.returncode == 0, result.stderr
|
||
|
|
|
||
|
|
envelope = json.loads(result.stdout)
|
||
|
|
assert 'simple_mode' in envelope
|
||
|
|
assert 'include_mcp' in envelope
|
||
|
|
assert 'tool_count' in envelope
|
||
|
|
assert 'tools' in envelope
|
||
|
|
assert envelope['tool_count'] == len(envelope['tools'])
|
||
|
|
if envelope['tools']:
|
||
|
|
assert set(envelope['tools'][0].keys()) == {'name', 'source_hint'}
|
||
|
|
|
||
|
|
def test_tool_pool_text_backward_compat(self) -> None:
|
||
|
|
result = _run(['tool-pool'])
|
||
|
|
assert result.returncode == 0
|
||
|
|
assert '# Tool Pool' in result.stdout
|
||
|
|
assert 'Simple mode:' in result.stdout
|
||
|
|
assert not result.stdout.strip().startswith('{')
|