diff --git a/omps/quay.py b/omps/quay.py index e197a15..9b628b0 100644 --- a/omps/quay.py +++ b/omps/quay.py @@ -4,6 +4,8 @@ # """Module related to quay operations""" + +import re from functools import total_ordering import logging @@ -44,18 +46,11 @@ def _raise(msg): assert isinstance(version, str) - parts = version.split('.') - if len(parts) != 3: - _raise("version must consist of 3 parts separated by '.'") - - for part in parts: - try: - value = int(part) - except ValueError: - _raise("'{}' cannot be converted to integer".format(part)) - else: - if value < 0: - _raise("integer '{}' must be >=0".format(value)) + r_int_part = r"(0|[1-9][0-9]*)" + regexp = r"^{p}\.{p}\.{p}$".format(p=r_int_part) + match = re.match(regexp, version) + if not match: + _raise("must match regexp '{}'".format(regexp)) @classmethod def from_str(cls, version): diff --git a/tests/test_quay.py b/tests/test_quay.py index 69d40d4..e46b7db 100644 --- a/tests/test_quay.py +++ b/tests/test_quay.py @@ -18,11 +18,16 @@ class TestReleaseVersion: """Tests for ReleaseVersion class""" - def test_from_str(self): + @pytest.mark.parametrize('version,expected', [ + ("1.2.3", (1, 2, 3)), + ("1.0.0", (1, 0, 0)), + ("0.0.0", (0, 0, 0)), + ]) + def test_from_str(self, version, expected): """Test of creating ReleaseVersion object from string""" - version = ReleaseVersion.from_str("1.2.3") - assert isinstance(version, ReleaseVersion) - assert version.version_tuple == (1, 2, 3) + v = ReleaseVersion.from_str(version) + assert isinstance(v, ReleaseVersion) + assert v.version_tuple == expected @pytest.mark.parametrize('value', [ "1", @@ -32,6 +37,10 @@ def test_from_str(self): "1-5.1.0", "-1.2.3", "a.b.c", + "1.01.0", + "+1.0.0", + "0x1.0.0", + "1.1.1a0", ]) def test_from_str_invalid(self, value): """Test if error is properly raised for invalid input"""