ComparatorTest.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <?php
  2. /*
  3. * This file is part of composer/semver.
  4. *
  5. * (c) Composer <https://github.com/composer>
  6. *
  7. * For the full copyright and license information, please view
  8. * the LICENSE file that was distributed with this source code.
  9. */
  10. namespace Composer\Semver;
  11. use PHPUnit\Framework\TestCase;
  12. use Composer\Semver\Constraint\Constraint;
  13. /**
  14. * @coversDefaultClass \Composer\Semver\Comparator
  15. */
  16. class ComparatorTest extends TestCase
  17. {
  18. /**
  19. * @covers ::greaterThan
  20. * @dataProvider greaterThanProvider
  21. *
  22. * @uses \Composer\Semver\Comparator::compare
  23. *
  24. * @param string $version1
  25. * @param string $version2
  26. * @param bool $expected
  27. */
  28. public function testGreaterThan($version1, $version2, $expected)
  29. {
  30. $this->assertEquals($expected, Comparator::greaterThan($version1, $version2));
  31. }
  32. /**
  33. * @covers ::greaterThanOrEqualTo
  34. * @dataProvider greaterThanOrEqualToProvider
  35. *
  36. * @uses \Composer\Semver\Comparator::compare
  37. *
  38. * @param string $version1
  39. * @param string $version2
  40. * @param bool $expected
  41. */
  42. public function testGreaterThanOrEqualTo($version1, $version2, $expected)
  43. {
  44. $this->assertEquals($expected, Comparator::greaterThanOrEqualTo($version1, $version2));
  45. }
  46. /**
  47. * @covers ::lessThan
  48. * @dataProvider lessThanProvider
  49. *
  50. * @uses \Composer\Semver\Comparator::compare
  51. *
  52. * @param string $version1
  53. * @param string $version2
  54. * @param bool $expected
  55. */
  56. public function testLessThan($version1, $version2, $expected)
  57. {
  58. $this->assertEquals($expected, Comparator::lessThan($version1, $version2));
  59. }
  60. /**
  61. * @covers ::lessThanOrEqualTo
  62. * @dataProvider lessThanOrEqualToProvider
  63. *
  64. * @uses \Composer\Semver\Comparator::compare
  65. *
  66. * @param string $version1
  67. * @param string $version2
  68. * @param bool $expected
  69. */
  70. public function testLessThanOrEqualTo($version1, $version2, $expected)
  71. {
  72. $this->assertEquals($expected, Comparator::lessThanOrEqualTo($version1, $version2));
  73. }
  74. /**
  75. * @covers ::equalTo
  76. * @dataProvider equalToProvider
  77. *
  78. * @uses \Composer\Semver\Comparator::compare
  79. *
  80. * @param string $version1
  81. * @param string $version2
  82. * @param bool $expected
  83. */
  84. public function testEqualTo($version1, $version2, $expected)
  85. {
  86. $this->assertEquals($expected, Comparator::equalTo($version1, $version2));
  87. }
  88. /**
  89. * @covers ::notEqualTo
  90. * @dataProvider notEqualToProvider
  91. *
  92. * @uses \Composer\Semver\Comparator::compare
  93. *
  94. * @param string $version1
  95. * @param string $version2
  96. * @param bool $expected
  97. */
  98. public function testNotEqualTo($version1, $version2, $expected)
  99. {
  100. $this->assertEquals($expected, Comparator::notEqualTo($version1, $version2));
  101. }
  102. /**
  103. * @covers ::compare
  104. * @dataProvider compareProvider
  105. *
  106. * @param string $version1
  107. * @param string $operator
  108. * @param string $version2
  109. * @param bool $expected
  110. *
  111. * @phpstan-param Constraint::STR_OP_* $operator
  112. */
  113. public function testCompare($version1, $operator, $version2, $expected)
  114. {
  115. $this->assertEquals($expected, Comparator::compare($version1, $operator, $version2));
  116. }
  117. /**
  118. * @return array<mixed>
  119. */
  120. public function greaterThanProvider()
  121. {
  122. return array(
  123. array('1.25.0', '1.24.0', true),
  124. array('1.25.0', '1.25.0', false),
  125. array('1.25.0', '1.26.0', false),
  126. array('1.26.0', 'dev-foo', true),
  127. array('dev-foo', 'dev-master', false),
  128. array('dev-foo', 'dev-bar', false),
  129. );
  130. }
  131. /**
  132. * @return array<mixed>
  133. */
  134. public function greaterThanOrEqualToProvider()
  135. {
  136. return array(
  137. array('1.25.0', '1.24.0', true),
  138. array('1.25.0', '1.25.0', true),
  139. array('1.25.0', '1.26.0', false),
  140. );
  141. }
  142. /**
  143. * @return array<mixed>
  144. */
  145. public function lessThanProvider()
  146. {
  147. return array(
  148. array('1.25.0', '1.24.0', false),
  149. array('1.25.0', '1.25.0', false),
  150. array('1.25.0', '1.26.0', true),
  151. array('1.0.0', '1.2-dev', true),
  152. array('dev-foo', '1.26.0', true),
  153. array('dev-foo', 'dev-master', false),
  154. array('dev-foo', 'dev-bar', false),
  155. );
  156. }
  157. /**
  158. * @return array<mixed>
  159. */
  160. public function lessThanOrEqualToProvider()
  161. {
  162. return array(
  163. array('1.25.0', '1.24.0', false),
  164. array('1.25.0', '1.25.0', true),
  165. array('1.25.0', '1.26.0', true),
  166. );
  167. }
  168. /**
  169. * @return array<mixed>
  170. */
  171. public function equalToProvider()
  172. {
  173. return array(
  174. array('1.25.0', '1.24.0', false),
  175. array('1.25.0', '1.25.0', true),
  176. array('1.25.0', '1.26.0', false),
  177. array('dev-foo', '1.26.0', false),
  178. array('dev-foo', 'dev-master', false),
  179. array('dev-foo', 'dev-bar', false),
  180. );
  181. }
  182. /**
  183. * @return array<mixed>
  184. */
  185. public function notEqualToProvider()
  186. {
  187. return array(
  188. array('1.25.0', '1.24.0', true),
  189. array('1.25.0', '1.25.0', false),
  190. array('1.25.0', '1.26.0', true),
  191. );
  192. }
  193. /**
  194. * @return array<mixed>
  195. */
  196. public function compareProvider()
  197. {
  198. return array(
  199. array('1.25.0', '>', '1.24.0', true),
  200. array('1.25.0', '>', '1.25.0', false),
  201. array('1.25.0', '>', '1.26.0', false),
  202. array('1.25.0', '>=', '1.24.0', true),
  203. array('1.25.0', '>=', '1.25.0', true),
  204. array('1.25.0', '>=', '1.26.0', false),
  205. array('1.25.0', '<', '1.24.0', false),
  206. array('1.25.0', '<', '1.25.0', false),
  207. array('1.25.0', '<', '1.26.0', true),
  208. array('1.25.0-beta2.1', '<', '1.25.0-b.3', true),
  209. array('1.25.0-b2.1', '<', '1.25.0beta.3', true),
  210. array('1.25.0-b-2.1', '<', '1.25.0-rc', true),
  211. array('1.25.0', '<=', '1.24.0', false),
  212. array('1.25.0', '<=', '1.25.0', true),
  213. array('1.25.0', '<=', '1.26.0', true),
  214. array('1.25.0', '==', '1.24.0', false),
  215. array('1.25.0', '==', '1.25.0', true),
  216. array('1.25.0', '==', '1.26.0', false),
  217. array('1.25.0-beta2.1', '==', '1.25.0-b.2.1', true),
  218. array('1.25.0beta2.1', '==', '1.25.0-b2.1', true),
  219. array('1.25.0', '=', '1.24.0', false),
  220. array('1.25.0', '=', '1.25.0', true),
  221. array('1.25.0', '=', '1.26.0', false),
  222. array('1.25.0', '!=', '1.24.0', true),
  223. array('1.25.0', '!=', '1.25.0', false),
  224. array('1.25.0', '!=', '1.26.0', true),
  225. array('1.25.0', '<>', '1.24.0', true),
  226. array('1.25.0', '<>', '1.25.0', false),
  227. array('1.25.0', '<>', '1.26.0', true),
  228. );
  229. }
  230. }