blob: f0577a8a82bbae73e9efb1cb33b66cd89448644e [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"
[email protected]3b63f8f42011-03-28 01:54:156#include "base/memory/scoped_ptr.h"
[email protected]8d80d2d62010-07-08 03:19:087#include "testing/gtest/include/gtest/gtest.h"
8#include "testing/platform_test.h"
9
[email protected]76b90d312010-08-03 03:00:5010typedef PlatformTest EnvironmentTest;
[email protected]8d80d2d62010-07-08 03:19:0811
[email protected]b345c482013-08-30 18:00:3912namespace base {
13
[email protected]3ba7e082010-08-07 02:57:5914TEST_F(EnvironmentTest, GetVar) {
[email protected]8d80d2d62010-07-08 03:19:0815 // Every setup should have non-empty PATH...
[email protected]b345c482013-08-30 18:00:3916 scoped_ptr<Environment> env(Environment::Create());
[email protected]8d80d2d62010-07-08 03:19:0817 std::string env_value;
[email protected]3ba7e082010-08-07 02:57:5918 EXPECT_TRUE(env->GetVar("PATH", &env_value));
[email protected]8d80d2d62010-07-08 03:19:0819 EXPECT_NE(env_value, "");
20}
21
[email protected]ab57ea32010-08-21 00:41:5222TEST_F(EnvironmentTest, GetVarReverse) {
[email protected]b345c482013-08-30 18:00:3923 scoped_ptr<Environment> env(Environment::Create());
thestig073d514d2014-10-21 03:11:2124 const char kFooUpper[] = "FOO";
25 const char kFooLower[] = "foo";
[email protected]ab57ea32010-08-21 00:41:5226
27 // Set a variable in UPPER case.
28 EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
29
30 // And then try to get this variable passing the lower case.
31 std::string env_value;
32 EXPECT_TRUE(env->GetVar(kFooLower, &env_value));
33
34 EXPECT_STREQ(env_value.c_str(), kFooLower);
35
36 EXPECT_TRUE(env->UnSetVar(kFooUpper));
37
thestig073d514d2014-10-21 03:11:2138 const char kBar[] = "bar";
[email protected]ab57ea32010-08-21 00:41:5239 // Now do the opposite, set the variable in the lower case.
40 EXPECT_TRUE(env->SetVar(kFooLower, kBar));
41
42 // And then try to get this variable passing the UPPER case.
43 EXPECT_TRUE(env->GetVar(kFooUpper, &env_value));
44
45 EXPECT_STREQ(env_value.c_str(), kBar);
46
47 EXPECT_TRUE(env->UnSetVar(kFooLower));
48}
49
[email protected]9432ade2010-08-04 23:43:2050TEST_F(EnvironmentTest, HasVar) {
[email protected]8d80d2d62010-07-08 03:19:0851 // Every setup should have PATH...
[email protected]b345c482013-08-30 18:00:3952 scoped_ptr<Environment> env(Environment::Create());
[email protected]9432ade2010-08-04 23:43:2053 EXPECT_TRUE(env->HasVar("PATH"));
[email protected]8d80d2d62010-07-08 03:19:0854}
[email protected]9c55d6c2010-07-09 23:31:2155
[email protected]c87bcf002010-08-06 01:03:3756TEST_F(EnvironmentTest, SetVar) {
[email protected]b345c482013-08-30 18:00:3957 scoped_ptr<Environment> env(Environment::Create());
[email protected]fc586c72010-07-31 16:55:4058
thestig073d514d2014-10-21 03:11:2159 const char kFooUpper[] = "FOO";
60 const char kFooLower[] = "foo";
[email protected]c87bcf002010-08-06 01:03:3761 EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
[email protected]9c55d6c2010-07-09 23:31:2162
63 // Now verify that the environment has the new variable.
[email protected]9432ade2010-08-04 23:43:2064 EXPECT_TRUE(env->HasVar(kFooUpper));
[email protected]9c55d6c2010-07-09 23:31:2165
66 std::string var_value;
[email protected]3ba7e082010-08-07 02:57:5967 EXPECT_TRUE(env->GetVar(kFooUpper, &var_value));
[email protected]9c55d6c2010-07-09 23:31:2168 EXPECT_EQ(var_value, kFooLower);
69}
[email protected]fc586c72010-07-31 16:55:4070
[email protected]4fae3162010-08-04 02:13:3471TEST_F(EnvironmentTest, UnSetVar) {
[email protected]b345c482013-08-30 18:00:3972 scoped_ptr<Environment> env(Environment::Create());
[email protected]fc586c72010-07-31 16:55:4073
thestig073d514d2014-10-21 03:11:2174 const char kFooUpper[] = "FOO";
75 const char kFooLower[] = "foo";
[email protected]fc586c72010-07-31 16:55:4076 // First set some environment variable.
[email protected]c87bcf002010-08-06 01:03:3777 EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
[email protected]fc586c72010-07-31 16:55:4078
79 // Now verify that the environment has the new variable.
[email protected]9432ade2010-08-04 23:43:2080 EXPECT_TRUE(env->HasVar(kFooUpper));
[email protected]fc586c72010-07-31 16:55:4081
82 // Finally verify that the environment variable was erased.
[email protected]4fae3162010-08-04 02:13:3483 EXPECT_TRUE(env->UnSetVar(kFooUpper));
[email protected]fc586c72010-07-31 16:55:4084
85 // And check that the variable has been unset.
[email protected]9432ade2010-08-04 23:43:2086 EXPECT_FALSE(env->HasVar(kFooUpper));
[email protected]fc586c72010-07-31 16:55:4087}
[email protected]b345c482013-08-30 18:00:3988
89#if defined(OS_WIN)
90
91TEST_F(EnvironmentTest, AlterEnvironment) {
92 const wchar_t empty[] = L"\0";
93 const wchar_t a2[] = L"A=2\0";
94 EnvironmentMap changes;
95 string16 e;
96
97 e = AlterEnvironment(empty, changes);
thestig073d514d2014-10-21 03:11:2198 EXPECT_EQ(0, e[0]);
[email protected]b345c482013-08-30 18:00:3999
100 changes[L"A"] = L"1";
101 e = AlterEnvironment(empty, changes);
102 EXPECT_EQ(string16(L"A=1\0\0", 5), e);
103
104 changes.clear();
105 changes[L"A"] = string16();
106 e = AlterEnvironment(empty, changes);
107 EXPECT_EQ(string16(L"\0\0", 2), e);
108
109 changes.clear();
110 e = AlterEnvironment(a2, changes);
111 EXPECT_EQ(string16(L"A=2\0\0", 5), e);
112
113 changes.clear();
114 changes[L"A"] = L"1";
115 e = AlterEnvironment(a2, changes);
116 EXPECT_EQ(string16(L"A=1\0\0", 5), e);
117
118 changes.clear();
119 changes[L"A"] = string16();
120 e = AlterEnvironment(a2, changes);
121 EXPECT_EQ(string16(L"\0\0", 2), e);
122}
123
124#else
125
126TEST_F(EnvironmentTest, AlterEnvironment) {
127 const char* const empty[] = { NULL };
128 const char* const a2[] = { "A=2", NULL };
129 EnvironmentMap changes;
130 scoped_ptr<char*[]> e;
131
132 e = AlterEnvironment(empty, changes).Pass();
133 EXPECT_TRUE(e[0] == NULL);
134
135 changes["A"] = "1";
136 e = AlterEnvironment(empty, changes);
137 EXPECT_EQ(std::string("A=1"), e[0]);
138 EXPECT_TRUE(e[1] == NULL);
139
140 changes.clear();
141 changes["A"] = std::string();
142 e = AlterEnvironment(empty, changes);
143 EXPECT_TRUE(e[0] == NULL);
144
145 changes.clear();
146 e = AlterEnvironment(a2, changes);
147 EXPECT_EQ(std::string("A=2"), e[0]);
148 EXPECT_TRUE(e[1] == NULL);
149
150 changes.clear();
151 changes["A"] = "1";
152 e = AlterEnvironment(a2, changes);
153 EXPECT_EQ(std::string("A=1"), e[0]);
154 EXPECT_TRUE(e[1] == NULL);
155
156 changes.clear();
157 changes["A"] = std::string();
158 e = AlterEnvironment(a2, changes);
159 EXPECT_TRUE(e[0] == NULL);
160}
161
162#endif
163
164} // namespace base