advapi32/tests: Fix some Perflib subkey tests.

Some languages don't have a subkey (e.g. German), and for others the
subkey is the full language id rather than the primary language id (e.g.
Portuguese).
Furthermore there should be a CurrentLanguage key with localized values.

Signed-off-by: Francois Gouget <fgouget@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Francois Gouget 2021-09-01 08:52:19 +02:00 committed by Alexandre Julliard
parent f8bc5d7627
commit ab6edd0932

View file

@ -3929,10 +3929,11 @@ static void test_perflib_key(void)
HKEY perflib_key, key, key2;
OBJECT_ATTRIBUTES attr;
UNICODE_STRING string;
char lang_name[4];
char lang_name[5];
const char *knames[2] = {"009", "CurrentLanguage"};
char *buffer;
DWORD size;
LONG ret;
LONG ret, l;
ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows NT\\CurrentVersion\\Perflib", 0, KEY_READ, &perflib_key);
@ -4027,21 +4028,70 @@ static void test_perflib_key(void)
else
ok(!ret, "got %#x\n", ret);
/* multilingual support was not really completely thought through */
sprintf(lang_name, "%03x", primary_lang);
if (primary_lang != LANG_ENGLISH)
for (l = 0; l < ARRAY_SIZE(knames); l++)
{
winetest_push_context("%d", l);
todo_wine_if(l == 1) {
ret = RegOpenKeyExA(perflib_key, knames[l], 0, KEY_READ, &key);
ok(!ret, "got %u\n", ret);
if (is_special_key(key))
{
size = buffer_size;
ret = RegQueryValueExA(key, "counter", NULL, NULL, (BYTE *)buffer, &size);
ok(!ret, "got %u\n", ret);
if (!ret)
{
char *str;
int c = 0;
for (str = buffer; *str; str += strlen(str) + 1)
c++;
/* Note that the two keys may not have the same number of
* entries if they are in different languages.
*/
ok(c >= 2 && (c % 2) == 0, "%d is not a valid number of entries in %s\n", c, knames[l]);
trace("%s has %d entries\n", knames[l], c);
}
}
else
{
/* Windows 7 does not always return a special key for 009
* when running without elevated privileges.
*/
ok(broken(l == 0), "expected a special handle, got %p\n", key);
}
ret = RegCloseKey(key);
ok(!ret, "got %u\n", ret);
}
winetest_pop_context();
}
/* multilingual support was not really completely thought through */
switch (primary_lang)
{
case LANG_PORTUGUESE:
case LANG_CHINESE:
sprintf(lang_name, "%04x", GetUserDefaultLangID());
break;
default:
sprintf(lang_name, "%03x", primary_lang);
break;
}
if (primary_lang != LANG_ENGLISH &&
!RegOpenKeyExA(perflib_key, lang_name, 0, KEY_READ, &key))
{
ret = RegOpenKeyExA(perflib_key, lang_name, 0, KEY_READ, &key);
todo_wine ok(!ret, "got %u\n", ret);
ok(!is_special_key(key), "expected a normal handle, got %p\n", key);
size = buffer_size;
ret = RegQueryValueExA(key, "counter", NULL, NULL, (BYTE *)buffer, &size);
todo_wine ok(ret == ERROR_FILE_NOT_FOUND, "got %u\n", ret);
ret = RegCloseKey(key);
todo_wine ok(!ret, "got %u\n", ret);
}
/* else some languages don't have their own key. The keys are not really
* usable anyway so assume it does not really matter.
*/
ret = RegCloseKey(perflib_key);
ok(!ret, "got %u\n", ret);