| #!/usr/bin/env python3 | |
| import argparse | |
| from pathlib import Path | |
| import sys | |
| import unittest | |
| sys.path.insert(0, str(Path(__file__).resolve().parents[1])) | |
| from codex_package.cli import parse_package_version | |
| class PackageVersionTest(unittest.TestCase): | |
| def test_accepts_release_prerelease_and_build_versions(self) -> None: | |
| for version in ( | |
| "0.0.0", | |
| "1.2.3", | |
| "0.0.0-internal.deadbeef", | |
| "1.2.3-alpha.1+build.01", | |
| "18446744073709551615.0.0", | |
| ): | |
| with self.subTest(version=version): | |
| self.assertEqual(parse_package_version(version), version) | |
| def test_rejects_versions_the_runtime_cannot_parse(self) -> None: | |
| for version in ( | |
| "", | |
| "1", | |
| "1.2", | |
| "1.2.3.4", | |
| "v1.2.3", | |
| "01.2.3", | |
| "1.02.3", | |
| "1.2.03", | |
| "1.2.3-", | |
| "1.2.3-alpha..1", | |
| "1.2.3-01", | |
| "1.2.3+", | |
| "1.2.3+build..1", | |
| "18446744073709551616.0.0", | |
| ): | |
| with self.subTest(version=version): | |
| with self.assertRaises(argparse.ArgumentTypeError): | |
| parse_package_version(version) | |
| if __name__ == "__main__": | |
| unittest.main() | |