#include <catch.hpp> #include <leatherman/util/environment.hpp> #include <leatherman/util/scoped_env.hpp> #include <unistd.h> using namespace std; using namespace leatherman::util; SCENARIO("path separator on POSIX") { REQUIRE(environment::get_path_separator() == ':'); } SCENARIO("environment search paths") { GIVEN("paths from the environment") { auto paths = environment::search_paths(); REQUIRE(paths.size() > 2); THEN("the second to last path should be /sbin") { REQUIRE(*(paths.rbegin() + 1) == "/sbin"); } THEN("the last path should be /usr/sbin") { REQUIRE(paths.back() == "/usr/sbin"); } } GIVEN("empty paths from the environment") { string value; REQUIRE(environment::get("PATH", value)); REQUIRE(environment::set("PATH", value+":")); environment::reload_search_paths(); auto paths = environment::search_paths(); THEN("an empty path should not be searched") { REQUIRE(count(paths.begin(), paths.end(), "") == 0); } REQUIRE(environment::set("PATH", value)); environment::reload_search_paths(); } }