File size: 3,222 Bytes
dc893fb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
"""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 ===")
# Create a temp file
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}"
# ReadTool now returns content with line numbers in format: "LINE_NUMBER|LINE_CONTENT"
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()
# Test successful command
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")
# Test failed command
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())
|