ReactOS 0.4.15-dev-8235-gcd88a97
CRegKey.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS api tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for CRegKey
5 * PROGRAMMERS: Mark Jansen
6 * Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
7 */
8
9#include <apitest.h>
10#include <atlbase.h>
11
12START_TEST(CRegKey)
13{
14 CRegKey key;
15 CRegKey key2(HKEY_CURRENT_USER);
16
17 ok(key.m_hKey == NULL, "Expected m_hKey to be initialized to 0, was: %p\n", key.m_hKey);
18 ok(key2.m_hKey == HKEY_CURRENT_USER, "Expected m_hKey to be initialized to HKEY_CURRENT_USER, was: %p\n", key2.m_hKey);
19 ok(key2 == HKEY_CURRENT_USER, "Expected operator HKEY() to be implemented\n");
20
21 // Take ownership
22 CRegKey key3(key2);
23 ok(key3.m_hKey == HKEY_CURRENT_USER, "Expected m_hKey to be initialized to HKEY_CURRENT_USER, was: %p\n", key3.m_hKey);
24 ok(key2.m_hKey == NULL, "Expected m_hKey to be initialized to 0, was: %p\n", key2.m_hKey);
25
26 LSTATUS lret;
27
28 lret = key.Close();
29 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
30 lret = key2.Close();
31 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
32 lret = key3.Close();
33 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
34
35 // read/write
36 lret = key.Open(HKEY_CURRENT_USER, _T("Environment"));
37 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
38 ok(key.m_hKey != NULL, "Expected m_hKey to not be NULL, was: %p\n", key.m_hKey);
39
40
41 HKEY tmp = key.m_hKey;
42 HKEY detached = key.Detach();
43 ok(key.m_hKey == NULL, "Expected m_hKey to be 0, was: %p\n", key.m_hKey);
44 ok(detached == tmp, "Expected detached to be %p, was: %p\n", tmp, detached);
45 key.Attach(detached);
46 ok(key.m_hKey == tmp, "Expected m_hKey to be %p, was: %p\n", tmp, key.m_hKey);
47
48 lret = key2.Open(HKEY_CURRENT_USER, _T("Environment"), KEY_READ);
49 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
50
51 lret = key3.Open(HKEY_CURRENT_USER, _T("Environment"), KEY_WRITE);
52 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
53
54 TCHAR testdata[] = _T("XX-XX");
55 lret = key.SetValue(_T("APITEST_VALUE_NAME"), REG_SZ, testdata, sizeof(testdata));
56 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
57
58 TCHAR buffer[100];
59 ULONG buffer_size = sizeof(buffer);
60 DWORD type = 0x12345;
61 memset(buffer, 0, sizeof(buffer));
62
63 lret = key.QueryValue(_T("APITEST_VALUE_NAME"), &type, buffer, &buffer_size);
64 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
65 ok(type == REG_SZ, "Expected type to be REG_SZ, was: %lu\n", type);
66 ok(buffer_size == sizeof(testdata), "Expected buffer_size to be %u, was: %lu\n", sizeof(testdata), buffer_size);
67 ok(!memcmp(buffer, testdata, sizeof(testdata)), "Expected to get the same input as what was written!\n");
68
69
70 buffer_size = sizeof(buffer);
71 type = 0x12345;
72 memset(buffer, 0, sizeof(buffer));
73 lret = key2.QueryValue(_T("APITEST_VALUE_NAME"), &type, buffer, &buffer_size);
74 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
75 ok(type == REG_SZ, "Expected type to be REG_SZ, was: %lu\n", type);
76 ok(buffer_size == sizeof(testdata), "Expected buffer_size to be %u, was: %lu\n", sizeof(testdata), buffer_size);
77 ok(!memcmp(buffer, testdata, sizeof(testdata)), "Expected to get the same input as what was written!\n");
78
79 buffer_size = sizeof(buffer);
80 type = 0x12345;
81 memset(buffer, 0, sizeof(buffer));
82 lret = key3.QueryValue(_T("APITEST_VALUE_NAME"), &type, buffer, &buffer_size);
83 ok(lret == ERROR_ACCESS_DENIED, "Expected lret to be ERROR_ACCESS_DENIED, was: %lu\n", lret);
84 ok(type == 0 || broken(type > 200), "Expected type to be 0, was: %lu\n", type);
85 ok(buffer_size == sizeof(buffer), "Expected buffer_size to be %u, was: %lu\n", sizeof(buffer), buffer_size);
86
87
88 lret = key2.SetValue(_T("APITEST_VALUE_NAME"), REG_SZ, testdata, sizeof(testdata));
89 ok(lret == ERROR_ACCESS_DENIED, "Expected lret to be ERROR_ACCESS_DENIED, was: %lu\n", lret);
90
91 lret = key2.DeleteValue(_T("APITEST_VALUE_NAME"));
92 ok(lret == ERROR_ACCESS_DENIED, "Expected lret to be ERROR_ACCESS_DENIED, was: %lu\n", lret);
93
94 DWORD dword = 0x54321;
95 lret = key2.QueryDWORDValue(_T("APITEST_VALUE_NAME"), dword);
96 ok(lret == ERROR_MORE_DATA, "Expected lret to be ERROR_MORE_DATA, was: %lu\n", lret);
97 ok(dword == 0x54321, "Expected dword to be 0x54321, was: %lu\n", dword);
98
99 lret = key.SetValue(_T("APITEST_VALUE_NAME"), REG_SZ, testdata, sizeof(TCHAR));
100 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_ACCESS_DENIED, was: %lu\n", lret);
101
102 dword = 0x54321;
103 lret = key2.QueryDWORDValue(_T("APITEST_VALUE_NAME"), dword);
104 ok(lret == ERROR_INVALID_DATA, "Expected lret to be ERROR_MORE_DATA, was: %lu\n", lret);
105 ok(dword != 0x54321, "Expected dword to NOT be 0x54321, was: %lu\n", dword);
106
107 lret = key3.SetDWORDValue(_T("APITEST_VALUE_NAME"), 0x12345);
108 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
109
110 dword = 0x54321;
111 lret = key2.QueryDWORDValue(_T("APITEST_VALUE_NAME"), dword);
112 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
113 ok(dword == 0x12345, "Expected dword to be 0x12345, was: %lu\n", dword);
114
115
116 lret = key3.DeleteValue(_T("APITEST_VALUE_NAME"));
117 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
118
119
120 lret = key.SetKeyValue(_T("APITEST_KEY_NAME"), _T("APITEST_VALUE"));
121 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
122
123 CRegKey qv;
124
125 // COUNTOF, not SIZEOF!!!!
126 lret = qv.Open(HKEY_CURRENT_USER, _T("Environment\\APITEST_KEY_NAME"));
128 memset(buffer, 0, sizeof(buffer));
129 lret = qv.QueryStringValue(NULL, buffer, &buffer_size);
130 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
131 ok(buffer_size == _countof("APITEST_VALUE"), "Expected buffer_size to be %u, was: %lu\n", _countof("APITEST_VALUE"), buffer_size);
132 ok(!_tcscmp(buffer, _T("APITEST_VALUE")), "Expected to get the same input as what was written!\n");
133
134 lret = key.SetKeyValue(_T("APITEST_KEY_NAME"), _T("APITEST_VALUE2"), _T("APITEST_VALUE_NAME"));
135 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
136
138 memset(buffer, 0, sizeof(buffer));
139 lret = qv.QueryStringValue(_T("APITEST_VALUE_NAME"), buffer, &buffer_size);
140 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
141 ok(buffer_size == _countof("APITEST_VALUE2"), "Expected buffer_size to be %u, was: %lu\n", _countof("APITEST_VALUE2"), buffer_size);
142 ok(!_tcscmp(buffer, _T("APITEST_VALUE2")), "Expected to get the same input as what was written!\n");
143
144 lret = key.DeleteSubKey(_T("APITEST_KEY_NAME"));
145 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
146
147 GUID guid, guid2;
148 memset(&guid, 56, sizeof(guid));
149
150 lret = key.SetGUIDValue(_T("GUID_NAME"), guid);
151 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
152
153 lret = key.QueryGUIDValue(_T("GUID_NAME"), guid2);
154 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
155 ok(!memcmp(&guid, &guid2, sizeof(guid)), "Expected guid to equal guid2\n");
156
158 memset(buffer, 0, sizeof(buffer));
159 lret = key2.QueryStringValue(_T("GUID_NAME"), buffer, &buffer_size);
160 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
161 ok(buffer_size == _countof("{38383838-3838-3838-3838-383838383838}"),
162 "Expected buffer_size to be %u, was: %lu\n", _countof("{38383838-3838-3838-3838-383838383838}"), buffer_size);
163 ok(!_tcscmp(buffer, _T("{38383838-3838-3838-3838-383838383838}")), "Expected to get the same input as what was written!\n");
164
165 memset(&guid, 33, 5);
166 lret = key.SetBinaryValue(_T("BIN_NAME"), &guid, 5);
167 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
168
169 buffer_size = sizeof(buffer);
170 memset(buffer, 0, sizeof(buffer));
171 lret = key.QueryBinaryValue(_T("GUID_NAME"), buffer, &buffer_size);
172 ok(lret == ERROR_INVALID_DATA, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
173 ok(buffer_size == sizeof(_T("{38383838-3838-3838-3838-383838383838}")),
174 "Expected buffer_size to be %u, was: %lu\n", sizeof(_T("{38383838-3838-3838-3838-383838383838}")), buffer_size);
175 ok(buffer[0] == '{', "Expected buffer[0] to be 123, was: %i\n", (int)buffer[0]);
176
177 buffer_size = sizeof(buffer);
178 memset(buffer, 0, sizeof(buffer));
179 lret = key.QueryBinaryValue(_T("BIN_NAME"), buffer, &buffer_size);
180 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
181 ok(buffer_size == 5, "Expected buffer_size to be %i, was: %lu\n", 5, buffer_size);
182 ok(!memcmp(buffer, &guid, 5), "Expected the first 5 bytes of buffer to equal the data in null_guid\n");
183
184 lret = key.DeleteValue(_T("GUID_NAME"));
185 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
186
187 lret = key.DeleteValue(_T("BIN_NAME"));
188 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
189
190 {
191 CRegKey test1;
192 lret = test1.Create(HKEY_CURRENT_USER, _T("TEST1"));
193 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
194
195 CRegKey test2;
196 lret = test2.Create(test1, _T("TEST2"));
197 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
198
199 CRegKey test3;
200 lret = test3.Create(test2, _T("TEST3"));
201 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
202 }
203 {
204 CRegKey key(HKEY_CURRENT_USER);
205 lret = key.RecurseDeleteKey(_T("TEST1"));
206 ok(lret == ERROR_SUCCESS, "Expected lret to be ERROR_SUCCESS, was: %lu\n", lret);
207 }
208}
#define broken(x)
Definition: _sntprintf.h:21
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define ok(value,...)
Definition: atltest.h:57
#define START_TEST(x)
Definition: atltest.h:75
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define ERROR_SUCCESS
Definition: deptool.c:10
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
#define NULL
Definition: types.h:112
#define ERROR_ACCESS_DENIED
Definition: compat.h:97
void test2()
Definition: ehthrow.cxx:284
void test1()
Definition: ehthrow.cxx:277
void test3()
Definition: ehthrow.cxx:291
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint buffer
Definition: glext.h:5915
#define _tcscmp
Definition: tchar.h:1424
#define REG_SZ
Definition: layer.c:22
const GUID * guid
static GUID guid2
Definition: devinst.c:42
#define KEY_READ
Definition: nt_native.h:1023
#define KEY_WRITE
Definition: nt_native.h:1031
#define memset(x, y, z)
Definition: compat.h:39
#define _countof(array)
Definition: sndvol32.h:70
Definition: copy.c:22
static void buffer_size(GLcontext *ctx, GLuint *width, GLuint *height)
Definition: swimpl.c:888
uint32_t ULONG
Definition: typedefs.h:59
#define _T(x)
Definition: vfdio.h:22
#define ERROR_INVALID_DATA
Definition: winerror.h:116
#define HKEY_CURRENT_USER
Definition: winreg.h:11
char TCHAR
Definition: xmlstorage.h:189