xref: /aosp_15_r20/external/libchrome/base/environment_unittest.cc (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker #include "base/environment.h"
6*635a8641SAndroid Build Coastguard Worker 
7*635a8641SAndroid Build Coastguard Worker #include <memory>
8*635a8641SAndroid Build Coastguard Worker 
9*635a8641SAndroid Build Coastguard Worker #include "build/build_config.h"
10*635a8641SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
11*635a8641SAndroid Build Coastguard Worker #include "testing/platform_test.h"
12*635a8641SAndroid Build Coastguard Worker 
13*635a8641SAndroid Build Coastguard Worker typedef PlatformTest EnvironmentTest;
14*635a8641SAndroid Build Coastguard Worker 
15*635a8641SAndroid Build Coastguard Worker namespace base {
16*635a8641SAndroid Build Coastguard Worker 
17*635a8641SAndroid Build Coastguard Worker namespace {
18*635a8641SAndroid Build Coastguard Worker 
19*635a8641SAndroid Build Coastguard Worker // PATH env variable is not set on Fuchsia by default, while PWD is not set on
20*635a8641SAndroid Build Coastguard Worker // Windows.
21*635a8641SAndroid Build Coastguard Worker #if defined(OS_FUCHSIA)
22*635a8641SAndroid Build Coastguard Worker constexpr char kValidEnvironmentVariable[] = "PWD";
23*635a8641SAndroid Build Coastguard Worker #else
24*635a8641SAndroid Build Coastguard Worker constexpr char kValidEnvironmentVariable[] = "PATH";
25*635a8641SAndroid Build Coastguard Worker #endif
26*635a8641SAndroid Build Coastguard Worker 
27*635a8641SAndroid Build Coastguard Worker }  // namespace
28*635a8641SAndroid Build Coastguard Worker 
TEST_F(EnvironmentTest,GetVar)29*635a8641SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, GetVar) {
30*635a8641SAndroid Build Coastguard Worker   std::unique_ptr<Environment> env(Environment::Create());
31*635a8641SAndroid Build Coastguard Worker   std::string env_value;
32*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->GetVar(kValidEnvironmentVariable, &env_value));
33*635a8641SAndroid Build Coastguard Worker   EXPECT_NE(env_value, "");
34*635a8641SAndroid Build Coastguard Worker }
35*635a8641SAndroid Build Coastguard Worker 
TEST_F(EnvironmentTest,GetVarReverse)36*635a8641SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, GetVarReverse) {
37*635a8641SAndroid Build Coastguard Worker   std::unique_ptr<Environment> env(Environment::Create());
38*635a8641SAndroid Build Coastguard Worker   const char kFooUpper[] = "FOO";
39*635a8641SAndroid Build Coastguard Worker   const char kFooLower[] = "foo";
40*635a8641SAndroid Build Coastguard Worker 
41*635a8641SAndroid Build Coastguard Worker   // Set a variable in UPPER case.
42*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
43*635a8641SAndroid Build Coastguard Worker 
44*635a8641SAndroid Build Coastguard Worker   // And then try to get this variable passing the lower case.
45*635a8641SAndroid Build Coastguard Worker   std::string env_value;
46*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->GetVar(kFooLower, &env_value));
47*635a8641SAndroid Build Coastguard Worker 
48*635a8641SAndroid Build Coastguard Worker   EXPECT_STREQ(env_value.c_str(), kFooLower);
49*635a8641SAndroid Build Coastguard Worker 
50*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->UnSetVar(kFooUpper));
51*635a8641SAndroid Build Coastguard Worker 
52*635a8641SAndroid Build Coastguard Worker   const char kBar[] = "bar";
53*635a8641SAndroid Build Coastguard Worker   // Now do the opposite, set the variable in the lower case.
54*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->SetVar(kFooLower, kBar));
55*635a8641SAndroid Build Coastguard Worker 
56*635a8641SAndroid Build Coastguard Worker   // And then try to get this variable passing the UPPER case.
57*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->GetVar(kFooUpper, &env_value));
58*635a8641SAndroid Build Coastguard Worker 
59*635a8641SAndroid Build Coastguard Worker   EXPECT_STREQ(env_value.c_str(), kBar);
60*635a8641SAndroid Build Coastguard Worker 
61*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->UnSetVar(kFooLower));
62*635a8641SAndroid Build Coastguard Worker }
63*635a8641SAndroid Build Coastguard Worker 
TEST_F(EnvironmentTest,HasVar)64*635a8641SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, HasVar) {
65*635a8641SAndroid Build Coastguard Worker   std::unique_ptr<Environment> env(Environment::Create());
66*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->HasVar(kValidEnvironmentVariable));
67*635a8641SAndroid Build Coastguard Worker }
68*635a8641SAndroid Build Coastguard Worker 
TEST_F(EnvironmentTest,SetVar)69*635a8641SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, SetVar) {
70*635a8641SAndroid Build Coastguard Worker   std::unique_ptr<Environment> env(Environment::Create());
71*635a8641SAndroid Build Coastguard Worker 
72*635a8641SAndroid Build Coastguard Worker   const char kFooUpper[] = "FOO";
73*635a8641SAndroid Build Coastguard Worker   const char kFooLower[] = "foo";
74*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
75*635a8641SAndroid Build Coastguard Worker 
76*635a8641SAndroid Build Coastguard Worker   // Now verify that the environment has the new variable.
77*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->HasVar(kFooUpper));
78*635a8641SAndroid Build Coastguard Worker 
79*635a8641SAndroid Build Coastguard Worker   std::string var_value;
80*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->GetVar(kFooUpper, &var_value));
81*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(var_value, kFooLower);
82*635a8641SAndroid Build Coastguard Worker }
83*635a8641SAndroid Build Coastguard Worker 
TEST_F(EnvironmentTest,UnSetVar)84*635a8641SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, UnSetVar) {
85*635a8641SAndroid Build Coastguard Worker   std::unique_ptr<Environment> env(Environment::Create());
86*635a8641SAndroid Build Coastguard Worker 
87*635a8641SAndroid Build Coastguard Worker   const char kFooUpper[] = "FOO";
88*635a8641SAndroid Build Coastguard Worker   const char kFooLower[] = "foo";
89*635a8641SAndroid Build Coastguard Worker   // First set some environment variable.
90*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
91*635a8641SAndroid Build Coastguard Worker 
92*635a8641SAndroid Build Coastguard Worker   // Now verify that the environment has the new variable.
93*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->HasVar(kFooUpper));
94*635a8641SAndroid Build Coastguard Worker 
95*635a8641SAndroid Build Coastguard Worker   // Finally verify that the environment variable was erased.
96*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(env->UnSetVar(kFooUpper));
97*635a8641SAndroid Build Coastguard Worker 
98*635a8641SAndroid Build Coastguard Worker   // And check that the variable has been unset.
99*635a8641SAndroid Build Coastguard Worker   EXPECT_FALSE(env->HasVar(kFooUpper));
100*635a8641SAndroid Build Coastguard Worker }
101*635a8641SAndroid Build Coastguard Worker 
102*635a8641SAndroid Build Coastguard Worker #if defined(OS_WIN)
103*635a8641SAndroid Build Coastguard Worker 
TEST_F(EnvironmentTest,AlterEnvironment)104*635a8641SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, AlterEnvironment) {
105*635a8641SAndroid Build Coastguard Worker   const wchar_t empty[] = L"\0";
106*635a8641SAndroid Build Coastguard Worker   const wchar_t a2[] = L"A=2\0";
107*635a8641SAndroid Build Coastguard Worker   EnvironmentMap changes;
108*635a8641SAndroid Build Coastguard Worker   string16 e;
109*635a8641SAndroid Build Coastguard Worker 
110*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(empty, changes);
111*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(0, e[0]);
112*635a8641SAndroid Build Coastguard Worker 
113*635a8641SAndroid Build Coastguard Worker   changes[L"A"] = L"1";
114*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(empty, changes);
115*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(string16(L"A=1\0\0", 5), e);
116*635a8641SAndroid Build Coastguard Worker 
117*635a8641SAndroid Build Coastguard Worker   changes.clear();
118*635a8641SAndroid Build Coastguard Worker   changes[L"A"] = string16();
119*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(empty, changes);
120*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(string16(L"\0\0", 2), e);
121*635a8641SAndroid Build Coastguard Worker 
122*635a8641SAndroid Build Coastguard Worker   changes.clear();
123*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(a2, changes);
124*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(string16(L"A=2\0\0", 5), e);
125*635a8641SAndroid Build Coastguard Worker 
126*635a8641SAndroid Build Coastguard Worker   changes.clear();
127*635a8641SAndroid Build Coastguard Worker   changes[L"A"] = L"1";
128*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(a2, changes);
129*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(string16(L"A=1\0\0", 5), e);
130*635a8641SAndroid Build Coastguard Worker 
131*635a8641SAndroid Build Coastguard Worker   changes.clear();
132*635a8641SAndroid Build Coastguard Worker   changes[L"A"] = string16();
133*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(a2, changes);
134*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(string16(L"\0\0", 2), e);
135*635a8641SAndroid Build Coastguard Worker }
136*635a8641SAndroid Build Coastguard Worker 
137*635a8641SAndroid Build Coastguard Worker #else
138*635a8641SAndroid Build Coastguard Worker 
TEST_F(EnvironmentTest,AlterEnvironment)139*635a8641SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, AlterEnvironment) {
140*635a8641SAndroid Build Coastguard Worker   const char* const empty[] = {nullptr};
141*635a8641SAndroid Build Coastguard Worker   const char* const a2[] = {"A=2", nullptr};
142*635a8641SAndroid Build Coastguard Worker   EnvironmentMap changes;
143*635a8641SAndroid Build Coastguard Worker   std::unique_ptr<char* []> e;
144*635a8641SAndroid Build Coastguard Worker 
145*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(empty, changes);
146*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(e[0] == nullptr);
147*635a8641SAndroid Build Coastguard Worker 
148*635a8641SAndroid Build Coastguard Worker   changes["A"] = "1";
149*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(empty, changes);
150*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(std::string("A=1"), e[0]);
151*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(e[1] == nullptr);
152*635a8641SAndroid Build Coastguard Worker 
153*635a8641SAndroid Build Coastguard Worker   changes.clear();
154*635a8641SAndroid Build Coastguard Worker   changes["A"] = std::string();
155*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(empty, changes);
156*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(e[0] == nullptr);
157*635a8641SAndroid Build Coastguard Worker 
158*635a8641SAndroid Build Coastguard Worker   changes.clear();
159*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(a2, changes);
160*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(std::string("A=2"), e[0]);
161*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(e[1] == nullptr);
162*635a8641SAndroid Build Coastguard Worker 
163*635a8641SAndroid Build Coastguard Worker   changes.clear();
164*635a8641SAndroid Build Coastguard Worker   changes["A"] = "1";
165*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(a2, changes);
166*635a8641SAndroid Build Coastguard Worker   EXPECT_EQ(std::string("A=1"), e[0]);
167*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(e[1] == nullptr);
168*635a8641SAndroid Build Coastguard Worker 
169*635a8641SAndroid Build Coastguard Worker   changes.clear();
170*635a8641SAndroid Build Coastguard Worker   changes["A"] = std::string();
171*635a8641SAndroid Build Coastguard Worker   e = AlterEnvironment(a2, changes);
172*635a8641SAndroid Build Coastguard Worker   EXPECT_TRUE(e[0] == nullptr);
173*635a8641SAndroid Build Coastguard Worker }
174*635a8641SAndroid Build Coastguard Worker 
175*635a8641SAndroid Build Coastguard Worker #endif
176*635a8641SAndroid Build Coastguard Worker 
177*635a8641SAndroid Build Coastguard Worker }  // namespace base
178