More tests for version.extract_version_number

This commit is contained in:
Bryan Bennett 2024-01-08 15:29:59 -05:00
parent 04109672f0
commit 5d0923569f
No known key found for this signature in database
GPG key ID: EE149E4215408DE9
5 changed files with 40 additions and 16 deletions

View file

@ -1,5 +1,10 @@
build: build:
@dune build @dune build
test:
@dune test -f
@bisect-ppx-report html
@bisect-ppx-report summary --per-file
fmt: fmt:
@dune build @fmt --auto-promote @dune build @fmt --auto-promote

View file

@ -30,23 +30,27 @@ let compare = (a, b) => {
} }
} }
let extract_version_number = (cmd) => { let extract_version_number = cmd => {
switch (Util.run_process(cmd, ["--version"])) { switch (Util.run_process(cmd, ["--version"])) {
| (Ok(), stdout) when String.length(stdout) > 0 => { | (Ok (), stdout) when String.length(stdout) > 0 =>
let substrings = Re.exec(semver_re, stdout); switch (Re.exec(semver_re, stdout)) {
| exception Stdlib.Not_found =>
Error(
Printf.sprintf(
"Stdout did not contain a version number for `%s --version`",
cmd,
),
)
| substrings =>
let groups = Re.Group.all(substrings); let groups = Re.Group.all(substrings);
if ((groups |> Array.length) == 4) { Ok({
Ok({ major: groups[1] |> int_of_string,
major: groups[1] |> int_of_string, minor: groups[2] |> int_of_string,
minor: groups[2] |> int_of_string, point: groups[3] |> int_of_string,
point: groups[3] |> int_of_string });
})
} else {
Error(Printf.sprintf("Stdout did not contain a version number for `%s --version`", cmd))
}
} }
| _ => Error(Printf.sprintf("Failed executing '%s'\n", cmd)) | _ => Error(Printf.sprintf("Failed executing '%s'", cmd))
} };
}; };
let is_new_enough = (cur, needed) => { let is_new_enough = (cur, needed) => {

View file

@ -3,7 +3,7 @@
flake_env_test_versions flake_env_test_versions
flake_env_test_watches flake_env_test_watches
flake_env_test_util) flake_env_test_util)
(deps spit_version.sh) (deps spit_version.sh spit_gibberish.sh)
(libraries (libraries
lib lib
alcotest alcotest

View file

@ -103,8 +103,18 @@ let test_extract_version_number_success = () => {
check_version("Versions", Ok(Versions.init(1, 1, 1)), result); check_version("Versions", Ok(Versions.init(1, 1, 1)), result);
}; };
let test_extract_version_number_no_version = () => {
let result = Versions.extract_version_number("../tests/spit_gibberish.sh");
check_version("Versions", Error("Stdout did not contain a version number for `../tests/spit_gibberish.sh --version`"), result);
};
let test_extract_version_number_nonexistent = () => {
let result = Versions.extract_version_number("nonexistent.sh");
check_version("Versions", Error("Failed executing 'nonexistent.sh'"), result);
};
// TODO: Test: // TODO: Test:
// * extract_version_number: impure, don't know how to get a concrete version number to test against
// * preflight_versions? impure, but m // * preflight_versions? impure, but m
let () = let () =
Alcotest.( Alcotest.(
@ -167,6 +177,8 @@ let () =
"extract_version_number", "extract_version_number",
[ [
test_case("success", `Quick, test_extract_version_number_success), test_case("success", `Quick, test_extract_version_number_success),
test_case("no version number", `Quick, test_extract_version_number_no_version),
test_case("missing binary", `Quick, test_extract_version_number_nonexistent),
], ],
), ),
], ],

3
tests/spit_gibberish.sh Executable file
View file

@ -0,0 +1,3 @@
#!/usr/bin/env sh
echo "sdlfkjdsfweiojlsjslfj.dofiwoksdj/sfowiefjw0";