From 75c6b5fee029ec95e7e45e18525e3e78b9616f48 Mon Sep 17 00:00:00 2001 From: Lexi Winter Date: Sat, 21 Jun 2025 15:23:05 +0100 Subject: add spawn --- tests/spawn.cc | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 tests/spawn.cc (limited to 'tests/spawn.cc') diff --git a/tests/spawn.cc b/tests/spawn.cc new file mode 100644 index 0000000..455223e --- /dev/null +++ b/tests/spawn.cc @@ -0,0 +1,65 @@ +/* + * This source code is released into the public domain. + */ + +#include + +import nihil; + +TEST_CASE("spawn: system", "[spawn]") { + using namespace nihil; + auto output = std::string(); + auto result = spawn(shell("x=1; echo $x"), + capture(stdout_fileno, output)).wait(); + + REQUIRE(result.okay()); + REQUIRE(output == "1\n"); +} + +TEST_CASE("spawn: execv", "[spawn]") { + using namespace nihil; + auto output = std::string(); + auto args = argv::from_args({"sh", "-c", "x=1; echo $x"}); + auto result = spawn(execv("/bin/sh", std::move(args)), + capture(stdout_fileno, output)).wait(); + + REQUIRE(result.okay()); + REQUIRE(output == "1\n"); +} + +TEST_CASE("spawn: execvp", "[spawn]") { + using namespace nihil; + auto output = std::string(); + auto args = argv::from_args({"sh", "-c", "x=1; echo $x"}); + auto result = spawn(execvp("sh", std::move(args)), + capture(stdout_fileno, output)).wait(); + + REQUIRE(result.okay()); + REQUIRE(output == "1\n"); +} + +TEST_CASE("spawn: execl", "[spawn]") { + using namespace nihil; + auto output = std::string(); + auto result = spawn(execl("/bin/sh", "sh", "-c", "x=1; echo $x"), + capture(stdout_fileno, output)).wait(); + + REQUIRE(result.okay()); + REQUIRE(output == "1\n"); +} + +TEST_CASE("spawn: execlp", "[spawn]") { + using namespace nihil; + auto output = std::string(); + auto result = spawn(execlp("sh", "sh", "-c", "x=1; echo $x"), + capture(stdout_fileno, output)).wait(); + + REQUIRE(result.okay()); + REQUIRE(output == "1\n"); +} + +TEST_CASE("spawn: execlp failure", "[spawn]") { + using namespace nihil; + REQUIRE_THROWS_AS(execlp("lfjail_nonesuch_executable", "x"), + executable_not_found); +} -- cgit v1.2.3