blob: e8c19060d6e873a73d677aab7ac11c2692ecd908 [file] [log] [blame]
levin@chromium.org5c528682011-03-28 10:54:15 +09001// Copyright (c) 2011 The Chromium Authors. All rights reserved.
tfarina@chromium.orgad52d0d2010-07-08 12:19:08 +09002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
tfarina@chromium.org6d36c5d2010-08-03 12:00:50 +09005#include "base/environment.h"
levin@chromium.org5c528682011-03-28 10:54:15 +09006#include "base/memory/scoped_ptr.h"
tfarina@chromium.orgad52d0d2010-07-08 12:19:08 +09007#include "testing/gtest/include/gtest/gtest.h"
8#include "testing/platform_test.h"
9
tfarina@chromium.org6d36c5d2010-08-03 12:00:50 +090010typedef PlatformTest EnvironmentTest;
tfarina@chromium.orgad52d0d2010-07-08 12:19:08 +090011
brettw@chromium.org50484af2013-08-31 03:00:39 +090012namespace base {
13
tfarina@chromium.org8f115a82010-08-07 11:57:59 +090014TEST_F(EnvironmentTest, GetVar) {
tfarina@chromium.orgad52d0d2010-07-08 12:19:08 +090015 // Every setup should have non-empty PATH...
brettw@chromium.org50484af2013-08-31 03:00:39 +090016 scoped_ptr<Environment> env(Environment::Create());
tfarina@chromium.orgad52d0d2010-07-08 12:19:08 +090017 std::string env_value;
tfarina@chromium.org8f115a82010-08-07 11:57:59 +090018 EXPECT_TRUE(env->GetVar("PATH", &env_value));
tfarina@chromium.orgad52d0d2010-07-08 12:19:08 +090019 EXPECT_NE(env_value, "");
20}
21
tfarina@chromium.org05b4f772010-08-21 09:41:52 +090022TEST_F(EnvironmentTest, GetVarReverse) {
brettw@chromium.org50484af2013-08-31 03:00:39 +090023 scoped_ptr<Environment> env(Environment::Create());
tfarina@chromium.org05b4f772010-08-21 09:41:52 +090024 const char* kFooUpper = "FOO";
25 const char* kFooLower = "foo";
26
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
38 const char* kBar = "bar";
39 // 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
tfarina@chromium.orge7f05592010-08-05 08:43:20 +090050TEST_F(EnvironmentTest, HasVar) {
tfarina@chromium.orgad52d0d2010-07-08 12:19:08 +090051 // Every setup should have PATH...
brettw@chromium.org50484af2013-08-31 03:00:39 +090052 scoped_ptr<Environment> env(Environment::Create());
tfarina@chromium.orge7f05592010-08-05 08:43:20 +090053 EXPECT_TRUE(env->HasVar("PATH"));
tfarina@chromium.orgad52d0d2010-07-08 12:19:08 +090054}
tfarina@chromium.org9731c9c2010-07-10 08:31:21 +090055
tfarina@chromium.org5dc66732010-08-06 10:03:37 +090056TEST_F(EnvironmentTest, SetVar) {
brettw@chromium.org50484af2013-08-31 03:00:39 +090057 scoped_ptr<Environment> env(Environment::Create());
tfarina@chromium.orga5122652010-08-01 01:55:40 +090058
tfarina@chromium.org36190ea2010-08-20 11:49:49 +090059 const char* kFooUpper = "FOO";
60 const char* kFooLower = "foo";
tfarina@chromium.org5dc66732010-08-06 10:03:37 +090061 EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
tfarina@chromium.org9731c9c2010-07-10 08:31:21 +090062
63 // Now verify that the environment has the new variable.
tfarina@chromium.orge7f05592010-08-05 08:43:20 +090064 EXPECT_TRUE(env->HasVar(kFooUpper));
tfarina@chromium.org9731c9c2010-07-10 08:31:21 +090065
66 std::string var_value;
tfarina@chromium.org8f115a82010-08-07 11:57:59 +090067 EXPECT_TRUE(env->GetVar(kFooUpper, &var_value));
tfarina@chromium.org9731c9c2010-07-10 08:31:21 +090068 EXPECT_EQ(var_value, kFooLower);
69}
tfarina@chromium.orga5122652010-08-01 01:55:40 +090070
tfarina@chromium.org6b2d9cc2010-08-04 11:13:34 +090071TEST_F(EnvironmentTest, UnSetVar) {
brettw@chromium.org50484af2013-08-31 03:00:39 +090072 scoped_ptr<Environment> env(Environment::Create());
tfarina@chromium.orga5122652010-08-01 01:55:40 +090073
tfarina@chromium.org36190ea2010-08-20 11:49:49 +090074 const char* kFooUpper = "FOO";
75 const char* kFooLower = "foo";
tfarina@chromium.orga5122652010-08-01 01:55:40 +090076 // First set some environment variable.
tfarina@chromium.org5dc66732010-08-06 10:03:37 +090077 EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
tfarina@chromium.orga5122652010-08-01 01:55:40 +090078
79 // Now verify that the environment has the new variable.
tfarina@chromium.orge7f05592010-08-05 08:43:20 +090080 EXPECT_TRUE(env->HasVar(kFooUpper));
tfarina@chromium.orga5122652010-08-01 01:55:40 +090081
82 // Finally verify that the environment variable was erased.
tfarina@chromium.org6b2d9cc2010-08-04 11:13:34 +090083 EXPECT_TRUE(env->UnSetVar(kFooUpper));
tfarina@chromium.orga5122652010-08-01 01:55:40 +090084
85 // And check that the variable has been unset.
tfarina@chromium.orge7f05592010-08-05 08:43:20 +090086 EXPECT_FALSE(env->HasVar(kFooUpper));
tfarina@chromium.orga5122652010-08-01 01:55:40 +090087}
brettw@chromium.org50484af2013-08-31 03:00:39 +090088
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);
98 EXPECT_TRUE(e[0] == 0);
99
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