mirror of
https://git.sr.ht/~bryan_bennett/flake_env
synced 2025-12-16 14:41:24 +01:00
186 lines
5.4 KiB
ReasonML
186 lines
5.4 KiB
ReasonML
open Lib;
|
|
|
|
let pprint = (pp_fmt, version) => {
|
|
Versions.(
|
|
Fmt.pf(
|
|
pp_fmt,
|
|
"{ major: %d, minor: %d, point: %d }",
|
|
version.major,
|
|
version.minor,
|
|
version.point,
|
|
)
|
|
);
|
|
};
|
|
let testable_version =
|
|
Alcotest.testable(pprint, (a, b) => Versions.compare(a, b) == 0);
|
|
|
|
let check_version =
|
|
Alcotest.(check(Alcotest.result(testable_version, string)));
|
|
|
|
let test_compare_equal = () => {
|
|
let a = Versions.init(1, 0, 0);
|
|
Alcotest.(check(int))("equal", 0, Versions.compare(a, a));
|
|
};
|
|
|
|
let test_compare_first_major_greater = () => {
|
|
let a = Versions.init(2, 0, 0);
|
|
let b = Versions.init(1, 0, 0);
|
|
Alcotest.(check(int))("First major greater", 1, Versions.compare(a, b));
|
|
};
|
|
|
|
let test_compare_first_minor_greater = () => {
|
|
let a = Versions.init(1, 1, 0);
|
|
let b = Versions.init(1, 0, 0);
|
|
Alcotest.(check(int))("First minor greater", 1, Versions.compare(a, b));
|
|
};
|
|
|
|
let test_compare_first_point_greater = () => {
|
|
let a = Versions.init(1, 0, 1);
|
|
let b = Versions.init(1, 0, 0);
|
|
Alcotest.(check(int))("First point greater", 1, Versions.compare(a, b));
|
|
};
|
|
|
|
let test_compare_second_major_greater = () => {
|
|
let a = Versions.init(1, 0, 0);
|
|
let b = Versions.init(2, 0, 0);
|
|
Alcotest.(check(int))("Second major greater", -1, Versions.compare(a, b));
|
|
};
|
|
|
|
let test_compare_second_minor_greater = () => {
|
|
let a = Versions.init(1, 0, 0);
|
|
let b = Versions.init(1, 1, 0);
|
|
Alcotest.(check(int))("Second minor greater", -1, Versions.compare(a, b));
|
|
};
|
|
|
|
let test_compare_second_point_greater = () => {
|
|
let a = Versions.init(1, 0, 0);
|
|
let b = Versions.init(1, 0, 1);
|
|
Alcotest.(check(int))("Second point greater", -1, Versions.compare(a, b));
|
|
};
|
|
|
|
let test_ine_cur_newer = () => {
|
|
let a = Ok(Versions.init(2, 0, 0));
|
|
let b = Versions.init(1, 0, 0);
|
|
let ine = Versions.is_new_enough(a, b);
|
|
Alcotest.(check(bool))("Curr newer", true, ine |> Result.get_ok);
|
|
};
|
|
|
|
let test_ine_cur_older = () => {
|
|
let a = Ok(Versions.init(1, 0, 0));
|
|
let b = Versions.init(2, 0, 0);
|
|
let ine = Versions.is_new_enough(a, b);
|
|
Alcotest.(check(bool))("Curr older", false, ine |> Result.get_ok);
|
|
};
|
|
|
|
let test_ine_cur_equal = () => {
|
|
let a = Versions.init(1, 0, 0);
|
|
let ine = Versions.is_new_enough(Ok(a), a);
|
|
Alcotest.(check(bool))("Curr equal", true, ine |> Result.get_ok);
|
|
};
|
|
|
|
let test_ine_error = () => {
|
|
let a = Error("foobarbaz");
|
|
let ine = Versions.is_new_enough(a, Versions.init(1, 0, 0));
|
|
Alcotest.(check(Alcotest.result(bool, string)))(
|
|
"Error bubbled",
|
|
Error("foobarbaz"),
|
|
ine,
|
|
);
|
|
};
|
|
|
|
let test_in_direnv_true = () => {
|
|
Core_unix.putenv(~key="direnv", ~data="direnv");
|
|
Alcotest.(check(bool))("In direnv", true, Versions.in_direnv());
|
|
};
|
|
|
|
let test_in_direnv_false = () => {
|
|
Core_unix.unsetenv("direnv");
|
|
Alcotest.(check(bool))("Not in direnv", false, Versions.in_direnv());
|
|
};
|
|
|
|
let test_extract_version_number_success = () => {
|
|
let result = Versions.extract_version_number("../tests/spit_version.sh");
|
|
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:
|
|
// * preflight_versions? impure, but m
|
|
let () =
|
|
Alcotest.(
|
|
run(
|
|
"Versions",
|
|
[
|
|
(
|
|
"compare",
|
|
[
|
|
test_case("Versions Equal", `Quick, test_compare_equal),
|
|
test_case(
|
|
"First Major Greater",
|
|
`Quick,
|
|
test_compare_first_major_greater,
|
|
),
|
|
test_case(
|
|
"First Minor Greater",
|
|
`Quick,
|
|
test_compare_first_minor_greater,
|
|
),
|
|
test_case(
|
|
"First Point Greater",
|
|
`Quick,
|
|
test_compare_first_point_greater,
|
|
),
|
|
test_case(
|
|
"Second Major Greater",
|
|
`Quick,
|
|
test_compare_second_major_greater,
|
|
),
|
|
test_case(
|
|
"Second Minor Greater",
|
|
`Quick,
|
|
test_compare_second_minor_greater,
|
|
),
|
|
test_case(
|
|
"Second Point Greater",
|
|
`Quick,
|
|
test_compare_second_point_greater,
|
|
),
|
|
],
|
|
),
|
|
(
|
|
"is_new_enough",
|
|
[
|
|
test_case("Curr Newer", `Quick, test_ine_cur_newer),
|
|
test_case("Curr Older", `Quick, test_ine_cur_older),
|
|
test_case("Curr Equal", `Quick, test_ine_cur_equal),
|
|
test_case("Error", `Quick, test_ine_error),
|
|
],
|
|
),
|
|
(
|
|
"in_direnv",
|
|
[
|
|
test_case("true", `Quick, test_in_direnv_true),
|
|
test_case("false", `Quick, test_in_direnv_false),
|
|
],
|
|
),
|
|
(
|
|
"extract_version_number",
|
|
[
|
|
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),
|
|
],
|
|
),
|
|
],
|
|
)
|
|
);
|