123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- # Copyright 2021-2025 Avaiga Private Limited
- #
- # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
- # the License. You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
- # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
- # specific language governing permissions and limitations under the License.
- import pytest
- from tools.release.common import Version
- def test_from_string():
- with pytest.raises(ValueError):
- Version.from_string("invalid")
- with pytest.raises(ValueError):
- Version.from_string("1")
- with pytest.raises(ValueError):
- Version.from_string("1.x.2")
- version = Version.from_string("1.2")
- assert version.major == 1
- assert version.minor == 2
- assert version.patch == 0
- assert version.ext is None
- version = Version.from_string("1.2.3")
- assert version.major == 1
- assert version.minor == 2
- assert version.patch == 3
- assert version.ext is None
- version = Version.from_string("1.2.3.some_ext")
- assert version.major == 1
- assert version.minor == 2
- assert version.patch == 3
- assert version.ext == "some_ext"
- version = Version.from_string("1.2.3.some_ext.more_ext")
- assert version.major == 1
- assert version.minor == 2
- assert version.patch == 3
- assert version.ext == "some_ext.more_ext"
- def test_extension():
- version = Version.from_string("1.2.3")
- extension = version.split_ext()
- assert extension == ("", -1)
- version = Version.from_string("1.2.3.some_ext")
- extension = version.split_ext()
- assert extension == ("some_ext", -1)
- version = Version.from_string("1.2.3.some_ext123")
- extension = version.split_ext()
- assert extension == ("some_ext", 123)
- def test_to_string():
- version = Version(major=1, minor=2)
- assert str(version) == "1.2.0"
- version = Version(major=1, minor=2, patch=3)
- assert str(version) == "1.2.3"
- version = Version(major=1, minor=2, patch=3, ext="some_ext")
- assert str(version) == "1.2.3.some_ext"
- def test_to_dict():
- version = Version(major=1, minor=2, patch=3)
- assert version.to_dict() == {"major": 1, "minor": 2, "patch": 3}
- version = Version(major=1, minor=2, patch=3, ext="some_ext")
- assert version.to_dict() == {"major": 1, "minor": 2, "patch": 3, "ext": "some_ext"}
- def test_compatibility():
- # Different major version number
- v1 = Version(major=1, minor=2, patch=3)
- v2 = Version(major=2, minor=2, patch=3)
- assert not v1.is_compatible(v2), "Major versions differ"
- # Different minor version number
- v1 = Version(major=1, minor=2, patch=3)
- v2 = Version(major=1, minor=3, patch=3)
- assert not v1.is_compatible(v2), "Minor versions differ"
- # All the same
- v1 = Version(major=1, minor=2, patch=3)
- v2 = Version(major=1, minor=2, patch=3)
- assert v1.is_compatible(v2), "Identical versions"
- # Greater patch number
- v1 = Version(major=1, minor=2, patch=4)
- v2 = Version(major=1, minor=2, patch=3)
- assert v1.is_compatible(v2), "Patch number is greater"
- # Smaller patch number
- v1 = Version(major=1, minor=2, patch=3)
- v2 = Version(major=1, minor=2, patch=4)
- assert v1.is_compatible(v2), "Patch number is smaller"
- # Same patch number, extension
- v1 = Version(major=1, minor=2, patch=3, ext="ext")
- v2 = Version(major=1, minor=2, patch=3)
- assert v1.is_compatible(v2), "Same version, with extension"
- # Same patch number, no extension
- v1 = Version(major=1, minor=2, patch=3)
- v2 = Version(major=1, minor=2, patch=3, ext="ext")
- assert not v1.is_compatible(v2), "Same version, no extension is expected"
- # Same patch number, different extension
- v1 = Version(major=1, minor=2, patch=3, ext="some_ext")
- v2 = Version(major=1, minor=2, patch=3, ext="another_ext")
- assert not v1.is_compatible(v2), "Same version, different extensions"
- def test_order():
- v1 = Version(major=1, minor=0)
- v2 = Version(major=2, minor=0)
- assert v1 < v2, "Version 1.0 is older than 2.0"
- assert v2 > v1, "Version 2.0 is newer than 1.0"
- v1 = Version(major=1, minor=0)
- v2 = Version(major=1, minor=1)
- assert v1 < v2, "Version 1.0 is older than 1.1"
- assert v2 > v1, "Version 1.1 is newer than 1.0"
- v1 = Version(major=1, minor=2)
- v2 = Version(major=2, minor=1)
- assert v1 < v2, "Version 1.2 is older than 2.1"
- assert v2 > v1, "Version 2.1 is newer than 1.2"
- v1 = Version(major=1, minor=0)
- v2 = Version(major=1, minor=0, patch=1)
- assert v1 < v2, "Version 1.0.0 is older than 1.0.1"
- assert v2 > v1, "Version 1.0.1 is newer than 1.0.0"
- v1 = Version(major=1, minor=2, patch=3)
- v2 = Version(major=1, minor=2, patch=3, ext="dev0")
- assert v1 > v2, "Version 1.2.3 is newer than 1.2.3.dev0"
- assert v2 < v1, "Version 1.2.3.dev0 is older than 1.2.3"
- v1 = Version(major=1, minor=2, patch=3, ext="dev0")
- v2 = Version(major=1, minor=2, patch=3, ext="dev1")
- assert v1 < v2, "Version 1.2.3.dev0 is older than 1.2.3.dev1"
- assert v2 > v1, "Version 1.2.3.dev1 is newer 1.2.3.dev0"
- versions = [Version(1, 0), Version(2, 1), Version(3, 4), Version(2, 0)]
- assert max(versions) == Version(3, 4), "Cannot find max in Version list"
|