Add test files
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled

This commit is contained in:
2026-02-02 02:43:06 +00:00
parent 74f28198d7
commit c4b97b4242

View File

@@ -0,0 +1,174 @@
import pytest
from pathlib import Path
from src.analyzers.complexity import ComplexityCalculator
from src.analyzers.dependencies import DependencyAnalyzer
from src.graph.builder import GraphBuilder, GraphType, GraphNode, NodeType, GraphEdge
from src.parsers.base import Entity, EntityType
class TestComplexityCalculator:
def setup_method(self):
self.calculator = ComplexityCalculator()
def test_simple_function_complexity(self):
entity = Entity(
name="simple_func",
entity_type=EntityType.FUNCTION,
file_path=Path("/test.py"),
start_line=1,
end_line=5,
code="def simple_func():\n pass",
)
result = self.calculator.calculate_for_entity(entity)
assert result["complexity_score"] == 1
assert result["name"] == "simple_func"
def test_function_with_if_statement(self):
entity = Entity(
name="func_with_if",
entity_type=EntityType.FUNCTION,
file_path=Path("/test.py"),
start_line=1,
end_line=10,
code="def func_with_if(x):\n if x > 0:\n return True\n return False",
)
result = self.calculator.calculate_for_entity(entity)
assert result["complexity_score"] == 2
assert result["decision_points"] == 1
def test_function_with_multiple_decision_points(self):
entity = Entity(
name="complex_func",
entity_type=EntityType.FUNCTION,
file_path=Path("/test.py"),
start_line=1,
end_line=20,
code="""def complex_func(x):
if x > 0:
if x > 10:
return "big"
else:
return "small"
elif x < 0:
return "negative"
else:
return "zero"
""",
)
result = self.calculator.calculate_for_entity(entity)
assert result["complexity_score"] >= 4
def test_function_with_loop(self):
entity = Entity(
name="func_with_loop",
entity_type=EntityType.FUNCTION,
file_path=Path("/test.py"),
start_line=1,
end_line=10,
code="def func_with_loop(items):\n for item in items:\n print(item)",
)
result = self.calculator.calculate_for_entity(entity)
assert result["complexity_score"] == 2
def test_method_complexity(self):
entity = Entity(
name="method",
entity_type=EntityType.METHOD,
file_path=Path("/test.py"),
start_line=1,
end_line=8,
code="def process(self, data):\n if data:\n for item in data:\n if item.valid:\n pass",
)
result = self.calculator.calculate_for_entity(entity)
assert result["entity_type"] == "method"
def test_complexity_threshold(self):
assert self.calculator.complexity_threshold == 10
def test_set_complexity_threshold(self):
self.calculator.set_complexity_threshold(15)
assert self.calculator.complexity_threshold == 15
def test_is_complex_flag(self):
entity = Entity(
name="simple",
entity_type=EntityType.FUNCTION,
file_path=Path("/test.py"),
start_line=1,
end_line=5,
code="def simple():\n pass",
)
result = self.calculator.calculate_for_entity(entity)
assert result["is_complex"] is False
def test_high_complexity_flag(self):
entity = Entity(
name="complex",
entity_type=EntityType.FUNCTION,
file_path=Path("/test.py"),
start_line=1,
end_line=30,
code="def complex():\n if True:\n if True:\n if True:\n if True:\n if True:\n if True:\n if True:\n if True:\n if True:\n if True:\n if True:\n pass",
)
result = self.calculator.calculate_for_entity(entity)
assert result["is_complex"] is True
def test_calculate_project_complexity(self):
entities = [
Entity(
name="func1",
entity_type=EntityType.FUNCTION,
file_path=Path("/test.py"),
start_line=1,
end_line=5,
code="def func1():\n pass",
),
Entity(
name="func2",
entity_type=EntityType.FUNCTION,
file_path=Path("/test.py"),
start_line=10,
end_line=20,
code="def func2():\n if True:\n pass",
),
]
report = self.calculator.calculate_project_complexity(entities)
assert report["total_functions"] == 2
assert report["total_cyclomatic_complexity"] >= 2
assert "complexity_distribution" in report
class TestDependencyAnalyzer:
def setup_method(self):
self.builder = GraphBuilder(GraphType.DIRECTED)
self.analyzer = DependencyAnalyzer(self.builder)
def test_analyze_empty_graph(self):
report = self.analyzer.analyze()
assert report.total_files == 0
assert report.total_functions == 0
assert report.total_classes == 0
def test_count_entities(self):
file_node = GraphNode(node_id="file1", node_type=NodeType.FILE, name="test.py")
func_node = GraphNode(node_id="func1", node_type=NodeType.FUNCTION, name="test_func")
class_node = GraphNode(node_id="class1", node_type=NodeType.CLASS, name="TestClass")
self.builder.add_node(file_node)
self.builder.add_node(func_node)
self.builder.add_node(class_node)
report = self.analyzer.analyze()
assert report.total_files == 1
assert report.total_functions == 1
assert report.total_classes == 1
def test_get_architecture_layers(self):
file_node = GraphNode(
node_id="controller",
node_type=NodeType.FILE,
name="controller.py",
file_path=Path("/src/ui/controller.py"),
)
self.builder.add_node(file_node)
layers = self.analyzer.get_architecture_layers()
assert "presentation" in layers or "other" in layers