|
|
"""Test cases for tools.""" |
|
|
|
|
|
import asyncio |
|
|
import tempfile |
|
|
from pathlib import Path |
|
|
|
|
|
import pytest |
|
|
|
|
|
from mini_agent.tools import BashTool, EditTool, ReadTool, WriteTool |
|
|
|
|
|
|
|
|
@pytest.mark.asyncio |
|
|
async def test_read_tool(): |
|
|
"""Test read file tool.""" |
|
|
print("\n=== Testing ReadTool ===") |
|
|
|
|
|
|
|
|
with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".txt") as f: |
|
|
f.write("Hello, World!") |
|
|
temp_path = f.name |
|
|
|
|
|
try: |
|
|
tool = ReadTool() |
|
|
result = await tool.execute(path=temp_path) |
|
|
|
|
|
assert result.success, f"Read failed: {result.error}" |
|
|
|
|
|
assert "Hello, World!" in result.content, f"Content mismatch: {result.content}" |
|
|
assert "|Hello, World!" in result.content, f"Expected line number format: {result.content}" |
|
|
print("β
ReadTool test passed") |
|
|
finally: |
|
|
Path(temp_path).unlink() |
|
|
|
|
|
|
|
|
@pytest.mark.asyncio |
|
|
async def test_write_tool(): |
|
|
"""Test write file tool.""" |
|
|
print("\n=== Testing WriteTool ===") |
|
|
|
|
|
with tempfile.TemporaryDirectory() as tmpdir: |
|
|
file_path = Path(tmpdir) / "test.txt" |
|
|
|
|
|
tool = WriteTool() |
|
|
result = await tool.execute(path=str(file_path), content="Test content") |
|
|
|
|
|
assert result.success, f"Write failed: {result.error}" |
|
|
assert file_path.exists(), "File was not created" |
|
|
assert file_path.read_text() == "Test content", "Content mismatch" |
|
|
print("β
WriteTool test passed") |
|
|
|
|
|
|
|
|
@pytest.mark.asyncio |
|
|
async def test_edit_tool(): |
|
|
"""Test edit file tool.""" |
|
|
print("\n=== Testing EditTool ===") |
|
|
|
|
|
with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".txt") as f: |
|
|
f.write("Hello, World!") |
|
|
temp_path = f.name |
|
|
|
|
|
try: |
|
|
tool = EditTool() |
|
|
result = await tool.execute( |
|
|
path=temp_path, old_str="World", new_str="Agent" |
|
|
) |
|
|
|
|
|
assert result.success, f"Edit failed: {result.error}" |
|
|
content = Path(temp_path).read_text() |
|
|
assert content == "Hello, Agent!", f"Content mismatch: {content}" |
|
|
print("β
EditTool test passed") |
|
|
finally: |
|
|
Path(temp_path).unlink() |
|
|
|
|
|
|
|
|
@pytest.mark.asyncio |
|
|
async def test_bash_tool(): |
|
|
"""Test bash command tool.""" |
|
|
print("\n=== Testing BashTool ===") |
|
|
|
|
|
tool = BashTool() |
|
|
|
|
|
|
|
|
result = await tool.execute(command="echo 'Hello from bash'") |
|
|
assert result.success, f"Bash failed: {result.error}" |
|
|
assert "Hello from bash" in result.content, f"Output mismatch: {result.content}" |
|
|
print("β
BashTool test passed") |
|
|
|
|
|
|
|
|
result = await tool.execute(command="exit 1") |
|
|
assert not result.success, "Command should have failed" |
|
|
print("β
BashTool error handling test passed") |
|
|
|
|
|
|
|
|
async def main(): |
|
|
"""Run all tool tests.""" |
|
|
print("=" * 80) |
|
|
print("Running Tool Tests") |
|
|
print("=" * 80) |
|
|
|
|
|
await test_read_tool() |
|
|
await test_write_tool() |
|
|
await test_edit_tool() |
|
|
await test_bash_tool() |
|
|
|
|
|
print("\n" + "=" * 80) |
|
|
print("All tool tests passed! β
") |
|
|
print("=" * 80) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
asyncio.run(main()) |
|
|
|