Coverage for tests / test_dead_code_core.py: 100%
42 statements
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-08 15:04 -0800
« prev ^ index » next coverage.py v7.13.3, created at 2026-02-08 15:04 -0800
1"""Tests for dead code detection."""
3from __future__ import annotations
5from pathlib import Path
7from parsers.python import parse
8from dead_code.parsers.python import PythonDeadCodeParser
11def test_extract_imports():
12 code = """
13import os
14import sys as system
15from os.path import join, exists
16from typing import List
17"""
18 parser = PythonDeadCodeParser()
19 root = parse(code)
20 imports = parser.extract_imports(root, code)
22 assert len(imports) >= 3
23 import_names = [imp.name for imp in imports]
24 assert "os" in import_names
25 assert "system" in import_names or "sys" in import_names
26 assert "join" in import_names or "exists" in import_names
29def test_extract_definitions():
30 code = """
31def foo():
32 pass
34class Bar:
35 pass
36"""
37 parser = PythonDeadCodeParser()
38 root = parse(code)
39 defs = parser.extract_definitions(root, code)
41 assert len(defs) == 2
42 def_names = [d.name for d in defs]
43 assert "foo" in def_names
44 assert "Bar" in def_names
47def test_extract_references():
48 code = """
49def foo(x):
50 return x
52y = foo(1)
53bar = y
54"""
55 parser = PythonDeadCodeParser()
56 root = parse(code)
57 refs = parser.extract_references(root, code)
59 ref_names = [r.name for r in refs]
60 assert "x" in ref_names
61 assert "foo" in ref_names
62 assert "y" in ref_names
63 assert "bar" in ref_names
66def test_unused_import():
67 from dead_code.core import build_cross_reference_graph, find_unused_imports
69 code = """
70import os
71def foo():
72 return 1
73"""
74 root = parse(code)
75 parser = PythonDeadCodeParser()
77 imports = parser.extract_imports(root, code)
78 refs = parser.extract_references(root, code)
80 assert len(imports) == 1
81 assert len(refs) > 0