Files
Zach Kelling d0216abbdb feat: add new tool packages and install command
- Add hanzo-tools-code: code analysis and transformation tools
- Add hanzo-tools-net: network and HTTP tools
- Add hanzo-tools-plan: planning and task management tools
- Add hanzo-tools-test: testing tools
- Add hanzo-tools-vcs: version control tools
- Add install command for dependency management
- Improve CDP bridge server with better error handling
- Add ui_tool for computer tools
- Add unified tool loading and id_tool
- Add HIP documentation (HIP-0300, HIP-0301)
2026-01-24 13:21:16 -08:00

5.7 KiB

Test Tool

Validation operations: check, build, test (HIP-0300 operator).

Installation

pip install hanzo-tools-test

Overview

The test tool provides three distinct validation loops (Vim-inspired):

Action Purpose Equivalent Effect
check Fast incremental feedback :make NONDETERMINISTIC
build Whole-project compilation :!make NONDETERMINISTIC
test Runtime behavior validation :!make test NONDETERMINISTIC
detect Auto-detect project tools - DETERMINISTIC

Actions

check

Fast, incremental linting and type checking.

test(action="check")
# Returns: {
#   diagnostics: [
#     {file: "src/main.py", line: 42, severity: "error", message: "..."},
#     {file: "src/utils.py", line: 10, severity: "warning", message: "..."}
#   ],
#   pass: False,
#   tool: "ruff",
#   duration_ms: 234
# }

test(action="check", path="src/auth.py")
# Check specific file

test(action="check", tool="mypy")
# Use specific tool

Supported Check Tools:

Tool Languages Command
ruff Python ruff check .
mypy Python mypy .
pyright Python pyright .
eslint JavaScript/TypeScript eslint .
tsc TypeScript tsc --noEmit
clippy Rust cargo clippy
golangci-lint Go golangci-lint run

build

Whole-project compilation and dependency resolution.

test(action="build")
# Returns: {
#   success: True,
#   artifacts: ["dist/main.js", "dist/main.js.map"],
#   duration_ms: 5432,
#   tool: "npm"
# }

test(action="build", tool="cargo")
# Use specific build tool

Supported Build Tools:

Tool Languages Command
pip Python pip install -e .
uv Python uv sync
npm Node.js npm run build
pnpm Node.js pnpm build
cargo Rust cargo build
go Go go build ./...
make Any make
cmake C/C++ cmake --build .

test

Runtime behavior validation with test isolation.

test(action="test")
# Returns: {
#   passed: 42,
#   failed: 2,
#   skipped: 3,
#   total: 47,
#   failures: [
#     {name: "test_auth_flow", file: "tests/test_auth.py", message: "..."}
#   ],
#   duration_ms: 8765,
#   tool: "pytest"
# }

test(action="test", selector="tests/test_auth.py")
# Run specific tests

test(action="test", selector="test_login")
# Run tests matching pattern

test(action="test", tool="jest", verbose=True)
# Use specific tool with options

Supported Test Runners:

Tool Languages Command
pytest Python pytest -v
unittest Python python -m unittest
jest JavaScript/TypeScript jest
vitest JavaScript/TypeScript vitest run
mocha JavaScript mocha
cargo_test Rust cargo test
go_test Go go test ./...
make_test Any make test

detect

Auto-detect project tools based on config files.

test(action="detect")
# Returns: {
#   test_runner: {name: "pytest", cmd: ["pytest", "-v"], config: "pyproject.toml"},
#   build_tool: {name: "uv", cmd: ["uv", "sync"], config: "pyproject.toml"},
#   check_tool: {name: "ruff", cmd: ["ruff", "check", "."], config: "ruff.toml"},
#   detected_from: ["pyproject.toml", "ruff.toml"]
# }

test(action="detect", path="/path/to/project")
# Detect in specific directory

Detection Priority:

  1. Check for config files (pyproject.toml, package.json, Cargo.toml, etc.)
  2. Look for lock files (uv.lock, package-lock.json, Cargo.lock)
  3. Examine project structure (tests/, src/, etc.)

Three Validation Loops

The three operations serve distinct purposes:

CHECK (Fast Feedback)

  • When: During editing, before commits
  • Speed: Milliseconds to seconds
  • Scope: Single file or incremental
  • Output: Diagnostics with line numbers
  • Goal: Catch obvious errors immediately

BUILD (Compilation)

  • When: Before running, in CI
  • Speed: Seconds to minutes
  • Scope: Entire project
  • Output: Artifacts or errors
  • Goal: Verify everything compiles

TEST (Validation)

  • When: Before deploy, in CI
  • Speed: Seconds to minutes
  • Scope: Test suite
  • Output: Pass/fail with details
  • Goal: Verify behavior is correct

Example Workflow

# Quick check during development
check_result = test(action="check")
if not check_result["data"]["pass"]:
    print("Fix these issues first:")
    for diag in check_result["data"]["diagnostics"]:
        print(f"  {diag['file']}:{diag['line']}: {diag['message']}")

# Full build before commit
build_result = test(action="build")
if not build_result["data"]["success"]:
    print("Build failed!")

# Run tests before push
test_result = test(action="test")
if test_result["data"]["failed"] > 0:
    print(f"{test_result['data']['failed']} tests failed")
    for failure in test_result["data"]["failures"]:
        print(f"  {failure['name']}: {failure['message']}")

CI Integration

# GitHub Actions example
jobs:
  validate:
    steps:
      - name: Check
        run: |
          python -c "from hanzo_tools.test import test_tool; print(test_tool.call(action='check'))"

      - name: Build
        run: |
          python -c "from hanzo_tools.test import test_tool; print(test_tool.call(action='build'))"

      - name: Test
        run: |
          python -c "from hanzo_tools.test import test_tool; print(test_tool.call(action='test'))"

See Also