def test_v1_patterns(pattern_str, line, expected): pattern = v1patterns.compile_pattern(pattern_str) result = pattern.regexp.search(line) if result is None: assert expected is None, (pattern_str, line) else: result_val = result.group(0) assert result_val == expected, (pattern_str, line)
def test_v1_rewrite_lines(): version_pattern = "{pycalver}" new_vinfo = v1version.parse_version_info("v201811.0123-beta", version_pattern) patterns = [ v1patterns.compile_pattern(version_pattern, '__version__ = "{pycalver}"') ] lines = v1rewrite.rewrite_lines(patterns, new_vinfo, ['__version__ = "v201809.0002-beta"']) assert lines == ['__version__ = "v201811.0123-beta"'] patterns = [ v1patterns.compile_pattern(version_pattern, '__version__ = "{pep440_version}"') ] lines = v1rewrite.rewrite_lines(patterns, new_vinfo, ['__version__ = "201809.2b0"']) assert lines == ['__version__ = "201811.123b0"']
def test_v1_rewrite_lines_basic(): pattern = v1patterns.compile_pattern("{pycalver}", '__version__ = "{pycalver}"') new_vinfo = v1version.parse_version_info("v201911.0003") old_lines = REWRITE_FIXTURE.splitlines() new_lines = v1rewrite.rewrite_lines([pattern], new_vinfo, old_lines) assert len(new_lines) == len(old_lines) assert "v201911.0003" not in "\n".join(old_lines) assert "v201911.0003" in "\n".join(new_lines)
def test_v1_diff(): version_pattern = "{year}{build}{release}" raw_pattern = '__version__ = "{year}{build}{release}"' pattern = v1patterns.compile_pattern(version_pattern, raw_pattern) file_patterns = {"src/bumpver/__init__.py": [pattern]} old_vinfo = v1version.parse_version_info("v201809.0123") new_vinfo = v1version.parse_version_info("v201911.1124") assert new_vinfo > old_vinfo old_vinfo = v1version.parse_version_info("2018.0123", version_pattern) new_vinfo = v1version.parse_version_info("2019.1124", version_pattern) diff_str = v1rewrite.diff(old_vinfo, new_vinfo, file_patterns) lines = diff_str.split("\n") assert lines[:2] == [ "--- src/bumpver/__init__.py", "+++ src/bumpver/__init__.py", ] assert lines[6].startswith('-__version__ = "20') assert lines[7].startswith('+__version__ = "20') assert not lines[6].startswith('-__version__ = "2018.0123"') assert lines[7] == '+__version__ = "2019.1124"' raw_pattern = "Copyright (c) 2018-{year}" pattern = v1patterns.compile_pattern(version_pattern, raw_pattern) file_patterns = {'LICENSE': [pattern]} diff_str = v1rewrite.diff(old_vinfo, new_vinfo, file_patterns) lines = diff_str.split("\n") assert lines[3].startswith("-MIT License Copyright (c) 2018-20") assert lines[4].startswith("+MIT License Copyright (c) 2018-2019")
def test_default_parse_patterns(): lines = SETUP_PY_FIXTURE.splitlines() patterns = ["{pycalver}", "{pep440_pycalver}"] re_patterns = [v1patterns.compile_pattern(p) for p in patterns] matches = list(parse.iter_matches(lines, re_patterns)) assert len(matches) == 2 assert matches[0].lineno == 3 assert matches[1].lineno == 6 assert matches[0].pattern == re_patterns[0] assert matches[1].pattern == re_patterns[1] assert matches[0].match == "v201712.0002-alpha" assert matches[1].match == "201712.2a0"
def test_explicit_parse_patterns(): lines = SETUP_PY_FIXTURE.splitlines() patterns = ["__version__ = '{pycalver}'", "version='{pep440_pycalver}'"] re_patterns = [v1patterns.compile_pattern(p) for p in patterns] matches = list(parse.iter_matches(lines, re_patterns)) assert len(matches) == 2 assert matches[0].lineno == 3 assert matches[1].lineno == 6 assert matches[0].pattern == re_patterns[0] assert matches[1].pattern == re_patterns[1] assert matches[0].match == "__version__ = 'v201712.0002-alpha'" assert matches[1].match == "version='201712.2a0'"
def test_v1_rewrite_final(): # Patterns written with {release_tag} placeholder preserve # the release tag even if the new version is -final pattern = v1patterns.compile_pattern( "v{year}{month}.{build_no}-{release_tag}", '__version__ = "v{year}{month}.{build_no}-{release_tag}"', ) new_vinfo = v1version.parse_version_info("v201911.0003") old_lines = REWRITE_FIXTURE.splitlines() new_lines = v1rewrite.rewrite_lines([pattern], new_vinfo, old_lines) assert len(new_lines) == len(old_lines) assert "v201911.0003" not in "\n".join(old_lines) assert "None" not in "\n".join(new_lines) assert "v201911.0003-final" in "\n".join(new_lines)
def test_badge_parse_patterns(): lines = README_RST_FIXTURE.splitlines() patterns = [ "badge/CalVer-{calver}{build}-{release}-blue.svg", ":alt: CalVer {pycalver}" ] re_patterns = [v1patterns.compile_pattern(p) for p in patterns] matches = list(parse.iter_matches(lines, re_patterns)) assert len(matches) == 2 assert matches[0].lineno == 3 assert matches[1].lineno == 5 assert matches[0].pattern == re_patterns[0] assert matches[1].pattern == re_patterns[1] assert matches[0].match == "badge/CalVer-v201809.0002--beta-blue.svg" assert matches[1].match == ":alt: CalVer v201809.0002-beta"
def test_v1_iter_rewritten(): version_pattern = "{year}{build}{release}" new_vinfo = v1version.parse_version_info("2018.0123", version_pattern) init_pattern = v1patterns.compile_pattern( version_pattern, '__version__ = "{year}{build}{release}"') file_patterns = {"src/bumpver/__init__.py": [init_pattern]} rewritten_datas = v1rewrite.iter_rewritten(file_patterns, new_vinfo) rfd = list(rewritten_datas)[0] expected = [ "# This file is part of the bumpver project", "# https://github.com/mbarkhau/bumpver", "#", "# Copyright (c) 2018-2021 Manuel Barkhau ([email protected]) - MIT License", "# SPDX-License-Identifier: MIT", '"""BumpVer: A CLI program for versioning."""', '', '__version__ = "2018.0123"', '', ] assert rfd.new_lines == expected
def test_v1_error_bad_pattern(): with util.Project(project="b") as project: ctx = config.init_project_ctx(project.dir) cfg = config.parse(ctx) assert cfg patterns = copy.deepcopy(cfg.file_patterns) original_pattern = patterns["setup.py"][0] invalid_pattern = v1patterns.compile_pattern( original_pattern.version_pattern, original_pattern.raw_pattern + ".invalid", ) patterns["setup.py"] = [invalid_pattern] try: old_vinfo = v1version.parse_version_info("v201808.0233") new_vinfo = v1version.parse_version_info("v201809.1234") list(v1rewrite.diff(old_vinfo, new_vinfo, patterns)) assert False, "expected rewrite.NoPatternMatch" except rewrite.NoPatternMatch as ex: assert "setup.py" in str(ex)
def test_v1_optional_release(): version_pattern = "{year}.{build_no}{release}" new_vinfo = v1version.parse_version_info("2019.0003", version_pattern) raw_pattern = '__version__ = "{year}.{build_no}{release}"' pattern = v1patterns.compile_pattern(version_pattern, raw_pattern) old_lines = OPTIONAL_RELEASE_FIXTURE.splitlines() new_lines = v1rewrite.rewrite_lines([pattern], new_vinfo, old_lines) assert len(new_lines) == len(old_lines) assert "2019.0003" not in "\n".join(old_lines) assert "2019.0003" in "\n".join(new_lines) assert '__version__ = "2019.0003"' in "\n".join(new_lines) new_vinfo = v1version.parse_version_info("2019.0004-beta", version_pattern) new_lines = v1rewrite.rewrite_lines([pattern], new_vinfo, old_lines) # make sure optional release tag is added back on assert len(new_lines) == len(old_lines) assert "2019.0004-beta" not in "\n".join(old_lines) assert "2019.0004-beta" in "\n".join(new_lines) assert '__version__ = "2019.0004-beta"' in "\n".join(new_lines)
def test_v1_parse_versions(pattern_str, line, expected_vinfo): if "{" in pattern_str: pattern = v1patterns.compile_pattern(pattern_str) version_match = pattern.regexp.search(line) else: pattern = v2patterns.compile_pattern(pattern_str) version_match = pattern.regexp.search(line) if expected_vinfo is None: assert version_match is None else: assert version_match is not None version_str = version_match.group(0) if "{" in pattern_str: version_info = v1version.parse_version_info( version_str, pattern_str) assert version_info == expected_vinfo else: version_info = v2version.parse_version_info( version_str, pattern_str) assert version_info == expected_vinfo
def test_curly_escapes(): pattern_str = 'package_metadata = {"name": "mypackage", "version": "{pycalver}"}' pattern = v1patterns.compile_pattern(pattern_str) match = pattern.regexp.search(CURLY_BRACE_FIXTURE) expected = 'package_metadata = {"name": "mypackage", "version": "v201812.0123-beta"}' assert match.group(0) == expected
def test_pattern_escapes(): pattern_str = 'click.version_option(version="{pycalver}")' pattern = v1patterns.compile_pattern(pattern_str) match = pattern.regexp.search(CLI_MAIN_FIXTURE) expected = 'click.version_option(version="v201812.0123-beta")' assert match.group(0) == expected