scoped_set_env_test.cc (2559B)
1 // Copyright 2019 The Abseil Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #ifdef _WIN32 16 #include <windows.h> 17 #endif 18 19 #include "gtest/gtest.h" 20 #include "absl/base/internal/scoped_set_env.h" 21 22 namespace { 23 24 using absl::base_internal::ScopedSetEnv; 25 26 std::string GetEnvVar(const char* name) { 27 #ifdef _WIN32 28 char buf[1024]; 29 auto get_res = GetEnvironmentVariableA(name, buf, sizeof(buf)); 30 if (get_res >= sizeof(buf)) { 31 return "TOO_BIG"; 32 } 33 34 if (get_res == 0) { 35 return "UNSET"; 36 } 37 38 return std::string(buf, get_res); 39 #else 40 const char* val = ::getenv(name); 41 if (val == nullptr) { 42 return "UNSET"; 43 } 44 45 return val; 46 #endif 47 } 48 49 TEST(ScopedSetEnvTest, SetNonExistingVarToString) { 50 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "UNSET"); 51 52 { 53 ScopedSetEnv scoped_set("SCOPED_SET_ENV_TEST_VAR", "value"); 54 55 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "value"); 56 } 57 58 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "UNSET"); 59 } 60 61 TEST(ScopedSetEnvTest, SetNonExistingVarToNull) { 62 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "UNSET"); 63 64 { 65 ScopedSetEnv scoped_set("SCOPED_SET_ENV_TEST_VAR", nullptr); 66 67 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "UNSET"); 68 } 69 70 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "UNSET"); 71 } 72 73 TEST(ScopedSetEnvTest, SetExistingVarToString) { 74 ScopedSetEnv scoped_set("SCOPED_SET_ENV_TEST_VAR", "value"); 75 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "value"); 76 77 { 78 ScopedSetEnv scoped_set("SCOPED_SET_ENV_TEST_VAR", "new_value"); 79 80 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "new_value"); 81 } 82 83 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "value"); 84 } 85 86 TEST(ScopedSetEnvTest, SetExistingVarToNull) { 87 ScopedSetEnv scoped_set("SCOPED_SET_ENV_TEST_VAR", "value"); 88 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "value"); 89 90 { 91 ScopedSetEnv scoped_set("SCOPED_SET_ENV_TEST_VAR", nullptr); 92 93 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "UNSET"); 94 } 95 96 EXPECT_EQ(GetEnvVar("SCOPED_SET_ENV_TEST_VAR"), "value"); 97 } 98 99 } // namespace