118 lines
3.6 KiB
Python
Raw Normal View History

2025-11-04 05:17:27 +01:00
import pytest
import os
import tempfile
from pr.tools.filesystem import read_file, write_file, list_directory, search_replace
from pr.tools.patch import apply_patch, create_diff
from pr.tools.base import get_tools_definition
class TestFilesystemTools:
def test_write_and_read_file(self, temp_dir):
filepath = os.path.join(temp_dir, 'test.txt')
content = 'Hello, World!'
write_result = write_file(filepath, content)
assert write_result['status'] == 'success'
read_result = read_file(filepath)
assert read_result['status'] == 'success'
assert content in read_result['content']
def test_read_nonexistent_file(self):
result = read_file('/nonexistent/path/file.txt')
assert result['status'] == 'error'
def test_list_directory(self, temp_dir):
test_file = os.path.join(temp_dir, 'testfile.txt')
with open(test_file, 'w') as f:
f.write('test')
result = list_directory(temp_dir)
assert result['status'] == 'success'
assert any(item['name'] == 'testfile.txt' for item in result['items'])
def test_search_replace(self, temp_dir):
filepath = os.path.join(temp_dir, 'test.txt')
content = 'Hello, World!'
with open(filepath, 'w') as f:
f.write(content)
result = search_replace(filepath, 'World', 'Universe')
assert result['status'] == 'success'
read_result = read_file(filepath)
assert 'Hello, Universe!' in read_result['content']
class TestPatchTools:
def test_create_diff(self, temp_dir):
file1 = os.path.join(temp_dir, 'file1.txt')
file2 = os.path.join(temp_dir, 'file2.txt')
with open(file1, 'w') as f:
f.write('line1\nline2\nline3\n')
with open(file2, 'w') as f:
f.write('line1\nline2 modified\nline3\n')
result = create_diff(file1, file2)
assert result['status'] == 'success'
assert 'line2' in result['diff']
assert 'line2 modified' in result['diff']
def test_apply_patch(self, temp_dir):
filepath = os.path.join(temp_dir, 'file.txt')
with open(filepath, 'w') as f:
f.write('line1\nline2\nline3\n')
# Create a simple patch
patch_content = """--- a/file.txt
+++ b/file.txt
@@ -1,3 +1,3 @@
line1
-line2
+line2 modified
line3
"""
result = apply_patch(filepath, patch_content)
assert result['status'] == 'success'
read_result = read_file(filepath)
assert 'line2 modified' in read_result['content']
class TestToolDefinitions:
def test_get_tools_definition_returns_list(self):
tools = get_tools_definition()
assert isinstance(tools, list)
assert len(tools) > 0
def test_all_tools_have_required_fields(self):
tools = get_tools_definition()
for tool in tools:
assert 'type' in tool
assert tool['type'] == 'function'
assert 'function' in tool
func = tool['function']
assert 'name' in func
assert 'description' in func
assert 'parameters' in func
def test_filesystem_tools_present(self):
tools = get_tools_definition()
tool_names = [t['function']['name'] for t in tools]
assert 'read_file' in tool_names
assert 'write_file' in tool_names
assert 'list_directory' in tool_names
assert 'search_replace' in tool_names
def test_patch_tools_present(self):
tools = get_tools_definition()
tool_names = [t['function']['name'] for t in tools]
assert 'apply_patch' in tool_names
assert 'create_diff' in tool_names