/Unit tests/TestVersionComparison.m

https://github.com/mutru/growl · Objective C · 378 lines · 275 code · 74 blank · 29 comment · 0 complexity · 70c2d7d249a590b6345c5e6b27f2e0b2 MD5 · raw file

  1. //
  2. // TestVersionComparison.m
  3. // Growl
  4. //
  5. // Created by Peter Hosey on 2009-10-13.
  6. // Copyright 2009 Peter Hosey. All rights reserved.
  7. //
  8. #import "TestVersionComparison.h"
  9. #import "GrowlVersionUtilities.h"
  10. @implementation TestVersionComparison
  11. - (void) testSVNVersionNewerThanSVNVersion {
  12. struct Version older, newer;
  13. NSString *olderString = @"1.0svn1000", *newerString = @"1.0svn1009";
  14. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  15. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  16. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Older (%@) must be less than newer (%@)", olderString, newerString);
  17. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Newer (%@) must be greater than older (%@)", newerString, olderString);
  18. olderString = @"1.0svn1000";
  19. newerString = @"2.5.1svn1009";
  20. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  21. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  22. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Older (%@) must be less than newer (%@)", olderString, newerString);
  23. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Newer (%@) must be greater than older (%@)", newerString, olderString);
  24. }
  25. - (void) testSVNVersionEqualToSVNVersion {
  26. struct Version versionA, versionB;
  27. NSString *string = @"1.0svn1000";
  28. STAssertTrue(parseVersionString(string, &versionA), @"Could not parse version string (prerequisite for equality test)");
  29. STAssertTrue(parseVersionString(string, &versionB), @"Could not parse version string (prerequisite for equality test)");
  30. STAssertEquals(compareVersions(versionA, versionB), (CFComparisonResult)kCFCompareEqualTo, @"Version string (%@) must be equal to itself", string);
  31. //Version-equal, but not string-equal.
  32. NSString *stringA = @"01.00svn01000";
  33. NSString *stringB = @"1.0svn1000";
  34. STAssertTrue(parseVersionString(stringA, &versionA), @"Could not parse first version string (prerequisite for comparison test)");
  35. STAssertTrue(parseVersionString(stringB, &versionB), @"Could not parse second version string (prerequisite for comparison test)");
  36. STAssertEquals(compareVersions(versionA, versionB), (CFComparisonResult)kCFCompareEqualTo, @"Version from string %@ must be equal to version from string %@", stringA, stringB);
  37. }
  38. - (void) testDevelopmentVersionNewerThanDevelopmentVersion {
  39. struct Version older, newer;
  40. NSString *olderString = @"1.0d10", *newerString = @"1.0d19";
  41. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  42. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  43. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Older (%@) must be less than newer (%@)", olderString, newerString);
  44. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Newer (%@) must be greater than older (%@)", newerString, olderString);
  45. //Note that in this case, the development field is *lower*. Earlier development versions of newer releases should always compare newer.
  46. olderString = @"1.0d10";
  47. newerString = @"2.5.1d5";
  48. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  49. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  50. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Older (%@) must be less than newer (%@)", olderString, newerString);
  51. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Newer (%@) must be greater than older (%@)", newerString, olderString);
  52. }
  53. - (void) testDevelopmentVersionEqualToDevelopmentVersion {
  54. struct Version versionA, versionB;
  55. NSString *string = @"1.0d10";
  56. STAssertTrue(parseVersionString(string, &versionA), @"Could not parse version string (prerequisite for equality test)");
  57. STAssertTrue(parseVersionString(string, &versionB), @"Could not parse version string (prerequisite for equality test)");
  58. STAssertEquals(compareVersions(versionA, versionB), (CFComparisonResult)kCFCompareEqualTo, @"Version string (%@) must be equal to itself", string);
  59. //Version-equal, but not string-equal.
  60. NSString *stringA = @"01.00d010";
  61. NSString *stringB = @"1.0d10";
  62. STAssertTrue(parseVersionString(stringA, &versionA), @"Could not parse first version string (prerequisite for comparison test)");
  63. STAssertTrue(parseVersionString(stringB, &versionB), @"Could not parse second version string (prerequisite for comparison test)");
  64. STAssertEquals(compareVersions(versionA, versionB), (CFComparisonResult)kCFCompareEqualTo, @"Version from string %@ must be equal to version from string %@", stringA, stringB);
  65. }
  66. - (void) testAlphaNewerThanAlpha {
  67. struct Version older, newer;
  68. NSString *olderString = @"1.0a10", *newerString = @"1.0a19";
  69. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  70. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  71. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Older (%@) must be less than newer (%@)", olderString, newerString);
  72. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Newer (%@) must be greater than older (%@)", newerString, olderString);
  73. //Note that in this case, the development field is *lower*. Earlier development versions of newer releases should always compare newer.
  74. olderString = @"1.0a10";
  75. newerString = @"2.5.1a5";
  76. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  77. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  78. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Older (%@) must be less than newer (%@)", olderString, newerString);
  79. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Newer (%@) must be greater than older (%@)", newerString, olderString);
  80. }
  81. - (void) testAlphaEqualToAlpha {
  82. struct Version versionA, versionB;
  83. NSString *string = @"1.0a10";
  84. STAssertTrue(parseVersionString(string, &versionA), @"Could not parse version string (prerequisite for equality test)");
  85. STAssertTrue(parseVersionString(string, &versionB), @"Could not parse version string (prerequisite for equality test)");
  86. STAssertEquals(compareVersions(versionA, versionB), (CFComparisonResult)kCFCompareEqualTo, @"Version string (%@) must be equal to itself", string);
  87. //Version-equal, but not string-equal.
  88. NSString *stringA = @"01.00a010";
  89. NSString *stringB = @"1.0a10";
  90. STAssertTrue(parseVersionString(stringA, &versionA), @"Could not parse first version string (prerequisite for comparison test)");
  91. STAssertTrue(parseVersionString(stringB, &versionB), @"Could not parse second version string (prerequisite for comparison test)");
  92. STAssertEquals(compareVersions(versionA, versionB), (CFComparisonResult)kCFCompareEqualTo, @"Version from string %@ must be equal to version from string %@", stringA, stringB);
  93. }
  94. - (void) testBetaNewerThanBeta {
  95. struct Version older, newer;
  96. NSString *olderString = @"1.0b10", *newerString = @"1.0b19";
  97. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  98. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  99. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Older (%@) must be less than newer (%@)", olderString, newerString);
  100. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Newer (%@) must be greater than older (%@)", newerString, olderString);
  101. //Note that in this case, the development field is *lower*. Earlier development versions of newer releases should always compare newer.
  102. olderString = @"1.0b10";
  103. newerString = @"2.5.1b5";
  104. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  105. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  106. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Older (%@) must be less than newer (%@)", olderString, newerString);
  107. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Newer (%@) must be greater than older (%@)", newerString, olderString);
  108. }
  109. - (void) testBetaEqualToBeta {
  110. struct Version versionA, versionB;
  111. NSString *string = @"1.0b10";
  112. STAssertTrue(parseVersionString(string, &versionA), @"Could not parse version string (prerequisite for equality test)");
  113. STAssertTrue(parseVersionString(string, &versionB), @"Could not parse version string (prerequisite for equality test)");
  114. STAssertEquals(compareVersions(versionA, versionB), (CFComparisonResult)kCFCompareEqualTo, @"Version string (%@) must be equal to itself", string);
  115. //Version-equal, but not string-equal.
  116. NSString *stringA = @"01.00b010";
  117. NSString *stringB = @"1.0b10";
  118. STAssertTrue(parseVersionString(stringA, &versionA), @"Could not parse first version string (prerequisite for comparison test)");
  119. STAssertTrue(parseVersionString(stringB, &versionB), @"Could not parse second version string (prerequisite for comparison test)");
  120. STAssertEquals(compareVersions(versionA, versionB), (CFComparisonResult)kCFCompareEqualTo, @"Version from string %@ must be equal to version from string %@", stringA, stringB);
  121. }
  122. - (void) testReleaseNewerThanRelease {
  123. struct Version older, newer;
  124. NSString *olderString = @"1.0", *newerString = @"1.0.1";
  125. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  126. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  127. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Older (%@) must be less than newer (%@)", olderString, newerString);
  128. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Newer (%@) must be greater than older (%@)", newerString, olderString);
  129. olderString = @"1.0";
  130. newerString = @"2.5.1";
  131. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  132. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  133. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Older (%@) must be less than newer (%@)", olderString, newerString);
  134. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Newer (%@) must be greater than older (%@)", newerString, olderString);
  135. }
  136. - (void) testReleaseEqualToRelease {
  137. struct Version versionA, versionB;
  138. NSString *string = @"1.0";
  139. STAssertTrue(parseVersionString(string, &versionA), @"Could not parse version string (prerequisite for equality test)");
  140. STAssertTrue(parseVersionString(string, &versionB), @"Could not parse version string (prerequisite for equality test)");
  141. STAssertEquals(compareVersions(versionA, versionB), (CFComparisonResult)kCFCompareEqualTo, @"Version string (%@) must be equal to itself", string);
  142. //Version-equal, but not string-equal.
  143. NSString *stringA = @"01.00.0";
  144. NSString *stringB = @"1.0";
  145. STAssertTrue(parseVersionString(stringA, &versionA), @"Could not parse first version string (prerequisite for comparison test)");
  146. STAssertTrue(parseVersionString(stringB, &versionB), @"Could not parse second version string (prerequisite for comparison test)");
  147. STAssertEquals(compareVersions(versionA, versionB), (CFComparisonResult)kCFCompareEqualTo, @"Version from string %@ must be equal to version from string %@", stringA, stringB);
  148. }
  149. #pragma mark -
  150. - (void) testReleaseNewerThanBeta {
  151. struct Version older, newer;
  152. NSString *olderString = @"1.0b5", *newerString = @"1.0";
  153. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  154. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  155. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Beta (%@) must be less than release (%@)", olderString, newerString);
  156. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Release (%@) must be greater than beta (%@)", newerString, olderString);
  157. //Inverse: Make sure an earlier beta of a later release compares as newer.
  158. olderString = newerString;
  159. newerString = @"2.0b2";
  160. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  161. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  162. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Beta (%@) must be less than release (%@)", olderString, newerString);
  163. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Release (%@) must be greater than beta (%@)", newerString, olderString);
  164. }
  165. - (void) testReleaseNewerThanAlpha {
  166. struct Version older, newer;
  167. NSString *olderString = @"1.0a5", *newerString = @"1.0";
  168. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  169. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  170. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Alpha (%@) must be less than release (%@)", olderString, newerString);
  171. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Release (%@) must be greater than alpha (%@)", newerString, olderString);
  172. //Inverse: Make sure an earlier alpha of a later release compares as newer.
  173. olderString = newerString;
  174. newerString = @"2.0a2";
  175. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  176. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  177. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Beta (%@) must be less than release (%@)", olderString, newerString);
  178. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Release (%@) must be greater than beta (%@)", newerString, olderString);
  179. }
  180. - (void) testReleaseNewerThanDevelopmentVersion {
  181. struct Version older, newer;
  182. NSString *olderString = @"1.0d5", *newerString = @"1.0";
  183. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  184. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  185. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Development version (%@) must be less than release (%@)", olderString, newerString);
  186. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Release (%@) must be greater than development version (%@)", newerString, olderString);
  187. //Inverse: Make sure an earlier development version of a later release compares as newer.
  188. olderString = newerString;
  189. newerString = @"2.0d2";
  190. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  191. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  192. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Development version (%@) must be less than release (%@)", olderString, newerString);
  193. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Release (%@) must be greater than development version (%@)", newerString, olderString);
  194. }
  195. - (void) testReleaseNewerThanSVNVersion {
  196. struct Version older, newer;
  197. NSString *olderString = @"1.0svn500", *newerString = @"1.0";
  198. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  199. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  200. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"SVN version (%@) must be less than release (%@)", olderString, newerString);
  201. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Release (%@) must be greater than SVN version (%@)", newerString, olderString);
  202. //Inverse: Make sure an earlier SVN version of a later release compares as newer.
  203. //(This can happen in the case of reviving a maintenance branch for an emergency fix.)
  204. olderString = newerString;
  205. newerString = @"2.0svn200";
  206. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  207. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  208. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"SVN version (%@) must be less than release (%@)", olderString, newerString);
  209. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Release (%@) must be greater than SVN version (%@)", newerString, olderString);
  210. }
  211. - (void) testBetaNewerThanAlpha {
  212. struct Version older, newer;
  213. NSString *olderString = @"1.0a5", *newerString = @"1.0b4";
  214. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  215. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  216. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Alpha (%@) must be less than beta (%@)", olderString, newerString);
  217. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Beta (%@) must be greater than alpha (%@)", newerString, olderString);
  218. //Inverse: Make sure an earlier alpha of a later release compares as newer.
  219. olderString = newerString;
  220. newerString = @"2.0a2";
  221. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  222. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  223. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Alpha (%@) must be less than beta (%@)", olderString, newerString);
  224. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Beta (%@) must be greater than alpha (%@)", newerString, olderString);
  225. }
  226. - (void) testBetaNewerThanDevelopmentVersion {
  227. struct Version older, newer;
  228. NSString *olderString = @"1.0d5", *newerString = @"1.0b4";
  229. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  230. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  231. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Development version (%@) must be less than beta (%@)", olderString, newerString);
  232. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Beta (%@) must be greater than development version (%@)", newerString, olderString);
  233. //Inverse: Make sure an earlier development version of a later release compares as newer.
  234. olderString = newerString;
  235. newerString = @"2.0d2";
  236. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  237. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  238. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Development version (%@) must be less than beta (%@)", olderString, newerString);
  239. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Beta (%@) must be greater than development version (%@)", newerString, olderString);
  240. }
  241. - (void) testBetaNewerThanSVNVersion {
  242. struct Version older, newer;
  243. NSString *olderString = @"1.0svn500", *newerString = @"1.0b4";
  244. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  245. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  246. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"SVN version (%@) must be less than beta (%@)", olderString, newerString);
  247. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Beta (%@) must be greater than SVN version (%@)", newerString, olderString);
  248. //Inverse: Make sure an earlier SVN version of a later release compares as newer.
  249. //(This can happen in the case of reviving a maintenance branch for an emergency fix.)
  250. olderString = newerString;
  251. newerString = @"2.0svn200";
  252. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  253. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  254. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"SVN version (%@) must be less than beta (%@)", olderString, newerString);
  255. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Beta (%@) must be greater than SVN version (%@)", newerString, olderString);
  256. }
  257. - (void) testAlphaNewerThanDevelopmentVersion {
  258. struct Version older, newer;
  259. NSString *olderString = @"1.0d5", *newerString = @"1.0a4";
  260. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  261. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  262. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Development version (%@) must be less than alpha (%@)", olderString, newerString);
  263. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Alpha (%@) must be greater than development version (%@)", newerString, olderString);
  264. //Inverse: Make sure an earlier development version of a later release compares as newer.
  265. olderString = newerString;
  266. newerString = @"2.0d2";
  267. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  268. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  269. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"Development version (%@) must be less than alpha (%@)", olderString, newerString);
  270. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Alpha (%@) must be greater than development version (%@)", newerString, olderString);
  271. }
  272. - (void) testAlphaNewerThanSVNVersion {
  273. struct Version older, newer;
  274. NSString *olderString = @"1.0svn500", *newerString = @"1.0a4";
  275. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  276. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  277. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"SVN version (%@) must be less than alpha (%@)", olderString, newerString);
  278. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Alpha (%@) must be greater than SVN version (%@)", newerString, olderString);
  279. //Inverse: Make sure an earlier SVN version of a later release compares as newer.
  280. //(This can happen in the case of reviving a maintenance branch for an emergency fix.)
  281. olderString = newerString;
  282. newerString = @"2.0svn200";
  283. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  284. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  285. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"SVN version (%@) must be less than alpha (%@)", olderString, newerString);
  286. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Alpha (%@) must be greater than SVN version (%@)", newerString, olderString);
  287. }
  288. - (void) testDevelopmentVersionNewerThanSVNVersion {
  289. struct Version older, newer;
  290. NSString *olderString = @"1.0svn500", *newerString = @"1.0d4";
  291. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  292. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  293. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"SVN version (%@) must be less than development version (%@)", olderString, newerString);
  294. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Development version (%@) must be greater than SVN version (%@)", newerString, olderString);
  295. //Inverse: Make sure an earlier SVN version of a later release compares as newer.
  296. //(This can happen in the case of reviving a maintenance branch for an emergency fix.)
  297. olderString = newerString;
  298. newerString = @"2.0svn200";
  299. STAssertTrue(parseVersionString(olderString, &older), @"Could not parse older version string (prerequisite for comparison test)");
  300. STAssertTrue(parseVersionString(newerString, &newer), @"Could not parse newer version string (prerequisite for comparison test)");
  301. STAssertEquals(compareVersions(older, newer), (CFComparisonResult)kCFCompareLessThan, @"SVN version (%@) must be less than Development version (%@)", olderString, newerString);
  302. STAssertEquals(compareVersions(newer, older), (CFComparisonResult)kCFCompareGreaterThan, @"Release (%@) must be greater than SVN version (%@)", newerString, olderString);
  303. }
  304. @end