Skip to content

Commit 316f95a

Browse files
committed
add test coverage for setup.cfg
1 parent d57e60a commit 316f95a

5 files changed

Lines changed: 78 additions & 4 deletions

File tree

‎src/codemodder/dependency_management/setupcfg_writer.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def find_leading_whitespace(s):
1515
match = re.match(r"(\s+)", s)
1616
if match:
1717
return match.group(1)
18-
return ""
18+
return "" # pragma: no cover
1919

2020

2121
def added_line_nums_strategy(lines, i):
@@ -79,7 +79,7 @@ def build_new_lines(
7979
configparser does not retain formatting or comment lines, so we have to build
8080
the output newline manually.
8181
"""
82-
clean_lines = list(map(lambda s: s.strip(), original_lines))
82+
clean_lines = [s.strip() for s in original_lines]
8383

8484
newline_separated = len(defined_dependencies.split("\n")) > 1
8585
if newline_separated:

‎src/codemodder/project_analysis/file_parsers/setup_cfg_file_parser.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def _parse_file(self, file: Path) -> PackageStore | None:
2020
config.read(file)
2121
except configparser.ParsingError:
2222
logger.debug("Unable to parse setup.cfg file.")
23-
return None
23+
return None # pragma: no cover
2424

2525
if "options" not in config:
2626
return None

‎tests/conftest.py‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,25 @@ def pkg_with_reqs_txt_unknown_encoding(tmp_path_factory):
7979
reqs = "\xf0\x28\x8c\xbc"
8080
req_file.write_text(reqs)
8181
return base_dir
82+
83+
84+
@pytest.fixture(scope="module")
85+
def pkg_with_setup_cfg(tmp_path_factory):
86+
base_dir = tmp_path_factory.mktemp("foo")
87+
req_file = base_dir / "setup.cfg"
88+
reqs = """\
89+
[metadata]
90+
name = my_package
91+
version = attr: my_package.VERSION
92+
93+
# some other stuff
94+
95+
[options]
96+
include_package_data = True
97+
python_requires = >=3.7
98+
install_requires =
99+
requests
100+
importlib-metadata; python_version<"3.8"
101+
"""
102+
req_file.write_text(reqs)
103+
return base_dir

‎tests/dependency_management/test_dependency_manager.py‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
from codemodder.change import ChangeSet
44
from codemodder.dependency import DefusedXML, Security
55
from codemodder.dependency_management import DependencyManager
6-
from codemodder.project_analysis.file_parsers import RequirementsTxtParser
6+
from codemodder.project_analysis.file_parsers import (
7+
RequirementsTxtParser,
8+
SetupCfgParser,
9+
)
710
from codemodder.project_analysis.file_parsers.package_store import PackageStore
811

912

@@ -33,3 +36,15 @@ def test_write_for_requirements_txt(self, pkg_with_reqs_txt):
3336

3437
changeset = dm.write(dependencies)
3538
assert isinstance(changeset, ChangeSet)
39+
assert len(changeset.changes)
40+
41+
def test_write_for_setup_cfg(self, pkg_with_setup_cfg):
42+
parser = SetupCfgParser(pkg_with_setup_cfg)
43+
stores = parser.parse()
44+
assert len(stores) == 1
45+
dm = DependencyManager(stores[0], pkg_with_setup_cfg)
46+
dependencies = [DefusedXML, Security]
47+
48+
changeset = dm.write(dependencies)
49+
assert isinstance(changeset, ChangeSet)
50+
assert len(changeset.changes)

‎tests/dependency_management/test_setupcfgt_writer.py‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from textwrap import dedent
2+
import mock
23
import pytest
34

45
from codemodder.dependency_management.setupcfg_writer import SetupCfgWriter
@@ -237,6 +238,42 @@ def test_cfg_bad_formatting(tmpdir):
237238
assert setup_cfg.read() == dedent(orig_setupcfg)
238239

239240

241+
@mock.patch(
242+
"codemodder.dependency_management.setupcfg_writer.SetupCfgWriter.build_new_lines",
243+
return_value=None,
244+
)
245+
def test_cfg_cant_build_newlines(_, tmpdir):
246+
orig_setupcfg = """\
247+
[metadata]
248+
name = my_package
249+
version = attr: my_package.VERSION
250+
251+
# some other stuff
252+
253+
[options]
254+
include_package_data = True
255+
python_requires = >=3.7
256+
install_requires =
257+
requests
258+
importlib-metadata; python_version<"3.8"
259+
"""
260+
261+
setup_cfg = tmpdir.join("setup.cfg")
262+
setup_cfg.write(dedent(orig_setupcfg))
263+
264+
store = PackageStore(
265+
type=FileType.SETUP_CFG,
266+
file=str(setup_cfg),
267+
dependencies=set(),
268+
py_versions=[">=3.7"],
269+
)
270+
271+
writer = SetupCfgWriter(store, tmpdir)
272+
dependencies = [Security, Security]
273+
writer.write(dependencies)
274+
assert setup_cfg.read() == dedent(orig_setupcfg)
275+
276+
240277
def test_cfg_inline_dependencies(tmpdir):
241278
orig_setupcfg = """\
242279
[metadata]

0 commit comments

Comments
 (0)