Remove integration test dependencies on system binaries
Various tests call external binaries including echo, cat, and sh. I'd like to extend Just to work on windows without requiring an installation of cygwin or git-bash, so these dependencies should be removed. Also, the Just package for Nix requires an awkward workaround to patch the correct location of these binaries: https://github.com/NixOS/nixpkgs/pull/59306/files
Fortunately, the functionality that Just requires from external commands is minimal:
echoto print the arguments to a commandcatto print out the effective contents of a shebang recipeshto callsleepto introduce a delayshto return a specific error code from a child process
In order to remove dependencies on these commands, I propose we add just-test binary, and make it available to integration tests by inserting its location into the PATH environment variable. just-test could be extended with subcommands as needed to support the functionality that tests require:
just-test cat FILEcopies the contents of FILE to stdoutjust-test sleep Nsleeps for N secondsjust-test code Iterminates with error code Ijust-test echo A...echos arguments to standard output
In Windows CMD you have all you need already. Mostly without change.
| POSIX | Windows CMD |
|---|---|
| cat FILE | TYPE FILE |
| sleep N | SLEEP N |
| echo "ARGS" | ECHO "ARGS" |
| exit I | EXIT I |
$? |
%ErrorLevel% |
The Windows commands are uppercase just for historical reasons. Case doesn't actually matter on Windows.
https://ss64.com/nt/type.html https://ss64.com/nt/sleep.html https://ss64.com/nt/echo.html https://ss64.com/nt/exit.html https://ss64.com/nt/errorlevel.html
The big question for me is the last part. As I'm not exactly sure your refering to $? regarding using sh to get the exit code. If you accessing the exit code directly via sh somehow then I'm fairly sure you can do the same with cmd.exe but I'm not certain. Or maybe you just need EXIT I?
PowerShell has it's options as well.
Thanks for the links and the translation to CMD! I didn't know about ss64, it looks super useful.
I'm actually just using sh to return an exit code to the calling process, to make sure Just returns the correct return code when a process fails. For example, the justfile might be:
foo:
exit 200
And all the test does is check that Just itself returns 200 when running the recipe.
Adding to the list: python3, though you could argue it's not a system binary, it's a third-party dependency.
https://github.com/casey/just/blob/1b32e275ebeb7ce250b8a46c128f8d2f027ccd1f/tests/backticks.rs#L10-L12
EDIT also bash
https://github.com/casey/just/blob/1b32e275ebeb7ce250b8a46c128f8d2f027ccd1f/tests/test.rs#L241