import pytest
import os
import tempfile
from pathlib import Path
def test_import():
import loregrep
assert hasattr(loregrep, 'LoreGrep')
assert hasattr(loregrep, 'LoreGrepBuilder')
assert hasattr(loregrep, 'ScanResult')
assert hasattr(loregrep, 'ToolResult')
assert hasattr(loregrep, 'ToolSchema')
def test_builder_creation():
import loregrep
builder = loregrep.LoreGrep.builder()
assert builder is not None
def test_builder_configuration():
import loregrep
builder = (loregrep.LoreGrep.builder()
.with_rust_analyzer() .with_python_analyzer() .optimize_for_performance() .exclude_test_dirs() .max_file_size(1024 * 1024) .max_depth(10)
.file_patterns(["*.py", "*.rs", "*.js"])
.exclude_patterns(["target/", "node_modules/"])
.respect_gitignore(True))
assert builder is not None
def test_loregrep_build():
import loregrep
loregrep_instance = (loregrep.LoreGrep.builder()
.max_file_size(1024 * 1024)
.max_depth(5)
.file_patterns(["*.py"])
.build())
assert loregrep_instance is not None
def test_enhanced_api_methods():
import loregrep
try:
auto_instance = loregrep.LoreGrep.auto_discover(".")
assert auto_instance is not None
except Exception:
pass
presets = [
loregrep.LoreGrep.rust_project,
loregrep.LoreGrep.python_project,
loregrep.LoreGrep.polyglot_project,
]
preset_successes = 0
for preset_func in presets:
try:
preset_instance = preset_func(".")
assert preset_instance is not None
preset_successes += 1
except Exception:
pass
assert preset_successes >= 0
def test_enhanced_builder_methods():
import loregrep
try:
enhanced_instance = (loregrep.LoreGrep.builder()
.with_all_analyzers()
.comprehensive_analysis()
.exclude_vendor_dirs()
.include_source_files()
.include_config_files()
.build())
assert enhanced_instance is not None
except Exception:
builder = loregrep.LoreGrep.builder()
try:
builder.with_all_analyzers()
builder.comprehensive_analysis()
builder.exclude_vendor_dirs()
builder.include_source_files()
builder.include_config_files()
except AttributeError:
pytest.fail("Enhanced builder methods should exist")
except Exception:
pass
@pytest.mark.asyncio
async def test_basic_scanning():
import loregrep
with tempfile.TemporaryDirectory() as temp_dir:
test_file = Path(temp_dir) / "test.py"
test_file.write_text("""
def hello_world():
'''A simple hello world function.'''
print("Hello, World!")
return "greeting"
class TestClass:
'''A simple test class.'''
def __init__(self):
self.value = 42
def get_value(self):
return self.value
""")
loregrep_instance = (loregrep.LoreGrep.builder()
.max_file_size(1024 * 1024)
.file_patterns(["*.py"])
.build())
try:
result = await loregrep_instance.scan(temp_dir)
assert hasattr(result, 'files_scanned') assert hasattr(result, 'functions_found')
assert hasattr(result, 'structs_found')
assert hasattr(result, 'duration_ms')
assert result.files_scanned >= 1
except Exception as e:
pytest.skip(f"Scanning test skipped due to: {e}")
def test_tool_definitions():
import loregrep
tools = loregrep.LoreGrep.get_tool_definitions()
assert isinstance(tools, list)
if len(tools) > 0:
tool = tools[0]
assert hasattr(tool, 'name')
assert hasattr(tool, 'description')
assert hasattr(tool, 'parameters')
assert isinstance(tool.name, str)
assert isinstance(tool.description, str)
def test_version_access():
import loregrep
version = loregrep.LoreGrep.version()
assert isinstance(version, str)
assert len(version) > 0
def test_package_metadata():
import loregrep
assert hasattr(loregrep, '__version__')
assert hasattr(loregrep, '__author__')
assert isinstance(loregrep.__version__, str)
assert isinstance(loregrep.__author__, str)
if __name__ == "__main__":
pytest.main([__file__])