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]