import pytest from pytest import mark from ra_aid.tools import read_file_tool def test_basic_file_reading(tmp_path): """Test basic file reading functionality""" # Create a test file test_file = tmp_path / "test.txt" test_content = "Hello\nWorld\n" test_file.write_text(test_content) # Read the file result = read_file_tool(str(test_file)) # Verify return format and content assert isinstance(result, dict) assert 'content' in result assert result['content'] == test_content def test_no_truncation(tmp_path): """Test that files under max_lines are not truncated""" # Create a test file with content under the limit test_file = tmp_path / "small.txt" line_count = 4000 # Well under 5000 limit test_content = "line\n" * line_count test_file.write_text(test_content) # Read the file result = read_file_tool(str(test_file)) # Verify no truncation occurred assert isinstance(result, dict) assert '[lines of output truncated]' not in result['content'] assert len(result['content'].splitlines()) == line_count @pytest.mark.timeout(30) def test_with_truncation(tmp_path): """Test that files over max_lines are properly truncated""" # Create a test file exceeding the limit test_file = tmp_path / "large.txt" line_count = 6000 # Exceeds 5000 limit test_content = "line\n" * line_count test_file.write_text(test_content) # Read the file result = read_file_tool(str(test_file)) # Verify truncation occurred correctly assert isinstance(result, dict) assert '[1000 lines of output truncated]' in result['content'] assert len(result['content'].splitlines()) == 5001 # 5000 content lines + 1 truncation message def test_nonexistent_file(): """Test error handling for non-existent files""" with pytest.raises(FileNotFoundError): read_file_tool("/nonexistent/file.txt") def test_empty_file(tmp_path): """Test reading an empty file""" # Create an empty test file test_file = tmp_path / "empty.txt" test_file.write_text("") # Read the file result = read_file_tool(str(test_file)) # Verify return format and empty content assert isinstance(result, dict) assert 'content' in result assert result['content'] == ""