]> gitweb.factorcode.org Git - factor.git/commitdiff
semver: more restrictive semver parser for things like 1.2.3.4
authorDoug Coleman <doug.coleman@gmail.com>
Sat, 15 Oct 2022 20:34:25 +0000 (15:34 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Sat, 15 Oct 2022 20:34:25 +0000 (15:34 -0500)
extra/semver/semver-tests.factor
extra/semver/semver.factor

index 0e7effe575f8140579d75a31253a9e98f65501c7..2e72d1d33b3f3a5ff5cb7ce61fa3596fe4957bc8 100644 (file)
@@ -152,3 +152,11 @@ CONSTANT: semver-gt-comparisons {
 { "2.0.0" } [ "1.2.3" <semver> semver-inc-major semver>string ] unit-test
 
 { "1.2.3-erg.0" } [ "1.2.3" <semver> "erg" semver-inc-prerelease-id semver>string ] unit-test
+
+{ T{ semver f 2 7 2 "pre" "build" } } [ "2.7.2-pre+build" parse-semver ] unit-test
+{ T{ semver f 2 7 2 "pre" f } } [ "2.7.2-pre" parse-semver ] unit-test
+{ T{ semver f 2 7 2 f "build" } } [ "2.7.2+build" parse-semver ] unit-test
+
+[ "2.7.2.1+build" parse-semver ] [ malformed-semver? ] must-fail-with
+[ "2.7.2.+build" parse-semver ] [ malformed-semver? ] must-fail-with
+[ "2.7.2." parse-semver ] [ malformed-semver? ] must-fail-with
index 92f3f998dd9d11926a80096eec689c79adaad392..1e18e8448459fedb6d3f4d1062ce3f5798c0926d 100644 (file)
@@ -26,10 +26,14 @@ TUPLE: semver
     { prerelease initial: "" }
     { build initial: "" } ;
 
+ERROR: malformed-semver parts ;
+: check-semver-parts ( seq -- seq )
+    dup length 3 <= [ malformed-semver ] unless ;
+
 : parse-semver ( str -- semver )
     "+" split1
     [ "-" split1 ] dip
-    [ "." split [ string>number ] map first3 ] 2dip
+    [ "." split [ string>number ] map check-semver-parts first3 ] 2dip
     semver boa ;
 
 : <semver> ( str -- semver ) parse-semver ; inline