#include "json_writer.h"
+// get_env_var() - returns a std::string of `name`. if report_failure is true, then it will log to stderr that it didn't find the
+// env-var
+// NOTE: This is only intended for test framework code, all test code MUST use EnvVarWrapper
+std::string get_env_var(std::string const& name, bool report_failure = true);
+
/*
* Wrapper around Environment Variables with common operations
* Since Environment Variables leak between tests, there needs to be RAII code to remove them during test cleanup
// Wrapper to set & remove env-vars automatically
struct EnvVarWrapper {
// Constructor which unsets the env-var
- EnvVarWrapper(std::string const& name) noexcept : name(name) { remove_env_var(); }
+ EnvVarWrapper(std::string const& name) noexcept : name(name) {
+ initial_value = get_env_var(name, false);
+ remove_env_var();
+ }
// Constructor which set the env-var to the specified value
- EnvVarWrapper(std::string const& name, std::string const& value) noexcept : name(name), cur_value(value) { set_env_var(); }
- ~EnvVarWrapper() noexcept { remove_env_var(); }
+ EnvVarWrapper(std::string const& name, std::string const& value) noexcept : name(name), cur_value(value) {
+ initial_value = get_env_var(name, false);
+ set_env_var();
+ }
+ ~EnvVarWrapper() noexcept {
+ remove_env_var();
+ if (!initial_value.empty()) {
+ set_new_value(initial_value);
+ }
+ }
// delete copy operators
EnvVarWrapper(const EnvVarWrapper&) = delete;
private:
std::string name;
std::string cur_value;
+ std::string initial_value;
void set_env_var();
void remove_env_var() const;
#endif
};
-// get_env_var() - returns a std::string of `name`. if report_failure is true, then it will log to stderr that it didn't find the
-// env-var
-// NOTE: This is only intended for test framework code, all test code MUST use EnvVarWrapper
-std::string get_env_var(std::string const& name, bool report_failure = true);
-
// Windows specific error handling logic
#if defined(WIN32)
const long ERROR_SETENV_FAILED = 10543; // chosen at random, attempts to not conflict
EnvVarWrapper vk_loader_layers_disable_env_var{"VK_LOADER_LAYERS_DISABLE"};
EnvVarWrapper vk_loader_debug_env_var{"VK_LOADER_DEBUG"};
EnvVarWrapper vk_loader_disable_inst_ext_filter_env_var{"VK_LOADER_DISABLE_INST_EXT_FILTER"};
- vk_icd_filenames_env_var.remove_value();
- vk_driver_files_env_var.remove_value();
- vk_add_driver_files_env_var.remove_value();
- vk_layer_path_env_var.remove_value();
- vk_add_layer_path_env_var.remove_value();
- vk_instance_layers_env_var.remove_value();
- vk_loader_drivers_select_env_var.remove_value();
- vk_loader_drivers_disable_env_var.remove_value();
- vk_loader_layers_enable_env_var.remove_value();
- vk_loader_layers_disable_env_var.remove_value();
- vk_loader_debug_env_var.remove_value();
- vk_loader_disable_inst_ext_filter_env_var.remove_value();
#if COMMON_UNIX_PLATFORMS
// Set only one of the 4 XDG variables to /etc, let everything else be empty