1#!/usr/bin/env python3
2#
3# Copyright (c) 2021 Nordic Semiconductor ASA
4#
5# SPDX-License-Identifier: Apache-2.0
6
7from sys import version
8from unittest import TestCase, main
9from pathlib import Path
10from subprocess import Popen, PIPE
11from datetime import date
12
13p_script_dir = Path(__file__).absolute().parents[0]
14p_root = p_script_dir.parents[1]
15p_VERSION = p_root / "zcbor" / "VERSION"
16p_release_notes = p_root / "RELEASE_NOTES.md"
17p_HEAD_REF = p_script_dir / "HEAD_REF"
18
19
20class VersionTest(TestCase):
21    def test_version_num(self):
22        """For release branches - Test that all version numbers have been updated."""
23        current_branch = Popen(['git', 'branch', '--show-current'],
24                               stdout=PIPE).communicate()[0].decode("utf-8").strip()
25        if not current_branch:
26            current_branch = p_HEAD_REF.read_text()
27        self.assertRegex(
28            current_branch, r"release/\d+\.\d+\.\d+",
29            "This test is meant to be run on a release branch on the form 'release/x.y.z'.")
30
31        version_number = current_branch.replace("release/", "")
32        self.assertRegex(
33            version_number, r'\d+\.\d+\.(?!99)\d+',
34            "Releases cannot have the x.y.99 development bugfix release number.")
35        self.assertEqual(
36            version_number, p_VERSION.read_text(),
37            f"{p_VERSION} has not been updated to the correct version number.")
38        self.assertEqual(
39            p_release_notes.read_text().splitlines()[0],
40            r"# zcbor v. " + version_number + f" ({date.today():%Y-%m-%d})",
41            f"{p_release_notes} has not been updated with the correct version number.")
42
43        tags_stdout, _ = Popen(['git', 'tag'], stdout=PIPE).communicate()
44        tags = tags_stdout.decode("utf-8").strip().splitlines()
45        self.assertNotIn(
46            version_number, tags,
47            "Version number already exists as a tag. Has the version number been updated?")
48
49
50if __name__ == "__main__":
51    main()
52