mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-21 21:46:15 +02:00
Implement tests for lookupPathForProgram and fix bugs caught by tests
This commit is contained in:
parent
d7537f6955
commit
4f6e3b9402
2 changed files with 13 additions and 5 deletions
|
@ -94,7 +94,7 @@ std::string runProgram(
|
|||
Path lookupPathForProgram(const Path & program)
|
||||
{
|
||||
if (program.find('/') != program.npos || program.find('\\') != program.npos) {
|
||||
throw Error("program '%1%' partially specifies its path", program);
|
||||
throw UsageError("program '%1%' partially specifies its path", program);
|
||||
}
|
||||
|
||||
// Possible extensions.
|
||||
|
@ -107,8 +107,9 @@ Path lookupPathForProgram(const Path & program)
|
|||
}
|
||||
|
||||
// Look through each directory listed in $PATH.
|
||||
for (const std::string & dir : tokenizeString<Strings>(*getEnv("PATH"), ";")) {
|
||||
Path candidate = canonPath(dir) + '/' + program;
|
||||
for (const std::string & dir : tokenizeString<Strings>(*path, ";")) {
|
||||
// TODO: This should actually be canonPath(dir), but that ends up appending two drive paths
|
||||
Path candidate = dir + "/" + program;
|
||||
for (const auto ext : exts) {
|
||||
if (pathExists(candidate + ext)) {
|
||||
return candidate;
|
||||
|
@ -408,5 +409,4 @@ bool statusOk(int status)
|
|||
{
|
||||
return status == 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,11 +6,19 @@ namespace nix {
|
|||
/*
|
||||
TEST(SpawnTest, spawnEcho)
|
||||
{
|
||||
auto output = runProgram(RunOptions{.program = "echo", .args = {}});
|
||||
auto output = runProgram(RunOptions{.program = "cmd", .lookupPath = true, .args = {"/C", "echo \"hello world\""}});
|
||||
std::cout << output.second << std::endl;
|
||||
}
|
||||
*/
|
||||
|
||||
#ifdef _WIN32
|
||||
Path lookupPathForProgram(const Path & program);
|
||||
TEST(SpawnTest, pathSearch)
|
||||
{
|
||||
ASSERT_NO_THROW(lookupPathForProgram("cmd"));
|
||||
ASSERT_NO_THROW(lookupPathForProgram("cmd.exe"));
|
||||
ASSERT_THROW(lookupPathForProgram("C:/System32/cmd.exe"), UsageError);
|
||||
}
|
||||
std::string windowsEscape(const std::string & str, bool cmd);
|
||||
|
||||
TEST(SpawnTest, windowsEscape)
|
||||
|
|
Loading…
Reference in a new issue