147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/*
247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Copyright 2003 The WebRTC Project Authors. All rights reserved.
347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *
447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Use of this source code is governed by a BSD-style license
547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  that can be found in the LICENSE file in the root of the source
647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  tree. An additional intellectual property rights grant can be found
747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  in the file PATENTS.  All contributing project authors may
847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */
1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// Unittest for registry access API
1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/gunit.h"
1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/common.h"
1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/win32regkey.h"
1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc {
1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef EXPECT_SUCCEEDED
2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define EXPECT_SUCCEEDED(x)  EXPECT_TRUE(SUCCEEDED(x))
2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef EXPECT_FAILED
2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define EXPECT_FAILED(x)  EXPECT_TRUE(FAILED(x))
2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define kBaseKey           L"Software\\Google\\__TEST"
2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define kSubkeyName        L"subkey_test"
2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kRkey1[] = kBaseKey;
3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kRkey1SubkeyName[] = kSubkeyName;
3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kRkey1Subkey[] = kBaseKey L"\\" kSubkeyName;
3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kFullRkey1[] = L"HKCU\\" kBaseKey;
3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kFullRkey1Subkey[] = L"HKCU\\" kBaseKey L"\\" kSubkeyName;
3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kValNameInt[] = L"Int32 Value";
3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst DWORD kIntVal = 20;
3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst DWORD kIntVal2 = 30;
3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kValNameInt64[] = L"Int64 Value";
4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst DWORD64 kIntVal64 = 119600064000000000uI64;
4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kValNameFloat[] = L"Float Value";
4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst float kFloatVal = 12.3456789f;
4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kValNameDouble[] = L"Double Value";
4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst double kDoubleVal = 98.7654321;
4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kValNameStr[] = L"Str Value";
5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kStrVal[] = L"Some string data 1";
5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kStrVal2[] = L"Some string data 2";
5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kValNameBinary[] = L"Binary Value";
5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst char kBinaryVal[] = "Some binary data abcdefghi 1";
5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst char kBinaryVal2[] = "Some binary data abcdefghi 2";
5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kValNameMultiStr[] = L"MultiStr Value";
5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kMultiSZ[] = L"abc\0def\0P12345\0";
5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kEmptyMultiSZ[] = L"";
6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst wchar_t kInvalidMultiSZ[] = {L'6', L'7', L'8'};
6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// friend function of RegKey
6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgvoid RegKeyHelperFunctionsTest() {
6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Try out some dud values
6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  std::wstring temp_key = L"";
6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(RegKey::GetRootKeyInfo(&temp_key) == NULL);
6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"");
6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"a";
7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(RegKey::GetRootKeyInfo(&temp_key) == NULL);
7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"");
7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // The basics
7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"HKLM\\a";
7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_LOCAL_MACHINE);
7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"a");
7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"HKEY_LOCAL_MACHINE\\a";
7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_LOCAL_MACHINE);
8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"a");
8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"HKCU\\a";
8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CURRENT_USER);
8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"a");
8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"HKEY_CURRENT_USER\\a";
8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CURRENT_USER);
8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"a");
8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"HKU\\a";
9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_USERS);
9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"a");
9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"HKEY_USERS\\a";
9547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_USERS);
9647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"a");
9747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
9847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"HKCR\\a";
9947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CLASSES_ROOT);
10047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"a");
10147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
10247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"HKEY_CLASSES_ROOT\\a";
10347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CLASSES_ROOT);
10447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"a");
10547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
10647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Make sure it is case insensitive
10747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"hkcr\\a";
10847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CLASSES_ROOT);
10947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"a");
11047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
11147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"hkey_CLASSES_ROOT\\a";
11247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetRootKeyInfo(&temp_key), HKEY_CLASSES_ROOT);
11347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"a");
11447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
11547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  //
11647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Test RegKey::GetParentKeyInfo
11747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  //
11847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
11947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // dud cases
12047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"";
12147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(RegKey::GetParentKeyInfo(&temp_key).c_str(), L"");
12247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"");
12347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
12447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"a";
12547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(RegKey::GetParentKeyInfo(&temp_key).c_str(), L"");
12647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"a");
12747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
12847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"a\\b";
12947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(RegKey::GetParentKeyInfo(&temp_key).c_str(), L"a");
13047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"b");
13147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
13247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"\\b";
13347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(RegKey::GetParentKeyInfo(&temp_key).c_str(), L"");
13447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"b");
13547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
13647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Some regular cases
13747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"HKEY_CLASSES_ROOT\\moon";
13847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(RegKey::GetParentKeyInfo(&temp_key).c_str(),
13947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org               L"HKEY_CLASSES_ROOT");
14047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"moon");
14147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
14247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  temp_key = L"HKEY_CLASSES_ROOT\\moon\\doggy";
14347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(RegKey::GetParentKeyInfo(&temp_key).c_str(),
14447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org               L"HKEY_CLASSES_ROOT\\moon");
14547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(temp_key.c_str(), L"doggy");
14647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
14747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  //
14847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Test MultiSZBytesToStringArray
14947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  //
15047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
15147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  std::vector<std::wstring> result;
15247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::MultiSZBytesToStringArray(
15347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      reinterpret_cast<const uint8*>(kMultiSZ), sizeof(kMultiSZ), &result));
15447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(result.size(), 3);
15547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(result[0].c_str(), L"abc");
15647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(result[1].c_str(), L"def");
15747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(result[2].c_str(), L"P12345");
15847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
15947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::MultiSZBytesToStringArray(
16047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      reinterpret_cast<const uint8*>(kEmptyMultiSZ),
16147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      sizeof(kEmptyMultiSZ), &result));
16247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(result.size(), 0);
16347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(SUCCEEDED(RegKey::MultiSZBytesToStringArray(
16447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      reinterpret_cast<const uint8*>(kInvalidMultiSZ),
16547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      sizeof(kInvalidMultiSZ), &result)));
16647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
16747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
16847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(RegKeyTest, RegKeyHelperFunctionsTest) {
16947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  RegKeyHelperFunctionsTest();
17047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
17147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
17247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(RegKeyTest, RegKeyNonStaticFunctionsTest) {
17347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  DWORD int_val = 0;
17447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  DWORD64 int64_val = 0;
17547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  wchar_t* str_val = NULL;
17647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  uint8* binary_val = NULL;
17747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  DWORD uint8_count = 0;
17847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
17947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Just in case...
18047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // make sure the no test key residue is left from previous aborted runs
18147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  RegKey::DeleteKey(kFullRkey1);
18247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
18347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // initial state
18447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  RegKey r_key;
18547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(r_key.key() == NULL);
18647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
18747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // create a reg key
18847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.Create(HKEY_CURRENT_USER, kRkey1));
18947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
19047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // do the create twice - it should return the already created one
19147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.Create(HKEY_CURRENT_USER, kRkey1));
19247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
19347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // now do an open - should work just fine
19447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.Open(HKEY_CURRENT_USER, kRkey1));
19547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
19647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // get an in-existent value
19747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(r_key.GetValue(kValNameInt, &int_val),
19847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org            HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND));
19947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
20047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set and get some values
20147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
20247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set an INT 32
20347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.SetValue(kValNameInt, kIntVal));
20447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
20547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
20647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(r_key.HasValue(kValNameInt));
20747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
20847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
20947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetValue(kValNameInt, &int_val));
21047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(int_val, kIntVal);
21147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
21247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set it again!
21347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.SetValue(kValNameInt, kIntVal2));
21447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
21547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it again
21647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetValue(kValNameInt, &int_val));
21747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(int_val, kIntVal2);
21847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
21947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
22047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.DeleteValue(kValNameInt));
22147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
22247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
22347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(r_key.HasValue(kValNameInt));
22447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
22547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set an INT 64
22647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.SetValue(kValNameInt64, kIntVal64));
22747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
22847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
22947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(r_key.HasValue(kValNameInt64));
23047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
23147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
23247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetValue(kValNameInt64, &int64_val));
23347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(int64_val, kIntVal64);
23447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
23547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
23647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.DeleteValue(kValNameInt64));
23747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
23847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
23947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(r_key.HasValue(kValNameInt64));
24047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
24147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set a string
24247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.SetValue(kValNameStr, kStrVal));
24347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
24447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
24547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(r_key.HasValue(kValNameStr));
24647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
24747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
24847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetValue(kValNameStr, &str_val));
24947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(lstrcmp(str_val, kStrVal) == 0);
25047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  delete[] str_val;
25147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
25247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set it again
25347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.SetValue(kValNameStr, kStrVal2));
25447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
25547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it again
25647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetValue(kValNameStr, &str_val));
25747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(lstrcmp(str_val, kStrVal2) == 0);
25847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  delete[] str_val;
25947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
26047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
26147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.DeleteValue(kValNameStr));
26247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
26347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
26447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(r_key.HasValue(kValNameInt));
26547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
26647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set a binary value
26747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.SetValue(kValNameBinary,
26847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      reinterpret_cast<const uint8*>(kBinaryVal), sizeof(kBinaryVal) - 1));
26947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
27047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
27147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(r_key.HasValue(kValNameBinary));
27247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
27347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
27447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetValue(kValNameBinary, &binary_val, &uint8_count));
27547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(memcmp(binary_val, kBinaryVal, sizeof(kBinaryVal) - 1) == 0);
27647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  delete[] binary_val;
27747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
27847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set it again
27947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.SetValue(kValNameBinary,
28047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      reinterpret_cast<const uint8*>(kBinaryVal2), sizeof(kBinaryVal) - 1));
28147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
28247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it again
28347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetValue(kValNameBinary, &binary_val, &uint8_count));
28447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(memcmp(binary_val, kBinaryVal2, sizeof(kBinaryVal2) - 1) == 0);
28547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  delete[] binary_val;
28647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
28747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
28847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.DeleteValue(kValNameBinary));
28947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
29047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
29147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(r_key.HasValue(kValNameBinary));
29247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
29347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set some values and check the total count
29447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
29547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set an INT 32
29647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.SetValue(kValNameInt, kIntVal));
29747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
29847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set an INT 64
29947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.SetValue(kValNameInt64, kIntVal64));
30047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
30147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set a string
30247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.SetValue(kValNameStr, kStrVal));
30347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
30447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set a binary value
30547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.SetValue(kValNameBinary,
30647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      reinterpret_cast<const uint8*>(kBinaryVal), sizeof(kBinaryVal) - 1));
30747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
30847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // get the value count
30947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  uint32 value_count = r_key.GetValueCount();
31047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(value_count, 4);
31147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
31247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check the value names
31347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  std::wstring value_name;
31447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  DWORD type = 0;
31547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
31647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetValueNameAt(0, &value_name, &type));
31747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(value_name.c_str(), kValNameInt);
31847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(type, REG_DWORD);
31947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
32047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetValueNameAt(1, &value_name, &type));
32147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(value_name.c_str(), kValNameInt64);
32247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(type, REG_QWORD);
32347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
32447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetValueNameAt(2, &value_name, &type));
32547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(value_name.c_str(), kValNameStr);
32647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(type, REG_SZ);
32747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
32847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetValueNameAt(3, &value_name, &type));
32947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(value_name.c_str(), kValNameBinary);
33047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(type, REG_BINARY);
33147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
33247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that there are no more values
33347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FAILED(r_key.GetValueNameAt(4, &value_name, &type));
33447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
33547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  uint32 subkey_count = r_key.GetSubkeyCount();
33647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(subkey_count, 0);
33747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
33847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // now create a subkey and make sure we can get the name
33947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  RegKey temp_key;
34047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(temp_key.Create(HKEY_CURRENT_USER, kRkey1Subkey));
34147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
34247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check the subkey exists
34347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(r_key.HasSubkey(kRkey1SubkeyName));
34447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
34547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check the name
34647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(r_key.GetSubkeyCount(), 1);
34747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
34847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  std::wstring subkey_name;
34947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.GetSubkeyNameAt(0, &subkey_name));
35047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(subkey_name.c_str(), kRkey1SubkeyName);
35147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
35247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the key
35347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.DeleteSubKey(kRkey1));
35447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
35547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // close this key
35647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(r_key.Close());
35747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
35847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // whack the whole key
35947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteKey(kFullRkey1));
36047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
36147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
36247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(RegKeyTest, RegKeyStaticFunctionsTest) {
36347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  DWORD int_val = 0;
36447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  DWORD64 int64_val = 0;
36547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  float float_val = 0;
36647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  double double_val = 0;
36747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  wchar_t* str_val = NULL;
36847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  std::wstring wstr_val;
36947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  uint8* binary_val = NULL;
37047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  DWORD uint8_count = 0;
37147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
37247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Just in case...
37347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // make sure the no test key residue is left from previous aborted runs
37447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  RegKey::DeleteKey(kFullRkey1);
37547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
37647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // get an in-existent value from an un-existent key
37747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetValue(kFullRkey1, kValNameInt, &int_val),
37847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org            HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND));
37947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
38047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set int32
38147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValue(kFullRkey1, kValNameInt, kIntVal));
38247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
38347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
38447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(RegKey::HasValue(kFullRkey1, kValNameInt));
38547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
38647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // get an in-existent value from an existent key
38747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetValue(kFullRkey1, L"bogus", &int_val),
38847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org            HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND));
38947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
39047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
39147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameInt, &int_val));
39247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(int_val, kIntVal);
39347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
39447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
39547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteValue(kFullRkey1, kValNameInt));
39647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
39747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
39847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(RegKey::HasValue(kFullRkey1, kValNameInt));
39947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
40047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set int64
40147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValue(kFullRkey1, kValNameInt64, kIntVal64));
40247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
40347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
40447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(RegKey::HasValue(kFullRkey1, kValNameInt64));
40547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
40647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
40747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameInt64, &int64_val));
40847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(int64_val, kIntVal64);
40947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
41047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
41147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteValue(kFullRkey1, kValNameInt64));
41247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
41347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
41447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(RegKey::HasValue(kFullRkey1, kValNameInt64));
41547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
41647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set float
41747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValue(kFullRkey1, kValNameFloat, kFloatVal));
41847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
41947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
42047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(RegKey::HasValue(kFullRkey1, kValNameFloat));
42147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
42247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
42347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameFloat, &float_val));
42447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(float_val, kFloatVal);
42547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
42647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
42747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteValue(kFullRkey1, kValNameFloat));
42847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
42947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
43047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(RegKey::HasValue(kFullRkey1, kValNameFloat));
43147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FAILED(RegKey::GetValue(kFullRkey1, kValNameFloat, &float_val));
43247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
43347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set double
43447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValue(kFullRkey1, kValNameDouble, kDoubleVal));
43547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
43647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
43747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(RegKey::HasValue(kFullRkey1, kValNameDouble));
43847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
43947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
44047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameDouble, &double_val));
44147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(double_val, kDoubleVal);
44247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
44347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
44447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteValue(kFullRkey1, kValNameDouble));
44547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
44647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
44747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(RegKey::HasValue(kFullRkey1, kValNameDouble));
44847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FAILED(RegKey::GetValue(kFullRkey1, kValNameDouble, &double_val));
44947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
45047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set string
45147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValue(kFullRkey1, kValNameStr, kStrVal));
45247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
45347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
45447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(RegKey::HasValue(kFullRkey1, kValNameStr));
45547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
45647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
45747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameStr, &str_val));
45847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(lstrcmp(str_val, kStrVal) == 0);
45947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  delete[] str_val;
46047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
46147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back in std::wstring
46247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameStr, &wstr_val));
46347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(wstr_val.c_str(), kStrVal);
46447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
46547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // get an in-existent value from an existent key
46647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(RegKey::GetValue(kFullRkey1, L"bogus", &str_val),
46747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org            HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND));
46847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
46947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
47047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteValue(kFullRkey1, kValNameStr));
47147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
47247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
47347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(RegKey::HasValue(kFullRkey1, kValNameStr));
47447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
47547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // set binary
47647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValue(kFullRkey1, kValNameBinary,
47747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      reinterpret_cast<const uint8*>(kBinaryVal), sizeof(kBinaryVal)-1));
47847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
47947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
48047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(RegKey::HasValue(kFullRkey1, kValNameBinary));
48147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
48247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
48347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameBinary,
48447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      &binary_val, &uint8_count));
48547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(memcmp(binary_val, kBinaryVal, sizeof(kBinaryVal)-1) == 0);
48647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  delete[] binary_val;
48747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
48847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
48947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteValue(kFullRkey1, kValNameBinary));
49047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
49147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
49247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(RegKey::HasValue(kFullRkey1, kValNameBinary));
49347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
49447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // special case - set a binary value with length 0
49547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValue(kFullRkey1, kValNameBinary,
49647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      reinterpret_cast<const uint8*>(kBinaryVal), 0));
49747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
49847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
49947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(RegKey::HasValue(kFullRkey1, kValNameBinary));
50047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
50147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
50247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameBinary,
50347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      &binary_val, &uint8_count));
50447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(uint8_count, 0);
50547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(binary_val == NULL);
50647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  delete[] binary_val;
50747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
50847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
50947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteValue(kFullRkey1, kValNameBinary));
51047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
51147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
51247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(RegKey::HasValue(kFullRkey1, kValNameBinary));
51347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
51447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // special case - set a NULL binary value
51547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValue(kFullRkey1, kValNameBinary, NULL, 100));
51647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
51747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value exists
51847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(RegKey::HasValue(kFullRkey1, kValNameBinary));
51947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
52047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // read it back
52147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameBinary,
52247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org                                    &binary_val, &uint8_count));
52347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(uint8_count, 0);
52447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_TRUE(binary_val == NULL);
52547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  delete[] binary_val;
52647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
52747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the value
52847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteValue(kFullRkey1, kValNameBinary));
52947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
53047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // check that the value is gone
53147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_FALSE(RegKey::HasValue(kFullRkey1, kValNameBinary));
53247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
53347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // test read/write REG_MULTI_SZ value
53447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  std::vector<std::wstring> result;
53547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValueMultiSZ(kFullRkey1, kValNameMultiStr,
53647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      reinterpret_cast<const uint8*>(kMultiSZ), sizeof(kMultiSZ)));
53747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameMultiStr, &result));
53847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(result.size(), 3);
53947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(result[0].c_str(), L"abc");
54047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(result[1].c_str(), L"def");
54147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(result[2].c_str(), L"P12345");
54247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValueMultiSZ(kFullRkey1, kValNameMultiStr,
54347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      reinterpret_cast<const uint8*>(kEmptyMultiSZ), sizeof(kEmptyMultiSZ)));
54447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameMultiStr, &result));
54547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(result.size(), 0);
54647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // writing REG_MULTI_SZ value will automatically add ending null characters
54747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValueMultiSZ(kFullRkey1, kValNameMultiStr,
54847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org      reinterpret_cast<const uint8*>(kInvalidMultiSZ), sizeof(kInvalidMultiSZ)));
54947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1, kValNameMultiStr, &result));
55047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(result.size(), 1);
55147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_STREQ(result[0].c_str(), L"678");
55247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
55347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Run the following test only in dev machine
55447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // This is because the build machine might not have admin privilege
55547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifdef IS_PRIVATE_BUILD
55647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // get a temp file name
55747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  wchar_t temp_path[MAX_PATH] = {0};
55847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_LT(::GetTempPath(ARRAY_SIZE(temp_path), temp_path),
55947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org            static_cast<DWORD>(ARRAY_SIZE(temp_path)));
56047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  wchar_t temp_file[MAX_PATH] = {0};
56147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_NE(::GetTempFileName(temp_path, L"rkut_",
56247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org                              ::GetTickCount(), temp_file), 0);
56347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
56447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // test save
56547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValue(kFullRkey1Subkey, kValNameInt, kIntVal));
56647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::SetValue(kFullRkey1Subkey, kValNameInt64, kIntVal64));
56747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::Save(kFullRkey1Subkey, temp_file));
56847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteValue(kFullRkey1Subkey, kValNameInt));
56947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteValue(kFullRkey1Subkey, kValNameInt64));
57047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
57147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // test restore
57247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::Restore(kFullRkey1Subkey, temp_file));
57347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  int_val = 0;
57447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1Subkey, kValNameInt, &int_val));
57547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(int_val, kIntVal);
57647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  int64_val = 0;
57747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::GetValue(kFullRkey1Subkey,
57847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org                                    kValNameInt64,
57947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org                                    &int64_val));
58047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(int64_val, kIntVal64);
58147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
58247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // delete the temp file
58347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_EQ(TRUE, ::DeleteFile(temp_file));
58447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
58547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
58647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // whack the whole key
58747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  EXPECT_SUCCEEDED(RegKey::DeleteKey(kFullRkey1));
58847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
58947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
59047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}  // namespace rtc
591