advapi32/tests: Remove Win9x hacks.

This commit is contained in:
Austin English 2011-02-16 17:31:45 -08:00 committed by Alexandre Julliard
parent 33db33d474
commit b7c18d104b
1 changed files with 95 additions and 132 deletions

View File

@ -189,8 +189,7 @@ static void _test_hkey_main_Value_A(int line, LPCSTR name, LPCSTR string,
str_byte_len = (string ? lstrlenA(string) : 0) + 1;
lok(type == REG_SZ, "RegQueryValueExA/1 returned type %d\n", type);
lok(cbData == full_byte_len || cbData == str_byte_len /* Win9x */,
"cbData=%d instead of %d or %d\n", cbData, full_byte_len, str_byte_len);
lok(cbData == full_byte_len, "cbData=%d instead of %d or %d\n", cbData, full_byte_len, str_byte_len);
value = HeapAlloc(GetProcessHeap(), 0, cbData+1);
memset(value, 0xbd, cbData+1);
@ -201,8 +200,7 @@ static void _test_hkey_main_Value_A(int line, LPCSTR name, LPCSTR string,
if (!string)
{
/* When cbData == 0, RegQueryValueExA() should not modify the buffer */
lok(*value == 0xbd || (cbData == 1 && *value == '\0') /* Win9x */,
"RegQueryValueExA overflowed: cbData=%u *value=%02x\n", cbData, *value);
lok(*value == 0xbd, "RegQueryValueExA overflowed: cbData=%u *value=%02x\n", cbData, *value);
}
else
{
@ -303,19 +301,13 @@ static void test_set_value(void)
/* only REG_SZ is supported on NT*/
ret = RegSetValueA(hkey_main, NULL, REG_BINARY, string2A, sizeof(string2A));
/* NT: ERROR_INVALID_PARAMETER, 9x: ERROR_SUCCESS */
ok(ret == ERROR_INVALID_PARAMETER || broken(ret == ERROR_SUCCESS),
"got %d (expected ERROR_INVALID_PARAMETER or ERROR_SUCCESS)\n", ret);
ok(ret == ERROR_INVALID_PARAMETER, "got %d (expected ERROR_INVALID_PARAMETER)\n", ret);
ret = RegSetValueA(hkey_main, NULL, REG_EXPAND_SZ, string2A, sizeof(string2A));
/* NT: ERROR_INVALID_PARAMETER, 9x: ERROR_SUCCESS */
ok(ret == ERROR_INVALID_PARAMETER || broken(ret == ERROR_SUCCESS),
"got %d (expected ERROR_INVALID_PARAMETER or ERROR_SUCCESS)\n", ret);
ok(ret == ERROR_INVALID_PARAMETER, "got %d (expected ERROR_INVALID_PARAMETER)\n", ret);
ret = RegSetValueA(hkey_main, NULL, REG_MULTI_SZ, string2A, sizeof(string2A));
/* NT: ERROR_INVALID_PARAMETER, 9x: ERROR_SUCCESS */
ok(ret == ERROR_INVALID_PARAMETER || broken(ret == ERROR_SUCCESS),
"got %d (expected ERROR_INVALID_PARAMETER or ERROR_SUCCESS)\n", ret);
ok(ret == ERROR_INVALID_PARAMETER, "got %d (expected ERROR_INVALID_PARAMETER)\n", ret);
/* Test RegSetValueExA with a 'zero-byte' string (as Office 2003 does).
* Surprisingly enough we're supposed to get zero bytes out of it.
@ -349,9 +341,6 @@ static void test_set_value(void)
test_hkey_main_Value_A(name2A, string2A, sizeof(string2A));
test_hkey_main_Value_W(name2W, string2W, sizeof(string2W));
/* 9x doesn't support W-calls, so don't test them then */
if(GLE == ERROR_CALL_NOT_IMPLEMENTED) return;
if (0)
{
/* Crashes on NT4, Windows 2000 and XP SP1 */
@ -477,8 +466,7 @@ static void test_enum_value(void)
strcpy( data, "xxxxxxxxxx" );
res = RegEnumValueA( test_key, 0, value, &val_count, NULL, &type, (LPBYTE)data, &data_count );
ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %d\n", res );
/* Win9x returns 2 as specified by MSDN but NT returns 3... */
ok( val_count == 2 || val_count == 3, "val_count set to %d\n", val_count );
ok( val_count == 3, "val_count set to %d\n", val_count );
ok( data_count == 7 || broken( data_count == 8 ), "data_count set to %d instead of 7\n", data_count );
ok( type == REG_SZ, "type %d is not REG_SZ\n", type );
/* v5.1.2600.0 (XP Home and Professional) does not touch value or data in this case */
@ -619,20 +607,7 @@ static void test_query_value_ex(void)
size = 0xdeadbeef;
ret = RegQueryValueExA(HKEY_CLASSES_ROOT, "Nonexistent Value", NULL, &type, NULL, &size);
ok(ret == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %d\n", ret);
/* the type parameter is cleared on Win9x, but is set to a random value on
* NT, so don't do that test there. The size parameter is left untouched on Win9x
* but cleared on NT+, this can be tested on all platforms.
*/
if (GetVersion() & 0x80000000)
{
ok(type == 0, "type should have been set to 0 instead of 0x%x\n", type);
ok(size == 0xdeadbeef, "size should have been left untouched (0xdeadbeef)\n");
}
else
{
trace("test_query_value_ex: type set to: 0x%08x\n", type);
ok(size == 0, "size should have been set to 0 instead of %d\n", size);
}
ok(size == 0, "size should have been set to 0 instead of %d\n", size);
size = sizeof(buffer);
ret = RegQueryValueExA(HKEY_CLASSES_ROOT, "Nonexistent Value", NULL, &type, buffer, &size);
@ -867,53 +842,48 @@ static void test_reg_open_key(void)
ok(hkResult != NULL, "expected hkResult != NULL\n");
hkPreserve = hkResult;
/* these tests fail on Win9x, but we want to be compatible with NT, so
* run them if we can */
if (!(GetVersion() & 0x80000000))
{
/* open same key twice */
ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Test", &hkResult);
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
ok(hkResult != hkPreserve, "epxected hkResult != hkPreserve\n");
ok(hkResult != NULL, "hkResult != NULL\n");
RegCloseKey(hkResult);
/* open nonexistent key
* check that hkResult is set to NULL
*/
hkResult = hkPreserve;
ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Nonexistent", &hkResult);
ok(ret == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %d\n", ret);
ok(hkResult == NULL, "expected hkResult == NULL\n");
/* open the same nonexistent key again to make sure the key wasn't created */
hkResult = hkPreserve;
ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Nonexistent", &hkResult);
ok(ret == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %d\n", ret);
ok(hkResult == NULL, "expected hkResult == NULL\n");
/* send in NULL lpSubKey
* check that hkResult receives the value of hKey
*/
hkResult = hkPreserve;
ret = RegOpenKeyA(HKEY_CURRENT_USER, NULL, &hkResult);
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
ok(hkResult == HKEY_CURRENT_USER, "expected hkResult == HKEY_CURRENT_USER\n");
/* send empty-string in lpSubKey */
hkResult = hkPreserve;
ret = RegOpenKeyA(HKEY_CURRENT_USER, "", &hkResult);
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
ok(hkResult == HKEY_CURRENT_USER, "expected hkResult == HKEY_CURRENT_USER\n");
/* send in NULL lpSubKey and NULL hKey
* hkResult is set to NULL
*/
hkResult = hkPreserve;
ret = RegOpenKeyA(NULL, NULL, &hkResult);
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
ok(hkResult == NULL, "expected hkResult == NULL\n");
}
/* open same key twice */
ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Test", &hkResult);
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
ok(hkResult != hkPreserve, "epxected hkResult != hkPreserve\n");
ok(hkResult != NULL, "hkResult != NULL\n");
RegCloseKey(hkResult);
/* open nonexistent key
* check that hkResult is set to NULL
*/
hkResult = hkPreserve;
ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Nonexistent", &hkResult);
ok(ret == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %d\n", ret);
ok(hkResult == NULL, "expected hkResult == NULL\n");
/* open the same nonexistent key again to make sure the key wasn't created */
hkResult = hkPreserve;
ret = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\Nonexistent", &hkResult);
ok(ret == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %d\n", ret);
ok(hkResult == NULL, "expected hkResult == NULL\n");
/* send in NULL lpSubKey
* check that hkResult receives the value of hKey
*/
hkResult = hkPreserve;
ret = RegOpenKeyA(HKEY_CURRENT_USER, NULL, &hkResult);
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
ok(hkResult == HKEY_CURRENT_USER, "expected hkResult == HKEY_CURRENT_USER\n");
/* send empty-string in lpSubKey */
hkResult = hkPreserve;
ret = RegOpenKeyA(HKEY_CURRENT_USER, "", &hkResult);
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
ok(hkResult == HKEY_CURRENT_USER, "expected hkResult == HKEY_CURRENT_USER\n");
/* send in NULL lpSubKey and NULL hKey
* hkResult is set to NULL
*/
hkResult = hkPreserve;
ret = RegOpenKeyA(NULL, NULL, &hkResult);
ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret);
ok(hkResult == NULL, "expected hkResult == NULL\n");
/* only send NULL hKey
* the value of hkResult remains unchanged
@ -938,7 +908,6 @@ static void test_reg_open_key(void)
/* beginning backslash character */
ret = RegOpenKeyA(HKEY_CURRENT_USER, "\\Software\\Wine\\Test", &hkResult);
ok(ret == ERROR_BAD_PATHNAME || /* NT/2k/XP */
ret == ERROR_FILE_NOT_FOUND || /* Win9x,ME */
broken(ret == ERROR_SUCCESS), /* wow64 */
"expected ERROR_BAD_PATHNAME or ERROR_FILE_NOT_FOUND, got %d\n", ret);
if (!ret) RegCloseKey(hkResult);
@ -946,9 +915,8 @@ static void test_reg_open_key(void)
hkResult = NULL;
ret = RegOpenKeyExA(HKEY_CLASSES_ROOT, "\\clsid", 0, KEY_QUERY_VALUE, &hkResult);
ok(ret == ERROR_SUCCESS || /* 2k/XP */
ret == ERROR_BAD_PATHNAME || /* NT */
ret == ERROR_FILE_NOT_FOUND /* Win9x,ME */
, "expected ERROR_SUCCESS, ERROR_BAD_PATHNAME or ERROR_FILE_NOT_FOUND, got %d\n", ret);
ret == ERROR_BAD_PATHNAME, /* NT */
"expected ERROR_SUCCESS, ERROR_BAD_PATHNAME or ERROR_FILE_NOT_FOUND, got %d\n", ret);
RegCloseKey(hkResult);
/* WOW64 flags */
@ -1072,8 +1040,7 @@ static void test_reg_create_key(void)
ret = RegCreateKeyExA(hkey_main, "Volatile", 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey1, NULL);
ok(!ret, "RegCreateKeyExA failed with error %d\n", ret);
ret = RegCreateKeyExA(hkey1, "Subkey2", 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hkey2, NULL);
ok(ret == ERROR_CHILD_MUST_BE_VOLATILE || broken(!ret), /* win9x */
"RegCreateKeyExA failed with error %d\n", ret);
ok(ret == ERROR_CHILD_MUST_BE_VOLATILE, "RegCreateKeyExA failed with error %d\n", ret);
if (!ret) RegCloseKey( hkey2 );
ret = RegCreateKeyExA(hkey1, "Subkey2", 0, NULL, REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey2, NULL);
ok(!ret, "RegCreateKeyExA failed with error %d\n", ret);
@ -1510,62 +1477,58 @@ static void test_string_termination(void)
ret = RegQueryValueExA(subkey, "stringtest", NULL, NULL, buffer, &outsize);
ok(ret == ERROR_MORE_DATA, "RegQueryValueExA returned: %d\n", ret);
/* Off-by-two RegSetValueExA -> no trailing '\0', except on Win9x */
/* Off-by-two RegSetValueExA -> no trailing '\0' */
insize=sizeof(string)-2;
ret = RegSetValueExA(subkey, "stringtest", 0, REG_SZ, (BYTE*)string, insize);
ok(ret == ERROR_SUCCESS, "RegSetValueExA failed: %d\n", ret);
outsize=0;
ret = RegQueryValueExA(subkey, "stringtest", NULL, NULL, NULL, &outsize);
ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", ret);
ok(outsize == insize || broken(outsize == sizeof(string)) /* Win9x */,
"wrong size %u != %u\n", outsize, insize);
ok(outsize == insize, "wrong size %u != %u\n", outsize, insize);
if (outsize == insize)
{
/* RegQueryValueExA may return a string with no trailing '\0' */
outsize=insize;
memset(buffer, 0xbd, sizeof(buffer));
ret = RegQueryValueExA(subkey, "stringtest", NULL, NULL, buffer, &outsize);
ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", ret);
ok(outsize == insize, "wrong size: %u != %u\n", outsize, insize);
ok(memcmp(buffer, string, outsize) == 0, "bad string: %s/%u != %s\n",
wine_debugstr_an((char*)buffer, outsize), outsize, string);
ok(buffer[insize] == 0xbd, "buffer overflow at %u %02x\n", insize, buffer[insize]);
/* RegQueryValueExA may return a string with no trailing '\0' */
outsize=insize;
memset(buffer, 0xbd, sizeof(buffer));
ret = RegQueryValueExA(subkey, "stringtest", NULL, NULL, buffer, &outsize);
ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", ret);
ok(outsize == insize, "wrong size: %u != %u\n", outsize, insize);
ok(memcmp(buffer, string, outsize) == 0, "bad string: %s/%u != %s\n",
wine_debugstr_an((char*)buffer, outsize), outsize, string);
ok(buffer[insize] == 0xbd, "buffer overflow at %u %02x\n", insize, buffer[insize]);
/* RegQueryValueExA adds a trailing '\0' if there is room */
outsize=insize+1;
memset(buffer, 0xbd, sizeof(buffer));
ret = RegQueryValueExA(subkey, "stringtest", NULL, NULL, buffer, &outsize);
ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", ret);
ok(outsize == insize, "wrong size: %u != %u\n", outsize, insize);
ok(memcmp(buffer, string, outsize) == 0, "bad string: %s/%u != %s\n",
wine_debugstr_an((char*)buffer, outsize), outsize, string);
ok(buffer[insize] == 0, "buffer overflow at %u %02x\n", insize, buffer[insize]);
/* RegQueryValueExA adds a trailing '\0' if there is room */
outsize=insize+1;
memset(buffer, 0xbd, sizeof(buffer));
ret = RegQueryValueExA(subkey, "stringtest", NULL, NULL, buffer, &outsize);
ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", ret);
ok(outsize == insize, "wrong size: %u != %u\n", outsize, insize);
ok(memcmp(buffer, string, outsize) == 0, "bad string: %s/%u != %s\n",
wine_debugstr_an((char*)buffer, outsize), outsize, string);
ok(buffer[insize] == 0, "buffer overflow at %u %02x\n", insize, buffer[insize]);
/* RegEnumValueA may return a string with no trailing '\0' */
outsize=insize;
memset(buffer, 0xbd, sizeof(buffer));
nsize=sizeof(name);
ret = RegEnumValueA(subkey, 0, name, &nsize, NULL, NULL, buffer, &outsize);
ok(ret == ERROR_SUCCESS, "RegEnumValueA failed: %d\n", ret);
ok(strcmp(name, "stringtest") == 0, "wrong name: %s\n", name);
ok(outsize == insize, "wrong size: %u != %u\n", outsize, insize);
ok(memcmp(buffer, string, outsize) == 0, "bad string: %s/%u != %s\n",
wine_debugstr_an((char*)buffer, outsize), outsize, string);
ok(buffer[insize] == 0xbd, "buffer overflow at %u %02x\n", insize, buffer[insize]);
/* RegEnumValueA may return a string with no trailing '\0' */
outsize=insize;
memset(buffer, 0xbd, sizeof(buffer));
nsize=sizeof(name);
ret = RegEnumValueA(subkey, 0, name, &nsize, NULL, NULL, buffer, &outsize);
ok(ret == ERROR_SUCCESS, "RegEnumValueA failed: %d\n", ret);
ok(strcmp(name, "stringtest") == 0, "wrong name: %s\n", name);
ok(outsize == insize, "wrong size: %u != %u\n", outsize, insize);
ok(memcmp(buffer, string, outsize) == 0, "bad string: %s/%u != %s\n",
wine_debugstr_an((char*)buffer, outsize), outsize, string);
ok(buffer[insize] == 0xbd, "buffer overflow at %u %02x\n", insize, buffer[insize]);
/* RegEnumValueA adds a trailing '\0' if there is room */
outsize=insize+1;
memset(buffer, 0xbd, sizeof(buffer));
nsize=sizeof(name);
ret = RegEnumValueA(subkey, 0, name, &nsize, NULL, NULL, buffer, &outsize);
ok(ret == ERROR_SUCCESS, "RegEnumValueA failed: %d\n", ret);
ok(strcmp(name, "stringtest") == 0, "wrong name: %s\n", name);
ok(outsize == insize, "wrong size: %u != %u\n", outsize, insize);
ok(memcmp(buffer, string, outsize) == 0, "bad string: %s/%u != %s\n",
wine_debugstr_an((char*)buffer, outsize), outsize, string);
ok(buffer[insize] == 0, "buffer overflow at %u %02x\n", insize, buffer[insize]);
}
/* RegEnumValueA adds a trailing '\0' if there is room */
outsize=insize+1;
memset(buffer, 0xbd, sizeof(buffer));
nsize=sizeof(name);
ret = RegEnumValueA(subkey, 0, name, &nsize, NULL, NULL, buffer, &outsize);
ok(ret == ERROR_SUCCESS, "RegEnumValueA failed: %d\n", ret);
ok(strcmp(name, "stringtest") == 0, "wrong name: %s\n", name);
ok(outsize == insize, "wrong size: %u != %u\n", outsize, insize);
ok(memcmp(buffer, string, outsize) == 0, "bad string: %s/%u != %s\n",
wine_debugstr_an((char*)buffer, outsize), outsize, string);
ok(buffer[insize] == 0, "buffer overflow at %u %02x\n", insize, buffer[insize]);
RegDeleteKeyA(subkey, "");
RegCloseKey(subkey);
@ -2108,7 +2071,7 @@ static void test_classesroot(void)
res = RegOpenKeyExA( HKEY_CLASSES_ROOT, "WineTestCls", 0,
KEY_QUERY_VALUE|KEY_SET_VALUE, &hkcr );
todo_wine ok(res == ERROR_SUCCESS ||
broken(res == ERROR_FILE_NOT_FOUND /* Win9x */),
broken(res == ERROR_FILE_NOT_FOUND /* WinNT */),
"test key not found in hkcr: %d\n", res);
if (res)
{