feat(mma): Implement ASTParser in file_cache.py and refactor mcp_client.py
This commit is contained in:
105
tests/test_ast_parser.py
Normal file
105
tests/test_ast_parser.py
Normal file
@@ -0,0 +1,105 @@
|
||||
import pytest
|
||||
import tree_sitter
|
||||
from file_cache import ASTParser
|
||||
|
||||
def test_ast_parser_initialization():
|
||||
"""Verify that ASTParser can be initialized with a language string."""
|
||||
parser = ASTParser("python")
|
||||
assert parser.language_name == "python"
|
||||
|
||||
def test_ast_parser_parse():
|
||||
"""Verify that the parse method returns a tree_sitter.Tree."""
|
||||
parser = ASTParser("python")
|
||||
code = """def example_func():
|
||||
return 42"""
|
||||
tree = parser.parse(code)
|
||||
assert isinstance(tree, tree_sitter.Tree)
|
||||
# Basic check that it parsed something
|
||||
assert tree.root_node.type == "module"
|
||||
|
||||
def test_ast_parser_get_skeleton_python():
|
||||
"""Verify that get_skeleton replaces function bodies with '...' while preserving docstrings."""
|
||||
parser = ASTParser("python")
|
||||
code = '''
|
||||
def complex_function(a, b):
|
||||
"""
|
||||
This is a docstring.
|
||||
It should be preserved.
|
||||
"""
|
||||
result = a + b
|
||||
if result > 0:
|
||||
return result
|
||||
return 0
|
||||
|
||||
class MyClass:
|
||||
def method_without_docstring(self):
|
||||
print("doing something")
|
||||
return None
|
||||
'''
|
||||
skeleton = parser.get_skeleton(code)
|
||||
|
||||
# Check that signatures are preserved
|
||||
assert "def complex_function(a, b):" in skeleton
|
||||
assert "class MyClass:" in skeleton
|
||||
assert "def method_without_docstring(self):" in skeleton
|
||||
|
||||
# Check that docstring is preserved
|
||||
assert '"""' in skeleton
|
||||
assert "This is a docstring." in skeleton
|
||||
assert "It should be preserved." in skeleton
|
||||
|
||||
# Check that bodies are replaced with '...'
|
||||
assert "..." in skeleton
|
||||
assert "result = a + b" not in skeleton
|
||||
assert "return result" not in skeleton
|
||||
assert 'print("doing something")' not in skeleton
|
||||
|
||||
def test_ast_parser_invalid_language():
|
||||
"""Verify handling of unsupported or invalid languages."""
|
||||
# This might raise an error or return a default, depending on implementation
|
||||
# For now, we expect it to either fail gracefully or raise an exception we can catch
|
||||
with pytest.raises(Exception):
|
||||
ASTParser("not-a-language")
|
||||
|
||||
def test_ast_parser_get_curated_view():
|
||||
"""Verify that get_curated_view preserves function bodies with @core_logic or # [HOT]."""
|
||||
parser = ASTParser("python")
|
||||
code = '''
|
||||
@core_logic
|
||||
def core_func():
|
||||
"""Core logic doc."""
|
||||
print("this should be preserved")
|
||||
return True
|
||||
|
||||
def hot_func():
|
||||
# [HOT]
|
||||
print("this should also be preserved")
|
||||
return 42
|
||||
|
||||
def normal_func():
|
||||
"""Normal doc."""
|
||||
print("this should be stripped")
|
||||
return None
|
||||
|
||||
class MyClass:
|
||||
@core_logic
|
||||
def core_method(self, x):
|
||||
print("method preserved", x)
|
||||
'''
|
||||
curated = parser.get_curated_view(code)
|
||||
|
||||
# Check that core_func is preserved
|
||||
assert 'print("this should be preserved")' in curated
|
||||
assert 'return True' in curated
|
||||
|
||||
# Check that hot_func is preserved
|
||||
assert '# [HOT]' in curated
|
||||
assert 'print("this should also be preserved")' in curated
|
||||
|
||||
# Check that normal_func is stripped but docstring is preserved
|
||||
assert '"""Normal doc."""' in curated
|
||||
assert 'print("this should be stripped")' not in curated
|
||||
assert '...' in curated
|
||||
|
||||
# Check that core_method is preserved
|
||||
assert 'print("method preserved", x)' in curated
|
||||
Reference in New Issue
Block a user