mirror of
https://git.sr.ht/~bryan_bennett/flake_env
synced 2025-12-16 22:51:24 +01:00
Add tests
This commit is contained in:
parent
7759d2ac6a
commit
04109672f0
8 changed files with 403 additions and 2 deletions
159
tests/flake_env_test_util.re
Normal file
159
tests/flake_env_test_util.re
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
open Core;
|
||||
module Unix = Core_unix;
|
||||
|
||||
open Lib.Util;
|
||||
|
||||
let _pp_exit_or_signal = (pp_fmt, e) =>
|
||||
Fmt.pf(pp_fmt, "%s", Unix.Exit_or_signal.to_string_hum(e));
|
||||
let _exit_or_signal_eq = (a, b) => Unix.Exit_or_signal.compare(a, b) == 0;
|
||||
let testable_exit_or_signal =
|
||||
Alcotest.testable(_pp_exit_or_signal, _exit_or_signal_eq);
|
||||
|
||||
let _syst_to_bool =
|
||||
fun
|
||||
| `Yes => true
|
||||
| _ => false;
|
||||
|
||||
let check_exit_or_signal =
|
||||
Alcotest.(check(Alcotest.pair(testable_exit_or_signal, string)));
|
||||
let check_string = Alcotest.(check(string));
|
||||
let check_bool = Alcotest.(check(bool));
|
||||
let check_get_args =
|
||||
Alcotest.(
|
||||
check(
|
||||
Alcotest.result(Alcotest.triple(string, string, list(string)), unit),
|
||||
)
|
||||
);
|
||||
|
||||
let test_run_process_success = () =>
|
||||
check_exit_or_signal(
|
||||
"Returns expected",
|
||||
(Ok(), ""),
|
||||
run_process("true", []),
|
||||
);
|
||||
|
||||
let test_run_process_failure = () =>
|
||||
check_exit_or_signal(
|
||||
"Returns expected",
|
||||
(Error(`Exit_non_zero(1)), ""),
|
||||
run_process("false", []),
|
||||
);
|
||||
|
||||
let test_run_process_stdout = () =>
|
||||
check_exit_or_signal(
|
||||
"Returns expected",
|
||||
(Ok(), "echoed\n"),
|
||||
run_process("echo", ["echoed"]),
|
||||
);
|
||||
|
||||
let test_hash_one = () => {
|
||||
check_string(
|
||||
"Hash matches",
|
||||
hash_files([|"../LICENSE"|]),
|
||||
"b43cf2e824eb66ba0e8f939c08072a8e307b5e5f",
|
||||
);
|
||||
};
|
||||
|
||||
let test_hash_multiple = () => {
|
||||
check_string(
|
||||
"Hash matches",
|
||||
hash_files([|"../LICENSE", "../LICENSE"|]),
|
||||
"08304d8baeed02722f81252952b00f6ac011ce0c",
|
||||
);
|
||||
};
|
||||
|
||||
let test_hash_filters_nonexistent = () => {
|
||||
check_string(
|
||||
"Hash matches",
|
||||
hash_files([|"../LICENSE", "FOOBARBAZ"|]),
|
||||
"b43cf2e824eb66ba0e8f939c08072a8e307b5e5f",
|
||||
);
|
||||
};
|
||||
|
||||
let test_rmrf_file = () => {
|
||||
let tmp_file_name = Filename_unix.temp_file("test", "txt");
|
||||
rmrf(tmp_file_name);
|
||||
|
||||
check_bool(
|
||||
"File removed",
|
||||
false,
|
||||
_syst_to_bool(Sys_unix.is_file(tmp_file_name)),
|
||||
);
|
||||
};
|
||||
|
||||
let test_rmrf_dir = () => {
|
||||
let temp_dir_name = Filename_unix.temp_dir("test", "d");
|
||||
let _ = Filename_unix.temp_file(~in_dir=temp_dir_name, "test", "txt");
|
||||
|
||||
rmrf(temp_dir_name);
|
||||
|
||||
check_bool(
|
||||
"File removed",
|
||||
false,
|
||||
_syst_to_bool(Sys_unix.file_exists(temp_dir_name)),
|
||||
);
|
||||
};
|
||||
|
||||
let test_get_args_simple = () => {
|
||||
check_get_args(
|
||||
"Parses successfully",
|
||||
Ok(("foo", "bar", ["oof", "rab", "zab"])),
|
||||
get_args([|"000", "foo", "bar", "oof", "rab", "zab"|]),
|
||||
);
|
||||
};
|
||||
|
||||
let test_get_args_just_enough = () => {
|
||||
check_get_args(
|
||||
"Parses just enough args",
|
||||
Ok(("foo", "bar", [])),
|
||||
get_args([|"000", "foo", "bar"|]),
|
||||
);
|
||||
};
|
||||
|
||||
let test_get_args_error = () => {
|
||||
check_get_args("Errors on too few args", Error(), get_args([|"000", "111"|]))
|
||||
};
|
||||
|
||||
let () =
|
||||
Alcotest.(
|
||||
run(
|
||||
"Watches",
|
||||
[
|
||||
(
|
||||
"run_process",
|
||||
[
|
||||
test_case("Capture's Stdout", `Quick, test_run_process_stdout),
|
||||
test_case("Success", `Quick, test_run_process_success),
|
||||
test_case("Failure", `Quick, test_run_process_failure),
|
||||
],
|
||||
),
|
||||
(
|
||||
"hash_files",
|
||||
[
|
||||
test_case("Hashes one file", `Quick, test_hash_one),
|
||||
test_case("Hashes multiple files", `Quick, test_hash_multiple),
|
||||
test_case(
|
||||
"Filters non-existent",
|
||||
`Quick,
|
||||
test_hash_filters_nonexistent,
|
||||
),
|
||||
],
|
||||
),
|
||||
(
|
||||
"rmrf helper",
|
||||
[
|
||||
test_case("Removes file", `Quick, test_rmrf_file),
|
||||
test_case("Removes dir", `Quick, test_rmrf_dir),
|
||||
],
|
||||
),
|
||||
(
|
||||
"get_args",
|
||||
[
|
||||
test_case("Parses Args", `Quick, test_get_args_simple),
|
||||
test_case("Parses just enough args", `Quick, test_get_args_just_enough),
|
||||
test_case("Handles too few args", `Quick, test_get_args_error)
|
||||
],
|
||||
),
|
||||
],
|
||||
)
|
||||
);
|
||||
Loading…
Add table
Add a link
Reference in a new issue