blob: 23aec51181231739e776567a8d538a57e144d6d5 [file] [log] [blame]
[email protected]3b63f8f42011-03-28 01:54:151// Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]8d80d2d62010-07-08 03:19:082// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]76b90d312010-08-03 03:00:505#include "base/environment.h"
dcheng093de9b2016-04-04 21:25:516
7#include <memory>
8
avi9b6f42932015-12-26 22:15:149#include "build/build_config.h"
[email protected]8d80d2d62010-07-08 03:19:0810#include "testing/gtest/include/gtest/gtest.h"
11#include "testing/platform_test.h"
12
[email protected]76b90d312010-08-03 03:00:5013typedef PlatformTest EnvironmentTest;
[email protected]8d80d2d62010-07-08 03:19:0814
[email protected]b345c482013-08-30 18:00:3915namespace base {
16
Scott Grahame30b6cd2017-06-02 21:21:1917namespace {
18
Scott Grahame30b6cd2017-06-02 21:21:1919constexpr char kValidEnvironmentVariable[] = "PATH";
Scott Grahame30b6cd2017-06-02 21:21:1920
21} // namespace
22
[email protected]3ba7e082010-08-07 02:57:5923TEST_F(EnvironmentTest, GetVar) {
dcheng093de9b2016-04-04 21:25:5124 std::unique_ptr<Environment> env(Environment::Create());
[email protected]8d80d2d62010-07-08 03:19:0825 std::string env_value;
Scott Grahame30b6cd2017-06-02 21:21:1926 EXPECT_TRUE(env->GetVar(kValidEnvironmentVariable, &env_value));
[email protected]8d80d2d62010-07-08 03:19:0827 EXPECT_NE(env_value, "");
28}
29
[email protected]ab57ea32010-08-21 00:41:5230TEST_F(EnvironmentTest, GetVarReverse) {
dcheng093de9b2016-04-04 21:25:5131 std::unique_ptr<Environment> env(Environment::Create());
thestig073d514d2014-10-21 03:11:2132 const char kFooUpper[] = "FOO";
33 const char kFooLower[] = "foo";
[email protected]ab57ea32010-08-21 00:41:5234
35 // Set a variable in UPPER case.
36 EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
37
38 // And then try to get this variable passing the lower case.
39 std::string env_value;
40 EXPECT_TRUE(env->GetVar(kFooLower, &env_value));
41
42 EXPECT_STREQ(env_value.c_str(), kFooLower);
43
44 EXPECT_TRUE(env->UnSetVar(kFooUpper));
45
thestig073d514d2014-10-21 03:11:2146 const char kBar[] = "bar";
[email protected]ab57ea32010-08-21 00:41:5247 // Now do the opposite, set the variable in the lower case.
48 EXPECT_TRUE(env->SetVar(kFooLower, kBar));
49
50 // And then try to get this variable passing the UPPER case.
51 EXPECT_TRUE(env->GetVar(kFooUpper, &env_value));
52
53 EXPECT_STREQ(env_value.c_str(), kBar);
54
55 EXPECT_TRUE(env->UnSetVar(kFooLower));
56}
57
[email protected]9432ade2010-08-04 23:43:2058TEST_F(EnvironmentTest, HasVar) {
dcheng093de9b2016-04-04 21:25:5159 std::unique_ptr<Environment> env(Environment::Create());
Scott Grahame30b6cd2017-06-02 21:21:1960 EXPECT_TRUE(env->HasVar(kValidEnvironmentVariable));
[email protected]8d80d2d62010-07-08 03:19:0861}
[email protected]9c55d6c2010-07-09 23:31:2162
[email protected]c87bcf002010-08-06 01:03:3763TEST_F(EnvironmentTest, SetVar) {
dcheng093de9b2016-04-04 21:25:5164 std::unique_ptr<Environment> env(Environment::Create());
[email protected]fc586c72010-07-31 16:55:4065
thestig073d514d2014-10-21 03:11:2166 const char kFooUpper[] = "FOO";
67 const char kFooLower[] = "foo";
[email protected]c87bcf002010-08-06 01:03:3768 EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
[email protected]9c55d6c2010-07-09 23:31:2169
70 // Now verify that the environment has the new variable.
[email protected]9432ade2010-08-04 23:43:2071 EXPECT_TRUE(env->HasVar(kFooUpper));
[email protected]9c55d6c2010-07-09 23:31:2172
73 std::string var_value;
[email protected]3ba7e082010-08-07 02:57:5974 EXPECT_TRUE(env->GetVar(kFooUpper, &var_value));
[email protected]9c55d6c2010-07-09 23:31:2175 EXPECT_EQ(var_value, kFooLower);
76}
[email protected]fc586c72010-07-31 16:55:4077
[email protected]4fae3162010-08-04 02:13:3478TEST_F(EnvironmentTest, UnSetVar) {
dcheng093de9b2016-04-04 21:25:5179 std::unique_ptr<Environment> env(Environment::Create());
[email protected]fc586c72010-07-31 16:55:4080
thestig073d514d2014-10-21 03:11:2181 const char kFooUpper[] = "FOO";
82 const char kFooLower[] = "foo";
[email protected]fc586c72010-07-31 16:55:4083 // First set some environment variable.
[email protected]c87bcf002010-08-06 01:03:3784 EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
[email protected]fc586c72010-07-31 16:55:4085
86 // Now verify that the environment has the new variable.
[email protected]9432ade2010-08-04 23:43:2087 EXPECT_TRUE(env->HasVar(kFooUpper));
[email protected]fc586c72010-07-31 16:55:4088
89 // Finally verify that the environment variable was erased.
[email protected]4fae3162010-08-04 02:13:3490 EXPECT_TRUE(env->UnSetVar(kFooUpper));
[email protected]fc586c72010-07-31 16:55:4091
92 // And check that the variable has been unset.
[email protected]9432ade2010-08-04 23:43:2093 EXPECT_FALSE(env->HasVar(kFooUpper));
[email protected]fc586c72010-07-31 16:55:4094}
[email protected]b345c482013-08-30 18:00:3995
96#if defined(OS_WIN)
97
98TEST_F(EnvironmentTest, AlterEnvironment) {
99 const wchar_t empty[] = L"\0";
100 const wchar_t a2[] = L"A=2\0";
101 EnvironmentMap changes;
102 string16 e;
103
104 e = AlterEnvironment(empty, changes);
thestig073d514d2014-10-21 03:11:21105 EXPECT_EQ(0, e[0]);
[email protected]b345c482013-08-30 18:00:39106
107 changes[L"A"] = L"1";
108 e = AlterEnvironment(empty, changes);
109 EXPECT_EQ(string16(L"A=1\0\0", 5), e);
110
111 changes.clear();
112 changes[L"A"] = string16();
113 e = AlterEnvironment(empty, changes);
114 EXPECT_EQ(string16(L"\0\0", 2), e);
115
116 changes.clear();
117 e = AlterEnvironment(a2, changes);
118 EXPECT_EQ(string16(L"A=2\0\0", 5), e);
119
120 changes.clear();
121 changes[L"A"] = L"1";
122 e = AlterEnvironment(a2, changes);
123 EXPECT_EQ(string16(L"A=1\0\0", 5), e);
124
125 changes.clear();
126 changes[L"A"] = string16();
127 e = AlterEnvironment(a2, changes);
128 EXPECT_EQ(string16(L"\0\0", 2), e);
129}
130
131#else
132
133TEST_F(EnvironmentTest, AlterEnvironment) {
Ivan Kotenkova16212a52017-11-08 12:37:33134 const char* const empty[] = {nullptr};
135 const char* const a2[] = {"A=2", nullptr};
[email protected]b345c482013-08-30 18:00:39136 EnvironmentMap changes;
dcheng093de9b2016-04-04 21:25:51137 std::unique_ptr<char* []> e;
[email protected]b345c482013-08-30 18:00:39138
danakj0c8d4aa2015-11-25 05:29:58139 e = AlterEnvironment(empty, changes);
Ivan Kotenkova16212a52017-11-08 12:37:33140 EXPECT_TRUE(e[0] == nullptr);
[email protected]b345c482013-08-30 18:00:39141
142 changes["A"] = "1";
143 e = AlterEnvironment(empty, changes);
144 EXPECT_EQ(std::string("A=1"), e[0]);
Ivan Kotenkova16212a52017-11-08 12:37:33145 EXPECT_TRUE(e[1] == nullptr);
[email protected]b345c482013-08-30 18:00:39146
147 changes.clear();
148 changes["A"] = std::string();
149 e = AlterEnvironment(empty, changes);
Ivan Kotenkova16212a52017-11-08 12:37:33150 EXPECT_TRUE(e[0] == nullptr);
[email protected]b345c482013-08-30 18:00:39151
152 changes.clear();
153 e = AlterEnvironment(a2, changes);
154 EXPECT_EQ(std::string("A=2"), e[0]);
Ivan Kotenkova16212a52017-11-08 12:37:33155 EXPECT_TRUE(e[1] == nullptr);
[email protected]b345c482013-08-30 18:00:39156
157 changes.clear();
158 changes["A"] = "1";
159 e = AlterEnvironment(a2, changes);
160 EXPECT_EQ(std::string("A=1"), e[0]);
Ivan Kotenkova16212a52017-11-08 12:37:33161 EXPECT_TRUE(e[1] == nullptr);
[email protected]b345c482013-08-30 18:00:39162
163 changes.clear();
164 changes["A"] = std::string();
165 e = AlterEnvironment(a2, changes);
Ivan Kotenkova16212a52017-11-08 12:37:33166 EXPECT_TRUE(e[0] == nullptr);
[email protected]b345c482013-08-30 18:00:39167}
168
169#endif
170
171} // namespace base