mirror of
https://github.com/Llewellynvdm/conky.git
synced 2024-11-17 10:35:10 +00:00
Add more Tests for variable_substitute
This commit is contained in:
parent
dbaf31f9ce
commit
d0e35e15f7
@ -34,11 +34,45 @@
|
||||
#include <common.h>
|
||||
#include <conky.h>
|
||||
|
||||
std::string get_valid_environment_variable_name() {
|
||||
if (getenv("HOME") != nullptr) { return "HOME"; }
|
||||
|
||||
// If HOME is not a valid environment variable name, try to get a valid one.
|
||||
char *env_var = *environ;
|
||||
|
||||
for (int i = 1; env_var; i++) {
|
||||
std::string variable_name(env_var);
|
||||
int variable_name_length = variable_name.find('=');
|
||||
variable_name = variable_name.substr(0, variable_name_length);
|
||||
|
||||
if (getenv(variable_name.c_str()) != nullptr) { return variable_name; }
|
||||
|
||||
env_var = *(environ + i);
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
std::string get_invalid_environment_variable_name() {
|
||||
std::string variable_name = "INVALIDVARIABLENAME";
|
||||
|
||||
while (getenv(variable_name.c_str()) != nullptr) {
|
||||
variable_name += std::to_string(variable_name.length());
|
||||
}
|
||||
|
||||
return variable_name;
|
||||
}
|
||||
|
||||
TEST_CASE("to_real_path becomes homedir", "[to_real_path]") {
|
||||
REQUIRE(to_real_path("~/test") == std::string(getenv("HOME")) + "/test");
|
||||
}
|
||||
|
||||
TEST_CASE("variables are substituted correctly", "[variable_substitute]") {
|
||||
TEST_CASE("environment variables are substituted correctly",
|
||||
"[variable_substitute]") {
|
||||
std::string valid_name = get_valid_environment_variable_name();
|
||||
std::string valid_value = getenv(valid_name.c_str());
|
||||
std::string invalid_name = get_invalid_environment_variable_name();
|
||||
|
||||
SECTION("an empty string input returns an empty string") {
|
||||
REQUIRE(variable_substitute("") == "");
|
||||
}
|
||||
@ -47,10 +81,68 @@ TEST_CASE("variables are substituted correctly", "[variable_substitute]") {
|
||||
std::string string_alpha = "abcdefghijklmnopqrstuvwxyz";
|
||||
std::string string_numbers = "1234567890";
|
||||
std::string string_special = "`~!@#$%^&*()-=_+[]{}\\|;:'\",<.>/?";
|
||||
std::string string_valid_name = valid_name;
|
||||
|
||||
REQUIRE(variable_substitute(string_alpha) == string_alpha);
|
||||
REQUIRE(variable_substitute(string_numbers) == string_numbers);
|
||||
REQUIRE(variable_substitute(string_special) == string_special);
|
||||
REQUIRE(variable_substitute(string_valid_name) == string_valid_name);
|
||||
}
|
||||
|
||||
SECTION("invalid variables are removed from return string") {
|
||||
std::string string_in_1 = "a$" + invalid_name + " z";
|
||||
std::string string_in_2 = "a${" + invalid_name + "} z";
|
||||
std::string string_in_3 = "a${" + invalid_name + " " + valid_name + "} z";
|
||||
std::string string_in_4 = "a${ " + valid_name + "} z";
|
||||
std::string string_in_5 = "a${" + valid_name + " } z";
|
||||
std::string string_in_6 = "a$" + valid_name + "z z";
|
||||
std::string string_in_7 = "a$" + invalid_name + "# z";
|
||||
|
||||
REQUIRE(variable_substitute(string_in_1) == "a z");
|
||||
REQUIRE(variable_substitute(string_in_2) == "a z");
|
||||
REQUIRE(variable_substitute(string_in_3) == "a z");
|
||||
REQUIRE(variable_substitute(string_in_4) == "a z");
|
||||
REQUIRE(variable_substitute(string_in_5) == "a z");
|
||||
REQUIRE(variable_substitute(string_in_6) == "a z");
|
||||
REQUIRE(variable_substitute(string_in_7) == "a# z");
|
||||
}
|
||||
|
||||
SECTION("valid variable gets replaced in the return string") {
|
||||
std::string string_in_1 = "a$" + valid_name + " z";
|
||||
std::string string_in_2 = "a${" + valid_name + "} z";
|
||||
std::string string_in_3 = "a$" + valid_name + "# z";
|
||||
|
||||
std::string string_var_replaced_1 = "a" + valid_value + " z";
|
||||
std::string string_var_replaced_2 = "a" + valid_value + " z";
|
||||
std::string string_var_replaced_3 = "a" + valid_value + "# z";
|
||||
|
||||
REQUIRE(variable_substitute(string_in_1) == string_var_replaced_1);
|
||||
REQUIRE(variable_substitute(string_in_2) == string_var_replaced_2);
|
||||
REQUIRE(variable_substitute(string_in_3) == string_var_replaced_3);
|
||||
}
|
||||
|
||||
SECTION("$ without variable is ignored") {
|
||||
std::string string_in_1 = "a$#z";
|
||||
std::string string_in_2 = "a$2z";
|
||||
|
||||
REQUIRE(variable_substitute(string_in_1) == string_in_1);
|
||||
REQUIRE(variable_substitute(string_in_2) == string_in_2);
|
||||
}
|
||||
|
||||
SECTION("double $ gets converted to single $ and is passed over") {
|
||||
std::string string_in_1 = "a$$sz";
|
||||
std::string string_in_2 = "a$$" + valid_name + "z";
|
||||
std::string string_out_1 = "a$sz";
|
||||
std::string string_out_2 = "a$" + valid_name + "z";
|
||||
|
||||
REQUIRE(variable_substitute(string_in_1) == string_out_1);
|
||||
REQUIRE(variable_substitute(string_in_2) == string_out_2);
|
||||
}
|
||||
|
||||
SECTION("incomplete variable does not get replaced in return string") {
|
||||
std::string string_in = "a${" + valid_name + " z";
|
||||
|
||||
REQUIRE(variable_substitute(string_in) == string_in);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user