Files
Claude-Code-Workflow/codex-lens/examples/test_uri_consistency.py

99 lines
3.3 KiB
Python

"""Test if URI inconsistency causes the issue."""
import asyncio
import json
from pathlib import Path
from codexlens.lsp.standalone_manager import StandaloneLspManager
async def test_with_consistent_uri():
"""Test prepareCallHierarchy with different URI formats."""
workspace_root = Path("D:/Claude_dms3/codex-lens")
test_file = workspace_root / "test_simple_function.py"
resolved = test_file.resolve()
print("Testing URI Consistency")
print("="*80)
# Different URI formats to try
uri_standard = resolved.as_uri()
uri_lowercase = uri_standard.replace("file:///D:", "file:///d:")
print(f"Standard URI: {uri_standard}")
print(f"Lowercase URI: {uri_lowercase}")
manager = StandaloneLspManager(
workspace_root=str(workspace_root),
timeout=30.0,
)
try:
print("\n1. Starting LSP manager...")
await manager.start()
state = await manager._get_server(str(test_file))
if not state:
print(" [ERROR] No server state")
return
print(" [OK] Server ready")
# Open document
print("\n2. Opening document...")
await manager._open_document(state, str(test_file))
await asyncio.sleep(2)
print(" [OK] Document opened, waited 2s")
# Test 1: Standard URI (as_uri)
print("\n3. Test with standard URI...")
params1 = {
"textDocument": {"uri": uri_standard},
"position": {"line": 11, "character": 4} # main function
}
print(f" Params: {json.dumps(params1)}")
result1 = await manager._send_request(state, "textDocument/prepareCallHierarchy", params1)
print(f" Result: {result1}")
# Test 2: Lowercase drive letter
print("\n4. Test with lowercase drive letter URI...")
params2 = {
"textDocument": {"uri": uri_lowercase},
"position": {"line": 11, "character": 4}
}
print(f" Params: {json.dumps(params2)}")
result2 = await manager._send_request(state, "textDocument/prepareCallHierarchy", params2)
print(f" Result: {result2}")
# Test 3: Position at function name start
print("\n5. Test with position at 'def' keyword (char 0)...")
params3 = {
"textDocument": {"uri": uri_lowercase},
"position": {"line": 11, "character": 0}
}
result3 = await manager._send_request(state, "textDocument/prepareCallHierarchy", params3)
print(f" Result: {result3}")
# Test 4: Different positions on line 12 (1-indexed = line 11 0-indexed)
print("\n6. Testing different character positions on 'def main():'...")
for char in [0, 4, 5, 6, 7, 8]:
params = {
"textDocument": {"uri": uri_lowercase},
"position": {"line": 11, "character": char}
}
result = await manager._send_request(state, "textDocument/prepareCallHierarchy", params)
status = "OK" if result else "None"
print(f" char={char}: {status} - {result[:1] if result else '[]'}")
except Exception as e:
print(f"\n[ERROR] {e}")
import traceback
traceback.print_exc()
finally:
print("\n7. Cleanup...")
await manager.stop()
print(" [OK]")
if __name__ == "__main__":
asyncio.run(test_with_consistent_uri())