@@ -209,21 +209,25 @@ class VersionTests(unittest.TestCase):
209209
210210 def test_version_parsing (self ):
211211 versions = [
212- ('2.0.0' , (2 , 0 , 0 , 0 , 0 )),
213- ('3.1.0' , (3 , 1 , 0 , 0 , 0 )),
214- ('2.4.54' , (2 , 4 , 54 , 0 , 0 )),
215- ('3.1.1.12' , (3 , 1 , 1 , 12 , 0 )),
216- ('3.55.1.build12' , (3 , 55 , 1 , 'build12' , 0 )),
217- ('3.55.1.20190429-TEST' , (3 , 55 , 1 , 20190429 , 'TEST' )),
218- ('4.0-SNAPSHOT' , (4 , 0 , 0 , 0 , 'SNAPSHOT' )),
212+ # Test cases here adapted from the Java driver cases
213+ # (https://github.com/apache/cassandra-java-driver/blob/4.19.2/core/src/test/java/com/datastax/oss/driver/api/core/VersionTest.java)
214+ ('1.2.19' , (1 , 2 , 19 , 0 , 0 )),
215+ ('1.2' , (1 , 2 , 0 , 0 , 0 )),
216+ ('1.2-beta1-SNAPSHOT' , (1 , 2 , 0 , 0 , 'beta1-SNAPSHOT' )),
217+ ('1.2~beta1-SNAPSHOT' , (1 , 2 , 0 , 0 , 'beta1-SNAPSHOT' )),
218+ ('1.2.19.2-SNAPSHOT' , (1 , 2 , 19 , 2 , 'SNAPSHOT' )),
219+
220+ # We also include a few test cases from the former impl of this class, mainly to note differences in behaviours
221+
222+ # Note that prerelease tags are expected to start with a hyphen or tilde so the expected tag is
223+ # lost in all cases below
224+ ('3.55.1.build12' , (3 , 55 , 1 , 0 , 0 )),
219225 ('1.0.5.4.3' , (1 , 0 , 5 , 4 , 0 )),
220- ('1-SNAPSHOT' , (1 , 0 , 0 , 0 , 'SNAPSHOT' )),
221- ('4.0.1.2.3.4.5-ABC-123-SNAP-TEST.blah' , (4 , 0 , 1 , 2 , 'ABC-123-SNAP-TEST.blah' )),
222- ('2.1.hello' , (2 , 1 , 0 , 0 , 0 )),
223- ('2.test.1' , (2 , 0 , 0 , 0 , 0 )),
226+ ('2.1.hello' , (2 , 1 , 0 , 0 , 0 ))
224227 ]
225228
226229 for str_version , expected_result in versions :
230+ print (str_version )
227231 v = Version (str_version )
228232 self .assertEqual (str_version , str (v ))
229233 self .assertEqual (v .major , expected_result [0 ])
@@ -232,9 +236,18 @@ def test_version_parsing(self):
232236 self .assertEqual (v .build , expected_result [3 ])
233237 self .assertEqual (v .prerelease , expected_result [4 ])
234238
235- # not supported version formats
236- with self .assertRaises (ValueError ):
237- Version ('test.1.0' )
239+ # Note that a few of these formats used to be supported when this class was based on the Python versioning scheme.
240+ # This has been updated to more directly correspond to the Cassandra versioning scheme. See CASSPYTHON-10 for more
241+ # detail.
242+ unsupported_versions = [
243+ "test.1.0" ,
244+ '2.test.1'
245+ ]
246+
247+ for v in unsupported_versions :
248+ print (v )
249+ with self .assertRaises (ValueError ):
250+ Version (v )
238251
239252 def test_version_compare (self ):
240253 # just tests a bunch of versions
@@ -251,40 +264,36 @@ def test_version_compare(self):
251264
252265 # patch wins
253266 self .assertTrue (Version ('2.3.1' ) > Version ('2.3.0' ))
254- self .assertTrue (Version ('2.3.1' ) > Version ('2.3.0. 4post0' ))
267+ self .assertTrue (Version ('2.3.1' ) > Version ('2.3.0- 4post0' ))
255268 self .assertTrue (Version ('2.3.1' ) > Version ('2.3.0.44' ))
256269
257270 # various
258271 self .assertTrue (Version ('2.3.0.1' ) > Version ('2.3.0.0' ))
259272 self .assertTrue (Version ('2.3.0.680' ) > Version ('2.3.0.670' ))
260273 self .assertTrue (Version ('2.3.0.681' ) > Version ('2.3.0.680' ))
261- self .assertTrue (Version ('2.3.0.1build0' ) > Version ('2.3.0.1' )) # 4th part fallback to str cmp
262- self .assertTrue (Version ('2.3.0.build0' ) > Version ('2.3.0.1' )) # 4th part fallback to str cmp
263- self .assertTrue (Version ('2.3.0' ) < Version ('2.3.0.build' ))
264-
265- self .assertTrue (Version ('4-a' ) <= Version ('4.0.0' ))
266- self .assertTrue (Version ('4-a' ) <= Version ('4.0-alpha1' ))
267- self .assertTrue (Version ('4-a' ) <= Version ('4.0-beta1' ))
268- self .assertTrue (Version ('4.0.0' ) >= Version ('4.0.0' ))
269- self .assertTrue (Version ('4.0.0.421' ) >= Version ('4.0.0' ))
270- self .assertTrue (Version ('4.0.1' ) >= Version ('4.0.0' ))
274+
275+ # If builds are equal then a prerelease always comes before
276+ self .assertTrue (Version ('2.3.0.1-SNAPSHOT' ) < Version ('2.3.0.1' ))
277+
278+ # If both have prereleases we fall back to a string compare
279+ self .assertTrue (Version ('2.3.0.1-SNAPSHOT' ) < Version ('2.3.0.1-ZNAPSHOT' ))
280+
271281 self .assertTrue (Version ('2.3.0' ) == Version ('2.3.0' ))
272282 self .assertTrue (Version ('2.3.32' ) == Version ('2.3.32' ))
273283 self .assertTrue (Version ('2.3.32' ) == Version ('2.3.32.0' ))
274- self .assertTrue (Version ('2.3.0.build ' ) == Version ('2.3.0.build ' ))
284+ self .assertTrue (Version ('2.3.0-SNAPSHOT ' ) == Version ('2.3.0-SNAPSHOT ' ))
275285
276- self .assertTrue (Version ('4' ) == Version ('4.0.0' ))
277286 self .assertTrue (Version ('4.0' ) == Version ('4.0.0.0' ))
278287 self .assertTrue (Version ('4.0' ) > Version ('3.9.3' ))
279288
280289 self .assertTrue (Version ('4.0' ) > Version ('4.0-SNAPSHOT' ))
281290 self .assertTrue (Version ('4.0-SNAPSHOT' ) == Version ('4.0-SNAPSHOT' ))
282291 self .assertTrue (Version ('4.0.0-SNAPSHOT' ) == Version ('4.0-SNAPSHOT' ))
283292 self .assertTrue (Version ('4.0.0-SNAPSHOT' ) == Version ('4.0.0-SNAPSHOT' ))
284- self .assertTrue (Version ('4.0.0.build5 -SNAPSHOT' ) == Version ('4.0.0.build5 -SNAPSHOT' ))
293+ self .assertTrue (Version ('4.0.0.5 -SNAPSHOT' ) == Version ('4.0.0.5 -SNAPSHOT' ))
285294 self .assertTrue (Version ('4.1-SNAPSHOT' ) > Version ('4.0-SNAPSHOT' ))
286295 self .assertTrue (Version ('4.0.1-SNAPSHOT' ) > Version ('4.0.0-SNAPSHOT' ))
287- self .assertTrue (Version ('4.0.0.build6 -SNAPSHOT' ) > Version ('4.0.0.build5 -SNAPSHOT' ))
296+ self .assertTrue (Version ('4.0.0.6 -SNAPSHOT' ) > Version ('4.0.0.5 -SNAPSHOT' ))
288297 self .assertTrue (Version ('4.0-SNAPSHOT2' ) > Version ('4.0-SNAPSHOT1' ))
289298 self .assertTrue (Version ('4.0-SNAPSHOT2' ) > Version ('4.0.0-SNAPSHOT1' ))
290299
0 commit comments