| // Copyright (c) 2010 The Chromium 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 "base/win/registry.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace base { |
| namespace win { |
| |
| namespace { |
| |
| const wchar_t kRootKey[] = L"Base_Registry_Unittest"; |
| |
| class RegistryTest : public testing::Test { |
| public: |
| RegistryTest() {} |
| |
| protected: |
| virtual void SetUp() { |
| // Create a temporary key. |
| RegKey key(HKEY_CURRENT_USER, L"", KEY_ALL_ACCESS); |
| key.DeleteKey(kRootKey); |
| ASSERT_NE(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, kRootKey, KEY_READ)); |
| ASSERT_EQ(ERROR_SUCCESS, key.Create(HKEY_CURRENT_USER, kRootKey, KEY_READ)); |
| } |
| |
| virtual void TearDown() { |
| // Clean up the temporary key. |
| RegKey key(HKEY_CURRENT_USER, L"", KEY_SET_VALUE); |
| ASSERT_EQ(ERROR_SUCCESS, key.DeleteKey(kRootKey)); |
| } |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(RegistryTest); |
| }; |
| |
| TEST_F(RegistryTest, ValueTest) { |
| RegKey key; |
| |
| std::wstring foo_key(kRootKey); |
| foo_key += L"\\Foo"; |
| ASSERT_EQ(ERROR_SUCCESS, key.Create(HKEY_CURRENT_USER, foo_key.c_str(), |
| KEY_READ)); |
| |
| { |
| ASSERT_EQ(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, foo_key.c_str(), |
| KEY_READ | KEY_SET_VALUE)); |
| ASSERT_TRUE(key.Valid()); |
| |
| const wchar_t* kStringValueName = L"StringValue"; |
| const wchar_t* kDWORDValueName = L"DWORDValue"; |
| const wchar_t* kInt64ValueName = L"Int64Value"; |
| const wchar_t* kStringData = L"string data"; |
| const DWORD kDWORDData = 0xdeadbabe; |
| const int64 kInt64Data = 0xdeadbabedeadbabeLL; |
| |
| // Test value creation |
| ASSERT_EQ(ERROR_SUCCESS, key.WriteValue(kStringValueName, kStringData)); |
| ASSERT_EQ(ERROR_SUCCESS, key.WriteValue(kDWORDValueName, kDWORDData)); |
| ASSERT_EQ(ERROR_SUCCESS, key.WriteValue(kInt64ValueName, &kInt64Data, |
| sizeof(kInt64Data), REG_QWORD)); |
| EXPECT_EQ(3U, key.ValueCount()); |
| EXPECT_TRUE(key.ValueExists(kStringValueName)); |
| EXPECT_TRUE(key.ValueExists(kDWORDValueName)); |
| EXPECT_TRUE(key.ValueExists(kInt64ValueName)); |
| |
| // Test Read |
| std::wstring string_value; |
| DWORD dword_value = 0; |
| int64 int64_value = 0; |
| ASSERT_EQ(ERROR_SUCCESS, key.ReadValue(kStringValueName, &string_value)); |
| ASSERT_EQ(ERROR_SUCCESS, key.ReadValueDW(kDWORDValueName, &dword_value)); |
| ASSERT_EQ(ERROR_SUCCESS, key.ReadInt64(kInt64ValueName, &int64_value)); |
| EXPECT_STREQ(kStringData, string_value.c_str()); |
| EXPECT_EQ(kDWORDData, dword_value); |
| EXPECT_EQ(kInt64Data, int64_value); |
| |
| // Make sure out args are not touched if ReadValue fails |
| const wchar_t* kNonExistent = L"NonExistent"; |
| ASSERT_NE(ERROR_SUCCESS, key.ReadValue(kNonExistent, &string_value)); |
| ASSERT_NE(ERROR_SUCCESS, key.ReadValueDW(kNonExistent, &dword_value)); |
| ASSERT_NE(ERROR_SUCCESS, key.ReadInt64(kNonExistent, &int64_value)); |
| EXPECT_STREQ(kStringData, string_value.c_str()); |
| EXPECT_EQ(kDWORDData, dword_value); |
| EXPECT_EQ(kInt64Data, int64_value); |
| |
| // Test delete |
| ASSERT_EQ(ERROR_SUCCESS, key.DeleteValue(kStringValueName)); |
| ASSERT_EQ(ERROR_SUCCESS, key.DeleteValue(kDWORDValueName)); |
| ASSERT_EQ(ERROR_SUCCESS, key.DeleteValue(kInt64ValueName)); |
| EXPECT_EQ(0U, key.ValueCount()); |
| EXPECT_FALSE(key.ValueExists(kStringValueName)); |
| EXPECT_FALSE(key.ValueExists(kDWORDValueName)); |
| EXPECT_FALSE(key.ValueExists(kInt64ValueName)); |
| } |
| } |
| |
| } // namespace |
| |
| } // namespace win |
| } // namespace base |