• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
8 namespace base {
9 namespace win {
10 
11 namespace {
12 
13 const wchar_t kRootKey[] = L"Base_Registry_Unittest";
14 
15 class RegistryTest : public testing::Test {
16  public:
RegistryTest()17   RegistryTest() {}
18 
19  protected:
SetUp()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 
TearDown()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 
TEST_F(RegistryTest,ValueTest)38 TEST_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