From 20077512bd06869cdf8cc31a08300b96e8ec12a6 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Sat, 7 Sep 2024 12:03:02 +0100 Subject: [PATCH] test(pcre): regression test #411 --- lib_test/expect/test_pcre_411.ml | 66 ++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 lib_test/expect/test_pcre_411.ml diff --git a/lib_test/expect/test_pcre_411.ml b/lib_test/expect/test_pcre_411.ml new file mode 100644 index 00000000..9e792967 --- /dev/null +++ b/lib_test/expect/test_pcre_411.ml @@ -0,0 +1,66 @@ +open Import +module Pcre = Re_private.Pcre + +let rex = + Pcre.regexp + ("^\\s*[v=]*\\s*" + (* optional version identifier *) + ^ "([0-9]+|[xX*])(\\.([0-9]+|[xX*])?(\\.([0-9]+|[xX*])?)?)?" + (* 3-dotted notation *) + ^ "(?:-((?:[a-zA-Z0-9]+|[a-zA-Z0-9-])(?:\\.[a-zA-Z0-9]+|[a-zA-Z0-9-])*))?" + ^ (* pre release *) + "(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?\\s*$" (* build indentifier *)) +;; + +let sep_re = Pcre.regexp "\\." + +let test version = + try + let parsed = Pcre.extract ~rex version in + let pre = Pcre.split ~rex:sep_re parsed.(6) in + let build = Pcre.split ~rex:sep_re parsed.(7) in + printf + "%s %s %s [%s] [%s]\n" + parsed.(1) + parsed.(3) + parsed.(5) + (String.concat " " pre) + (String.concat " " build) + with + | Not_found -> Printf.printf "%s: Parsing Error. Invalid Version\n" version +;; + +let%expect_test "regression test" = + test "v1.2.3"; + [%expect {| 1 2 3 [] [] |}]; + test "=1.2.3"; + [%expect {| 1 2 3 [] [] |}]; + test "v 1.2.3"; + [%expect {| 1 2 3 [] [] |}]; + test "= 1.2.3"; + [%expect {| 1 2 3 [] [] |}]; + test " v1.2.3"; + [%expect {| 1 2 3 [] [] |}]; + test " =1.2.3"; + [%expect {| 1 2 3 [] [] |}]; + test " v 1.2.3"; + [%expect {| 1 2 3 [] [] |}]; + test " = 1.2.3"; + [%expect {| 1 2 3 [] [] |}]; + test "1.2.3-0"; + [%expect {| 1 2 3 [0] [] |}]; + test "v1.2.3-1"; + [%expect {| 1 2 3 [1] [] |}]; + test "v1.2.3-beta"; + [%expect {| 1 2 3 [beta] [] |}]; + test "=1.2.3-beta"; + [%expect {| 1 2 3 [beta] [] |}]; + test "1.2.3-beta"; + [%expect {| 1 2 3 [beta] [] |}]; + test "1.2.3-beta+build"; + [%expect {| 1 2 3 [beta] [build] |}]; + test "1.2.3+build"; + [%expect {| 1 2 3 [] [build] |}]; + test " v1.2.3+build"; + [%expect {| 1 2 3 [] [build] |}] +;;