From d1461279116a6ca089df8acb78fa58a8cc9e4d9b Mon Sep 17 00:00:00 2001 From: Tristan Date: Wed, 3 Jan 2024 01:27:47 +0000 Subject: [PATCH] test watch, split commands --- flake.nix | 7 +++++- test/watch.test.nix | 52 +++++++++++++++++++++++++++++++++++++++++++++ tix/watch.nix | 10 ++++++--- 3 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 test/watch.test.nix diff --git a/flake.nix b/flake.nix index cbd5b4e..a279bde 100644 --- a/flake.nix +++ b/flake.nix @@ -15,11 +15,16 @@ ./test/it.test.nix ./test/test.test.nix ./test/describe.test.nix + ./test/watch.test.nix ]; packages.x86_64-linux.example = tix.run [ ./mytest.nix ]; 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"; + }; }; } diff --git a/test/watch.test.nix b/test/watch.test.nix new file mode 100644 index 0000000..600c94f --- /dev/null +++ b/test/watch.test.nix @@ -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 + ''; + })) +] diff --git a/tix/watch.nix b/tix/watch.nix index f9d797e..46b29d9 100644 --- a/tix/watch.nix +++ b/tix/watch.nix @@ -1,9 +1,13 @@ -pkgs: cmd: pname: +pkgs: { + cmd, + stop ? null, + view ? null, +}: pkgs.writeShellScriptBin "watch" '' while true do - ${cmd} & + ${cmd} ${if view == null then "" else "| ${view} "}& ${pkgs.inotify-tools}/bin/inotifywait -e modify -r . - pkill ${pname} + ${toString stop} done ''