93 lines
2.6 KiB
Python
93 lines
2.6 KiB
Python
import pytest
|
|
from pathlib import Path
|
|
from codechunk.core.dependency import DependencyAnalyzer, DependencyNode
|
|
from codechunk.core.chunking import ParsedChunk, ChunkMetadata
|
|
|
|
|
|
class TestDependencyAnalyzer:
|
|
"""Tests for DependencyAnalyzer."""
|
|
|
|
def test_analyze_dependencies_basic(self, tmp_path):
|
|
"""Test basic dependency analysis."""
|
|
main_code = '''
|
|
import os
|
|
import json
|
|
|
|
def main():
|
|
pass
|
|
'''
|
|
utils_code = '''
|
|
from typing import List
|
|
|
|
def helper():
|
|
pass
|
|
'''
|
|
|
|
(tmp_path / "main.py").write_text(main_code)
|
|
(tmp_path / "utils.py").write_text(utils_code)
|
|
|
|
from codechunk.core.parser import CodeParser
|
|
parser = CodeParser()
|
|
parser.discover_files(tmp_path, ["*.py"], [])
|
|
chunks = parser.parse_all()
|
|
|
|
analyzer = DependencyAnalyzer()
|
|
graph = analyzer.analyze_dependencies(chunks, parser.files)
|
|
|
|
assert len(graph) >= 2
|
|
|
|
def test_get_essential_chunks(self):
|
|
"""Test getting essential chunks including dependencies."""
|
|
analyzer = DependencyAnalyzer()
|
|
|
|
analyzer.dependency_graph = {
|
|
"main": DependencyNode(
|
|
chunk_name="main",
|
|
file_path=Path("main.py"),
|
|
module_name="main",
|
|
dependencies={"utils", "helper"}
|
|
),
|
|
"utils": DependencyNode(
|
|
chunk_name="utils",
|
|
file_path=Path("utils.py"),
|
|
module_name="utils",
|
|
dependencies={"helper"}
|
|
),
|
|
"helper": DependencyNode(
|
|
chunk_name="helper",
|
|
file_path=Path("helper.py"),
|
|
module_name="helper",
|
|
dependencies=set()
|
|
),
|
|
}
|
|
|
|
essential = analyzer.get_essential_chunks(["main"])
|
|
|
|
assert "main" in essential
|
|
assert "utils" in essential
|
|
assert "helper" in essential
|
|
|
|
def test_empty_project(self):
|
|
"""Test dependency analysis with no chunks."""
|
|
analyzer = DependencyAnalyzer()
|
|
graph = analyzer.analyze_dependencies([], [])
|
|
|
|
assert len(graph) == 0
|
|
|
|
|
|
class TestDependencyNode:
|
|
"""Tests for DependencyNode dataclass."""
|
|
|
|
def test_dependency_node_creation(self):
|
|
"""Test creating a dependency node."""
|
|
node = DependencyNode(
|
|
chunk_name="test",
|
|
file_path=Path("test.py"),
|
|
module_name="test",
|
|
dependencies={"dep1", "dep2"},
|
|
dependents={"parent"}
|
|
)
|
|
|
|
assert node.chunk_name == "test"
|
|
assert node.dependencies == {"dep1", "dep2"}
|