| // Copyright 2020 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <algorithm> |
| #include <cstring> |
| #include <string> |
| |
| #include <android-base/properties.h> |
| #include <gtest/gtest.h> |
| |
| // Tests the Chrome OS implementation of retrieving properties from environment |
| // variables. |
| TEST(PropertiesTest, PropertyFromEnvironment) { |
| // Add a single property to the environment |
| constexpr char kEnvName[] = "TEST_PROP_1"; |
| constexpr char kValue[] = "value"; |
| constexpr char kDefault[] = "default"; |
| |
| // Variable not set, default should be returned |
| std::string result = android::base::GetProperty(kEnvName, kDefault); |
| ASSERT_EQ(result, kDefault); |
| |
| // Environment variable set, value should be returned |
| ASSERT_EQ(setenv(kEnvName, kValue, 1), 0); |
| result = android::base::GetProperty(kEnvName, kDefault); |
| ASSERT_EQ(result, kValue); |
| |
| // Lower case should be converted to upper case |
| std::string env_name_lower = kEnvName; |
| std::transform(env_name_lower.begin(), env_name_lower.end(), |
| env_name_lower.begin(), ::tolower); |
| result = android::base::GetProperty(env_name_lower, kDefault); |
| ASSERT_EQ(result, kValue); |
| |
| // '.' should be replaced with '_' |
| std::string env_name_with_periods = kEnvName; |
| std::replace(env_name_with_periods.begin(), env_name_with_periods.end(), '_', |
| '.'); |
| result = android::base::GetProperty(env_name_with_periods, kDefault); |
| ASSERT_EQ(result, kValue); |
| |
| ASSERT_EQ(unsetenv(kEnvName), 0); |
| result = android::base::GetProperty(kEnvName, kDefault); |
| ASSERT_EQ(result, kDefault); |
| } |