test watch, split commands

This commit is contained in:
Tristan 2024-01-03 01:27:47 +00:00
parent 6b84ecb806
commit d146127911
3 changed files with 65 additions and 4 deletions

View file

@ -15,11 +15,16 @@
./test/it.test.nix ./test/it.test.nix
./test/test.test.nix ./test/test.test.nix
./test/describe.test.nix ./test/describe.test.nix
./test/watch.test.nix
]; ];
packages.x86_64-linux.example = tix.run [ packages.x86_64-linux.example = tix.run [
./mytest.nix ./mytest.nix
]; ];
packages.x86_64-linux.watch = packages.x86_64-linux.watch =
tix.watch "nix run .#test --show-trace | ${pkgs.fx}/bin/fx" "fx"; tix.watch {
cmd = "nix run .#test --show-trace";
view = "${pkgs.fx}/bin/fx";
stop = "pkill fx";
};
}; };
} }

52
test/watch.test.nix Normal file
View file

@ -0,0 +1,52 @@
{describe, it, ... }:
let
mockpkgs = {
writeShellScriptBin = name: content: content;
inotify-tools = "inotify-tools";
};
watch = import ../tix/watch.nix mockpkgs;
in
describe "watch" [
(it "watches a the local directory and runs command on change" ({
actual = watch {
cmd = "run me";
};
expected = ''
while true
do
run me &
inotify-tools/bin/inotifywait -e modify -r .
done
'';
}))
(it "runs the command provided to stop execution" ({
actual = watch {
cmd = "run me";
stop = "kill me";
};
expected = ''
while true
do
run me &
inotify-tools/bin/inotifywait -e modify -r .
kill me
done
'';
}))
(it "pipes output to given command" ({
actual = watch {
cmd = "run me";
stop = "kill me";
view = "less";
};
expected = ''
while true
do
run me | less &
inotify-tools/bin/inotifywait -e modify -r .
kill me
done
'';
}))
]

View file

@ -1,9 +1,13 @@
pkgs: cmd: pname: pkgs: {
cmd,
stop ? null,
view ? null,
}:
pkgs.writeShellScriptBin "watch" '' pkgs.writeShellScriptBin "watch" ''
while true while true
do do
${cmd} & ${cmd} ${if view == null then "" else "| ${view} "}&
${pkgs.inotify-tools}/bin/inotifywait -e modify -r . ${pkgs.inotify-tools}/bin/inotifywait -e modify -r .
pkill ${pname} ${toString stop}
done done
'' ''