mirror of
https://github.com/reactos/reactos.git
synced 2025-05-30 06:28:34 +00:00
[VERSION_WINETEST] Sync with Wine Staging 2.2. CORE-12823
svn path=/trunk/; revision=74205
This commit is contained in:
parent
651bfe32bc
commit
f7de731248
1 changed files with 101 additions and 0 deletions
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2004 Stefan Leichter
|
* Copyright (C) 2004 Stefan Leichter
|
||||||
|
* Copyright (C) 2017 Akihiro Sagawa
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -23,7 +24,9 @@
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
|
#include "winnls.h"
|
||||||
#include "winver.h"
|
#include "winver.h"
|
||||||
|
#include "verrsrc.h"
|
||||||
#include "wine/test.h"
|
#include "wine/test.h"
|
||||||
|
|
||||||
#define MY_LAST_ERROR ((DWORD)-1)
|
#define MY_LAST_ERROR ((DWORD)-1)
|
||||||
|
@ -750,6 +753,103 @@ static void test_extra_block(void)
|
||||||
HeapFree(GetProcessHeap(), 0, ver);
|
HeapFree(GetProcessHeap(), 0, ver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_GetFileVersionInfoEx(void)
|
||||||
|
{
|
||||||
|
char *ver, *p;
|
||||||
|
BOOL ret;
|
||||||
|
UINT size, translation, i;
|
||||||
|
HMODULE mod;
|
||||||
|
BOOL (WINAPI *pGetFileVersionInfoExW)(DWORD, LPCWSTR, DWORD, DWORD, LPVOID);
|
||||||
|
DWORD (WINAPI *pGetFileVersionInfoSizeExW)(DWORD, LPCWSTR, LPDWORD);
|
||||||
|
const LANGID lang = GetUserDefaultUILanguage();
|
||||||
|
const LANGID english = MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT);
|
||||||
|
const WORD unicode = 1200; /* = UNICODE */
|
||||||
|
const WCHAR kernel32W[] = {'k','e','r','n','e','l','3','2','.','d','l','l',0};
|
||||||
|
const DWORD test_flags[] = {
|
||||||
|
0, FILE_VER_GET_LOCALISED, FILE_VER_GET_NEUTRAL,
|
||||||
|
FILE_VER_GET_LOCALISED | FILE_VER_GET_NEUTRAL,
|
||||||
|
0xdeadbeef, /* invalid value (ignored) */
|
||||||
|
};
|
||||||
|
char desc[MAX_PATH];
|
||||||
|
|
||||||
|
size = GetFileVersionInfoSizeW(kernel32W, NULL);
|
||||||
|
ok(size, "GetFileVersionInfoSize(kernel32) error %u\n", GetLastError());
|
||||||
|
|
||||||
|
ver = HeapAlloc(GetProcessHeap(), 0, size);
|
||||||
|
assert(ver);
|
||||||
|
|
||||||
|
ret = GetFileVersionInfoW(kernel32W, 0, size, ver);
|
||||||
|
ok(ret, "GetFileVersionInfo error %u\n", GetLastError());
|
||||||
|
|
||||||
|
ret = VerQueryValueA(ver, "\\VarFileInfo\\Translation", (void **)&p, &size);
|
||||||
|
translation = *(UINT *)p;
|
||||||
|
ok(ret, "VerQueryValue error %u\n", GetLastError());
|
||||||
|
ok(size == 4, "VerQueryValue returned %u, expected 4\n", size);
|
||||||
|
|
||||||
|
/* test default version resource */
|
||||||
|
todo_wine_if(lang != english)
|
||||||
|
ok(LOWORD(translation) == lang, "got %u, expected lang is %u\n",
|
||||||
|
LOWORD(translation), lang);
|
||||||
|
todo_wine
|
||||||
|
ok(HIWORD(translation) == unicode, "got %u, expected codepage is %u\n",
|
||||||
|
HIWORD(translation), unicode);
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(), 0, ver);
|
||||||
|
|
||||||
|
mod = GetModuleHandleA("version.dll");
|
||||||
|
assert(mod);
|
||||||
|
|
||||||
|
/* prefer W-version as A-version is not available on Windows 7 */
|
||||||
|
pGetFileVersionInfoExW = (void *)GetProcAddress(mod, "GetFileVersionInfoExW");
|
||||||
|
pGetFileVersionInfoSizeExW = (void *)GetProcAddress(mod, "GetFileVersionInfoSizeExW");
|
||||||
|
if (!pGetFileVersionInfoExW && !pGetFileVersionInfoSizeExW)
|
||||||
|
{
|
||||||
|
win_skip("GetFileVersionInfoEx family is not available\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof(test_flags)/sizeof(test_flags[0]); i++)
|
||||||
|
{
|
||||||
|
size = pGetFileVersionInfoSizeExW(test_flags[i], kernel32W, NULL);
|
||||||
|
ok(size, "[%u] GetFileVersionInfoSizeEx(kernel32) error %u\n", i, GetLastError());
|
||||||
|
|
||||||
|
ver = HeapAlloc(GetProcessHeap(), 0, size);
|
||||||
|
assert(ver);
|
||||||
|
|
||||||
|
ret = pGetFileVersionInfoExW(test_flags[i], kernel32W, 0, size, ver);
|
||||||
|
ok(ret, "[%u] GetFileVersionInfoEx error %u\n", i, GetLastError());
|
||||||
|
|
||||||
|
ret = VerQueryValueA(ver, "\\VarFileInfo\\Translation", (void **)&p, &size);
|
||||||
|
ok(ret, "[%u] VerQueryValue error %u\n", i, GetLastError());
|
||||||
|
ok(size == 4, "[%u] VerQueryValue returned %u, expected 4\n", i, size);
|
||||||
|
translation = *(UINT *)p;
|
||||||
|
|
||||||
|
/* test MUI version resource */
|
||||||
|
todo_wine_if((test_flags[i] & FILE_VER_GET_LOCALISED) && lang != english)
|
||||||
|
if (test_flags[i] & FILE_VER_GET_LOCALISED)
|
||||||
|
ok(LOWORD(translation) == lang, "[%u] got %u, expected lang is %u\n",
|
||||||
|
i, LOWORD(translation), lang);
|
||||||
|
else
|
||||||
|
ok(LOWORD(translation) == english, "[%u] got %u, expected lang is %u\n",
|
||||||
|
i, LOWORD(translation), english);
|
||||||
|
todo_wine
|
||||||
|
ok(HIWORD(translation) == unicode, "[%u] got %u, expected codepage is %u\n",
|
||||||
|
i, HIWORD(translation), unicode);
|
||||||
|
|
||||||
|
/* test string info using translation info */
|
||||||
|
size = 0;
|
||||||
|
sprintf(desc, "\\StringFileInfo\\%04x%04x\\FileDescription",
|
||||||
|
LOWORD(translation), HIWORD(translation));
|
||||||
|
ret = VerQueryValueA(ver, desc, (void **)&p, &size);
|
||||||
|
ok(ret, "[%u] VerQueryValue error %u\n", i, GetLastError());
|
||||||
|
ok(size == strlen(p) + 1, "[%u] VerQueryValue returned %u\n", i, size);
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(), 0, ver);
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(info)
|
START_TEST(info)
|
||||||
{
|
{
|
||||||
test_info_size();
|
test_info_size();
|
||||||
|
@ -758,4 +858,5 @@ START_TEST(info)
|
||||||
test_VerQueryValueA();
|
test_VerQueryValueA();
|
||||||
test_VerQueryValue_InvalidLength();
|
test_VerQueryValue_InvalidLength();
|
||||||
test_extra_block();
|
test_extra_block();
|
||||||
|
test_GetFileVersionInfoEx();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue