Mini-Agent / tests /test_tools.py
AbdulElahGwaith's picture
Upload folder using huggingface_hub
dc893fb verified
"""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())