1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include "base/environment.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include <memory>
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
10*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
11*6777b538SAndroid Build Coastguard Worker #include "testing/platform_test.h"
12*6777b538SAndroid Build Coastguard Worker
13*6777b538SAndroid Build Coastguard Worker typedef PlatformTest EnvironmentTest;
14*6777b538SAndroid Build Coastguard Worker
15*6777b538SAndroid Build Coastguard Worker namespace base {
16*6777b538SAndroid Build Coastguard Worker
17*6777b538SAndroid Build Coastguard Worker namespace {
18*6777b538SAndroid Build Coastguard Worker
19*6777b538SAndroid Build Coastguard Worker // PATH env variable is not set on Fuchsia by default, while PWD is not set on
20*6777b538SAndroid Build Coastguard Worker // Windows.
21*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_FUCHSIA)
22*6777b538SAndroid Build Coastguard Worker constexpr char kValidEnvironmentVariable[] = "PWD";
23*6777b538SAndroid Build Coastguard Worker #else
24*6777b538SAndroid Build Coastguard Worker constexpr char kValidEnvironmentVariable[] = "PATH";
25*6777b538SAndroid Build Coastguard Worker #endif
26*6777b538SAndroid Build Coastguard Worker
27*6777b538SAndroid Build Coastguard Worker } // namespace
28*6777b538SAndroid Build Coastguard Worker
TEST_F(EnvironmentTest,GetVar)29*6777b538SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, GetVar) {
30*6777b538SAndroid Build Coastguard Worker std::unique_ptr<Environment> env(Environment::Create());
31*6777b538SAndroid Build Coastguard Worker std::string env_value;
32*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->GetVar(kValidEnvironmentVariable, &env_value));
33*6777b538SAndroid Build Coastguard Worker EXPECT_NE(env_value, "");
34*6777b538SAndroid Build Coastguard Worker }
35*6777b538SAndroid Build Coastguard Worker
TEST_F(EnvironmentTest,GetVarReverse)36*6777b538SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, GetVarReverse) {
37*6777b538SAndroid Build Coastguard Worker std::unique_ptr<Environment> env(Environment::Create());
38*6777b538SAndroid Build Coastguard Worker const char kFooUpper[] = "FOO";
39*6777b538SAndroid Build Coastguard Worker const char kFooLower[] = "foo";
40*6777b538SAndroid Build Coastguard Worker
41*6777b538SAndroid Build Coastguard Worker // Set a variable in UPPER case.
42*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
43*6777b538SAndroid Build Coastguard Worker
44*6777b538SAndroid Build Coastguard Worker // And then try to get this variable passing the lower case.
45*6777b538SAndroid Build Coastguard Worker std::string env_value;
46*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->GetVar(kFooLower, &env_value));
47*6777b538SAndroid Build Coastguard Worker
48*6777b538SAndroid Build Coastguard Worker EXPECT_STREQ(env_value.c_str(), kFooLower);
49*6777b538SAndroid Build Coastguard Worker
50*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->UnSetVar(kFooUpper));
51*6777b538SAndroid Build Coastguard Worker
52*6777b538SAndroid Build Coastguard Worker const char kBar[] = "bar";
53*6777b538SAndroid Build Coastguard Worker // Now do the opposite, set the variable in the lower case.
54*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->SetVar(kFooLower, kBar));
55*6777b538SAndroid Build Coastguard Worker
56*6777b538SAndroid Build Coastguard Worker // And then try to get this variable passing the UPPER case.
57*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->GetVar(kFooUpper, &env_value));
58*6777b538SAndroid Build Coastguard Worker
59*6777b538SAndroid Build Coastguard Worker EXPECT_STREQ(env_value.c_str(), kBar);
60*6777b538SAndroid Build Coastguard Worker
61*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->UnSetVar(kFooLower));
62*6777b538SAndroid Build Coastguard Worker }
63*6777b538SAndroid Build Coastguard Worker
TEST_F(EnvironmentTest,HasVar)64*6777b538SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, HasVar) {
65*6777b538SAndroid Build Coastguard Worker std::unique_ptr<Environment> env(Environment::Create());
66*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->HasVar(kValidEnvironmentVariable));
67*6777b538SAndroid Build Coastguard Worker }
68*6777b538SAndroid Build Coastguard Worker
TEST_F(EnvironmentTest,SetVar)69*6777b538SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, SetVar) {
70*6777b538SAndroid Build Coastguard Worker std::unique_ptr<Environment> env(Environment::Create());
71*6777b538SAndroid Build Coastguard Worker
72*6777b538SAndroid Build Coastguard Worker const char kFooUpper[] = "FOO";
73*6777b538SAndroid Build Coastguard Worker const char kFooLower[] = "foo";
74*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
75*6777b538SAndroid Build Coastguard Worker
76*6777b538SAndroid Build Coastguard Worker // Now verify that the environment has the new variable.
77*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->HasVar(kFooUpper));
78*6777b538SAndroid Build Coastguard Worker
79*6777b538SAndroid Build Coastguard Worker std::string var_value;
80*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->GetVar(kFooUpper, &var_value));
81*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(var_value, kFooLower);
82*6777b538SAndroid Build Coastguard Worker }
83*6777b538SAndroid Build Coastguard Worker
TEST_F(EnvironmentTest,UnSetVar)84*6777b538SAndroid Build Coastguard Worker TEST_F(EnvironmentTest, UnSetVar) {
85*6777b538SAndroid Build Coastguard Worker std::unique_ptr<Environment> env(Environment::Create());
86*6777b538SAndroid Build Coastguard Worker
87*6777b538SAndroid Build Coastguard Worker const char kFooUpper[] = "FOO";
88*6777b538SAndroid Build Coastguard Worker const char kFooLower[] = "foo";
89*6777b538SAndroid Build Coastguard Worker // First set some environment variable.
90*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->SetVar(kFooUpper, kFooLower));
91*6777b538SAndroid Build Coastguard Worker
92*6777b538SAndroid Build Coastguard Worker // Now verify that the environment has the new variable.
93*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->HasVar(kFooUpper));
94*6777b538SAndroid Build Coastguard Worker
95*6777b538SAndroid Build Coastguard Worker // Finally verify that the environment variable was erased.
96*6777b538SAndroid Build Coastguard Worker EXPECT_TRUE(env->UnSetVar(kFooUpper));
97*6777b538SAndroid Build Coastguard Worker
98*6777b538SAndroid Build Coastguard Worker // And check that the variable has been unset.
99*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(env->HasVar(kFooUpper));
100*6777b538SAndroid Build Coastguard Worker }
101*6777b538SAndroid Build Coastguard Worker
102*6777b538SAndroid Build Coastguard Worker } // namespace base
103