#pragma once #ifdef CLI11_SINGLE_FILE #include "CLI11.hpp" #else #include "CLI/CLI.hpp" #endif #include "gtest/gtest.h" #include using input_t = std::vector; struct TApp : public ::testing::Test { CLI::App app{"My Test Program"}; input_t args{}; void run() { // It is okay to re-parse - clear is called automatically before a parse. input_t newargs = args; std::reverse(std::begin(newargs), std::end(newargs)); app.parse(newargs); } }; class TempFile { std::string _name{}; public: explicit TempFile(std::string name) : _name(std::move(name)) { if(!CLI::NonexistentPath(_name).empty()) throw std::runtime_error(_name); } ~TempFile() { std::remove(_name.c_str()); // Doesn't matter if returns 0 or not } operator const std::string &() const { return _name; } const char *c_str() const { return _name.c_str(); } }; inline void put_env(std::string name, std::string value) { #ifdef _WIN32 _putenv_s(name.c_str(), value.c_str()); #else setenv(name.c_str(), value.c_str(), 1); #endif } inline void unset_env(std::string name) { #ifdef _WIN32 _putenv_s(name.c_str(), ""); #else unsetenv(name.c_str()); #endif }