lune/tests/process/spawn.luau
2023-02-05 19:13:58 -05:00

72 lines
2 KiB
Lua

-- Spawning a child process should work with options
local result = process.spawn("ls", {
"-a",
})
assert(result.ok, "Failed to spawn child process")
assert(result.stderr == "", "Stderr was not empty")
assert(result.stdout ~= "", "Stdout was empty")
assert(string.find(result.stdout, "Cargo.toml") ~= nil, "Missing Cargo.toml in output")
assert(string.find(result.stdout, ".gitignore") ~= nil, "Missing .gitignore in output")
-- It should also work the same when spawned using a shell
local shellResult = process.spawn("ls", {
"-a",
}, {
shell = true,
})
assert(shellResult.ok, "Failed to spawn child process (shell)")
assert(shellResult.stderr == "", "Stderr was not empty (shell)")
assert(shellResult.stdout ~= "", "Stdout was empty (shell)")
assert(string.find(shellResult.stdout, "Cargo.toml") ~= nil, "Missing Cargo.toml in output (shell)")
assert(string.find(shellResult.stdout, ".gitignore") ~= nil, "Missing .gitignore in output (shell)")
-- Make sure the cwd option actually uses the directory we want
local rootPwd = process.spawn("pwd", {}, {
cwd = "/",
}).stdout
rootPwd = string.gsub(rootPwd, "^%s+", "")
rootPwd = string.gsub(rootPwd, "%s+$", "")
if rootPwd ~= "/" then
error(
string.format(
"Current working directory for child process was not set correctly!"
.. "\nExpected '/', got '%s'",
rootPwd
)
)
end
-- Setting cwd should not change the cwd of this process
local before = process.spawn("pwd").stdout
process.spawn("ls", {}, {
cwd = "/",
shell = true,
})
local after = process.spawn("pwd").stdout
assert(before == after, "Current working directory changed after running child process")
-- Inheriting stdio & environment variables should work
task.delay(2, function()
local message = "Hello from child process!"
local result = process.spawn("echo", {
'"$TEST_VAR"',
}, {
env = { TEST_VAR = message },
shell = "bash",
stdio = "inherit",
})
assert(
result.stdout == (message .. "\n"), -- Note that echo adds a newline
"Inheriting stdio did not return proper output"
)
end)