test_version.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. # Copyright 2021-2025 Avaiga Private Limited
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  4. # the License. You may obtain a copy of the License at
  5. #
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. #
  8. # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  9. # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  10. # specific language governing permissions and limitations under the License.
  11. import pytest
  12. from tools.release.common import Version
  13. def test_from_string():
  14. with pytest.raises(ValueError):
  15. Version.from_string("invalid")
  16. with pytest.raises(ValueError):
  17. Version.from_string("1")
  18. with pytest.raises(ValueError):
  19. Version.from_string("1.x.2")
  20. version = Version.from_string("1.2")
  21. assert version.major == 1
  22. assert version.minor == 2
  23. assert version.patch == 0
  24. assert version.ext is None
  25. version = Version.from_string("1.2.3")
  26. assert version.major == 1
  27. assert version.minor == 2
  28. assert version.patch == 3
  29. assert version.ext is None
  30. version = Version.from_string("1.2.3.some_ext")
  31. assert version.major == 1
  32. assert version.minor == 2
  33. assert version.patch == 3
  34. assert version.ext == "some_ext"
  35. version = Version.from_string("1.2.3.some_ext.more_ext")
  36. assert version.major == 1
  37. assert version.minor == 2
  38. assert version.patch == 3
  39. assert version.ext == "some_ext.more_ext"
  40. def test_extension():
  41. version = Version.from_string("1.2.3")
  42. extension = version.split_ext()
  43. assert extension == ("", -1)
  44. version = Version.from_string("1.2.3.some_ext")
  45. extension = version.split_ext()
  46. assert extension == ("some_ext", -1)
  47. version = Version.from_string("1.2.3.some_ext123")
  48. extension = version.split_ext()
  49. assert extension == ("some_ext", 123)
  50. def test_to_string():
  51. version = Version(major=1, minor=2)
  52. assert str(version) == "1.2.0"
  53. version = Version(major=1, minor=2, patch=3)
  54. assert str(version) == "1.2.3"
  55. version = Version(major=1, minor=2, patch=3, ext="some_ext")
  56. assert str(version) == "1.2.3.some_ext"
  57. def test_to_dict():
  58. version = Version(major=1, minor=2, patch=3)
  59. assert version.to_dict() == {"major": 1, "minor": 2, "patch": 3}
  60. version = Version(major=1, minor=2, patch=3, ext="some_ext")
  61. assert version.to_dict() == {"major": 1, "minor": 2, "patch": 3, "ext": "some_ext"}
  62. def test_compatibility():
  63. # Different major version number
  64. v1 = Version(major=1, minor=2, patch=3)
  65. v2 = Version(major=2, minor=2, patch=3)
  66. assert not v1.is_compatible(v2), "Major versions differ"
  67. # Different minor version number
  68. v1 = Version(major=1, minor=2, patch=3)
  69. v2 = Version(major=1, minor=3, patch=3)
  70. assert not v1.is_compatible(v2), "Minor versions differ"
  71. # All the same
  72. v1 = Version(major=1, minor=2, patch=3)
  73. v2 = Version(major=1, minor=2, patch=3)
  74. assert v1.is_compatible(v2), "Identical versions"
  75. # Greater patch number
  76. v1 = Version(major=1, minor=2, patch=4)
  77. v2 = Version(major=1, minor=2, patch=3)
  78. assert v1.is_compatible(v2), "Patch number is greater"
  79. # Smaller patch number
  80. v1 = Version(major=1, minor=2, patch=3)
  81. v2 = Version(major=1, minor=2, patch=4)
  82. assert v1.is_compatible(v2), "Patch number is smaller"
  83. # Same patch number, extension
  84. v1 = Version(major=1, minor=2, patch=3, ext="ext")
  85. v2 = Version(major=1, minor=2, patch=3)
  86. assert v1.is_compatible(v2), "Same version, with extension"
  87. # Same patch number, no extension
  88. v1 = Version(major=1, minor=2, patch=3)
  89. v2 = Version(major=1, minor=2, patch=3, ext="ext")
  90. assert not v1.is_compatible(v2), "Same version, no extension is expected"
  91. # Same patch number, different extension
  92. v1 = Version(major=1, minor=2, patch=3, ext="some_ext")
  93. v2 = Version(major=1, minor=2, patch=3, ext="another_ext")
  94. assert not v1.is_compatible(v2), "Same version, different extensions"
  95. def test_order():
  96. v1 = Version(major=1, minor=0)
  97. v2 = Version(major=2, minor=0)
  98. assert v1 < v2, "Version 1.0 is older than 2.0"
  99. assert v2 > v1, "Version 2.0 is newer than 1.0"
  100. v1 = Version(major=1, minor=0)
  101. v2 = Version(major=1, minor=1)
  102. assert v1 < v2, "Version 1.0 is older than 1.1"
  103. assert v2 > v1, "Version 1.1 is newer than 1.0"
  104. v1 = Version(major=1, minor=2)
  105. v2 = Version(major=2, minor=1)
  106. assert v1 < v2, "Version 1.2 is older than 2.1"
  107. assert v2 > v1, "Version 2.1 is newer than 1.2"
  108. v1 = Version(major=1, minor=0)
  109. v2 = Version(major=1, minor=0, patch=1)
  110. assert v1 < v2, "Version 1.0.0 is older than 1.0.1"
  111. assert v2 > v1, "Version 1.0.1 is newer than 1.0.0"
  112. v1 = Version(major=1, minor=2, patch=3)
  113. v2 = Version(major=1, minor=2, patch=3, ext="dev0")
  114. assert v1 > v2, "Version 1.2.3 is newer than 1.2.3.dev0"
  115. assert v2 < v1, "Version 1.2.3.dev0 is older than 1.2.3"
  116. v1 = Version(major=1, minor=2, patch=3, ext="dev0")
  117. v2 = Version(major=1, minor=2, patch=3, ext="dev1")
  118. assert v1 < v2, "Version 1.2.3.dev0 is older than 1.2.3.dev1"
  119. assert v2 > v1, "Version 1.2.3.dev1 is newer 1.2.3.dev0"
  120. versions = [Version(1, 0), Version(2, 1), Version(3, 4), Version(2, 0)]
  121. assert max(versions) == Version(3, 4), "Cannot find max in Version list"