test_version.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. from functools import cmp_to_key
  2. from build.plugins.lib.nots.semver import Version
  3. def test_from_str():
  4. # arrange
  5. version_str = "1.2.3"
  6. # act
  7. version = Version.from_str(version_str)
  8. # assert
  9. assert version.major == 1
  10. assert version.minor == 2
  11. assert version.patch == 3
  12. def test_from_str_bad_version():
  13. # arrange
  14. version_str = "best version imaginable"
  15. error = None
  16. # act
  17. try:
  18. Version.from_str(version_str)
  19. except Exception as exception:
  20. error = exception
  21. # assert
  22. assert error is not None
  23. def test_is_stable_true():
  24. # arrange
  25. version_str = "1.2.3"
  26. # act + assert
  27. assert Version.is_stable(version_str)
  28. def test_is_stable_false():
  29. # arrange
  30. version_str = "1.2.3-beta1"
  31. # act + assert
  32. assert not Version.is_stable(version_str)
  33. def test_is_stable_incorrect():
  34. # arrange
  35. version_str = "v1.2.3"
  36. # act + assert
  37. assert not Version.is_stable(version_str)
  38. def test_cmp_lt():
  39. # arrange
  40. a = Version.from_str("1.2.3")
  41. b = Version.from_str("1.2.5")
  42. # act + assert
  43. assert Version.cmp(a, b) == -1
  44. def test_cmp_gt():
  45. # arrange
  46. a = Version.from_str("1.2.3")
  47. b = Version.from_str("1.2.2")
  48. # act + assert
  49. assert Version.cmp(a, b) == 1
  50. def test_cmp_eq():
  51. # arrange
  52. a = Version.from_str("1.2.3")
  53. b = Version.from_str("1.2.3")
  54. # act + assert
  55. assert Version.cmp(a, b) == 0
  56. def test_cmp_lt_str():
  57. # arrange
  58. a = "1.2.3"
  59. b = "1.2.5"
  60. # act + assert
  61. assert Version.cmp(a, b) == -1
  62. def test_cmp_gt_str():
  63. # arrange
  64. a = "1.2.3"
  65. b = "1.2.2"
  66. # act + assert
  67. assert Version.cmp(a, b) == 1
  68. def test_cmp_eq_str():
  69. # arrange
  70. a = "1.2.3"
  71. b = "1.2.3"
  72. # act + assert
  73. assert Version.cmp(a, b) == 0
  74. def test_cmp_usage_in_sorted_asc():
  75. # arrange
  76. unsorted = ["1.2.3", "2.4.2", "1.2.7"]
  77. # act + assert
  78. assert sorted(unsorted, key=cmp_to_key(Version.cmp)) == ["1.2.3", "1.2.7", "2.4.2"]
  79. def test_cmp_usage_in_sorted_desc():
  80. # arrange
  81. unsorted = ["1.2.3", "2.4.2", "1.2.7"]
  82. # act + assert
  83. assert sorted(unsorted, key=cmp_to_key(Version.cmp), reverse=True) == ["2.4.2", "1.2.7", "1.2.3"]
  84. def test_init_negative_numbers():
  85. # arrange
  86. major = 1
  87. minor = -2
  88. patch = 3
  89. error = None
  90. # act
  91. try:
  92. Version(major, minor, patch)
  93. except Exception as exception:
  94. error = exception
  95. # assert
  96. assert isinstance(error, ValueError)
  97. assert str(error) == "'minor' is negative. A version can only be positive."
  98. def test_eq():
  99. # arrange
  100. version_a = Version.from_str("1.2.3")
  101. version_b = Version.from_str("1.2.3")
  102. # act + assert
  103. assert version_a == version_b
  104. def test_eq_negative():
  105. # arrange
  106. version_a = Version.from_str("1.2.3")
  107. version_b = Version.from_str("3.2.1")
  108. # act + assert
  109. assert not version_a == version_b
  110. def test_eq_with_str():
  111. # arrange
  112. version = Version.from_str("1.2.3")
  113. # act + assert
  114. assert version == "1.2.3"
  115. assert not version == "1.2.4"
  116. def test_eq_with_invalid_str():
  117. # arrange
  118. version = Version.from_str("1.2.3")
  119. # act + assert
  120. assert not version == "bla-bla"
  121. assert not version == "1.2.3-beta"
  122. def test_ne():
  123. # arrange
  124. version_a = Version.from_str("3.2.1")
  125. version_b = Version.from_str("1.2.3")
  126. # act + assert
  127. assert version_a != version_b
  128. def test_ne_negative():
  129. # arrange
  130. version_a = Version.from_str("1.2.3")
  131. version_b = Version.from_str("1.2.3")
  132. # act + assert
  133. assert not version_a != version_b
  134. def test_ne_with_str():
  135. # arrange
  136. version = Version.from_str("1.2.3")
  137. # act + assert
  138. assert version != "1.2.4"
  139. assert not version != "1.2.3"
  140. def test_gt():
  141. # arrange
  142. version_a = Version.from_str("3.2.1")
  143. version_b = Version.from_str("1.2.3")
  144. # act + assert
  145. assert version_a > version_b
  146. def test_ge_equals():
  147. # arrange
  148. version_a = Version.from_str("1.2.3")
  149. version_b = Version.from_str("1.2.3")
  150. # act + assert
  151. assert version_a >= version_b
  152. def test_ge_exceeds():
  153. # arrange
  154. version_a = Version.from_str("3.2.1")
  155. version_b = Version.from_str("1.2.3")
  156. # act + assert
  157. assert version_a >= version_b
  158. def test_lt():
  159. # arrange
  160. version_a = Version.from_str("1.2.3")
  161. version_b = Version.from_str("3.2.1")
  162. # act + assert
  163. assert version_a < version_b
  164. def test_le_equals():
  165. # arrange
  166. version_a = Version.from_str("1.2.3")
  167. version_b = Version.from_str("1.2.3")
  168. # act + assert
  169. assert version_a <= version_b
  170. def test_le_is_less():
  171. # arrange
  172. version_a = Version.from_str("1.2.3")
  173. version_b = Version.from_str("3.2.1")
  174. # act + assert
  175. assert version_a <= version_b
  176. def test_to_tuple():
  177. # arrange
  178. version = Version.from_str("1.2.3")
  179. # act + assert
  180. assert version.as_tuple() == (1, 2, 3)