65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
from pathlib import Path
|
|
import json
|
|
import os
|
|
|
|
from pyucc.core import countings_impl as ci
|
|
|
|
|
|
def make_item_variant(key_map):
|
|
# helper to create dict with varying keys
|
|
return key_map
|
|
|
|
|
|
def test_map_pygount_json_item_variants():
|
|
item1 = {
|
|
"raw_total_lines": 10,
|
|
"code": 7,
|
|
"comment": 2,
|
|
"blank": 1,
|
|
"language": "Python",
|
|
"filename": "a.py",
|
|
}
|
|
res1 = ci._map_pygount_json_item(item1)
|
|
assert res1["physical_lines"] == 10
|
|
assert res1["code_lines"] == 7
|
|
assert res1["comment_lines"] == 2
|
|
assert res1["blank_lines"] == 1
|
|
assert res1["language"] == "Python"
|
|
assert res1["file"].endswith("a.py")
|
|
|
|
# variant with different key names
|
|
item2 = {
|
|
"n_lines": 4,
|
|
"n_code": 3,
|
|
"n_comment": 1,
|
|
"n_blank": 0,
|
|
"lang": "C",
|
|
"file": "b.c",
|
|
}
|
|
res2 = ci._map_pygount_json_item(item2)
|
|
assert res2["physical_lines"] == 4
|
|
assert res2["code_lines"] == 3
|
|
assert res2["comment_lines"] == 1
|
|
assert res2["blank_lines"] == 0
|
|
assert res2["language"] == "C"
|
|
|
|
|
|
def test_analyze_file_counts_fallback(tmp_path):
|
|
p = tmp_path / "sample.txt"
|
|
data = "line1\n\nline3\nline4\n\n"
|
|
p.write_text(data)
|
|
res = ci.analyze_file_counts(p)
|
|
# pygount counts this as 4 physical lines (doesn't count final empty line)
|
|
assert res["physical_lines"] >= 4 # May be 4 (pygount) or 5 (fallback)
|
|
assert res["blank_lines"] >= 1
|
|
assert "file" in res
|
|
|
|
|
|
def test_analyze_paths_with_missing(tmp_path):
|
|
files = [tmp_path / "nope.py", tmp_path / "also.py"]
|
|
# none exist
|
|
out = ci.analyze_paths(files)
|
|
assert isinstance(out, list)
|
|
assert len(out) == 2
|
|
assert "error" in out[0] or "error" in out[1]
|