/// Returns the test suite name for the current directory. /// /// \return The identifier of the current test suite. std::string layout::test_suite_for_path(const fs::path& path) { std::string test_suite; if (path.is_absolute()) test_suite = path.str(); else test_suite = path.to_absolute().str(); PRE(!test_suite.empty() && test_suite[0] == '/'); std::replace(test_suite.begin(), test_suite.end(), '/', '_'); test_suite.erase(0, 1); return test_suite; }
/// Locates a file in the PATH. /// /// \param name The file to locate. /// /// \return The path to the located file or none if it was not found. The /// returned path is always absolute. optional< fs::path > fs::find_in_path(const char* name) { const optional< std::string > current_path = utils::getenv("PATH"); if (!current_path || current_path.get().empty()) return none; std::istringstream path_input(current_path.get() + ":"); std::string path_component; while (std::getline(path_input, path_component, ':').good()) { const fs::path candidate = path_component.empty() ? fs::path(name) : (fs::path(path_component) / name); if (exists(candidate)) { if (candidate.is_absolute()) return utils::make_optional(candidate); else return utils::make_optional(candidate.to_absolute()); } } return none; }
/// Gets the absolute path to the test program. /// /// \return The absolute path to the test program binary. const fs::path model::test_program::absolute_path(void) const { const fs::path full_path = _pimpl->root / _pimpl->binary; return full_path.is_absolute() ? full_path : full_path.to_absolute(); }