1// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/win/registry.h" 6#include "testing/gtest/include/gtest/gtest.h" 7 8namespace base { 9namespace win { 10 11namespace { 12 13const wchar_t kRootKey[] = L"Base_Registry_Unittest"; 14 15class RegistryTest : public testing::Test { 16 public: 17 RegistryTest() {} 18 19 protected: 20 virtual void SetUp() { 21 // Create a temporary key. 22 RegKey key(HKEY_CURRENT_USER, L"", KEY_ALL_ACCESS); 23 key.DeleteKey(kRootKey); 24 ASSERT_NE(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, kRootKey, KEY_READ)); 25 ASSERT_EQ(ERROR_SUCCESS, key.Create(HKEY_CURRENT_USER, kRootKey, KEY_READ)); 26 } 27 28 virtual void TearDown() { 29 // Clean up the temporary key. 30 RegKey key(HKEY_CURRENT_USER, L"", KEY_SET_VALUE); 31 ASSERT_EQ(ERROR_SUCCESS, key.DeleteKey(kRootKey)); 32 } 33 34 private: 35 DISALLOW_COPY_AND_ASSIGN(RegistryTest); 36}; 37 38TEST_F(RegistryTest, ValueTest) { 39 RegKey key; 40 41 std::wstring foo_key(kRootKey); 42 foo_key += L"\\Foo"; 43 ASSERT_EQ(ERROR_SUCCESS, key.Create(HKEY_CURRENT_USER, foo_key.c_str(), 44 KEY_READ)); 45 46 { 47 ASSERT_EQ(ERROR_SUCCESS, key.Open(HKEY_CURRENT_USER, foo_key.c_str(), 48 KEY_READ | KEY_SET_VALUE)); 49 ASSERT_TRUE(key.Valid()); 50 51 const wchar_t* kStringValueName = L"StringValue"; 52 const wchar_t* kDWORDValueName = L"DWORDValue"; 53 const wchar_t* kInt64ValueName = L"Int64Value"; 54 const wchar_t* kStringData = L"string data"; 55 const DWORD kDWORDData = 0xdeadbabe; 56 const int64 kInt64Data = 0xdeadbabedeadbabeLL; 57 58 // Test value creation 59 ASSERT_EQ(ERROR_SUCCESS, key.WriteValue(kStringValueName, kStringData)); 60 ASSERT_EQ(ERROR_SUCCESS, key.WriteValue(kDWORDValueName, kDWORDData)); 61 ASSERT_EQ(ERROR_SUCCESS, key.WriteValue(kInt64ValueName, &kInt64Data, 62 sizeof(kInt64Data), REG_QWORD)); 63 EXPECT_EQ(3U, key.ValueCount()); 64 EXPECT_TRUE(key.ValueExists(kStringValueName)); 65 EXPECT_TRUE(key.ValueExists(kDWORDValueName)); 66 EXPECT_TRUE(key.ValueExists(kInt64ValueName)); 67 68 // Test Read 69 std::wstring string_value; 70 DWORD dword_value = 0; 71 int64 int64_value = 0; 72 ASSERT_EQ(ERROR_SUCCESS, key.ReadValue(kStringValueName, &string_value)); 73 ASSERT_EQ(ERROR_SUCCESS, key.ReadValueDW(kDWORDValueName, &dword_value)); 74 ASSERT_EQ(ERROR_SUCCESS, key.ReadInt64(kInt64ValueName, &int64_value)); 75 EXPECT_STREQ(kStringData, string_value.c_str()); 76 EXPECT_EQ(kDWORDData, dword_value); 77 EXPECT_EQ(kInt64Data, int64_value); 78 79 // Make sure out args are not touched if ReadValue fails 80 const wchar_t* kNonExistent = L"NonExistent"; 81 ASSERT_NE(ERROR_SUCCESS, key.ReadValue(kNonExistent, &string_value)); 82 ASSERT_NE(ERROR_SUCCESS, key.ReadValueDW(kNonExistent, &dword_value)); 83 ASSERT_NE(ERROR_SUCCESS, key.ReadInt64(kNonExistent, &int64_value)); 84 EXPECT_STREQ(kStringData, string_value.c_str()); 85 EXPECT_EQ(kDWORDData, dword_value); 86 EXPECT_EQ(kInt64Data, int64_value); 87 88 // Test delete 89 ASSERT_EQ(ERROR_SUCCESS, key.DeleteValue(kStringValueName)); 90 ASSERT_EQ(ERROR_SUCCESS, key.DeleteValue(kDWORDValueName)); 91 ASSERT_EQ(ERROR_SUCCESS, key.DeleteValue(kInt64ValueName)); 92 EXPECT_EQ(0U, key.ValueCount()); 93 EXPECT_FALSE(key.ValueExists(kStringValueName)); 94 EXPECT_FALSE(key.ValueExists(kDWORDValueName)); 95 EXPECT_FALSE(key.ValueExists(kInt64ValueName)); 96 } 97} 98 99} // namespace 100 101} // namespace win 102} // namespace base 103