From 0a3638a62f05e0da85cae01a00859527bbbb67c7 Mon Sep 17 00:00:00 2001 From: Manuel Barkhau Date: Tue, 4 Sep 2018 09:56:53 +0200 Subject: [PATCH] WIP: more testing --- src/pycalver/config.py | 6 +-- src/pycalver/parse.py | 4 +- src/pycalver/rewrite.py | 2 +- src/pycalver/version.py | 3 ++ test/test_cli.py | 1 + test/test_config.py | 85 ++++++++++++++++++++++++++++++++++++++++- 6 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 test/test_cli.py diff --git a/src/pycalver/config.py b/src/pycalver/config.py index 061cbe2..7721616 100644 --- a/src/pycalver/config.py +++ b/src/pycalver/config.py @@ -32,8 +32,8 @@ class Config(typ.NamedTuple): MaybeConfig = typ.Optional[Config] -def _parse_buffer(cfg_buffer: io.StringIO) -> MaybeConfig: - cfg_parser = configparser.RawConfigParser("") +def parse_buffer(cfg_buffer: io.StringIO) -> MaybeConfig: + cfg_parser = configparser.RawConfigParser() cfg_parser.readfp(cfg_buffer) if "pycalver" not in cfg_parser: @@ -99,7 +99,7 @@ def parse(config_file="setup.cfg") -> MaybeConfig: cfg_buffer.write(fh.read()) cfg_buffer.seek(0) - return _parse_buffer(cfg_buffer) + return parse_buffer(cfg_buffer) def default_config_lines() -> typ.List[str]: diff --git a/src/pycalver/parse.py b/src/pycalver/parse.py index afe4e85..2441c1c 100644 --- a/src/pycalver/parse.py +++ b/src/pycalver/parse.py @@ -17,7 +17,7 @@ VALID_RELESE_VALUES = ("alpha", "beta", "dev", "rc", "post") # https://regex101.com/r/fnj60p/10 -PYCALVER_RE: typ.re.Pattern[str] = re.compile(r""" +PYCALVER_RE: typ.Pattern[str] = re.compile(r""" \b (?P (?P @@ -75,6 +75,8 @@ class VersionInfo(typ.NamedTuple): def parse_version_info(version: str) -> VersionInfo: match = PYCALVER_RE.match(version) + if match is None: + raise ValueError(f"Invalid pycalver: {version}") pep440_version = str(pkg_resources.parse_version(version)) return VersionInfo(pep440_version=pep440_version, **match.groupdict()) diff --git a/src/pycalver/rewrite.py b/src/pycalver/rewrite.py index a783a66..b1e7279 100644 --- a/src/pycalver/rewrite.py +++ b/src/pycalver/rewrite.py @@ -17,7 +17,7 @@ log = logging.getLogger("pycalver.rewrite") def rewrite( new_version: str, - file_patterns: typ.Dict[str, str], + file_patterns: typ.Dict[str, typ.List[str]], dry=False, verbose=False, ) -> None: diff --git a/src/pycalver/version.py b/src/pycalver/version.py index b2bd2dc..058044f 100644 --- a/src/pycalver/version.py +++ b/src/pycalver/version.py @@ -5,6 +5,7 @@ # SPDX-License-Identifier: MIT import logging +import typing as typ import datetime as dt from . import lex_id @@ -34,6 +35,8 @@ def bump(old_version: str, *, release: str=None) -> str: new_calver = old_ver.calver new_build = lex_id.next_id(old_ver.build[1:]) + new_release: typ.Optional[str] = None + if release is None: if old_ver.release: # preserve existing release diff --git a/test/test_cli.py b/test/test_cli.py new file mode 100644 index 0000000..c5829b4 --- /dev/null +++ b/test/test_cli.py @@ -0,0 +1 @@ +from pycalver import __main__ diff --git a/test/test_config.py b/test/test_config.py index f65452f..07ae074 100644 --- a/test/test_config.py +++ b/test/test_config.py @@ -1,5 +1,86 @@ +import io + from pycalver import config -def test_parse(): - pass +def test_parse_default_config(): + buf = io.StringIO() + for line in config.default_config_lines(): + buf.write(line + "\n") + + buf.seek(0) + cfg = config.parse_buffer(buf) + + assert cfg + assert cfg.current_version.endswith(".0001-dev") + assert cfg.tag + assert cfg.commit + + assert "setup.py" in cfg.file_patterns + assert "setup.cfg" in cfg.file_patterns + assert "README.rst" in cfg.file_patterns + + +def test_parse(tmpdir): + setup_path = tmpdir.mkdir("minimal").join("setup.cfg") + setup_path.write("\n".join(( + "[pycalver]", + f"current_version = v201808.0001-dev", + "commit = False", + "tag = False", + "", + "[pycalver:file:setup.cfg]", + "patterns = ", + " current_version = {version}", + ))) + + cfg = config.parse(str(setup_path)) + + assert cfg + assert cfg.current_version == "v201808.0001-dev" + assert not cfg.tag + assert not cfg.commit + + assert cfg.file_patterns == {"setup.cfg": ["current_version = {version}"]} + + +def test_parse_config_missing(tmpdir): + cfg = config.parse("does_not_exist/setup.cfg") + assert cfg is None + + setup_path = tmpdir.mkdir("fail").join("setup.cfg") + + cfg = config.parse(str(setup_path)) + assert cfg is None + + +def test_parse_empty_config(tmpdir): + setup_path = tmpdir.mkdir("fail").join("setup.cfg") + setup_path.write("") + + cfg = config.parse(str(setup_path)) + assert cfg is None + + +def test_parse_missing_version(tmpdir): + setup_path = tmpdir.mkdir("fail").join("setup.cfg") + setup_path.write("\n".join(( + "[pycalver]", + # f"current_version = v201808.0001-dev", + "commit = False", + ))) + + cfg = config.parse(str(setup_path)) + assert cfg is None + + +def test_parse_invalid_version(tmpdir): + setup_path = tmpdir.mkdir("fail").join("setup.cfg") + setup_path.write("\n".join(( + "[pycalver]", + f"current_version = 0.1.0", + "commit = False", + ))) + + cfg = config.parse(str(setup_path)) + assert cfg is None