diff --git a/rostests/winetests/advapi32/cred.c b/rostests/winetests/advapi32/cred.c
index 58103c63166..ad06fd5ffd7 100644
--- a/rostests/winetests/advapi32/cred.c
+++ b/rostests/winetests/advapi32/cred.c
@@ -238,7 +238,13 @@ static void test_generic(void)
new_cred.UserName = (char *)"winetest";
ret = pCredWriteA(&new_cred, 0);
- ok(ret, "CredWriteA failed with error %d\n", GetLastError());
+ ok(ret || broken(GetLastError() == ERROR_NO_SUCH_LOGON_SESSION),
+ "CredWriteA failed with error %d\n", GetLastError());
+ if (!ret)
+ {
+ skip("couldn't write generic credentials, skipping tests\n");
+ return;
+ }
ret = pCredEnumerateA(NULL, 0, &count, &creds);
ok(ret, "CredEnumerateA failed with error %d\n", GetLastError());
@@ -345,7 +351,7 @@ START_TEST(cred)
if (!pCredEnumerateA || !pCredFree || !pCredWriteA || !pCredDeleteA ||
!pCredReadA)
{
- skip("credentials functions not present in advapi32.dll\n");
+ win_skip("credentials functions not present in advapi32.dll\n");
return;
}
diff --git a/rostests/winetests/advapi32/crypt.c b/rostests/winetests/advapi32/crypt.c
index 41759d5b9b9..4ce89078f84 100644
--- a/rostests/winetests/advapi32/crypt.c
+++ b/rostests/winetests/advapi32/crypt.c
@@ -331,7 +331,7 @@ static void test_incorrect_api_usage(void)
GetLastError() == ERROR_CALL_NOT_IMPLEMENTED), "%d\n", GetLastError());
}
else
- skip("CryptSignHashW is not available\n");
+ win_skip("CryptSignHashW is not available\n");
result = pCryptSetKeyParam(hKey, 0, &temp, 1);
ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError());
@@ -349,7 +349,7 @@ static void test_incorrect_api_usage(void)
GetLastError() == ERROR_CALL_NOT_IMPLEMENTED), "%d\n", GetLastError());
}
else
- skip("CryptVerifySignatureW is not available\n");
+ win_skip("CryptVerifySignatureW is not available\n");
result = pCryptDestroyHash(hHash);
ok (!result && GetLastError() == ERROR_INVALID_PARAMETER, "%d\n", GetLastError());
@@ -394,7 +394,7 @@ static void test_verify_sig(void)
if (!pCryptVerifySignatureW)
{
- skip("CryptVerifySignatureW is not available\n");
+ win_skip("CryptVerifySignatureW is not available\n");
return;
}
@@ -402,7 +402,7 @@ static void test_verify_sig(void)
ret = pCryptVerifySignatureW(0, NULL, 0, 0, NULL, 0);
if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("CryptVerifySignatureW is not implemented\n");
+ win_skip("CryptVerifySignatureW is not implemented\n");
return;
}
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
@@ -497,13 +497,13 @@ static void test_enum_providers(void)
if(!pCryptEnumProvidersA)
{
- skip("CryptEnumProvidersA is not available\n");
+ win_skip("CryptEnumProvidersA is not available\n");
return;
}
if (!FindProvRegVals(dwIndex, &dwType, &pszProvName, &cbName, &provCount))
{
- skip("Could not find providers in registry\n");
+ win_skip("Could not find providers in registry\n");
return;
}
@@ -643,7 +643,7 @@ static void test_enum_provider_types(void)
if(!pCryptEnumProviderTypesA)
{
- skip("CryptEnumProviderTypesA is not available\n");
+ win_skip("CryptEnumProviderTypesA is not available\n");
return;
}
@@ -784,7 +784,7 @@ static void test_get_default_provider(void)
if(!pCryptGetDefaultProviderA)
{
- skip("CryptGetDefaultProviderA is not available\n");
+ win_skip("CryptGetDefaultProviderA is not available\n");
return;
}
@@ -858,7 +858,7 @@ static void test_set_provider_ex(void)
if(!pCryptGetDefaultProviderA || !pCryptSetProviderExA)
{
- skip("CryptGetDefaultProviderA and/or CryptSetProviderExA are not available\n");
+ win_skip("CryptGetDefaultProviderA and/or CryptSetProviderExA are not available\n");
return;
}
diff --git a/rostests/winetests/advapi32/crypt_lmhash.c b/rostests/winetests/advapi32/crypt_lmhash.c
index df1d3a73b6b..253090a970e 100644
--- a/rostests/winetests/advapi32/crypt_lmhash.c
+++ b/rostests/winetests/advapi32/crypt_lmhash.c
@@ -43,8 +43,8 @@ typedef VOID (WINAPI *fnSystemFunction006)( PCSTR passwd, PSTR lmhash );
typedef NTSTATUS (WINAPI *fnSystemFunction008)(const BYTE *, const BYTE *, LPBYTE);
typedef NTSTATUS (WINAPI *fnSystemFunction009)(const BYTE *, const BYTE *, LPBYTE);
typedef int (WINAPI *descrypt)(unsigned char *, unsigned char *, unsigned char *);
-typedef NTSTATUS (WINAPI *fnSystemFunction030)(void*, void*);
-typedef NTSTATUS (WINAPI *fnSystemFunction032)(struct ustring *, struct ustring *);
+typedef NTSTATUS (WINAPI *fnSystemFunction030)(const void*, const void*);
+typedef NTSTATUS (WINAPI *fnSystemFunction032)(struct ustring *, const struct ustring *);
fnSystemFunction001 pSystemFunction001;
fnSystemFunction002 pSystemFunction002;
@@ -413,7 +413,7 @@ static void test_SystemFunction_encrypt(descrypt func, int num)
if (!func)
{
- skip("SystemFunction%03d is not available\n", num);
+ win_skip("SystemFunction%03d is not available\n", num);
return;
}
@@ -434,7 +434,7 @@ static void test_SystemFunction_decrypt(descrypt func, int num)
if (!func)
{
- skip("SystemFunction%03d is not available\n", num);
+ win_skip("SystemFunction%03d is not available\n", num);
return;
}
@@ -460,7 +460,7 @@ static void test_SystemFunction_enc32(descrypt func, int num)
if (!func)
{
- skip("SystemFunction%03d is not available\n", num);
+ win_skip("SystemFunction%03d is not available\n", num);
return;
}
@@ -482,7 +482,7 @@ static void test_SystemFunction_dec32(descrypt func, int num)
if (!func)
{
- skip("SystemFunction%03d is not available\n", num);
+ win_skip("SystemFunction%03d is not available\n", num);
return;
}
@@ -504,7 +504,7 @@ static void test_memcmpfunc(memcmpfunc fn)
if (!fn)
{
- skip("function is not available\n");
+ win_skip("function is not available\n");
return;
}
@@ -549,49 +549,49 @@ START_TEST(crypt_lmhash)
if (pSystemFunction001)
test_SystemFunction001();
else
- skip("SystemFunction001 is not available\n");
+ win_skip("SystemFunction001 is not available\n");
pSystemFunction002 = (fnSystemFunction002)GetProcAddress( module, "SystemFunction002" );
if (pSystemFunction002)
test_SystemFunction002();
else
- skip("SystemFunction002 is not available\n");
+ win_skip("SystemFunction002 is not available\n");
pSystemFunction003 = (fnSystemFunction003)GetProcAddress( module, "SystemFunction003" );
if (pSystemFunction003)
test_SystemFunction003();
else
- skip("SystemFunction002 is not available\n");
+ win_skip("SystemFunction002 is not available\n");
pSystemFunction004 = (fnSystemFunction004)GetProcAddress( module, "SystemFunction004" );
if (pSystemFunction004)
test_SystemFunction004();
else
- skip("SystemFunction004 is not available\n");
+ win_skip("SystemFunction004 is not available\n");
pSystemFunction005 = (fnSystemFunction005)GetProcAddress( module, "SystemFunction005" );
if (pSystemFunction005)
test_SystemFunction005();
else
- skip("SystemFunction005 is not available\n");
+ win_skip("SystemFunction005 is not available\n");
pSystemFunction006 = (fnSystemFunction006)GetProcAddress( module, "SystemFunction006" );
if (pSystemFunction006)
test_SystemFunction006();
else
- skip("SystemFunction006 is not available\n");
+ win_skip("SystemFunction006 is not available\n");
pSystemFunction008 = (fnSystemFunction008)GetProcAddress( module, "SystemFunction008" );
if (pSystemFunction008)
test_SystemFunction008();
else
- skip("SystemFunction008 is not available\n");
+ win_skip("SystemFunction008 is not available\n");
pSystemFunction009 = (fnSystemFunction009)GetProcAddress( module, "SystemFunction009" );
if (pSystemFunction009)
test_SystemFunction009();
else
- skip("SystemFunction009 is not available\n");
+ win_skip("SystemFunction009 is not available\n");
pSystemFunction012 = (descrypt) GetProcAddress( module, "SystemFunction012");
pSystemFunction013 = (descrypt) GetProcAddress( module, "SystemFunction013");
@@ -645,5 +645,5 @@ START_TEST(crypt_lmhash)
if (pSystemFunction032)
test_SystemFunction032();
else
- skip("SystemFunction032 is not available\n");
+ win_skip("SystemFunction032 is not available\n");
}
diff --git a/rostests/winetests/advapi32/crypt_md4.c b/rostests/winetests/advapi32/crypt_md4.c
index 02e4c02b192..e866910d970 100644
--- a/rostests/winetests/advapi32/crypt_md4.c
+++ b/rostests/winetests/advapi32/crypt_md4.c
@@ -156,23 +156,23 @@ START_TEST(crypt_md4)
if (pMD4Init && pMD4Update && pMD4Final)
test_md4_ctx();
else
- skip("MD4Init and/or MD4Update and/or MD4Final are not available\n");
+ win_skip("MD4Init and/or MD4Update and/or MD4Final are not available\n");
pSystemFunction007 = (fnSystemFunction007)GetProcAddress( module, "SystemFunction007" );
if (pSystemFunction007)
test_SystemFunction007();
else
- skip("SystemFunction007 is not available\n");
+ win_skip("SystemFunction007 is not available\n");
pSystemFunction010 = (md4hashfunc)GetProcAddress( module, "SystemFunction010" );
if (pSystemFunction010)
test_md4hashfunc(pSystemFunction010);
else
- skip("SystemFunction010 is not available\n");
+ win_skip("SystemFunction010 is not available\n");
pSystemFunction011 = (md4hashfunc)GetProcAddress( module, "SystemFunction011" );
if (pSystemFunction011)
test_md4hashfunc(pSystemFunction011);
else
- skip("SystemFunction011 is not available\n");
+ win_skip("SystemFunction011 is not available\n");
}
diff --git a/rostests/winetests/advapi32/crypt_md5.c b/rostests/winetests/advapi32/crypt_md5.c
index 4c6346cba44..9136dfbc28c 100644
--- a/rostests/winetests/advapi32/crypt_md5.c
+++ b/rostests/winetests/advapi32/crypt_md5.c
@@ -85,7 +85,7 @@ static void test_md5_ctx(void)
if (!pMD5Init || !pMD5Update || !pMD5Final)
{
- skip("Needed functions are not available\n");
+ win_skip("Needed functions are not available\n");
return;
}
diff --git a/rostests/winetests/advapi32/crypt_sha.c b/rostests/winetests/advapi32/crypt_sha.c
index cfdaf991d41..025f2cdcd47 100644
--- a/rostests/winetests/advapi32/crypt_sha.c
+++ b/rostests/winetests/advapi32/crypt_sha.c
@@ -53,7 +53,7 @@ static void test_sha_ctx(void)
if (!pA_SHAInit || !pA_SHAUpdate || !pA_SHAFinal)
{
- skip("A_SHAInit and/or A_SHAUpdate and/or A_SHAFinal are not available\n");
+ win_skip("A_SHAInit and/or A_SHAUpdate and/or A_SHAFinal are not available\n");
return;
}
diff --git a/rostests/winetests/advapi32/lsa.c b/rostests/winetests/advapi32/lsa.c
index 90fbe1031b1..39c91d38123 100644
--- a/rostests/winetests/advapi32/lsa.c
+++ b/rostests/winetests/advapi32/lsa.c
@@ -182,7 +182,7 @@ static void test_lsa(void)
START_TEST(lsa)
{
if (!init()) {
- skip("Needed functions are not available\n");
+ win_skip("Needed functions are not available\n");
return;
}
diff --git a/rostests/winetests/advapi32/registry.c b/rostests/winetests/advapi32/registry.c
index b63b3e260dd..a3d9f300672 100644
--- a/rostests/winetests/advapi32/registry.c
+++ b/rostests/winetests/advapi32/registry.c
@@ -47,9 +47,9 @@ static DWORD (WINAPI *pRegDeleteTreeA)(HKEY,LPCSTR);
static char *get_temp_buffer( int size )
{
static char *list[32];
- static long pos;
+ static UINT pos;
char *ret;
- int idx;
+ UINT idx;
idx = ++pos % (sizeof(list)/sizeof(list[0]));
if ((ret = realloc( list[idx], size ))) list[idx] = ret;
diff --git a/rostests/winetests/advapi32/security.c b/rostests/winetests/advapi32/security.c
index 9fac210d48f..b68629d3916 100644
--- a/rostests/winetests/advapi32/security.c
+++ b/rostests/winetests/advapi32/security.c
@@ -857,7 +857,7 @@ static void test_AccessCheck(void)
GetProcAddress(NtDllModule, "RtlAdjustPrivilege");
if (!pRtlAdjustPrivilege)
{
- skip("missing RtlAdjustPrivilege, skipping test\n");
+ win_skip("missing RtlAdjustPrivilege, skipping test\n");
return;
}
@@ -1128,7 +1128,7 @@ static void test_AccessCheck(void)
ok(ret, "AddAccessAllowedAceEx failed with error %d\n", GetLastError());
}
else
- skip("AddAccessAllowedAceEx is not available\n");
+ win_skip("AddAccessAllowedAceEx is not available\n");
ret = AccessCheck(SecurityDescriptor, Token, KEY_READ, &Mapping,
PrivSet, &PrivSetLen, &Access, &AccessStatus);
@@ -1176,27 +1176,29 @@ static void test_AccessCheck(void)
static void test_token_attr(void)
{
HANDLE Token, ImpersonationToken;
- DWORD Size;
+ DWORD Size, Size2;
TOKEN_PRIVILEGES *Privileges;
TOKEN_GROUPS *Groups;
TOKEN_USER *User;
+ TOKEN_DEFAULT_DACL *Dacl;
BOOL ret;
DWORD i, GLE;
LPSTR SidString;
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ ACL *acl;
/* cygwin-like use case */
SetLastError(0xdeadbeef);
ret = OpenProcessToken(GetCurrentProcess(), MAXIMUM_ALLOWED, &Token);
if(!ret && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED))
{
- skip("OpenProcessToken is not implemented\n");
+ win_skip("OpenProcessToken is not implemented\n");
return;
}
ok(ret, "OpenProcessToken failed with error %d\n", GetLastError());
if (ret)
{
- BYTE buf[1024];
+ DWORD buf[256]; /* GetTokenInformation wants a dword-aligned buffer */
Size = sizeof(buf);
ret = GetTokenInformation(Token, TokenUser,(void*)buf, Size, &Size);
ok(ret, "GetTokenInformation failed with error %d\n", GetLastError());
@@ -1209,12 +1211,12 @@ static void test_token_attr(void)
if(!pConvertSidToStringSidA)
{
- skip("ConvertSidToStringSidA is not available\n");
+ win_skip("ConvertSidToStringSidA is not available\n");
return;
}
SetLastError(0xdeadbeef);
- ret = OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_DUPLICATE, &Token);
+ ret = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &Token);
ok(ret, "OpenProcessToken failed with error %d\n", GetLastError());
/* groups */
@@ -1283,6 +1285,49 @@ static void test_token_attr(void)
ok(ImpersonationLevel == SecurityAnonymous, "ImpersonationLevel should have been SecurityAnonymous instead of %d\n", ImpersonationLevel);
CloseHandle(ImpersonationToken);
+
+ /* default dacl */
+ ret = GetTokenInformation(Token, TokenDefaultDacl, NULL, 0, &Size);
+ ok(!ret && (GetLastError() == ERROR_INSUFFICIENT_BUFFER),
+ "GetTokenInformation(TokenDefaultDacl) failed with error %u\n", GetLastError());
+
+ Dacl = HeapAlloc(GetProcessHeap(), 0, Size);
+ ret = GetTokenInformation(Token, TokenDefaultDacl, Dacl, Size, &Size);
+ ok(ret, "GetTokenInformation(TokenDefaultDacl) failed with error %u\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = SetTokenInformation(Token, TokenDefaultDacl, NULL, 0);
+ GLE = GetLastError();
+ ok(!ret, "SetTokenInformation(TokenDefaultDacl) succeeded\n");
+ ok(GLE == ERROR_BAD_LENGTH, "expected ERROR_BAD_LENGTH got %u\n", GLE);
+
+ SetLastError(0xdeadbeef);
+ ret = SetTokenInformation(Token, TokenDefaultDacl, NULL, Size);
+ GLE = GetLastError();
+ ok(!ret, "SetTokenInformation(TokenDefaultDacl) succeeded\n");
+ ok(GLE == ERROR_NOACCESS, "expected ERROR_NOACCESS got %u\n", GLE);
+
+ acl = Dacl->DefaultDacl;
+ Dacl->DefaultDacl = NULL;
+
+ ret = SetTokenInformation(Token, TokenDefaultDacl, Dacl, Size);
+ ok(ret, "SetTokenInformation(TokenDefaultDacl) succeeded\n");
+
+ Size2 = 0;
+ Dacl->DefaultDacl = (ACL *)0xdeadbeef;
+ ret = GetTokenInformation(Token, TokenDefaultDacl, Dacl, Size, &Size2);
+ ok(ret, "GetTokenInformation(TokenDefaultDacl) failed with error %u\n", GetLastError());
+ ok(Dacl->DefaultDacl == NULL, "expected NULL, got %p\n", Dacl->DefaultDacl);
+ ok(Size2 == sizeof(TOKEN_DEFAULT_DACL), "got %u expected sizeof(TOKEN_DEFAULT_DACL)\n", Size2);
+
+ Dacl->DefaultDacl = acl;
+ ret = SetTokenInformation(Token, TokenDefaultDacl, Dacl, Size);
+ ok(ret, "SetTokenInformation(TokenDefaultDacl) failed with error %u\n", GetLastError());
+
+ ret = GetTokenInformation(Token, TokenDefaultDacl, Dacl, Size, &Size2);
+ ok(ret, "GetTokenInformation(TokenDefaultDacl) failed with error %u\n", GetLastError());
+
+ HeapFree(GetProcessHeap(), 0, Dacl);
CloseHandle(Token);
}
@@ -1354,15 +1399,36 @@ struct well_known_sid_value
static void test_CreateWellKnownSid(void)
{
SID_IDENTIFIER_AUTHORITY ident = { SECURITY_NT_AUTHORITY };
- PSID domainsid;
+ PSID domainsid, sid;
+ DWORD size, error;
+ BOOL ret;
int i;
if (!pCreateWellKnownSid)
{
- skip("CreateWellKnownSid not available\n");
+ win_skip("CreateWellKnownSid not available\n");
return;
}
+ size = 0;
+ SetLastError(0xdeadbeef);
+ ret = pCreateWellKnownSid(WinInteractiveSid, NULL, NULL, &size);
+ error = GetLastError();
+ ok(!ret, "CreateWellKnownSid succeeded\n");
+ ok(error == ERROR_INSUFFICIENT_BUFFER, "expected ERROR_INSUFFICIENT_BUFFER, got %u\n", error);
+ ok(size, "expected size > 0\n");
+
+ SetLastError(0xdeadbeef);
+ ret = pCreateWellKnownSid(WinInteractiveSid, NULL, NULL, &size);
+ error = GetLastError();
+ ok(!ret, "CreateWellKnownSid succeeded\n");
+ ok(error == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER, got %u\n", error);
+
+ sid = HeapAlloc(GetProcessHeap(), 0, size);
+ ret = pCreateWellKnownSid(WinInteractiveSid, NULL, sid, &size);
+ ok(ret, "CreateWellKnownSid failed %u\n", GetLastError());
+ HeapFree(GetProcessHeap(), 0, sid);
+
/* a domain sid usually have three subauthorities but we test that CreateWellKnownSid doesn't check it */
AllocateAndInitializeSid(&ident, 6, SECURITY_NT_NON_UNIQUE, 12, 23, 34, 45, 56, 0, 0, &domainsid);
@@ -1410,8 +1476,8 @@ static void test_CreateWellKnownSid(void)
static void test_LookupAccountSid(void)
{
SID_IDENTIFIER_AUTHORITY SIDAuthNT = { SECURITY_NT_AUTHORITY };
- CHAR accountA[MAX_PATH], domainA[MAX_PATH];
- DWORD acc_sizeA, dom_sizeA;
+ CHAR accountA[MAX_PATH], domainA[MAX_PATH], usernameA[MAX_PATH];
+ DWORD acc_sizeA, dom_sizeA, user_sizeA;
DWORD real_acc_sizeA, real_dom_sizeA;
WCHAR accountW[MAX_PATH], domainW[MAX_PATH];
DWORD acc_sizeW, dom_sizeW;
@@ -1419,10 +1485,12 @@ static void test_LookupAccountSid(void)
PSID pUsersSid = NULL;
SID_NAME_USE use;
BOOL ret;
- DWORD size;
+ DWORD size,cbti = 0;
MAX_SID max_sid;
CHAR *str_sidA;
int i;
+ HANDLE hToken;
+ PTOKEN_USER ptiUser = NULL;
/* native windows crashes if account size, domain size, or name use is NULL */
@@ -1581,6 +1649,26 @@ static void test_LookupAccountSid(void)
FreeSid(pUsersSid);
+ /* Test LookupAccountSid with Sid retrieved from token information.
+ This assumes this process is running under the account of the current user.*/
+ ret = OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_DUPLICATE, &hToken);
+ ret = GetTokenInformation(hToken, TokenUser, NULL, 0, &cbti);
+ ptiUser = (PTOKEN_USER) HeapAlloc(GetProcessHeap(), 0, cbti);
+ if (GetTokenInformation(hToken, TokenUser, ptiUser, cbti, &cbti))
+ {
+ acc_sizeA = dom_sizeA = MAX_PATH;
+ ret = LookupAccountSidA(NULL, ptiUser->User.Sid, accountA, &acc_sizeA, domainA, &dom_sizeA, &use);
+ ok(ret, "LookupAccountSidA() Expected TRUE, got FALSE\n");
+ user_sizeA = MAX_PATH;
+ ret = GetUserNameA(usernameA , &user_sizeA);
+ ok(ret, "GetUserNameA() Expected TRUE, got FALSE\n");
+ todo_wine
+ {
+ ok(lstrcmpA(usernameA, accountA) == 0, "LookupAccountSidA() Expected account name: %s got: %s\n", usernameA, accountA );
+ }
+ }
+ HeapFree(GetProcessHeap(), 0, ptiUser);
+
if (pCreateWellKnownSid && pConvertSidToStringSidA)
{
trace("Well Known SIDs:\n");
@@ -1684,7 +1772,7 @@ static void test_LookupAccountSid(void)
}
}
-static void get_sid_info(PSID psid, LPSTR *user, LPSTR *dom)
+static BOOL get_sid_info(PSID psid, LPSTR *user, LPSTR *dom)
{
static CHAR account[UNLEN + 1];
static CHAR domain[UNLEN + 1];
@@ -1697,7 +1785,65 @@ static void get_sid_info(PSID psid, LPSTR *user, LPSTR *dom)
size = dom_size = UNLEN + 1;
account[0] = '\0';
domain[0] = '\0';
- LookupAccountSidA(NULL, psid, account, &size, domain, &dom_size, &use);
+ SetLastError(0xdeadbeef);
+ return LookupAccountSidA(NULL, psid, account, &size, domain, &dom_size, &use);
+}
+
+static void check_wellknown_name(const char* name, WELL_KNOWN_SID_TYPE result)
+{
+ SID_IDENTIFIER_AUTHORITY ident = { SECURITY_NT_AUTHORITY };
+ PSID domainsid;
+ char wk_sid[SECURITY_MAX_SID_SIZE];
+ DWORD cb;
+
+ DWORD sid_size, domain_size;
+ SID_NAME_USE sid_use;
+ LPSTR domain, account, sid_domain, wk_domain, wk_account;
+ PSID psid;
+ BOOL ret ,ret2;
+
+ sid_size = 0;
+ domain_size = 0;
+ ret = LookupAccountNameA(NULL, name, NULL, &sid_size, NULL, &domain_size, &sid_use);
+ psid = HeapAlloc(GetProcessHeap(),0,sid_size);
+ domain = HeapAlloc(GetProcessHeap(),0,domain_size);
+ ret = LookupAccountNameA(NULL, name, psid, &sid_size, domain, &domain_size, &sid_use);
+
+ if (!result)
+ {
+ ok(!ret, " %s Should have failed to lookup account name\n",name);
+ goto cleanup;
+ }
+
+ AllocateAndInitializeSid(&ident, 6, SECURITY_NT_NON_UNIQUE, 12, 23, 34, 45, 56, 0, 0, &domainsid);
+ cb = sizeof(wk_sid);
+ if (!pCreateWellKnownSid(result, domainsid, wk_sid, &cb))
+ {
+ win_skip("SID %i is not available on the system\n",result);
+ goto cleanup;
+ }
+
+ ret2 = get_sid_info(wk_sid, &wk_account, &wk_domain);
+ if (!ret2 && GetLastError() == ERROR_NONE_MAPPED)
+ {
+ win_skip("CreateWellKnownSid() succeeded but the account '%s' is not present (W2K)\n", name);
+ goto cleanup;
+ }
+
+ get_sid_info(psid, &account, &sid_domain);
+
+ ok(ret, "Failed to lookup account name %s\n",name);
+ ok(sid_size != 0, "sid_size was zero\n");
+
+ ok(EqualSid(psid,wk_sid),"(%s) Sids fail to match well known sid!\n",name);
+
+ ok(!lstrcmp(account, wk_account), "Expected %s , got %s\n", account, wk_account);
+ ok(!lstrcmp(domain, wk_domain), "Expected %s, got %s\n", wk_domain, domain);
+ ok(sid_use == SidTypeWellKnownGroup , "Expected Use (5), got %d\n", sid_use);
+
+cleanup:
+ HeapFree(GetProcessHeap(),0,psid);
+ HeapFree(GetProcessHeap(),0,domain);
}
static void test_LookupAccountName(void)
@@ -1737,7 +1883,7 @@ static void test_LookupAccountName(void)
ret = LookupAccountNameA(NULL, user_name, NULL, &sid_size, NULL, &domain_size, &sid_use);
if(!ret && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED))
{
- skip("LookupAccountNameA is not implemented\n");
+ win_skip("LookupAccountNameA is not implemented\n");
return;
}
ok(!ret, "Expected 0, got %d\n", ret);
@@ -1884,6 +2030,7 @@ static void test_LookupAccountName(void)
domain_size = 0;
ret = LookupAccountNameA(NULL, computer_name, NULL, &sid_size, NULL, &domain_size, &sid_use);
ok(!ret && (GetLastError() == ERROR_INSUFFICIENT_BUFFER ||
+ GetLastError() == ERROR_NONE_MAPPED /* in a domain */ ||
broken(GetLastError() == ERROR_TRUSTED_DOMAIN_FAILURE) ||
broken(GetLastError() == ERROR_TRUSTED_RELATIONSHIP_FAILURE)),
"LookupAccountNameA failed: %d\n", GetLastError());
@@ -1897,6 +2044,47 @@ static void test_LookupAccountName(void)
HeapFree(GetProcessHeap(), 0, domain);
HeapFree(GetProcessHeap(), 0, psid);
}
+
+ /* Well Known names */
+ if (!pCreateWellKnownSid)
+ {
+ win_skip("CreateWellKnownSid not available\n");
+ return;
+ }
+
+ if (PRIMARYLANGID(LANGIDFROMLCID(GetThreadLocale())) != LANG_ENGLISH)
+ {
+ skip("Non-english locale (skipping well known name creation tests)\n");
+ return;
+ }
+
+ check_wellknown_name("LocalService", WinLocalServiceSid);
+ check_wellknown_name("Local Service", WinLocalServiceSid);
+ /* 2 spaces */
+ check_wellknown_name("Local Service", 0);
+ check_wellknown_name("NetworkService", WinNetworkServiceSid);
+ check_wellknown_name("Network Service", WinNetworkServiceSid);
+
+ /* example of some names where the spaces are not optional */
+ check_wellknown_name("Terminal Server User", WinTerminalServerSid);
+ check_wellknown_name("TerminalServer User", 0);
+ check_wellknown_name("TerminalServerUser", 0);
+ check_wellknown_name("Terminal ServerUser", 0);
+
+ check_wellknown_name("enterprise domain controllers",WinEnterpriseControllersSid);
+ check_wellknown_name("enterprisedomain controllers", 0);
+ check_wellknown_name("enterprise domaincontrollers", 0);
+ check_wellknown_name("enterprisedomaincontrollers", 0);
+
+ /* case insensitivity */
+ check_wellknown_name("lOCAlServICE", WinLocalServiceSid);
+
+ /* fully qualified account names */
+ check_wellknown_name("NT AUTHORITY\\LocalService", WinLocalServiceSid);
+ check_wellknown_name("nt authority\\Network Service", WinNetworkServiceSid);
+ check_wellknown_name("nt authority test\\Network Service", 0);
+ check_wellknown_name("Dummy\\Network Service", 0);
+ check_wellknown_name("ntauthority\\Network Service", 0);
}
static void test_security_descriptor(void)
@@ -1912,7 +2100,7 @@ static void test_security_descriptor(void)
ret = InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
if (ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("InitializeSecurityDescriptor is not implemented\n");
+ win_skip("InitializeSecurityDescriptor is not implemented\n");
return;
}
@@ -2005,7 +2193,7 @@ static void test_process_security(void)
res = InitializeAcl(Acl, 256, ACL_REVISION);
if (!res && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("ACLs not implemented - skipping tests\n");
+ win_skip("ACLs not implemented - skipping tests\n");
HeapFree(GetProcessHeap(), 0, Acl);
return;
}
@@ -2183,14 +2371,14 @@ static void test_impersonation_level(void)
pDuplicateTokenEx = (fnDuplicateTokenEx) GetProcAddress(hmod, "DuplicateTokenEx");
if( !pDuplicateTokenEx ) {
- skip("DuplicateTokenEx is not available\n");
+ win_skip("DuplicateTokenEx is not available\n");
return;
}
SetLastError(0xdeadbeef);
ret = ImpersonateSelf(SecurityAnonymous);
if(!ret && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED))
{
- skip("ImpersonateSelf is not implemented\n");
+ win_skip("ImpersonateSelf is not implemented\n");
return;
}
ok(ret, "ImpersonateSelf(SecurityAnonymous) failed with error %d\n", GetLastError());
@@ -2408,7 +2596,7 @@ static void test_GetNamedSecurityInfoA(void)
if (!pGetNamedSecurityInfoA)
{
- skip("GetNamedSecurityInfoA is not available\n");
+ win_skip("GetNamedSecurityInfoA is not available\n");
return;
}
@@ -2421,7 +2609,7 @@ static void test_GetNamedSecurityInfoA(void)
NULL, NULL, NULL, NULL, &pSecDesc);
if (error != ERROR_SUCCESS && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED))
{
- skip("GetNamedSecurityInfoA is not implemented\n");
+ win_skip("GetNamedSecurityInfoA is not implemented\n");
return;
}
ok(!error, "GetNamedSecurityInfo failed with error %d\n", error);
@@ -2449,7 +2637,7 @@ static void test_ConvertStringSecurityDescriptor(void)
if (!pConvertStringSecurityDescriptorToSecurityDescriptorA)
{
- skip("ConvertStringSecurityDescriptorToSecurityDescriptor is not available\n");
+ win_skip("ConvertStringSecurityDescriptorToSecurityDescriptor is not available\n");
return;
}
@@ -2600,12 +2788,12 @@ static void test_ConvertSecurityDescriptorToString(void)
if (!pConvertSecurityDescriptorToStringSecurityDescriptorA)
{
- skip("ConvertSecurityDescriptorToStringSecurityDescriptor is not available\n");
+ win_skip("ConvertSecurityDescriptorToStringSecurityDescriptor is not available\n");
return;
}
if (!pCreateWellKnownSid)
{
- skip("CreateWellKnownSid is not available\n");
+ win_skip("CreateWellKnownSid is not available\n");
return;
}
@@ -2800,7 +2988,7 @@ static void test_PrivateObjectSecurity(void)
if (!pConvertStringSecurityDescriptorToSecurityDescriptorA)
{
- skip("ConvertStringSecurityDescriptorToSecurityDescriptor is not available\n");
+ win_skip("ConvertStringSecurityDescriptorToSecurityDescriptor is not available\n");
return;
}
@@ -2810,8 +2998,7 @@ static void test_PrivateObjectSecurity(void)
"D:(A;NP;GAGXGWGR;;;SU)(A;IOID;CCDC;;;SU)"
"(D;OICI;0xffffffff;;;S-1-5-21-93476-23408-4576)"
"S:(AU;OICINPIOIDSAFA;CCDCLCSWRPRC;;;SU)(AU;NPSA;0x12019f;;;SU)",
- SDDL_REVISION_1, &sec, &dwDescSize), "Creating descriptor failed\n"); // FIXME: ConvertStringSecurityDescriptorToSecurityDescriptor fails and 'sec' isn't set
-
+ SDDL_REVISION_1, &sec, &dwDescSize), "Creating descriptor failed\n");
test_SetSecurityDescriptorControl(sec);
@@ -2883,7 +3070,7 @@ static void test_acls(void)
ret = InitializeAcl(pAcl, sizeof(ACL) - 1, ACL_REVISION);
if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("InitializeAcl is not implemented\n");
+ win_skip("InitializeAcl is not implemented\n");
return;
}
@@ -2976,7 +3163,6 @@ static void test_GetSecurityInfo(void)
/* If we don't ask for the security descriptor, Windows will still give us
the other stuff, leaving us no way to free it. */
- dacl = NULL;
ret = pGetSecurityInfo(obj, SE_FILE_OBJECT,
OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,
&owner, &group, &dacl, NULL, NULL);
@@ -2984,11 +3170,7 @@ static void test_GetSecurityInfo(void)
ok(owner != NULL, "GetSecurityInfo\n");
ok(group != NULL, "GetSecurityInfo\n");
ok(dacl != NULL, "GetSecurityInfo\n");
-
- if (dacl != NULL)
- {
- ok(IsValidAcl(dacl), "GetSecurityInfo\n");
- }
+ ok(IsValidAcl(dacl), "GetSecurityInfo\n");
CloseHandle(obj);
}
diff --git a/rostests/winetests/advapi32/service.c b/rostests/winetests/advapi32/service.c
index 451a21be087..b924c69d3d4 100644
--- a/rostests/winetests/advapi32/service.c
+++ b/rostests/winetests/advapi32/service.c
@@ -307,7 +307,8 @@ static void test_create_delete_svc(void)
svc_handle1 = CreateServiceA(scm_handle, servicename, NULL, GENERIC_ALL, SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS,
SERVICE_DISABLED, 0, pathname, NULL, NULL, NULL, account, password);
ok(!svc_handle1, "Expected failure\n");
- ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+ ok(GetLastError() == ERROR_INVALID_PARAMETER || GetLastError() == ERROR_INVALID_SERVICE_ACCOUNT,
+ "Expected ERROR_INVALID_PARAMETER or ERROR_INVALID_SERVICE_ACCOUNT, got %d\n", GetLastError());
/* Illegal (start-type is not a mask and should only be one of the possibilities)
* Remark : 'OR'-ing them could result in a valid possibility (but doesn't make sense as
@@ -1762,10 +1763,7 @@ static void test_sequence(void)
SetLastError(0xdeadbeef);
ret = QueryServiceConfigA(svc_handle, config, given, &needed);
ok(ret, "Expected success, got error %u\n", GetLastError());
- todo_wine
- {
- ok(given == needed, "Expected the given (%d) and needed (%d) buffersizes to be equal\n", given, needed);
- }
+
ok(config->lpBinaryPathName && config->lpLoadOrderGroup && config->lpDependencies && config->lpServiceStartName &&
config->lpDisplayName, "Expected all string struct members to be non-NULL\n");
ok(config->dwServiceType == (SERVICE_INTERACTIVE_PROCESS | SERVICE_WIN32_OWN_PROCESS),
@@ -1829,7 +1827,7 @@ static void test_queryconfig2(void)
if(!pQueryServiceConfig2A)
{
- skip("function QueryServiceConfig2A not present\n");
+ win_skip("function QueryServiceConfig2A not present\n");
return;
}
@@ -1933,7 +1931,7 @@ static void test_queryconfig2(void)
if(!pChangeServiceConfig2A)
{
- skip("function ChangeServiceConfig2A not present\n");
+ win_skip("function ChangeServiceConfig2A not present\n");
goto cleanup;
}
@@ -1971,7 +1969,7 @@ static void test_queryconfig2(void)
if(!pQueryServiceConfig2W)
{
- skip("function QueryServiceConfig2W not present\n");
+ win_skip("function QueryServiceConfig2W not present\n");
goto cleanup;
}
SetLastError(0xdeadbeef);
@@ -2107,7 +2105,7 @@ START_TEST(service)
if (!scm_handle && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED))
{
- skip("OpenSCManagerA is not implemented, we are most likely on win9x\n");
+ win_skip("OpenSCManagerA is not implemented, we are most likely on win9x\n");
return;
}
CloseServiceHandle(scm_handle);
diff --git a/rostests/winetests/advpack/advpack.c b/rostests/winetests/advpack/advpack.c
index 8615850ab38..3ead0f25c4b 100644
--- a/rostests/winetests/advpack/advpack.c
+++ b/rostests/winetests/advpack/advpack.c
@@ -83,7 +83,7 @@ static BOOL init_function_pointers(void)
if (!pCloseINFEngine || !pDelNode || !pGetVersionFromFile ||
!pOpenINFEngine || !pSetPerUserSecValues || !pTranslateInfString)
{
- skip("Needed functions are not available\n");
+ win_skip("Needed functions are not available\n");
FreeLibrary(hAdvPack);
return FALSE;
}
@@ -272,6 +272,11 @@ static void translateinfstring_test(void)
buffer[0] = 0;
hr = pTranslateInfString(inf_file, "idontexist", "Options.NTx86",
"InstallDir", buffer, MAX_PATH, &dwSize, NULL);
+ if (hr == E_ACCESSDENIED)
+ {
+ skip("TranslateInfString is broken\n");
+ return;
+ }
ok(hr == S_OK, "Expected S_OK, got 0x%08x\n", (UINT)hr);
ok(!strcmp(buffer, TEST_STRING2), "Expected %s, got %s\n", TEST_STRING2, buffer);
ok(dwSize == 25, "Expected size 25, got %d\n", dwSize);
@@ -328,7 +333,7 @@ static void translateinfstringex_test(void)
hr = pOpenINFEngine(inf_file, NULL, 0, &hinf, NULL);
if (hr == E_UNEXPECTED)
{
- skip("Skipping tests on win9x because of brokenness\n");
+ win_skip("Skipping tests on win9x because of brokenness\n");
return;
}
@@ -591,6 +596,11 @@ static void setperusersecvalues_test(void)
/* set initial values */
lstrcpy(peruser.szGUID, "guid");
hr = pSetPerUserSecValues(&peruser);
+ if (hr == E_FAIL)
+ {
+ skip("SetPerUserSecValues is broken\n");
+ return;
+ }
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
ok(OPEN_GUID_KEY(), "Expected guid key to exist\n");
ok(check_reg_str(guid, NULL, "displayname"), "Expected displayname\n");
diff --git a/rostests/winetests/advpack/files.c b/rostests/winetests/advpack/files.c
index d3f7338beb9..5c6ea8de1f2 100644
--- a/rostests/winetests/advpack/files.c
+++ b/rostests/winetests/advpack/files.c
@@ -133,8 +133,13 @@ static void test_AddDelBackupEntry(void)
/* create the INF file */
res = pAddDelBackupEntry("one\0two\0three\0", "c:\\", "basename", AADBE_ADD_ENTRY);
ok(res == S_OK, "Expected S_OK, got %d\n", res);
- ok(check_ini_file_attr(path), "Expected ini file to be hidden\n");
- ok(DeleteFileA(path), "Expected path to exist\n");
+ if (GetFileAttributes(path) != INVALID_FILE_ATTRIBUTES)
+ {
+ ok(check_ini_file_attr(path), "Expected ini file to be hidden\n");
+ ok(DeleteFileA(path), "Expected path to exist\n");
+ }
+ else
+ win_skip("Test file could not be created\n");
lstrcpyA(path, CURR_DIR);
lstrcatA(path, "\\backup\\basename.INI");
diff --git a/rostests/winetests/comcat/comcat.c b/rostests/winetests/comcat/comcat.c
index 49e5afe7c41..029d2e30ab3 100644
--- a/rostests/winetests/comcat/comcat.c
+++ b/rostests/winetests/comcat/comcat.c
@@ -29,7 +29,7 @@
#include "wine/test.h"
-#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x \n", hr)
+#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr)
static BOOL register_testentry(void)
{
diff --git a/rostests/winetests/comctl32/comboex.c b/rostests/winetests/comctl32/comboex.c
index f59d1d1f810..1e741924ce8 100644
--- a/rostests/winetests/comctl32/comboex.c
+++ b/rostests/winetests/comctl32/comboex.c
@@ -187,7 +187,7 @@ static void test_WM_LBUTTONDOWN(void)
pGetComboBoxInfo = (void*)GetProcAddress(GetModuleHandleA("user32.dll"), "GetComboBoxInfo");
if (!pGetComboBoxInfo){
- skip("GetComboBoxInfo is not available\n");
+ win_skip("GetComboBoxInfo is not available\n");
return;
}
@@ -314,7 +314,7 @@ static int init(void)
pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
if (!pInitCommonControlsEx)
{
- skip("InitCommonControlsEx() is missing. Skipping the tests\n");
+ win_skip("InitCommonControlsEx() is missing. Skipping the tests\n");
return 0;
}
iccex.dwSize = sizeof(iccex);
diff --git a/rostests/winetests/comctl32/comctl32.rbuild b/rostests/winetests/comctl32/comctl32.rbuild
index 10a8b863d02..1331dcca693 100644
--- a/rostests/winetests/comctl32/comctl32.rbuild
+++ b/rostests/winetests/comctl32/comctl32.rbuild
@@ -10,6 +10,7 @@
dpa.c
header.c
imagelist.c
+ ipaddress.c
listview.c
misc.c
monthcal.c
diff --git a/rostests/winetests/comctl32/datetime.c b/rostests/winetests/comctl32/datetime.c
index caef2762951..8fdbbe53608 100644
--- a/rostests/winetests/comctl32/datetime.c
+++ b/rostests/winetests/comctl32/datetime.c
@@ -140,7 +140,7 @@ struct subclass_info
static LRESULT WINAPI datetime_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA);
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
diff --git a/rostests/winetests/comctl32/dpa.c b/rostests/winetests/comctl32/dpa.c
index a0d19202981..ed28119ac89 100644
--- a/rostests/winetests/comctl32/dpa.c
+++ b/rostests/winetests/comctl32/dpa.c
@@ -373,7 +373,7 @@ static void test_dpa(void)
if(pDPA_EnumCallback)
{
nEnum = 0;
- pDPA_EnumCallback(dpa2, CB_EnumFirstThree, (PVOID)dpa2);
+ pDPA_EnumCallback(dpa2, CB_EnumFirstThree, dpa2);
rc=CheckDPA(dpa2, 0x777456, &dw2);
ok(rc, "dw=0x%x\n", dw2);
ok(nEnum == 3, "nEnum=%d\n", nEnum);
diff --git a/rostests/winetests/comctl32/header.c b/rostests/winetests/comctl32/header.c
index 5598e586164..76612530c98 100644
--- a/rostests/winetests/comctl32/header.c
+++ b/rostests/winetests/comctl32/header.c
@@ -404,7 +404,7 @@ struct subclass_info
static LRESULT WINAPI header_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA);
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
@@ -425,7 +425,7 @@ static LRESULT WINAPI header_subclass_proc(HWND hwnd, UINT message, WPARAM wPara
static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
@@ -1159,10 +1159,10 @@ static void test_hdm_index_messages(HWND hParent)
flush_sequences(sequences, NUM_MSG_SEQUENCES);
iSize = SendMessage(hChild, HDM_GETITEMCOUNT, 0, (LPARAM) &hdItem);
- retVal = SendMessage(hChild, HDM_SETORDERARRAY, (WPARAM) iSize , (LPARAM) (LPINT) lpiarray );
+ retVal = SendMessage(hChild, HDM_SETORDERARRAY, iSize, (LPARAM) lpiarray);
ok(retVal == TRUE, "Setting header items order should return TRUE, got %d\n", retVal);
- retVal = SendMessage(hChild, HDM_GETORDERARRAY, (WPARAM) iSize, (LPARAM) (LPINT) lpiarrayReceived );
+ retVal = SendMessage(hChild, HDM_GETORDERARRAY, iSize, (LPARAM) lpiarrayReceived);
ok(retVal == TRUE, "Getting header items order should return TRUE, got %d\n", retVal);
ok_sequence(sequences, HEADER_SEQ_INDEX, orderArray_seq, "set_get_orderArray sequence testing", FALSE);
diff --git a/rostests/winetests/comctl32/ipaddress.c b/rostests/winetests/comctl32/ipaddress.c
new file mode 100644
index 00000000000..d04223cb4fc
--- /dev/null
+++ b/rostests/winetests/comctl32/ipaddress.c
@@ -0,0 +1,90 @@
+/* Unit test suite for IP Address control.
+ *
+ * Copyright 2009 Nikolay Sivov
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+
+#include
+#include
+#include
+
+#include "wine/test.h"
+
+#define expect(expected, got) ok(expected == got, "expected %d, got %d\n", expected,got)
+
+static HWND create_ipaddress_control (void)
+{
+ HWND handle;
+
+ handle = CreateWindowEx(0, WC_IPADDRESS, NULL,
+ WS_BORDER|WS_VISIBLE, 0, 0, 0, 0,
+ NULL, NULL, NULL, NULL);
+ assert(handle);
+
+ return handle;
+}
+
+static void test_get_set_text(void)
+{
+ HWND hwnd;
+ CHAR ip[16];
+ INT r;
+
+ hwnd = create_ipaddress_control();
+
+ /* check text just after creation */
+ r = GetWindowText(hwnd, ip, sizeof(ip)/sizeof(CHAR));
+ expect(7, r);
+ ok(strcmp(ip, "0.0.0.0") == 0, "Expected null IP address, got %s\n", ip);
+
+ SendMessage(hwnd, IPM_SETADDRESS, 0, MAKEIPADDRESS(127, 0, 0, 1));
+ r = GetWindowText(hwnd, ip, sizeof(ip)/sizeof(CHAR));
+ expect(9, r);
+ ok(strcmp(ip, "127.0.0.1") == 0, "Expected 127.0.0.1, got %s\n", ip);
+
+ DestroyWindow(hwnd);
+}
+
+static int init(void)
+{
+ HMODULE hComctl32;
+ BOOL (WINAPI *pInitCommonControlsEx)(const INITCOMMONCONTROLSEX*);
+ INITCOMMONCONTROLSEX iccex;
+
+ hComctl32 = GetModuleHandleA("comctl32.dll");
+ pInitCommonControlsEx = (void*)GetProcAddress(hComctl32, "InitCommonControlsEx");
+ if (!pInitCommonControlsEx)
+ {
+ win_skip("InitCommonControlsEx() is missing.\n");
+ return 0;
+ }
+
+ iccex.dwSize = sizeof(iccex);
+ /* W2K and below need ICC_INTERNET_CLASSES for the IP Address Control */
+ iccex.dwICC = ICC_INTERNET_CLASSES;
+ pInitCommonControlsEx(&iccex);
+
+ return 1;
+}
+
+START_TEST(ipaddress)
+{
+ if (!init())
+ return;
+
+ test_get_set_text();
+}
diff --git a/rostests/winetests/comctl32/listview.c b/rostests/winetests/comctl32/listview.c
index 4033e9e683a..e94bdaaabd0 100644
--- a/rostests/winetests/comctl32/listview.c
+++ b/rostests/winetests/comctl32/listview.c
@@ -26,9 +26,10 @@
#include "wine/test.h"
#include "msg.h"
-#define PARENT_SEQ_INDEX 0
-#define LISTVIEW_SEQ_INDEX 1
-#define NUM_MSG_SEQUENCES 2
+#define PARENT_SEQ_INDEX 0
+#define PARENT_FULL_SEQ_INDEX 1
+#define LISTVIEW_SEQ_INDEX 2
+#define NUM_MSG_SEQUENCES 3
#define LISTVIEW_ID 0
#define HEADER_ID 1
@@ -146,6 +147,27 @@ static const struct message listview_itempos_seq[] = {
{ 0 }
};
+static const struct message listview_ownerdata_switchto_seq[] = {
+ { WM_STYLECHANGING, sent },
+ { WM_STYLECHANGED, sent },
+ { 0 }
+};
+
+static const struct message listview_getorderarray_seq[] = {
+ { LVM_GETCOLUMNORDERARRAY, sent|id|wparam, 2, 0, LISTVIEW_ID },
+ { HDM_GETORDERARRAY, sent|id|wparam, 2, 0, HEADER_ID },
+ { 0 }
+};
+
+static const struct message empty_seq[] = {
+ { 0 }
+};
+
+static const struct message forward_erasebkgnd_parent_seq[] = {
+ { WM_ERASEBKGND, sent },
+ { 0 }
+};
+
struct subclass_info
{
WNDPROC oldproc;
@@ -153,10 +175,16 @@ struct subclass_info
static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
+ msg.message = message;
+ msg.flags = sent|wparam|lparam;
+ if (defwndproc_counter) msg.flags |= defwinproc;
+ msg.wParam = wParam;
+ msg.lParam = lParam;
+
/* log system messages, except for painting */
if (message < WM_USER &&
message != WM_PAINT &&
@@ -169,13 +197,9 @@ static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LP
{
trace("parent: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
- msg.message = message;
- msg.flags = sent|wparam|lparam;
- if (defwndproc_counter) msg.flags |= defwinproc;
- msg.wParam = wParam;
- msg.lParam = lParam;
add_message(sequences, PARENT_SEQ_INDEX, &msg);
}
+ add_message(sequences, PARENT_FULL_SEQ_INDEX, &msg);
defwndproc_counter++;
ret = DefWindowProcA(hwnd, message, wParam, lParam);
@@ -217,12 +241,20 @@ static HWND create_parent_window(void)
static LRESULT WINAPI listview_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA);
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
trace("listview: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
+ /* some debug output for style changing */
+ if ((message == WM_STYLECHANGING ||
+ message == WM_STYLECHANGED) && lParam)
+ {
+ STYLESTRUCT *style = (STYLESTRUCT*)lParam;
+ trace("\told style: 0x%08x, new style: 0x%08x\n", style->styleOld, style->styleNew);
+ }
+
msg.message = message;
msg.flags = sent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
@@ -237,7 +269,7 @@ static LRESULT WINAPI listview_subclass_proc(HWND hwnd, UINT message, WPARAM wPa
return ret;
}
-static HWND create_listview_control(void)
+static HWND create_listview_control(DWORD style)
{
struct subclass_info *info;
HWND hwnd;
@@ -249,7 +281,7 @@ static HWND create_listview_control(void)
GetClientRect(hwndparent, &rect);
hwnd = CreateWindowExA(0, WC_LISTVIEW, "foo",
- WS_CHILD | WS_BORDER | WS_VISIBLE | LVS_REPORT,
+ WS_CHILD | WS_BORDER | WS_VISIBLE | LVS_REPORT | style,
0, 0, rect.right, rect.bottom,
hwndparent, NULL, GetModuleHandleA(NULL), NULL);
ok(hwnd != NULL, "gle=%d\n", GetLastError());
@@ -300,7 +332,7 @@ static HWND create_custom_listview_control(DWORD style)
static LRESULT WINAPI header_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA);
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
@@ -634,6 +666,72 @@ static void test_items(void)
insert_column(hwnd, 0);
insert_column(hwnd, 1);
+ /* LVIS_SELECTED with zero stateMask */
+ /* set */
+ memset (&item, 0, sizeof (item));
+ item.mask = LVIF_STATE;
+ item.state = LVIS_SELECTED;
+ item.stateMask = 0;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item);
+ ok(r == 0, "ret %d\n", r);
+ /* get */
+ memset (&item, 0xcc, sizeof (item));
+ item.mask = LVIF_STATE;
+ item.stateMask = LVIS_SELECTED;
+ item.state = 0;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item);
+ ok(r != 0, "ret %d\n", r);
+ ok(item.state & LVIS_SELECTED, "Expected LVIS_SELECTED\n");
+ SendMessage(hwnd, LVM_DELETEITEM, 0, 0);
+
+ /* LVIS_SELECTED with zero stateMask */
+ /* set */
+ memset (&item, 0, sizeof (item));
+ item.mask = LVIF_STATE;
+ item.state = LVIS_FOCUSED;
+ item.stateMask = 0;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item);
+ ok(r == 0, "ret %d\n", r);
+ /* get */
+ memset (&item, 0xcc, sizeof (item));
+ item.mask = LVIF_STATE;
+ item.stateMask = LVIS_FOCUSED;
+ item.state = 0;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item);
+ ok(r != 0, "ret %d\n", r);
+ ok(item.state & LVIS_FOCUSED, "Expected LVIS_FOCUSED\n");
+ SendMessage(hwnd, LVM_DELETEITEM, 0, 0);
+
+ /* LVIS_CUT with LVIS_FOCUSED stateMask */
+ /* set */
+ memset (&item, 0, sizeof (item));
+ item.mask = LVIF_STATE;
+ item.state = LVIS_CUT;
+ item.stateMask = LVIS_FOCUSED;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ r = SendMessage(hwnd, LVM_INSERTITEMA, 0, (LPARAM) &item);
+ ok(r == 0, "ret %d\n", r);
+ /* get */
+ memset (&item, 0xcc, sizeof (item));
+ item.mask = LVIF_STATE;
+ item.stateMask = LVIS_CUT;
+ item.state = 0;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item);
+ ok(r != 0, "ret %d\n", r);
+ ok(item.state & LVIS_CUT, "Expected LVIS_CUT\n");
+ SendMessage(hwnd, LVM_DELETEITEM, 0, 0);
+
/* Insert an item with just a param */
memset (&item, 0xcc, sizeof (item));
item.mask = LVIF_PARAM;
@@ -715,14 +813,29 @@ static void test_items(void)
ok(r != 0, "ret %d\n", r);
todo_wine ok(item.state == LVIS_DROPHILITED, "got state %x, expected %x\n", item.state, LVIS_DROPHILITED);
+ /* some notnull but meaningless masks */
+ memset (&item, 0, sizeof(item));
+ item.mask = LVIF_NORECOMPUTE;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item);
+ ok(r != 0, "ret %d\n", r);
+ memset (&item, 0, sizeof(item));
+ item.mask = LVIF_DI_SETITEM;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item);
+ ok(r != 0, "ret %d\n", r);
+
DestroyWindow(hwnd);
}
static void test_columns(void)
{
- HWND hwnd;
+ HWND hwnd, hwndheader;
LVCOLUMN column;
DWORD rc;
+ INT order[2];
hwnd = CreateWindowEx(0, "SysListView32", "foo", LVS_REPORT,
10, 10, 100, 200, hwndparent, NULL, NULL, NULL);
@@ -741,6 +854,31 @@ static void test_columns(void)
"Inserting column with no mask failed to set width to 10 with %d\n", rc);
DestroyWindow(hwnd);
+
+ /* LVM_GETCOLUMNORDERARRAY */
+ hwnd = create_listview_control(0);
+ hwndheader = subclass_header(hwnd);
+
+ memset(&column, 0, sizeof(column));
+ column.mask = LVCF_WIDTH;
+ column.cx = 100;
+ rc = ListView_InsertColumn(hwnd, 0, &column);
+ ok(rc == 0, "Inserting column failed with %d\n", rc);
+
+ column.cx = 200;
+ rc = ListView_InsertColumn(hwnd, 1, &column);
+ ok(rc == 1, "Inserting column failed with %d\n", rc);
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+ rc = SendMessage(hwnd, LVM_GETCOLUMNORDERARRAY, 2, (LPARAM)&order);
+ ok(rc != 0, "Expected LVM_GETCOLUMNORDERARRAY to succeed\n");
+ ok(order[0] == 0, "Expected order 0, got %d\n", order[0]);
+ ok(order[1] == 1, "Expected order 1, got %d\n", order[1]);
+
+ ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_getorderarray_seq, "get order array", FALSE);
+
+ DestroyWindow(hwnd);
}
/* test setting imagelist between WM_NCCREATE and WM_CREATE */
static WNDPROC listviewWndProc;
@@ -748,19 +886,26 @@ static HIMAGELIST test_create_imagelist;
static LRESULT CALLBACK create_test_wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
+ LRESULT ret;
+
if (uMsg == WM_CREATE)
{
LPCREATESTRUCT lpcs = (LPCREATESTRUCT)lParam;
lpcs->style |= LVS_REPORT;
- SendMessage(hwnd, LVM_SETIMAGELIST, 0, (LPARAM)test_create_imagelist);
}
- return CallWindowProc(listviewWndProc, hwnd, uMsg, wParam, lParam);
+ ret = CallWindowProc(listviewWndProc, hwnd, uMsg, wParam, lParam);
+ if (uMsg == WM_CREATE) SendMessage(hwnd, LVM_SETIMAGELIST, 0, (LPARAM)test_create_imagelist);
+ return ret;
}
static void test_create(void)
{
HWND hList;
HWND hHeader;
+ LONG_PTR ret;
+ LONG r;
+ LVCOLUMNA col;
+ RECT rect;
WNDCLASSEX cls;
cls.cbSize = sizeof(WNDCLASSEX);
ok(GetClassInfoEx(GetModuleHandle(NULL), "SysListView32", &cls), "GetClassInfoEx failed\n");
@@ -774,14 +919,158 @@ static void test_create(void)
ok((HIMAGELIST)SendMessage(hList, LVM_GETIMAGELIST, 0, 0) == test_create_imagelist, "Image list not obtained\n");
hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
ok(IsWindow(hHeader) && IsWindowVisible(hHeader), "Listview not in report mode\n");
+ ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n");
+ DestroyWindow(hList);
+
+ /* header isn't created on LVS_ICON and LVS_LIST styles */
+ hList = CreateWindow("SysListView32", "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL,
+ GetModuleHandle(NULL), 0);
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(!IsWindow(hHeader), "Header shouldn't be created\n");
+ ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n");
+ /* insert column */
+ memset(&col, 0, sizeof(LVCOLUMNA));
+ col.mask = LVCF_WIDTH;
+ col.cx = 100;
+ r = SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&col);
+ ok(r == 0, "Expected 0 column's inserted\n");
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(hHeader), "Header should be created\n");
+ ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n");
+ DestroyWindow(hList);
+
+ hList = CreateWindow("SysListView32", "Test", WS_VISIBLE|LVS_LIST, 0, 0, 100, 100, NULL, NULL,
+ GetModuleHandle(NULL), 0);
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(!IsWindow(hHeader), "Header shouldn't be created\n");
+ ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n");
+ /* insert column */
+ memset(&col, 0, sizeof(LVCOLUMNA));
+ col.mask = LVCF_WIDTH;
+ col.cx = 100;
+ r = SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&col);
+ ok(r == 0, "Expected 0 column's inserted\n");
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(hHeader), "Header should be created\n");
+ ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n");
+ DestroyWindow(hList);
+
+ /* try to switch LVS_ICON -> LVS_REPORT and back LVS_ICON -> LVS_REPORT */
+ hList = CreateWindow("SysListView32", "Test", WS_VISIBLE, 0, 0, 100, 100, NULL, NULL,
+ GetModuleHandle(NULL), 0);
+ ret = SetWindowLongPtr(hList, GWL_STYLE, GetWindowLongPtr(hList, GWL_STYLE) | LVS_REPORT);
+ ok(ret & WS_VISIBLE, "Style wrong, should have WS_VISIBLE\n");
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(hHeader), "Header should be created\n");
+ ret = SetWindowLongPtr(hList, GWL_STYLE, GetWindowLong(hList, GWL_STYLE) & ~LVS_REPORT);
+ ok((ret & WS_VISIBLE) && (ret & LVS_REPORT), "Style wrong, should have WS_VISIBLE|LVS_REPORT\n");
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(hHeader), "Header should be created\n");
+ ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n");
+ DestroyWindow(hList);
+
+ /* try to switch LVS_LIST -> LVS_REPORT and back LVS_LIST -> LVS_REPORT */
+ hList = CreateWindow("SysListView32", "Test", WS_VISIBLE|LVS_LIST, 0, 0, 100, 100, NULL, NULL,
+ GetModuleHandle(NULL), 0);
+ ret = SetWindowLongPtr(hList, GWL_STYLE,
+ (GetWindowLongPtr(hList, GWL_STYLE) & ~LVS_LIST) | LVS_REPORT);
+ ok(((ret & WS_VISIBLE) && (ret & LVS_LIST)), "Style wrong, should have WS_VISIBLE|LVS_LIST\n");
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(hHeader), "Header should be created\n");
+ ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n");
+ ret = SetWindowLongPtr(hList, GWL_STYLE,
+ (GetWindowLongPtr(hList, GWL_STYLE) & ~LVS_REPORT) | LVS_LIST);
+ ok(((ret & WS_VISIBLE) && (ret & LVS_REPORT)), "Style wrong, should have WS_VISIBLE|LVS_REPORT\n");
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(hHeader), "Header should be created\n");
+ ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n");
+ DestroyWindow(hList);
+
+ /* LVS_REPORT without WS_VISIBLE */
+ hList = CreateWindow("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL,
+ GetModuleHandle(NULL), 0);
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(!IsWindow(hHeader), "Header shouldn't be created\n");
+ ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n");
+ /* insert column */
+ memset(&col, 0, sizeof(LVCOLUMNA));
+ col.mask = LVCF_WIDTH;
+ col.cx = 100;
+ r = SendMessage(hList, LVM_INSERTCOLUMN, 0, (LPARAM)&col);
+ ok(r == 0, "Expected 0 column's inserted\n");
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(hHeader), "Header should be created\n");
+ ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n");
+ DestroyWindow(hList);
+
+ /* LVS_REPORT without WS_VISIBLE, try to show it */
+ hList = CreateWindow("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL,
+ GetModuleHandle(NULL), 0);
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(!IsWindow(hHeader), "Header shouldn't be created\n");
+ ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n");
+ ShowWindow(hList, SW_SHOW);
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(hHeader), "Header should be created\n");
+ ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n");
+ DestroyWindow(hList);
+
+ /* LVS_REPORT with LVS_NOCOLUMNHEADER */
+ hList = CreateWindow("SysListView32", "Test", LVS_REPORT|LVS_NOCOLUMNHEADER|WS_VISIBLE,
+ 0, 0, 100, 100, NULL, NULL, GetModuleHandle(NULL), 0);
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(hHeader), "Header should be created\n");
+ ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n");
+ /* HDS_DRAGDROP set by default */
+ ok(GetWindowLongPtr(hHeader, GWL_STYLE) & HDS_DRAGDROP, "Expected header to have HDS_DRAGDROP\n");
+ DestroyWindow(hList);
+
+ /* setting LVS_EX_HEADERDRAGDROP creates header */
+ hList = CreateWindow("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL,
+ GetModuleHandle(NULL), 0);
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(!IsWindow(hHeader), "Header shouldn't be created\n");
+ ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n");
+ SendMessage(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_HEADERDRAGDROP);
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(hHeader), "Header should be created\n");
+ ok(hHeader == GetDlgItem(hList, 0), "Expected header as dialog item\n");
+ DestroyWindow(hList);
+
+ /* not report style accepts LVS_EX_HEADERDRAGDROP too */
+ hList = create_custom_listview_control(0);
+ SendMessage(hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_HEADERDRAGDROP);
+ r = SendMessage(hList, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
+ ok(r & LVS_EX_HEADERDRAGDROP, "Expected LVS_EX_HEADERDRAGDROP to be set\n");
+ DestroyWindow(hList);
+
+ /* requesting header info with LVM_GETSUBITEMRECT doesn't create it */
+ hList = CreateWindow("SysListView32", "Test", LVS_REPORT, 0, 0, 100, 100, NULL, NULL,
+ GetModuleHandle(NULL), 0);
+ ok(!IsWindow(hHeader), "Header shouldn't be created\n");
+ ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n");
+
+ rect.left = LVIR_BOUNDS;
+ rect.top = 1;
+ rect.right = rect.bottom = -10;
+ r = SendMessage(hList, LVM_GETSUBITEMRECT, -1, (LPARAM)&rect);
+ ok(r != 0, "Expected not-null LRESULT\n");
+
+ hHeader = (HWND)SendMessage(hList, LVM_GETHEADER, 0, 0);
+ ok(!IsWindow(hHeader), "Header shouldn't be created\n");
+ ok(NULL == GetDlgItem(hList, 0), "NULL dialog item expected\n");
+
DestroyWindow(hList);
}
static void test_redraw(void)
{
HWND hwnd, hwndheader;
+ HDC hdc;
+ BOOL res;
+ DWORD r;
- hwnd = create_listview_control();
+ hwnd = create_listview_control(0);
hwndheader = subclass_header(hwnd);
flush_sequences(sequences, NUM_MSG_SEQUENCES);
@@ -793,6 +1082,51 @@ static void test_redraw(void)
flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ /* forward WM_ERASEBKGND to parent on CLR_NONE background color */
+ /* 1. Without backbuffer */
+ res = ListView_SetBkColor(hwnd, CLR_NONE);
+ expect(TRUE, res);
+
+ hdc = GetWindowDC(hwndparent);
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ r = SendMessageA(hwnd, WM_ERASEBKGND, (WPARAM)hdc, 0);
+ ok(r != 0, "Expected not zero result\n");
+ ok_sequence(sequences, PARENT_FULL_SEQ_INDEX, forward_erasebkgnd_parent_seq,
+ "forward WM_ERASEBKGND on CLR_NONE", FALSE);
+
+ res = ListView_SetBkColor(hwnd, CLR_DEFAULT);
+ expect(TRUE, res);
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ r = SendMessageA(hwnd, WM_ERASEBKGND, (WPARAM)hdc, 0);
+ ok(r != 0, "Expected not zero result\n");
+ ok_sequence(sequences, PARENT_FULL_SEQ_INDEX, empty_seq,
+ "don't forward WM_ERASEBKGND on non-CLR_NONE", FALSE);
+
+ /* 2. With backbuffer */
+ SendMessageA(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_DOUBLEBUFFER,
+ LVS_EX_DOUBLEBUFFER);
+ res = ListView_SetBkColor(hwnd, CLR_NONE);
+ expect(TRUE, res);
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ r = SendMessageA(hwnd, WM_ERASEBKGND, (WPARAM)hdc, 0);
+ ok(r != 0, "Expected not zero result\n");
+ ok_sequence(sequences, PARENT_FULL_SEQ_INDEX, forward_erasebkgnd_parent_seq,
+ "forward WM_ERASEBKGND on CLR_NONE", FALSE);
+
+ res = ListView_SetBkColor(hwnd, CLR_DEFAULT);
+ expect(TRUE, res);
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ r = SendMessageA(hwnd, WM_ERASEBKGND, (WPARAM)hdc, 0);
+ todo_wine ok(r != 0, "Expected not zero result\n");
+ ok_sequence(sequences, PARENT_FULL_SEQ_INDEX, empty_seq,
+ "don't forward WM_ERASEBKGND on non-CLR_NONE", FALSE);
+
+ ReleaseDC(hwndparent, hdc);
+
DestroyWindow(hwnd);
}
@@ -833,7 +1167,7 @@ static void test_customdraw(void)
HWND hwnd;
WNDPROC oldwndproc;
- hwnd = create_listview_control();
+ hwnd = create_listview_control(0);
insert_column(hwnd, 0);
insert_column(hwnd, 1);
@@ -905,7 +1239,7 @@ static void test_color(void)
COLORREF color;
COLORREF colors[4] = {RGB(0,0,0), RGB(100,50,200), CLR_NONE, RGB(255,255,255)};
- hwnd = create_listview_control();
+ hwnd = create_listview_control(0);
ok(hwnd != NULL, "failed to create a listview window\n");
flush_sequences(sequences, NUM_MSG_SEQUENCES);
@@ -951,7 +1285,7 @@ static void test_item_count(void)
static CHAR item1text[] = "item1";
static CHAR item2text[] = "item2";
- hwnd = create_listview_control();
+ hwnd = create_listview_control(0);
ok(hwnd != NULL, "failed to create a listview window\n");
flush_sequences(sequences, NUM_MSG_SEQUENCES);
@@ -1161,6 +1495,7 @@ static void test_multiselect(void)
static const int items=5;
BYTE kstate[256];
select_task task;
+ LONG_PTR style;
static struct t_select_task task_list[] = {
{ "using VK_DOWN", 0, VK_DOWN, -1, -1 },
@@ -1170,7 +1505,7 @@ static void test_multiselect(void)
};
- hwnd = create_listview_control();
+ hwnd = create_listview_control(0);
for (i=0;i second ? 1 : -1);
+}
+
+static void test_sorting(void)
+{
+ HWND hwnd;
+ LVITEMA item = {0};
+ DWORD r;
+ LONG_PTR style;
+ static CHAR names[][5] = {"A", "B", "C", "D", "0"};
+ CHAR buff[10];
+
+ hwnd = create_listview_control(0);
+ ok(hwnd != NULL, "failed to create a listview window\n");
+
+ /* insert some items */
+ item.mask = LVIF_PARAM | LVIF_STATE;
+ item.state = LVIS_SELECTED;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ item.lParam = 3;
+ r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item);
+ expect(0, r);
+
+ item.mask = LVIF_PARAM;
+ item.iItem = 1;
+ item.iSubItem = 0;
+ item.lParam = 2;
+ r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item);
+ expect(1, r);
+
+ item.mask = LVIF_STATE | LVIF_PARAM;
+ item.state = LVIS_SELECTED;
+ item.iItem = 2;
+ item.iSubItem = 0;
+ item.lParam = 4;
+ r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item);
+ expect(2, r);
+
+ r = SendMessage(hwnd, LVM_GETSELECTIONMARK, 0, 0);
+ expect(-1, r);
+
+ r = SendMessage(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+ expect(2, r);
+
+ r = SendMessage(hwnd, LVM_SORTITEMS, 0, (LPARAM)test_CallBackCompare);
+ expect(TRUE, r);
+
+ r = SendMessage(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+ expect(2, r);
+ r = SendMessage(hwnd, LVM_GETSELECTIONMARK, 0, 0);
+ expect(-1, r);
+ r = SendMessage(hwnd, LVM_GETITEMSTATE, 0, LVIS_SELECTED);
+ expect(0, r);
+ r = SendMessage(hwnd, LVM_GETITEMSTATE, 1, LVIS_SELECTED);
+ expect(LVIS_SELECTED, r);
+ r = SendMessage(hwnd, LVM_GETITEMSTATE, 2, LVIS_SELECTED);
+ expect(LVIS_SELECTED, r);
+
+ DestroyWindow(hwnd);
+
+ /* switch to LVS_SORTASCENDING when some items added */
+ hwnd = create_listview_control(0);
+ ok(hwnd != NULL, "failed to create a listview window\n");
+
+ item.mask = LVIF_TEXT;
+ item.iItem = 0;
+ item.iSubItem = 0;
+ item.pszText = names[1];
+ r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item);
+ expect(0, r);
+
+ item.mask = LVIF_TEXT;
+ item.iItem = 1;
+ item.iSubItem = 0;
+ item.pszText = names[2];
+ r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item);
+ expect(1, r);
+
+ item.mask = LVIF_TEXT;
+ item.iItem = 2;
+ item.iSubItem = 0;
+ item.pszText = names[0];
+ r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item);
+ expect(2, r);
+
+ style = GetWindowLongPtrA(hwnd, GWL_STYLE);
+ SetWindowLongPtrA(hwnd, GWL_STYLE, style | LVS_SORTASCENDING);
+ style = GetWindowLongPtrA(hwnd, GWL_STYLE);
+ ok(style & LVS_SORTASCENDING, "Expected LVS_SORTASCENDING to be set\n");
+
+ /* no sorting performed when switched to LVS_SORTASCENDING */
+ item.mask = LVIF_TEXT;
+ item.iItem = 0;
+ item.pszText = buff;
+ item.cchTextMax = sizeof(buff);
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[1]) == 0, "Expected '%s', got '%s'\n", names[1], buff);
+
+ item.iItem = 1;
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[2]) == 0, "Expected '%s', got '%s'\n", names[2], buff);
+
+ item.iItem = 2;
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[0]) == 0, "Expected '%s', got '%s'\n", names[0], buff);
+
+ /* adding new item doesn't resort list */
+ item.mask = LVIF_TEXT;
+ item.iItem = 3;
+ item.iSubItem = 0;
+ item.pszText = names[3];
+ r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item);
+ expect(3, r);
+
+ item.mask = LVIF_TEXT;
+ item.iItem = 0;
+ item.pszText = buff;
+ item.cchTextMax = sizeof(buff);
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[1]) == 0, "Expected '%s', got '%s'\n", names[1], buff);
+
+ item.iItem = 1;
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[2]) == 0, "Expected '%s', got '%s'\n", names[2], buff);
+
+ item.iItem = 2;
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[0]) == 0, "Expected '%s', got '%s'\n", names[0], buff);
+
+ item.iItem = 3;
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[3]) == 0, "Expected '%s', got '%s'\n", names[3], buff);
+
+ /* corner case - item should be placed at first position */
+ item.mask = LVIF_TEXT;
+ item.iItem = 4;
+ item.iSubItem = 0;
+ item.pszText = names[4];
+ r = SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM) &item);
+ expect(0, r);
+
+ item.iItem = 0;
+ item.pszText = buff;
+ item.cchTextMax = sizeof(buff);
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[4]) == 0, "Expected '%s', got '%s'\n", names[4], buff);
+
+ item.iItem = 1;
+ item.pszText = buff;
+ item.cchTextMax = sizeof(buff);
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[1]) == 0, "Expected '%s', got '%s'\n", names[1], buff);
+
+ item.iItem = 2;
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[2]) == 0, "Expected '%s', got '%s'\n", names[2], buff);
+
+ item.iItem = 3;
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[0]) == 0, "Expected '%s', got '%s'\n", names[0], buff);
+
+ item.iItem = 4;
+ r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item);
+ expect(TRUE, r);
+ ok(lstrcmp(buff, names[3]) == 0, "Expected '%s', got '%s'\n", names[3], buff);
+
+ DestroyWindow(hwnd);
+}
+
+static void test_ownerdata(void)
+{
+ HWND hwnd;
+ LONG_PTR style, ret;
+ DWORD res;
+ LVITEMA item;
+
+ /* it isn't possible to set LVS_OWNERDATA after creation */
+ hwnd = create_listview_control(0);
+ ok(hwnd != NULL, "failed to create a listview window\n");
+ style = GetWindowLongPtrA(hwnd, GWL_STYLE);
+ ok(!(style & LVS_OWNERDATA) && style, "LVS_OWNERDATA isn't expected\n");
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+ ret = SetWindowLongPtrA(hwnd, GWL_STYLE, style | LVS_OWNERDATA);
+ ok(ret == style, "Expected set GWL_STYLE to succeed\n");
+ ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_ownerdata_switchto_seq,
+ "try to switch to LVS_OWNERDATA seq", FALSE);
+
+ style = GetWindowLongPtrA(hwnd, GWL_STYLE);
+ ok(!(style & LVS_OWNERDATA), "LVS_OWNERDATA isn't expected\n");
+ DestroyWindow(hwnd);
+
+ /* try to set LVS_OWNERDATA after creation just having it */
+ hwnd = create_listview_control(LVS_OWNERDATA);
+ ok(hwnd != NULL, "failed to create a listview window\n");
+ style = GetWindowLongPtrA(hwnd, GWL_STYLE);
+ ok(style & LVS_OWNERDATA, "LVS_OWNERDATA is expected\n");
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+ ret = SetWindowLongPtrA(hwnd, GWL_STYLE, style | LVS_OWNERDATA);
+ ok(ret == style, "Expected set GWL_STYLE to succeed\n");
+ ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_ownerdata_switchto_seq,
+ "try to switch to LVS_OWNERDATA seq", FALSE);
+ DestroyWindow(hwnd);
+
+ /* try to remove LVS_OWNERDATA after creation just having it */
+ hwnd = create_listview_control(LVS_OWNERDATA);
+ ok(hwnd != NULL, "failed to create a listview window\n");
+ style = GetWindowLongPtrA(hwnd, GWL_STYLE);
+ ok(style & LVS_OWNERDATA, "LVS_OWNERDATA is expected\n");
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+
+ ret = SetWindowLongPtrA(hwnd, GWL_STYLE, style & ~LVS_OWNERDATA);
+ ok(ret == style, "Expected set GWL_STYLE to succeed\n");
+ ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_ownerdata_switchto_seq,
+ "try to switch to LVS_OWNERDATA seq", FALSE);
+ style = GetWindowLongPtrA(hwnd, GWL_STYLE);
+ ok(style & LVS_OWNERDATA, "LVS_OWNERDATA is expected\n");
+ DestroyWindow(hwnd);
+
+ /* try select an item */
+ hwnd = create_listview_control(LVS_OWNERDATA);
+ ok(hwnd != NULL, "failed to create a listview window\n");
+ res = SendMessageA(hwnd, LVM_SETITEMCOUNT, 1, 0);
+ ok(res != 0, "Expected LVM_SETITEMCOUNT to succeed\n");
+ res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+ expect(0, res);
+ memset(&item, 0, sizeof(item));
+ item.stateMask = LVIS_SELECTED;
+ item.state = LVIS_SELECTED;
+ res = SendMessageA(hwnd, LVM_SETITEMSTATE, 0, (LPARAM)&item);
+ expect(TRUE, res);
+ res = SendMessageA(hwnd, LVM_GETSELECTEDCOUNT, 0, 0);
+ expect(1, res);
+ res = SendMessageA(hwnd, LVM_GETITEMCOUNT, 0, 0);
+ expect(1, res);
+ DestroyWindow(hwnd);
+
+ /* LVM_SETITEM is unsupported on LVS_OWNERDATA */
+ hwnd = create_listview_control(LVS_OWNERDATA);
+ ok(hwnd != NULL, "failed to create a listview window\n");
+ res = SendMessageA(hwnd, LVM_SETITEMCOUNT, 1, 0);
+ ok(res != 0, "Expected LVM_SETITEMCOUNT to succeed\n");
+ res = SendMessageA(hwnd, LVM_GETITEMCOUNT, 0, 0);
+ expect(1, res);
+ memset(&item, 0, sizeof(item));
+ item.mask = LVIF_STATE;
+ item.iItem = 0;
+ item.stateMask = LVIS_SELECTED;
+ item.state = LVIS_SELECTED;
+ res = SendMessageA(hwnd, LVM_SETITEM, 0, (LPARAM)&item);
+ expect(FALSE, res);
+ DestroyWindow(hwnd);
+}
+
+static void test_norecompute(void)
+{
+ static CHAR testA[] = "test";
+ CHAR buff[10];
+ LVITEMA item;
+ HWND hwnd;
+ DWORD res;
+
+ /* self containing control */
+ hwnd = create_listview_control(0);
+ ok(hwnd != NULL, "failed to create a listview window\n");
+ memset(&item, 0, sizeof(item));
+ item.mask = LVIF_TEXT | LVIF_STATE;
+ item.iItem = 0;
+ item.stateMask = LVIS_SELECTED;
+ item.state = LVIS_SELECTED;
+ item.pszText = testA;
+ res = SendMessageA(hwnd, LVM_INSERTITEM, 0, (LPARAM)&item);
+ expect(0, res);
+ /* retrieve with LVIF_NORECOMPUTE */
+ item.mask = LVIF_TEXT | LVIF_NORECOMPUTE;
+ item.iItem = 0;
+ item.pszText = buff;
+ item.cchTextMax = sizeof(buff)/sizeof(CHAR);
+ res = SendMessageA(hwnd, LVM_GETITEM, 0, (LPARAM)&item);
+ expect(TRUE, res);
+ ok(lstrcmp(buff, testA) == 0, "Expected (%s), got (%s)\n", testA, buff);
+
+ item.mask = LVIF_TEXT;
+ item.iItem = 1;
+ item.pszText = LPSTR_TEXTCALLBACK;
+ res = SendMessageA(hwnd, LVM_INSERTITEM, 0, (LPARAM)&item);
+ expect(1, res);
+
+ item.mask = LVIF_TEXT | LVIF_NORECOMPUTE;
+ item.iItem = 1;
+ item.pszText = buff;
+ item.cchTextMax = sizeof(buff)/sizeof(CHAR);
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ res = SendMessageA(hwnd, LVM_GETITEM, 0, (LPARAM)&item);
+ expect(TRUE, res);
+ ok(item.pszText == LPSTR_TEXTCALLBACK, "Expected (%p), got (%p)\n",
+ LPSTR_TEXTCALLBACK, (VOID*)item.pszText);
+ ok_sequence(sequences, PARENT_SEQ_INDEX, empty_seq, "retrieve with LVIF_NORECOMPUTE seq", FALSE);
+
+ DestroyWindow(hwnd);
+
+ /* LVS_OWNERDATA */
+ hwnd = create_listview_control(LVS_OWNERDATA);
+ ok(hwnd != NULL, "failed to create a listview window\n");
+
+ item.mask = LVIF_STATE;
+ item.stateMask = LVIS_SELECTED;
+ item.state = LVIS_SELECTED;
+ item.iItem = 0;
+ res = SendMessageA(hwnd, LVM_INSERTITEM, 0, (LPARAM)&item);
+ expect(0, res);
+
+ item.mask = LVIF_TEXT | LVIF_NORECOMPUTE;
+ item.iItem = 0;
+ item.pszText = buff;
+ item.cchTextMax = sizeof(buff)/sizeof(CHAR);
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ res = SendMessageA(hwnd, LVM_GETITEM, 0, (LPARAM)&item);
+ expect(TRUE, res);
+ ok(item.pszText == LPSTR_TEXTCALLBACK, "Expected (%p), got (%p)\n",
+ LPSTR_TEXTCALLBACK, (VOID*)item.pszText);
+ ok_sequence(sequences, PARENT_SEQ_INDEX, empty_seq, "retrieve with LVIF_NORECOMPUTE seq 2", FALSE);
+
+ DestroyWindow(hwnd);
+}
+
+static void test_nosortheader(void)
+{
+ HWND hwnd, header;
+ LONG_PTR style;
+
+ hwnd = create_listview_control(0);
+ ok(hwnd != NULL, "failed to create a listview window\n");
+
+ header = (HWND)SendMessageA(hwnd, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(header), "header expected\n");
+
+ style = GetWindowLongPtr(header, GWL_STYLE);
+ ok(style & HDS_BUTTONS, "expected header to have HDS_BUTTONS\n");
+
+ style = GetWindowLongPtr(hwnd, GWL_STYLE);
+ SetWindowLongPtr(hwnd, GWL_STYLE, style | LVS_NOSORTHEADER);
+ /* HDS_BUTTONS retained */
+ style = GetWindowLongPtr(header, GWL_STYLE);
+ ok(style & HDS_BUTTONS, "expected header to retain HDS_BUTTONS\n");
+
+ DestroyWindow(hwnd);
+
+ /* create with LVS_NOSORTHEADER */
+ hwnd = create_listview_control(LVS_NOSORTHEADER);
+ ok(hwnd != NULL, "failed to create a listview window\n");
+
+ header = (HWND)SendMessageA(hwnd, LVM_GETHEADER, 0, 0);
+ ok(IsWindow(header), "header expected\n");
+
+ style = GetWindowLongPtr(header, GWL_STYLE);
+ ok(!(style & HDS_BUTTONS), "expected header to have no HDS_BUTTONS\n");
+
+ style = GetWindowLongPtr(hwnd, GWL_STYLE);
+ SetWindowLongPtr(hwnd, GWL_STYLE, style & ~LVS_NOSORTHEADER);
+ /* not changed here */
+ style = GetWindowLongPtr(header, GWL_STYLE);
+ ok(!(style & HDS_BUTTONS), "expected header to have no HDS_BUTTONS\n");
+
+ DestroyWindow(hwnd);
}
START_TEST(listview)
@@ -1256,4 +2105,9 @@ START_TEST(listview)
test_columns();
test_getorigin();
test_multiselect();
+ test_subitem_rect();
+ test_sorting();
+ test_ownerdata();
+ test_norecompute();
+ test_nosortheader();
}
diff --git a/rostests/winetests/comctl32/monthcal.c b/rostests/winetests/comctl32/monthcal.c
index cccb1b9ea0b..1ca1997d720 100644
--- a/rostests/winetests/comctl32/monthcal.c
+++ b/rostests/winetests/comctl32/monthcal.c
@@ -53,7 +53,8 @@ static const struct message create_parent_window_seq[] = {
{ WM_SHOWWINDOW, sent|wparam, 1 },
{ WM_WINDOWPOSCHANGING, sent|wparam, 0 },
{ WM_QUERYNEWPALETTE, sent|optional },
- { WM_WINDOWPOSCHANGING, sent|wparam, 0 },
+ { WM_WINDOWPOSCHANGING, sent|wparam|optional, 0 },
+ { WM_WINDOWPOSCHANGED, sent|optional },
{ WM_ACTIVATEAPP, sent|wparam, 1 },
{ WM_NCACTIVATE, sent|wparam, 1 },
{ WM_ACTIVATE, sent|wparam, 1 },
@@ -377,7 +378,7 @@ static void test_monthcal(void)
static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
@@ -447,7 +448,7 @@ static HWND create_parent_window(void)
assert(hwnd);
/* check for message sequences */
- ok_sequence(sequences, PARENT_SEQ_INDEX, create_parent_window_seq, "create parent window", TRUE);
+ ok_sequence(sequences, PARENT_SEQ_INDEX, create_parent_window_seq, "create parent window", FALSE);
return hwnd;
}
@@ -455,7 +456,7 @@ static HWND create_parent_window(void)
static LRESULT WINAPI monthcal_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA);
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
diff --git a/rostests/winetests/comctl32/rebar.c b/rostests/winetests/comctl32/rebar.c
index e5bea381025..d055d8aec8f 100644
--- a/rostests/winetests/comctl32/rebar.c
+++ b/rostests/winetests/comctl32/rebar.c
@@ -157,7 +157,7 @@ static void dump_sizes(HWND hRebar)
printf("%s{ {%3d, %3d, %3d, %3d}, 0x%02x, %d}, ", (i%2==0 ? "\n " : ""), r.left, r.top, r.right, r.bottom,
rbi.fStyle, rbi.cx);
}
- printf("\n }, }, \n");
+ printf("\n }, },\n");
}
#define check_sizes() dump_sizes(hRebar);
@@ -512,7 +512,7 @@ static void dump_client(HWND hRebar)
RECT r;
BOOL notify;
GetWindowRect(hRebar, &r);
- MapWindowPoints(HWND_DESKTOP, hMainWnd, (LPPOINT)&r, 2);
+ MapWindowPoints(HWND_DESKTOP, hMainWnd, &r, 2);
if (height_change_notify_rect.top != -1)
{
RECT rcClient;
diff --git a/rostests/winetests/comctl32/status.c b/rostests/winetests/comctl32/status.c
index e5b91555c3f..f1cbda47f0d 100644
--- a/rostests/winetests/comctl32/status.c
+++ b/rostests/winetests/comctl32/status.c
@@ -40,6 +40,10 @@ static WNDPROC g_status_wndproc;
static RECT g_rcCreated;
static HWND g_hMainWnd;
static int g_wmsize_count = 0;
+static DWORD g_ysize;
+static DWORD g_dpisize;
+static int g_wmdrawitm_ctr;
+static WNDPROC g_wndproc_saved;
static HWND create_status_control(DWORD style, DWORD exstyle)
{
@@ -78,7 +82,7 @@ static LRESULT WINAPI create_test_wndproc(HWND hwnd, UINT msg, WPARAM wParam, LP
return ret;
}
-static void register_subclass()
+static void register_subclass(void)
{
WNDCLASSEX cls;
@@ -91,7 +95,7 @@ static void register_subclass()
ok(RegisterClassEx(&cls), "RegisterClassEx failed\n");
}
-static void test_create()
+static void test_create(void)
{
RECT rc;
HWND hwnd;
@@ -113,10 +117,16 @@ static int CALLBACK check_height_font_enumproc(ENUMLOGFONTEX *enumlf, NEWTEXTMET
{
HWND hwndStatus = (HWND)lParam;
HDC hdc = GetDC(NULL);
- static const int sizes[] = {8, 9, 10, 12, 16, 22, 28, 36, 48, 72};
- int i;
+ static const int sizes[] = { 6, 7, 8, 9, 10, 11, 12, 13, 15, 16,
+ 20, 22, 28, 36, 48, 72};
+ DWORD i;
+ DWORD y;
+ LPSTR facename = (CHAR *)enumlf->elfFullName;
+
+ /* on win9x, enumlf->elfFullName is only valid for truetype fonts */
+ if (type != TRUETYPE_FONTTYPE)
+ facename = enumlf->elfLogFont.lfFaceName;
- trace("Font %s\n", enumlf->elfFullName);
for (i = 0; i < sizeof(sizes)/sizeof(sizes[0]); i++)
{
HFONT hFont;
@@ -132,7 +142,11 @@ static int CALLBACK check_height_font_enumproc(ENUMLOGFONTEX *enumlf, NEWTEXTMET
GetClientRect(hwndStatus, &rcCtrl);
GetTextMetrics(hdc, &tm);
- expect(max(tm.tmHeight + (tm.tmInternalLeading ? tm.tmInternalLeading : 2) + 4, 20), rcCtrl.bottom);
+ y = tm.tmHeight + (tm.tmInternalLeading ? tm.tmInternalLeading : 2) + 4;
+
+ ok( (rcCtrl.bottom == max(y, g_ysize)) || (rcCtrl.bottom == max(y, g_dpisize)),
+ "got %d (expected %d or %d) for %s #%d\n",
+ rcCtrl.bottom, max(y, g_ysize), max(y, g_dpisize), facename, sizes[i]);
SelectObject(hdc, hOldFont);
SendMessage(hwndStatus, WM_SETFONT, (WPARAM)hCtrlFont, TRUE);
@@ -213,7 +227,19 @@ static void test_height(void)
ZeroMemory(&lf, sizeof(lf));
SendMessage(hwndStatus, SB_SETMINHEIGHT, 0, 0);
hdc = GetDC(NULL);
- trace("dpi=%d\n", GetDeviceCaps(hdc, LOGPIXELSY));
+
+ /* used only for some fonts (tahoma as example) */
+ g_ysize = GetSystemMetrics(SM_CYSIZE) + 2;
+ if (g_ysize & 1) g_ysize--; /* The min height is always even */
+
+ g_dpisize = MulDiv(18, GetDeviceCaps(hdc, LOGPIXELSY), 96) + 2;
+ if (g_dpisize & 1) g_dpisize--; /* The min height is always even */
+
+
+ trace("dpi=%d (min height: %d or %d) SM_CYSIZE: %d\n",
+ GetDeviceCaps(hdc, LOGPIXELSY), g_ysize, g_dpisize,
+ GetSystemMetrics(SM_CYSIZE));
+
EnumFontFamiliesEx(hdc, &lf, (FONTENUMPROC)check_height_family_enumproc, (LPARAM)hwndStatus, 0);
ReleaseDC(NULL, hdc);
@@ -232,6 +258,8 @@ static void test_status_control(void)
RECT rc;
CHAR charArray[20];
HICON hIcon;
+ char ch;
+ char chstr[10] = "Inval id";
hWndStatus = create_status_control(WS_VISIBLE, 0);
@@ -281,7 +309,7 @@ static void test_status_control(void)
/* Test resetting text with different characters */
r = SendMessage(hWndStatus, SB_SETTEXT, 0, (LPARAM)"First@Again");
expect(TRUE,r);
- r = SendMessage(hWndStatus, SB_SETTEXT, 1, (LPARAM)"InvalidChars\\7\7");
+ r = SendMessage(hWndStatus, SB_SETTEXT, 1, (LPARAM)"Invalid\tChars\\7\7");
expect(TRUE,r);
r = SendMessage(hWndStatus, SB_SETTEXT, 2, (LPARAM)"InvalidChars\\n\n");
expect(TRUE,r);
@@ -292,20 +320,28 @@ static void test_status_control(void)
expect(11,LOWORD(r));
expect(0,HIWORD(r));
r = SendMessage(hWndStatus, SB_GETTEXT, 1, (LPARAM) charArray);
- todo_wine
- {
- ok(strcmp(charArray,"InvalidChars\\7 ") == 0, "Expected InvalidChars\\7 , got %s\n", charArray);
- }
- expect(15,LOWORD(r));
+ ok(strcmp(charArray,"Invalid\tChars\\7 ") == 0, "Expected Invalid\tChars\\7 , got %s\n", charArray);
+
+ expect(16,LOWORD(r));
expect(0,HIWORD(r));
r = SendMessage(hWndStatus, SB_GETTEXT, 2, (LPARAM) charArray);
- todo_wine
- {
- ok(strcmp(charArray,"InvalidChars\\n ") == 0, "Expected InvalidChars\\n , got %s\n", charArray);
- }
+ ok(strcmp(charArray,"InvalidChars\\n ") == 0, "Expected InvalidChars\\n , got %s\n", charArray);
+
expect(15,LOWORD(r));
expect(0,HIWORD(r));
+ /* test more nonprintable chars */
+ for(ch = 0x00; ch < 0x7F; ch++) {
+ chstr[5] = ch;
+ r = SendMessage(hWndStatus, SB_SETTEXT, 0, (LPARAM)chstr);
+ expect(TRUE,r);
+ r = SendMessage(hWndStatus, SB_GETTEXT, 0, (LPARAM)charArray);
+ /* substitution with single space */
+ if (ch > 0x00 && ch < 0x20 && ch != '\t')
+ chstr[5] = ' ';
+ ok(strcmp(charArray, chstr) == 0, "Expected %s, got %s\n", chstr, charArray);
+ }
+
/* Set background color */
r = SendMessage(hWndStatus, SB_SETBKCOLOR , 0, RGB(255,0,0));
ok(r == CLR_DEFAULT ||
@@ -383,6 +419,53 @@ static void test_status_control(void)
DestroyWindow(hWndStatus);
}
+static LRESULT WINAPI ownerdraw_test_wndproc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ LRESULT ret;
+ if (msg == WM_DRAWITEM)
+ g_wmdrawitm_ctr++;
+ ret = CallWindowProc(g_wndproc_saved, hwnd, msg, wParam, lParam);
+ return ret;
+}
+
+static void test_status_ownerdraw(void)
+{
+ HWND hWndStatus;
+ int r;
+ const char* statustext = "STATUS TEXT";
+ LONG oldstyle;
+
+ /* subclass the main window and make sure it is visible */
+ g_wndproc_saved = (WNDPROC) SetWindowLongPtr( g_hMainWnd, GWLP_WNDPROC,
+ (LONG_PTR)ownerdraw_test_wndproc );
+ ok( g_wndproc_saved != 0, "failed to set the WndProc\n");
+ SetWindowPos( g_hMainWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
+ oldstyle = GetWindowLong( g_hMainWnd, GWL_STYLE);
+ SetWindowLong( g_hMainWnd, GWL_STYLE, oldstyle | WS_VISIBLE);
+ /* create a status child window */
+ ok((hWndStatus = CreateWindowA(SUBCLASS_NAME, "", WS_CHILD|WS_VISIBLE, 0, 0, 100, 100,
+ g_hMainWnd, NULL, NULL, 0)) != NULL, "CreateWindowA failed\n");
+ /* set text */
+ g_wmdrawitm_ctr = 0;
+ r = SendMessage(hWndStatus, SB_SETTEXT, 0, (LPARAM)statustext);
+ ok( r == TRUE, "Sendmessage returned %d, expected 1\n", r);
+ ok( 0 == g_wmdrawitm_ctr, "got %d drawitem messages expected none\n", g_wmdrawitm_ctr);
+ /* set same text, with ownerdraw flag */
+ g_wmdrawitm_ctr = 0;
+ r = SendMessage(hWndStatus, SB_SETTEXT, SBT_OWNERDRAW, (LPARAM)statustext);
+ ok( r == TRUE, "Sendmessage returned %d, expected 1\n", r);
+ ok( 1 == g_wmdrawitm_ctr, "got %d drawitem messages expected 1\n", g_wmdrawitm_ctr);
+ /* ;and again */
+ g_wmdrawitm_ctr = 0;
+ r = SendMessage(hWndStatus, SB_SETTEXT, SBT_OWNERDRAW, (LPARAM)statustext);
+ ok( r == TRUE, "Sendmessage returned %d, expected 1\n", r);
+ ok( 1 == g_wmdrawitm_ctr, "got %d drawitem messages expected 1\n", g_wmdrawitm_ctr);
+ /* clean up */
+ DestroyWindow(hWndStatus);
+ SetWindowLong( g_hMainWnd, GWL_STYLE, oldstyle);
+ SetWindowLongPtr( g_hMainWnd, GWLP_WNDPROC, (LONG_PTR)g_wndproc_saved );
+}
+
START_TEST(status)
{
hinst = GetModuleHandleA(NULL);
@@ -399,4 +482,5 @@ START_TEST(status)
test_status_control();
test_create();
test_height();
+ test_status_ownerdraw();
}
diff --git a/rostests/winetests/comctl32/tab.c b/rostests/winetests/comctl32/tab.c
index b39f52ea3cf..3bf68945120 100644
--- a/rostests/winetests/comctl32/tab.c
+++ b/rostests/winetests/comctl32/tab.c
@@ -310,7 +310,7 @@ create_tabcontrol (DWORD style, DWORD mask)
static LRESULT WINAPI parentWindowProcess(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
@@ -378,7 +378,7 @@ struct subclass_info
static LRESULT WINAPI tabSubclassProcess(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA);
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
@@ -492,7 +492,7 @@ static HWND create_tooltip (HWND hTab, char toolTipText[])
ti.rect = rect;
/* Add toolinfo structure to the tooltip control */
- SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
+ SendMessage(hwndTT, TTM_ADDTOOL, 0, (LPARAM) &ti);
return hwndTT;
}
@@ -727,6 +727,7 @@ static void test_getters_setters(HWND parent_wnd, INT nTabs)
{
INT selectionIndex;
INT focusIndex;
+ TCITEM tcItem;
flush_sequences(sequences, NUM_MSG_SEQUENCES);
@@ -756,6 +757,15 @@ static void test_getters_setters(HWND parent_wnd, INT nTabs)
ok_sequence(sequences, TAB_SEQ_INDEX, getset_cur_sel_seq, "Getset curSel test sequence", FALSE);
ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset curSel test parent sequence", FALSE);
+
+ /* selected item should have TCIS_BUTTONPRESSED state
+ It doesn't depend on button state */
+ memset(&tcItem, 0, sizeof(TCITEM));
+ tcItem.mask = TCIF_STATE;
+ tcItem.dwStateMask = TCIS_BUTTONPRESSED;
+ selectionIndex = SendMessage(hTab, TCM_GETCURSEL, 0, 0);
+ SendMessage(hTab, TCM_GETITEM, selectionIndex, (LPARAM) &tcItem);
+ ok (tcItem.dwState & TCIS_BUTTONPRESSED, "Selected item should have TCIS_BUTTONPRESSED\n");
}
/* Testing ExtendedStyle */
@@ -768,12 +778,10 @@ static void test_getters_setters(HWND parent_wnd, INT nTabs)
/* Testing Flat Separators */
extendedStyle = SendMessage(hTab, TCM_GETEXTENDEDSTYLE, 0, 0);
prevExtendedStyle = SendMessage(hTab, TCM_SETEXTENDEDSTYLE, 0, TCS_EX_FLATSEPARATORS);
- expect(extendedStyle, prevExtendedStyle);
+ expect(extendedStyle, prevExtendedStyle);
extendedStyle = SendMessage(hTab, TCM_GETEXTENDEDSTYLE, 0, 0);
- todo_wine{
- expect(TCS_EX_FLATSEPARATORS, extendedStyle);
- }
+ expect(TCS_EX_FLATSEPARATORS, extendedStyle);
/* Testing Register Drop */
prevExtendedStyle = SendMessage(hTab, TCM_SETEXTENDEDSTYLE, 0, TCS_EX_REGISTERDROP);
@@ -833,6 +841,29 @@ static void test_getters_setters(HWND parent_wnd, INT nTabs)
ok_sequence(sequences, TAB_SEQ_INDEX, getset_item_seq, "Getset item test sequence", FALSE);
ok_sequence(sequences, PARENT_SEQ_INDEX, empty_sequence, "Getset item test parent sequence", FALSE);
+
+ /* TCIS_BUTTONPRESSED doesn't depend on tab style */
+ memset(&tcItem, 0, sizeof(tcItem));
+ tcItem.mask = TCIF_STATE;
+ tcItem.dwStateMask = TCIS_BUTTONPRESSED;
+ tcItem.dwState = TCIS_BUTTONPRESSED;
+ ok ( SendMessage(hTab, TCM_SETITEM, 0, (LPARAM) &tcItem), "Setting new item failed.\n");
+ tcItem.dwState = 0;
+ ok ( SendMessage(hTab, TCM_GETITEM, 0, (LPARAM) &tcItem), "Getting item failed.\n");
+ ok (tcItem.dwState == TCIS_BUTTONPRESSED, "TCIS_BUTTONPRESSED should be set.\n");
+ /* next highlight item, test that dwStateMask actually masks */
+ tcItem.mask = TCIF_STATE;
+ tcItem.dwStateMask = TCIS_HIGHLIGHTED;
+ tcItem.dwState = TCIS_HIGHLIGHTED;
+ ok ( SendMessage(hTab, TCM_SETITEM, 0, (LPARAM) &tcItem), "Setting new item failed.\n");
+ tcItem.dwState = 0;
+ ok ( SendMessage(hTab, TCM_GETITEM, 0, (LPARAM) &tcItem), "Getting item failed.\n");
+ ok (tcItem.dwState == TCIS_HIGHLIGHTED, "TCIS_HIGHLIGHTED should be set.\n");
+ tcItem.mask = TCIF_STATE;
+ tcItem.dwStateMask = TCIS_BUTTONPRESSED;
+ tcItem.dwState = 0;
+ ok ( SendMessage(hTab, TCM_GETITEM, 0, (LPARAM) &tcItem), "Getting item failed.\n");
+ ok (tcItem.dwState == TCIS_BUTTONPRESSED, "TCIS_BUTTONPRESSED should be set.\n");
}
/* Testing GetSet ToolTip */
@@ -984,6 +1015,69 @@ static void test_delete_focus(HWND parent_wnd)
DestroyWindow(hTab);
}
+static void test_removeimage(HWND parent_wnd)
+{
+ static const BYTE bits[32];
+ HWND hwTab;
+ INT i;
+ TCITEM item;
+ HICON hicon;
+ HIMAGELIST himl = ImageList_Create(16, 16, ILC_COLOR, 3, 4);
+
+ hicon = CreateIcon(NULL, 16, 16, 1, 1, bits, bits);
+ ImageList_AddIcon(himl, hicon);
+ ImageList_AddIcon(himl, hicon);
+ ImageList_AddIcon(himl, hicon);
+
+ hwTab = create_tabcontrol(TCS_FIXEDWIDTH, TCIF_TEXT|TCIF_IMAGE);
+ SendMessage(hwTab, TCM_SETIMAGELIST, 0, (LPARAM)himl);
+
+ memset(&item, 0, sizeof(TCITEM));
+ item.mask = TCIF_IMAGE;
+
+ for(i = 0; i < 3; i++) {
+ SendMessage(hwTab, TCM_GETITEM, i, (LPARAM)&item);
+ expect(i, item.iImage);
+ }
+
+ /* remove image middle image */
+ SendMessage(hwTab, TCM_REMOVEIMAGE, 1, 0);
+ expect(2, ImageList_GetImageCount(himl));
+ item.iImage = -1;
+ SendMessage(hwTab, TCM_GETITEM, 0, (LPARAM)&item);
+ expect(0, item.iImage);
+ item.iImage = 0;
+ SendMessage(hwTab, TCM_GETITEM, 1, (LPARAM)&item);
+ expect(-1, item.iImage);
+ item.iImage = 0;
+ SendMessage(hwTab, TCM_GETITEM, 2, (LPARAM)&item);
+ expect(1, item.iImage);
+ /* remove first image */
+ SendMessage(hwTab, TCM_REMOVEIMAGE, 0, 0);
+ expect(1, ImageList_GetImageCount(himl));
+ item.iImage = 0;
+ SendMessage(hwTab, TCM_GETITEM, 0, (LPARAM)&item);
+ expect(-1, item.iImage);
+ item.iImage = 0;
+ SendMessage(hwTab, TCM_GETITEM, 1, (LPARAM)&item);
+ expect(-1, item.iImage);
+ item.iImage = -1;
+ SendMessage(hwTab, TCM_GETITEM, 2, (LPARAM)&item);
+ expect(0, item.iImage);
+ /* remove the last one */
+ SendMessage(hwTab, TCM_REMOVEIMAGE, 0, 0);
+ expect(0, ImageList_GetImageCount(himl));
+ for(i = 0; i < 3; i++) {
+ item.iImage = 0;
+ SendMessage(hwTab, TCM_GETITEM, i, (LPARAM)&item);
+ expect(-1, item.iImage);
+ }
+
+ DestroyWindow(hwTab);
+ ImageList_Destroy(himl);
+ DestroyIcon(hicon);
+}
+
START_TEST(tab)
{
HWND parent_wnd;
@@ -1021,6 +1115,7 @@ START_TEST(tab)
test_insert_focus(parent_wnd);
test_delete_focus(parent_wnd);
+ test_removeimage(parent_wnd);
DestroyWindow(parent_wnd);
}
diff --git a/rostests/winetests/comctl32/testlist.c b/rostests/winetests/comctl32/testlist.c
index be88bef0a74..7e32af490c3 100644
--- a/rostests/winetests/comctl32/testlist.c
+++ b/rostests/winetests/comctl32/testlist.c
@@ -27,6 +27,7 @@ extern void func_tooltips(void);
extern void func_trackbar(void);
extern void func_treeview(void);
extern void func_updown(void);
+extern void func_ipaddress(void);
const struct test winetest_testlist[] =
{
@@ -51,5 +52,6 @@ const struct test winetest_testlist[] =
{ "trackbar", func_trackbar },
{ "treeview", func_treeview },
{ "updown", func_updown },
+ { "ipaddress", func_ipaddress },
{ 0, 0 }
};
diff --git a/rostests/winetests/comctl32/toolbar.c b/rostests/winetests/comctl32/toolbar.c
index ee86c1c58a8..19460952349 100644
--- a/rostests/winetests/comctl32/toolbar.c
+++ b/rostests/winetests/comctl32/toolbar.c
@@ -592,7 +592,7 @@ static void dump_sizes(HWND hToolbar)
SendMessageA(hToolbar, TB_GETITEMRECT, i, &r);
printf("%s{%3d, %3d, %3d, %3d}, ", (i%3==0 ? "\n " : ""), r.left, r.top, r.right, r.bottom);
}
- printf("\n }, }, \n");
+ printf("\n }, },\n");
}
#define check_sizes() dump_sizes(hToolbar);
@@ -777,7 +777,7 @@ static TBBUTTON buttons3[] = {
static void test_sizes(void)
{
HWND hToolbar = NULL;
- HIMAGELIST himl;
+ HIMAGELIST himl, himl2;
TBBUTTONINFO tbinfo;
int style;
int i;
@@ -928,9 +928,13 @@ static void test_sizes(void)
ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(100, 21), "Unexpected button size\n");
SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(100, 100));
ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(100, 100), "Unexpected button size\n");
+ /* But there are no update when we change imagelist, and image sizes are the same */
+ himl2 = ImageList_LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP_128x15), 20, 2, CLR_NONE, IMAGE_BITMAP, LR_DEFAULTCOLOR);
+ ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LRESULT)himl2) == (LRESULT)himl, "TB_SETIMAGELIST failed\n");
+ ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(100, 100), "Unexpected button size\n");
SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(1, 1));
ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(27, 21), "Unexpected button size\n");
- ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, 0) == (LRESULT)himl, "TB_SETIMAGELIST failed\n");
+ ok(SendMessageA(hToolbar, TB_SETIMAGELIST, 0, 0) == (LRESULT)himl2, "TB_SETIMAGELIST failed\n");
ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(27, 7), "Unexpected button size\n");
SendMessageA(hToolbar, TB_SETBUTTONSIZE, 0, MAKELONG(1, 1));
ok(SendMessageA(hToolbar, TB_GETBUTTONSIZE, 0, 0) == MAKELONG(8, 7), "Unexpected button size\n");
@@ -999,6 +1003,108 @@ static void test_sizes(void)
DestroyWindow(hToolbar);
}
+/* Toolbar control has two ways of reacting to a change. We call them a
+ * relayout and recalc. A recalc forces a recompute of values like button size
+ * and top margin (the latter in comctl32 itemOld.hItem);
IdentifyItem(pTreeView->itemNew.hItem);
return 0;
+ case TVN_GETDISPINFOA: {
+ NMTVDISPINFOA *disp = (NMTVDISPINFOA *)lParam;
+ if (disp->item.mask & TVIF_TEXT) {
+ lstrcpyn(disp->item.pszText, TEST_CALLBACK_TEXT, disp->item.cchTextMax);
+ }
+ return 0;
+ }
}
}
return 0;
@@ -683,6 +748,76 @@ static LRESULT CALLBACK MyWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPa
return 0L;
}
+static void TestExpandInvisible(void)
+{
+ static CHAR nodeText[][5] = {"0", "1", "2", "3", "4"};
+ TVINSERTSTRUCTA ins;
+ HTREEITEM node[5];
+ RECT dummyRect;
+ BOOL nodeVisible;
+
+ /* The test builds the following tree and expands then node 1, while node 0 is collapsed.
+ *
+ * 0
+ * |- 1
+ * | |- 2
+ * | |- 3
+ * |- 4
+ *
+ */
+
+ TreeView_DeleteAllItems(hTree);
+
+ ins.hParent = TVI_ROOT;
+ ins.hInsertAfter = TVI_ROOT;
+ U(ins).item.mask = TVIF_TEXT;
+ U(ins).item.pszText = nodeText[0];
+ node[0] = TreeView_InsertItem(hTree, &ins);
+ assert(node[0]);
+
+ ins.hInsertAfter = TVI_LAST;
+ U(ins).item.mask = TVIF_TEXT;
+ ins.hParent = node[0];
+
+ U(ins).item.pszText = nodeText[1];
+ node[1] = TreeView_InsertItem(hTree, &ins);
+ assert(node[1]);
+ U(ins).item.pszText = nodeText[4];
+ node[4] = TreeView_InsertItem(hTree, &ins);
+ assert(node[4]);
+
+ ins.hParent = node[1];
+
+ U(ins).item.pszText = nodeText[2];
+ node[2] = TreeView_InsertItem(hTree, &ins);
+ assert(node[2]);
+ U(ins).item.pszText = nodeText[3];
+ node[3] = TreeView_InsertItem(hTree, &ins);
+ assert(node[3]);
+
+
+ nodeVisible = TreeView_GetItemRect(hTree, node[1], &dummyRect, FALSE);
+ ok(!nodeVisible, "Node 1 should not be visible.\n");
+ nodeVisible = TreeView_GetItemRect(hTree, node[2], &dummyRect, FALSE);
+ ok(!nodeVisible, "Node 2 should not be visible.\n");
+ nodeVisible = TreeView_GetItemRect(hTree, node[3], &dummyRect, FALSE);
+ ok(!nodeVisible, "Node 3 should not be visible.\n");
+ nodeVisible = TreeView_GetItemRect(hTree, node[4], &dummyRect, FALSE);
+ ok(!nodeVisible, "Node 4 should not be visible.\n");
+
+ ok(TreeView_Expand(hTree, node[1], TVE_EXPAND), "Expand of node 1 failed.\n");
+
+ nodeVisible = TreeView_GetItemRect(hTree, node[1], &dummyRect, FALSE);
+ ok(!nodeVisible, "Node 1 should not be visible.\n");
+ nodeVisible = TreeView_GetItemRect(hTree, node[2], &dummyRect, FALSE);
+ ok(!nodeVisible, "Node 2 should not be visible.\n");
+ nodeVisible = TreeView_GetItemRect(hTree, node[3], &dummyRect, FALSE);
+ ok(!nodeVisible, "Node 3 should not be visible.\n");
+ nodeVisible = TreeView_GetItemRect(hTree, node[4], &dummyRect, FALSE);
+ ok(!nodeVisible, "Node 4 should not be visible.\n");
+}
+
+
START_TEST(treeview)
{
HMODULE hComctl32;
@@ -746,6 +881,12 @@ START_TEST(treeview)
/* Sequences tested inside due to number */
TestGetSet();
+ /* Clears all the previous items */
+ TestCallback();
+
+ /* Clears all the previous items */
+ TestExpandInvisible();
+
PostMessageA(hMainWnd, WM_CLOSE, 0, 0);
while(GetMessageA(&msg,0,0,0)) {
TranslateMessage(&msg);
diff --git a/rostests/winetests/comctl32/updown.c b/rostests/winetests/comctl32/updown.c
index 2d6d437c300..433c190ae97 100644
--- a/rostests/winetests/comctl32/updown.c
+++ b/rostests/winetests/comctl32/updown.c
@@ -193,7 +193,7 @@ static const struct message test_updown_destroy_seq[] = {
static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
@@ -262,7 +262,7 @@ struct subclass_info
static LRESULT WINAPI edit_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA);
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
@@ -310,7 +310,7 @@ static HWND create_edit_control(void)
static LRESULT WINAPI updown_subclass_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
struct subclass_info *info = (struct subclass_info *)GetWindowLongPtrA(hwnd, GWLP_USERDATA);
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct message msg;
diff --git a/rostests/winetests/comdlg32/filedlg.c b/rostests/winetests/comdlg32/filedlg.c
index 9c3487f5ed7..9714dda1fe3 100644
--- a/rostests/winetests/comdlg32/filedlg.c
+++ b/rostests/winetests/comdlg32/filedlg.c
@@ -29,7 +29,7 @@
/* ##### */
-static UINT CALLBACK OFNHookProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+static UINT_PTR CALLBACK OFNHookProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
LPNMHDR nmh;
@@ -111,7 +111,7 @@ static void test_DialogCancel(void)
SetLastError(0xdeadbeef);
result = GetOpenFileNameW((LPOPENFILENAMEW) &ofn);
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
- skip("GetOpenFileNameW is not implemented\n");
+ win_skip("GetOpenFileNameW is not implemented\n");
else
{
ok(0 == result, "expected %d, got %d\n", 0, result);
@@ -124,7 +124,7 @@ static void test_DialogCancel(void)
SetLastError(0xdeadbeef);
result = GetSaveFileNameW((LPOPENFILENAMEW) &ofn);
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
- skip("GetSaveFileNameW is not implemented\n");
+ win_skip("GetSaveFileNameW is not implemented\n");
else
{
ok(0 == result, "expected %d, got %d\n", 0, result);
@@ -135,7 +135,7 @@ static void test_DialogCancel(void)
}
}
-static UINT CALLBACK create_view_window2_hook(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam)
+static UINT_PTR CALLBACK create_view_window2_hook(HWND dlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (msg == WM_NOTIFY)
{
@@ -156,7 +156,7 @@ static UINT CALLBACK create_view_window2_hook(HWND dlg, UINT msg, WPARAM wParam,
hr = IShellView_QueryInterface(shell_view, &IID_IShellView2, (void **)&shell_view2);
if (hr == E_NOINTERFACE)
{
- skip("IShellView2 not supported\n");
+ win_skip("IShellView2 not supported\n");
goto cleanup;
}
ok(SUCCEEDED(hr), "QueryInterface returned %#x\n", hr);
diff --git a/rostests/winetests/comdlg32/printdlg.c b/rostests/winetests/comdlg32/printdlg.c
index cb86d62b92b..ec63da9a6c7 100644
--- a/rostests/winetests/comdlg32/printdlg.c
+++ b/rostests/winetests/comdlg32/printdlg.c
@@ -298,6 +298,7 @@ static void test_abort_proc(void)
DOCINFOA doc_info = {0};
PRINTDLGA pd = {0};
char filename[MAX_PATH];
+ int job_id;
if (!GetTempFileNameA(".", "prn", 0, filename))
{
@@ -333,7 +334,18 @@ static void test_abort_proc(void)
doc_info.lpszDocName = "Some document";
doc_info.lpszOutput = filename;
- ok(StartDocA(print_dc, &doc_info) > 0, "StartDocA failed\n");
+ job_id = StartDocA(print_dc, &doc_info);
+
+ ok(job_id > 0 ||
+ GetLastError() == ERROR_SPL_NO_STARTDOC, /* Vista can fail with this error when using the XPS driver */
+ "StartDocA failed ret %d gle %d\n", job_id, GetLastError());
+
+ if(job_id <= 0)
+ {
+ skip("StartDoc failed\n");
+ goto end;
+ }
+
ok(abort_proc_called, "AbortProc didn't get called by StartDoc.\n");
abort_proc_called = FALSE;
@@ -357,6 +369,7 @@ static void test_abort_proc(void)
ok(!abort_proc_called, "AbortProc got called unexpectedly by DeleteDC.\n");
abort_proc_called = FALSE;
+end:
ok(DeleteFileA(filename), "Failed to delete temporary file\n");
}
@@ -374,7 +387,7 @@ START_TEST(printdlg)
/* PrintDlgEx not present before w2k */
if (ptr) {
- skip("%s\n", ptr);
+ win_skip("%s\n", ptr);
return;
}
diff --git a/rostests/winetests/crypt32/chain.c b/rostests/winetests/crypt32/chain.c
index f7efe64eec3..c880df95443 100644
--- a/rostests/winetests/crypt32/chain.c
+++ b/rostests/winetests/crypt32/chain.c
@@ -1184,9 +1184,10 @@ static void checkElementStatus(const CERT_TRUST_STATUS *expected,
ok(got->dwErrorStatus == expected->dwErrorStatus ||
broken((got->dwErrorStatus & ~ignore->dwErrorStatus) ==
(expected->dwErrorStatus & ~ignore->dwErrorStatus)),
- "Chain %d, element [%d,%d]: expected error %08x, got %08x\n",
+ "Chain %d, element [%d,%d]: expected error %08x, got %08x. %08x is "
+ "expected if no valid Verisign root certificate is available.\n",
testIndex, chainIndex, elementIndex, expected->dwErrorStatus,
- got->dwErrorStatus);
+ got->dwErrorStatus, CERT_TRUST_IS_UNTRUSTED_ROOT);
if (got->dwInfoStatus == expected->dwInfoStatus)
ok(got->dwInfoStatus == expected->dwInfoStatus,
"Chain %d, element [%d,%d]: expected info %08x, got %08x\n",
@@ -1264,9 +1265,10 @@ static void checkChainStatus(PCCERT_CHAIN_CONTEXT chain,
~chainStatus->statusToIgnore.dwErrorStatus) ==
(chainStatus->status.dwErrorStatus &
~chainStatus->statusToIgnore.dwErrorStatus)),
- "Chain %d: expected error %08x, got %08x\n",
+ "Chain %d: expected error %08x, got %08x. %08x is expected if no valid "
+ "Verisign root certificate is available.\n",
testIndex, chainStatus->status.dwErrorStatus,
- chain->TrustStatus.dwErrorStatus);
+ chain->TrustStatus.dwErrorStatus, CERT_TRUST_IS_UNTRUSTED_ROOT);
if (todo & TODO_INFO &&
chain->TrustStatus.dwInfoStatus != chainStatus->status.dwInfoStatus)
todo_wine ok(chain->TrustStatus.dwInfoStatus ==
diff --git a/rostests/winetests/crypt32/msg.c b/rostests/winetests/crypt32/msg.c
index 7794f359f61..8ab5625fd8e 100644
--- a/rostests/winetests/crypt32/msg.c
+++ b/rostests/winetests/crypt32/msg.c
@@ -29,7 +29,8 @@
#include "wine/test.h"
-static BOOL have_nt;
+static BOOL have_nt = TRUE;
+static BOOL old_crypt32 = FALSE;
static char oid_rsa_md5[] = szOID_RSA_MD5;
static BOOL (WINAPI * pCryptAcquireContextA)
@@ -196,7 +197,7 @@ static void test_msg_get_param(void)
ret = CryptMsgGetParam(msg, CMSG_TYPE_PARAM, 0, &value, &size);
ok(ret, "CryptMsgGetParam failed: %x\n", GetLastError());
ok(value == CMSG_DATA, "Expected CMSG_DATA, got %d\n", value);
- for (i = CMSG_CONTENT_PARAM; have_nt && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
+ for (i = CMSG_CONTENT_PARAM; !old_crypt32 && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
{
size = 0;
ret = CryptMsgGetParam(msg, i, 0, NULL, &size);
@@ -211,7 +212,7 @@ static void test_msg_get_param(void)
ret = CryptMsgGetParam(msg, CMSG_TYPE_PARAM, 0, &value, &size);
ok(ret, "CryptMsgGetParam failed: %x\n", GetLastError());
ok(value == CMSG_ENVELOPED, "Expected CMSG_ENVELOPED, got %d\n", value);
- for (i = CMSG_CONTENT_PARAM; have_nt && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
+ for (i = CMSG_CONTENT_PARAM; !old_crypt32 && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
{
size = 0;
ret = CryptMsgGetParam(msg, i, 0, NULL, &size);
@@ -226,7 +227,7 @@ static void test_msg_get_param(void)
ret = CryptMsgGetParam(msg, CMSG_TYPE_PARAM, 0, &value, &size);
ok(ret, "CryptMsgGetParam failed: %x\n", GetLastError());
ok(value == CMSG_HASHED, "Expected CMSG_HASHED, got %d\n", value);
- for (i = CMSG_CONTENT_PARAM; have_nt && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
+ for (i = CMSG_CONTENT_PARAM; !old_crypt32 && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
{
size = 0;
ret = CryptMsgGetParam(msg, i, 0, NULL, &size);
@@ -241,7 +242,7 @@ static void test_msg_get_param(void)
ret = CryptMsgGetParam(msg, CMSG_TYPE_PARAM, 0, &value, &size);
ok(ret, "CryptMsgGetParam failed: %x\n", GetLastError());
ok(value == CMSG_SIGNED, "Expected CMSG_SIGNED, got %d\n", value);
- for (i = CMSG_CONTENT_PARAM; have_nt && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
+ for (i = CMSG_CONTENT_PARAM; !old_crypt32 && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
{
size = 0;
ret = CryptMsgGetParam(msg, i, 0, NULL, &size);
@@ -295,7 +296,14 @@ static void check_param(LPCSTR test, HCRYPTMSG msg, DWORD param,
size = 0xdeadbeef;
ret = CryptMsgGetParam(msg, param, 0, NULL, &size);
- ok(ret, "%s: CryptMsgGetParam failed: %08x\n", test, GetLastError());
+ ok(ret || broken(GetLastError() == OSS_LIMITED /* Win9x */ ||
+ GetLastError() == CRYPT_E_INVALID_MSG_TYPE /* Win9x, for some params */),
+ "%s: CryptMsgGetParam failed: %08x\n", test, GetLastError());
+ if (!ret)
+ {
+ win_skip("parameter %d not supported, skipping tests\n", param);
+ return;
+ }
buf = HeapAlloc(GetProcessHeap(), 0, size);
ret = CryptMsgGetParam(msg, param, 0, buf, &size);
ok(ret, "%s: CryptMsgGetParam failed: %08x\n", test, GetLastError());
@@ -400,20 +408,32 @@ static void test_data_msg_update(void)
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, CMSG_DETACHED_FLAG,
CMSG_DATA, NULL, NULL, NULL);
- /* Doesn't appear to be able to update CMSG-DATA with non-final updates */
- SetLastError(0xdeadbeef);
- ret = CryptMsgUpdate(msg, NULL, 0, FALSE);
- ok(!ret && GetLastError() == E_INVALIDARG,
- "Expected E_INVALIDARG, got %x\n", GetLastError());
- SetLastError(0xdeadbeef);
- ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), FALSE);
- ok(!ret && GetLastError() == E_INVALIDARG,
- "Expected E_INVALIDARG, got %x\n", GetLastError());
+ if (have_nt)
+ {
+ /* Doesn't appear to be able to update CMSG-DATA with non-final updates.
+ * On Win9x, this sometimes succeeds, sometimes fails with
+ * GetLastError() == 0, so it's not worth checking there.
+ */
+ SetLastError(0xdeadbeef);
+ ret = CryptMsgUpdate(msg, NULL, 0, FALSE);
+ ok(!ret &&
+ (GetLastError() == E_INVALIDARG ||
+ broken(GetLastError() == ERROR_SUCCESS)), /* Older NT4 */
+ "Expected E_INVALIDARG, got %x\n", GetLastError());
+ SetLastError(0xdeadbeef);
+ ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), FALSE);
+ ok(!ret &&
+ (GetLastError() == E_INVALIDARG ||
+ broken(GetLastError() == ERROR_SUCCESS)), /* Older NT4 */
+ "Expected E_INVALIDARG, got %x\n", GetLastError());
+ }
+ else
+ skip("not updating CMSG_DATA with a non-final update\n");
ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
CryptMsgClose(msg);
- if (have_nt)
+ if (!old_crypt32)
{
/* Calling update after opening with an empty stream info (with a bogus
* output function) yields an error:
@@ -481,11 +501,11 @@ static void test_data_msg_get_param(void)
NULL, &streamInfo);
SetLastError(0xdeadbeef);
ret = CryptMsgGetParam(msg, CMSG_BARE_CONTENT_PARAM, 0, NULL, &size);
- ok(!ret && GetLastError() == E_INVALIDARG,
+ ok((!ret && GetLastError() == E_INVALIDARG) || broken(ret /* Win9x */),
"Expected E_INVALIDARG, got %x\n", GetLastError());
SetLastError(0xdeadbeef);
ret = CryptMsgGetParam(msg, CMSG_CONTENT_PARAM, 0, NULL, &size);
- ok(!ret && GetLastError() == E_INVALIDARG,
+ ok((!ret && GetLastError() == E_INVALIDARG) || broken(ret /* Win9x */),
"Expected E_INVALIDARG, got %x\n", GetLastError());
CryptMsgClose(msg);
}
@@ -798,15 +818,19 @@ static void test_hash_msg_get_param(void)
/* Content and bare content are always gettable for non-streamed messages */
size = 0;
ret = CryptMsgGetParam(msg, CMSG_CONTENT_PARAM, 0, NULL, &size);
- ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == OSS_LIMITED /* Win9x */),
+ "CryptMsgGetParam failed: %08x\n", GetLastError());
size = 0;
ret = CryptMsgGetParam(msg, CMSG_BARE_CONTENT_PARAM, 0, NULL, &size);
- ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == OSS_LIMITED /* Win9x */),
+ "CryptMsgGetParam failed: %08x\n", GetLastError());
/* For an encoded hash message, the hash data aren't available */
SetLastError(0xdeadbeef);
ret = CryptMsgGetParam(msg, CMSG_HASH_DATA_PARAM, 0, NULL, &size);
- ok(!ret && GetLastError() == CRYPT_E_INVALID_MSG_TYPE,
- "Expected CRYPT_E_INVALID_MSG_TYPE, got %08x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_INVALID_MSG_TYPE ||
+ GetLastError() == OSS_LIMITED /* Win9x */),
+ "Expected CRYPT_E_INVALID_MSG_TYPE or OSS_LIMITED, got %08x\n",
+ GetLastError());
/* The hash is also available. */
size = 0;
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, NULL, &size);
@@ -821,7 +845,8 @@ static void test_hash_msg_get_param(void)
ok(!ret &&
(GetLastError() == NTE_BAD_HASH_STATE /* NT */ ||
GetLastError() == NTE_BAD_ALGID /* 9x */ ||
- GetLastError() == CRYPT_E_MSG_ERROR /* Vista */),
+ GetLastError() == CRYPT_E_MSG_ERROR /* Vista */ ||
+ broken(GetLastError() == ERROR_SUCCESS) /* Some Win9x */),
"Expected NTE_BAD_HASH_STATE or NTE_BAD_ALGID or CRYPT_E_MSG_ERROR, got 0x%x\n", GetLastError());
/* Even after a final update, the hash data aren't available */
@@ -832,11 +857,14 @@ static void test_hash_msg_get_param(void)
/* The version is also available, and should be zero for this message. */
size = 0;
ret = CryptMsgGetParam(msg, CMSG_VERSION_PARAM, 0, NULL, &size);
- ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == CRYPT_E_INVALID_MSG_TYPE /* Win9x */),
+ "CryptMsgGetParam failed: %08x\n", GetLastError());
size = sizeof(value);
ret = CryptMsgGetParam(msg, CMSG_VERSION_PARAM, 0, &value, &size);
- ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
- ok(value == 0, "Expected version 0, got %d\n", value);
+ ok(ret || broken(GetLastError() == CRYPT_E_INVALID_MSG_TYPE /* Win9x */),
+ "CryptMsgGetParam failed: %08x\n", GetLastError());
+ if (ret)
+ ok(value == 0, "Expected version 0, got %d\n", value);
/* As usual, the type isn't available. */
ret = CryptMsgGetParam(msg, CMSG_TYPE_PARAM, 0, NULL, &size);
ok(!ret, "Expected failure\n");
@@ -847,12 +875,14 @@ static void test_hash_msg_get_param(void)
/* Streamed messages don't allow you to get the content or bare content. */
SetLastError(0xdeadbeef);
ret = CryptMsgGetParam(msg, CMSG_CONTENT_PARAM, 0, NULL, &size);
- ok(!ret && GetLastError() == E_INVALIDARG,
- "Expected E_INVALIDARG, got %x\n", GetLastError());
+ ok(!ret && (GetLastError() == E_INVALIDARG ||
+ GetLastError() == OSS_LIMITED /* Win9x */),
+ "Expected E_INVALIDARG or OSS_LIMITED, got %x\n", GetLastError());
SetLastError(0xdeadbeef);
ret = CryptMsgGetParam(msg, CMSG_BARE_CONTENT_PARAM, 0, NULL, &size);
- ok(!ret && GetLastError() == E_INVALIDARG,
- "Expected E_INVALIDARG, got %x\n", GetLastError());
+ ok(!ret && (GetLastError() == E_INVALIDARG ||
+ GetLastError() == OSS_LIMITED /* Win9x */),
+ "Expected E_INVALIDARG or OSS_LIMITED, got %x\n", GetLastError());
/* The hash is still available. */
size = 0;
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, NULL, &size);
@@ -870,7 +900,8 @@ static void test_hash_msg_get_param(void)
ok(!ret &&
(GetLastError() == NTE_BAD_HASH_STATE /* NT */ ||
GetLastError() == NTE_BAD_ALGID /* 9x */ ||
- GetLastError() == CRYPT_E_MSG_ERROR /* Vista */),
+ GetLastError() == CRYPT_E_MSG_ERROR /* Vista */ ||
+ broken(GetLastError() == ERROR_SUCCESS) /* Some Win9x */),
"Expected NTE_BAD_HASH_STATE or NTE_BAD_ALGID or CRYPT_E_MSG_ERROR, got 0x%x\n", GetLastError());
CryptMsgClose(msg);
@@ -1055,26 +1086,31 @@ static void test_signed_msg_open(void)
SetLastError(0xdeadbeef);
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_SIGNED, &signInfo,
NULL, NULL);
- /* NT: E_INVALIDARG, 9x: unchanged */
- ok(!msg && (GetLastError() == E_INVALIDARG || GetLastError() == 0xdeadbeef),
- "Expected E_INVALIDARG or 0xdeadbeef, got 0x%x\n", GetLastError());
+ /* NT: E_INVALIDARG, 9x: unchanged or CRYPT_E_UNKNOWN_ALGO */
+ ok(!msg && (GetLastError() == E_INVALIDARG || GetLastError() == 0xdeadbeef
+ || GetLastError() == CRYPT_E_UNKNOWN_ALGO),
+ "Expected E_INVALIDARG or 0xdeadbeef or CRYPT_E_UNKNOWN_ALGO, got 0x%x\n",
+ GetLastError());
certInfo.SerialNumber.cbData = sizeof(serialNum);
certInfo.SerialNumber.pbData = serialNum;
SetLastError(0xdeadbeef);
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_SIGNED, &signInfo,
NULL, NULL);
- /* NT: E_INVALIDARG, 9x: unchanged */
- ok(!msg && (GetLastError() == E_INVALIDARG || GetLastError() == 0xdeadbeef),
- "Expected E_INVALIDARG or 0xdeadbeef, got 0x%x\n", GetLastError());
+ /* NT: E_INVALIDARG, 9x: unchanged or CRYPT_E_UNKNOWN_ALGO */
+ ok(!msg && (GetLastError() == E_INVALIDARG || GetLastError() == 0xdeadbeef
+ || GetLastError() == CRYPT_E_UNKNOWN_ALGO),
+ "Expected E_INVALIDARG or 0xdeadbeef or CRYPT_E_UNKNOWN_ALGO, got 0x%x\n",
+ GetLastError());
certInfo.Issuer.cbData = sizeof(encodedCommonName);
certInfo.Issuer.pbData = encodedCommonName;
SetLastError(0xdeadbeef);
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_SIGNED, &signInfo,
NULL, NULL);
- ok(!msg && GetLastError() == E_INVALIDARG,
- "Expected E_INVALIDARG, got %x\n", GetLastError());
+ ok(!msg && (GetLastError() == E_INVALIDARG ||
+ GetLastError() == CRYPT_E_UNKNOWN_ALGO),
+ "Expected E_INVALIDARG or CRYPT_E_UNKNOWN_ALGO, got %x\n", GetLastError());
/* The signer's hCryptProv must be set to something. Whether it's usable
* or not will be checked after the hash algorithm is checked (see next
@@ -1211,8 +1247,10 @@ static void test_signed_msg_update(void)
*/
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, NULL, 0, TRUE);
- ok(!ret && (GetLastError() == NTE_BAD_KEYSET ||
- GetLastError() == NTE_NO_KEY),
+ ok(!ret &&
+ (GetLastError() == NTE_BAD_KEYSET ||
+ GetLastError() == NTE_NO_KEY ||
+ broken(GetLastError() == ERROR_SUCCESS)), /* Some Win9x */
"Expected NTE_BAD_KEYSET or NTE_NO_KEY, got %x\n", GetLastError());
ret = CryptImportKey(signer.hCryptProv, privKey, sizeof(privKey),
0, 0, &key);
@@ -1656,7 +1694,8 @@ static void test_signed_msg_encoding(void)
detachedSignedContent, sizeof(detachedSignedContent));
SetLastError(0xdeadbeef);
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 1, NULL, &size);
- ok(!ret && GetLastError() == CRYPT_E_INVALID_INDEX,
+ ok(!ret && (GetLastError() == CRYPT_E_INVALID_INDEX ||
+ broken(GetLastError() == CRYPT_E_INVALID_MSG_TYPE /* Win9x */)),
"Expected CRYPT_E_INVALID_INDEX, got %x\n", GetLastError());
check_param("detached signed encoded signer", msg, CMSG_ENCODED_SIGNER,
signedEncodedSigner, sizeof(signedEncodedSigner));
@@ -1808,7 +1847,13 @@ static void test_signed_msg_get_param(void)
/* Content and bare content are always gettable */
size = 0;
ret = CryptMsgGetParam(msg, CMSG_CONTENT_PARAM, 0, NULL, &size);
- ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
+ ok(ret || broken(!ret /* Win9x */), "CryptMsgGetParam failed: %08x\n",
+ GetLastError());
+ if (!ret)
+ {
+ skip("message parameters are broken, skipping tests\n");
+ return;
+ }
size = 0;
ret = CryptMsgGetParam(msg, CMSG_BARE_CONTENT_PARAM, 0, NULL, &size);
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
@@ -1913,8 +1958,10 @@ static void test_signed_msg_get_param(void)
*/
size = sizeof(value);
ret = CryptMsgGetParam(msg, CMSG_VERSION_PARAM, 0, &value, &size);
- ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
- ok(value == CMSG_SIGNED_DATA_V1, "expected version 1, got %d\n", value);
+ ok(ret || broken(GetLastError() == CRYPT_E_INVALID_MSG_TYPE),
+ "CryptMsgGetParam failed: %08x\n", GetLastError());
+ if (ret)
+ ok(value == CMSG_SIGNED_DATA_V1, "expected version 1, got %d\n", value);
/* Apparently the encoded signer can be retrieved.. */
ret = CryptMsgGetParam(msg, CMSG_ENCODED_SIGNER, 0, NULL, &size);
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
@@ -1950,7 +1997,9 @@ static void test_signed_msg_get_param(void)
ok(msg != NULL, "CryptMsgOpenToEncode failed: %x\n", GetLastError());
size = sizeof(value);
ret = CryptMsgGetParam(msg, CMSG_VERSION_PARAM, 0, &value, &size);
- ok(value == CMSG_SIGNED_DATA_V3, "expected version 3, got %d\n", value);
+ ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
+ if (ret)
+ ok(value == CMSG_SIGNED_DATA_V3, "expected version 3, got %d\n", value);
/* Even for a CMS message, the signer can be retrieved.. */
ret = CryptMsgGetParam(msg, CMSG_ENCODED_SIGNER, 0, NULL, &size);
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
@@ -2026,7 +2075,7 @@ static void test_decode_msg_update(void)
ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
CryptMsgClose(msg);
- if (have_nt)
+ if (!old_crypt32)
{
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, &streamInfo);
/* Updating a message that has a NULL stream callback fails */
@@ -2084,16 +2133,20 @@ static void test_decode_msg_update(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
- ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
- "Expected CRYPT_E_ASN1_BADTAG, got %x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == OSS_PDU_MISMATCH /* Win9x */),
+ "Expected CRYPT_E_ASN1_BADTAG or OSS_PDU_MISMATCH, got %x\n",
+ GetLastError());
CryptMsgClose(msg);
/* and as the final update in streaming mode.. */
streamInfo.pfnStreamOutput = nop_stream_output;
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, &streamInfo);
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
- ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
- "Expected CRYPT_E_ASN1_BADTAG, got %x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == OSS_PDU_MISMATCH /* Win9x */),
+ "Expected CRYPT_E_ASN1_BADTAG or OSS_PDU_MISMATCH, got %x\n",
+ GetLastError());
CryptMsgClose(msg);
/* and even as a non-final update in streaming mode. */
streamInfo.pfnStreamOutput = nop_stream_output;
@@ -2101,8 +2154,10 @@ static void test_decode_msg_update(void)
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), FALSE);
todo_wine
- ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
- "Expected CRYPT_E_ASN1_BADTAG, got %x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == OSS_PDU_MISMATCH /* Win9x */),
+ "Expected CRYPT_E_ASN1_BADTAG or OSS_PDU_MISMATCH, got %x\n",
+ GetLastError());
CryptMsgClose(msg);
/* An empty message can be opened with undetermined type.. */
@@ -2117,8 +2172,10 @@ static void test_decode_msg_update(void)
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent),
TRUE);
- ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
- "Expected CRYPT_E_ASN1_BADTAG, got %x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == OSS_PDU_MISMATCH /* Win9x */),
+ "Expected CRYPT_E_ASN1_BADTAG or OSS_PDU_MISMATCH, got %x\n",
+ GetLastError());
CryptMsgClose(msg);
/* On the other hand, decoding the bare content of an empty message fails
* with unspecified type..
@@ -2127,8 +2184,10 @@ static void test_decode_msg_update(void)
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, dataEmptyBareContent,
sizeof(dataEmptyBareContent), TRUE);
- ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
- "Expected CRYPT_E_ASN1_BADTAG, got %x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == OSS_PDU_MISMATCH /* Win9x */),
+ "Expected CRYPT_E_ASN1_BADTAG or OSS_PDU_MISMATCH, got %x\n",
+ GetLastError());
CryptMsgClose(msg);
/* but succeeds with explicit type. */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, 0, NULL,
@@ -2150,15 +2209,19 @@ static void test_decode_msg_update(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, hashEmptyContent, sizeof(hashEmptyContent), TRUE);
- ok(ret, "CryptMsgUpdate failed: %08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "CryptMsgUpdate failed: %08x\n", GetLastError());
CryptMsgClose(msg);
/* while with specified type it fails. */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_HASHED, 0, NULL,
NULL);
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, hashEmptyContent, sizeof(hashEmptyContent), TRUE);
- ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
- "Expected CRYPT_E_ASN1_BADTAG, got %x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == OSS_PDU_MISMATCH /* some Win9x */ ||
+ GetLastError() == OSS_DATA_ERROR /* some Win9x */),
+ "Expected CRYPT_E_ASN1_BADTAG or OSS_PDU_MISMATCH or OSS_DATA_ERROR, got %x\n",
+ GetLastError());
CryptMsgClose(msg);
/* On the other hand, decoding the bare content of an empty hash message
* fails with unspecified type..
@@ -2167,15 +2230,19 @@ static void test_decode_msg_update(void)
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, hashEmptyBareContent,
sizeof(hashEmptyBareContent), TRUE);
- ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
- "Expected CRYPT_E_ASN1_BADTAG, got %x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == OSS_PDU_MISMATCH /* some Win9x */ ||
+ GetLastError() == OSS_DATA_ERROR /* some Win9x */),
+ "Expected CRYPT_E_ASN1_BADTAG or OSS_PDU_MISMATCH or OSS_DATA_ERROR, got %x\n",
+ GetLastError());
CryptMsgClose(msg);
/* but succeeds with explicit type. */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_HASHED, 0, NULL,
NULL);
ret = CryptMsgUpdate(msg, hashEmptyBareContent,
sizeof(hashEmptyBareContent), TRUE);
- ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* win9x */),
+ "CryptMsgUpdate failed: %x\n", GetLastError());
CryptMsgClose(msg);
/* And again, opening a (non-empty) hash message with unspecified type
@@ -2191,8 +2258,11 @@ static void test_decode_msg_update(void)
NULL);
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, hashContent, sizeof(hashContent), TRUE);
- ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
- "Expected CRYPT_E_ASN1_BADTAG, got %x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == OSS_PDU_MISMATCH /* some Win9x */ ||
+ GetLastError() == OSS_DATA_ERROR /* some Win9x */),
+ "Expected CRYPT_E_ASN1_BADTAG or OSS_PDU_MISMATCH or OSS_DATA_ERROR, got %x\n",
+ GetLastError());
CryptMsgClose(msg);
/* and decoding the bare content of a non-empty hash message fails with
* unspecified type..
@@ -2200,8 +2270,11 @@ static void test_decode_msg_update(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, hashBareContent, sizeof(hashBareContent), TRUE);
- ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
- "Expected CRYPT_E_ASN1_BADTAG, got %x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == OSS_PDU_MISMATCH /* some Win9x */ ||
+ GetLastError() == OSS_DATA_ERROR /* some Win9x */),
+ "Expected CRYPT_E_ASN1_BADTAG or OSS_PDU_MISMATCH or OSS_DATA_ERROR, got %x\n",
+ GetLastError());
CryptMsgClose(msg);
/* but succeeds with explicit type. */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_HASHED, 0, NULL,
@@ -2227,8 +2300,10 @@ static void test_decode_msg_update(void)
SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, signedWithCertAndCrlBareContent,
sizeof(signedWithCertAndCrlBareContent), TRUE);
- ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
- "Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "Expected CRYPT_E_ASN1_BADTAG or OSS_DATA_ERROR, got %08x\n",
+ GetLastError());
CryptMsgClose(msg);
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_SIGNED, 0, NULL,
NULL);
@@ -2378,12 +2453,16 @@ static void test_decode_msg_get_param(void)
sizeof(hashParam));
check_param("hash computed hash", msg, CMSG_COMPUTED_HASH_PARAM,
hashParam, sizeof(hashParam));
- /* Curiously, getting the hash of index 1 succeeds, even though there's
- * only one hash.
+ /* Curiously, on NT-like systems, getting the hash of index 1 succeeds,
+ * even though there's only one hash.
*/
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 1, NULL, &size);
- ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
- buf = CryptMemAlloc(size);
+ ok(ret || GetLastError() == OSS_DATA_ERROR /* Win9x */,
+ "CryptMsgGetParam failed: %08x\n", GetLastError());
+ if (ret)
+ buf = CryptMemAlloc(size);
+ else
+ buf = NULL;
if (buf)
{
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 1, buf, &size);
@@ -2412,7 +2491,8 @@ static void test_decode_msg_get_param(void)
ok(value == 1, "Expected 1 signer, got %d\n", value);
size = 0;
ret = CryptMsgGetParam(msg, CMSG_SIGNER_INFO_PARAM, 0, NULL, &size);
- ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "CryptMsgGetParam failed: %08x\n", GetLastError());
if (ret)
buf = CryptMemAlloc(size);
else
@@ -2434,7 +2514,8 @@ static void test_decode_msg_get_param(void)
/* Getting the CMS signer info of a PKCS7 message is possible. */
size = 0;
ret = CryptMsgGetParam(msg, CMSG_CMS_SIGNER_INFO_PARAM, 0, NULL, &size);
- ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == CRYPT_E_INVALID_MSG_TYPE /* Win9x */),
+ "CryptMsgGetParam failed: %08x\n", GetLastError());
if (ret)
buf = CryptMemAlloc(size);
else
@@ -2589,7 +2670,7 @@ static void test_msg_control(void)
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, NULL, NULL,
NULL);
/* either with no prior update.. */
- for (i = 1; have_nt && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
+ for (i = 1; !old_crypt32 && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
{
SetLastError(0xdeadbeef);
ret = CryptMsgControl(msg, 0, i, NULL);
@@ -2598,7 +2679,7 @@ static void test_msg_control(void)
}
ret = CryptMsgUpdate(msg, NULL, 0, TRUE);
/* or after an update. */
- for (i = 1; have_nt && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
+ for (i = 1; !old_crypt32 && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
{
SetLastError(0xdeadbeef);
ret = CryptMsgControl(msg, 0, i, NULL);
@@ -2613,7 +2694,7 @@ static void test_msg_control(void)
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_HASHED, &hashInfo,
NULL, NULL);
/* either with no prior update.. */
- for (i = 1; have_nt && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
+ for (i = 1; !old_crypt32 && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
{
SetLastError(0xdeadbeef);
ret = CryptMsgControl(msg, 0, i, NULL);
@@ -2622,7 +2703,7 @@ static void test_msg_control(void)
}
ret = CryptMsgUpdate(msg, NULL, 0, TRUE);
/* or after an update. */
- for (i = 1; have_nt && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
+ for (i = 1; !old_crypt32 && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
{
SetLastError(0xdeadbeef);
ret = CryptMsgControl(msg, 0, i, NULL);
@@ -2636,7 +2717,7 @@ static void test_msg_control(void)
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_SIGNED, &signInfo,
NULL, NULL);
/* either before an update.. */
- for (i = 1; have_nt && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
+ for (i = 1; !old_crypt32 && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
{
SetLastError(0xdeadbeef);
ret = CryptMsgControl(msg, 0, i, NULL);
@@ -2645,7 +2726,7 @@ static void test_msg_control(void)
}
ret = CryptMsgUpdate(msg, NULL, 0, TRUE);
/* or after an update. */
- for (i = 1; have_nt && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
+ for (i = 1; !old_crypt32 && (i <= CMSG_CTRL_ADD_CMS_SIGNER_INFO); i++)
{
SetLastError(0xdeadbeef);
ret = CryptMsgControl(msg, 0, i, NULL);
@@ -2679,7 +2760,7 @@ static void test_msg_control(void)
"Expected CRYPT_E_INVALID_MSG_TYPE, got %08x\n", GetLastError());
CryptMsgClose(msg);
- if (have_nt)
+ if (!old_crypt32)
{
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_HASHED, 0, NULL,
NULL);
@@ -2788,8 +2869,10 @@ static void test_msg_control(void)
*/
SetLastError(0xdeadbeef);
ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
- ok(!ret && GetLastError() == CRYPT_E_SIGNER_NOT_FOUND,
- "Expected CRYPT_E_SIGNER_NOT_FOUND, got %08x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_SIGNER_NOT_FOUND ||
+ GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "Expected CRYPT_E_SIGNER_NOT_FOUND or OSS_DATA_ERROR, got %08x\n",
+ GetLastError());
/* The cert info is expected to have an issuer, serial number, and public
* key info set.
*/
@@ -2799,8 +2882,9 @@ static void test_msg_control(void)
certInfo.Issuer.pbData = encodedCommonName;
SetLastError(0xdeadbeef);
ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
- ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
- "Expected CRYPT_E_ASN1_EOD, got %08x\n", GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_ASN1_EOD ||
+ GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "Expected CRYPT_E_ASN1_EOD or OSS_DATA_ERROR, got %08x\n", GetLastError());
CryptMsgClose(msg);
/* This cert has a public key, but it's not in a usable form */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_SIGNED, 0, NULL,
@@ -2876,7 +2960,8 @@ static void test_msg_control(void)
CryptMsgUpdate(msg, signedWithCertWithValidPubKeyContent,
sizeof(signedWithCertWithValidPubKeyContent), TRUE);
ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
- ok(ret, "CryptMsgControl failed: %08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "CryptMsgControl failed: %08x\n", GetLastError());
CryptMsgClose(msg);
/* Test verifying signature of a detached signed message */
@@ -2888,15 +2973,19 @@ static void test_msg_control(void)
/* Can't verify the sig without having updated the data */
SetLastError(0xdeadbeef);
ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
- ok(!ret && GetLastError() == NTE_BAD_SIGNATURE,
- "expected NTE_BAD_SIGNATURE, got %08x\n", GetLastError());
+ ok(!ret && (GetLastError() == NTE_BAD_SIGNATURE ||
+ GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "expected NTE_BAD_SIGNATURE or OSS_DATA_ERROR, got %08x\n",
+ GetLastError());
/* Now that the signature's been checked, can't do the final update */
+ SetLastError(0xdeadbeef);
ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
todo_wine
- ok(!ret &&
+ ok((!ret &&
(GetLastError() == NTE_BAD_HASH_STATE ||
GetLastError() == NTE_BAD_ALGID || /* Win9x */
- GetLastError() == CRYPT_E_MSG_ERROR), /* Vista */
+ GetLastError() == CRYPT_E_MSG_ERROR)) || /* Vista */
+ broken(ret), /* Win9x */
"expected NTE_BAD_HASH_STATE or NTE_BAD_ALGID or CRYPT_E_MSG_ERROR, "
"got %08x\n", GetLastError());
CryptMsgClose(msg);
@@ -2911,7 +3000,8 @@ static void test_msg_control(void)
ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
ok(ret, "CryptMsgUpdate failed: %08x\n", GetLastError());
ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
- ok(ret, "CryptMsgControl failed: %08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "CryptMsgControl failed: %08x\n", GetLastError());
CryptMsgClose(msg);
}
@@ -3013,17 +3103,22 @@ static void test_msg_get_and_verify_signer(void)
CryptMsgUpdate(msg, signedWithCertWithValidPubKeyContent,
sizeof(signedWithCertWithValidPubKeyContent), TRUE);
ret = CryptMsgGetAndVerifySigner(msg, 0, NULL, 0, NULL, NULL);
- ok(ret, "CryptMsgGetAndVerifySigner failed: 0x%08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "CryptMsgGetAndVerifySigner failed: 0x%08x\n", GetLastError());
/* the signer index can be retrieved, .. */
signerIndex = 0xdeadbeef;
ret = CryptMsgGetAndVerifySigner(msg, 0, NULL, 0, NULL, &signerIndex);
- ok(ret, "CryptMsgGetAndVerifySigner failed: 0x%08x\n", GetLastError());
- ok(signerIndex == 0, "expected 0, got %d\n", signerIndex);
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "CryptMsgGetAndVerifySigner failed: 0x%08x\n", GetLastError());
+ if (ret)
+ ok(signerIndex == 0, "expected 0, got %d\n", signerIndex);
/* as can the signer cert. */
signer = (PCCERT_CONTEXT)0xdeadbeef;
ret = CryptMsgGetAndVerifySigner(msg, 0, NULL, 0, &signer, NULL);
- ok(ret, "CryptMsgGetAndVerifySigner failed: 0x%08x\n", GetLastError());
- ok(signer != NULL && signer != (PCCERT_CONTEXT)0xdeadbeef,
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "CryptMsgGetAndVerifySigner failed: 0x%08x\n", GetLastError());
+ if (ret)
+ ok(signer != NULL && signer != (PCCERT_CONTEXT)0xdeadbeef,
"expected a valid signer\n");
if (signer && signer != (PCCERT_CONTEXT)0xdeadbeef)
CertFreeCertificateContext(signer);
@@ -3041,7 +3136,8 @@ static void test_msg_get_and_verify_signer(void)
SetLastError(0xdeadbeef);
ret = CryptMsgGetAndVerifySigner(msg, 0, NULL, CMSG_TRUSTED_SIGNER_FLAG,
NULL, NULL);
- ok(!ret && GetLastError() == CRYPT_E_NO_TRUSTED_SIGNER,
+ ok(!ret && (GetLastError() == CRYPT_E_NO_TRUSTED_SIGNER ||
+ broken(GetLastError() == OSS_DATA_ERROR /* Win9x */)),
"expected CRYPT_E_NO_TRUSTED_SIGNER, got 0x%08x\n", GetLastError());
/* Specifying CMSG_TRUSTED_SIGNER_FLAG and an empty cert store also causes
* the message signer not to be found.
@@ -3051,20 +3147,22 @@ static void test_msg_get_and_verify_signer(void)
SetLastError(0xdeadbeef);
ret = CryptMsgGetAndVerifySigner(msg, 1, &store, CMSG_TRUSTED_SIGNER_FLAG,
NULL, NULL);
- ok(!ret && GetLastError() == CRYPT_E_NO_TRUSTED_SIGNER,
+ ok(!ret && (GetLastError() == CRYPT_E_NO_TRUSTED_SIGNER ||
+ broken(GetLastError() == OSS_DATA_ERROR /* Win9x */)),
"expected CRYPT_E_NO_TRUSTED_SIGNER, got 0x%08x\n", GetLastError());
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
v1CertWithValidPubKey, sizeof(v1CertWithValidPubKey),
CERT_STORE_ADD_ALWAYS, NULL);
- ok(ret, "CertAddEncodedCertificateToStore failed: 0x%08x\n",
- GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* Win98 */),
+ "CertAddEncodedCertificateToStore failed: 0x%08x\n", GetLastError());
/* Specifying CMSG_TRUSTED_SIGNER_FLAG with a cert store that contains
* the signer succeeds.
*/
SetLastError(0xdeadbeef);
ret = CryptMsgGetAndVerifySigner(msg, 1, &store, CMSG_TRUSTED_SIGNER_FLAG,
NULL, NULL);
- ok(ret, "CryptMsgGetAndVerifySigner failed: 0x%08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* Win9x */),
+ "CryptMsgGetAndVerifySigner failed: 0x%08x\n", GetLastError());
CertCloseStore(store, 0);
CryptMsgClose(msg);
}
@@ -3076,6 +3174,13 @@ START_TEST(msg)
if (!have_nt)
win_skip("Win9x crashes on some parameter checks\n");
+ /* I_CertUpdateStore can be used for verification if crypt32 is new enough */
+ if (!GetProcAddress(GetModuleHandleA("crypt32.dll"), "I_CertUpdateStore"))
+ {
+ win_skip("Some tests will crash on older crypt32 implementations\n");
+ old_crypt32 = TRUE;
+ }
+
/* Basic parameter checking tests */
test_msg_open_to_encode();
test_msg_open_to_decode();
diff --git a/rostests/winetests/fusion/asmcache.c b/rostests/winetests/fusion/asmcache.c
index 727f98d2015..81c0e762d4f 100644
--- a/rostests/winetests/fusion/asmcache.c
+++ b/rostests/winetests/fusion/asmcache.c
@@ -306,7 +306,7 @@ static struct _tagASSEMBLY
},
/* IMAGE_OPTIONAL_HEADER32 */
{
- IMAGE_NT_OPTIONAL_HDR_MAGIC, /* Magic */
+ IMAGE_NT_OPTIONAL_HDR32_MAGIC, /* Magic */
8, /* MajorLinkerVersion */
0, /* MinorLinkerVersion */
0x400, /* SizeOfCode */
diff --git a/rostests/winetests/fusion/asmenum.c b/rostests/winetests/fusion/asmenum.c
index 54c134004bc..48f7b2a97b1 100644
--- a/rostests/winetests/fusion/asmenum.c
+++ b/rostests/winetests/fusion/asmenum.c
@@ -240,11 +240,19 @@ static BOOL enum_gac_assemblies(struct list *assemblies, int depth, LPSTR path)
if (depth == 0)
{
- sprintf(parent, "%s, ", ffd.cFileName);
+ lstrcpyA(parent, ffd.cFileName);
}
else if (depth == 1)
{
char culture[MAX_PATH];
+ char dll[MAX_PATH], exe[MAX_PATH];
+
+ /* Directories with no dll or exe will not be enumerated */
+ sprintf(dll, "%s\\%s\\%s.dll", path, ffd.cFileName, parent);
+ sprintf(exe, "%s\\%s\\%s.exe", path, ffd.cFileName, parent);
+ if (GetFileAttributesA(dll) == INVALID_FILE_ATTRIBUTES &&
+ GetFileAttributesA(exe) == INVALID_FILE_ATTRIBUTES)
+ continue;
ptr = strstr(ffd.cFileName, "_");
*ptr = '\0';
@@ -260,7 +268,7 @@ static BOOL enum_gac_assemblies(struct list *assemblies, int depth, LPSTR path)
ptr = strchr(ptr, '_');
ptr++;
- sprintf(buf, "Version=%s, Culture=%s, PublicKeyToken=%s",
+ sprintf(buf, ", Version=%s, Culture=%s, PublicKeyToken=%s",
ffd.cFileName, culture, ptr);
lstrcpyA(disp, parent);
lstrcatA(disp, buf);
@@ -434,8 +442,7 @@ static void test_enumerate_name(void)
hr = IAssemblyName_GetDisplayName(next, buf, &size, 0);
to_multibyte(disp, buf);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(!lstrcmpA(disp, exp[0]) ||
- !lstrcmpA(disp, exp[1]),
+ ok(!lstrcmpA(disp, exp[0]),
"Expected \"%s\" or \"%s\", got \"%s\"\n", exp[0], exp[1], disp);
IAssemblyName_Release(next);
@@ -450,7 +457,7 @@ static void test_enumerate_name(void)
to_multibyte(disp, buf);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
ok(!lstrcmpA(disp, exp[1]) ||
- !lstrcmpA(disp, exp[2]),
+ !lstrcmpA(disp, exp[2]), /* Win98 */
"Expected \"%s\" or \"%s\", got \"%s\"\n", exp[1], exp[2], disp);
IAssemblyName_Release(next);
@@ -464,7 +471,9 @@ static void test_enumerate_name(void)
hr = IAssemblyName_GetDisplayName(next, buf, &size, 0);
to_multibyte(disp, buf);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(!lstrcmpA(disp, exp[2]), "Expected \"%s\", got \"%s\"\n", exp[2], disp);
+ ok(!lstrcmpA(disp, exp[2]) ||
+ !lstrcmpA(disp, exp[1]), /* Win98 */
+ "Expected \"%s\" or \"%s\", got \"%s\"\n", exp[2], exp[1], disp);
IAssemblyName_Release(next);
@@ -498,7 +507,9 @@ static void test_enumerate_name(void)
hr = IAssemblyName_GetDisplayName(next, buf, &size, 0);
to_multibyte(disp, buf);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(!lstrcmpA(disp, exp[4]), "Expected \"%s\", got \"%s\"\n", exp[4], disp);
+ ok(!lstrcmpA(disp, exp[4]) ||
+ !lstrcmpA(disp, exp[5]), /* Win98 */
+ "Expected \"%s\" or \"%s\", got \"%s\"\n", exp[4], exp[5], disp);
IAssemblyName_Release(next);
@@ -511,7 +522,9 @@ static void test_enumerate_name(void)
hr = IAssemblyName_GetDisplayName(next, buf, &size, 0);
to_multibyte(disp, buf);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(!lstrcmpA(disp, exp[5]), "Expected \"%s\", got \"%s\"\n", exp[5], disp);
+ ok(!lstrcmpA(disp, exp[5]) ||
+ !lstrcmpA(disp, exp[4]), /* Win98 */
+ "Expected \"%s\" or \"%s\", got \"%s\"\n", exp[5], exp[4], disp);
IAssemblyName_Release(next);
@@ -606,7 +619,7 @@ static void test_enumerate_name(void)
to_multibyte(disp, buf);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
ok(!lstrcmpA(disp, exp[1]) ||
- !lstrcmpA(disp, exp[2]),
+ !lstrcmpA(disp, exp[2]), /* Win98 */
"Expected \"%s\" or \"%s\", got \"%s\"\n", exp[1], exp[2], disp);
IAssemblyName_Release(next);
@@ -620,9 +633,9 @@ static void test_enumerate_name(void)
hr = IAssemblyName_GetDisplayName(next, buf, &size, 0);
to_multibyte(disp, buf);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(!lstrcmpA(disp, exp[1]) ||
- !lstrcmpA(disp, exp[2]),
- "Expected \"%s\" or \"%s\", got \"%s\"\n", exp[1], exp[2], disp);
+ ok(!lstrcmpA(disp, exp[2]) ||
+ !lstrcmpA(disp, exp[1]), /* Win98 */
+ "Expected \"%s\" or \"%s\", got \"%s\"\n", exp[2], exp[1], disp);
IAssemblyName_Release(next);
diff --git a/rostests/winetests/fusion/asmname.c b/rostests/winetests/fusion/asmname.c
index a926b8757c8..442f00f7c45 100644
--- a/rostests/winetests/fusion/asmname.c
+++ b/rostests/winetests/fusion/asmname.c
@@ -417,7 +417,8 @@ static void test_CreateAssemblyNameObject(void)
size = MAX_PATH;
hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
- ok(hr == FUSION_E_INVALID_NAME,
+ ok(hr == FUSION_E_INVALID_NAME ||
+ broken(hr == E_INVALIDARG), /* .NET 1.x */
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
size = MAX_PATH;
@@ -430,12 +431,17 @@ static void test_CreateAssemblyNameObject(void)
hi = 0xbeefcace;
lo = 0xcafebabe;
hr = IAssemblyName_GetVersion(name, &hi, &lo);
- ok(hr == FUSION_E_INVALID_NAME,
+ ok(hr == FUSION_E_INVALID_NAME ||
+ broken(hr == S_OK), /* .NET 1.x */
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
ok(hi == 0, "Expected 0, got %08x\n", hi);
ok(lo == 0, "Expected 0, got %08x\n", lo);
- test_assembly_name_props(name, defaults);
+ if (hr == S_OK)
+ win_skip(".NET 1.x doesn't handle ASM_NAME_PROCESSOR_ID_ARRAY"
+ " and ASM_NAME_OSINFO_ARRAY correctly\n");
+ else
+ test_assembly_name_props(name, defaults);
IAssemblyName_Release(name);
@@ -447,7 +453,8 @@ static void test_CreateAssemblyNameObject(void)
size = MAX_PATH;
hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
- ok(hr == FUSION_E_INVALID_NAME,
+ ok(hr == FUSION_E_INVALID_NAME ||
+ broken(hr == S_OK), /* .NET 1.x */
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
size = MAX_PATH;
@@ -460,12 +467,17 @@ static void test_CreateAssemblyNameObject(void)
hi = 0xbeefcace;
lo = 0xcafebabe;
hr = IAssemblyName_GetVersion(name, &hi, &lo);
- ok(hr == FUSION_E_INVALID_NAME,
+ ok(hr == FUSION_E_INVALID_NAME ||
+ broken(hr == S_OK), /* .NET 1.x */
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
ok(hi == 0, "Expected 0, got %08x\n", hi);
ok(lo == 0, "Expected 0, got %08x\n", lo);
- test_assembly_name_props(name, emptyname);
+ if (hr == S_OK)
+ win_skip(".NET 1.x doesn't handle ASM_NAME_PROCESSOR_ID_ARRAY"
+ " and ASM_NAME_OSINFO_ARRAY correctly\n");
+ else
+ test_assembly_name_props(name, emptyname);
IAssemblyName_Release(name);
@@ -492,12 +504,17 @@ static void test_CreateAssemblyNameObject(void)
hi = 0xbeefcace;
lo = 0xcafebabe;
hr = IAssemblyName_GetVersion(name, &hi, &lo);
- ok(hr == FUSION_E_INVALID_NAME,
+ ok(hr == FUSION_E_INVALID_NAME ||
+ broken(hr == S_OK), /* .NET 1.x */
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
ok(hi == 0, "Expected 0, got %08x\n", hi);
ok(lo == 0, "Expected 0, got %08x\n", lo);
- test_assembly_name_props(name, winename);
+ if (hr == S_OK)
+ win_skip(".NET 1.x doesn't handle ASM_NAME_PROCESSOR_ID_ARRAY"
+ " and ASM_NAME_OSINFO_ARRAY correctly\n");
+ else
+ test_assembly_name_props(name, winename);
IAssemblyName_Release(name);
@@ -526,7 +543,8 @@ static void test_CreateAssemblyNameObject(void)
hi = 0xbeefcace;
lo = 0xcafebabe;
hr = IAssemblyName_GetVersion(name, &hi, &lo);
- ok(hr == FUSION_E_INVALID_NAME,
+ ok(hr == FUSION_E_INVALID_NAME ||
+ broken(hr == S_OK), /* .NET 1.x */
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
ok(hi == 0, "Expected 0, got %08x\n", hi);
ok(lo == 0, "Expected 0, got %08x\n", lo);
@@ -589,9 +607,12 @@ static void test_CreateAssemblyNameObject(void)
hi = 0xbeefcace;
lo = 0xcafebabe;
hr = IAssemblyName_GetVersion(name, &hi, &lo);
- ok(hr == FUSION_E_INVALID_NAME,
+ ok(hr == FUSION_E_INVALID_NAME ||
+ broken(hr == S_OK), /* .NET 1.x */
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
- ok(hi == 0, "Expected 0, got %08x\n", hi);
+ ok(hi == 0 ||
+ broken(hi == 0x10005), /* .NET 1.x */
+ "Expected 0, got %08x\n", hi);
ok(lo == 0, "Expected 0, got %08x\n", lo);
test_assembly_name_props(name, badvername);
@@ -621,7 +642,8 @@ static void test_CreateAssemblyNameObject(void)
hi = 0xbeefcace;
lo = 0xcafebabe;
hr = IAssemblyName_GetVersion(name, &hi, &lo);
- ok(hr == FUSION_E_INVALID_NAME,
+ ok(hr == FUSION_E_INVALID_NAME ||
+ broken(hr == S_OK), /* .NET 1.x */
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
ok(hi == 0, "Expected 0, got %08x\n", hi);
ok(lo == 0, "Expected 0, got %08x\n", lo);
@@ -653,7 +675,8 @@ static void test_CreateAssemblyNameObject(void)
hi = 0xbeefcace;
lo = 0xcafebabe;
hr = IAssemblyName_GetVersion(name, &hi, &lo);
- ok(hr == FUSION_E_INVALID_NAME,
+ ok(hr == FUSION_E_INVALID_NAME ||
+ broken(hr == S_OK), /* .NET 1.x */
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
ok(hi == 0, "Expected 0, got %08x\n", hi);
ok(lo == 0, "Expected 0, got %08x\n", lo);
@@ -685,7 +708,8 @@ static void test_CreateAssemblyNameObject(void)
hi = 0xbeefcace;
lo = 0xcafebabe;
hr = IAssemblyName_GetVersion(name, &hi, &lo);
- ok(hr == FUSION_E_INVALID_NAME,
+ ok(hr == FUSION_E_INVALID_NAME ||
+ broken(hr == S_OK), /* .NET 1.x */
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
ok(hi == 0, "Expected 0, got %08x\n", hi);
ok(lo == 0, "Expected 0, got %08x\n", lo);
@@ -694,10 +718,52 @@ static void test_CreateAssemblyNameObject(void)
IAssemblyName_Release(name);
+ /* invalid property */
+ to_widechar(namestr, "wine, BadProp=42");
+ name = NULL;
+ hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(name != NULL, "Expected non-NULL name\n");
+
+ size = MAX_PATH;
+ hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ todo_wine
+ {
+ ok_aw("wine", str);
+ ok(size == 5, "Expected 5, got %d\n", size);
+ }
+
+ size = MAX_PATH;
+ str[0] = '\0';
+ hr = IAssemblyName_GetName(name, &size, str);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok_aw("wine", str);
+ ok(size == 5, "Expected 5, got %d\n", size);
+
+ hi = 0xbeefcace;
+ lo = 0xcafebabe;
+ hr = IAssemblyName_GetVersion(name, &hi, &lo);
+ ok(hr == FUSION_E_INVALID_NAME ||
+ broken(hr == S_OK), /* .NET 1.x */
+ "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
+ ok(hi == 0, "Expected 0, got %08x\n", hi);
+ ok(lo == 0, "Expected 0, got %08x\n", lo);
+
+ test_assembly_name_props(name, winename);
+
+ IAssemblyName_Release(name);
+
/* PublicKeyToken is not 16 chars long */
to_widechar(namestr, "wine, PublicKeyToken=567890abcdef");
name = (IAssemblyName *)0xdeadbeef;
hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
+ if (hr == S_OK && name != (IAssemblyName *)0xdeadbeef)
+ {
+ win_skip(".NET 1.x doesn't check PublicKeyToken correctly\n");
+ IAssemblyName_Release(name);
+ return;
+ }
ok(hr == FUSION_E_INVALID_NAME,
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
@@ -736,41 +802,6 @@ static void test_CreateAssemblyNameObject(void)
ok(hr == FUSION_E_INVALID_NAME,
"Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
-
- /* invalid property */
- to_widechar(namestr, "wine, BadProp=42");
- name = NULL;
- hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
- ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(name != NULL, "Expected non-NULL name\n");
-
- size = MAX_PATH;
- hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
- ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- todo_wine
- {
- ok_aw("wine", str);
- ok(size == 5, "Expected 5, got %d\n", size);
- }
-
- size = MAX_PATH;
- str[0] = '\0';
- hr = IAssemblyName_GetName(name, &size, str);
- ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok_aw("wine", str);
- ok(size == 5, "Expected 5, got %d\n", size);
-
- hi = 0xbeefcace;
- lo = 0xcafebabe;
- hr = IAssemblyName_GetVersion(name, &hi, &lo);
- ok(hr == FUSION_E_INVALID_NAME,
- "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
- ok(hi == 0, "Expected 0, got %08x\n", hi);
- ok(lo == 0, "Expected 0, got %08x\n", lo);
-
- test_assembly_name_props(name, winename);
-
- IAssemblyName_Release(name);
}
START_TEST(asmname)
diff --git a/rostests/winetests/gdi32/bitmap.c b/rostests/winetests/gdi32/bitmap.c
index a47dc3898a5..a0d4531d511 100755
--- a/rostests/winetests/gdi32/bitmap.c
+++ b/rostests/winetests/gdi32/bitmap.c
@@ -72,7 +72,7 @@ static void test_bitmap_info(HBITMAP hbm, INT expected_depth, const BITMAPINFOHE
BITMAP bm;
BITMAP bma[2];
INT ret, width_bytes;
- char buf[512], buf_cmp[512];
+ BYTE buf[512], buf_cmp[512];
DWORD gle;
ret = GetObject(hbm, sizeof(bm), &bm);
@@ -101,7 +101,9 @@ static void test_bitmap_info(HBITMAP hbm, INT expected_depth, const BITMAPINFOHE
memset(buf, 0xAA, sizeof(buf));
ret = GetBitmapBits(hbm, sizeof(buf), buf);
ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight);
- ok(!memcmp(buf, buf_cmp, sizeof(buf)), "buffers do not match\n");
+ ok(!memcmp(buf, buf_cmp, sizeof(buf)) ||
+ broken(memcmp(buf, buf_cmp, sizeof(buf))), /* win9x doesn't init the bitmap bits */
+ "buffers do not match, depth %d\n", bmih->biBitCount);
/* test various buffer sizes for GetObject */
ret = GetObject(hbm, sizeof(*bma) * 2, bma);
@@ -142,7 +144,12 @@ static void test_createdibitmap(void)
bmih.biPlanes = 1;
bmih.biBitCount = 32;
bmih.biCompression = BI_RGB;
-
+
+ hbm = CreateDIBitmap(hdc, NULL, CBM_INIT, NULL, NULL, 0);
+ ok(hbm == NULL, "CreateDIBitmap should fail\n");
+ hbm = CreateDIBitmap(hdc, NULL, 0, NULL, NULL, 0);
+ ok(hbm == NULL, "CreateDIBitmap should fail\n");
+
/* First create an un-initialised bitmap. The depth of the bitmap
should match that of the hdc and not that supplied in bmih.
*/
@@ -339,7 +346,7 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER
/* test various buffer sizes for GetObject */
ret = GetObject(hbm, 0, NULL);
- ok(ret == sizeof(bm), "wrong size %d\n", ret);
+ ok(ret == sizeof(bm) || broken(ret == sizeof(DIBSECTION) /* Win9x */), "wrong size %d\n", ret);
ret = GetObject(hbm, sizeof(*dsa) * 2, dsa);
ok(ret == sizeof(*dsa) || broken(ret == sizeof(*dsa) * 2 /* Win9x */), "wrong size %d\n", ret);
@@ -367,7 +374,7 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER
memset(&ds, 0xAA, sizeof(ds));
ret = GetObject(hbm, sizeof(ds) - 4, &ds);
- ok(ret == sizeof(ds.dsBm), "wrong size %d\n", ret);
+ ok(ret == sizeof(ds.dsBm) || broken(ret == (sizeof(ds) - 4) /* Win9x */), "wrong size %d\n", ret);
ok(ds.dsBm.bmWidth == bmih->biWidth, "%u != %u\n", ds.dsBmih.biWidth, bmih->biWidth);
ok(ds.dsBm.bmHeight == bmih->biHeight, "%u != %u\n", ds.dsBmih.biHeight, bmih->biHeight);
ok(ds.dsBm.bmBits == bits, "%p != %p\n", ds.dsBm.bmBits, bits);
@@ -376,7 +383,7 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER
ok(ret == 0, "%d != 0\n", ret);
ret = GetObject(hbm, 1, &ds);
- ok(ret == 0, "%d != 0\n", ret);
+ ok(ret == 0 || broken(ret == 1 /* Win9x */), "%d != 0\n", ret);
}
#define test_color_todo(got, exp, txt, todo) \
@@ -396,6 +403,64 @@ static void test_dib_info(HBITMAP hbm, const void *bits, const BITMAPINFOHEADER
test_color_todo(c, exp, GetPixel, todo_getp); \
}
+static void test_dib_bits_access( HBITMAP hdib, void *bits )
+{
+ MEMORY_BASIC_INFORMATION info;
+ char bmibuf[sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD)];
+ DWORD data[256];
+ BITMAPINFO *pbmi = (BITMAPINFO *)bmibuf;
+ HDC hdc = GetDC(0);
+ char filename[MAX_PATH];
+ HANDLE file;
+ DWORD written;
+ INT ret;
+
+ ok(VirtualQuery(bits, &info, sizeof(info)) == sizeof(info),
+ "VirtualQuery failed\n");
+ ok(info.BaseAddress == bits, "%p != %p\n", info.BaseAddress, bits);
+ ok(info.AllocationBase == bits, "%p != %p\n", info.AllocationBase, bits);
+ ok(info.AllocationProtect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.AllocationProtect);
+ ok(info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State);
+ ok(info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect);
+ ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type);
+
+ memset( pbmi, 0, sizeof(bmibuf) );
+ memset( data, 0xcc, sizeof(data) );
+ pbmi->bmiHeader.biSize = sizeof(pbmi->bmiHeader);
+ pbmi->bmiHeader.biHeight = 16;
+ pbmi->bmiHeader.biWidth = 16;
+ pbmi->bmiHeader.biBitCount = 32;
+ pbmi->bmiHeader.biPlanes = 1;
+ pbmi->bmiHeader.biCompression = BI_RGB;
+
+ ret = SetDIBits( hdc, hdib, 0, 16, data, pbmi, DIB_RGB_COLORS );
+ ok(ret == 16 ||
+ broken(ret == 0), /* win9x */
+ "SetDIBits failed: expected 16 got %d\n", ret);
+
+ ok(VirtualQuery(bits, &info, sizeof(info)) == sizeof(info),
+ "VirtualQuery failed\n");
+ ok(info.BaseAddress == bits, "%p != %p\n", info.BaseAddress, bits);
+ ok(info.AllocationBase == bits, "%p != %p\n", info.AllocationBase, bits);
+ ok(info.AllocationProtect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.AllocationProtect);
+ ok(info.State == MEM_COMMIT, "%x != MEM_COMMIT\n", info.State);
+ ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type);
+ /* it has been protected now */
+ todo_wine ok(info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect);
+
+ /* try writing protected bits to a file */
+
+ GetTempFileNameA( ".", "dib", 0, filename );
+ file = CreateFileA( filename, GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
+ CREATE_ALWAYS, 0, 0 );
+ ok( file != INVALID_HANDLE_VALUE, "failed to open %s error %u\n", filename, GetLastError() );
+ ret = WriteFile( file, bits, 8192, &written, NULL );
+ ok( ret, "WriteFile failed error %u\n", GetLastError() );
+ if (ret) ok( written == 8192, "only wrote %u bytes\n", written );
+ CloseHandle( file );
+ DeleteFileA( filename );
+}
+
static void test_dibsections(void)
{
HDC hdc, hdcmem, hdcmem2;
@@ -455,6 +520,8 @@ static void test_dibsections(void)
ok(info.Protect == PAGE_READWRITE, "%x != PAGE_READWRITE\n", info.Protect);
ok(info.Type == MEM_PRIVATE, "%x != MEM_PRIVATE\n", info.Type);
+ test_dib_bits_access( hdib, bits );
+
test_dib_info(hdib, bits, &pbmi->bmiHeader);
DeleteObject(hdib);
@@ -658,7 +725,8 @@ static void test_dibsections(void)
hdib = CreateDIBSection(hdc, pbmi, DIB_PAL_COLORS, (void**)&bits, NULL, 0);
ok(hdib != NULL, "CreateDIBSection failed\n");
ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIB Section\n");
- ok(dibsec.dsBmih.biClrUsed == 2,
+ ok(dibsec.dsBmih.biClrUsed == 2 ||
+ broken(dibsec.dsBmih.biClrUsed == 0), /* win9x */
"created DIBSection: wrong biClrUsed field: %u, should be: %u\n", dibsec.dsBmih.biClrUsed, 2);
/* The colour table has already been grabbed from the dc, so we select back the
@@ -750,7 +818,8 @@ static void test_dibsections(void)
hdib = CreateDIBSection(hdc, pbmi, DIB_PAL_COLORS, (void**)&bits, NULL, 0);
ok(hdib != NULL, "CreateDIBSection failed\n");
ok(GetObject(hdib, sizeof(DIBSECTION), &dibsec) != 0, "GetObject failed for DIB Section\n");
- ok(dibsec.dsBmih.biClrUsed == 256,
+ ok(dibsec.dsBmih.biClrUsed == 256 ||
+ broken(dibsec.dsBmih.biClrUsed == 0), /* win9x */
"created DIBSection: wrong biClrUsed field: %u, should be: %u\n", dibsec.dsBmih.biClrUsed, 256);
test_dib_info(hdib, bits, &pbmi->bmiHeader);
@@ -1018,9 +1087,12 @@ static void test_bitmap(void)
SetLastError(0xdeadbeef);
hbmp = CreateBitmap(0x7ffffff + 1, 1, 1, 1, NULL);
- ok(!hbmp, "CreateBitmap should fail\n");
- ok(GetLastError() == ERROR_INVALID_PARAMETER,
- "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
+ ok(!hbmp || broken(hbmp != NULL /* Win9x */), "CreateBitmap should fail\n");
+ if (!hbmp)
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
+ "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
+ else
+ DeleteObject(hbmp);
hbmp = CreateBitmap(15, 15, 1, 1, NULL);
assert(hbmp != NULL);
@@ -1040,7 +1112,8 @@ static void test_bitmap(void)
assert(sizeof(buf) == sizeof(buf_cmp));
ret = GetBitmapBits(hbmp, 0, NULL);
- ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight);
+ ok(ret == bm.bmWidthBytes * bm.bmHeight || broken(ret == 0 /* Win9x */),
+ "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight);
memset(buf_cmp, 0xAA, sizeof(buf_cmp));
memset(buf_cmp, 0, bm.bmWidthBytes * bm.bmHeight);
@@ -1048,7 +1121,9 @@ static void test_bitmap(void)
memset(buf, 0xAA, sizeof(buf));
ret = GetBitmapBits(hbmp, sizeof(buf), buf);
ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight);
- ok(!memcmp(buf, buf_cmp, sizeof(buf)), "buffers do not match\n");
+ ok(!memcmp(buf, buf_cmp, sizeof(buf)) ||
+ broken(memcmp(buf, buf_cmp, sizeof(buf))), /* win9x doesn't init the bitmap bits */
+ "buffers do not match\n");
hbmp_old = SelectObject(hdc, hbmp);
@@ -1066,7 +1141,9 @@ static void test_bitmap(void)
memset(buf, 0xAA, sizeof(buf));
ret = GetBitmapBits(hbmp, sizeof(buf), buf);
ok(ret == bm.bmWidthBytes * bm.bmHeight, "%d != %d\n", ret, bm.bmWidthBytes * bm.bmHeight);
- ok(!memcmp(buf, buf_cmp, sizeof(buf)), "buffers do not match\n");
+ ok(!memcmp(buf, buf_cmp, sizeof(buf)) ||
+ broken(memcmp(buf, buf_cmp, sizeof(buf))), /* win9x doesn't init the bitmap bits */
+ "buffers do not match\n");
hbmp_old = SelectObject(hdc, hbmp_old);
ok(hbmp_old == hbmp, "wrong old bitmap %p\n", hbmp_old);
@@ -1323,6 +1400,8 @@ static void test_GetDIBits_selected_DDB(BOOL monochrome)
/* Get the palette indices */
res = GetDIBits(dc, ddb, 0, 0, NULL, info2, DIB_PAL_COLORS);
+ if (res == 0 && GetLastError() == ERROR_INVALID_PARAMETER) /* Win9x */
+ res = GetDIBits(dc, ddb, 0, height, NULL, info2, DIB_PAL_COLORS);
ok(res, "GetDIBits failed\n");
for (i=0;i < 1 << info->bmiHeader.biSizeImage; i++)
@@ -1367,6 +1446,13 @@ static void test_GetDIBits(void)
0,0,0,0, 0xff,0xff,0,0, 0,0,0,0, 0xff,0xff,0,0,
0,0,0,0, 0xff,0xff,0,0, 0,0,0,0, 0xff,0xff,0,0
};
+ static const BYTE dib_bits_1_9x[16 * 4] =
+ {
+ 0,0,0xaa,0xaa, 0xff,0xff,0xaa,0xaa, 0,0,0xaa,0xaa, 0xff,0xff,0xaa,0xaa,
+ 0,0,0xaa,0xaa, 0xff,0xff,0xaa,0xaa, 0,0,0xaa,0xaa, 0xff,0xff,0xaa,0xaa,
+ 0,0,0xaa,0xaa, 0xff,0xff,0xaa,0xaa, 0,0,0xaa,0xaa, 0xff,0xff,0xaa,0xaa,
+ 0,0,0xaa,0xaa, 0xff,0xff,0xaa,0xaa, 0,0,0xaa,0xaa, 0xff,0xff,0xaa,0xaa
+ };
/* 2-bytes aligned 24-bit bitmap data: 16x16 */
static const BYTE bmp_bits_24[16 * 16*3] =
{
@@ -1465,7 +1551,7 @@ static void test_GetDIBits(void)
ok(!bm.bmBits, "wrong bmBits %p\n", bm.bmBits);
bytes = GetBitmapBits(hbmp, 0, NULL);
- ok(bytes == sizeof(bmp_bits_1), "expected 16*2 got %d bytes\n", bytes);
+ ok(bytes == sizeof(bmp_bits_1) || broken(bytes == 0 /* Win9x */), "expected 16*2 got %d bytes\n", bytes);
bytes = GetBitmapBits(hbmp, sizeof(buf), buf);
ok(bytes == sizeof(bmp_bits_1), "expected 16*2 got %d bytes\n", bytes);
ok(!memcmp(buf, bmp_bits_1, sizeof(bmp_bits_1)), "bitmap bits don't match\n");
@@ -1483,7 +1569,9 @@ static void test_GetDIBits(void)
SetLastError(0xdeadbeef);
lines = GetDIBits(0, hbmp, 0, bm.bmHeight, buf, bi, DIB_RGB_COLORS);
ok(lines == 0, "GetDIBits copied %d lines with hdc = 0\n", lines);
- ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %u\n", GetLastError());
+ ok(GetLastError() == ERROR_INVALID_PARAMETER ||
+ broken(GetLastError() == 0xdeadbeef), /* winnt */
+ "wrong error %u\n", GetLastError());
ok(bi->bmiHeader.biSizeImage == 0, "expected 0, got %u\n", bi->bmiHeader.biSizeImage);
memset(buf, 0xAA, sizeof(buf));
@@ -1491,7 +1579,9 @@ static void test_GetDIBits(void)
lines = GetDIBits(hdc, hbmp, 0, bm.bmHeight, buf, bi, DIB_RGB_COLORS);
ok(lines == bm.bmHeight, "GetDIBits copied %d lines of %d, error %u\n",
lines, bm.bmHeight, GetLastError());
- ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_1), "expected 16*4, got %u\n", bi->bmiHeader.biSizeImage);
+ ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_1) ||
+ broken(bi->bmiHeader.biSizeImage == 0), /* win9x */
+ "expected 16*4, got %u\n", bi->bmiHeader.biSizeImage);
/* the color table consists of black and white */
ok(bi->bmiColors[0].rgbRed == 0 && bi->bmiColors[0].rgbGreen == 0 &&
@@ -1514,16 +1604,21 @@ static void test_GetDIBits(void)
}
/* returned bits are DWORD aligned and upside down */
-todo_wine
- ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)), "DIB bits don't match\n");
+ ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)) ||
+ broken(!memcmp(buf, dib_bits_1_9x, sizeof(dib_bits_1_9x))), /* Win9x, WinME */
+ "DIB bits don't match\n");
/* Test the palette indices */
memset(bi->bmiColors, 0xAA, sizeof(RGBQUAD) * 256);
SetLastError(0xdeadbeef);
lines = GetDIBits(hdc, hbmp, 0, 0, NULL, bi, DIB_PAL_COLORS);
-
- ok(((WORD*)bi->bmiColors)[0] == 0, "Color 0 is %d\n", ((WORD*)bi->bmiColors)[0]);
- ok(((WORD*)bi->bmiColors)[1] == 1, "Color 1 is %d\n", ((WORD*)bi->bmiColors)[1]);
+ if (lines == 0 && GetLastError() == ERROR_INVALID_PARAMETER)
+ win_skip("Win9x/WinMe doesn't handle 0 for the number of scan lines\n");
+ else
+ {
+ ok(((WORD*)bi->bmiColors)[0] == 0, "Color 0 is %d\n", ((WORD*)bi->bmiColors)[0]);
+ ok(((WORD*)bi->bmiColors)[1] == 1, "Color 1 is %d\n", ((WORD*)bi->bmiColors)[1]);
+ }
for (i = 2; i < 256; i++)
ok(((WORD*)bi->bmiColors)[i] == 0xAAAA, "Color %d is %d\n", i, ((WORD*)bi->bmiColors)[1]);
@@ -1542,7 +1637,9 @@ todo_wine
lines = GetDIBits(hdc, hbmp, 0, bm.bmHeight, buf, bi, DIB_RGB_COLORS);
ok(lines == bm.bmHeight, "GetDIBits copied %d lines of %d, error %u\n",
lines, bm.bmHeight, GetLastError());
- ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_24), "expected 16*16*3, got %u\n", bi->bmiHeader.biSizeImage);
+ ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_24) ||
+ broken(bi->bmiHeader.biSizeImage == 0), /* win9x */
+ "expected 16*16*3, got %u\n", bi->bmiHeader.biSizeImage);
/* the color table doesn't exist for 24-bit images */
for (i = 0; i < 256; i++)
@@ -1570,7 +1667,9 @@ todo_wine
memset(&bm, 0xAA, sizeof(bm));
bytes = GetObject(hbmp, sizeof(bm), &bm);
ok(bytes == sizeof(bm), "GetObject returned %d\n", bytes);
- ok(bm.bmType == 0, "wrong bmType %d\n", bm.bmType);
+ ok(bm.bmType == 0 ||
+ broken(bm.bmType == 21072), /* win9x */
+ "wrong bmType %d\n", bm.bmType);
ok(bm.bmWidth == 16, "wrong bmWidth %d\n", bm.bmWidth);
ok(bm.bmHeight == 16, "wrong bmHeight %d\n", bm.bmHeight);
ok(bm.bmWidthBytes == BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel), "wrong bmWidthBytes %d\n", bm.bmWidthBytes);
@@ -1579,8 +1678,9 @@ todo_wine
ok(!bm.bmBits, "wrong bmBits %p\n", bm.bmBits);
bytes = GetBitmapBits(hbmp, 0, NULL);
- ok(bytes == bm.bmWidthBytes * bm.bmHeight, "expected %d got %d bytes\n",
- bm.bmWidthBytes * bm.bmHeight, bytes);
+ ok(bytes == bm.bmWidthBytes * bm.bmHeight ||
+ broken(bytes == 0), /* win9x */
+ "expected %d got %d bytes\n", bm.bmWidthBytes * bm.bmHeight, bytes);
bytes = GetBitmapBits(hbmp, sizeof(buf), buf);
ok(bytes == bm.bmWidthBytes * bm.bmHeight, "expected %d got %d bytes\n",
bm.bmWidthBytes * bm.bmHeight, bytes);
@@ -1600,7 +1700,9 @@ todo_wine
lines = GetDIBits(hdc, hbmp, 0, bm.bmHeight, buf, bi, DIB_RGB_COLORS);
ok(lines == bm.bmHeight, "GetDIBits copied %d lines of %d, error %u\n",
lines, bm.bmHeight, GetLastError());
- ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_1), "expected 16*4, got %u\n", bi->bmiHeader.biSizeImage);
+ ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_1) ||
+ broken(bi->bmiHeader.biSizeImage == 0), /* win9x */
+ "expected 16*4, got %u\n", bi->bmiHeader.biSizeImage);
/* the color table consists of black and white */
ok(bi->bmiColors[0].rgbRed == 0 && bi->bmiColors[0].rgbGreen == 0 &&
@@ -1624,15 +1726,21 @@ todo_wine
/* returned bits are DWORD aligned and upside down */
todo_wine
- ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)), "DIB bits don't match\n");
+ ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)) ||
+ broken(!memcmp(buf, dib_bits_1_9x, sizeof(dib_bits_1_9x))), /* Win9x, WinME */
+ "DIB bits don't match\n");
/* Test the palette indices */
memset(bi->bmiColors, 0xAA, sizeof(RGBQUAD) * 256);
SetLastError(0xdeadbeef);
lines = GetDIBits(hdc, hbmp, 0, 0, NULL, bi, DIB_PAL_COLORS);
-
- ok(((WORD*)bi->bmiColors)[0] == 0, "Color 0 is %d\n", ((WORD*)bi->bmiColors)[0]);
- ok(((WORD*)bi->bmiColors)[1] == 1, "Color 1 is %d\n", ((WORD*)bi->bmiColors)[1]);
+ if (lines == 0 && GetLastError() == ERROR_INVALID_PARAMETER)
+ win_skip("Win9x/WinMe doesn't handle 0 for the number of scan lines\n");
+ else
+ {
+ ok(((WORD*)bi->bmiColors)[0] == 0, "Color 0 is %d\n", ((WORD*)bi->bmiColors)[0]);
+ ok(((WORD*)bi->bmiColors)[1] == 1, "Color 1 is %d\n", ((WORD*)bi->bmiColors)[1]);
+ }
for (i = 2; i < 256; i++)
ok(((WORD*)bi->bmiColors)[i] == 0xAAAA, "Color %d is %d\n", i, ((WORD*)bi->bmiColors)[i]);
@@ -1651,7 +1759,9 @@ todo_wine
lines = GetDIBits(hdc, hbmp, 0, bm.bmHeight, buf, bi, DIB_RGB_COLORS);
ok(lines == bm.bmHeight, "GetDIBits copied %d lines of %d, error %u\n",
lines, bm.bmHeight, GetLastError());
- ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_24), "expected 16*16*3, got %u\n", bi->bmiHeader.biSizeImage);
+ ok(bi->bmiHeader.biSizeImage == sizeof(dib_bits_24) ||
+ broken(bi->bmiHeader.biSizeImage == 0), /* win9x */
+ "expected 16*16*3, got %u\n", bi->bmiHeader.biSizeImage);
/* the color table doesn't exist for 24-bit images */
for (i = 0; i < 256; i++)
@@ -1731,7 +1841,9 @@ static void test_GetDIBits_BI_BITFIELDS(void)
ok( bitmasks[0] != 0, "red mask is not set\n" );
ok( bitmasks[1] != 0, "green mask is not set\n" );
ok( bitmasks[2] != 0, "blue mask is not set\n" );
- ok( dibinfo->bmiHeader.biSizeImage != 0xdeadbeef, "size image not set\n" );
+ ok( dibinfo->bmiHeader.biSizeImage != 0xdeadbeef ||
+ broken(dibinfo->bmiHeader.biSizeImage == 0xdeadbeef), /* win9x */
+ "size image not set\n" );
/* now with bits and 0 lines */
memset(dibinfo, 0, sizeof(dibinfo_buf));
@@ -1834,7 +1946,9 @@ static void test_select_object(void)
memset(&bm, 0xAA, sizeof(bm));
bytes = GetObject(hbm, sizeof(bm), &bm);
ok(bytes == sizeof(bm), "GetObject returned %d\n", bytes);
- ok(bm.bmType == 0, "wrong bmType %d\n", bm.bmType);
+ ok(bm.bmType == 0 ||
+ broken(bm.bmType == 21072), /* win9x */
+ "wrong bmType %d\n", bm.bmType);
ok(bm.bmWidth == 10, "wrong bmWidth %d\n", bm.bmWidth);
ok(bm.bmHeight == 10, "wrong bmHeight %d\n", bm.bmHeight);
ok(bm.bmWidthBytes == BITMAP_GetWidthBytes(bm.bmWidth, bm.bmBitsPixel), "wrong bmWidthBytes %d\n", bm.bmWidthBytes);
@@ -1910,7 +2024,9 @@ static void test_CreateBitmap(void)
"0: %p, 1: %p, 4: %p, 5: %p, curObj1 %p, old1 %p\n",
bm, bm1, bm4, bm5, curObj1, old1);
ok(bm != bm2 && bm != bm3, "0: %p, 2: %p, 3: %p\n", bm, bm2, bm3);
- ok(bm != curObj2 /* XP */ || bm == curObj2 /* Win9x */,
+todo_wine
+ ok(bm != curObj2 || /* WinXP */
+ broken(bm == curObj2) /* Win9x */,
"0: %p, curObj2 %p\n", bm, curObj2);
ok(old2 == 0, "old2 %p\n", old2);
@@ -1922,7 +2038,6 @@ static void test_CreateBitmap(void)
test_mono_1x1_bmp(bm5);
test_mono_1x1_bmp(old1);
test_mono_1x1_bmp(curObj1);
- test_mono_1x1_bmp(curObj2);
DeleteObject(bm);
DeleteObject(bm1);
@@ -1956,11 +2071,17 @@ static void test_CreateBitmap(void)
bmp.bmPlanes = 1;
bmp.bmBitsPixel = i;
bmp.bmBits = NULL;
+ SetLastError(0xdeadbeef);
bm = CreateBitmapIndirect(&bmp);
if(i > 32) {
DWORD error = GetLastError();
- ok(bm == 0, "CreateBitmapIndirect for %d bpp succeeded\n", i);
- ok(error == ERROR_INVALID_PARAMETER, "Got error %d, expected ERROR_INVALID_PARAMETER\n", error);
+ ok(bm == 0 ||
+ broken(bm != 0), /* Win9x and WinMe */
+ "CreateBitmapIndirect for %d bpp succeeded\n", i);
+ ok(error == ERROR_INVALID_PARAMETER ||
+ broken(error == 0xdeadbeef), /* Win9x and WinME */
+ "Got error %d, expected ERROR_INVALID_PARAMETER\n", error);
+ DeleteObject(bm);
continue;
}
ok(bm != 0, "CreateBitmapIndirect error %u\n", GetLastError());
@@ -1978,7 +2099,9 @@ static void test_CreateBitmap(void)
} else if(i <= 32) {
expect = 32;
}
- ok(bmp.bmBitsPixel == expect, "CreateBitmapIndirect for a %d bpp bitmap created a %d bpp bitmap, expected %d\n",
+ ok(bmp.bmBitsPixel == expect ||
+ broken(bmp.bmBitsPixel == i), /* Win9x and WinMe */
+ "CreateBitmapIndirect for a %d bpp bitmap created a %d bpp bitmap, expected %d\n",
i, bmp.bmBitsPixel, expect);
DeleteObject(bm);
}
@@ -2013,21 +2136,27 @@ static void test_bitmapinfoheadersize(void)
SetLastError(0xdeadbeef);
hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0);
- ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError());
+ ok(hdib != NULL ||
+ broken(!hdib), /* Win98, WinMe */
+ "CreateDIBSection error %d\n", GetLastError());
DeleteObject(hdib);
bmi.bmiHeader.biSize = sizeof(BITMAPINFO);
SetLastError(0xdeadbeef);
hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0);
- ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError());
+ ok(hdib != NULL ||
+ broken(!hdib), /* Win98, WinMe */
+ "CreateDIBSection error %d\n", GetLastError());
DeleteObject(hdib);
bmi.bmiHeader.biSize++;
SetLastError(0xdeadbeef);
hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0);
- ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError());
+ ok(hdib != NULL ||
+ broken(!hdib), /* Win98, WinMe */
+ "CreateDIBSection error %d\n", GetLastError());
DeleteObject(hdib);
bmi.bmiHeader.biSize = sizeof(BITMAPV4HEADER);
@@ -2041,7 +2170,9 @@ static void test_bitmapinfoheadersize(void)
SetLastError(0xdeadbeef);
hdib = CreateDIBSection(hdc, &bmi, 0, NULL, NULL, 0);
- ok(hdib != NULL, "CreateDIBSection error %d\n", GetLastError());
+ ok(hdib != NULL ||
+ broken(!hdib), /* Win95 */
+ "CreateDIBSection error %d\n", GetLastError());
DeleteObject(hdib);
memset(&bci, 0, sizeof(BITMAPCOREINFO));
@@ -2103,7 +2234,9 @@ static void test_get16dibits(void)
info->bmiHeader.biCompression = BI_RGB;
ret = GetDIBits(screen_dc, hbmp, 0, 0, NULL, info, 0);
- ok(ret != 0, "GetDIBits failed\n");
+ ok(ret != 0 ||
+ broken(ret == 0), /* win9x */
+ "GetDIBits failed got %d\n", ret);
for (p = ((BYTE *) info) + sizeof(info->bmiHeader); (p - ((BYTE *) info)) < info_len; p++)
if (*p != '!')
@@ -2115,7 +2248,7 @@ static void test_get16dibits(void)
ReleaseDC(NULL, screen_dc);
}
-void test_GdiAlphaBlend()
+static void test_GdiAlphaBlend(void)
{
/* test out-of-bound parameters for GdiAlphaBlend */
HDC hdcNull;
@@ -2134,7 +2267,7 @@ void test_GdiAlphaBlend()
if (!pGdiAlphaBlend)
{
- skip("GdiAlphaBlend() is not implemented\n");
+ win_skip("GdiAlphaBlend() is not implemented\n");
return;
}
diff --git a/rostests/winetests/gdi32/clipping.c b/rostests/winetests/gdi32/clipping.c
index 0ae3eb6ff56..eff87c3c463 100644
--- a/rostests/winetests/gdi32/clipping.c
+++ b/rostests/winetests/gdi32/clipping.c
@@ -162,12 +162,16 @@ static void verify_region(HRGN hrgn, const RECT *rc)
if (IsRectEmpty(rc))
{
ok(rgn.data.rdh.nCount == 0, "expected 0, got %u\n", rgn.data.rdh.nCount);
- ok(rgn.data.rdh.nRgnSize == 0, "expected 0, got %u\n", rgn.data.rdh.nRgnSize);
+ ok(rgn.data.rdh.nRgnSize == 0 ||
+ broken(rgn.data.rdh.nRgnSize == 168), /* NT4 */
+ "expected 0, got %u\n", rgn.data.rdh.nRgnSize);
}
else
{
ok(rgn.data.rdh.nCount == 1, "expected 1, got %u\n", rgn.data.rdh.nCount);
- ok(rgn.data.rdh.nRgnSize == sizeof(RECT), "expected sizeof(RECT), got %u\n", rgn.data.rdh.nRgnSize);
+ ok(rgn.data.rdh.nRgnSize == sizeof(RECT) ||
+ broken(rgn.data.rdh.nRgnSize == 168), /* NT4 */
+ "expected sizeof(RECT), got %u\n", rgn.data.rdh.nRgnSize);
}
ok(EqualRect(&rgn.data.rdh.rcBound, rc), "rects don't match\n");
}
@@ -236,9 +240,14 @@ if (0) /* crashes under Win9x */
SetLastError(0xdeadbeef);
hrgn = ExtCreateRegion(NULL, 1, &rgn.data);
- ok(hrgn != 0, "ExtCreateRegion error %u\n", GetLastError());
- verify_region(hrgn, &rc);
- DeleteObject(hrgn);
+ ok(hrgn != 0 ||
+ broken(GetLastError() == 0xdeadbeef), /* NT4 */
+ "ExtCreateRegion error %u\n", GetLastError());
+ if(hrgn)
+ {
+ verify_region(hrgn, &rc);
+ DeleteObject(hrgn);
+ }
xform.eM11 = 0.5; /* 50% width */
xform.eM12 = 0.0;
diff --git a/rostests/winetests/gdi32/dc.c b/rostests/winetests/gdi32/dc.c
index 9e0048e4fce..1efde38b134 100644
--- a/rostests/winetests/gdi32/dc.c
+++ b/rostests/winetests/gdi32/dc.c
@@ -185,7 +185,7 @@ static void test_GdiConvertToDevmodeW(void)
pGdiConvertToDevmodeW = (void *)GetProcAddress(GetModuleHandleA("gdi32.dll"), "GdiConvertToDevmodeW");
if (!pGdiConvertToDevmodeW)
{
- skip("GdiConvertToDevmodeW is not available on this platform\n");
+ win_skip("GdiConvertToDevmodeW is not available on this platform\n");
return;
}
@@ -253,10 +253,86 @@ static void test_CreateCompatibleDC(void)
ok(hNewDC == NULL, "CreateCompatibleDC returned %p\n", hNewDC);
}
+static void test_DC_bitmap(void)
+{
+ HDC hdc, hdcmem;
+ DWORD bits[64];
+ HBITMAP hbmp, oldhbmp;
+ COLORREF col;
+ int i, bitspixel;
+
+ /* fill bitmap data with b&w pattern */
+ for( i = 0; i < 64; i++) bits[i] = i & 1 ? 0 : 0xffffff;
+
+ hdc = GetDC(0);
+ ok( hdc != NULL, "CreateDC rets %p\n", hdc);
+ bitspixel = GetDeviceCaps( hdc, BITSPIXEL);
+ /* create a memory dc */
+ hdcmem = CreateCompatibleDC( hdc);
+ ok( hdcmem != NULL, "CreateCompatibleDC rets %p\n", hdcmem);
+ /* tests */
+ /* test monochrome bitmap: should always work */
+ hbmp = CreateBitmap(32, 32, 1, 1, bits);
+ ok( hbmp != NULL, "CreateBitmap returns %p\n", hbmp);
+ oldhbmp = SelectObject( hdcmem, hbmp);
+ ok( oldhbmp != NULL, "SelectObject returned NULL\n" ); /* a memdc always has a bitmap selected */
+ col = GetPixel( hdcmem, 0, 0);
+ ok( col == 0xffffff, "GetPixel returned %08x, expected 00ffffff\n", col);
+ col = GetPixel( hdcmem, 1, 1);
+ ok( col == 0x000000, "GetPixel returned %08x, expected 00000000\n", col);
+ col = GetPixel( hdcmem, 100, 1);
+ ok( col == CLR_INVALID, "GetPixel returned %08x, expected ffffffff\n", col);
+ SelectObject( hdcmem, oldhbmp);
+ DeleteObject( hbmp);
+
+ /* test with 2 bits color depth, not likely to succeed */
+ hbmp = CreateBitmap(16, 16, 1, 2, bits);
+ ok( hbmp != NULL, "CreateBitmap returns %p\n", hbmp);
+ oldhbmp = SelectObject( hdcmem, hbmp);
+ if( bitspixel != 2)
+ ok( !oldhbmp, "SelectObject of a bitmap with 2 bits/pixel should return NULL\n");
+ if( oldhbmp) SelectObject( hdcmem, oldhbmp);
+ DeleteObject( hbmp);
+
+ /* test with 16 bits color depth, might succeed */
+ hbmp = CreateBitmap(6, 6, 1, 16, bits);
+ ok( hbmp != NULL, "CreateBitmap returns %p\n", hbmp);
+ oldhbmp = SelectObject( hdcmem, hbmp);
+ if( bitspixel == 16) {
+ ok( oldhbmp != NULL, "SelectObject returned NULL\n" );
+ col = GetPixel( hdcmem, 0, 0);
+ ok( col == 0xffffff,
+ "GetPixel of a bitmap with 16 bits/pixel returned %08x, expected 00ffffff\n", col);
+ col = GetPixel( hdcmem, 1, 1);
+ ok( col == 0x000000,
+ "GetPixel of a bitmap with 16 bits/pixel returned returned %08x, expected 00000000\n", col);
+ }
+ if( oldhbmp) SelectObject( hdcmem, oldhbmp);
+ DeleteObject( hbmp);
+
+ /* test with 32 bits color depth, probably succeed */
+ hbmp = CreateBitmap(4, 4, 1, 32, bits);
+ ok( hbmp != NULL, "CreateBitmap returns %p\n", hbmp);
+ oldhbmp = SelectObject( hdcmem, hbmp);
+ if( bitspixel == 32) {
+ ok( oldhbmp != NULL, "SelectObject returned NULL\n" );
+ col = GetPixel( hdcmem, 0, 0);
+ ok( col == 0xffffff,
+ "GetPixel of a bitmap with 32 bits/pixel returned %08x, expected 00ffffff\n", col);
+ col = GetPixel( hdcmem, 1, 1);
+ ok( col == 0x000000,
+ "GetPixel of a bitmap with 32 bits/pixel returned returned %08x, expected 00000000\n", col);
+ }
+ if( oldhbmp) SelectObject( hdcmem, oldhbmp);
+ DeleteObject( hbmp);
+ ReleaseDC( 0, hdc );
+}
+
START_TEST(dc)
{
test_savedc();
test_savedc_2();
test_GdiConvertToDevmodeW();
test_CreateCompatibleDC();
+ test_DC_bitmap();
}
diff --git a/rostests/winetests/gdi32/font.c b/rostests/winetests/gdi32/font.c
index 1d9b4fc9b0f..88e1797bacc 100644
--- a/rostests/winetests/gdi32/font.c
+++ b/rostests/winetests/gdi32/font.c
@@ -106,8 +106,31 @@ static void check_font(const char* test, const LOGFONTA* lf, HFONT hfont)
minlen++;
minlen += FIELD_OFFSET(LOGFONTA, lfFaceName) + 1;
ok(ret == sizeof(LOGFONTA) || ret == minlen, "%s: GetObject returned %d\n", test, ret);
- ok(!memcmp(lf, &getobj_lf, FIELD_OFFSET(LOGFONTA, lfFaceName)), "%s: fonts don't match\n", test);
- ok(!lstrcmpA(lf->lfFaceName, getobj_lf.lfFaceName),
+ ok(lf->lfHeight == getobj_lf.lfHeight ||
+ broken((SHORT)lf->lfHeight == getobj_lf.lfHeight), /* win9x */
+ "lfHeight: expect %08x got %08x\n", lf->lfHeight, getobj_lf.lfHeight);
+ ok(lf->lfWidth == getobj_lf.lfWidth ||
+ broken((SHORT)lf->lfWidth == getobj_lf.lfWidth), /* win9x */
+ "lfWidth: expect %08x got %08x\n", lf->lfWidth, getobj_lf.lfWidth);
+ ok(lf->lfEscapement == getobj_lf.lfEscapement ||
+ broken((SHORT)lf->lfEscapement == getobj_lf.lfEscapement), /* win9x */
+ "lfEscapement: expect %08x got %08x\n", lf->lfEscapement, getobj_lf.lfEscapement);
+ ok(lf->lfOrientation == getobj_lf.lfOrientation ||
+ broken((SHORT)lf->lfOrientation == getobj_lf.lfOrientation), /* win9x */
+ "lfOrientation: expect %08x got %08x\n", lf->lfOrientation, getobj_lf.lfOrientation);
+ ok(lf->lfWeight == getobj_lf.lfWeight ||
+ broken((SHORT)lf->lfWeight == getobj_lf.lfWeight), /* win9x */
+ "lfWeight: expect %08x got %08x\n", lf->lfWeight, getobj_lf.lfWeight);
+ ok(lf->lfItalic == getobj_lf.lfItalic, "lfItalic: expect %02x got %02x\n", lf->lfItalic, getobj_lf.lfItalic);
+ ok(lf->lfUnderline == getobj_lf.lfUnderline, "lfUnderline: expect %02x got %02x\n", lf->lfUnderline, getobj_lf.lfUnderline);
+ ok(lf->lfStrikeOut == getobj_lf.lfStrikeOut, "lfStrikeOut: expect %02x got %02x\n", lf->lfStrikeOut, getobj_lf.lfStrikeOut);
+ ok(lf->lfCharSet == getobj_lf.lfCharSet, "lfCharSet: expect %02x got %02x\n", lf->lfCharSet, getobj_lf.lfCharSet);
+ ok(lf->lfOutPrecision == getobj_lf.lfOutPrecision, "lfOutPrecision: expect %02x got %02x\n", lf->lfOutPrecision, getobj_lf.lfOutPrecision);
+ ok(lf->lfClipPrecision == getobj_lf.lfClipPrecision, "lfClipPrecision: expect %02x got %02x\n", lf->lfClipPrecision, getobj_lf.lfClipPrecision);
+ ok(lf->lfQuality == getobj_lf.lfQuality, "lfQuality: expect %02x got %02x\n", lf->lfQuality, getobj_lf.lfQuality);
+ ok(lf->lfPitchAndFamily == getobj_lf.lfPitchAndFamily, "lfPitchAndFamily: expect %02x got %02x\n", lf->lfPitchAndFamily, getobj_lf.lfPitchAndFamily);
+ ok(!lstrcmpA(lf->lfFaceName, getobj_lf.lfFaceName) ||
+ broken(!memcmp(lf->lfFaceName, getobj_lf.lfFaceName, LF_FACESIZE-1)), /* win9x doesn't ensure '\0' termination */
"%s: font names don't match: %s != %s\n", test, lf->lfFaceName, getobj_lf.lfFaceName);
}
@@ -247,8 +270,8 @@ if (0) /* these metrics are scaled too, but with rounding errors */
cx = tm.tmAveCharWidth / tm_orig->tmAveCharWidth;
cy = tm.tmHeight / tm_orig->tmHeight;
- ok(cx == scale_x && cy == scale_y, "expected scale_x %d, scale_y %d, got cx %d, cy %d\n",
- scale_x, scale_y, cx, cy);
+ ok(cx == scale_x && cy == scale_y, "height %d: expected scale_x %d, scale_y %d, got cx %d, cy %d\n",
+ lfHeight, scale_x, scale_y, cx, cy);
ok(tm.tmHeight == tm_orig->tmHeight * scale_y, "height %d != %d\n", tm.tmHeight, tm_orig->tmHeight * scale_y);
ok(tm.tmAscent == tm_orig->tmAscent * scale_y, "ascent %d != %d\n", tm.tmAscent, tm_orig->tmAscent * scale_y);
ok(tm.tmDescent == tm_orig->tmDescent * scale_y, "descent %d != %d\n", tm.tmDescent, tm_orig->tmDescent * scale_y);
@@ -285,9 +308,6 @@ static void test_bitmap_font(void)
SIZE size_orig;
INT ret, i, width_orig, height_orig, scale, lfWidth;
- skip("ROS-HACK: Skipping bitmap font tests!\n");
- return;
-
hdc = GetDC(0);
/* "System" has only 1 pixel size defined, otherwise the test breaks */
@@ -324,7 +344,7 @@ static void test_bitmap_font(void)
bitmap_lf.lfWidth = lfWidth;
/* test fractional scaling */
- for (i = 1; i <= height_orig * 3; i++)
+ for (i = 1; i <= height_orig * 6; i++)
{
INT nearest_height;
@@ -332,8 +352,12 @@ static void test_bitmap_font(void)
hfont = create_font("fractional", &bitmap_lf);
scale = (i + height_orig - 1) / height_orig;
nearest_height = scale * height_orig;
- /* XP allows not more than 10% deviation */
- if (scale > 1 && nearest_height - i > nearest_height / 10) scale--;
+ /* Only jump to the next height if the difference <= 25% original height */
+ if (scale > 2 && nearest_height - i > height_orig / 4) scale--;
+ /* The jump between unscaled and doubled is delayed by 1 in winnt+ but not in win9x,
+ so we'll not test this particular height. */
+ else if(scale == 2 && nearest_height - i == (height_orig / 4)) continue;
+ else if(scale == 2 && nearest_height - i > (height_orig / 4 - 1)) scale--;
old_hfont = SelectObject(hdc, hfont);
test_font_metrics(hdc, hfont, bitmap_lf.lfHeight, 0, test_str, sizeof(test_str), &tm_orig, &size_orig, width_orig, 1, scale);
SelectObject(hdc, old_hfont);
@@ -631,68 +655,117 @@ static void test_bitmap_font_metrics(void)
{
const char face_name[LF_FACESIZE];
int weight, height, ascent, descent, int_leading, ext_leading;
- int ave_char_width, max_char_width;
+ int ave_char_width, max_char_width, dpi;
DWORD ansi_bitfield;
} fd[] =
{
- { "MS Sans Serif", FW_NORMAL, 13, 11, 2, 2, 0, 5, 11, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
- { "MS Sans Serif", FW_NORMAL, 16, 13, 3, 3, 0, 7, 14, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
- { "MS Sans Serif", FW_NORMAL, 20, 16, 4, 4, 0, 8, 16, FS_LATIN1 | FS_CYRILLIC },
- { "MS Sans Serif", FW_NORMAL, 20, 16, 4, 4, 0, 8, 18, FS_LATIN2 },
- { "MS Sans Serif", FW_NORMAL, 24, 19, 5, 6, 0, 9, 19, FS_LATIN1 },
- { "MS Sans Serif", FW_NORMAL, 24, 19, 5, 6, 0, 9, 24, FS_LATIN2 },
- { "MS Sans Serif", FW_NORMAL, 24, 19, 5, 6, 0, 9, 20, FS_CYRILLIC },
- { "MS Sans Serif", FW_NORMAL, 29, 23, 6, 5, 0, 12, 24, FS_LATIN1 },
- { "MS Sans Serif", FW_NORMAL, 29, 23, 6, 6, 0, 12, 24, FS_LATIN2 },
- { "MS Sans Serif", FW_NORMAL, 29, 23, 6, 5, 0, 12, 25, FS_CYRILLIC },
- { "MS Sans Serif", FW_NORMAL, 37, 29, 8, 5, 0, 16, 32, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
- { "MS Serif", FW_NORMAL, 10, 8, 2, 2, 0, 4, 8, FS_LATIN1 | FS_LATIN2 },
- { "MS Serif", FW_NORMAL, 10, 8, 2, 2, 0, 5, 8, FS_CYRILLIC },
- { "MS Serif", FW_NORMAL, 11, 9, 2, 2, 0, 5, 9, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
- { "MS Serif", FW_NORMAL, 13, 11, 2, 2, 0, 5, 11, FS_LATIN1 },
- { "MS Serif", FW_NORMAL, 13, 11, 2, 2, 0, 5, 12, FS_LATIN2 | FS_CYRILLIC },
- { "MS Serif", FW_NORMAL, 16, 13, 3, 3, 0, 6, 14, FS_LATIN1 | FS_LATIN2 },
- { "MS Serif", FW_NORMAL, 16, 13, 3, 3, 0, 6, 16, FS_CYRILLIC },
- { "MS Serif", FW_NORMAL, 19, 15, 4, 3, 0, 8, 18, FS_LATIN1 | FS_LATIN2 },
- { "MS Serif", FW_NORMAL, 19, 15, 4, 3, 0, 8, 19, FS_CYRILLIC },
- { "MS Serif", FW_NORMAL, 21, 16, 5, 3, 0, 9, 17, FS_LATIN1 },
- { "MS Serif", FW_NORMAL, 21, 16, 5, 3, 0, 9, 22, FS_LATIN2 },
- { "MS Serif", FW_NORMAL, 21, 16, 5, 3, 0, 9, 23, FS_CYRILLIC },
- { "MS Serif", FW_NORMAL, 27, 21, 6, 3, 0, 12, 23, FS_LATIN1 },
- { "MS Serif", FW_NORMAL, 27, 21, 6, 3, 0, 12, 26, FS_LATIN2 },
- { "MS Serif", FW_NORMAL, 27, 21, 6, 3, 0, 12, 27, FS_CYRILLIC },
- { "MS Serif", FW_NORMAL, 35, 27, 8, 3, 0, 16, 33, FS_LATIN1 | FS_LATIN2 },
- { "MS Serif", FW_NORMAL, 35, 27, 8, 3, 0, 16, 34, FS_CYRILLIC },
- { "Courier", FW_NORMAL, 13, 11, 2, 0, 0, 8, 8, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
- { "Courier", FW_NORMAL, 16, 13, 3, 0, 0, 9, 9, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
- { "Courier", FW_NORMAL, 20, 16, 4, 0, 0, 12, 12, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
- { "System", FW_BOLD, 16, 13, 3, 3, 0, 7, 14, FS_LATIN1 },
- { "System", FW_BOLD, 16, 13, 3, 3, 0, 7, 15, FS_LATIN2 | FS_CYRILLIC },
+ { "MS Sans Serif", FW_NORMAL, 13, 11, 2, 2, 0, 5, 11, 96, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+ { "MS Sans Serif", FW_NORMAL, 16, 13, 3, 3, 0, 7, 14, 96, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+ { "MS Sans Serif", FW_NORMAL, 20, 16, 4, 4, 0, 8, 16, 96, FS_LATIN1 | FS_CYRILLIC },
+ { "MS Sans Serif", FW_NORMAL, 20, 16, 4, 4, 0, 8, 18, 96, FS_LATIN2 },
+ { "MS Sans Serif", FW_NORMAL, 24, 19, 5, 6, 0, 9, 19, 96, FS_LATIN1 },
+ { "MS Sans Serif", FW_NORMAL, 24, 19, 5, 6, 0, 9, 24, 96, FS_LATIN2 },
+ { "MS Sans Serif", FW_NORMAL, 24, 19, 5, 6, 0, 9, 20, 96, FS_CYRILLIC },
+ { "MS Sans Serif", FW_NORMAL, 29, 23, 6, 5, 0, 12, 24, 96, FS_LATIN1 },
+ { "MS Sans Serif", FW_NORMAL, 29, 23, 6, 6, 0, 12, 24, 96, FS_LATIN2 },
+ { "MS Sans Serif", FW_NORMAL, 29, 23, 6, 5, 0, 12, 25, 96, FS_CYRILLIC },
+ { "MS Sans Serif", FW_NORMAL, 37, 29, 8, 5, 0, 16, 32, 96, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+
+ { "MS Sans Serif", FW_NORMAL, 16, 13, 3, 3, 0, 7, 14, 120, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+ { "MS Sans Serif", FW_NORMAL, 20, 16, 4, 4, 0, 8, 18, 120, FS_LATIN1 | FS_LATIN2 },
+ { "MS Sans Serif", FW_NORMAL, 20, 16, 4, 4, 0, 8, 17, 120, FS_CYRILLIC },
+ { "MS Sans Serif", FW_NORMAL, 25, 20, 5, 5, 0, 10, 21, 120, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+ { "MS Sans Serif", FW_NORMAL, 29, 23, 6, 6, 0, 12, 24, 120, FS_LATIN1 | FS_LATIN2 },
+ { "MS Sans Serif", FW_NORMAL, 29, 23, 6, 5, 0, 12, 24, 120, FS_CYRILLIC },
+ { "MS Sans Serif", FW_NORMAL, 36, 29, 7, 6, 0, 15, 30, 120, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+ { "MS Sans Serif", FW_NORMAL, 46, 37, 9, 6, 0, 20, 40, 120, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+
+ { "MS Serif", FW_NORMAL, 10, 8, 2, 2, 0, 4, 8, 96, FS_LATIN1 | FS_LATIN2 },
+ { "MS Serif", FW_NORMAL, 10, 8, 2, 2, 0, 5, 8, 96, FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 11, 9, 2, 2, 0, 5, 9, 96, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 13, 11, 2, 2, 0, 5, 11, 96, FS_LATIN1 },
+ { "MS Serif", FW_NORMAL, 13, 11, 2, 2, 0, 5, 12, 96, FS_LATIN2 | FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 16, 13, 3, 3, 0, 6, 14, 96, FS_LATIN1 | FS_LATIN2 },
+ { "MS Serif", FW_NORMAL, 16, 13, 3, 3, 0, 6, 16, 96, FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 19, 15, 4, 3, 0, 8, 18, 96, FS_LATIN1 | FS_LATIN2 },
+ { "MS Serif", FW_NORMAL, 19, 15, 4, 3, 0, 8, 19, 96, FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 21, 16, 5, 3, 0, 9, 17, 96, FS_LATIN1 },
+ { "MS Serif", FW_NORMAL, 21, 16, 5, 3, 0, 9, 22, 96, FS_LATIN2 },
+ { "MS Serif", FW_NORMAL, 21, 16, 5, 3, 0, 9, 23, 96, FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 27, 21, 6, 3, 0, 12, 23, 96, FS_LATIN1 },
+ { "MS Serif", FW_NORMAL, 27, 21, 6, 3, 0, 12, 26, 96, FS_LATIN2 },
+ { "MS Serif", FW_NORMAL, 27, 21, 6, 3, 0, 12, 27, 96, FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 35, 27, 8, 3, 0, 16, 33, 96, FS_LATIN1 | FS_LATIN2 },
+ { "MS Serif", FW_NORMAL, 35, 27, 8, 3, 0, 16, 34, 96, FS_CYRILLIC },
+
+ { "MS Serif", FW_NORMAL, 16, 13, 3, 3, 0, 6, 14, 120, FS_LATIN1 | FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 16, 13, 3, 3, 0, 6, 13, 120, FS_LATIN2 },
+ { "MS Serif", FW_NORMAL, 20, 16, 4, 4, 0, 8, 18, 120, FS_LATIN1 | FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 20, 16, 4, 4, 0, 8, 15, 120, FS_LATIN2 },
+ { "MS Serif", FW_NORMAL, 23, 18, 5, 3, 0, 10, 21, 120, FS_LATIN1 | FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 23, 18, 5, 3, 0, 10, 19, 120, FS_LATIN2 },
+ { "MS Serif", FW_NORMAL, 27, 21, 6, 4, 0, 12, 23, 120, FS_LATIN1 | FS_LATIN2 },
+ { "MS Serif", FW_MEDIUM, 27, 22, 5, 2, 0, 12, 30, 120, FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 33, 26, 7, 3, 0, 14, 30, 120, FS_LATIN1 | FS_LATIN2 },
+ { "MS Serif", FW_MEDIUM, 32, 25, 7, 2, 0, 14, 32, 120, FS_CYRILLIC },
+ { "MS Serif", FW_NORMAL, 43, 34, 9, 3, 0, 19, 39, 120, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+
+ { "Courier", FW_NORMAL, 13, 11, 2, 0, 0, 8, 8, 96, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+ { "Courier", FW_NORMAL, 16, 13, 3, 0, 0, 9, 9, 96, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+ { "Courier", FW_NORMAL, 20, 16, 4, 0, 0, 12, 12, 96, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+
+ { "Courier", FW_NORMAL, 16, 13, 3, 0, 0, 9, 9, 120, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+ { "Courier", FW_NORMAL, 20, 16, 4, 0, 0, 12, 12, 120, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+ { "Courier", FW_NORMAL, 25, 20, 5, 0, 0, 15, 15, 120, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+
+ { "System", FW_BOLD, 16, 13, 3, 3, 0, 7, 14, 96, FS_LATIN1 },
+ { "System", FW_BOLD, 16, 13, 3, 3, 0, 7, 15, 96, FS_LATIN2 | FS_CYRILLIC },
/*
* TODO: the system for CP932 should be NORMAL, not BOLD. However that would
* require a new system.sfd for that font
*/
- { "System", FW_BOLD, 18, 16, 2, 0, 2, 8, 16, FS_JISJAPAN },
- { "Small Fonts", FW_NORMAL, 3, 2, 1, 0, 0, 1, 2, FS_LATIN1 },
- { "Small Fonts", FW_NORMAL, 3, 2, 1, 0, 0, 1, 8, FS_LATIN2 | FS_CYRILLIC },
- { "Small Fonts", FW_NORMAL, 3, 2, 1, 0, 0, 2, 4, FS_JISJAPAN },
- { "Small Fonts", FW_NORMAL, 5, 4, 1, 1, 0, 3, 4, FS_LATIN1 },
- { "Small Fonts", FW_NORMAL, 5, 4, 1, 1, 0, 2, 8, FS_LATIN2 | FS_CYRILLIC },
- { "Small Fonts", FW_NORMAL, 5, 4, 1, 0, 0, 3, 6, FS_JISJAPAN },
- { "Small Fonts", FW_NORMAL, 6, 5, 1, 1, 0, 3, 13, FS_LATIN1 },
- { "Small Fonts", FW_NORMAL, 6, 5, 1, 1, 0, 3, 8, FS_LATIN2 | FS_CYRILLIC },
- { "Small Fonts", FW_NORMAL, 6, 5, 1, 0, 0, 4, 8, FS_JISJAPAN },
- { "Small Fonts", FW_NORMAL, 8, 7, 1, 1, 0, 4, 7, FS_LATIN1 },
- { "Small Fonts", FW_NORMAL, 8, 7, 1, 1, 0, 4, 8, FS_LATIN2 | FS_CYRILLIC },
- { "Small Fonts", FW_NORMAL, 8, 7, 1, 0, 0, 5, 10, FS_JISJAPAN },
- { "Small Fonts", FW_NORMAL, 10, 8, 2, 2, 0, 4, 8, FS_LATIN1 | FS_LATIN2 },
- { "Small Fonts", FW_NORMAL, 10, 8, 2, 2, 0, 5, 8, FS_CYRILLIC },
- { "Small Fonts", FW_NORMAL, 10, 8, 2, 0, 0, 6, 12, FS_JISJAPAN },
- { "Small Fonts", FW_NORMAL, 11, 9, 2, 2, 0, 5, 9, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
- { "Small Fonts", FW_NORMAL, 11, 9, 2, 0, 0, 7, 14, FS_JISJAPAN },
- { "Fixedsys", FW_NORMAL, 15, 12, 3, 3, 0, 8, 8, FS_LATIN1 | FS_LATIN2 },
- { "Fixedsys", FW_NORMAL, 16, 12, 4, 3, 0, 8, 8, FS_CYRILLIC },
- { "FixedSys", FW_NORMAL, 18, 16, 2, 0, 0, 8, 16, FS_JISJAPAN }
+ { "System", FW_BOLD, 18, 16, 2, 0, 2, 8, 16, 96, FS_JISJAPAN },
+
+ { "System", FW_BOLD, 20, 16, 4, 4, 0, 9, 14, 120, FS_LATIN1 },
+ { "System", FW_BOLD, 20, 16, 4, 4, 0, 9, 17, 120, FS_LATIN2 | FS_CYRILLIC },
+
+ { "Small Fonts", FW_NORMAL, 3, 2, 1, 0, 0, 1, 2, 96, FS_LATIN1 },
+ { "Small Fonts", FW_NORMAL, 3, 2, 1, 0, 0, 1, 8, 96, FS_LATIN2 | FS_CYRILLIC },
+ { "Small Fonts", FW_NORMAL, 3, 2, 1, 0, 0, 2, 4, 96, FS_JISJAPAN },
+ { "Small Fonts", FW_NORMAL, 5, 4, 1, 1, 0, 3, 4, 96, FS_LATIN1 },
+ { "Small Fonts", FW_NORMAL, 5, 4, 1, 1, 0, 2, 8, 96, FS_LATIN2 | FS_CYRILLIC },
+ { "Small Fonts", FW_NORMAL, 5, 4, 1, 0, 0, 3, 6, 96, FS_JISJAPAN },
+ { "Small Fonts", FW_NORMAL, 6, 5, 1, 1, 0, 3, 13, 96, FS_LATIN1 },
+ { "Small Fonts", FW_NORMAL, 6, 5, 1, 1, 0, 3, 8, 96, FS_LATIN2 | FS_CYRILLIC },
+ { "Small Fonts", FW_NORMAL, 6, 5, 1, 0, 0, 4, 8, 96, FS_JISJAPAN },
+ { "Small Fonts", FW_NORMAL, 8, 7, 1, 1, 0, 4, 7, 96, FS_LATIN1 },
+ { "Small Fonts", FW_NORMAL, 8, 7, 1, 1, 0, 4, 8, 96, FS_LATIN2 | FS_CYRILLIC },
+ { "Small Fonts", FW_NORMAL, 8, 7, 1, 0, 0, 5, 10, 96, FS_JISJAPAN },
+ { "Small Fonts", FW_NORMAL, 10, 8, 2, 2, 0, 4, 8, 96, FS_LATIN1 | FS_LATIN2 },
+ { "Small Fonts", FW_NORMAL, 10, 8, 2, 2, 0, 5, 8, 96, FS_CYRILLIC },
+ { "Small Fonts", FW_NORMAL, 10, 8, 2, 0, 0, 6, 12, 96, FS_JISJAPAN },
+ { "Small Fonts", FW_NORMAL, 11, 9, 2, 2, 0, 5, 9, 96, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC },
+ { "Small Fonts", FW_NORMAL, 11, 9, 2, 0, 0, 7, 14, 96, FS_JISJAPAN },
+
+ { "Small Fonts", FW_NORMAL, 3, 2, 1, 0, 0, 1, 2, 120, FS_LATIN1 | FS_JISJAPAN },
+ { "Small Fonts", FW_NORMAL, 3, 2, 1, 0, 0, 1, 8, 120, FS_LATIN2 | FS_CYRILLIC },
+ { "Small Fonts", FW_NORMAL, 6, 5, 1, 1, 0, 3, 5, 120, FS_LATIN1 | FS_JISJAPAN },
+ { "Small Fonts", FW_NORMAL, 6, 5, 1, 1, 0, 3, 8, 120, FS_LATIN2 | FS_CYRILLIC },
+ { "Small Fonts", FW_NORMAL, 8, 7, 1, 1, 0, 4, 7, 120, FS_LATIN1 | FS_JISJAPAN },
+ { "Small Fonts", FW_NORMAL, 8, 7, 1, 1, 0, 4, 8, 120, FS_LATIN2 | FS_CYRILLIC },
+ { "Small Fonts", FW_NORMAL, 10, 8, 2, 2, 0, 5, 9, 120, FS_LATIN1 | FS_LATIN2 | FS_JISJAPAN },
+ { "Small Fonts", FW_NORMAL, 10, 8, 2, 2, 0, 5, 8, 120, FS_CYRILLIC },
+ { "Small Fonts", FW_NORMAL, 12, 10, 2, 2, 0, 5, 10, 120, FS_LATIN1 | FS_LATIN2 | FS_JISJAPAN },
+ { "Small Fonts", FW_NORMAL, 12, 10, 2, 2, 0, 6, 10, 120, FS_CYRILLIC },
+ { "Small Fonts", FW_NORMAL, 13, 11, 2, 2, 0, 6, 12, 120, FS_LATIN1 | FS_LATIN2 | FS_JISJAPAN },
+ { "Small Fonts", FW_NORMAL, 13, 11, 2, 2, 0, 6, 11, 120, FS_CYRILLIC },
+
+ { "Fixedsys", FW_NORMAL, 15, 12, 3, 3, 0, 8, 8, 96, FS_LATIN1 | FS_LATIN2 },
+ { "Fixedsys", FW_NORMAL, 16, 12, 4, 3, 0, 8, 8, 96, FS_CYRILLIC },
+ { "FixedSys", FW_NORMAL, 18, 16, 2, 0, 0, 8, 16, 96, FS_JISJAPAN },
+
+ /* The 120dpi version still has its dpi marked as 96 */
+ { "Fixedsys", FW_NORMAL, 20, 16, 4, 2, 0, 10, 10, 96, FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC }
/* FIXME: add "Terminal" */
};
@@ -728,25 +801,25 @@ static void test_bitmap_font_metrics(void)
ret = EnumFontFamiliesEx(hdc, &lf, find_font_proc, (LPARAM)&lf, 0);
if (ret) continue;
- trace("found font %s, height %d charset %x\n", lf.lfFaceName, lf.lfHeight, lf.lfCharSet);
-
hfont = create_font(lf.lfFaceName, &lf);
old_hfont = SelectObject(hdc, hfont);
ok(GetTextMetrics(hdc, &tm), "GetTextMetrics error %d\n", GetLastError());
+ if(fd[i].dpi == tm.tmDigitizedAspectX)
+ {
+ trace("found font %s, height %d charset %x dpi %d\n", lf.lfFaceName, lf.lfHeight, lf.lfCharSet, fd[i].dpi);
+ ok(tm.tmWeight == fd[i].weight, "%s(%d): tm.tmWeight %d != %d\n", fd[i].face_name, fd[i].height, tm.tmWeight, fd[i].weight);
+ ok(tm.tmHeight == fd[i].height, "%s(%d): tm.tmHeight %d != %d\n", fd[i].face_name, fd[i].height, tm.tmHeight, fd[i].height);
+ ok(tm.tmAscent == fd[i].ascent, "%s(%d): tm.tmAscent %d != %d\n", fd[i].face_name, fd[i].height, tm.tmAscent, fd[i].ascent);
+ ok(tm.tmDescent == fd[i].descent, "%s(%d): tm.tmDescent %d != %d\n", fd[i].face_name, fd[i].height, tm.tmDescent, fd[i].descent);
+ ok(tm.tmInternalLeading == fd[i].int_leading, "%s(%d): tm.tmInternalLeading %d != %d\n", fd[i].face_name, fd[i].height, tm.tmInternalLeading, fd[i].int_leading);
+ ok(tm.tmExternalLeading == fd[i].ext_leading, "%s(%d): tm.tmExternalLeading %d != %d\n", fd[i].face_name, fd[i].height, tm.tmExternalLeading, fd[i].ext_leading);
+ ok(tm.tmAveCharWidth == fd[i].ave_char_width, "%s(%d): tm.tmAveCharWidth %d != %d\n", fd[i].face_name, fd[i].height, tm.tmAveCharWidth, fd[i].ave_char_width);
- ok(tm.tmWeight == fd[i].weight, "%s(%d): tm.tmWeight %d != %d\n", fd[i].face_name, fd[i].height, tm.tmWeight, fd[i].weight);
- ok(tm.tmHeight == fd[i].height, "%s(%d): tm.tmHeight %d != %d\n", fd[i].face_name, fd[i].height, tm.tmHeight, fd[i].height);
- ok(tm.tmAscent == fd[i].ascent, "%s(%d): tm.tmAscent %d != %d\n", fd[i].face_name, fd[i].height, tm.tmAscent, fd[i].ascent);
- ok(tm.tmDescent == fd[i].descent, "%s(%d): tm.tmDescent %d != %d\n", fd[i].face_name, fd[i].height, tm.tmDescent, fd[i].descent);
- ok(tm.tmInternalLeading == fd[i].int_leading, "%s(%d): tm.tmInternalLeading %d != %d\n", fd[i].face_name, fd[i].height, tm.tmInternalLeading, fd[i].int_leading);
- ok(tm.tmExternalLeading == fd[i].ext_leading, "%s(%d): tm.tmExternalLeading %d != %d\n", fd[i].face_name, fd[i].height, tm.tmExternalLeading, fd[i].ext_leading);
- ok(tm.tmAveCharWidth == fd[i].ave_char_width, "%s(%d): tm.tmAveCharWidth %d != %d\n", fd[i].face_name, fd[i].height, tm.tmAveCharWidth, fd[i].ave_char_width);
-
- /* Don't run the max char width test on System/ANSI_CHARSET. We have extra characters in our font
- that make the max width bigger */
- if(strcmp(lf.lfFaceName, "System") || lf.lfCharSet != ANSI_CHARSET)
- ok(tm.tmMaxCharWidth == fd[i].max_char_width, "%s(%d): tm.tmMaxCharWidth %d != %d\n", fd[i].face_name, fd[i].height, tm.tmMaxCharWidth, fd[i].max_char_width);
-
+ /* Don't run the max char width test on System/ANSI_CHARSET. We have extra characters in our font
+ that make the max width bigger */
+ if(strcmp(lf.lfFaceName, "System") || lf.lfCharSet != ANSI_CHARSET)
+ ok(tm.tmMaxCharWidth == fd[i].max_char_width, "%s(%d): tm.tmMaxCharWidth %d != %d\n", fd[i].face_name, fd[i].height, tm.tmMaxCharWidth, fd[i].max_char_width);
+ }
SelectObject(hdc, old_hfont);
DeleteObject(hfont);
}
@@ -766,7 +839,7 @@ static void test_GdiGetCharDimensions(void)
if (!pGdiGetCharDimensions)
{
- skip("GdiGetCharDimensions not available on this platform\n");
+ win_skip("GdiGetCharDimensions not available on this platform\n");
return;
}
@@ -806,7 +879,7 @@ static void test_GetCharABCWidths(void)
if (!pGetCharABCWidthsW || !pGetCharABCWidthsI)
{
- skip("GetCharABCWidthsW/I not available on this platform\n");
+ win_skip("GetCharABCWidthsW/I not available on this platform\n");
return;
}
@@ -871,7 +944,7 @@ static void test_text_extents(void)
GetTextExtentExPointW(hdc, wt, 1, 1, &fit1, &fit2, &sz1);
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("Skipping remainder of text extents test on a Win9x platform\n");
+ win_skip("Skipping remainder of text extents test on a Win9x platform\n");
hfont = SelectObject(hdc, hfont);
DeleteObject(hfont);
ReleaseDC(0, hdc);
@@ -929,7 +1002,7 @@ static void test_GetGlyphIndices(void)
HFONT hOldFont;
if (!pGetGlyphIndicesW) {
- skip("GetGlyphIndicesW not available on platform\n");
+ win_skip("GetGlyphIndicesW not available on platform\n");
return;
}
@@ -966,7 +1039,7 @@ static void test_GetGlyphIndices(void)
testtext[0] = textm.tmDefaultChar;
charcount = pGetGlyphIndicesW(hdc, testtext, (sizeof(testtext)/2)-1, glyphs, flags);
ok(charcount == 5, "GetGlyphIndicesW count of glyphs should = 5 not %d\n", charcount);
- todo_wine ok(glyphs[0] == 0, "GetGlyphIndicesW for tmDefaultChar should be 0 not %04x\n", glyphs[0]);
+ ok(glyphs[0] == 0, "GetGlyphIndicesW for tmDefaultChar should be 0 not %04x\n", glyphs[0]);
ok(glyphs[4] == 0, "GetGlyphIndicesW should have returned 0 not %04x\n", glyphs[4]);
DeleteObject(SelectObject(hdc, hOldFont));
}
@@ -1064,7 +1137,7 @@ static void test_GetKerningPairs(void)
GetKerningPairsW(hdc, 0, NULL);
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("Skipping the GetKerningPairs test on a Win9x platform\n");
+ win_skip("Skipping the GetKerningPairs test on a Win9x platform\n");
ReleaseDC(0, hdc);
return;
}
@@ -1188,6 +1261,7 @@ static void test_GetOutlineTextMetrics(void)
HFONT hfont, hfont_old;
HDC hdc;
DWORD ret, otm_size;
+ LPSTR unset_ptr;
if (!is_font_installed("Arial"))
{
@@ -1244,6 +1318,7 @@ static void test_GetOutlineTextMetrics(void)
/* ask about truncated data */
memset(otm, 0xAA, otm_size);
+ memset(&unset_ptr, 0xAA, sizeof(unset_ptr));
SetLastError(0xdeadbeef);
otm->otmSize = sizeof(*otm) - sizeof(LPSTR); /* just in case for Win9x compatibility */
ret = GetOutlineTextMetrics(hdc, otm->otmSize, otm);
@@ -1256,7 +1331,7 @@ static void test_GetOutlineTextMetrics(void)
ok(otm->otmpFaceName == NULL, "expected NULL got %p\n", otm->otmpFaceName);
ok(otm->otmpStyleName == NULL, "expected NULL got %p\n", otm->otmpStyleName);
}
- ok(otm->otmpFullName == (LPSTR)0xAAAAAAAA, "expected 0xAAAAAAAA got %p\n", otm->otmpFullName);
+ ok(otm->otmpFullName == unset_ptr, "expected %p got %p\n", unset_ptr, otm->otmpFullName);
HeapFree(GetProcessHeap(), 0, otm);
@@ -1270,7 +1345,6 @@ static void testJustification(HDC hdc, PSTR str, RECT *clientArea)
{
INT x, y,
breakCount,
- outputWidth = 0, /* to test TabbedTextOut() */
justifiedWidth = 0, /* to test GetTextExtentExPointW() */
areaWidth = clientArea->right - clientArea->left,
nErrors = 0, e;
@@ -1282,7 +1356,6 @@ static void testJustification(HDC hdc, PSTR str, RECT *clientArea)
{
char extent[100];
int GetTextExtentExPointWWidth;
- int TabbedTextOutWidth;
} error[10];
GetTextMetricsA(hdc, &tm);
@@ -1328,15 +1401,11 @@ static void testJustification(HDC hdc, PSTR str, RECT *clientArea)
x = clientArea->left;
- outputWidth = LOWORD(TabbedTextOut(
- hdc, x, y, pFirstChar, pLastChar - pFirstChar,
- 0, NULL, 0));
/* catch errors and report them */
- if (!lastExtent && ((outputWidth != areaWidth) || (justifiedWidth != areaWidth)))
+ if (!lastExtent && (justifiedWidth != areaWidth))
{
memset(error[nErrors].extent, 0, 100);
memcpy(error[nErrors].extent, pFirstChar, pLastChar - pFirstChar);
- error[nErrors].TabbedTextOutWidth = outputWidth;
error[nErrors].GetTextExtentExPointWWidth = justifiedWidth;
nErrors++;
}
@@ -1347,9 +1416,6 @@ static void testJustification(HDC hdc, PSTR str, RECT *clientArea)
for (e = 0; e < nErrors; e++)
{
- ok(near_match(error[e].TabbedTextOutWidth, areaWidth),
- "The output text (\"%s\") width should be %d, not %d.\n",
- error[e].extent, areaWidth, error[e].TabbedTextOutWidth);
/* The width returned by GetTextExtentPoint32() is exactly the same
returned by GetTextExtentExPointW() - see dlls/gdi32/font.c */
ok(error[e].GetTextExtentExPointWWidth == areaWidth,
@@ -1438,7 +1504,7 @@ static BOOL get_glyph_indices(INT charset, UINT code_page, WORD *idx, UINT count
ok(!(fs.fsCsb[0] & (1 << 31)), "symbol encoding should NOT be available\n");
}
- if (!TranslateCharsetInfo((DWORD *)cs, &csi, TCI_SRCCHARSET))
+ if (!TranslateCharsetInfo((DWORD *)(INT_PTR)cs, &csi, TCI_SRCCHARSET))
{
trace("Can't find codepage for charset %d\n", cs);
ReleaseDC(0, hdc);
@@ -1495,7 +1561,7 @@ static void test_font_charset(void)
if (!pGetGlyphIndicesA || !pGetGlyphIndicesW)
{
- skip("Skipping the font charset test on a Win9x platform\n");
+ win_skip("Skipping the font charset test on a Win9x platform\n");
return;
}
@@ -1540,7 +1606,7 @@ static void test_GetFontUnicodeRanges(void)
if (!pGetFontUnicodeRanges)
{
- skip("GetFontUnicodeRanges not available before W2K\n");
+ win_skip("GetFontUnicodeRanges not available before W2K\n");
return;
}
@@ -1719,7 +1785,9 @@ static void test_EnumFontFamilies(const char *font_name, INT font_charset)
ok(efdw.total > 0, "fonts enumerated: NULL\n");
ok(ansi_charset > 0, "NULL family should enumerate ANSI_CHARSET\n");
ok(symbol_charset > 0, "NULL family should enumerate SYMBOL_CHARSET\n");
- ok(russian_charset > 0, "NULL family should enumerate RUSSIAN_CHARSET\n");
+ ok(russian_charset > 0 ||
+ broken(russian_charset == 0), /* NT4 */
+ "NULL family should enumerate RUSSIAN_CHARSET\n");
}
efdw.total = 0;
@@ -1898,10 +1966,7 @@ static void test_negative_width(HDC hdc, const LOGFONTA *lf)
MAT2 mat = { {0,1}, {0,0}, {0,0}, {0,1} };
if(!pGetGlyphIndicesA)
- {
- skip("GetGlyphIndicesA is unavailable\n");
return;
- }
/* negative widths are handled just as positive ones */
lf2.lfWidth = -lf->lfWidth;
@@ -2011,27 +2076,222 @@ typedef struct
#ifdef WORDS_BIGENDIAN
#define GET_BE_WORD(x) (x)
+#define GET_BE_DWORD(x) (x)
#else
#define GET_BE_WORD(x) MAKEWORD(HIBYTE(x), LOBYTE(x))
+#define GET_BE_DWORD(x) MAKELONG(GET_BE_WORD(HIWORD(x)), GET_BE_WORD(LOWORD(x)));
#endif
#define MS_MAKE_TAG(ch0, ch1, ch2, ch3) \
((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24))
#define MS_OS2_TAG MS_MAKE_TAG('O','S','/','2')
+#define MS_CMAP_TAG MS_MAKE_TAG('c','m','a','p')
+
+typedef struct
+{
+ USHORT version;
+ USHORT num_tables;
+} cmap_header;
+
+typedef struct
+{
+ USHORT plat_id;
+ USHORT enc_id;
+ ULONG offset;
+} cmap_encoding_record;
+
+typedef struct
+{
+ USHORT format;
+ USHORT length;
+ USHORT language;
+
+ BYTE glyph_ids[256];
+} cmap_format_0;
+
+typedef struct
+{
+ USHORT format;
+ USHORT length;
+ USHORT language;
+
+ USHORT seg_countx2;
+ USHORT search_range;
+ USHORT entry_selector;
+ USHORT range_shift;
+
+ USHORT end_count[1]; /* this is a variable-sized array of length seg_countx2 / 2 */
+/* Then follows:
+ USHORT pad;
+ USHORT start_count[seg_countx2 / 2];
+ USHORT id_delta[seg_countx2 / 2];
+ USHORT id_range_offset[seg_countx2 / 2];
+ USHORT glyph_ids[];
+*/
+} cmap_format_4;
+
+typedef struct
+{
+ USHORT end_count;
+ USHORT start_count;
+ USHORT id_delta;
+ USHORT id_range_offset;
+} cmap_format_4_seg;
+
+static void expect_ff(const TEXTMETRICA *tmA, const TT_OS2_V2 *os2, WORD family, const char *name)
+{
+ ok((tmA->tmPitchAndFamily & 0xf0) == family, "%s: expected family %02x got %02x. panose %d-%d-%d-%d-...\n",
+ name, family, tmA->tmPitchAndFamily, os2->panose.bFamilyType, os2->panose.bSerifStyle,
+ os2->panose.bWeight, os2->panose.bProportion);
+}
+
+static BOOL get_first_last_from_cmap0(void *ptr, DWORD *first, DWORD *last)
+{
+ int i;
+ cmap_format_0 *cmap = (cmap_format_0*)ptr;
+
+ *first = 256;
+
+ for(i = 0; i < 256; i++)
+ {
+ if(cmap->glyph_ids[i] == 0) continue;
+ *last = i;
+ if(*first == 256) *first = i;
+ }
+ if(*first == 256) return FALSE;
+ return TRUE;
+}
+
+static void get_seg4(cmap_format_4 *cmap, USHORT seg_num, cmap_format_4_seg *seg)
+{
+ USHORT segs = GET_BE_WORD(cmap->seg_countx2) / 2;
+ seg->end_count = GET_BE_WORD(cmap->end_count[seg_num]);
+ seg->start_count = GET_BE_WORD(cmap->end_count[segs + 1 + seg_num]);
+ seg->id_delta = GET_BE_WORD(cmap->end_count[2 * segs + 1 + seg_num]);
+ seg->id_range_offset = GET_BE_WORD(cmap->end_count[3 * segs + 1 + seg_num]);
+}
+
+static BOOL get_first_last_from_cmap4(void *ptr, DWORD *first, DWORD *last)
+{
+ int i;
+ cmap_format_4 *cmap = (cmap_format_4*)ptr;
+ USHORT seg_count = GET_BE_WORD(cmap->seg_countx2) / 2;
+ USHORT const *glyph_ids = cmap->end_count + 4 * seg_count + 1;
+
+ *first = 0x10000;
+
+ for(i = 0; i < seg_count; i++)
+ {
+ DWORD code, index;
+ cmap_format_4_seg seg;
+
+ get_seg4(cmap, i, &seg);
+ for(code = seg.start_count; code <= seg.end_count; code++)
+ {
+ if(seg.id_range_offset == 0)
+ index = (seg.id_delta + code) & 0xffff;
+ else
+ {
+ index = seg.id_range_offset / 2
+ + code - seg.start_count
+ + i - seg_count;
+
+ index = GET_BE_WORD(glyph_ids[index]);
+ if(index) index += seg.id_delta;
+ }
+ if(*first == 0x10000)
+ *last = *first = code;
+ else if(index)
+ *last = code;
+ }
+ }
+
+ if(*first == 0x10000) return FALSE;
+ return TRUE;
+}
+
+static void *get_cmap(cmap_header *header, USHORT plat_id, USHORT enc_id)
+{
+ USHORT i;
+ cmap_encoding_record *record = (cmap_encoding_record *)(header + 1);
+
+ for(i = 0; i < GET_BE_WORD(header->num_tables); i++)
+ {
+ if(GET_BE_WORD(record->plat_id) == plat_id && GET_BE_WORD(record->enc_id) == enc_id)
+ return (BYTE *)header + GET_BE_DWORD(record->offset);
+ record++;
+ }
+ return NULL;
+}
+
+typedef enum
+{
+ cmap_none,
+ cmap_ms_unicode,
+ cmap_ms_symbol
+} cmap_type;
+
+static BOOL get_first_last_from_cmap(HDC hdc, DWORD *first, DWORD *last, cmap_type *cmap_type)
+{
+ LONG size, ret;
+ cmap_header *header;
+ void *cmap;
+ BOOL r = FALSE;
+ WORD format;
+
+ size = GetFontData(hdc, MS_CMAP_TAG, 0, NULL, 0);
+ ok(size != GDI_ERROR, "no cmap table found\n");
+ if(size == GDI_ERROR) return FALSE;
+
+ header = HeapAlloc(GetProcessHeap(), 0, size);
+ ret = GetFontData(hdc, MS_CMAP_TAG, 0, header, size);
+ ok(ret == size, "GetFontData should return %u not %u\n", size, ret);
+ ok(GET_BE_WORD(header->version) == 0, "got cmap version %d\n", GET_BE_WORD(header->version));
+
+ cmap = get_cmap(header, 3, 1);
+ if(cmap)
+ *cmap_type = cmap_ms_unicode;
+ else
+ {
+ cmap = get_cmap(header, 3, 0);
+ if(cmap) *cmap_type = cmap_ms_symbol;
+ }
+ if(!cmap)
+ {
+ *cmap_type = cmap_none;
+ goto end;
+ }
+
+ format = GET_BE_WORD(*(WORD *)cmap);
+ switch(format)
+ {
+ case 0:
+ r = get_first_last_from_cmap0(cmap, first, last);
+ break;
+ case 4:
+ r = get_first_last_from_cmap4(cmap, first, last);
+ break;
+ default:
+ trace("unhandled cmap format %d\n", format);
+ break;
+ }
+
+end:
+ HeapFree(GetProcessHeap(), 0, header);
+ return r;
+}
static void test_text_metrics(const LOGFONTA *lf)
{
HDC hdc;
HFONT hfont, hfont_old;
TEXTMETRICA tmA;
- TEXTMETRICW tmW;
- UINT first_unicode_char, last_unicode_char, default_char, break_char;
- INT test_char;
TT_OS2_V2 tt_os2;
- USHORT version;
LONG size, ret;
const char *font_name = lf->lfFaceName;
+ DWORD cmap_first = 0, cmap_last = 0;
+ cmap_type cmap_type;
hdc = GetDC(0);
@@ -2057,78 +2317,171 @@ static void test_text_metrics(const LOGFONTA *lf)
ret = GetFontData(hdc, MS_OS2_TAG, 0, &tt_os2, size);
ok(ret == size, "GetFontData should return %u not %u\n", size, ret);
- version = GET_BE_WORD(tt_os2.version);
-
- first_unicode_char = GET_BE_WORD(tt_os2.usFirstCharIndex);
- last_unicode_char = GET_BE_WORD(tt_os2.usLastCharIndex);
- default_char = GET_BE_WORD(tt_os2.usDefaultChar);
- break_char = GET_BE_WORD(tt_os2.usBreakChar);
-
- trace("font %s charset %u: %x-%x default %x break %x OS/2 version %u vendor %4.4s\n",
- font_name, lf->lfCharSet, first_unicode_char, last_unicode_char, default_char, break_char,
- version, (LPCSTR)&tt_os2.achVendID);
-
SetLastError(0xdeadbeef);
ret = GetTextMetricsA(hdc, &tmA);
ok(ret, "GetTextMetricsA error %u\n", GetLastError());
-#if 0 /* FIXME: This doesn't appear to be what Windows does */
- test_char = min(first_unicode_char - 1, 255);
- ok(tmA.tmFirstChar == test_char, "A: tmFirstChar for %s %02x != %02x\n",
- font_name, tmA.tmFirstChar, test_char);
-#endif
- if (lf->lfCharSet == SYMBOL_CHARSET)
+ if(!get_first_last_from_cmap(hdc, &cmap_first, &cmap_last, &cmap_type))
{
- test_char = min(last_unicode_char - 0xf000, 255);
- ok(tmA.tmLastChar == test_char, "A: tmLastChar for %s %02x != %02x\n",
- font_name, tmA.tmLastChar, test_char);
+ skip("Unable to retrieve first and last glyphs from cmap\n");
}
else
{
- test_char = min(last_unicode_char, 255);
- ok(tmA.tmLastChar == test_char, "A: tmLastChar for %s %02x != %02x\n",
- font_name, tmA.tmLastChar, test_char);
- }
+ USHORT expect_first_A, expect_last_A, expect_break_A, expect_default_A;
+ USHORT expect_first_W, expect_last_W, expect_break_W, expect_default_W;
+ UINT os2_first_char, os2_last_char, default_char, break_char;
+ USHORT version;
+ TEXTMETRICW tmW;
- SetLastError(0xdeadbeef);
- ret = GetTextMetricsW(hdc, &tmW);
- ok(ret || GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
- "GetTextMetricsW error %u\n", GetLastError());
- if (ret)
- {
- trace("%04x-%04x (%02x-%02x) default %x (%x) break %x (%x)\n",
- tmW.tmFirstChar, tmW.tmLastChar, tmA.tmFirstChar, tmA.tmLastChar,
- tmW.tmDefaultChar, tmA.tmDefaultChar, tmW.tmBreakChar, tmA.tmBreakChar);
+ version = GET_BE_WORD(tt_os2.version);
- if (lf->lfCharSet == SYMBOL_CHARSET)
+ os2_first_char = GET_BE_WORD(tt_os2.usFirstCharIndex);
+ os2_last_char = GET_BE_WORD(tt_os2.usLastCharIndex);
+ default_char = GET_BE_WORD(tt_os2.usDefaultChar);
+ break_char = GET_BE_WORD(tt_os2.usBreakChar);
+
+ trace("font %s charset %u: %x-%x (%x-%x) default %x break %x OS/2 version %u vendor %4.4s\n",
+ font_name, lf->lfCharSet, os2_first_char, os2_last_char, cmap_first, cmap_last,
+ default_char, break_char, version, (LPCSTR)&tt_os2.achVendID);
+
+ if (cmap_type == cmap_ms_symbol || (cmap_first >= 0xf000 && cmap_first < 0xf100))
{
- /* It appears that for fonts with SYMBOL_CHARSET Windows always
- * sets symbol range to 0 - f0ff
- */
- ok(tmW.tmFirstChar == 0, "W: tmFirstChar for %s %02x != 0\n",
- font_name, tmW.tmFirstChar);
- /* FIXME: Windows returns f0ff here, while Wine f0xx */
- ok(tmW.tmLastChar >= 0xf000, "W: tmLastChar for %s %02x < 0xf000\n",
- font_name, tmW.tmLastChar);
-
- ok(tmW.tmDefaultChar == 0x1f, "W: tmDefaultChar for %s %02x != 0x1f\n",
- font_name, tmW.tmDefaultChar);
- ok(tmW.tmBreakChar == 0x20, "W: tmBreakChar for %s %02x != 0x20\n",
- font_name, tmW.tmBreakChar);
+ expect_first_W = 0;
+ switch(GetACP())
+ {
+ case 1257: /* Baltic */
+ expect_last_W = 0xf8fd;
+ break;
+ default:
+ expect_last_W = 0xf0ff;
+ }
+ expect_break_W = 0x20;
+ expect_default_W = expect_break_W - 1;
+ expect_first_A = 0x1e;
+ expect_last_A = min(os2_last_char - os2_first_char + 0x20, 0xff);
}
else
{
- ok(tmW.tmFirstChar == first_unicode_char, "W: tmFirstChar for %s %02x != %02x\n",
- font_name, tmW.tmFirstChar, first_unicode_char);
- ok(tmW.tmLastChar == last_unicode_char, "W: tmLastChar for %s %02x != %02x\n",
- font_name, tmW.tmLastChar, last_unicode_char);
+ expect_first_W = cmap_first;
+ expect_last_W = min(cmap_last, os2_last_char);
+ if(os2_first_char <= 1)
+ expect_break_W = os2_first_char + 2;
+ else if(os2_first_char > 0xff)
+ expect_break_W = 0x20;
+ else
+ expect_break_W = os2_first_char;
+ expect_default_W = expect_break_W - 1;
+ expect_first_A = expect_default_W - 1;
+ expect_last_A = min(expect_last_W, 0xff);
}
- ret = GetDeviceCaps(hdc, LOGPIXELSX);
- ok(tmW.tmDigitizedAspectX == ret, "W: tmDigitizedAspectX %u != %u\n",
- tmW.tmDigitizedAspectX, ret);
- ret = GetDeviceCaps(hdc, LOGPIXELSY);
- ok(tmW.tmDigitizedAspectX == ret, "W: tmDigitizedAspectY %u != %u\n",
- tmW.tmDigitizedAspectX, ret);
+ expect_break_A = expect_break_W;
+ expect_default_A = expect_default_W;
+
+ /* Wine currently uses SYMBOL_CHARSET to identify whether the ANSI metrics need special handling */
+ if(cmap_type != cmap_ms_symbol && tmA.tmCharSet == SYMBOL_CHARSET && expect_first_A != 0x1e)
+ todo_wine ok(tmA.tmFirstChar == expect_first_A ||
+ tmA.tmFirstChar == expect_first_A + 1 /* win9x */,
+ "A: tmFirstChar for %s got %02x expected %02x\n", font_name, tmA.tmFirstChar, expect_first_A);
+ else
+ ok(tmA.tmFirstChar == expect_first_A ||
+ tmA.tmFirstChar == expect_first_A + 1 /* win9x */,
+ "A: tmFirstChar for %s got %02x expected %02x\n", font_name, tmA.tmFirstChar, expect_first_A);
+ ok(tmA.tmLastChar == expect_last_A ||
+ tmA.tmLastChar == 0xff /* win9x */,
+ "A: tmLastChar for %s got %02x expected %02x\n", font_name, tmA.tmLastChar, expect_last_A);
+ ok(tmA.tmBreakChar == expect_break_A, "A: tmBreakChar for %s got %02x expected %02x\n",
+ font_name, tmA.tmBreakChar, expect_break_A);
+ ok(tmA.tmDefaultChar == expect_default_A, "A: tmDefaultChar for %s got %02x expected %02x\n",
+ font_name, tmA.tmDefaultChar, expect_default_A);
+
+
+ SetLastError(0xdeadbeef);
+ ret = GetTextMetricsW(hdc, &tmW);
+ ok(ret || GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
+ "GetTextMetricsW error %u\n", GetLastError());
+ if (ret)
+ {
+ /* Wine uses the os2 first char */
+ if(cmap_first != os2_first_char && cmap_type != cmap_ms_symbol)
+ todo_wine ok(tmW.tmFirstChar == expect_first_W, "W: tmFirstChar for %s got %02x expected %02x\n",
+ font_name, tmW.tmFirstChar, expect_first_W);
+ else
+ ok(tmW.tmFirstChar == expect_first_W, "W: tmFirstChar for %s got %02x expected %02x\n",
+ font_name, tmW.tmFirstChar, expect_first_W);
+
+ /* Wine uses the os2 last char */
+ if(expect_last_W != os2_last_char && cmap_type != cmap_ms_symbol)
+ todo_wine ok(tmW.tmLastChar == expect_last_W, "W: tmLastChar for %s got %02x expected %02x\n",
+ font_name, tmW.tmLastChar, expect_last_W);
+ else
+ ok(tmW.tmLastChar == expect_last_W, "W: tmLastChar for %s got %02x expected %02x\n",
+ font_name, tmW.tmLastChar, expect_last_W);
+ ok(tmW.tmBreakChar == expect_break_W, "W: tmBreakChar for %s got %02x expected %02x\n",
+ font_name, tmW.tmBreakChar, expect_break_W);
+ ok(tmW.tmDefaultChar == expect_default_W, "W: tmDefaultChar for %s got %02x expected %02x\n",
+ font_name, tmW.tmDefaultChar, expect_default_W);
+
+ /* Test the aspect ratio while we have tmW */
+ ret = GetDeviceCaps(hdc, LOGPIXELSX);
+ ok(tmW.tmDigitizedAspectX == ret, "W: tmDigitizedAspectX %u != %u\n",
+ tmW.tmDigitizedAspectX, ret);
+ ret = GetDeviceCaps(hdc, LOGPIXELSY);
+ ok(tmW.tmDigitizedAspectX == ret, "W: tmDigitizedAspectY %u != %u\n",
+ tmW.tmDigitizedAspectX, ret);
+ }
+ }
+
+ /* test FF_ values */
+ switch(tt_os2.panose.bFamilyType)
+ {
+ case PAN_ANY:
+ case PAN_NO_FIT:
+ case PAN_FAMILY_TEXT_DISPLAY:
+ case PAN_FAMILY_PICTORIAL:
+ default:
+ if((tmA.tmPitchAndFamily & 1) == 0 || /* fixed */
+ tt_os2.panose.bProportion == PAN_PROP_MONOSPACED)
+ {
+ expect_ff(&tmA, &tt_os2, FF_MODERN, font_name);
+ break;
+ }
+ switch(tt_os2.panose.bSerifStyle)
+ {
+ case PAN_ANY:
+ case PAN_NO_FIT:
+ default:
+ expect_ff(&tmA, &tt_os2, FF_DONTCARE, font_name);
+ break;
+
+ case PAN_SERIF_COVE:
+ case PAN_SERIF_OBTUSE_COVE:
+ case PAN_SERIF_SQUARE_COVE:
+ case PAN_SERIF_OBTUSE_SQUARE_COVE:
+ case PAN_SERIF_SQUARE:
+ case PAN_SERIF_THIN:
+ case PAN_SERIF_BONE:
+ case PAN_SERIF_EXAGGERATED:
+ case PAN_SERIF_TRIANGLE:
+ expect_ff(&tmA, &tt_os2, FF_ROMAN, font_name);
+ break;
+
+ case PAN_SERIF_NORMAL_SANS:
+ case PAN_SERIF_OBTUSE_SANS:
+ case PAN_SERIF_PERP_SANS:
+ case PAN_SERIF_FLARED:
+ case PAN_SERIF_ROUNDED:
+ expect_ff(&tmA, &tt_os2, FF_SWISS, font_name);
+ break;
+ }
+ break;
+
+ case PAN_FAMILY_SCRIPT:
+ expect_ff(&tmA, &tt_os2, FF_SCRIPT, font_name);
+ break;
+
+ case PAN_FAMILY_DECORATIVE:
+ expect_ff(&tmA, &tt_os2, FF_DECORATIVE, font_name);
+ break;
}
test_negative_width(hdc, lf);
@@ -2158,6 +2511,10 @@ static void test_GetTextMetrics(void)
HDC hdc;
INT enumed;
+ /* Report only once */
+ if(!pGetGlyphIndicesA)
+ win_skip("GetGlyphIndicesA is unavailable, negative width will not be checked\n");
+
hdc = GetDC(0);
memset(&lf, 0, sizeof(lf));
@@ -2274,16 +2631,16 @@ todo_wine /* Wine uses Arial for all substitutions */
cs = GetTextCharset(hdc);
if (font_subst[i].charset == expected_cs)
{
- ok(cs == expected_cs, "expected %d, got %d\n", expected_cs, cs);
+ ok(cs == expected_cs, "expected %d, got %d for font %s\n", expected_cs, cs, font_subst[i].name);
GetTextFaceA(hdc, sizeof(buf), buf);
ok(!lstrcmpiA(buf, font_subst[i].name), "expected %s, got %s\n", font_subst[i].name, buf);
}
else
{
- ok(cs == ANSI_CHARSET, "expected ANSI_CHARSET, got %d\n", cs);
+ ok(cs == ANSI_CHARSET, "expected ANSI_CHARSET, got %d for font %s\n", cs, font_subst[i].name);
GetTextFaceA(hdc, sizeof(buf), buf);
ok(!lstrcmpiA(buf, "Arial") /* XP, Vista */ ||
- !lstrcmpiA(buf, "Times New Roman") /* Win9x */, "got %s\n", buf);
+ !lstrcmpiA(buf, "Times New Roman") /* Win9x */, "got %s for font %s\n", buf, font_subst[i].name);
}
DeleteObject(SelectObject(hdc, hfont));
@@ -2298,9 +2655,9 @@ todo_wine /* Wine uses Arial for all substitutions */
!lstrcmpiA(buf, font_subst[i].name) /* XP, Vista */ ||
!lstrcmpiA(buf, "MS Serif") /* Win9x */ ||
!lstrcmpiA(buf, "MS Sans Serif"), /* win2k3 */
- "got %s\n", buf);
+ "got %s for font %s\n", buf, font_subst[i].name);
cs = GetTextCharset(hdc);
- ok(cs == expected_cs, "expected %d, got %d\n", expected_cs, cs);
+ ok(cs == expected_cs, "expected %d, got %d for font %s\n", expected_cs, cs, font_subst[i].name);
DeleteObject(SelectObject(hdc, hfont));
}
@@ -2317,7 +2674,7 @@ static void test_GdiRealizationInfo(void)
if(!pGdiRealizationInfo)
{
- skip("GdiRealizationInfo not available\n");
+ win_skip("GdiRealizationInfo not available\n");
return;
}
@@ -2326,7 +2683,7 @@ static void test_GdiRealizationInfo(void)
memset(info, 0xcc, sizeof(info));
r = pGdiRealizationInfo(hdc, info);
ok(r != 0, "ret 0\n");
- ok(info[0] == 1, "info[0] = %x for the system font\n", info[0]);
+ ok((info[0] & 0xf) == 1, "info[0] = %x for the system font\n", info[0]);
ok(info[3] == 0xcccccccc, "structure longer than 3 dwords\n");
if (!is_truetype_font_installed("Arial"))
@@ -2345,7 +2702,7 @@ static void test_GdiRealizationInfo(void)
memset(info, 0xcc, sizeof(info));
r = pGdiRealizationInfo(hdc, info);
ok(r != 0, "ret 0\n");
- ok(info[0] == 3, "info[0] = %x for arial\n", info[0]);
+ ok((info[0] & 0xf) == 3, "info[0] = %x for arial\n", info[0]);
ok(info[3] == 0xcccccccc, "structure longer than 3 dwords\n");
DeleteObject(SelectObject(hdc, hfont_old));
@@ -2404,7 +2761,9 @@ static void test_GetTextFace(void)
ok(bufA[0] == faceA[0] && bufA[1] == '\0', "GetTextFaceA didn't copy\n");
n = GetTextFaceA(dc, 0, NULL);
- ok(n == sizeof faceA, "GetTextFaceA returned %d\n", n);
+ ok(n == sizeof faceA ||
+ broken(n == 0), /* win98, winMe */
+ "GetTextFaceA returned %d\n", n);
DeleteObject(SelectObject(dc, g));
ReleaseDC(NULL, dc);
@@ -2478,6 +2837,80 @@ static void test_orientation(void)
DeleteDC(hdc);
}
+static void test_GetGlyphOutline(void)
+{
+ MAT2 mat = { {0,1}, {0,0}, {0,0}, {0,1} };
+ HDC hdc;
+ GLYPHMETRICS gm;
+ LOGFONTA lf;
+ HFONT hfont, old_hfont;
+ INT ret;
+
+ if (!is_truetype_font_installed("Tahoma"))
+ {
+ skip("Tahoma is not installed\n");
+ return;
+ }
+
+ hdc = CreateCompatibleDC(0);
+ memset(&lf, 0, sizeof(lf));
+ lf.lfHeight = 72;
+ lstrcpyA(lf.lfFaceName, "Tahoma");
+ SetLastError(0xdeadbeef);
+ hfont = CreateFontIndirectA(&lf);
+ ok(hfont != 0, "CreateFontIndirectA error %u\n", GetLastError());
+ old_hfont = SelectObject(hdc, hfont);
+
+ memset(&gm, 0, sizeof(gm));
+ SetLastError(0xdeadbeef);
+ ret = GetGlyphOutlineA(hdc, 'A', GGO_METRICS, &gm, 0, NULL, &mat);
+ ok(ret != GDI_ERROR, "GetGlyphOutlineA error %u\n", GetLastError());
+
+ memset(&gm, 0, sizeof(gm));
+ SetLastError(0xdeadbeef);
+ ret = GetGlyphOutlineA(hdc, 'A', GGO_METRICS, &gm, 0, NULL, NULL);
+ ok(ret == GDI_ERROR, "GetGlyphOutlineA should fail\n");
+ ok(GetLastError() == 0xdeadbeef ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* win98, winMe */
+ "expected 0xdeadbeef, got %u\n", GetLastError());
+
+ memset(&gm, 0, sizeof(gm));
+ SetLastError(0xdeadbeef);
+ ret = GetGlyphOutlineW(hdc, 'A', GGO_METRICS, &gm, 0, NULL, &mat);
+ if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+ ok(ret != GDI_ERROR, "GetGlyphOutlineW error %u\n", GetLastError());
+
+ memset(&gm, 0, sizeof(gm));
+ SetLastError(0xdeadbeef);
+ ret = GetGlyphOutlineW(hdc, 'A', GGO_METRICS, &gm, 0, NULL, NULL);
+ if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ ok(ret == GDI_ERROR, "GetGlyphOutlineW should fail\n");
+ ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %u\n", GetLastError());
+ }
+
+ /* test for needed buffer size request on space char */
+ memset(&gm, 0, sizeof(gm));
+ SetLastError(0xdeadbeef);
+ ret = GetGlyphOutlineW(hdc, ' ', GGO_NATIVE, &gm, 0, NULL, &mat);
+ if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+ ok(ret == 0, "GetGlyphOutlineW should return 0 buffer size for space char\n");
+
+ /* requesting buffer size for space char + error */
+ memset(&gm, 0, sizeof(gm));
+ SetLastError(0xdeadbeef);
+ ret = GetGlyphOutlineW(0, ' ', GGO_NATIVE, &gm, 0, NULL, NULL);
+ if (GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ ok(ret == GDI_ERROR, "GetGlyphOutlineW should return GDI_ERROR\n");
+ ok(GetLastError() == 0xdeadbeef, "expected 0xdeadbeef, got %u\n", GetLastError());
+ }
+
+ SelectObject(hdc, old_hfont);
+ DeleteObject(hfont);
+ DeleteDC(hdc);
+}
+
START_TEST(font)
{
init();
@@ -2515,4 +2948,5 @@ START_TEST(font)
test_GetTextMetrics();
test_GdiRealizationInfo();
test_GetTextFace();
+ test_GetGlyphOutline();
}
diff --git a/rostests/winetests/gdi32/gdiobj.c b/rostests/winetests/gdi32/gdiobj.c
index 6f051b0fffa..67a135e3cb9 100755
--- a/rostests/winetests/gdi32/gdiobj.c
+++ b/rostests/winetests/gdi32/gdiobj.c
@@ -110,7 +110,7 @@ struct hgdiobj_event
static DWORD WINAPI thread_proc(void *param)
{
LOGPEN lp;
- struct hgdiobj_event *hgdiobj_event = (struct hgdiobj_event *)param;
+ struct hgdiobj_event *hgdiobj_event = param;
hgdiobj_event->hdc = CreateDC("display", NULL, NULL, NULL);
ok(hgdiobj_event->hdc != NULL, "CreateDC error %u\n", GetLastError());
diff --git a/rostests/winetests/gdi32/generated.c b/rostests/winetests/gdi32/generated.c
index 9a35f24070b..2bd6376e9e5 100644
--- a/rostests/winetests/gdi32/generated.c
+++ b/rostests/winetests/gdi32/generated.c
@@ -1,4 +1,4 @@
-/* File generated automatically from tools/winapi/test.dat; do not edit! */
+/* File generated automatically from tools/winapi/tests.dat; do not edit! */
/* This file can be copied, modified and distributed without restriction. */
/*
@@ -27,22 +27,14 @@
* Windows API extension
*/
-#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
-# define FIELD_ALIGNMENT(type, field) __alignof(((type*)0)->field)
-#elif defined(__GNUC__)
-# define FIELD_ALIGNMENT(type, field) __alignof__(((type*)0)->field)
-#else
-/* FIXME: Not sure if is possible to do without compiler extension */
-#endif
-
#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
# define _TYPE_ALIGNMENT(type) __alignof(type)
#elif defined(__GNUC__)
# define _TYPE_ALIGNMENT(type) __alignof__(type)
#else
/*
- * FIXME: Not sure if is possible to do without compiler extension
- * (if type is not just a name that is, if so the normal)
+ * FIXME: May not be possible without a compiler extension
+ * (if type is not just a name that is, otherwise the normal
* TYPE_ALIGNMENT can be used)
*/
#endif
@@ -59,3877 +51,6568 @@
* Test helper macros
*/
-#ifdef FIELD_ALIGNMENT
-# define TEST_FIELD_ALIGNMENT(type, field, align) \
- ok(FIELD_ALIGNMENT(type, field) == align, \
- "FIELD_ALIGNMENT(" #type ", " #field ") == %d (expected " #align ")\n", \
- (int)FIELD_ALIGNMENT(type, field))
+#ifdef _WIN64
+
+# define TEST_TYPE_SIZE(type, size)
+# define TEST_TYPE_ALIGN(type, align)
+# define TEST_TARGET_ALIGN(type, align)
+# define TEST_FIELD_ALIGN(type, field, align)
+# define TEST_FIELD_OFFSET(type, field, offset)
+
#else
-# define TEST_FIELD_ALIGNMENT(type, field, align) do { } while (0)
+
+# define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+
+# ifdef TYPE_ALIGNMENT
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# else
+# define TEST_TYPE_ALIGN(type, align)
+# endif
+
+# ifdef _TYPE_ALIGNMENT
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# else
+# define TEST_TARGET_ALIGN(type, align)
+# define TEST_FIELD_ALIGN(type, field, align)
+# endif
+
+# define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) \
- ok(FIELD_OFFSET(type, field) == offset, \
- "FIELD_OFFSET(" #type ", " #field ") == %ld (expected " #offset ")\n", \
- (long int)FIELD_OFFSET(type, field))
+#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
+#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
+#define TEST_TYPE_SIGNED(type) C_ASSERT((type) -1 < 0);
+#define TEST_TYPE_UNSIGNED(type) C_ASSERT((type) -1 > 0);
-#ifdef _TYPE_ALIGNMENT
-#define TEST__TYPE_ALIGNMENT(type, align) \
- ok(_TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)_TYPE_ALIGNMENT(type))
-#else
-# define TEST__TYPE_ALIGNMENT(type, align) do { } while (0)
-#endif
-
-#ifdef TYPE_ALIGNMENT
-#define TEST_TYPE_ALIGNMENT(type, align) \
- ok(TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)TYPE_ALIGNMENT(type))
-#else
-# define TEST_TYPE_ALIGNMENT(type, align) do { } while (0)
-#endif
-
-#define TEST_TYPE_SIZE(type, size) \
- ok(sizeof(type) == size, "sizeof(" #type ") == %d (expected " #size ")\n", ((int) sizeof(type)))
-
-/***********************************************************************
- * Test macros
- */
-
-#define TEST_FIELD(type, field_type, field_name, field_offset, field_size, field_align) \
- TEST_TYPE_SIZE(field_type, field_size); \
- TEST_FIELD_ALIGNMENT(type, field_name, field_align); \
- TEST_FIELD_OFFSET(type, field_name, field_offset); \
-
-#define TEST_TYPE(type, size, align) \
- TEST_TYPE_ALIGNMENT(type, align); \
- TEST_TYPE_SIZE(type, size)
-
-#define TEST_TYPE_POINTER(type, size, align) \
- TEST__TYPE_ALIGNMENT(*(type)0, align); \
- TEST_TYPE_SIZE(*(type)0, size)
-
-#define TEST_TYPE_SIGNED(type) \
- ok((type) -1 < 0, "(" #type ") -1 < 0\n");
-
-#define TEST_TYPE_UNSIGNED(type) \
- ok((type) -1 > 0, "(" #type ") -1 > 0\n");
static void test_pack_ABC(void)
{
/* ABC (pack 4) */
- TEST_TYPE(ABC, 12, 4);
- TEST_FIELD(ABC, INT, abcA, 0, 4, 4);
- TEST_FIELD(ABC, UINT, abcB, 4, 4, 4);
- TEST_FIELD(ABC, INT, abcC, 8, 4, 4);
+ TEST_TYPE_SIZE (ABC, 12)
+ TEST_TYPE_ALIGN (ABC, 4)
+ TEST_FIELD_SIZE (ABC, abcA, 4)
+ TEST_FIELD_ALIGN (ABC, abcA, 4)
+ TEST_FIELD_OFFSET(ABC, abcA, 0)
+ TEST_FIELD_SIZE (ABC, abcB, 4)
+ TEST_FIELD_ALIGN (ABC, abcB, 4)
+ TEST_FIELD_OFFSET(ABC, abcB, 4)
+ TEST_FIELD_SIZE (ABC, abcC, 4)
+ TEST_FIELD_ALIGN (ABC, abcC, 4)
+ TEST_FIELD_OFFSET(ABC, abcC, 8)
}
static void test_pack_ABCFLOAT(void)
{
/* ABCFLOAT (pack 4) */
- TEST_TYPE(ABCFLOAT, 12, 4);
- TEST_FIELD(ABCFLOAT, FLOAT, abcfA, 0, 4, 4);
- TEST_FIELD(ABCFLOAT, FLOAT, abcfB, 4, 4, 4);
- TEST_FIELD(ABCFLOAT, FLOAT, abcfC, 8, 4, 4);
+ TEST_TYPE_SIZE (ABCFLOAT, 12)
+ TEST_TYPE_ALIGN (ABCFLOAT, 4)
+ TEST_FIELD_SIZE (ABCFLOAT, abcfA, 4)
+ TEST_FIELD_ALIGN (ABCFLOAT, abcfA, 4)
+ TEST_FIELD_OFFSET(ABCFLOAT, abcfA, 0)
+ TEST_FIELD_SIZE (ABCFLOAT, abcfB, 4)
+ TEST_FIELD_ALIGN (ABCFLOAT, abcfB, 4)
+ TEST_FIELD_OFFSET(ABCFLOAT, abcfB, 4)
+ TEST_FIELD_SIZE (ABCFLOAT, abcfC, 4)
+ TEST_FIELD_ALIGN (ABCFLOAT, abcfC, 4)
+ TEST_FIELD_OFFSET(ABCFLOAT, abcfC, 8)
}
static void test_pack_ABORTPROC(void)
{
/* ABORTPROC */
- TEST_TYPE(ABORTPROC, 4, 4);
+ TEST_TYPE_SIZE (ABORTPROC, 4)
+ TEST_TYPE_ALIGN (ABORTPROC, 4)
}
static void test_pack_BITMAP(void)
{
/* BITMAP (pack 4) */
- TEST_TYPE(BITMAP, 24, 4);
- TEST_FIELD(BITMAP, INT, bmType, 0, 4, 4);
- TEST_FIELD(BITMAP, INT, bmWidth, 4, 4, 4);
- TEST_FIELD(BITMAP, INT, bmHeight, 8, 4, 4);
- TEST_FIELD(BITMAP, INT, bmWidthBytes, 12, 4, 4);
- TEST_FIELD(BITMAP, WORD, bmPlanes, 16, 2, 2);
- TEST_FIELD(BITMAP, WORD, bmBitsPixel, 18, 2, 2);
- TEST_FIELD(BITMAP, LPVOID, bmBits, 20, 4, 4);
+ TEST_TYPE_SIZE (BITMAP, 24)
+ TEST_TYPE_ALIGN (BITMAP, 4)
+ TEST_FIELD_SIZE (BITMAP, bmType, 4)
+ TEST_FIELD_ALIGN (BITMAP, bmType, 4)
+ TEST_FIELD_OFFSET(BITMAP, bmType, 0)
+ TEST_FIELD_SIZE (BITMAP, bmWidth, 4)
+ TEST_FIELD_ALIGN (BITMAP, bmWidth, 4)
+ TEST_FIELD_OFFSET(BITMAP, bmWidth, 4)
+ TEST_FIELD_SIZE (BITMAP, bmHeight, 4)
+ TEST_FIELD_ALIGN (BITMAP, bmHeight, 4)
+ TEST_FIELD_OFFSET(BITMAP, bmHeight, 8)
+ TEST_FIELD_SIZE (BITMAP, bmWidthBytes, 4)
+ TEST_FIELD_ALIGN (BITMAP, bmWidthBytes, 4)
+ TEST_FIELD_OFFSET(BITMAP, bmWidthBytes, 12)
+ TEST_FIELD_SIZE (BITMAP, bmPlanes, 2)
+ TEST_FIELD_ALIGN (BITMAP, bmPlanes, 2)
+ TEST_FIELD_OFFSET(BITMAP, bmPlanes, 16)
+ TEST_FIELD_SIZE (BITMAP, bmBitsPixel, 2)
+ TEST_FIELD_ALIGN (BITMAP, bmBitsPixel, 2)
+ TEST_FIELD_OFFSET(BITMAP, bmBitsPixel, 18)
+ TEST_FIELD_SIZE (BITMAP, bmBits, 4)
+ TEST_FIELD_ALIGN (BITMAP, bmBits, 4)
+ TEST_FIELD_OFFSET(BITMAP, bmBits, 20)
}
static void test_pack_BITMAPCOREHEADER(void)
{
/* BITMAPCOREHEADER (pack 4) */
- TEST_TYPE(BITMAPCOREHEADER, 12, 4);
- TEST_FIELD(BITMAPCOREHEADER, DWORD, bcSize, 0, 4, 4);
- TEST_FIELD(BITMAPCOREHEADER, WORD, bcWidth, 4, 2, 2);
- TEST_FIELD(BITMAPCOREHEADER, WORD, bcHeight, 6, 2, 2);
- TEST_FIELD(BITMAPCOREHEADER, WORD, bcPlanes, 8, 2, 2);
- TEST_FIELD(BITMAPCOREHEADER, WORD, bcBitCount, 10, 2, 2);
+ TEST_TYPE_SIZE (BITMAPCOREHEADER, 12)
+ TEST_TYPE_ALIGN (BITMAPCOREHEADER, 4)
+ TEST_FIELD_SIZE (BITMAPCOREHEADER, bcSize, 4)
+ TEST_FIELD_ALIGN (BITMAPCOREHEADER, bcSize, 4)
+ TEST_FIELD_OFFSET(BITMAPCOREHEADER, bcSize, 0)
+ TEST_FIELD_SIZE (BITMAPCOREHEADER, bcWidth, 2)
+ TEST_FIELD_ALIGN (BITMAPCOREHEADER, bcWidth, 2)
+ TEST_FIELD_OFFSET(BITMAPCOREHEADER, bcWidth, 4)
+ TEST_FIELD_SIZE (BITMAPCOREHEADER, bcHeight, 2)
+ TEST_FIELD_ALIGN (BITMAPCOREHEADER, bcHeight, 2)
+ TEST_FIELD_OFFSET(BITMAPCOREHEADER, bcHeight, 6)
+ TEST_FIELD_SIZE (BITMAPCOREHEADER, bcPlanes, 2)
+ TEST_FIELD_ALIGN (BITMAPCOREHEADER, bcPlanes, 2)
+ TEST_FIELD_OFFSET(BITMAPCOREHEADER, bcPlanes, 8)
+ TEST_FIELD_SIZE (BITMAPCOREHEADER, bcBitCount, 2)
+ TEST_FIELD_ALIGN (BITMAPCOREHEADER, bcBitCount, 2)
+ TEST_FIELD_OFFSET(BITMAPCOREHEADER, bcBitCount, 10)
}
static void test_pack_BITMAPCOREINFO(void)
{
/* BITMAPCOREINFO (pack 4) */
- TEST_TYPE(BITMAPCOREINFO, 16, 4);
- TEST_FIELD(BITMAPCOREINFO, BITMAPCOREHEADER, bmciHeader, 0, 12, 4);
- TEST_FIELD(BITMAPCOREINFO, RGBTRIPLE[1], bmciColors, 12, 3, 1);
+ TEST_TYPE_SIZE (BITMAPCOREINFO, 16)
+ TEST_TYPE_ALIGN (BITMAPCOREINFO, 4)
+ TEST_FIELD_SIZE (BITMAPCOREINFO, bmciHeader, 12)
+ TEST_FIELD_ALIGN (BITMAPCOREINFO, bmciHeader, 4)
+ TEST_FIELD_OFFSET(BITMAPCOREINFO, bmciHeader, 0)
+ TEST_FIELD_SIZE (BITMAPCOREINFO, bmciColors, 3)
+ TEST_FIELD_ALIGN (BITMAPCOREINFO, bmciColors, 1)
+ TEST_FIELD_OFFSET(BITMAPCOREINFO, bmciColors, 12)
}
static void test_pack_BITMAPFILEHEADER(void)
{
/* BITMAPFILEHEADER (pack 2) */
- TEST_TYPE(BITMAPFILEHEADER, 14, 2);
- TEST_FIELD(BITMAPFILEHEADER, WORD, bfType, 0, 2, 2);
- TEST_FIELD(BITMAPFILEHEADER, DWORD, bfSize, 2, 4, 2);
- TEST_FIELD(BITMAPFILEHEADER, WORD, bfReserved1, 6, 2, 2);
- TEST_FIELD(BITMAPFILEHEADER, WORD, bfReserved2, 8, 2, 2);
- TEST_FIELD(BITMAPFILEHEADER, DWORD, bfOffBits, 10, 4, 2);
+ TEST_TYPE_SIZE (BITMAPFILEHEADER, 14)
+ TEST_TYPE_ALIGN (BITMAPFILEHEADER, 2)
+ TEST_FIELD_SIZE (BITMAPFILEHEADER, bfType, 2)
+ TEST_FIELD_ALIGN (BITMAPFILEHEADER, bfType, 2)
+ TEST_FIELD_OFFSET(BITMAPFILEHEADER, bfType, 0)
+ TEST_FIELD_SIZE (BITMAPFILEHEADER, bfSize, 4)
+ TEST_FIELD_ALIGN (BITMAPFILEHEADER, bfSize, 2)
+ TEST_FIELD_OFFSET(BITMAPFILEHEADER, bfSize, 2)
+ TEST_FIELD_SIZE (BITMAPFILEHEADER, bfReserved1, 2)
+ TEST_FIELD_ALIGN (BITMAPFILEHEADER, bfReserved1, 2)
+ TEST_FIELD_OFFSET(BITMAPFILEHEADER, bfReserved1, 6)
+ TEST_FIELD_SIZE (BITMAPFILEHEADER, bfReserved2, 2)
+ TEST_FIELD_ALIGN (BITMAPFILEHEADER, bfReserved2, 2)
+ TEST_FIELD_OFFSET(BITMAPFILEHEADER, bfReserved2, 8)
+ TEST_FIELD_SIZE (BITMAPFILEHEADER, bfOffBits, 4)
+ TEST_FIELD_ALIGN (BITMAPFILEHEADER, bfOffBits, 2)
+ TEST_FIELD_OFFSET(BITMAPFILEHEADER, bfOffBits, 10)
}
static void test_pack_BITMAPINFO(void)
{
/* BITMAPINFO (pack 4) */
- TEST_TYPE(BITMAPINFO, 44, 4);
- TEST_FIELD(BITMAPINFO, BITMAPINFOHEADER, bmiHeader, 0, 40, 4);
- TEST_FIELD(BITMAPINFO, RGBQUAD[1], bmiColors, 40, 4, 1);
+ TEST_TYPE_SIZE (BITMAPINFO, 44)
+ TEST_TYPE_ALIGN (BITMAPINFO, 4)
+ TEST_FIELD_SIZE (BITMAPINFO, bmiHeader, 40)
+ TEST_FIELD_ALIGN (BITMAPINFO, bmiHeader, 4)
+ TEST_FIELD_OFFSET(BITMAPINFO, bmiHeader, 0)
+ TEST_FIELD_SIZE (BITMAPINFO, bmiColors, 4)
+ TEST_FIELD_ALIGN (BITMAPINFO, bmiColors, 1)
+ TEST_FIELD_OFFSET(BITMAPINFO, bmiColors, 40)
}
static void test_pack_BITMAPINFOHEADER(void)
{
/* BITMAPINFOHEADER (pack 4) */
- TEST_TYPE(BITMAPINFOHEADER, 40, 4);
- TEST_FIELD(BITMAPINFOHEADER, DWORD, biSize, 0, 4, 4);
- TEST_FIELD(BITMAPINFOHEADER, LONG, biWidth, 4, 4, 4);
- TEST_FIELD(BITMAPINFOHEADER, LONG, biHeight, 8, 4, 4);
- TEST_FIELD(BITMAPINFOHEADER, WORD, biPlanes, 12, 2, 2);
- TEST_FIELD(BITMAPINFOHEADER, WORD, biBitCount, 14, 2, 2);
- TEST_FIELD(BITMAPINFOHEADER, DWORD, biCompression, 16, 4, 4);
- TEST_FIELD(BITMAPINFOHEADER, DWORD, biSizeImage, 20, 4, 4);
- TEST_FIELD(BITMAPINFOHEADER, LONG, biXPelsPerMeter, 24, 4, 4);
- TEST_FIELD(BITMAPINFOHEADER, LONG, biYPelsPerMeter, 28, 4, 4);
- TEST_FIELD(BITMAPINFOHEADER, DWORD, biClrUsed, 32, 4, 4);
- TEST_FIELD(BITMAPINFOHEADER, DWORD, biClrImportant, 36, 4, 4);
+ TEST_TYPE_SIZE (BITMAPINFOHEADER, 40)
+ TEST_TYPE_ALIGN (BITMAPINFOHEADER, 4)
+ TEST_FIELD_SIZE (BITMAPINFOHEADER, biSize, 4)
+ TEST_FIELD_ALIGN (BITMAPINFOHEADER, biSize, 4)
+ TEST_FIELD_OFFSET(BITMAPINFOHEADER, biSize, 0)
+ TEST_FIELD_SIZE (BITMAPINFOHEADER, biWidth, 4)
+ TEST_FIELD_ALIGN (BITMAPINFOHEADER, biWidth, 4)
+ TEST_FIELD_OFFSET(BITMAPINFOHEADER, biWidth, 4)
+ TEST_FIELD_SIZE (BITMAPINFOHEADER, biHeight, 4)
+ TEST_FIELD_ALIGN (BITMAPINFOHEADER, biHeight, 4)
+ TEST_FIELD_OFFSET(BITMAPINFOHEADER, biHeight, 8)
+ TEST_FIELD_SIZE (BITMAPINFOHEADER, biPlanes, 2)
+ TEST_FIELD_ALIGN (BITMAPINFOHEADER, biPlanes, 2)
+ TEST_FIELD_OFFSET(BITMAPINFOHEADER, biPlanes, 12)
+ TEST_FIELD_SIZE (BITMAPINFOHEADER, biBitCount, 2)
+ TEST_FIELD_ALIGN (BITMAPINFOHEADER, biBitCount, 2)
+ TEST_FIELD_OFFSET(BITMAPINFOHEADER, biBitCount, 14)
+ TEST_FIELD_SIZE (BITMAPINFOHEADER, biCompression, 4)
+ TEST_FIELD_ALIGN (BITMAPINFOHEADER, biCompression, 4)
+ TEST_FIELD_OFFSET(BITMAPINFOHEADER, biCompression, 16)
+ TEST_FIELD_SIZE (BITMAPINFOHEADER, biSizeImage, 4)
+ TEST_FIELD_ALIGN (BITMAPINFOHEADER, biSizeImage, 4)
+ TEST_FIELD_OFFSET(BITMAPINFOHEADER, biSizeImage, 20)
+ TEST_FIELD_SIZE (BITMAPINFOHEADER, biXPelsPerMeter, 4)
+ TEST_FIELD_ALIGN (BITMAPINFOHEADER, biXPelsPerMeter, 4)
+ TEST_FIELD_OFFSET(BITMAPINFOHEADER, biXPelsPerMeter, 24)
+ TEST_FIELD_SIZE (BITMAPINFOHEADER, biYPelsPerMeter, 4)
+ TEST_FIELD_ALIGN (BITMAPINFOHEADER, biYPelsPerMeter, 4)
+ TEST_FIELD_OFFSET(BITMAPINFOHEADER, biYPelsPerMeter, 28)
+ TEST_FIELD_SIZE (BITMAPINFOHEADER, biClrUsed, 4)
+ TEST_FIELD_ALIGN (BITMAPINFOHEADER, biClrUsed, 4)
+ TEST_FIELD_OFFSET(BITMAPINFOHEADER, biClrUsed, 32)
+ TEST_FIELD_SIZE (BITMAPINFOHEADER, biClrImportant, 4)
+ TEST_FIELD_ALIGN (BITMAPINFOHEADER, biClrImportant, 4)
+ TEST_FIELD_OFFSET(BITMAPINFOHEADER, biClrImportant, 36)
}
static void test_pack_BITMAPV4HEADER(void)
{
/* BITMAPV4HEADER (pack 4) */
- TEST_TYPE(BITMAPV4HEADER, 108, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4Size, 0, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, LONG, bV4Width, 4, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, LONG, bV4Height, 8, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, WORD, bV4Planes, 12, 2, 2);
- TEST_FIELD(BITMAPV4HEADER, WORD, bV4BitCount, 14, 2, 2);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4V4Compression, 16, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4SizeImage, 20, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, LONG, bV4XPelsPerMeter, 24, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, LONG, bV4YPelsPerMeter, 28, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4ClrUsed, 32, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4ClrImportant, 36, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4RedMask, 40, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4GreenMask, 44, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4BlueMask, 48, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4AlphaMask, 52, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4CSType, 56, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, CIEXYZTRIPLE, bV4Endpoints, 60, 36, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4GammaRed, 96, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4GammaGreen, 100, 4, 4);
- TEST_FIELD(BITMAPV4HEADER, DWORD, bV4GammaBlue, 104, 4, 4);
+ TEST_TYPE_SIZE (BITMAPV4HEADER, 108)
+ TEST_TYPE_ALIGN (BITMAPV4HEADER, 4)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4Size, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4Size, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4Size, 0)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4Width, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4Width, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4Width, 4)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4Height, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4Height, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4Height, 8)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4Planes, 2)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4Planes, 2)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4Planes, 12)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4BitCount, 2)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4BitCount, 2)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4BitCount, 14)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4V4Compression, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4V4Compression, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4V4Compression, 16)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4SizeImage, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4SizeImage, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4SizeImage, 20)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4XPelsPerMeter, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4XPelsPerMeter, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4XPelsPerMeter, 24)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4YPelsPerMeter, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4YPelsPerMeter, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4YPelsPerMeter, 28)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4ClrUsed, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4ClrUsed, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4ClrUsed, 32)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4ClrImportant, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4ClrImportant, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4ClrImportant, 36)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4RedMask, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4RedMask, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4RedMask, 40)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4GreenMask, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4GreenMask, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4GreenMask, 44)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4BlueMask, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4BlueMask, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4BlueMask, 48)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4AlphaMask, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4AlphaMask, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4AlphaMask, 52)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4CSType, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4CSType, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4CSType, 56)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4Endpoints, 36)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4Endpoints, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4Endpoints, 60)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4GammaRed, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4GammaRed, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4GammaRed, 96)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4GammaGreen, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4GammaGreen, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4GammaGreen, 100)
+ TEST_FIELD_SIZE (BITMAPV4HEADER, bV4GammaBlue, 4)
+ TEST_FIELD_ALIGN (BITMAPV4HEADER, bV4GammaBlue, 4)
+ TEST_FIELD_OFFSET(BITMAPV4HEADER, bV4GammaBlue, 104)
}
static void test_pack_BITMAPV5HEADER(void)
{
/* BITMAPV5HEADER (pack 4) */
- TEST_TYPE(BITMAPV5HEADER, 124, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5Size, 0, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, LONG, bV5Width, 4, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, LONG, bV5Height, 8, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, WORD, bV5Planes, 12, 2, 2);
- TEST_FIELD(BITMAPV5HEADER, WORD, bV5BitCount, 14, 2, 2);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5Compression, 16, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5SizeImage, 20, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, LONG, bV5XPelsPerMeter, 24, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, LONG, bV5YPelsPerMeter, 28, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5ClrUsed, 32, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5ClrImportant, 36, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5RedMask, 40, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5GreenMask, 44, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5BlueMask, 48, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5AlphaMask, 52, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5CSType, 56, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, CIEXYZTRIPLE, bV5Endpoints, 60, 36, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5GammaRed, 96, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5GammaGreen, 100, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5GammaBlue, 104, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5Intent, 108, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5ProfileData, 112, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5ProfileSize, 116, 4, 4);
- TEST_FIELD(BITMAPV5HEADER, DWORD, bV5Reserved, 120, 4, 4);
+ TEST_TYPE_SIZE (BITMAPV5HEADER, 124)
+ TEST_TYPE_ALIGN (BITMAPV5HEADER, 4)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5Size, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5Size, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5Size, 0)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5Width, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5Width, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5Width, 4)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5Height, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5Height, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5Height, 8)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5Planes, 2)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5Planes, 2)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5Planes, 12)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5BitCount, 2)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5BitCount, 2)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5BitCount, 14)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5Compression, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5Compression, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5Compression, 16)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5SizeImage, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5SizeImage, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5SizeImage, 20)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5XPelsPerMeter, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5XPelsPerMeter, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5XPelsPerMeter, 24)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5YPelsPerMeter, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5YPelsPerMeter, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5YPelsPerMeter, 28)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5ClrUsed, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5ClrUsed, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5ClrUsed, 32)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5ClrImportant, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5ClrImportant, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5ClrImportant, 36)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5RedMask, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5RedMask, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5RedMask, 40)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5GreenMask, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5GreenMask, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5GreenMask, 44)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5BlueMask, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5BlueMask, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5BlueMask, 48)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5AlphaMask, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5AlphaMask, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5AlphaMask, 52)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5CSType, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5CSType, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5CSType, 56)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5Endpoints, 36)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5Endpoints, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5Endpoints, 60)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5GammaRed, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5GammaRed, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5GammaRed, 96)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5GammaGreen, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5GammaGreen, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5GammaGreen, 100)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5GammaBlue, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5GammaBlue, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5GammaBlue, 104)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5Intent, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5Intent, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5Intent, 108)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5ProfileData, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5ProfileData, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5ProfileData, 112)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5ProfileSize, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5ProfileSize, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5ProfileSize, 116)
+ TEST_FIELD_SIZE (BITMAPV5HEADER, bV5Reserved, 4)
+ TEST_FIELD_ALIGN (BITMAPV5HEADER, bV5Reserved, 4)
+ TEST_FIELD_OFFSET(BITMAPV5HEADER, bV5Reserved, 120)
}
static void test_pack_BLENDFUNCTION(void)
{
/* BLENDFUNCTION (pack 4) */
- TEST_TYPE(BLENDFUNCTION, 4, 1);
- TEST_FIELD(BLENDFUNCTION, BYTE, BlendOp, 0, 1, 1);
- TEST_FIELD(BLENDFUNCTION, BYTE, BlendFlags, 1, 1, 1);
- TEST_FIELD(BLENDFUNCTION, BYTE, SourceConstantAlpha, 2, 1, 1);
- TEST_FIELD(BLENDFUNCTION, BYTE, AlphaFormat, 3, 1, 1);
+ TEST_TYPE_SIZE (BLENDFUNCTION, 4)
+ TEST_TYPE_ALIGN (BLENDFUNCTION, 1)
+ TEST_FIELD_SIZE (BLENDFUNCTION, BlendOp, 1)
+ TEST_FIELD_ALIGN (BLENDFUNCTION, BlendOp, 1)
+ TEST_FIELD_OFFSET(BLENDFUNCTION, BlendOp, 0)
+ TEST_FIELD_SIZE (BLENDFUNCTION, BlendFlags, 1)
+ TEST_FIELD_ALIGN (BLENDFUNCTION, BlendFlags, 1)
+ TEST_FIELD_OFFSET(BLENDFUNCTION, BlendFlags, 1)
+ TEST_FIELD_SIZE (BLENDFUNCTION, SourceConstantAlpha, 1)
+ TEST_FIELD_ALIGN (BLENDFUNCTION, SourceConstantAlpha, 1)
+ TEST_FIELD_OFFSET(BLENDFUNCTION, SourceConstantAlpha, 2)
+ TEST_FIELD_SIZE (BLENDFUNCTION, AlphaFormat, 1)
+ TEST_FIELD_ALIGN (BLENDFUNCTION, AlphaFormat, 1)
+ TEST_FIELD_OFFSET(BLENDFUNCTION, AlphaFormat, 3)
}
static void test_pack_CHARSETINFO(void)
{
/* CHARSETINFO (pack 4) */
- TEST_TYPE(CHARSETINFO, 32, 4);
- TEST_FIELD(CHARSETINFO, UINT, ciCharset, 0, 4, 4);
- TEST_FIELD(CHARSETINFO, UINT, ciACP, 4, 4, 4);
- TEST_FIELD(CHARSETINFO, FONTSIGNATURE, fs, 8, 24, 4);
+ TEST_TYPE_SIZE (CHARSETINFO, 32)
+ TEST_TYPE_ALIGN (CHARSETINFO, 4)
+ TEST_FIELD_SIZE (CHARSETINFO, ciCharset, 4)
+ TEST_FIELD_ALIGN (CHARSETINFO, ciCharset, 4)
+ TEST_FIELD_OFFSET(CHARSETINFO, ciCharset, 0)
+ TEST_FIELD_SIZE (CHARSETINFO, ciACP, 4)
+ TEST_FIELD_ALIGN (CHARSETINFO, ciACP, 4)
+ TEST_FIELD_OFFSET(CHARSETINFO, ciACP, 4)
+ TEST_FIELD_SIZE (CHARSETINFO, fs, 24)
+ TEST_FIELD_ALIGN (CHARSETINFO, fs, 4)
+ TEST_FIELD_OFFSET(CHARSETINFO, fs, 8)
}
static void test_pack_CIEXYZ(void)
{
/* CIEXYZ (pack 4) */
- TEST_TYPE(CIEXYZ, 12, 4);
- TEST_FIELD(CIEXYZ, FXPT2DOT30, ciexyzX, 0, 4, 4);
- TEST_FIELD(CIEXYZ, FXPT2DOT30, ciexyzY, 4, 4, 4);
- TEST_FIELD(CIEXYZ, FXPT2DOT30, ciexyzZ, 8, 4, 4);
+ TEST_TYPE_SIZE (CIEXYZ, 12)
+ TEST_TYPE_ALIGN (CIEXYZ, 4)
+ TEST_FIELD_SIZE (CIEXYZ, ciexyzX, 4)
+ TEST_FIELD_ALIGN (CIEXYZ, ciexyzX, 4)
+ TEST_FIELD_OFFSET(CIEXYZ, ciexyzX, 0)
+ TEST_FIELD_SIZE (CIEXYZ, ciexyzY, 4)
+ TEST_FIELD_ALIGN (CIEXYZ, ciexyzY, 4)
+ TEST_FIELD_OFFSET(CIEXYZ, ciexyzY, 4)
+ TEST_FIELD_SIZE (CIEXYZ, ciexyzZ, 4)
+ TEST_FIELD_ALIGN (CIEXYZ, ciexyzZ, 4)
+ TEST_FIELD_OFFSET(CIEXYZ, ciexyzZ, 8)
}
static void test_pack_CIEXYZTRIPLE(void)
{
/* CIEXYZTRIPLE (pack 4) */
- TEST_TYPE(CIEXYZTRIPLE, 36, 4);
- TEST_FIELD(CIEXYZTRIPLE, CIEXYZ, ciexyzRed, 0, 12, 4);
- TEST_FIELD(CIEXYZTRIPLE, CIEXYZ, ciexyzGreen, 12, 12, 4);
- TEST_FIELD(CIEXYZTRIPLE, CIEXYZ, ciexyzBlue, 24, 12, 4);
+ TEST_TYPE_SIZE (CIEXYZTRIPLE, 36)
+ TEST_TYPE_ALIGN (CIEXYZTRIPLE, 4)
+ TEST_FIELD_SIZE (CIEXYZTRIPLE, ciexyzRed, 12)
+ TEST_FIELD_ALIGN (CIEXYZTRIPLE, ciexyzRed, 4)
+ TEST_FIELD_OFFSET(CIEXYZTRIPLE, ciexyzRed, 0)
+ TEST_FIELD_SIZE (CIEXYZTRIPLE, ciexyzGreen, 12)
+ TEST_FIELD_ALIGN (CIEXYZTRIPLE, ciexyzGreen, 4)
+ TEST_FIELD_OFFSET(CIEXYZTRIPLE, ciexyzGreen, 12)
+ TEST_FIELD_SIZE (CIEXYZTRIPLE, ciexyzBlue, 12)
+ TEST_FIELD_ALIGN (CIEXYZTRIPLE, ciexyzBlue, 4)
+ TEST_FIELD_OFFSET(CIEXYZTRIPLE, ciexyzBlue, 24)
}
static void test_pack_COLOR16(void)
{
/* COLOR16 */
- TEST_TYPE(COLOR16, 2, 2);
+ TEST_TYPE_SIZE (COLOR16, 2)
+ TEST_TYPE_ALIGN (COLOR16, 2)
}
static void test_pack_COLORADJUSTMENT(void)
{
/* COLORADJUSTMENT (pack 4) */
- TEST_TYPE(COLORADJUSTMENT, 24, 2);
- TEST_FIELD(COLORADJUSTMENT, WORD, caSize, 0, 2, 2);
- TEST_FIELD(COLORADJUSTMENT, WORD, caFlags, 2, 2, 2);
- TEST_FIELD(COLORADJUSTMENT, WORD, caIlluminantIndex, 4, 2, 2);
- TEST_FIELD(COLORADJUSTMENT, WORD, caRedGamma, 6, 2, 2);
- TEST_FIELD(COLORADJUSTMENT, WORD, caGreenGamma, 8, 2, 2);
- TEST_FIELD(COLORADJUSTMENT, WORD, caBlueGamma, 10, 2, 2);
- TEST_FIELD(COLORADJUSTMENT, WORD, caReferenceBlack, 12, 2, 2);
- TEST_FIELD(COLORADJUSTMENT, WORD, caReferenceWhite, 14, 2, 2);
- TEST_FIELD(COLORADJUSTMENT, SHORT, caContrast, 16, 2, 2);
- TEST_FIELD(COLORADJUSTMENT, SHORT, caBrightness, 18, 2, 2);
- TEST_FIELD(COLORADJUSTMENT, SHORT, caColorfulness, 20, 2, 2);
- TEST_FIELD(COLORADJUSTMENT, SHORT, caRedGreenTint, 22, 2, 2);
+ TEST_TYPE_SIZE (COLORADJUSTMENT, 24)
+ TEST_TYPE_ALIGN (COLORADJUSTMENT, 2)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caSize, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caSize, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caSize, 0)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caFlags, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caFlags, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caFlags, 2)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caIlluminantIndex, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caIlluminantIndex, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caIlluminantIndex, 4)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caRedGamma, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caRedGamma, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caRedGamma, 6)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caGreenGamma, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caGreenGamma, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caGreenGamma, 8)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caBlueGamma, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caBlueGamma, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caBlueGamma, 10)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caReferenceBlack, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caReferenceBlack, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caReferenceBlack, 12)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caReferenceWhite, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caReferenceWhite, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caReferenceWhite, 14)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caContrast, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caContrast, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caContrast, 16)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caBrightness, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caBrightness, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caBrightness, 18)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caColorfulness, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caColorfulness, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caColorfulness, 20)
+ TEST_FIELD_SIZE (COLORADJUSTMENT, caRedGreenTint, 2)
+ TEST_FIELD_ALIGN (COLORADJUSTMENT, caRedGreenTint, 2)
+ TEST_FIELD_OFFSET(COLORADJUSTMENT, caRedGreenTint, 22)
}
static void test_pack_DEVMODEA(void)
{
/* DEVMODEA (pack 4) */
- TEST_FIELD(DEVMODEA, BYTE[CCHDEVICENAME], dmDeviceName, 0, 32, 1);
- TEST_FIELD(DEVMODEA, WORD, dmSpecVersion, 32, 2, 2);
- TEST_FIELD(DEVMODEA, WORD, dmDriverVersion, 34, 2, 2);
- TEST_FIELD(DEVMODEA, WORD, dmSize, 36, 2, 2);
- TEST_FIELD(DEVMODEA, WORD, dmDriverExtra, 38, 2, 2);
- TEST_FIELD(DEVMODEA, DWORD, dmFields, 40, 4, 4);
+ TEST_FIELD_SIZE (DEVMODEA, dmDeviceName, 32)
+ TEST_FIELD_ALIGN (DEVMODEA, dmDeviceName, 1)
+ TEST_FIELD_OFFSET(DEVMODEA, dmDeviceName, 0)
+ TEST_FIELD_SIZE (DEVMODEA, dmSpecVersion, 2)
+ TEST_FIELD_ALIGN (DEVMODEA, dmSpecVersion, 2)
+ TEST_FIELD_OFFSET(DEVMODEA, dmSpecVersion, 32)
+ TEST_FIELD_SIZE (DEVMODEA, dmDriverVersion, 2)
+ TEST_FIELD_ALIGN (DEVMODEA, dmDriverVersion, 2)
+ TEST_FIELD_OFFSET(DEVMODEA, dmDriverVersion, 34)
+ TEST_FIELD_SIZE (DEVMODEA, dmSize, 2)
+ TEST_FIELD_ALIGN (DEVMODEA, dmSize, 2)
+ TEST_FIELD_OFFSET(DEVMODEA, dmSize, 36)
+ TEST_FIELD_SIZE (DEVMODEA, dmDriverExtra, 2)
+ TEST_FIELD_ALIGN (DEVMODEA, dmDriverExtra, 2)
+ TEST_FIELD_OFFSET(DEVMODEA, dmDriverExtra, 38)
+ TEST_FIELD_SIZE (DEVMODEA, dmFields, 4)
+ TEST_FIELD_ALIGN (DEVMODEA, dmFields, 4)
+ TEST_FIELD_OFFSET(DEVMODEA, dmFields, 40)
}
static void test_pack_DEVMODEW(void)
{
/* DEVMODEW (pack 4) */
- TEST_FIELD(DEVMODEW, WCHAR[CCHDEVICENAME], dmDeviceName, 0, 64, 2);
- TEST_FIELD(DEVMODEW, WORD, dmSpecVersion, 64, 2, 2);
- TEST_FIELD(DEVMODEW, WORD, dmDriverVersion, 66, 2, 2);
- TEST_FIELD(DEVMODEW, WORD, dmSize, 68, 2, 2);
- TEST_FIELD(DEVMODEW, WORD, dmDriverExtra, 70, 2, 2);
- TEST_FIELD(DEVMODEW, DWORD, dmFields, 72, 4, 4);
+ TEST_FIELD_SIZE (DEVMODEW, dmDeviceName, 64)
+ TEST_FIELD_ALIGN (DEVMODEW, dmDeviceName, 2)
+ TEST_FIELD_OFFSET(DEVMODEW, dmDeviceName, 0)
+ TEST_FIELD_SIZE (DEVMODEW, dmSpecVersion, 2)
+ TEST_FIELD_ALIGN (DEVMODEW, dmSpecVersion, 2)
+ TEST_FIELD_OFFSET(DEVMODEW, dmSpecVersion, 64)
+ TEST_FIELD_SIZE (DEVMODEW, dmDriverVersion, 2)
+ TEST_FIELD_ALIGN (DEVMODEW, dmDriverVersion, 2)
+ TEST_FIELD_OFFSET(DEVMODEW, dmDriverVersion, 66)
+ TEST_FIELD_SIZE (DEVMODEW, dmSize, 2)
+ TEST_FIELD_ALIGN (DEVMODEW, dmSize, 2)
+ TEST_FIELD_OFFSET(DEVMODEW, dmSize, 68)
+ TEST_FIELD_SIZE (DEVMODEW, dmDriverExtra, 2)
+ TEST_FIELD_ALIGN (DEVMODEW, dmDriverExtra, 2)
+ TEST_FIELD_OFFSET(DEVMODEW, dmDriverExtra, 70)
+ TEST_FIELD_SIZE (DEVMODEW, dmFields, 4)
+ TEST_FIELD_ALIGN (DEVMODEW, dmFields, 4)
+ TEST_FIELD_OFFSET(DEVMODEW, dmFields, 72)
}
static void test_pack_DIBSECTION(void)
{
/* DIBSECTION (pack 4) */
- TEST_TYPE(DIBSECTION, 84, 4);
- TEST_FIELD(DIBSECTION, BITMAP, dsBm, 0, 24, 4);
- TEST_FIELD(DIBSECTION, BITMAPINFOHEADER, dsBmih, 24, 40, 4);
- TEST_FIELD(DIBSECTION, DWORD[3], dsBitfields, 64, 12, 4);
- TEST_FIELD(DIBSECTION, HANDLE, dshSection, 76, 4, 4);
- TEST_FIELD(DIBSECTION, DWORD, dsOffset, 80, 4, 4);
+ TEST_TYPE_SIZE (DIBSECTION, 84)
+ TEST_TYPE_ALIGN (DIBSECTION, 4)
+ TEST_FIELD_SIZE (DIBSECTION, dsBm, 24)
+ TEST_FIELD_ALIGN (DIBSECTION, dsBm, 4)
+ TEST_FIELD_OFFSET(DIBSECTION, dsBm, 0)
+ TEST_FIELD_SIZE (DIBSECTION, dsBmih, 40)
+ TEST_FIELD_ALIGN (DIBSECTION, dsBmih, 4)
+ TEST_FIELD_OFFSET(DIBSECTION, dsBmih, 24)
+ TEST_FIELD_SIZE (DIBSECTION, dsBitfields, 12)
+ TEST_FIELD_ALIGN (DIBSECTION, dsBitfields, 4)
+ TEST_FIELD_OFFSET(DIBSECTION, dsBitfields, 64)
+ TEST_FIELD_SIZE (DIBSECTION, dshSection, 4)
+ TEST_FIELD_ALIGN (DIBSECTION, dshSection, 4)
+ TEST_FIELD_OFFSET(DIBSECTION, dshSection, 76)
+ TEST_FIELD_SIZE (DIBSECTION, dsOffset, 4)
+ TEST_FIELD_ALIGN (DIBSECTION, dsOffset, 4)
+ TEST_FIELD_OFFSET(DIBSECTION, dsOffset, 80)
}
static void test_pack_DISPLAY_DEVICEA(void)
{
/* DISPLAY_DEVICEA (pack 4) */
- TEST_TYPE(DISPLAY_DEVICEA, 424, 4);
- TEST_FIELD(DISPLAY_DEVICEA, DWORD, cb, 0, 4, 4);
- TEST_FIELD(DISPLAY_DEVICEA, CHAR[32], DeviceName, 4, 32, 1);
- TEST_FIELD(DISPLAY_DEVICEA, CHAR[128], DeviceString, 36, 128, 1);
- TEST_FIELD(DISPLAY_DEVICEA, DWORD, StateFlags, 164, 4, 4);
- TEST_FIELD(DISPLAY_DEVICEA, CHAR[128], DeviceID, 168, 128, 1);
- TEST_FIELD(DISPLAY_DEVICEA, CHAR[128], DeviceKey, 296, 128, 1);
+ TEST_TYPE_SIZE (DISPLAY_DEVICEA, 424)
+ TEST_TYPE_ALIGN (DISPLAY_DEVICEA, 4)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEA, cb, 4)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEA, cb, 4)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEA, cb, 0)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEA, DeviceName, 32)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEA, DeviceName, 1)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEA, DeviceName, 4)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEA, DeviceString, 128)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEA, DeviceString, 1)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEA, DeviceString, 36)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEA, StateFlags, 4)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEA, StateFlags, 4)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEA, StateFlags, 164)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEA, DeviceID, 128)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEA, DeviceID, 1)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEA, DeviceID, 168)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEA, DeviceKey, 128)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEA, DeviceKey, 1)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEA, DeviceKey, 296)
}
static void test_pack_DISPLAY_DEVICEW(void)
{
/* DISPLAY_DEVICEW (pack 4) */
- TEST_TYPE(DISPLAY_DEVICEW, 840, 4);
- TEST_FIELD(DISPLAY_DEVICEW, DWORD, cb, 0, 4, 4);
- TEST_FIELD(DISPLAY_DEVICEW, WCHAR[32], DeviceName, 4, 64, 2);
- TEST_FIELD(DISPLAY_DEVICEW, WCHAR[128], DeviceString, 68, 256, 2);
- TEST_FIELD(DISPLAY_DEVICEW, DWORD, StateFlags, 324, 4, 4);
- TEST_FIELD(DISPLAY_DEVICEW, WCHAR[128], DeviceID, 328, 256, 2);
- TEST_FIELD(DISPLAY_DEVICEW, WCHAR[128], DeviceKey, 584, 256, 2);
+ TEST_TYPE_SIZE (DISPLAY_DEVICEW, 840)
+ TEST_TYPE_ALIGN (DISPLAY_DEVICEW, 4)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEW, cb, 4)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEW, cb, 4)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEW, cb, 0)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEW, DeviceName, 64)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEW, DeviceName, 2)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEW, DeviceName, 4)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEW, DeviceString, 256)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEW, DeviceString, 2)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEW, DeviceString, 68)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEW, StateFlags, 4)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEW, StateFlags, 4)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEW, StateFlags, 324)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEW, DeviceID, 256)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEW, DeviceID, 2)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEW, DeviceID, 328)
+ TEST_FIELD_SIZE (DISPLAY_DEVICEW, DeviceKey, 256)
+ TEST_FIELD_ALIGN (DISPLAY_DEVICEW, DeviceKey, 2)
+ TEST_FIELD_OFFSET(DISPLAY_DEVICEW, DeviceKey, 584)
}
static void test_pack_DOCINFOA(void)
{
/* DOCINFOA (pack 4) */
- TEST_TYPE(DOCINFOA, 20, 4);
- TEST_FIELD(DOCINFOA, INT, cbSize, 0, 4, 4);
- TEST_FIELD(DOCINFOA, LPCSTR, lpszDocName, 4, 4, 4);
- TEST_FIELD(DOCINFOA, LPCSTR, lpszOutput, 8, 4, 4);
- TEST_FIELD(DOCINFOA, LPCSTR, lpszDatatype, 12, 4, 4);
- TEST_FIELD(DOCINFOA, DWORD, fwType, 16, 4, 4);
+ TEST_TYPE_SIZE (DOCINFOA, 20)
+ TEST_TYPE_ALIGN (DOCINFOA, 4)
+ TEST_FIELD_SIZE (DOCINFOA, cbSize, 4)
+ TEST_FIELD_ALIGN (DOCINFOA, cbSize, 4)
+ TEST_FIELD_OFFSET(DOCINFOA, cbSize, 0)
+ TEST_FIELD_SIZE (DOCINFOA, lpszDocName, 4)
+ TEST_FIELD_ALIGN (DOCINFOA, lpszDocName, 4)
+ TEST_FIELD_OFFSET(DOCINFOA, lpszDocName, 4)
+ TEST_FIELD_SIZE (DOCINFOA, lpszOutput, 4)
+ TEST_FIELD_ALIGN (DOCINFOA, lpszOutput, 4)
+ TEST_FIELD_OFFSET(DOCINFOA, lpszOutput, 8)
+ TEST_FIELD_SIZE (DOCINFOA, lpszDatatype, 4)
+ TEST_FIELD_ALIGN (DOCINFOA, lpszDatatype, 4)
+ TEST_FIELD_OFFSET(DOCINFOA, lpszDatatype, 12)
+ TEST_FIELD_SIZE (DOCINFOA, fwType, 4)
+ TEST_FIELD_ALIGN (DOCINFOA, fwType, 4)
+ TEST_FIELD_OFFSET(DOCINFOA, fwType, 16)
}
static void test_pack_DOCINFOW(void)
{
/* DOCINFOW (pack 4) */
- TEST_TYPE(DOCINFOW, 20, 4);
- TEST_FIELD(DOCINFOW, INT, cbSize, 0, 4, 4);
- TEST_FIELD(DOCINFOW, LPCWSTR, lpszDocName, 4, 4, 4);
- TEST_FIELD(DOCINFOW, LPCWSTR, lpszOutput, 8, 4, 4);
- TEST_FIELD(DOCINFOW, LPCWSTR, lpszDatatype, 12, 4, 4);
- TEST_FIELD(DOCINFOW, DWORD, fwType, 16, 4, 4);
+ TEST_TYPE_SIZE (DOCINFOW, 20)
+ TEST_TYPE_ALIGN (DOCINFOW, 4)
+ TEST_FIELD_SIZE (DOCINFOW, cbSize, 4)
+ TEST_FIELD_ALIGN (DOCINFOW, cbSize, 4)
+ TEST_FIELD_OFFSET(DOCINFOW, cbSize, 0)
+ TEST_FIELD_SIZE (DOCINFOW, lpszDocName, 4)
+ TEST_FIELD_ALIGN (DOCINFOW, lpszDocName, 4)
+ TEST_FIELD_OFFSET(DOCINFOW, lpszDocName, 4)
+ TEST_FIELD_SIZE (DOCINFOW, lpszOutput, 4)
+ TEST_FIELD_ALIGN (DOCINFOW, lpszOutput, 4)
+ TEST_FIELD_OFFSET(DOCINFOW, lpszOutput, 8)
+ TEST_FIELD_SIZE (DOCINFOW, lpszDatatype, 4)
+ TEST_FIELD_ALIGN (DOCINFOW, lpszDatatype, 4)
+ TEST_FIELD_OFFSET(DOCINFOW, lpszDatatype, 12)
+ TEST_FIELD_SIZE (DOCINFOW, fwType, 4)
+ TEST_FIELD_ALIGN (DOCINFOW, fwType, 4)
+ TEST_FIELD_OFFSET(DOCINFOW, fwType, 16)
}
static void test_pack_EMR(void)
{
/* EMR (pack 4) */
- TEST_TYPE(EMR, 8, 4);
- TEST_FIELD(EMR, DWORD, iType, 0, 4, 4);
- TEST_FIELD(EMR, DWORD, nSize, 4, 4, 4);
+ TEST_TYPE_SIZE (EMR, 8)
+ TEST_TYPE_ALIGN (EMR, 4)
+ TEST_FIELD_SIZE (EMR, iType, 4)
+ TEST_FIELD_ALIGN (EMR, iType, 4)
+ TEST_FIELD_OFFSET(EMR, iType, 0)
+ TEST_FIELD_SIZE (EMR, nSize, 4)
+ TEST_FIELD_ALIGN (EMR, nSize, 4)
+ TEST_FIELD_OFFSET(EMR, nSize, 4)
}
static void test_pack_EMRABORTPATH(void)
{
/* EMRABORTPATH (pack 4) */
- TEST_TYPE(EMRABORTPATH, 8, 4);
- TEST_FIELD(EMRABORTPATH, EMR, emr, 0, 8, 4);
+ TEST_TYPE_SIZE (EMRABORTPATH, 8)
+ TEST_TYPE_ALIGN (EMRABORTPATH, 4)
+ TEST_FIELD_SIZE (EMRABORTPATH, emr, 8)
+ TEST_FIELD_ALIGN (EMRABORTPATH, emr, 4)
+ TEST_FIELD_OFFSET(EMRABORTPATH, emr, 0)
}
static void test_pack_EMRANGLEARC(void)
{
/* EMRANGLEARC (pack 4) */
- TEST_TYPE(EMRANGLEARC, 28, 4);
- TEST_FIELD(EMRANGLEARC, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRANGLEARC, POINTL, ptlCenter, 8, 8, 4);
- TEST_FIELD(EMRANGLEARC, DWORD, nRadius, 16, 4, 4);
- TEST_FIELD(EMRANGLEARC, FLOAT, eStartAngle, 20, 4, 4);
- TEST_FIELD(EMRANGLEARC, FLOAT, eSweepAngle, 24, 4, 4);
+ TEST_TYPE_SIZE (EMRANGLEARC, 28)
+ TEST_TYPE_ALIGN (EMRANGLEARC, 4)
+ TEST_FIELD_SIZE (EMRANGLEARC, emr, 8)
+ TEST_FIELD_ALIGN (EMRANGLEARC, emr, 4)
+ TEST_FIELD_OFFSET(EMRANGLEARC, emr, 0)
+ TEST_FIELD_SIZE (EMRANGLEARC, ptlCenter, 8)
+ TEST_FIELD_ALIGN (EMRANGLEARC, ptlCenter, 4)
+ TEST_FIELD_OFFSET(EMRANGLEARC, ptlCenter, 8)
+ TEST_FIELD_SIZE (EMRANGLEARC, nRadius, 4)
+ TEST_FIELD_ALIGN (EMRANGLEARC, nRadius, 4)
+ TEST_FIELD_OFFSET(EMRANGLEARC, nRadius, 16)
+ TEST_FIELD_SIZE (EMRANGLEARC, eStartAngle, 4)
+ TEST_FIELD_ALIGN (EMRANGLEARC, eStartAngle, 4)
+ TEST_FIELD_OFFSET(EMRANGLEARC, eStartAngle, 20)
+ TEST_FIELD_SIZE (EMRANGLEARC, eSweepAngle, 4)
+ TEST_FIELD_ALIGN (EMRANGLEARC, eSweepAngle, 4)
+ TEST_FIELD_OFFSET(EMRANGLEARC, eSweepAngle, 24)
}
static void test_pack_EMRARC(void)
{
/* EMRARC (pack 4) */
- TEST_TYPE(EMRARC, 40, 4);
- TEST_FIELD(EMRARC, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRARC, RECTL, rclBox, 8, 16, 4);
- TEST_FIELD(EMRARC, POINTL, ptlStart, 24, 8, 4);
- TEST_FIELD(EMRARC, POINTL, ptlEnd, 32, 8, 4);
+ TEST_TYPE_SIZE (EMRARC, 40)
+ TEST_TYPE_ALIGN (EMRARC, 4)
+ TEST_FIELD_SIZE (EMRARC, emr, 8)
+ TEST_FIELD_ALIGN (EMRARC, emr, 4)
+ TEST_FIELD_OFFSET(EMRARC, emr, 0)
+ TEST_FIELD_SIZE (EMRARC, rclBox, 16)
+ TEST_FIELD_ALIGN (EMRARC, rclBox, 4)
+ TEST_FIELD_OFFSET(EMRARC, rclBox, 8)
+ TEST_FIELD_SIZE (EMRARC, ptlStart, 8)
+ TEST_FIELD_ALIGN (EMRARC, ptlStart, 4)
+ TEST_FIELD_OFFSET(EMRARC, ptlStart, 24)
+ TEST_FIELD_SIZE (EMRARC, ptlEnd, 8)
+ TEST_FIELD_ALIGN (EMRARC, ptlEnd, 4)
+ TEST_FIELD_OFFSET(EMRARC, ptlEnd, 32)
}
static void test_pack_EMRARCTO(void)
{
/* EMRARCTO (pack 4) */
- TEST_TYPE(EMRARCTO, 40, 4);
- TEST_FIELD(EMRARCTO, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRARCTO, RECTL, rclBox, 8, 16, 4);
- TEST_FIELD(EMRARCTO, POINTL, ptlStart, 24, 8, 4);
- TEST_FIELD(EMRARCTO, POINTL, ptlEnd, 32, 8, 4);
+ TEST_TYPE_SIZE (EMRARCTO, 40)
+ TEST_TYPE_ALIGN (EMRARCTO, 4)
+ TEST_FIELD_SIZE (EMRARCTO, emr, 8)
+ TEST_FIELD_ALIGN (EMRARCTO, emr, 4)
+ TEST_FIELD_OFFSET(EMRARCTO, emr, 0)
+ TEST_FIELD_SIZE (EMRARCTO, rclBox, 16)
+ TEST_FIELD_ALIGN (EMRARCTO, rclBox, 4)
+ TEST_FIELD_OFFSET(EMRARCTO, rclBox, 8)
+ TEST_FIELD_SIZE (EMRARCTO, ptlStart, 8)
+ TEST_FIELD_ALIGN (EMRARCTO, ptlStart, 4)
+ TEST_FIELD_OFFSET(EMRARCTO, ptlStart, 24)
+ TEST_FIELD_SIZE (EMRARCTO, ptlEnd, 8)
+ TEST_FIELD_ALIGN (EMRARCTO, ptlEnd, 4)
+ TEST_FIELD_OFFSET(EMRARCTO, ptlEnd, 32)
}
static void test_pack_EMRBEGINPATH(void)
{
/* EMRBEGINPATH (pack 4) */
- TEST_TYPE(EMRBEGINPATH, 8, 4);
- TEST_FIELD(EMRBEGINPATH, EMR, emr, 0, 8, 4);
+ TEST_TYPE_SIZE (EMRBEGINPATH, 8)
+ TEST_TYPE_ALIGN (EMRBEGINPATH, 4)
+ TEST_FIELD_SIZE (EMRBEGINPATH, emr, 8)
+ TEST_FIELD_ALIGN (EMRBEGINPATH, emr, 4)
+ TEST_FIELD_OFFSET(EMRBEGINPATH, emr, 0)
}
static void test_pack_EMRBITBLT(void)
{
/* EMRBITBLT (pack 4) */
- TEST_TYPE(EMRBITBLT, 100, 4);
- TEST_FIELD(EMRBITBLT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRBITBLT, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRBITBLT, LONG, xDest, 24, 4, 4);
- TEST_FIELD(EMRBITBLT, LONG, yDest, 28, 4, 4);
- TEST_FIELD(EMRBITBLT, LONG, cxDest, 32, 4, 4);
- TEST_FIELD(EMRBITBLT, LONG, cyDest, 36, 4, 4);
- TEST_FIELD(EMRBITBLT, DWORD, dwRop, 40, 4, 4);
- TEST_FIELD(EMRBITBLT, LONG, xSrc, 44, 4, 4);
- TEST_FIELD(EMRBITBLT, LONG, ySrc, 48, 4, 4);
- TEST_FIELD(EMRBITBLT, XFORM, xformSrc, 52, 24, 4);
- TEST_FIELD(EMRBITBLT, COLORREF, crBkColorSrc, 76, 4, 4);
- TEST_FIELD(EMRBITBLT, DWORD, iUsageSrc, 80, 4, 4);
- TEST_FIELD(EMRBITBLT, DWORD, offBmiSrc, 84, 4, 4);
- TEST_FIELD(EMRBITBLT, DWORD, cbBmiSrc, 88, 4, 4);
- TEST_FIELD(EMRBITBLT, DWORD, offBitsSrc, 92, 4, 4);
- TEST_FIELD(EMRBITBLT, DWORD, cbBitsSrc, 96, 4, 4);
+ TEST_TYPE_SIZE (EMRBITBLT, 100)
+ TEST_TYPE_ALIGN (EMRBITBLT, 4)
+ TEST_FIELD_SIZE (EMRBITBLT, emr, 8)
+ TEST_FIELD_ALIGN (EMRBITBLT, emr, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, emr, 0)
+ TEST_FIELD_SIZE (EMRBITBLT, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRBITBLT, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRBITBLT, xDest, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, xDest, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, xDest, 24)
+ TEST_FIELD_SIZE (EMRBITBLT, yDest, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, yDest, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, yDest, 28)
+ TEST_FIELD_SIZE (EMRBITBLT, cxDest, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, cxDest, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, cxDest, 32)
+ TEST_FIELD_SIZE (EMRBITBLT, cyDest, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, cyDest, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, cyDest, 36)
+ TEST_FIELD_SIZE (EMRBITBLT, dwRop, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, dwRop, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, dwRop, 40)
+ TEST_FIELD_SIZE (EMRBITBLT, xSrc, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, xSrc, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, xSrc, 44)
+ TEST_FIELD_SIZE (EMRBITBLT, ySrc, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, ySrc, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, ySrc, 48)
+ TEST_FIELD_SIZE (EMRBITBLT, xformSrc, 24)
+ TEST_FIELD_ALIGN (EMRBITBLT, xformSrc, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, xformSrc, 52)
+ TEST_FIELD_SIZE (EMRBITBLT, crBkColorSrc, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, crBkColorSrc, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, crBkColorSrc, 76)
+ TEST_FIELD_SIZE (EMRBITBLT, iUsageSrc, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, iUsageSrc, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, iUsageSrc, 80)
+ TEST_FIELD_SIZE (EMRBITBLT, offBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, offBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, offBmiSrc, 84)
+ TEST_FIELD_SIZE (EMRBITBLT, cbBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, cbBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, cbBmiSrc, 88)
+ TEST_FIELD_SIZE (EMRBITBLT, offBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, offBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, offBitsSrc, 92)
+ TEST_FIELD_SIZE (EMRBITBLT, cbBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRBITBLT, cbBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRBITBLT, cbBitsSrc, 96)
}
static void test_pack_EMRCHORD(void)
{
/* EMRCHORD (pack 4) */
- TEST_TYPE(EMRCHORD, 40, 4);
- TEST_FIELD(EMRCHORD, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRCHORD, RECTL, rclBox, 8, 16, 4);
- TEST_FIELD(EMRCHORD, POINTL, ptlStart, 24, 8, 4);
- TEST_FIELD(EMRCHORD, POINTL, ptlEnd, 32, 8, 4);
+ TEST_TYPE_SIZE (EMRCHORD, 40)
+ TEST_TYPE_ALIGN (EMRCHORD, 4)
+ TEST_FIELD_SIZE (EMRCHORD, emr, 8)
+ TEST_FIELD_ALIGN (EMRCHORD, emr, 4)
+ TEST_FIELD_OFFSET(EMRCHORD, emr, 0)
+ TEST_FIELD_SIZE (EMRCHORD, rclBox, 16)
+ TEST_FIELD_ALIGN (EMRCHORD, rclBox, 4)
+ TEST_FIELD_OFFSET(EMRCHORD, rclBox, 8)
+ TEST_FIELD_SIZE (EMRCHORD, ptlStart, 8)
+ TEST_FIELD_ALIGN (EMRCHORD, ptlStart, 4)
+ TEST_FIELD_OFFSET(EMRCHORD, ptlStart, 24)
+ TEST_FIELD_SIZE (EMRCHORD, ptlEnd, 8)
+ TEST_FIELD_ALIGN (EMRCHORD, ptlEnd, 4)
+ TEST_FIELD_OFFSET(EMRCHORD, ptlEnd, 32)
}
static void test_pack_EMRCLOSEFIGURE(void)
{
/* EMRCLOSEFIGURE (pack 4) */
- TEST_TYPE(EMRCLOSEFIGURE, 8, 4);
- TEST_FIELD(EMRCLOSEFIGURE, EMR, emr, 0, 8, 4);
+ TEST_TYPE_SIZE (EMRCLOSEFIGURE, 8)
+ TEST_TYPE_ALIGN (EMRCLOSEFIGURE, 4)
+ TEST_FIELD_SIZE (EMRCLOSEFIGURE, emr, 8)
+ TEST_FIELD_ALIGN (EMRCLOSEFIGURE, emr, 4)
+ TEST_FIELD_OFFSET(EMRCLOSEFIGURE, emr, 0)
}
static void test_pack_EMRCREATEBRUSHINDIRECT(void)
{
/* EMRCREATEBRUSHINDIRECT (pack 4) */
- TEST_TYPE(EMRCREATEBRUSHINDIRECT, 24, 4);
- TEST_FIELD(EMRCREATEBRUSHINDIRECT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRCREATEBRUSHINDIRECT, DWORD, ihBrush, 8, 4, 4);
- TEST_FIELD(EMRCREATEBRUSHINDIRECT, LOGBRUSH32, lb, 12, 12, 4);
+ TEST_TYPE_SIZE (EMRCREATEBRUSHINDIRECT, 24)
+ TEST_TYPE_ALIGN (EMRCREATEBRUSHINDIRECT, 4)
+ TEST_FIELD_SIZE (EMRCREATEBRUSHINDIRECT, emr, 8)
+ TEST_FIELD_ALIGN (EMRCREATEBRUSHINDIRECT, emr, 4)
+ TEST_FIELD_OFFSET(EMRCREATEBRUSHINDIRECT, emr, 0)
+ TEST_FIELD_SIZE (EMRCREATEBRUSHINDIRECT, ihBrush, 4)
+ TEST_FIELD_ALIGN (EMRCREATEBRUSHINDIRECT, ihBrush, 4)
+ TEST_FIELD_OFFSET(EMRCREATEBRUSHINDIRECT, ihBrush, 8)
+ TEST_FIELD_SIZE (EMRCREATEBRUSHINDIRECT, lb, 12)
+ TEST_FIELD_ALIGN (EMRCREATEBRUSHINDIRECT, lb, 4)
+ TEST_FIELD_OFFSET(EMRCREATEBRUSHINDIRECT, lb, 12)
}
static void test_pack_EMRCREATECOLORSPACE(void)
{
/* EMRCREATECOLORSPACE (pack 4) */
- TEST_TYPE(EMRCREATECOLORSPACE, 340, 4);
- TEST_FIELD(EMRCREATECOLORSPACE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRCREATECOLORSPACE, DWORD, ihCS, 8, 4, 4);
- TEST_FIELD(EMRCREATECOLORSPACE, LOGCOLORSPACEA, lcs, 12, 328, 4);
+ TEST_TYPE_SIZE (EMRCREATECOLORSPACE, 340)
+ TEST_TYPE_ALIGN (EMRCREATECOLORSPACE, 4)
+ TEST_FIELD_SIZE (EMRCREATECOLORSPACE, emr, 8)
+ TEST_FIELD_ALIGN (EMRCREATECOLORSPACE, emr, 4)
+ TEST_FIELD_OFFSET(EMRCREATECOLORSPACE, emr, 0)
+ TEST_FIELD_SIZE (EMRCREATECOLORSPACE, ihCS, 4)
+ TEST_FIELD_ALIGN (EMRCREATECOLORSPACE, ihCS, 4)
+ TEST_FIELD_OFFSET(EMRCREATECOLORSPACE, ihCS, 8)
+ TEST_FIELD_SIZE (EMRCREATECOLORSPACE, lcs, 328)
+ TEST_FIELD_ALIGN (EMRCREATECOLORSPACE, lcs, 4)
+ TEST_FIELD_OFFSET(EMRCREATECOLORSPACE, lcs, 12)
}
static void test_pack_EMRCREATECOLORSPACEW(void)
{
/* EMRCREATECOLORSPACEW (pack 4) */
- TEST_TYPE(EMRCREATECOLORSPACEW, 612, 4);
- TEST_FIELD(EMRCREATECOLORSPACEW, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRCREATECOLORSPACEW, DWORD, ihCS, 8, 4, 4);
- TEST_FIELD(EMRCREATECOLORSPACEW, LOGCOLORSPACEW, lcs, 12, 588, 4);
- TEST_FIELD(EMRCREATECOLORSPACEW, DWORD, dwFlags, 600, 4, 4);
- TEST_FIELD(EMRCREATECOLORSPACEW, DWORD, cbData, 604, 4, 4);
- TEST_FIELD(EMRCREATECOLORSPACEW, BYTE[1], Data, 608, 1, 1);
+ TEST_TYPE_SIZE (EMRCREATECOLORSPACEW, 612)
+ TEST_TYPE_ALIGN (EMRCREATECOLORSPACEW, 4)
+ TEST_FIELD_SIZE (EMRCREATECOLORSPACEW, emr, 8)
+ TEST_FIELD_ALIGN (EMRCREATECOLORSPACEW, emr, 4)
+ TEST_FIELD_OFFSET(EMRCREATECOLORSPACEW, emr, 0)
+ TEST_FIELD_SIZE (EMRCREATECOLORSPACEW, ihCS, 4)
+ TEST_FIELD_ALIGN (EMRCREATECOLORSPACEW, ihCS, 4)
+ TEST_FIELD_OFFSET(EMRCREATECOLORSPACEW, ihCS, 8)
+ TEST_FIELD_SIZE (EMRCREATECOLORSPACEW, lcs, 588)
+ TEST_FIELD_ALIGN (EMRCREATECOLORSPACEW, lcs, 4)
+ TEST_FIELD_OFFSET(EMRCREATECOLORSPACEW, lcs, 12)
+ TEST_FIELD_SIZE (EMRCREATECOLORSPACEW, dwFlags, 4)
+ TEST_FIELD_ALIGN (EMRCREATECOLORSPACEW, dwFlags, 4)
+ TEST_FIELD_OFFSET(EMRCREATECOLORSPACEW, dwFlags, 600)
+ TEST_FIELD_SIZE (EMRCREATECOLORSPACEW, cbData, 4)
+ TEST_FIELD_ALIGN (EMRCREATECOLORSPACEW, cbData, 4)
+ TEST_FIELD_OFFSET(EMRCREATECOLORSPACEW, cbData, 604)
+ TEST_FIELD_SIZE (EMRCREATECOLORSPACEW, Data, 1)
+ TEST_FIELD_ALIGN (EMRCREATECOLORSPACEW, Data, 1)
+ TEST_FIELD_OFFSET(EMRCREATECOLORSPACEW, Data, 608)
}
static void test_pack_EMRCREATEDIBPATTERNBRUSHPT(void)
{
/* EMRCREATEDIBPATTERNBRUSHPT (pack 4) */
- TEST_TYPE(EMRCREATEDIBPATTERNBRUSHPT, 32, 4);
- TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, ihBrush, 8, 4, 4);
- TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, iUsage, 12, 4, 4);
- TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, offBmi, 16, 4, 4);
- TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, cbBmi, 20, 4, 4);
- TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, offBits, 24, 4, 4);
- TEST_FIELD(EMRCREATEDIBPATTERNBRUSHPT, DWORD, cbBits, 28, 4, 4);
+ TEST_TYPE_SIZE (EMRCREATEDIBPATTERNBRUSHPT, 32)
+ TEST_TYPE_ALIGN (EMRCREATEDIBPATTERNBRUSHPT, 4)
+ TEST_FIELD_SIZE (EMRCREATEDIBPATTERNBRUSHPT, emr, 8)
+ TEST_FIELD_ALIGN (EMRCREATEDIBPATTERNBRUSHPT, emr, 4)
+ TEST_FIELD_OFFSET(EMRCREATEDIBPATTERNBRUSHPT, emr, 0)
+ TEST_FIELD_SIZE (EMRCREATEDIBPATTERNBRUSHPT, ihBrush, 4)
+ TEST_FIELD_ALIGN (EMRCREATEDIBPATTERNBRUSHPT, ihBrush, 4)
+ TEST_FIELD_OFFSET(EMRCREATEDIBPATTERNBRUSHPT, ihBrush, 8)
+ TEST_FIELD_SIZE (EMRCREATEDIBPATTERNBRUSHPT, iUsage, 4)
+ TEST_FIELD_ALIGN (EMRCREATEDIBPATTERNBRUSHPT, iUsage, 4)
+ TEST_FIELD_OFFSET(EMRCREATEDIBPATTERNBRUSHPT, iUsage, 12)
+ TEST_FIELD_SIZE (EMRCREATEDIBPATTERNBRUSHPT, offBmi, 4)
+ TEST_FIELD_ALIGN (EMRCREATEDIBPATTERNBRUSHPT, offBmi, 4)
+ TEST_FIELD_OFFSET(EMRCREATEDIBPATTERNBRUSHPT, offBmi, 16)
+ TEST_FIELD_SIZE (EMRCREATEDIBPATTERNBRUSHPT, cbBmi, 4)
+ TEST_FIELD_ALIGN (EMRCREATEDIBPATTERNBRUSHPT, cbBmi, 4)
+ TEST_FIELD_OFFSET(EMRCREATEDIBPATTERNBRUSHPT, cbBmi, 20)
+ TEST_FIELD_SIZE (EMRCREATEDIBPATTERNBRUSHPT, offBits, 4)
+ TEST_FIELD_ALIGN (EMRCREATEDIBPATTERNBRUSHPT, offBits, 4)
+ TEST_FIELD_OFFSET(EMRCREATEDIBPATTERNBRUSHPT, offBits, 24)
+ TEST_FIELD_SIZE (EMRCREATEDIBPATTERNBRUSHPT, cbBits, 4)
+ TEST_FIELD_ALIGN (EMRCREATEDIBPATTERNBRUSHPT, cbBits, 4)
+ TEST_FIELD_OFFSET(EMRCREATEDIBPATTERNBRUSHPT, cbBits, 28)
}
static void test_pack_EMRCREATEMONOBRUSH(void)
{
/* EMRCREATEMONOBRUSH (pack 4) */
- TEST_TYPE(EMRCREATEMONOBRUSH, 32, 4);
- TEST_FIELD(EMRCREATEMONOBRUSH, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, ihBrush, 8, 4, 4);
- TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, iUsage, 12, 4, 4);
- TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, offBmi, 16, 4, 4);
- TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, cbBmi, 20, 4, 4);
- TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, offBits, 24, 4, 4);
- TEST_FIELD(EMRCREATEMONOBRUSH, DWORD, cbBits, 28, 4, 4);
+ TEST_TYPE_SIZE (EMRCREATEMONOBRUSH, 32)
+ TEST_TYPE_ALIGN (EMRCREATEMONOBRUSH, 4)
+ TEST_FIELD_SIZE (EMRCREATEMONOBRUSH, emr, 8)
+ TEST_FIELD_ALIGN (EMRCREATEMONOBRUSH, emr, 4)
+ TEST_FIELD_OFFSET(EMRCREATEMONOBRUSH, emr, 0)
+ TEST_FIELD_SIZE (EMRCREATEMONOBRUSH, ihBrush, 4)
+ TEST_FIELD_ALIGN (EMRCREATEMONOBRUSH, ihBrush, 4)
+ TEST_FIELD_OFFSET(EMRCREATEMONOBRUSH, ihBrush, 8)
+ TEST_FIELD_SIZE (EMRCREATEMONOBRUSH, iUsage, 4)
+ TEST_FIELD_ALIGN (EMRCREATEMONOBRUSH, iUsage, 4)
+ TEST_FIELD_OFFSET(EMRCREATEMONOBRUSH, iUsage, 12)
+ TEST_FIELD_SIZE (EMRCREATEMONOBRUSH, offBmi, 4)
+ TEST_FIELD_ALIGN (EMRCREATEMONOBRUSH, offBmi, 4)
+ TEST_FIELD_OFFSET(EMRCREATEMONOBRUSH, offBmi, 16)
+ TEST_FIELD_SIZE (EMRCREATEMONOBRUSH, cbBmi, 4)
+ TEST_FIELD_ALIGN (EMRCREATEMONOBRUSH, cbBmi, 4)
+ TEST_FIELD_OFFSET(EMRCREATEMONOBRUSH, cbBmi, 20)
+ TEST_FIELD_SIZE (EMRCREATEMONOBRUSH, offBits, 4)
+ TEST_FIELD_ALIGN (EMRCREATEMONOBRUSH, offBits, 4)
+ TEST_FIELD_OFFSET(EMRCREATEMONOBRUSH, offBits, 24)
+ TEST_FIELD_SIZE (EMRCREATEMONOBRUSH, cbBits, 4)
+ TEST_FIELD_ALIGN (EMRCREATEMONOBRUSH, cbBits, 4)
+ TEST_FIELD_OFFSET(EMRCREATEMONOBRUSH, cbBits, 28)
}
static void test_pack_EMRCREATEPEN(void)
{
/* EMRCREATEPEN (pack 4) */
- TEST_TYPE(EMRCREATEPEN, 28, 4);
- TEST_FIELD(EMRCREATEPEN, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRCREATEPEN, DWORD, ihPen, 8, 4, 4);
- TEST_FIELD(EMRCREATEPEN, LOGPEN, lopn, 12, 16, 4);
+ TEST_TYPE_SIZE (EMRCREATEPEN, 28)
+ TEST_TYPE_ALIGN (EMRCREATEPEN, 4)
+ TEST_FIELD_SIZE (EMRCREATEPEN, emr, 8)
+ TEST_FIELD_ALIGN (EMRCREATEPEN, emr, 4)
+ TEST_FIELD_OFFSET(EMRCREATEPEN, emr, 0)
+ TEST_FIELD_SIZE (EMRCREATEPEN, ihPen, 4)
+ TEST_FIELD_ALIGN (EMRCREATEPEN, ihPen, 4)
+ TEST_FIELD_OFFSET(EMRCREATEPEN, ihPen, 8)
+ TEST_FIELD_SIZE (EMRCREATEPEN, lopn, 16)
+ TEST_FIELD_ALIGN (EMRCREATEPEN, lopn, 4)
+ TEST_FIELD_OFFSET(EMRCREATEPEN, lopn, 12)
}
static void test_pack_EMRDELETECOLORSPACE(void)
{
/* EMRDELETECOLORSPACE (pack 4) */
- TEST_TYPE(EMRDELETECOLORSPACE, 12, 4);
- TEST_FIELD(EMRDELETECOLORSPACE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRDELETECOLORSPACE, DWORD, ihCS, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRDELETECOLORSPACE, 12)
+ TEST_TYPE_ALIGN (EMRDELETECOLORSPACE, 4)
+ TEST_FIELD_SIZE (EMRDELETECOLORSPACE, emr, 8)
+ TEST_FIELD_ALIGN (EMRDELETECOLORSPACE, emr, 4)
+ TEST_FIELD_OFFSET(EMRDELETECOLORSPACE, emr, 0)
+ TEST_FIELD_SIZE (EMRDELETECOLORSPACE, ihCS, 4)
+ TEST_FIELD_ALIGN (EMRDELETECOLORSPACE, ihCS, 4)
+ TEST_FIELD_OFFSET(EMRDELETECOLORSPACE, ihCS, 8)
}
static void test_pack_EMRDELETEOBJECT(void)
{
/* EMRDELETEOBJECT (pack 4) */
- TEST_TYPE(EMRDELETEOBJECT, 12, 4);
- TEST_FIELD(EMRDELETEOBJECT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRDELETEOBJECT, DWORD, ihObject, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRDELETEOBJECT, 12)
+ TEST_TYPE_ALIGN (EMRDELETEOBJECT, 4)
+ TEST_FIELD_SIZE (EMRDELETEOBJECT, emr, 8)
+ TEST_FIELD_ALIGN (EMRDELETEOBJECT, emr, 4)
+ TEST_FIELD_OFFSET(EMRDELETEOBJECT, emr, 0)
+ TEST_FIELD_SIZE (EMRDELETEOBJECT, ihObject, 4)
+ TEST_FIELD_ALIGN (EMRDELETEOBJECT, ihObject, 4)
+ TEST_FIELD_OFFSET(EMRDELETEOBJECT, ihObject, 8)
}
static void test_pack_EMRELLIPSE(void)
{
/* EMRELLIPSE (pack 4) */
- TEST_TYPE(EMRELLIPSE, 24, 4);
- TEST_FIELD(EMRELLIPSE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRELLIPSE, RECTL, rclBox, 8, 16, 4);
+ TEST_TYPE_SIZE (EMRELLIPSE, 24)
+ TEST_TYPE_ALIGN (EMRELLIPSE, 4)
+ TEST_FIELD_SIZE (EMRELLIPSE, emr, 8)
+ TEST_FIELD_ALIGN (EMRELLIPSE, emr, 4)
+ TEST_FIELD_OFFSET(EMRELLIPSE, emr, 0)
+ TEST_FIELD_SIZE (EMRELLIPSE, rclBox, 16)
+ TEST_FIELD_ALIGN (EMRELLIPSE, rclBox, 4)
+ TEST_FIELD_OFFSET(EMRELLIPSE, rclBox, 8)
}
static void test_pack_EMRENDPATH(void)
{
/* EMRENDPATH (pack 4) */
- TEST_TYPE(EMRENDPATH, 8, 4);
- TEST_FIELD(EMRENDPATH, EMR, emr, 0, 8, 4);
+ TEST_TYPE_SIZE (EMRENDPATH, 8)
+ TEST_TYPE_ALIGN (EMRENDPATH, 4)
+ TEST_FIELD_SIZE (EMRENDPATH, emr, 8)
+ TEST_FIELD_ALIGN (EMRENDPATH, emr, 4)
+ TEST_FIELD_OFFSET(EMRENDPATH, emr, 0)
}
static void test_pack_EMREOF(void)
{
/* EMREOF (pack 4) */
- TEST_TYPE(EMREOF, 20, 4);
- TEST_FIELD(EMREOF, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMREOF, DWORD, nPalEntries, 8, 4, 4);
- TEST_FIELD(EMREOF, DWORD, offPalEntries, 12, 4, 4);
- TEST_FIELD(EMREOF, DWORD, nSizeLast, 16, 4, 4);
+ TEST_TYPE_SIZE (EMREOF, 20)
+ TEST_TYPE_ALIGN (EMREOF, 4)
+ TEST_FIELD_SIZE (EMREOF, emr, 8)
+ TEST_FIELD_ALIGN (EMREOF, emr, 4)
+ TEST_FIELD_OFFSET(EMREOF, emr, 0)
+ TEST_FIELD_SIZE (EMREOF, nPalEntries, 4)
+ TEST_FIELD_ALIGN (EMREOF, nPalEntries, 4)
+ TEST_FIELD_OFFSET(EMREOF, nPalEntries, 8)
+ TEST_FIELD_SIZE (EMREOF, offPalEntries, 4)
+ TEST_FIELD_ALIGN (EMREOF, offPalEntries, 4)
+ TEST_FIELD_OFFSET(EMREOF, offPalEntries, 12)
+ TEST_FIELD_SIZE (EMREOF, nSizeLast, 4)
+ TEST_FIELD_ALIGN (EMREOF, nSizeLast, 4)
+ TEST_FIELD_OFFSET(EMREOF, nSizeLast, 16)
}
static void test_pack_EMREXCLUDECLIPRECT(void)
{
/* EMREXCLUDECLIPRECT (pack 4) */
- TEST_TYPE(EMREXCLUDECLIPRECT, 24, 4);
- TEST_FIELD(EMREXCLUDECLIPRECT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMREXCLUDECLIPRECT, RECTL, rclClip, 8, 16, 4);
+ TEST_TYPE_SIZE (EMREXCLUDECLIPRECT, 24)
+ TEST_TYPE_ALIGN (EMREXCLUDECLIPRECT, 4)
+ TEST_FIELD_SIZE (EMREXCLUDECLIPRECT, emr, 8)
+ TEST_FIELD_ALIGN (EMREXCLUDECLIPRECT, emr, 4)
+ TEST_FIELD_OFFSET(EMREXCLUDECLIPRECT, emr, 0)
+ TEST_FIELD_SIZE (EMREXCLUDECLIPRECT, rclClip, 16)
+ TEST_FIELD_ALIGN (EMREXCLUDECLIPRECT, rclClip, 4)
+ TEST_FIELD_OFFSET(EMREXCLUDECLIPRECT, rclClip, 8)
}
static void test_pack_EMREXTCREATEFONTINDIRECTW(void)
{
/* EMREXTCREATEFONTINDIRECTW (pack 4) */
- TEST_TYPE(EMREXTCREATEFONTINDIRECTW, 332, 4);
- TEST_FIELD(EMREXTCREATEFONTINDIRECTW, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMREXTCREATEFONTINDIRECTW, DWORD, ihFont, 8, 4, 4);
- TEST_FIELD(EMREXTCREATEFONTINDIRECTW, EXTLOGFONTW, elfw, 12, 320, 4);
+ TEST_TYPE_SIZE (EMREXTCREATEFONTINDIRECTW, 332)
+ TEST_TYPE_ALIGN (EMREXTCREATEFONTINDIRECTW, 4)
+ TEST_FIELD_SIZE (EMREXTCREATEFONTINDIRECTW, emr, 8)
+ TEST_FIELD_ALIGN (EMREXTCREATEFONTINDIRECTW, emr, 4)
+ TEST_FIELD_OFFSET(EMREXTCREATEFONTINDIRECTW, emr, 0)
+ TEST_FIELD_SIZE (EMREXTCREATEFONTINDIRECTW, ihFont, 4)
+ TEST_FIELD_ALIGN (EMREXTCREATEFONTINDIRECTW, ihFont, 4)
+ TEST_FIELD_OFFSET(EMREXTCREATEFONTINDIRECTW, ihFont, 8)
+ TEST_FIELD_SIZE (EMREXTCREATEFONTINDIRECTW, elfw, 320)
+ TEST_FIELD_ALIGN (EMREXTCREATEFONTINDIRECTW, elfw, 4)
+ TEST_FIELD_OFFSET(EMREXTCREATEFONTINDIRECTW, elfw, 12)
}
static void test_pack_EMREXTCREATEPEN(void)
{
/* EMREXTCREATEPEN (pack 4) */
- TEST_TYPE(EMREXTCREATEPEN, 56, 4);
- TEST_FIELD(EMREXTCREATEPEN, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMREXTCREATEPEN, DWORD, ihPen, 8, 4, 4);
- TEST_FIELD(EMREXTCREATEPEN, DWORD, offBmi, 12, 4, 4);
- TEST_FIELD(EMREXTCREATEPEN, DWORD, cbBmi, 16, 4, 4);
- TEST_FIELD(EMREXTCREATEPEN, DWORD, offBits, 20, 4, 4);
- TEST_FIELD(EMREXTCREATEPEN, DWORD, cbBits, 24, 4, 4);
- TEST_FIELD(EMREXTCREATEPEN, EXTLOGPEN, elp, 28, 28, 4);
+ TEST_TYPE_SIZE (EMREXTCREATEPEN, 56)
+ TEST_TYPE_ALIGN (EMREXTCREATEPEN, 4)
+ TEST_FIELD_SIZE (EMREXTCREATEPEN, emr, 8)
+ TEST_FIELD_ALIGN (EMREXTCREATEPEN, emr, 4)
+ TEST_FIELD_OFFSET(EMREXTCREATEPEN, emr, 0)
+ TEST_FIELD_SIZE (EMREXTCREATEPEN, ihPen, 4)
+ TEST_FIELD_ALIGN (EMREXTCREATEPEN, ihPen, 4)
+ TEST_FIELD_OFFSET(EMREXTCREATEPEN, ihPen, 8)
+ TEST_FIELD_SIZE (EMREXTCREATEPEN, offBmi, 4)
+ TEST_FIELD_ALIGN (EMREXTCREATEPEN, offBmi, 4)
+ TEST_FIELD_OFFSET(EMREXTCREATEPEN, offBmi, 12)
+ TEST_FIELD_SIZE (EMREXTCREATEPEN, cbBmi, 4)
+ TEST_FIELD_ALIGN (EMREXTCREATEPEN, cbBmi, 4)
+ TEST_FIELD_OFFSET(EMREXTCREATEPEN, cbBmi, 16)
+ TEST_FIELD_SIZE (EMREXTCREATEPEN, offBits, 4)
+ TEST_FIELD_ALIGN (EMREXTCREATEPEN, offBits, 4)
+ TEST_FIELD_OFFSET(EMREXTCREATEPEN, offBits, 20)
+ TEST_FIELD_SIZE (EMREXTCREATEPEN, cbBits, 4)
+ TEST_FIELD_ALIGN (EMREXTCREATEPEN, cbBits, 4)
+ TEST_FIELD_OFFSET(EMREXTCREATEPEN, cbBits, 24)
+ TEST_FIELD_SIZE (EMREXTCREATEPEN, elp, 28)
+ TEST_FIELD_ALIGN (EMREXTCREATEPEN, elp, 4)
+ TEST_FIELD_OFFSET(EMREXTCREATEPEN, elp, 28)
}
static void test_pack_EMREXTFLOODFILL(void)
{
/* EMREXTFLOODFILL (pack 4) */
- TEST_TYPE(EMREXTFLOODFILL, 24, 4);
- TEST_FIELD(EMREXTFLOODFILL, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMREXTFLOODFILL, POINTL, ptlStart, 8, 8, 4);
- TEST_FIELD(EMREXTFLOODFILL, COLORREF, crColor, 16, 4, 4);
- TEST_FIELD(EMREXTFLOODFILL, DWORD, iMode, 20, 4, 4);
+ TEST_TYPE_SIZE (EMREXTFLOODFILL, 24)
+ TEST_TYPE_ALIGN (EMREXTFLOODFILL, 4)
+ TEST_FIELD_SIZE (EMREXTFLOODFILL, emr, 8)
+ TEST_FIELD_ALIGN (EMREXTFLOODFILL, emr, 4)
+ TEST_FIELD_OFFSET(EMREXTFLOODFILL, emr, 0)
+ TEST_FIELD_SIZE (EMREXTFLOODFILL, ptlStart, 8)
+ TEST_FIELD_ALIGN (EMREXTFLOODFILL, ptlStart, 4)
+ TEST_FIELD_OFFSET(EMREXTFLOODFILL, ptlStart, 8)
+ TEST_FIELD_SIZE (EMREXTFLOODFILL, crColor, 4)
+ TEST_FIELD_ALIGN (EMREXTFLOODFILL, crColor, 4)
+ TEST_FIELD_OFFSET(EMREXTFLOODFILL, crColor, 16)
+ TEST_FIELD_SIZE (EMREXTFLOODFILL, iMode, 4)
+ TEST_FIELD_ALIGN (EMREXTFLOODFILL, iMode, 4)
+ TEST_FIELD_OFFSET(EMREXTFLOODFILL, iMode, 20)
}
static void test_pack_EMREXTSELECTCLIPRGN(void)
{
/* EMREXTSELECTCLIPRGN (pack 4) */
- TEST_TYPE(EMREXTSELECTCLIPRGN, 20, 4);
- TEST_FIELD(EMREXTSELECTCLIPRGN, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMREXTSELECTCLIPRGN, DWORD, cbRgnData, 8, 4, 4);
- TEST_FIELD(EMREXTSELECTCLIPRGN, DWORD, iMode, 12, 4, 4);
- TEST_FIELD(EMREXTSELECTCLIPRGN, BYTE[1], RgnData, 16, 1, 1);
+ TEST_TYPE_SIZE (EMREXTSELECTCLIPRGN, 20)
+ TEST_TYPE_ALIGN (EMREXTSELECTCLIPRGN, 4)
+ TEST_FIELD_SIZE (EMREXTSELECTCLIPRGN, emr, 8)
+ TEST_FIELD_ALIGN (EMREXTSELECTCLIPRGN, emr, 4)
+ TEST_FIELD_OFFSET(EMREXTSELECTCLIPRGN, emr, 0)
+ TEST_FIELD_SIZE (EMREXTSELECTCLIPRGN, cbRgnData, 4)
+ TEST_FIELD_ALIGN (EMREXTSELECTCLIPRGN, cbRgnData, 4)
+ TEST_FIELD_OFFSET(EMREXTSELECTCLIPRGN, cbRgnData, 8)
+ TEST_FIELD_SIZE (EMREXTSELECTCLIPRGN, iMode, 4)
+ TEST_FIELD_ALIGN (EMREXTSELECTCLIPRGN, iMode, 4)
+ TEST_FIELD_OFFSET(EMREXTSELECTCLIPRGN, iMode, 12)
+ TEST_FIELD_SIZE (EMREXTSELECTCLIPRGN, RgnData, 1)
+ TEST_FIELD_ALIGN (EMREXTSELECTCLIPRGN, RgnData, 1)
+ TEST_FIELD_OFFSET(EMREXTSELECTCLIPRGN, RgnData, 16)
}
static void test_pack_EMREXTTEXTOUTA(void)
{
/* EMREXTTEXTOUTA (pack 4) */
- TEST_TYPE(EMREXTTEXTOUTA, 76, 4);
- TEST_FIELD(EMREXTTEXTOUTA, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMREXTTEXTOUTA, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMREXTTEXTOUTA, DWORD, iGraphicsMode, 24, 4, 4);
- TEST_FIELD(EMREXTTEXTOUTA, FLOAT, exScale, 28, 4, 4);
- TEST_FIELD(EMREXTTEXTOUTA, FLOAT, eyScale, 32, 4, 4);
- TEST_FIELD(EMREXTTEXTOUTA, EMRTEXT, emrtext, 36, 40, 4);
+ TEST_TYPE_SIZE (EMREXTTEXTOUTA, 76)
+ TEST_TYPE_ALIGN (EMREXTTEXTOUTA, 4)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTA, emr, 8)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTA, emr, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTA, emr, 0)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTA, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTA, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTA, rclBounds, 8)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTA, iGraphicsMode, 4)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTA, iGraphicsMode, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTA, iGraphicsMode, 24)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTA, exScale, 4)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTA, exScale, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTA, exScale, 28)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTA, eyScale, 4)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTA, eyScale, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTA, eyScale, 32)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTA, emrtext, 40)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTA, emrtext, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTA, emrtext, 36)
}
static void test_pack_EMREXTTEXTOUTW(void)
{
/* EMREXTTEXTOUTW (pack 4) */
- TEST_TYPE(EMREXTTEXTOUTW, 76, 4);
- TEST_FIELD(EMREXTTEXTOUTW, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMREXTTEXTOUTW, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMREXTTEXTOUTW, DWORD, iGraphicsMode, 24, 4, 4);
- TEST_FIELD(EMREXTTEXTOUTW, FLOAT, exScale, 28, 4, 4);
- TEST_FIELD(EMREXTTEXTOUTW, FLOAT, eyScale, 32, 4, 4);
- TEST_FIELD(EMREXTTEXTOUTW, EMRTEXT, emrtext, 36, 40, 4);
+ TEST_TYPE_SIZE (EMREXTTEXTOUTW, 76)
+ TEST_TYPE_ALIGN (EMREXTTEXTOUTW, 4)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTW, emr, 8)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTW, emr, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTW, emr, 0)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTW, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTW, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTW, rclBounds, 8)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTW, iGraphicsMode, 4)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTW, iGraphicsMode, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTW, iGraphicsMode, 24)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTW, exScale, 4)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTW, exScale, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTW, exScale, 28)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTW, eyScale, 4)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTW, eyScale, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTW, eyScale, 32)
+ TEST_FIELD_SIZE (EMREXTTEXTOUTW, emrtext, 40)
+ TEST_FIELD_ALIGN (EMREXTTEXTOUTW, emrtext, 4)
+ TEST_FIELD_OFFSET(EMREXTTEXTOUTW, emrtext, 36)
}
static void test_pack_EMRFILLPATH(void)
{
/* EMRFILLPATH (pack 4) */
- TEST_TYPE(EMRFILLPATH, 24, 4);
- TEST_FIELD(EMRFILLPATH, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRFILLPATH, RECTL, rclBounds, 8, 16, 4);
+ TEST_TYPE_SIZE (EMRFILLPATH, 24)
+ TEST_TYPE_ALIGN (EMRFILLPATH, 4)
+ TEST_FIELD_SIZE (EMRFILLPATH, emr, 8)
+ TEST_FIELD_ALIGN (EMRFILLPATH, emr, 4)
+ TEST_FIELD_OFFSET(EMRFILLPATH, emr, 0)
+ TEST_FIELD_SIZE (EMRFILLPATH, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRFILLPATH, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRFILLPATH, rclBounds, 8)
}
static void test_pack_EMRFILLRGN(void)
{
/* EMRFILLRGN (pack 4) */
- TEST_TYPE(EMRFILLRGN, 36, 4);
- TEST_FIELD(EMRFILLRGN, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRFILLRGN, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRFILLRGN, DWORD, cbRgnData, 24, 4, 4);
- TEST_FIELD(EMRFILLRGN, DWORD, ihBrush, 28, 4, 4);
- TEST_FIELD(EMRFILLRGN, BYTE[1], RgnData, 32, 1, 1);
+ TEST_TYPE_SIZE (EMRFILLRGN, 36)
+ TEST_TYPE_ALIGN (EMRFILLRGN, 4)
+ TEST_FIELD_SIZE (EMRFILLRGN, emr, 8)
+ TEST_FIELD_ALIGN (EMRFILLRGN, emr, 4)
+ TEST_FIELD_OFFSET(EMRFILLRGN, emr, 0)
+ TEST_FIELD_SIZE (EMRFILLRGN, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRFILLRGN, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRFILLRGN, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRFILLRGN, cbRgnData, 4)
+ TEST_FIELD_ALIGN (EMRFILLRGN, cbRgnData, 4)
+ TEST_FIELD_OFFSET(EMRFILLRGN, cbRgnData, 24)
+ TEST_FIELD_SIZE (EMRFILLRGN, ihBrush, 4)
+ TEST_FIELD_ALIGN (EMRFILLRGN, ihBrush, 4)
+ TEST_FIELD_OFFSET(EMRFILLRGN, ihBrush, 28)
+ TEST_FIELD_SIZE (EMRFILLRGN, RgnData, 1)
+ TEST_FIELD_ALIGN (EMRFILLRGN, RgnData, 1)
+ TEST_FIELD_OFFSET(EMRFILLRGN, RgnData, 32)
}
static void test_pack_EMRFLATTENPATH(void)
{
/* EMRFLATTENPATH (pack 4) */
- TEST_TYPE(EMRFLATTENPATH, 8, 4);
- TEST_FIELD(EMRFLATTENPATH, EMR, emr, 0, 8, 4);
+ TEST_TYPE_SIZE (EMRFLATTENPATH, 8)
+ TEST_TYPE_ALIGN (EMRFLATTENPATH, 4)
+ TEST_FIELD_SIZE (EMRFLATTENPATH, emr, 8)
+ TEST_FIELD_ALIGN (EMRFLATTENPATH, emr, 4)
+ TEST_FIELD_OFFSET(EMRFLATTENPATH, emr, 0)
}
static void test_pack_EMRFORMAT(void)
{
/* EMRFORMAT (pack 4) */
- TEST_TYPE(EMRFORMAT, 16, 4);
- TEST_FIELD(EMRFORMAT, DWORD, dSignature, 0, 4, 4);
- TEST_FIELD(EMRFORMAT, DWORD, nVersion, 4, 4, 4);
- TEST_FIELD(EMRFORMAT, DWORD, cbData, 8, 4, 4);
- TEST_FIELD(EMRFORMAT, DWORD, offData, 12, 4, 4);
+ TEST_TYPE_SIZE (EMRFORMAT, 16)
+ TEST_TYPE_ALIGN (EMRFORMAT, 4)
+ TEST_FIELD_SIZE (EMRFORMAT, dSignature, 4)
+ TEST_FIELD_ALIGN (EMRFORMAT, dSignature, 4)
+ TEST_FIELD_OFFSET(EMRFORMAT, dSignature, 0)
+ TEST_FIELD_SIZE (EMRFORMAT, nVersion, 4)
+ TEST_FIELD_ALIGN (EMRFORMAT, nVersion, 4)
+ TEST_FIELD_OFFSET(EMRFORMAT, nVersion, 4)
+ TEST_FIELD_SIZE (EMRFORMAT, cbData, 4)
+ TEST_FIELD_ALIGN (EMRFORMAT, cbData, 4)
+ TEST_FIELD_OFFSET(EMRFORMAT, cbData, 8)
+ TEST_FIELD_SIZE (EMRFORMAT, offData, 4)
+ TEST_FIELD_ALIGN (EMRFORMAT, offData, 4)
+ TEST_FIELD_OFFSET(EMRFORMAT, offData, 12)
}
static void test_pack_EMRFRAMERGN(void)
{
/* EMRFRAMERGN (pack 4) */
- TEST_TYPE(EMRFRAMERGN, 44, 4);
- TEST_FIELD(EMRFRAMERGN, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRFRAMERGN, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRFRAMERGN, DWORD, cbRgnData, 24, 4, 4);
- TEST_FIELD(EMRFRAMERGN, DWORD, ihBrush, 28, 4, 4);
- TEST_FIELD(EMRFRAMERGN, SIZEL, szlStroke, 32, 8, 4);
- TEST_FIELD(EMRFRAMERGN, BYTE[1], RgnData, 40, 1, 1);
+ TEST_TYPE_SIZE (EMRFRAMERGN, 44)
+ TEST_TYPE_ALIGN (EMRFRAMERGN, 4)
+ TEST_FIELD_SIZE (EMRFRAMERGN, emr, 8)
+ TEST_FIELD_ALIGN (EMRFRAMERGN, emr, 4)
+ TEST_FIELD_OFFSET(EMRFRAMERGN, emr, 0)
+ TEST_FIELD_SIZE (EMRFRAMERGN, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRFRAMERGN, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRFRAMERGN, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRFRAMERGN, cbRgnData, 4)
+ TEST_FIELD_ALIGN (EMRFRAMERGN, cbRgnData, 4)
+ TEST_FIELD_OFFSET(EMRFRAMERGN, cbRgnData, 24)
+ TEST_FIELD_SIZE (EMRFRAMERGN, ihBrush, 4)
+ TEST_FIELD_ALIGN (EMRFRAMERGN, ihBrush, 4)
+ TEST_FIELD_OFFSET(EMRFRAMERGN, ihBrush, 28)
+ TEST_FIELD_SIZE (EMRFRAMERGN, szlStroke, 8)
+ TEST_FIELD_ALIGN (EMRFRAMERGN, szlStroke, 4)
+ TEST_FIELD_OFFSET(EMRFRAMERGN, szlStroke, 32)
+ TEST_FIELD_SIZE (EMRFRAMERGN, RgnData, 1)
+ TEST_FIELD_ALIGN (EMRFRAMERGN, RgnData, 1)
+ TEST_FIELD_OFFSET(EMRFRAMERGN, RgnData, 40)
}
static void test_pack_EMRGDICOMMENT(void)
{
/* EMRGDICOMMENT (pack 4) */
- TEST_TYPE(EMRGDICOMMENT, 16, 4);
- TEST_FIELD(EMRGDICOMMENT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRGDICOMMENT, DWORD, cbData, 8, 4, 4);
- TEST_FIELD(EMRGDICOMMENT, BYTE[1], Data, 12, 1, 1);
+ TEST_TYPE_SIZE (EMRGDICOMMENT, 16)
+ TEST_TYPE_ALIGN (EMRGDICOMMENT, 4)
+ TEST_FIELD_SIZE (EMRGDICOMMENT, emr, 8)
+ TEST_FIELD_ALIGN (EMRGDICOMMENT, emr, 4)
+ TEST_FIELD_OFFSET(EMRGDICOMMENT, emr, 0)
+ TEST_FIELD_SIZE (EMRGDICOMMENT, cbData, 4)
+ TEST_FIELD_ALIGN (EMRGDICOMMENT, cbData, 4)
+ TEST_FIELD_OFFSET(EMRGDICOMMENT, cbData, 8)
+ TEST_FIELD_SIZE (EMRGDICOMMENT, Data, 1)
+ TEST_FIELD_ALIGN (EMRGDICOMMENT, Data, 1)
+ TEST_FIELD_OFFSET(EMRGDICOMMENT, Data, 12)
}
static void test_pack_EMRGLSBOUNDEDRECORD(void)
{
/* EMRGLSBOUNDEDRECORD (pack 4) */
- TEST_TYPE(EMRGLSBOUNDEDRECORD, 32, 4);
- TEST_FIELD(EMRGLSBOUNDEDRECORD, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRGLSBOUNDEDRECORD, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRGLSBOUNDEDRECORD, DWORD, cbData, 24, 4, 4);
- TEST_FIELD(EMRGLSBOUNDEDRECORD, BYTE[1], Data, 28, 1, 1);
+ TEST_TYPE_SIZE (EMRGLSBOUNDEDRECORD, 32)
+ TEST_TYPE_ALIGN (EMRGLSBOUNDEDRECORD, 4)
+ TEST_FIELD_SIZE (EMRGLSBOUNDEDRECORD, emr, 8)
+ TEST_FIELD_ALIGN (EMRGLSBOUNDEDRECORD, emr, 4)
+ TEST_FIELD_OFFSET(EMRGLSBOUNDEDRECORD, emr, 0)
+ TEST_FIELD_SIZE (EMRGLSBOUNDEDRECORD, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRGLSBOUNDEDRECORD, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRGLSBOUNDEDRECORD, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRGLSBOUNDEDRECORD, cbData, 4)
+ TEST_FIELD_ALIGN (EMRGLSBOUNDEDRECORD, cbData, 4)
+ TEST_FIELD_OFFSET(EMRGLSBOUNDEDRECORD, cbData, 24)
+ TEST_FIELD_SIZE (EMRGLSBOUNDEDRECORD, Data, 1)
+ TEST_FIELD_ALIGN (EMRGLSBOUNDEDRECORD, Data, 1)
+ TEST_FIELD_OFFSET(EMRGLSBOUNDEDRECORD, Data, 28)
}
static void test_pack_EMRGLSRECORD(void)
{
/* EMRGLSRECORD (pack 4) */
- TEST_TYPE(EMRGLSRECORD, 16, 4);
- TEST_FIELD(EMRGLSRECORD, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRGLSRECORD, DWORD, cbData, 8, 4, 4);
- TEST_FIELD(EMRGLSRECORD, BYTE[1], Data, 12, 1, 1);
+ TEST_TYPE_SIZE (EMRGLSRECORD, 16)
+ TEST_TYPE_ALIGN (EMRGLSRECORD, 4)
+ TEST_FIELD_SIZE (EMRGLSRECORD, emr, 8)
+ TEST_FIELD_ALIGN (EMRGLSRECORD, emr, 4)
+ TEST_FIELD_OFFSET(EMRGLSRECORD, emr, 0)
+ TEST_FIELD_SIZE (EMRGLSRECORD, cbData, 4)
+ TEST_FIELD_ALIGN (EMRGLSRECORD, cbData, 4)
+ TEST_FIELD_OFFSET(EMRGLSRECORD, cbData, 8)
+ TEST_FIELD_SIZE (EMRGLSRECORD, Data, 1)
+ TEST_FIELD_ALIGN (EMRGLSRECORD, Data, 1)
+ TEST_FIELD_OFFSET(EMRGLSRECORD, Data, 12)
}
static void test_pack_EMRINTERSECTCLIPRECT(void)
{
/* EMRINTERSECTCLIPRECT (pack 4) */
- TEST_TYPE(EMRINTERSECTCLIPRECT, 24, 4);
- TEST_FIELD(EMRINTERSECTCLIPRECT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRINTERSECTCLIPRECT, RECTL, rclClip, 8, 16, 4);
+ TEST_TYPE_SIZE (EMRINTERSECTCLIPRECT, 24)
+ TEST_TYPE_ALIGN (EMRINTERSECTCLIPRECT, 4)
+ TEST_FIELD_SIZE (EMRINTERSECTCLIPRECT, emr, 8)
+ TEST_FIELD_ALIGN (EMRINTERSECTCLIPRECT, emr, 4)
+ TEST_FIELD_OFFSET(EMRINTERSECTCLIPRECT, emr, 0)
+ TEST_FIELD_SIZE (EMRINTERSECTCLIPRECT, rclClip, 16)
+ TEST_FIELD_ALIGN (EMRINTERSECTCLIPRECT, rclClip, 4)
+ TEST_FIELD_OFFSET(EMRINTERSECTCLIPRECT, rclClip, 8)
}
static void test_pack_EMRINVERTRGN(void)
{
/* EMRINVERTRGN (pack 4) */
- TEST_TYPE(EMRINVERTRGN, 32, 4);
- TEST_FIELD(EMRINVERTRGN, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRINVERTRGN, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRINVERTRGN, DWORD, cbRgnData, 24, 4, 4);
- TEST_FIELD(EMRINVERTRGN, BYTE[1], RgnData, 28, 1, 1);
+ TEST_TYPE_SIZE (EMRINVERTRGN, 32)
+ TEST_TYPE_ALIGN (EMRINVERTRGN, 4)
+ TEST_FIELD_SIZE (EMRINVERTRGN, emr, 8)
+ TEST_FIELD_ALIGN (EMRINVERTRGN, emr, 4)
+ TEST_FIELD_OFFSET(EMRINVERTRGN, emr, 0)
+ TEST_FIELD_SIZE (EMRINVERTRGN, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRINVERTRGN, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRINVERTRGN, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRINVERTRGN, cbRgnData, 4)
+ TEST_FIELD_ALIGN (EMRINVERTRGN, cbRgnData, 4)
+ TEST_FIELD_OFFSET(EMRINVERTRGN, cbRgnData, 24)
+ TEST_FIELD_SIZE (EMRINVERTRGN, RgnData, 1)
+ TEST_FIELD_ALIGN (EMRINVERTRGN, RgnData, 1)
+ TEST_FIELD_OFFSET(EMRINVERTRGN, RgnData, 28)
}
static void test_pack_EMRLINETO(void)
{
/* EMRLINETO (pack 4) */
- TEST_TYPE(EMRLINETO, 16, 4);
- TEST_FIELD(EMRLINETO, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRLINETO, POINTL, ptl, 8, 8, 4);
+ TEST_TYPE_SIZE (EMRLINETO, 16)
+ TEST_TYPE_ALIGN (EMRLINETO, 4)
+ TEST_FIELD_SIZE (EMRLINETO, emr, 8)
+ TEST_FIELD_ALIGN (EMRLINETO, emr, 4)
+ TEST_FIELD_OFFSET(EMRLINETO, emr, 0)
+ TEST_FIELD_SIZE (EMRLINETO, ptl, 8)
+ TEST_FIELD_ALIGN (EMRLINETO, ptl, 4)
+ TEST_FIELD_OFFSET(EMRLINETO, ptl, 8)
}
static void test_pack_EMRMASKBLT(void)
{
/* EMRMASKBLT (pack 4) */
- TEST_TYPE(EMRMASKBLT, 128, 4);
- TEST_FIELD(EMRMASKBLT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRMASKBLT, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRMASKBLT, LONG, xDest, 24, 4, 4);
- TEST_FIELD(EMRMASKBLT, LONG, yDest, 28, 4, 4);
- TEST_FIELD(EMRMASKBLT, LONG, cxDest, 32, 4, 4);
- TEST_FIELD(EMRMASKBLT, LONG, cyDest, 36, 4, 4);
- TEST_FIELD(EMRMASKBLT, DWORD, dwRop, 40, 4, 4);
- TEST_FIELD(EMRMASKBLT, LONG, xSrc, 44, 4, 4);
- TEST_FIELD(EMRMASKBLT, LONG, ySrc, 48, 4, 4);
- TEST_FIELD(EMRMASKBLT, XFORM, xformSrc, 52, 24, 4);
- TEST_FIELD(EMRMASKBLT, COLORREF, crBkColorSrc, 76, 4, 4);
- TEST_FIELD(EMRMASKBLT, DWORD, iUsageSrc, 80, 4, 4);
- TEST_FIELD(EMRMASKBLT, DWORD, offBmiSrc, 84, 4, 4);
- TEST_FIELD(EMRMASKBLT, DWORD, cbBmiSrc, 88, 4, 4);
- TEST_FIELD(EMRMASKBLT, DWORD, offBitsSrc, 92, 4, 4);
- TEST_FIELD(EMRMASKBLT, DWORD, cbBitsSrc, 96, 4, 4);
- TEST_FIELD(EMRMASKBLT, LONG, xMask, 100, 4, 4);
- TEST_FIELD(EMRMASKBLT, LONG, yMask, 104, 4, 4);
- TEST_FIELD(EMRMASKBLT, DWORD, iUsageMask, 108, 4, 4);
- TEST_FIELD(EMRMASKBLT, DWORD, offBmiMask, 112, 4, 4);
- TEST_FIELD(EMRMASKBLT, DWORD, cbBmiMask, 116, 4, 4);
- TEST_FIELD(EMRMASKBLT, DWORD, offBitsMask, 120, 4, 4);
- TEST_FIELD(EMRMASKBLT, DWORD, cbBitsMask, 124, 4, 4);
+ TEST_TYPE_SIZE (EMRMASKBLT, 128)
+ TEST_TYPE_ALIGN (EMRMASKBLT, 4)
+ TEST_FIELD_SIZE (EMRMASKBLT, emr, 8)
+ TEST_FIELD_ALIGN (EMRMASKBLT, emr, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, emr, 0)
+ TEST_FIELD_SIZE (EMRMASKBLT, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRMASKBLT, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRMASKBLT, xDest, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, xDest, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, xDest, 24)
+ TEST_FIELD_SIZE (EMRMASKBLT, yDest, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, yDest, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, yDest, 28)
+ TEST_FIELD_SIZE (EMRMASKBLT, cxDest, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, cxDest, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, cxDest, 32)
+ TEST_FIELD_SIZE (EMRMASKBLT, cyDest, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, cyDest, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, cyDest, 36)
+ TEST_FIELD_SIZE (EMRMASKBLT, dwRop, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, dwRop, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, dwRop, 40)
+ TEST_FIELD_SIZE (EMRMASKBLT, xSrc, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, xSrc, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, xSrc, 44)
+ TEST_FIELD_SIZE (EMRMASKBLT, ySrc, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, ySrc, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, ySrc, 48)
+ TEST_FIELD_SIZE (EMRMASKBLT, xformSrc, 24)
+ TEST_FIELD_ALIGN (EMRMASKBLT, xformSrc, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, xformSrc, 52)
+ TEST_FIELD_SIZE (EMRMASKBLT, crBkColorSrc, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, crBkColorSrc, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, crBkColorSrc, 76)
+ TEST_FIELD_SIZE (EMRMASKBLT, iUsageSrc, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, iUsageSrc, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, iUsageSrc, 80)
+ TEST_FIELD_SIZE (EMRMASKBLT, offBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, offBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, offBmiSrc, 84)
+ TEST_FIELD_SIZE (EMRMASKBLT, cbBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, cbBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, cbBmiSrc, 88)
+ TEST_FIELD_SIZE (EMRMASKBLT, offBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, offBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, offBitsSrc, 92)
+ TEST_FIELD_SIZE (EMRMASKBLT, cbBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, cbBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, cbBitsSrc, 96)
+ TEST_FIELD_SIZE (EMRMASKBLT, xMask, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, xMask, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, xMask, 100)
+ TEST_FIELD_SIZE (EMRMASKBLT, yMask, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, yMask, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, yMask, 104)
+ TEST_FIELD_SIZE (EMRMASKBLT, iUsageMask, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, iUsageMask, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, iUsageMask, 108)
+ TEST_FIELD_SIZE (EMRMASKBLT, offBmiMask, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, offBmiMask, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, offBmiMask, 112)
+ TEST_FIELD_SIZE (EMRMASKBLT, cbBmiMask, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, cbBmiMask, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, cbBmiMask, 116)
+ TEST_FIELD_SIZE (EMRMASKBLT, offBitsMask, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, offBitsMask, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, offBitsMask, 120)
+ TEST_FIELD_SIZE (EMRMASKBLT, cbBitsMask, 4)
+ TEST_FIELD_ALIGN (EMRMASKBLT, cbBitsMask, 4)
+ TEST_FIELD_OFFSET(EMRMASKBLT, cbBitsMask, 124)
}
static void test_pack_EMRMODIFYWORLDTRANSFORM(void)
{
/* EMRMODIFYWORLDTRANSFORM (pack 4) */
- TEST_TYPE(EMRMODIFYWORLDTRANSFORM, 36, 4);
- TEST_FIELD(EMRMODIFYWORLDTRANSFORM, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRMODIFYWORLDTRANSFORM, XFORM, xform, 8, 24, 4);
- TEST_FIELD(EMRMODIFYWORLDTRANSFORM, DWORD, iMode, 32, 4, 4);
+ TEST_TYPE_SIZE (EMRMODIFYWORLDTRANSFORM, 36)
+ TEST_TYPE_ALIGN (EMRMODIFYWORLDTRANSFORM, 4)
+ TEST_FIELD_SIZE (EMRMODIFYWORLDTRANSFORM, emr, 8)
+ TEST_FIELD_ALIGN (EMRMODIFYWORLDTRANSFORM, emr, 4)
+ TEST_FIELD_OFFSET(EMRMODIFYWORLDTRANSFORM, emr, 0)
+ TEST_FIELD_SIZE (EMRMODIFYWORLDTRANSFORM, xform, 24)
+ TEST_FIELD_ALIGN (EMRMODIFYWORLDTRANSFORM, xform, 4)
+ TEST_FIELD_OFFSET(EMRMODIFYWORLDTRANSFORM, xform, 8)
+ TEST_FIELD_SIZE (EMRMODIFYWORLDTRANSFORM, iMode, 4)
+ TEST_FIELD_ALIGN (EMRMODIFYWORLDTRANSFORM, iMode, 4)
+ TEST_FIELD_OFFSET(EMRMODIFYWORLDTRANSFORM, iMode, 32)
}
static void test_pack_EMRMOVETOEX(void)
{
/* EMRMOVETOEX (pack 4) */
- TEST_TYPE(EMRMOVETOEX, 16, 4);
- TEST_FIELD(EMRMOVETOEX, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRMOVETOEX, POINTL, ptl, 8, 8, 4);
+ TEST_TYPE_SIZE (EMRMOVETOEX, 16)
+ TEST_TYPE_ALIGN (EMRMOVETOEX, 4)
+ TEST_FIELD_SIZE (EMRMOVETOEX, emr, 8)
+ TEST_FIELD_ALIGN (EMRMOVETOEX, emr, 4)
+ TEST_FIELD_OFFSET(EMRMOVETOEX, emr, 0)
+ TEST_FIELD_SIZE (EMRMOVETOEX, ptl, 8)
+ TEST_FIELD_ALIGN (EMRMOVETOEX, ptl, 4)
+ TEST_FIELD_OFFSET(EMRMOVETOEX, ptl, 8)
}
static void test_pack_EMROFFSETCLIPRGN(void)
{
/* EMROFFSETCLIPRGN (pack 4) */
- TEST_TYPE(EMROFFSETCLIPRGN, 16, 4);
- TEST_FIELD(EMROFFSETCLIPRGN, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMROFFSETCLIPRGN, POINTL, ptlOffset, 8, 8, 4);
+ TEST_TYPE_SIZE (EMROFFSETCLIPRGN, 16)
+ TEST_TYPE_ALIGN (EMROFFSETCLIPRGN, 4)
+ TEST_FIELD_SIZE (EMROFFSETCLIPRGN, emr, 8)
+ TEST_FIELD_ALIGN (EMROFFSETCLIPRGN, emr, 4)
+ TEST_FIELD_OFFSET(EMROFFSETCLIPRGN, emr, 0)
+ TEST_FIELD_SIZE (EMROFFSETCLIPRGN, ptlOffset, 8)
+ TEST_FIELD_ALIGN (EMROFFSETCLIPRGN, ptlOffset, 4)
+ TEST_FIELD_OFFSET(EMROFFSETCLIPRGN, ptlOffset, 8)
}
static void test_pack_EMRPAINTRGN(void)
{
/* EMRPAINTRGN (pack 4) */
- TEST_TYPE(EMRPAINTRGN, 32, 4);
- TEST_FIELD(EMRPAINTRGN, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPAINTRGN, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPAINTRGN, DWORD, cbRgnData, 24, 4, 4);
- TEST_FIELD(EMRPAINTRGN, BYTE[1], RgnData, 28, 1, 1);
+ TEST_TYPE_SIZE (EMRPAINTRGN, 32)
+ TEST_TYPE_ALIGN (EMRPAINTRGN, 4)
+ TEST_FIELD_SIZE (EMRPAINTRGN, emr, 8)
+ TEST_FIELD_ALIGN (EMRPAINTRGN, emr, 4)
+ TEST_FIELD_OFFSET(EMRPAINTRGN, emr, 0)
+ TEST_FIELD_SIZE (EMRPAINTRGN, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPAINTRGN, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPAINTRGN, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPAINTRGN, cbRgnData, 4)
+ TEST_FIELD_ALIGN (EMRPAINTRGN, cbRgnData, 4)
+ TEST_FIELD_OFFSET(EMRPAINTRGN, cbRgnData, 24)
+ TEST_FIELD_SIZE (EMRPAINTRGN, RgnData, 1)
+ TEST_FIELD_ALIGN (EMRPAINTRGN, RgnData, 1)
+ TEST_FIELD_OFFSET(EMRPAINTRGN, RgnData, 28)
}
static void test_pack_EMRPIE(void)
{
/* EMRPIE (pack 4) */
- TEST_TYPE(EMRPIE, 40, 4);
- TEST_FIELD(EMRPIE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPIE, RECTL, rclBox, 8, 16, 4);
- TEST_FIELD(EMRPIE, POINTL, ptlStart, 24, 8, 4);
- TEST_FIELD(EMRPIE, POINTL, ptlEnd, 32, 8, 4);
+ TEST_TYPE_SIZE (EMRPIE, 40)
+ TEST_TYPE_ALIGN (EMRPIE, 4)
+ TEST_FIELD_SIZE (EMRPIE, emr, 8)
+ TEST_FIELD_ALIGN (EMRPIE, emr, 4)
+ TEST_FIELD_OFFSET(EMRPIE, emr, 0)
+ TEST_FIELD_SIZE (EMRPIE, rclBox, 16)
+ TEST_FIELD_ALIGN (EMRPIE, rclBox, 4)
+ TEST_FIELD_OFFSET(EMRPIE, rclBox, 8)
+ TEST_FIELD_SIZE (EMRPIE, ptlStart, 8)
+ TEST_FIELD_ALIGN (EMRPIE, ptlStart, 4)
+ TEST_FIELD_OFFSET(EMRPIE, ptlStart, 24)
+ TEST_FIELD_SIZE (EMRPIE, ptlEnd, 8)
+ TEST_FIELD_ALIGN (EMRPIE, ptlEnd, 4)
+ TEST_FIELD_OFFSET(EMRPIE, ptlEnd, 32)
}
static void test_pack_EMRPIXELFORMAT(void)
{
/* EMRPIXELFORMAT (pack 4) */
- TEST_TYPE(EMRPIXELFORMAT, 48, 4);
- TEST_FIELD(EMRPIXELFORMAT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPIXELFORMAT, PIXELFORMATDESCRIPTOR, pfd, 8, 40, 4);
+ TEST_TYPE_SIZE (EMRPIXELFORMAT, 48)
+ TEST_TYPE_ALIGN (EMRPIXELFORMAT, 4)
+ TEST_FIELD_SIZE (EMRPIXELFORMAT, emr, 8)
+ TEST_FIELD_ALIGN (EMRPIXELFORMAT, emr, 4)
+ TEST_FIELD_OFFSET(EMRPIXELFORMAT, emr, 0)
+ TEST_FIELD_SIZE (EMRPIXELFORMAT, pfd, 40)
+ TEST_FIELD_ALIGN (EMRPIXELFORMAT, pfd, 4)
+ TEST_FIELD_OFFSET(EMRPIXELFORMAT, pfd, 8)
}
static void test_pack_EMRPLGBLT(void)
{
/* EMRPLGBLT (pack 4) */
- TEST_TYPE(EMRPLGBLT, 140, 4);
- TEST_FIELD(EMRPLGBLT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPLGBLT, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPLGBLT, POINTL[3], aptlDest, 24, 24, 4);
- TEST_FIELD(EMRPLGBLT, LONG, xSrc, 48, 4, 4);
- TEST_FIELD(EMRPLGBLT, LONG, ySrc, 52, 4, 4);
- TEST_FIELD(EMRPLGBLT, LONG, cxSrc, 56, 4, 4);
- TEST_FIELD(EMRPLGBLT, LONG, cySrc, 60, 4, 4);
- TEST_FIELD(EMRPLGBLT, XFORM, xformSrc, 64, 24, 4);
- TEST_FIELD(EMRPLGBLT, COLORREF, crBkColorSrc, 88, 4, 4);
- TEST_FIELD(EMRPLGBLT, DWORD, iUsageSrc, 92, 4, 4);
- TEST_FIELD(EMRPLGBLT, DWORD, offBmiSrc, 96, 4, 4);
- TEST_FIELD(EMRPLGBLT, DWORD, cbBmiSrc, 100, 4, 4);
- TEST_FIELD(EMRPLGBLT, DWORD, offBitsSrc, 104, 4, 4);
- TEST_FIELD(EMRPLGBLT, DWORD, cbBitsSrc, 108, 4, 4);
- TEST_FIELD(EMRPLGBLT, LONG, xMask, 112, 4, 4);
- TEST_FIELD(EMRPLGBLT, LONG, yMask, 116, 4, 4);
- TEST_FIELD(EMRPLGBLT, DWORD, iUsageMask, 120, 4, 4);
- TEST_FIELD(EMRPLGBLT, DWORD, offBmiMask, 124, 4, 4);
- TEST_FIELD(EMRPLGBLT, DWORD, cbBmiMask, 128, 4, 4);
- TEST_FIELD(EMRPLGBLT, DWORD, offBitsMask, 132, 4, 4);
- TEST_FIELD(EMRPLGBLT, DWORD, cbBitsMask, 136, 4, 4);
+ TEST_TYPE_SIZE (EMRPLGBLT, 140)
+ TEST_TYPE_ALIGN (EMRPLGBLT, 4)
+ TEST_FIELD_SIZE (EMRPLGBLT, emr, 8)
+ TEST_FIELD_ALIGN (EMRPLGBLT, emr, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, emr, 0)
+ TEST_FIELD_SIZE (EMRPLGBLT, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPLGBLT, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPLGBLT, aptlDest, 24)
+ TEST_FIELD_ALIGN (EMRPLGBLT, aptlDest, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, aptlDest, 24)
+ TEST_FIELD_SIZE (EMRPLGBLT, xSrc, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, xSrc, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, xSrc, 48)
+ TEST_FIELD_SIZE (EMRPLGBLT, ySrc, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, ySrc, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, ySrc, 52)
+ TEST_FIELD_SIZE (EMRPLGBLT, cxSrc, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, cxSrc, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, cxSrc, 56)
+ TEST_FIELD_SIZE (EMRPLGBLT, cySrc, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, cySrc, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, cySrc, 60)
+ TEST_FIELD_SIZE (EMRPLGBLT, xformSrc, 24)
+ TEST_FIELD_ALIGN (EMRPLGBLT, xformSrc, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, xformSrc, 64)
+ TEST_FIELD_SIZE (EMRPLGBLT, crBkColorSrc, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, crBkColorSrc, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, crBkColorSrc, 88)
+ TEST_FIELD_SIZE (EMRPLGBLT, iUsageSrc, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, iUsageSrc, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, iUsageSrc, 92)
+ TEST_FIELD_SIZE (EMRPLGBLT, offBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, offBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, offBmiSrc, 96)
+ TEST_FIELD_SIZE (EMRPLGBLT, cbBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, cbBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, cbBmiSrc, 100)
+ TEST_FIELD_SIZE (EMRPLGBLT, offBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, offBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, offBitsSrc, 104)
+ TEST_FIELD_SIZE (EMRPLGBLT, cbBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, cbBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, cbBitsSrc, 108)
+ TEST_FIELD_SIZE (EMRPLGBLT, xMask, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, xMask, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, xMask, 112)
+ TEST_FIELD_SIZE (EMRPLGBLT, yMask, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, yMask, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, yMask, 116)
+ TEST_FIELD_SIZE (EMRPLGBLT, iUsageMask, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, iUsageMask, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, iUsageMask, 120)
+ TEST_FIELD_SIZE (EMRPLGBLT, offBmiMask, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, offBmiMask, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, offBmiMask, 124)
+ TEST_FIELD_SIZE (EMRPLGBLT, cbBmiMask, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, cbBmiMask, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, cbBmiMask, 128)
+ TEST_FIELD_SIZE (EMRPLGBLT, offBitsMask, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, offBitsMask, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, offBitsMask, 132)
+ TEST_FIELD_SIZE (EMRPLGBLT, cbBitsMask, 4)
+ TEST_FIELD_ALIGN (EMRPLGBLT, cbBitsMask, 4)
+ TEST_FIELD_OFFSET(EMRPLGBLT, cbBitsMask, 136)
}
static void test_pack_EMRPOLYBEZIER(void)
{
/* EMRPOLYBEZIER (pack 4) */
- TEST_TYPE(EMRPOLYBEZIER, 36, 4);
- TEST_FIELD(EMRPOLYBEZIER, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYBEZIER, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYBEZIER, DWORD, cptl, 24, 4, 4);
- TEST_FIELD(EMRPOLYBEZIER, POINTL[1], aptl, 28, 8, 4);
+ TEST_TYPE_SIZE (EMRPOLYBEZIER, 36)
+ TEST_TYPE_ALIGN (EMRPOLYBEZIER, 4)
+ TEST_FIELD_SIZE (EMRPOLYBEZIER, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIER, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIER, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYBEZIER, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIER, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIER, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYBEZIER, cptl, 4)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIER, cptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIER, cptl, 24)
+ TEST_FIELD_SIZE (EMRPOLYBEZIER, aptl, 8)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIER, aptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIER, aptl, 28)
}
static void test_pack_EMRPOLYBEZIER16(void)
{
/* EMRPOLYBEZIER16 (pack 4) */
- TEST_TYPE(EMRPOLYBEZIER16, 32, 4);
- TEST_FIELD(EMRPOLYBEZIER16, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYBEZIER16, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYBEZIER16, DWORD, cpts, 24, 4, 4);
- TEST_FIELD(EMRPOLYBEZIER16, POINTS[1], apts, 28, 4, 2);
+ TEST_TYPE_SIZE (EMRPOLYBEZIER16, 32)
+ TEST_TYPE_ALIGN (EMRPOLYBEZIER16, 4)
+ TEST_FIELD_SIZE (EMRPOLYBEZIER16, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIER16, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIER16, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYBEZIER16, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIER16, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIER16, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYBEZIER16, cpts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIER16, cpts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIER16, cpts, 24)
+ TEST_FIELD_SIZE (EMRPOLYBEZIER16, apts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIER16, apts, 2)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIER16, apts, 28)
}
static void test_pack_EMRPOLYBEZIERTO(void)
{
/* EMRPOLYBEZIERTO (pack 4) */
- TEST_TYPE(EMRPOLYBEZIERTO, 36, 4);
- TEST_FIELD(EMRPOLYBEZIERTO, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYBEZIERTO, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYBEZIERTO, DWORD, cptl, 24, 4, 4);
- TEST_FIELD(EMRPOLYBEZIERTO, POINTL[1], aptl, 28, 8, 4);
+ TEST_TYPE_SIZE (EMRPOLYBEZIERTO, 36)
+ TEST_TYPE_ALIGN (EMRPOLYBEZIERTO, 4)
+ TEST_FIELD_SIZE (EMRPOLYBEZIERTO, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIERTO, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIERTO, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYBEZIERTO, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIERTO, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIERTO, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYBEZIERTO, cptl, 4)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIERTO, cptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIERTO, cptl, 24)
+ TEST_FIELD_SIZE (EMRPOLYBEZIERTO, aptl, 8)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIERTO, aptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIERTO, aptl, 28)
}
static void test_pack_EMRPOLYBEZIERTO16(void)
{
/* EMRPOLYBEZIERTO16 (pack 4) */
- TEST_TYPE(EMRPOLYBEZIERTO16, 32, 4);
- TEST_FIELD(EMRPOLYBEZIERTO16, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYBEZIERTO16, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYBEZIERTO16, DWORD, cpts, 24, 4, 4);
- TEST_FIELD(EMRPOLYBEZIERTO16, POINTS[1], apts, 28, 4, 2);
+ TEST_TYPE_SIZE (EMRPOLYBEZIERTO16, 32)
+ TEST_TYPE_ALIGN (EMRPOLYBEZIERTO16, 4)
+ TEST_FIELD_SIZE (EMRPOLYBEZIERTO16, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIERTO16, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIERTO16, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYBEZIERTO16, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIERTO16, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIERTO16, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYBEZIERTO16, cpts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIERTO16, cpts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIERTO16, cpts, 24)
+ TEST_FIELD_SIZE (EMRPOLYBEZIERTO16, apts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYBEZIERTO16, apts, 2)
+ TEST_FIELD_OFFSET(EMRPOLYBEZIERTO16, apts, 28)
}
static void test_pack_EMRPOLYDRAW(void)
{
/* EMRPOLYDRAW (pack 4) */
- TEST_TYPE(EMRPOLYDRAW, 40, 4);
- TEST_FIELD(EMRPOLYDRAW, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYDRAW, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYDRAW, DWORD, cptl, 24, 4, 4);
- TEST_FIELD(EMRPOLYDRAW, POINTL[1], aptl, 28, 8, 4);
- TEST_FIELD(EMRPOLYDRAW, BYTE[1], abTypes, 36, 1, 1);
+ TEST_TYPE_SIZE (EMRPOLYDRAW, 40)
+ TEST_TYPE_ALIGN (EMRPOLYDRAW, 4)
+ TEST_FIELD_SIZE (EMRPOLYDRAW, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYDRAW, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYDRAW, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYDRAW, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYDRAW, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYDRAW, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYDRAW, cptl, 4)
+ TEST_FIELD_ALIGN (EMRPOLYDRAW, cptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYDRAW, cptl, 24)
+ TEST_FIELD_SIZE (EMRPOLYDRAW, aptl, 8)
+ TEST_FIELD_ALIGN (EMRPOLYDRAW, aptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYDRAW, aptl, 28)
+ TEST_FIELD_SIZE (EMRPOLYDRAW, abTypes, 1)
+ TEST_FIELD_ALIGN (EMRPOLYDRAW, abTypes, 1)
+ TEST_FIELD_OFFSET(EMRPOLYDRAW, abTypes, 36)
}
static void test_pack_EMRPOLYDRAW16(void)
{
/* EMRPOLYDRAW16 (pack 4) */
- TEST_TYPE(EMRPOLYDRAW16, 36, 4);
- TEST_FIELD(EMRPOLYDRAW16, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYDRAW16, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYDRAW16, DWORD, cpts, 24, 4, 4);
- TEST_FIELD(EMRPOLYDRAW16, POINTS[1], apts, 28, 4, 2);
- TEST_FIELD(EMRPOLYDRAW16, BYTE[1], abTypes, 32, 1, 1);
+ TEST_TYPE_SIZE (EMRPOLYDRAW16, 36)
+ TEST_TYPE_ALIGN (EMRPOLYDRAW16, 4)
+ TEST_FIELD_SIZE (EMRPOLYDRAW16, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYDRAW16, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYDRAW16, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYDRAW16, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYDRAW16, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYDRAW16, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYDRAW16, cpts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYDRAW16, cpts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYDRAW16, cpts, 24)
+ TEST_FIELD_SIZE (EMRPOLYDRAW16, apts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYDRAW16, apts, 2)
+ TEST_FIELD_OFFSET(EMRPOLYDRAW16, apts, 28)
+ TEST_FIELD_SIZE (EMRPOLYDRAW16, abTypes, 1)
+ TEST_FIELD_ALIGN (EMRPOLYDRAW16, abTypes, 1)
+ TEST_FIELD_OFFSET(EMRPOLYDRAW16, abTypes, 32)
}
static void test_pack_EMRPOLYGON(void)
{
/* EMRPOLYGON (pack 4) */
- TEST_TYPE(EMRPOLYGON, 36, 4);
- TEST_FIELD(EMRPOLYGON, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYGON, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYGON, DWORD, cptl, 24, 4, 4);
- TEST_FIELD(EMRPOLYGON, POINTL[1], aptl, 28, 8, 4);
+ TEST_TYPE_SIZE (EMRPOLYGON, 36)
+ TEST_TYPE_ALIGN (EMRPOLYGON, 4)
+ TEST_FIELD_SIZE (EMRPOLYGON, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYGON, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYGON, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYGON, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYGON, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYGON, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYGON, cptl, 4)
+ TEST_FIELD_ALIGN (EMRPOLYGON, cptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYGON, cptl, 24)
+ TEST_FIELD_SIZE (EMRPOLYGON, aptl, 8)
+ TEST_FIELD_ALIGN (EMRPOLYGON, aptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYGON, aptl, 28)
}
static void test_pack_EMRPOLYGON16(void)
{
/* EMRPOLYGON16 (pack 4) */
- TEST_TYPE(EMRPOLYGON16, 32, 4);
- TEST_FIELD(EMRPOLYGON16, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYGON16, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYGON16, DWORD, cpts, 24, 4, 4);
- TEST_FIELD(EMRPOLYGON16, POINTS[1], apts, 28, 4, 2);
+ TEST_TYPE_SIZE (EMRPOLYGON16, 32)
+ TEST_TYPE_ALIGN (EMRPOLYGON16, 4)
+ TEST_FIELD_SIZE (EMRPOLYGON16, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYGON16, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYGON16, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYGON16, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYGON16, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYGON16, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYGON16, cpts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYGON16, cpts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYGON16, cpts, 24)
+ TEST_FIELD_SIZE (EMRPOLYGON16, apts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYGON16, apts, 2)
+ TEST_FIELD_OFFSET(EMRPOLYGON16, apts, 28)
}
static void test_pack_EMRPOLYLINE(void)
{
/* EMRPOLYLINE (pack 4) */
- TEST_TYPE(EMRPOLYLINE, 36, 4);
- TEST_FIELD(EMRPOLYLINE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYLINE, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYLINE, DWORD, cptl, 24, 4, 4);
- TEST_FIELD(EMRPOLYLINE, POINTL[1], aptl, 28, 8, 4);
+ TEST_TYPE_SIZE (EMRPOLYLINE, 36)
+ TEST_TYPE_ALIGN (EMRPOLYLINE, 4)
+ TEST_FIELD_SIZE (EMRPOLYLINE, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYLINE, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINE, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYLINE, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYLINE, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINE, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYLINE, cptl, 4)
+ TEST_FIELD_ALIGN (EMRPOLYLINE, cptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINE, cptl, 24)
+ TEST_FIELD_SIZE (EMRPOLYLINE, aptl, 8)
+ TEST_FIELD_ALIGN (EMRPOLYLINE, aptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINE, aptl, 28)
}
static void test_pack_EMRPOLYLINE16(void)
{
/* EMRPOLYLINE16 (pack 4) */
- TEST_TYPE(EMRPOLYLINE16, 32, 4);
- TEST_FIELD(EMRPOLYLINE16, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYLINE16, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYLINE16, DWORD, cpts, 24, 4, 4);
- TEST_FIELD(EMRPOLYLINE16, POINTS[1], apts, 28, 4, 2);
+ TEST_TYPE_SIZE (EMRPOLYLINE16, 32)
+ TEST_TYPE_ALIGN (EMRPOLYLINE16, 4)
+ TEST_FIELD_SIZE (EMRPOLYLINE16, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYLINE16, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINE16, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYLINE16, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYLINE16, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINE16, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYLINE16, cpts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYLINE16, cpts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINE16, cpts, 24)
+ TEST_FIELD_SIZE (EMRPOLYLINE16, apts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYLINE16, apts, 2)
+ TEST_FIELD_OFFSET(EMRPOLYLINE16, apts, 28)
}
static void test_pack_EMRPOLYLINETO(void)
{
/* EMRPOLYLINETO (pack 4) */
- TEST_TYPE(EMRPOLYLINETO, 36, 4);
- TEST_FIELD(EMRPOLYLINETO, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYLINETO, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYLINETO, DWORD, cptl, 24, 4, 4);
- TEST_FIELD(EMRPOLYLINETO, POINTL[1], aptl, 28, 8, 4);
+ TEST_TYPE_SIZE (EMRPOLYLINETO, 36)
+ TEST_TYPE_ALIGN (EMRPOLYLINETO, 4)
+ TEST_FIELD_SIZE (EMRPOLYLINETO, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYLINETO, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINETO, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYLINETO, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYLINETO, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINETO, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYLINETO, cptl, 4)
+ TEST_FIELD_ALIGN (EMRPOLYLINETO, cptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINETO, cptl, 24)
+ TEST_FIELD_SIZE (EMRPOLYLINETO, aptl, 8)
+ TEST_FIELD_ALIGN (EMRPOLYLINETO, aptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINETO, aptl, 28)
}
static void test_pack_EMRPOLYLINETO16(void)
{
/* EMRPOLYLINETO16 (pack 4) */
- TEST_TYPE(EMRPOLYLINETO16, 32, 4);
- TEST_FIELD(EMRPOLYLINETO16, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYLINETO16, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYLINETO16, DWORD, cpts, 24, 4, 4);
- TEST_FIELD(EMRPOLYLINETO16, POINTS[1], apts, 28, 4, 2);
+ TEST_TYPE_SIZE (EMRPOLYLINETO16, 32)
+ TEST_TYPE_ALIGN (EMRPOLYLINETO16, 4)
+ TEST_FIELD_SIZE (EMRPOLYLINETO16, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYLINETO16, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINETO16, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYLINETO16, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYLINETO16, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINETO16, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYLINETO16, cpts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYLINETO16, cpts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYLINETO16, cpts, 24)
+ TEST_FIELD_SIZE (EMRPOLYLINETO16, apts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYLINETO16, apts, 2)
+ TEST_FIELD_OFFSET(EMRPOLYLINETO16, apts, 28)
}
static void test_pack_EMRPOLYPOLYGON(void)
{
/* EMRPOLYPOLYGON (pack 4) */
- TEST_TYPE(EMRPOLYPOLYGON, 44, 4);
- TEST_FIELD(EMRPOLYPOLYGON, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYPOLYGON, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYPOLYGON, DWORD, nPolys, 24, 4, 4);
- TEST_FIELD(EMRPOLYPOLYGON, DWORD, cptl, 28, 4, 4);
- TEST_FIELD(EMRPOLYPOLYGON, DWORD[1], aPolyCounts, 32, 4, 4);
- TEST_FIELD(EMRPOLYPOLYGON, POINTL[1], aptl, 36, 8, 4);
+ TEST_TYPE_SIZE (EMRPOLYPOLYGON, 44)
+ TEST_TYPE_ALIGN (EMRPOLYPOLYGON, 4)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON, nPolys, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON, nPolys, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON, nPolys, 24)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON, cptl, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON, cptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON, cptl, 28)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON, aPolyCounts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON, aPolyCounts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON, aPolyCounts, 32)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON, aptl, 8)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON, aptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON, aptl, 36)
}
static void test_pack_EMRPOLYPOLYGON16(void)
{
/* EMRPOLYPOLYGON16 (pack 4) */
- TEST_TYPE(EMRPOLYPOLYGON16, 40, 4);
- TEST_FIELD(EMRPOLYPOLYGON16, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYPOLYGON16, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYPOLYGON16, DWORD, nPolys, 24, 4, 4);
- TEST_FIELD(EMRPOLYPOLYGON16, DWORD, cpts, 28, 4, 4);
- TEST_FIELD(EMRPOLYPOLYGON16, DWORD[1], aPolyCounts, 32, 4, 4);
- TEST_FIELD(EMRPOLYPOLYGON16, POINTS[1], apts, 36, 4, 2);
+ TEST_TYPE_SIZE (EMRPOLYPOLYGON16, 40)
+ TEST_TYPE_ALIGN (EMRPOLYPOLYGON16, 4)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON16, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON16, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON16, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON16, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON16, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON16, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON16, nPolys, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON16, nPolys, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON16, nPolys, 24)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON16, cpts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON16, cpts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON16, cpts, 28)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON16, aPolyCounts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON16, aPolyCounts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON16, aPolyCounts, 32)
+ TEST_FIELD_SIZE (EMRPOLYPOLYGON16, apts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYGON16, apts, 2)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYGON16, apts, 36)
}
static void test_pack_EMRPOLYPOLYLINE(void)
{
/* EMRPOLYPOLYLINE (pack 4) */
- TEST_TYPE(EMRPOLYPOLYLINE, 44, 4);
- TEST_FIELD(EMRPOLYPOLYLINE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYPOLYLINE, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYPOLYLINE, DWORD, nPolys, 24, 4, 4);
- TEST_FIELD(EMRPOLYPOLYLINE, DWORD, cptl, 28, 4, 4);
- TEST_FIELD(EMRPOLYPOLYLINE, DWORD[1], aPolyCounts, 32, 4, 4);
- TEST_FIELD(EMRPOLYPOLYLINE, POINTL[1], aptl, 36, 8, 4);
+ TEST_TYPE_SIZE (EMRPOLYPOLYLINE, 44)
+ TEST_TYPE_ALIGN (EMRPOLYPOLYLINE, 4)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE, nPolys, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE, nPolys, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE, nPolys, 24)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE, cptl, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE, cptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE, cptl, 28)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE, aPolyCounts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE, aPolyCounts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE, aPolyCounts, 32)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE, aptl, 8)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE, aptl, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE, aptl, 36)
}
static void test_pack_EMRPOLYPOLYLINE16(void)
{
/* EMRPOLYPOLYLINE16 (pack 4) */
- TEST_TYPE(EMRPOLYPOLYLINE16, 40, 4);
- TEST_FIELD(EMRPOLYPOLYLINE16, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYPOLYLINE16, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYPOLYLINE16, DWORD, nPolys, 24, 4, 4);
- TEST_FIELD(EMRPOLYPOLYLINE16, DWORD, cpts, 28, 4, 4);
- TEST_FIELD(EMRPOLYPOLYLINE16, DWORD[1], aPolyCounts, 32, 4, 4);
- TEST_FIELD(EMRPOLYPOLYLINE16, POINTS[1], apts, 36, 4, 2);
+ TEST_TYPE_SIZE (EMRPOLYPOLYLINE16, 40)
+ TEST_TYPE_ALIGN (EMRPOLYPOLYLINE16, 4)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE16, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE16, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE16, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE16, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE16, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE16, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE16, nPolys, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE16, nPolys, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE16, nPolys, 24)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE16, cpts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE16, cpts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE16, cpts, 28)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE16, aPolyCounts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE16, aPolyCounts, 4)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE16, aPolyCounts, 32)
+ TEST_FIELD_SIZE (EMRPOLYPOLYLINE16, apts, 4)
+ TEST_FIELD_ALIGN (EMRPOLYPOLYLINE16, apts, 2)
+ TEST_FIELD_OFFSET(EMRPOLYPOLYLINE16, apts, 36)
}
static void test_pack_EMRPOLYTEXTOUTA(void)
{
/* EMRPOLYTEXTOUTA (pack 4) */
- TEST_TYPE(EMRPOLYTEXTOUTA, 80, 4);
- TEST_FIELD(EMRPOLYTEXTOUTA, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYTEXTOUTA, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYTEXTOUTA, DWORD, iGraphicsMode, 24, 4, 4);
- TEST_FIELD(EMRPOLYTEXTOUTA, FLOAT, exScale, 28, 4, 4);
- TEST_FIELD(EMRPOLYTEXTOUTA, FLOAT, eyScale, 32, 4, 4);
- TEST_FIELD(EMRPOLYTEXTOUTA, LONG, cStrings, 36, 4, 4);
- TEST_FIELD(EMRPOLYTEXTOUTA, EMRTEXT[1], aemrtext, 40, 40, 4);
+ TEST_TYPE_SIZE (EMRPOLYTEXTOUTA, 80)
+ TEST_TYPE_ALIGN (EMRPOLYTEXTOUTA, 4)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTA, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTA, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTA, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTA, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTA, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTA, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTA, iGraphicsMode, 4)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTA, iGraphicsMode, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTA, iGraphicsMode, 24)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTA, exScale, 4)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTA, exScale, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTA, exScale, 28)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTA, eyScale, 4)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTA, eyScale, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTA, eyScale, 32)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTA, cStrings, 4)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTA, cStrings, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTA, cStrings, 36)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTA, aemrtext, 40)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTA, aemrtext, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTA, aemrtext, 40)
}
static void test_pack_EMRPOLYTEXTOUTW(void)
{
/* EMRPOLYTEXTOUTW (pack 4) */
- TEST_TYPE(EMRPOLYTEXTOUTW, 80, 4);
- TEST_FIELD(EMRPOLYTEXTOUTW, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRPOLYTEXTOUTW, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRPOLYTEXTOUTW, DWORD, iGraphicsMode, 24, 4, 4);
- TEST_FIELD(EMRPOLYTEXTOUTW, FLOAT, exScale, 28, 4, 4);
- TEST_FIELD(EMRPOLYTEXTOUTW, FLOAT, eyScale, 32, 4, 4);
- TEST_FIELD(EMRPOLYTEXTOUTW, LONG, cStrings, 36, 4, 4);
- TEST_FIELD(EMRPOLYTEXTOUTW, EMRTEXT[1], aemrtext, 40, 40, 4);
+ TEST_TYPE_SIZE (EMRPOLYTEXTOUTW, 80)
+ TEST_TYPE_ALIGN (EMRPOLYTEXTOUTW, 4)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTW, emr, 8)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTW, emr, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTW, emr, 0)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTW, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTW, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTW, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTW, iGraphicsMode, 4)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTW, iGraphicsMode, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTW, iGraphicsMode, 24)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTW, exScale, 4)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTW, exScale, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTW, exScale, 28)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTW, eyScale, 4)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTW, eyScale, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTW, eyScale, 32)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTW, cStrings, 4)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTW, cStrings, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTW, cStrings, 36)
+ TEST_FIELD_SIZE (EMRPOLYTEXTOUTW, aemrtext, 40)
+ TEST_FIELD_ALIGN (EMRPOLYTEXTOUTW, aemrtext, 4)
+ TEST_FIELD_OFFSET(EMRPOLYTEXTOUTW, aemrtext, 40)
}
static void test_pack_EMRREALIZEPALETTE(void)
{
/* EMRREALIZEPALETTE (pack 4) */
- TEST_TYPE(EMRREALIZEPALETTE, 8, 4);
- TEST_FIELD(EMRREALIZEPALETTE, EMR, emr, 0, 8, 4);
+ TEST_TYPE_SIZE (EMRREALIZEPALETTE, 8)
+ TEST_TYPE_ALIGN (EMRREALIZEPALETTE, 4)
+ TEST_FIELD_SIZE (EMRREALIZEPALETTE, emr, 8)
+ TEST_FIELD_ALIGN (EMRREALIZEPALETTE, emr, 4)
+ TEST_FIELD_OFFSET(EMRREALIZEPALETTE, emr, 0)
}
static void test_pack_EMRRECTANGLE(void)
{
/* EMRRECTANGLE (pack 4) */
- TEST_TYPE(EMRRECTANGLE, 24, 4);
- TEST_FIELD(EMRRECTANGLE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRRECTANGLE, RECTL, rclBox, 8, 16, 4);
+ TEST_TYPE_SIZE (EMRRECTANGLE, 24)
+ TEST_TYPE_ALIGN (EMRRECTANGLE, 4)
+ TEST_FIELD_SIZE (EMRRECTANGLE, emr, 8)
+ TEST_FIELD_ALIGN (EMRRECTANGLE, emr, 4)
+ TEST_FIELD_OFFSET(EMRRECTANGLE, emr, 0)
+ TEST_FIELD_SIZE (EMRRECTANGLE, rclBox, 16)
+ TEST_FIELD_ALIGN (EMRRECTANGLE, rclBox, 4)
+ TEST_FIELD_OFFSET(EMRRECTANGLE, rclBox, 8)
}
static void test_pack_EMRRESIZEPALETTE(void)
{
/* EMRRESIZEPALETTE (pack 4) */
- TEST_TYPE(EMRRESIZEPALETTE, 16, 4);
- TEST_FIELD(EMRRESIZEPALETTE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRRESIZEPALETTE, DWORD, ihPal, 8, 4, 4);
- TEST_FIELD(EMRRESIZEPALETTE, DWORD, cEntries, 12, 4, 4);
+ TEST_TYPE_SIZE (EMRRESIZEPALETTE, 16)
+ TEST_TYPE_ALIGN (EMRRESIZEPALETTE, 4)
+ TEST_FIELD_SIZE (EMRRESIZEPALETTE, emr, 8)
+ TEST_FIELD_ALIGN (EMRRESIZEPALETTE, emr, 4)
+ TEST_FIELD_OFFSET(EMRRESIZEPALETTE, emr, 0)
+ TEST_FIELD_SIZE (EMRRESIZEPALETTE, ihPal, 4)
+ TEST_FIELD_ALIGN (EMRRESIZEPALETTE, ihPal, 4)
+ TEST_FIELD_OFFSET(EMRRESIZEPALETTE, ihPal, 8)
+ TEST_FIELD_SIZE (EMRRESIZEPALETTE, cEntries, 4)
+ TEST_FIELD_ALIGN (EMRRESIZEPALETTE, cEntries, 4)
+ TEST_FIELD_OFFSET(EMRRESIZEPALETTE, cEntries, 12)
}
static void test_pack_EMRRESTOREDC(void)
{
/* EMRRESTOREDC (pack 4) */
- TEST_TYPE(EMRRESTOREDC, 12, 4);
- TEST_FIELD(EMRRESTOREDC, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRRESTOREDC, LONG, iRelative, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRRESTOREDC, 12)
+ TEST_TYPE_ALIGN (EMRRESTOREDC, 4)
+ TEST_FIELD_SIZE (EMRRESTOREDC, emr, 8)
+ TEST_FIELD_ALIGN (EMRRESTOREDC, emr, 4)
+ TEST_FIELD_OFFSET(EMRRESTOREDC, emr, 0)
+ TEST_FIELD_SIZE (EMRRESTOREDC, iRelative, 4)
+ TEST_FIELD_ALIGN (EMRRESTOREDC, iRelative, 4)
+ TEST_FIELD_OFFSET(EMRRESTOREDC, iRelative, 8)
}
static void test_pack_EMRROUNDRECT(void)
{
/* EMRROUNDRECT (pack 4) */
- TEST_TYPE(EMRROUNDRECT, 32, 4);
- TEST_FIELD(EMRROUNDRECT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRROUNDRECT, RECTL, rclBox, 8, 16, 4);
- TEST_FIELD(EMRROUNDRECT, SIZEL, szlCorner, 24, 8, 4);
+ TEST_TYPE_SIZE (EMRROUNDRECT, 32)
+ TEST_TYPE_ALIGN (EMRROUNDRECT, 4)
+ TEST_FIELD_SIZE (EMRROUNDRECT, emr, 8)
+ TEST_FIELD_ALIGN (EMRROUNDRECT, emr, 4)
+ TEST_FIELD_OFFSET(EMRROUNDRECT, emr, 0)
+ TEST_FIELD_SIZE (EMRROUNDRECT, rclBox, 16)
+ TEST_FIELD_ALIGN (EMRROUNDRECT, rclBox, 4)
+ TEST_FIELD_OFFSET(EMRROUNDRECT, rclBox, 8)
+ TEST_FIELD_SIZE (EMRROUNDRECT, szlCorner, 8)
+ TEST_FIELD_ALIGN (EMRROUNDRECT, szlCorner, 4)
+ TEST_FIELD_OFFSET(EMRROUNDRECT, szlCorner, 24)
}
static void test_pack_EMRSAVEDC(void)
{
/* EMRSAVEDC (pack 4) */
- TEST_TYPE(EMRSAVEDC, 8, 4);
- TEST_FIELD(EMRSAVEDC, EMR, emr, 0, 8, 4);
+ TEST_TYPE_SIZE (EMRSAVEDC, 8)
+ TEST_TYPE_ALIGN (EMRSAVEDC, 4)
+ TEST_FIELD_SIZE (EMRSAVEDC, emr, 8)
+ TEST_FIELD_ALIGN (EMRSAVEDC, emr, 4)
+ TEST_FIELD_OFFSET(EMRSAVEDC, emr, 0)
}
static void test_pack_EMRSCALEVIEWPORTEXTEX(void)
{
/* EMRSCALEVIEWPORTEXTEX (pack 4) */
- TEST_TYPE(EMRSCALEVIEWPORTEXTEX, 24, 4);
- TEST_FIELD(EMRSCALEVIEWPORTEXTEX, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSCALEVIEWPORTEXTEX, LONG, xNum, 8, 4, 4);
- TEST_FIELD(EMRSCALEVIEWPORTEXTEX, LONG, xDenom, 12, 4, 4);
- TEST_FIELD(EMRSCALEVIEWPORTEXTEX, LONG, yNum, 16, 4, 4);
- TEST_FIELD(EMRSCALEVIEWPORTEXTEX, LONG, yDenom, 20, 4, 4);
+ TEST_TYPE_SIZE (EMRSCALEVIEWPORTEXTEX, 24)
+ TEST_TYPE_ALIGN (EMRSCALEVIEWPORTEXTEX, 4)
+ TEST_FIELD_SIZE (EMRSCALEVIEWPORTEXTEX, emr, 8)
+ TEST_FIELD_ALIGN (EMRSCALEVIEWPORTEXTEX, emr, 4)
+ TEST_FIELD_OFFSET(EMRSCALEVIEWPORTEXTEX, emr, 0)
+ TEST_FIELD_SIZE (EMRSCALEVIEWPORTEXTEX, xNum, 4)
+ TEST_FIELD_ALIGN (EMRSCALEVIEWPORTEXTEX, xNum, 4)
+ TEST_FIELD_OFFSET(EMRSCALEVIEWPORTEXTEX, xNum, 8)
+ TEST_FIELD_SIZE (EMRSCALEVIEWPORTEXTEX, xDenom, 4)
+ TEST_FIELD_ALIGN (EMRSCALEVIEWPORTEXTEX, xDenom, 4)
+ TEST_FIELD_OFFSET(EMRSCALEVIEWPORTEXTEX, xDenom, 12)
+ TEST_FIELD_SIZE (EMRSCALEVIEWPORTEXTEX, yNum, 4)
+ TEST_FIELD_ALIGN (EMRSCALEVIEWPORTEXTEX, yNum, 4)
+ TEST_FIELD_OFFSET(EMRSCALEVIEWPORTEXTEX, yNum, 16)
+ TEST_FIELD_SIZE (EMRSCALEVIEWPORTEXTEX, yDenom, 4)
+ TEST_FIELD_ALIGN (EMRSCALEVIEWPORTEXTEX, yDenom, 4)
+ TEST_FIELD_OFFSET(EMRSCALEVIEWPORTEXTEX, yDenom, 20)
}
static void test_pack_EMRSCALEWINDOWEXTEX(void)
{
/* EMRSCALEWINDOWEXTEX (pack 4) */
- TEST_TYPE(EMRSCALEWINDOWEXTEX, 24, 4);
- TEST_FIELD(EMRSCALEWINDOWEXTEX, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSCALEWINDOWEXTEX, LONG, xNum, 8, 4, 4);
- TEST_FIELD(EMRSCALEWINDOWEXTEX, LONG, xDenom, 12, 4, 4);
- TEST_FIELD(EMRSCALEWINDOWEXTEX, LONG, yNum, 16, 4, 4);
- TEST_FIELD(EMRSCALEWINDOWEXTEX, LONG, yDenom, 20, 4, 4);
+ TEST_TYPE_SIZE (EMRSCALEWINDOWEXTEX, 24)
+ TEST_TYPE_ALIGN (EMRSCALEWINDOWEXTEX, 4)
+ TEST_FIELD_SIZE (EMRSCALEWINDOWEXTEX, emr, 8)
+ TEST_FIELD_ALIGN (EMRSCALEWINDOWEXTEX, emr, 4)
+ TEST_FIELD_OFFSET(EMRSCALEWINDOWEXTEX, emr, 0)
+ TEST_FIELD_SIZE (EMRSCALEWINDOWEXTEX, xNum, 4)
+ TEST_FIELD_ALIGN (EMRSCALEWINDOWEXTEX, xNum, 4)
+ TEST_FIELD_OFFSET(EMRSCALEWINDOWEXTEX, xNum, 8)
+ TEST_FIELD_SIZE (EMRSCALEWINDOWEXTEX, xDenom, 4)
+ TEST_FIELD_ALIGN (EMRSCALEWINDOWEXTEX, xDenom, 4)
+ TEST_FIELD_OFFSET(EMRSCALEWINDOWEXTEX, xDenom, 12)
+ TEST_FIELD_SIZE (EMRSCALEWINDOWEXTEX, yNum, 4)
+ TEST_FIELD_ALIGN (EMRSCALEWINDOWEXTEX, yNum, 4)
+ TEST_FIELD_OFFSET(EMRSCALEWINDOWEXTEX, yNum, 16)
+ TEST_FIELD_SIZE (EMRSCALEWINDOWEXTEX, yDenom, 4)
+ TEST_FIELD_ALIGN (EMRSCALEWINDOWEXTEX, yDenom, 4)
+ TEST_FIELD_OFFSET(EMRSCALEWINDOWEXTEX, yDenom, 20)
}
static void test_pack_EMRSELECTCLIPPATH(void)
{
/* EMRSELECTCLIPPATH (pack 4) */
- TEST_TYPE(EMRSELECTCLIPPATH, 12, 4);
- TEST_FIELD(EMRSELECTCLIPPATH, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSELECTCLIPPATH, DWORD, iMode, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSELECTCLIPPATH, 12)
+ TEST_TYPE_ALIGN (EMRSELECTCLIPPATH, 4)
+ TEST_FIELD_SIZE (EMRSELECTCLIPPATH, emr, 8)
+ TEST_FIELD_ALIGN (EMRSELECTCLIPPATH, emr, 4)
+ TEST_FIELD_OFFSET(EMRSELECTCLIPPATH, emr, 0)
+ TEST_FIELD_SIZE (EMRSELECTCLIPPATH, iMode, 4)
+ TEST_FIELD_ALIGN (EMRSELECTCLIPPATH, iMode, 4)
+ TEST_FIELD_OFFSET(EMRSELECTCLIPPATH, iMode, 8)
}
static void test_pack_EMRSELECTCOLORSPACE(void)
{
/* EMRSELECTCOLORSPACE (pack 4) */
- TEST_TYPE(EMRSELECTCOLORSPACE, 12, 4);
- TEST_FIELD(EMRSELECTCOLORSPACE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSELECTCOLORSPACE, DWORD, ihCS, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSELECTCOLORSPACE, 12)
+ TEST_TYPE_ALIGN (EMRSELECTCOLORSPACE, 4)
+ TEST_FIELD_SIZE (EMRSELECTCOLORSPACE, emr, 8)
+ TEST_FIELD_ALIGN (EMRSELECTCOLORSPACE, emr, 4)
+ TEST_FIELD_OFFSET(EMRSELECTCOLORSPACE, emr, 0)
+ TEST_FIELD_SIZE (EMRSELECTCOLORSPACE, ihCS, 4)
+ TEST_FIELD_ALIGN (EMRSELECTCOLORSPACE, ihCS, 4)
+ TEST_FIELD_OFFSET(EMRSELECTCOLORSPACE, ihCS, 8)
}
static void test_pack_EMRSELECTOBJECT(void)
{
/* EMRSELECTOBJECT (pack 4) */
- TEST_TYPE(EMRSELECTOBJECT, 12, 4);
- TEST_FIELD(EMRSELECTOBJECT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSELECTOBJECT, DWORD, ihObject, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSELECTOBJECT, 12)
+ TEST_TYPE_ALIGN (EMRSELECTOBJECT, 4)
+ TEST_FIELD_SIZE (EMRSELECTOBJECT, emr, 8)
+ TEST_FIELD_ALIGN (EMRSELECTOBJECT, emr, 4)
+ TEST_FIELD_OFFSET(EMRSELECTOBJECT, emr, 0)
+ TEST_FIELD_SIZE (EMRSELECTOBJECT, ihObject, 4)
+ TEST_FIELD_ALIGN (EMRSELECTOBJECT, ihObject, 4)
+ TEST_FIELD_OFFSET(EMRSELECTOBJECT, ihObject, 8)
}
static void test_pack_EMRSELECTPALETTE(void)
{
/* EMRSELECTPALETTE (pack 4) */
- TEST_TYPE(EMRSELECTPALETTE, 12, 4);
- TEST_FIELD(EMRSELECTPALETTE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSELECTPALETTE, DWORD, ihPal, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSELECTPALETTE, 12)
+ TEST_TYPE_ALIGN (EMRSELECTPALETTE, 4)
+ TEST_FIELD_SIZE (EMRSELECTPALETTE, emr, 8)
+ TEST_FIELD_ALIGN (EMRSELECTPALETTE, emr, 4)
+ TEST_FIELD_OFFSET(EMRSELECTPALETTE, emr, 0)
+ TEST_FIELD_SIZE (EMRSELECTPALETTE, ihPal, 4)
+ TEST_FIELD_ALIGN (EMRSELECTPALETTE, ihPal, 4)
+ TEST_FIELD_OFFSET(EMRSELECTPALETTE, ihPal, 8)
}
static void test_pack_EMRSETARCDIRECTION(void)
{
/* EMRSETARCDIRECTION (pack 4) */
- TEST_TYPE(EMRSETARCDIRECTION, 12, 4);
- TEST_FIELD(EMRSETARCDIRECTION, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETARCDIRECTION, DWORD, iArcDirection, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETARCDIRECTION, 12)
+ TEST_TYPE_ALIGN (EMRSETARCDIRECTION, 4)
+ TEST_FIELD_SIZE (EMRSETARCDIRECTION, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETARCDIRECTION, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETARCDIRECTION, emr, 0)
+ TEST_FIELD_SIZE (EMRSETARCDIRECTION, iArcDirection, 4)
+ TEST_FIELD_ALIGN (EMRSETARCDIRECTION, iArcDirection, 4)
+ TEST_FIELD_OFFSET(EMRSETARCDIRECTION, iArcDirection, 8)
}
static void test_pack_EMRSETBKCOLOR(void)
{
/* EMRSETBKCOLOR (pack 4) */
- TEST_TYPE(EMRSETBKCOLOR, 12, 4);
- TEST_FIELD(EMRSETBKCOLOR, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETBKCOLOR, COLORREF, crColor, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETBKCOLOR, 12)
+ TEST_TYPE_ALIGN (EMRSETBKCOLOR, 4)
+ TEST_FIELD_SIZE (EMRSETBKCOLOR, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETBKCOLOR, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETBKCOLOR, emr, 0)
+ TEST_FIELD_SIZE (EMRSETBKCOLOR, crColor, 4)
+ TEST_FIELD_ALIGN (EMRSETBKCOLOR, crColor, 4)
+ TEST_FIELD_OFFSET(EMRSETBKCOLOR, crColor, 8)
}
static void test_pack_EMRSETBKMODE(void)
{
/* EMRSETBKMODE (pack 4) */
- TEST_TYPE(EMRSETBKMODE, 12, 4);
- TEST_FIELD(EMRSETBKMODE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETBKMODE, DWORD, iMode, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETBKMODE, 12)
+ TEST_TYPE_ALIGN (EMRSETBKMODE, 4)
+ TEST_FIELD_SIZE (EMRSETBKMODE, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETBKMODE, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETBKMODE, emr, 0)
+ TEST_FIELD_SIZE (EMRSETBKMODE, iMode, 4)
+ TEST_FIELD_ALIGN (EMRSETBKMODE, iMode, 4)
+ TEST_FIELD_OFFSET(EMRSETBKMODE, iMode, 8)
}
static void test_pack_EMRSETBRUSHORGEX(void)
{
/* EMRSETBRUSHORGEX (pack 4) */
- TEST_TYPE(EMRSETBRUSHORGEX, 16, 4);
- TEST_FIELD(EMRSETBRUSHORGEX, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETBRUSHORGEX, POINTL, ptlOrigin, 8, 8, 4);
+ TEST_TYPE_SIZE (EMRSETBRUSHORGEX, 16)
+ TEST_TYPE_ALIGN (EMRSETBRUSHORGEX, 4)
+ TEST_FIELD_SIZE (EMRSETBRUSHORGEX, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETBRUSHORGEX, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETBRUSHORGEX, emr, 0)
+ TEST_FIELD_SIZE (EMRSETBRUSHORGEX, ptlOrigin, 8)
+ TEST_FIELD_ALIGN (EMRSETBRUSHORGEX, ptlOrigin, 4)
+ TEST_FIELD_OFFSET(EMRSETBRUSHORGEX, ptlOrigin, 8)
}
static void test_pack_EMRSETCOLORADJUSTMENT(void)
{
/* EMRSETCOLORADJUSTMENT (pack 4) */
- TEST_TYPE(EMRSETCOLORADJUSTMENT, 32, 4);
- TEST_FIELD(EMRSETCOLORADJUSTMENT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETCOLORADJUSTMENT, COLORADJUSTMENT, ColorAdjustment, 8, 24, 2);
+ TEST_TYPE_SIZE (EMRSETCOLORADJUSTMENT, 32)
+ TEST_TYPE_ALIGN (EMRSETCOLORADJUSTMENT, 4)
+ TEST_FIELD_SIZE (EMRSETCOLORADJUSTMENT, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETCOLORADJUSTMENT, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETCOLORADJUSTMENT, emr, 0)
+ TEST_FIELD_SIZE (EMRSETCOLORADJUSTMENT, ColorAdjustment, 24)
+ TEST_FIELD_ALIGN (EMRSETCOLORADJUSTMENT, ColorAdjustment, 2)
+ TEST_FIELD_OFFSET(EMRSETCOLORADJUSTMENT, ColorAdjustment, 8)
}
static void test_pack_EMRSETCOLORSPACE(void)
{
/* EMRSETCOLORSPACE (pack 4) */
- TEST_TYPE(EMRSETCOLORSPACE, 12, 4);
- TEST_FIELD(EMRSETCOLORSPACE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETCOLORSPACE, DWORD, ihCS, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETCOLORSPACE, 12)
+ TEST_TYPE_ALIGN (EMRSETCOLORSPACE, 4)
+ TEST_FIELD_SIZE (EMRSETCOLORSPACE, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETCOLORSPACE, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETCOLORSPACE, emr, 0)
+ TEST_FIELD_SIZE (EMRSETCOLORSPACE, ihCS, 4)
+ TEST_FIELD_ALIGN (EMRSETCOLORSPACE, ihCS, 4)
+ TEST_FIELD_OFFSET(EMRSETCOLORSPACE, ihCS, 8)
}
static void test_pack_EMRSETDIBITSTODEVICE(void)
{
/* EMRSETDIBITSTODEVICE (pack 4) */
- TEST_TYPE(EMRSETDIBITSTODEVICE, 76, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, xDest, 24, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, yDest, 28, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, xSrc, 32, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, ySrc, 36, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, cxSrc, 40, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, LONG, cySrc, 44, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, offBmiSrc, 48, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, cbBmiSrc, 52, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, offBitsSrc, 56, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, cbBitsSrc, 60, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, iUsageSrc, 64, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, iStartScan, 68, 4, 4);
- TEST_FIELD(EMRSETDIBITSTODEVICE, DWORD, cScans, 72, 4, 4);
+ TEST_TYPE_SIZE (EMRSETDIBITSTODEVICE, 76)
+ TEST_TYPE_ALIGN (EMRSETDIBITSTODEVICE, 4)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, emr, 0)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, xDest, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, xDest, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, xDest, 24)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, yDest, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, yDest, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, yDest, 28)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, xSrc, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, xSrc, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, xSrc, 32)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, ySrc, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, ySrc, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, ySrc, 36)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, cxSrc, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, cxSrc, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, cxSrc, 40)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, cySrc, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, cySrc, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, cySrc, 44)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, offBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, offBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, offBmiSrc, 48)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, cbBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, cbBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, cbBmiSrc, 52)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, offBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, offBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, offBitsSrc, 56)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, cbBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, cbBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, cbBitsSrc, 60)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, iUsageSrc, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, iUsageSrc, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, iUsageSrc, 64)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, iStartScan, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, iStartScan, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, iStartScan, 68)
+ TEST_FIELD_SIZE (EMRSETDIBITSTODEVICE, cScans, 4)
+ TEST_FIELD_ALIGN (EMRSETDIBITSTODEVICE, cScans, 4)
+ TEST_FIELD_OFFSET(EMRSETDIBITSTODEVICE, cScans, 72)
}
static void test_pack_EMRSETICMMODE(void)
{
/* EMRSETICMMODE (pack 4) */
- TEST_TYPE(EMRSETICMMODE, 12, 4);
- TEST_FIELD(EMRSETICMMODE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETICMMODE, DWORD, iMode, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETICMMODE, 12)
+ TEST_TYPE_ALIGN (EMRSETICMMODE, 4)
+ TEST_FIELD_SIZE (EMRSETICMMODE, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETICMMODE, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETICMMODE, emr, 0)
+ TEST_FIELD_SIZE (EMRSETICMMODE, iMode, 4)
+ TEST_FIELD_ALIGN (EMRSETICMMODE, iMode, 4)
+ TEST_FIELD_OFFSET(EMRSETICMMODE, iMode, 8)
}
static void test_pack_EMRSETLAYOUT(void)
{
/* EMRSETLAYOUT (pack 4) */
- TEST_TYPE(EMRSETLAYOUT, 12, 4);
- TEST_FIELD(EMRSETLAYOUT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETLAYOUT, DWORD, iMode, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETLAYOUT, 12)
+ TEST_TYPE_ALIGN (EMRSETLAYOUT, 4)
+ TEST_FIELD_SIZE (EMRSETLAYOUT, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETLAYOUT, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETLAYOUT, emr, 0)
+ TEST_FIELD_SIZE (EMRSETLAYOUT, iMode, 4)
+ TEST_FIELD_ALIGN (EMRSETLAYOUT, iMode, 4)
+ TEST_FIELD_OFFSET(EMRSETLAYOUT, iMode, 8)
}
static void test_pack_EMRSETMAPMODE(void)
{
/* EMRSETMAPMODE (pack 4) */
- TEST_TYPE(EMRSETMAPMODE, 12, 4);
- TEST_FIELD(EMRSETMAPMODE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETMAPMODE, DWORD, iMode, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETMAPMODE, 12)
+ TEST_TYPE_ALIGN (EMRSETMAPMODE, 4)
+ TEST_FIELD_SIZE (EMRSETMAPMODE, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETMAPMODE, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETMAPMODE, emr, 0)
+ TEST_FIELD_SIZE (EMRSETMAPMODE, iMode, 4)
+ TEST_FIELD_ALIGN (EMRSETMAPMODE, iMode, 4)
+ TEST_FIELD_OFFSET(EMRSETMAPMODE, iMode, 8)
}
static void test_pack_EMRSETMAPPERFLAGS(void)
{
/* EMRSETMAPPERFLAGS (pack 4) */
- TEST_TYPE(EMRSETMAPPERFLAGS, 12, 4);
- TEST_FIELD(EMRSETMAPPERFLAGS, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETMAPPERFLAGS, DWORD, dwFlags, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETMAPPERFLAGS, 12)
+ TEST_TYPE_ALIGN (EMRSETMAPPERFLAGS, 4)
+ TEST_FIELD_SIZE (EMRSETMAPPERFLAGS, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETMAPPERFLAGS, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETMAPPERFLAGS, emr, 0)
+ TEST_FIELD_SIZE (EMRSETMAPPERFLAGS, dwFlags, 4)
+ TEST_FIELD_ALIGN (EMRSETMAPPERFLAGS, dwFlags, 4)
+ TEST_FIELD_OFFSET(EMRSETMAPPERFLAGS, dwFlags, 8)
}
static void test_pack_EMRSETMETARGN(void)
{
/* EMRSETMETARGN (pack 4) */
- TEST_TYPE(EMRSETMETARGN, 8, 4);
- TEST_FIELD(EMRSETMETARGN, EMR, emr, 0, 8, 4);
+ TEST_TYPE_SIZE (EMRSETMETARGN, 8)
+ TEST_TYPE_ALIGN (EMRSETMETARGN, 4)
+ TEST_FIELD_SIZE (EMRSETMETARGN, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETMETARGN, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETMETARGN, emr, 0)
}
static void test_pack_EMRSETMITERLIMIT(void)
{
/* EMRSETMITERLIMIT (pack 4) */
- TEST_TYPE(EMRSETMITERLIMIT, 12, 4);
- TEST_FIELD(EMRSETMITERLIMIT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETMITERLIMIT, FLOAT, eMiterLimit, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETMITERLIMIT, 12)
+ TEST_TYPE_ALIGN (EMRSETMITERLIMIT, 4)
+ TEST_FIELD_SIZE (EMRSETMITERLIMIT, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETMITERLIMIT, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETMITERLIMIT, emr, 0)
+ TEST_FIELD_SIZE (EMRSETMITERLIMIT, eMiterLimit, 4)
+ TEST_FIELD_ALIGN (EMRSETMITERLIMIT, eMiterLimit, 4)
+ TEST_FIELD_OFFSET(EMRSETMITERLIMIT, eMiterLimit, 8)
}
static void test_pack_EMRSETPIXELV(void)
{
/* EMRSETPIXELV (pack 4) */
- TEST_TYPE(EMRSETPIXELV, 20, 4);
- TEST_FIELD(EMRSETPIXELV, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETPIXELV, POINTL, ptlPixel, 8, 8, 4);
- TEST_FIELD(EMRSETPIXELV, COLORREF, crColor, 16, 4, 4);
+ TEST_TYPE_SIZE (EMRSETPIXELV, 20)
+ TEST_TYPE_ALIGN (EMRSETPIXELV, 4)
+ TEST_FIELD_SIZE (EMRSETPIXELV, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETPIXELV, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETPIXELV, emr, 0)
+ TEST_FIELD_SIZE (EMRSETPIXELV, ptlPixel, 8)
+ TEST_FIELD_ALIGN (EMRSETPIXELV, ptlPixel, 4)
+ TEST_FIELD_OFFSET(EMRSETPIXELV, ptlPixel, 8)
+ TEST_FIELD_SIZE (EMRSETPIXELV, crColor, 4)
+ TEST_FIELD_ALIGN (EMRSETPIXELV, crColor, 4)
+ TEST_FIELD_OFFSET(EMRSETPIXELV, crColor, 16)
}
static void test_pack_EMRSETPOLYFILLMODE(void)
{
/* EMRSETPOLYFILLMODE (pack 4) */
- TEST_TYPE(EMRSETPOLYFILLMODE, 12, 4);
- TEST_FIELD(EMRSETPOLYFILLMODE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETPOLYFILLMODE, DWORD, iMode, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETPOLYFILLMODE, 12)
+ TEST_TYPE_ALIGN (EMRSETPOLYFILLMODE, 4)
+ TEST_FIELD_SIZE (EMRSETPOLYFILLMODE, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETPOLYFILLMODE, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETPOLYFILLMODE, emr, 0)
+ TEST_FIELD_SIZE (EMRSETPOLYFILLMODE, iMode, 4)
+ TEST_FIELD_ALIGN (EMRSETPOLYFILLMODE, iMode, 4)
+ TEST_FIELD_OFFSET(EMRSETPOLYFILLMODE, iMode, 8)
}
static void test_pack_EMRSETROP2(void)
{
/* EMRSETROP2 (pack 4) */
- TEST_TYPE(EMRSETROP2, 12, 4);
- TEST_FIELD(EMRSETROP2, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETROP2, DWORD, iMode, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETROP2, 12)
+ TEST_TYPE_ALIGN (EMRSETROP2, 4)
+ TEST_FIELD_SIZE (EMRSETROP2, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETROP2, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETROP2, emr, 0)
+ TEST_FIELD_SIZE (EMRSETROP2, iMode, 4)
+ TEST_FIELD_ALIGN (EMRSETROP2, iMode, 4)
+ TEST_FIELD_OFFSET(EMRSETROP2, iMode, 8)
}
static void test_pack_EMRSETSTRETCHBLTMODE(void)
{
/* EMRSETSTRETCHBLTMODE (pack 4) */
- TEST_TYPE(EMRSETSTRETCHBLTMODE, 12, 4);
- TEST_FIELD(EMRSETSTRETCHBLTMODE, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETSTRETCHBLTMODE, DWORD, iMode, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETSTRETCHBLTMODE, 12)
+ TEST_TYPE_ALIGN (EMRSETSTRETCHBLTMODE, 4)
+ TEST_FIELD_SIZE (EMRSETSTRETCHBLTMODE, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETSTRETCHBLTMODE, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETSTRETCHBLTMODE, emr, 0)
+ TEST_FIELD_SIZE (EMRSETSTRETCHBLTMODE, iMode, 4)
+ TEST_FIELD_ALIGN (EMRSETSTRETCHBLTMODE, iMode, 4)
+ TEST_FIELD_OFFSET(EMRSETSTRETCHBLTMODE, iMode, 8)
}
static void test_pack_EMRSETTEXTALIGN(void)
{
/* EMRSETTEXTALIGN (pack 4) */
- TEST_TYPE(EMRSETTEXTALIGN, 12, 4);
- TEST_FIELD(EMRSETTEXTALIGN, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETTEXTALIGN, DWORD, iMode, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETTEXTALIGN, 12)
+ TEST_TYPE_ALIGN (EMRSETTEXTALIGN, 4)
+ TEST_FIELD_SIZE (EMRSETTEXTALIGN, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETTEXTALIGN, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETTEXTALIGN, emr, 0)
+ TEST_FIELD_SIZE (EMRSETTEXTALIGN, iMode, 4)
+ TEST_FIELD_ALIGN (EMRSETTEXTALIGN, iMode, 4)
+ TEST_FIELD_OFFSET(EMRSETTEXTALIGN, iMode, 8)
}
static void test_pack_EMRSETTEXTCOLOR(void)
{
/* EMRSETTEXTCOLOR (pack 4) */
- TEST_TYPE(EMRSETTEXTCOLOR, 12, 4);
- TEST_FIELD(EMRSETTEXTCOLOR, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETTEXTCOLOR, COLORREF, crColor, 8, 4, 4);
+ TEST_TYPE_SIZE (EMRSETTEXTCOLOR, 12)
+ TEST_TYPE_ALIGN (EMRSETTEXTCOLOR, 4)
+ TEST_FIELD_SIZE (EMRSETTEXTCOLOR, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETTEXTCOLOR, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETTEXTCOLOR, emr, 0)
+ TEST_FIELD_SIZE (EMRSETTEXTCOLOR, crColor, 4)
+ TEST_FIELD_ALIGN (EMRSETTEXTCOLOR, crColor, 4)
+ TEST_FIELD_OFFSET(EMRSETTEXTCOLOR, crColor, 8)
}
static void test_pack_EMRSETVIEWPORTEXTEX(void)
{
/* EMRSETVIEWPORTEXTEX (pack 4) */
- TEST_TYPE(EMRSETVIEWPORTEXTEX, 16, 4);
- TEST_FIELD(EMRSETVIEWPORTEXTEX, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETVIEWPORTEXTEX, SIZEL, szlExtent, 8, 8, 4);
+ TEST_TYPE_SIZE (EMRSETVIEWPORTEXTEX, 16)
+ TEST_TYPE_ALIGN (EMRSETVIEWPORTEXTEX, 4)
+ TEST_FIELD_SIZE (EMRSETVIEWPORTEXTEX, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETVIEWPORTEXTEX, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETVIEWPORTEXTEX, emr, 0)
+ TEST_FIELD_SIZE (EMRSETVIEWPORTEXTEX, szlExtent, 8)
+ TEST_FIELD_ALIGN (EMRSETVIEWPORTEXTEX, szlExtent, 4)
+ TEST_FIELD_OFFSET(EMRSETVIEWPORTEXTEX, szlExtent, 8)
}
static void test_pack_EMRSETVIEWPORTORGEX(void)
{
/* EMRSETVIEWPORTORGEX (pack 4) */
- TEST_TYPE(EMRSETVIEWPORTORGEX, 16, 4);
- TEST_FIELD(EMRSETVIEWPORTORGEX, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETVIEWPORTORGEX, POINTL, ptlOrigin, 8, 8, 4);
+ TEST_TYPE_SIZE (EMRSETVIEWPORTORGEX, 16)
+ TEST_TYPE_ALIGN (EMRSETVIEWPORTORGEX, 4)
+ TEST_FIELD_SIZE (EMRSETVIEWPORTORGEX, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETVIEWPORTORGEX, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETVIEWPORTORGEX, emr, 0)
+ TEST_FIELD_SIZE (EMRSETVIEWPORTORGEX, ptlOrigin, 8)
+ TEST_FIELD_ALIGN (EMRSETVIEWPORTORGEX, ptlOrigin, 4)
+ TEST_FIELD_OFFSET(EMRSETVIEWPORTORGEX, ptlOrigin, 8)
}
static void test_pack_EMRSETWINDOWEXTEX(void)
{
/* EMRSETWINDOWEXTEX (pack 4) */
- TEST_TYPE(EMRSETWINDOWEXTEX, 16, 4);
- TEST_FIELD(EMRSETWINDOWEXTEX, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETWINDOWEXTEX, SIZEL, szlExtent, 8, 8, 4);
+ TEST_TYPE_SIZE (EMRSETWINDOWEXTEX, 16)
+ TEST_TYPE_ALIGN (EMRSETWINDOWEXTEX, 4)
+ TEST_FIELD_SIZE (EMRSETWINDOWEXTEX, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETWINDOWEXTEX, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETWINDOWEXTEX, emr, 0)
+ TEST_FIELD_SIZE (EMRSETWINDOWEXTEX, szlExtent, 8)
+ TEST_FIELD_ALIGN (EMRSETWINDOWEXTEX, szlExtent, 4)
+ TEST_FIELD_OFFSET(EMRSETWINDOWEXTEX, szlExtent, 8)
}
static void test_pack_EMRSETWINDOWORGEX(void)
{
/* EMRSETWINDOWORGEX (pack 4) */
- TEST_TYPE(EMRSETWINDOWORGEX, 16, 4);
- TEST_FIELD(EMRSETWINDOWORGEX, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETWINDOWORGEX, POINTL, ptlOrigin, 8, 8, 4);
+ TEST_TYPE_SIZE (EMRSETWINDOWORGEX, 16)
+ TEST_TYPE_ALIGN (EMRSETWINDOWORGEX, 4)
+ TEST_FIELD_SIZE (EMRSETWINDOWORGEX, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETWINDOWORGEX, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETWINDOWORGEX, emr, 0)
+ TEST_FIELD_SIZE (EMRSETWINDOWORGEX, ptlOrigin, 8)
+ TEST_FIELD_ALIGN (EMRSETWINDOWORGEX, ptlOrigin, 4)
+ TEST_FIELD_OFFSET(EMRSETWINDOWORGEX, ptlOrigin, 8)
}
static void test_pack_EMRSETWORLDTRANSFORM(void)
{
/* EMRSETWORLDTRANSFORM (pack 4) */
- TEST_TYPE(EMRSETWORLDTRANSFORM, 32, 4);
- TEST_FIELD(EMRSETWORLDTRANSFORM, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSETWORLDTRANSFORM, XFORM, xform, 8, 24, 4);
+ TEST_TYPE_SIZE (EMRSETWORLDTRANSFORM, 32)
+ TEST_TYPE_ALIGN (EMRSETWORLDTRANSFORM, 4)
+ TEST_FIELD_SIZE (EMRSETWORLDTRANSFORM, emr, 8)
+ TEST_FIELD_ALIGN (EMRSETWORLDTRANSFORM, emr, 4)
+ TEST_FIELD_OFFSET(EMRSETWORLDTRANSFORM, emr, 0)
+ TEST_FIELD_SIZE (EMRSETWORLDTRANSFORM, xform, 24)
+ TEST_FIELD_ALIGN (EMRSETWORLDTRANSFORM, xform, 4)
+ TEST_FIELD_OFFSET(EMRSETWORLDTRANSFORM, xform, 8)
}
static void test_pack_EMRSTRETCHBLT(void)
{
/* EMRSTRETCHBLT (pack 4) */
- TEST_TYPE(EMRSTRETCHBLT, 108, 4);
- TEST_FIELD(EMRSTRETCHBLT, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSTRETCHBLT, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRSTRETCHBLT, LONG, xDest, 24, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, LONG, yDest, 28, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, LONG, cxDest, 32, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, LONG, cyDest, 36, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, DWORD, dwRop, 40, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, LONG, xSrc, 44, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, LONG, ySrc, 48, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, XFORM, xformSrc, 52, 24, 4);
- TEST_FIELD(EMRSTRETCHBLT, COLORREF, crBkColorSrc, 76, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, DWORD, iUsageSrc, 80, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, DWORD, offBmiSrc, 84, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, DWORD, cbBmiSrc, 88, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, DWORD, offBitsSrc, 92, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, DWORD, cbBitsSrc, 96, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, LONG, cxSrc, 100, 4, 4);
- TEST_FIELD(EMRSTRETCHBLT, LONG, cySrc, 104, 4, 4);
+ TEST_TYPE_SIZE (EMRSTRETCHBLT, 108)
+ TEST_TYPE_ALIGN (EMRSTRETCHBLT, 4)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, emr, 8)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, emr, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, emr, 0)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, xDest, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, xDest, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, xDest, 24)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, yDest, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, yDest, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, yDest, 28)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, cxDest, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, cxDest, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, cxDest, 32)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, cyDest, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, cyDest, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, cyDest, 36)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, dwRop, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, dwRop, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, dwRop, 40)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, xSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, xSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, xSrc, 44)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, ySrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, ySrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, ySrc, 48)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, xformSrc, 24)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, xformSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, xformSrc, 52)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, crBkColorSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, crBkColorSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, crBkColorSrc, 76)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, iUsageSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, iUsageSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, iUsageSrc, 80)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, offBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, offBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, offBmiSrc, 84)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, cbBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, cbBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, cbBmiSrc, 88)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, offBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, offBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, offBitsSrc, 92)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, cbBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, cbBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, cbBitsSrc, 96)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, cxSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, cxSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, cxSrc, 100)
+ TEST_FIELD_SIZE (EMRSTRETCHBLT, cySrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHBLT, cySrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHBLT, cySrc, 104)
}
static void test_pack_EMRSTRETCHDIBITS(void)
{
/* EMRSTRETCHDIBITS (pack 4) */
- TEST_TYPE(EMRSTRETCHDIBITS, 80, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, LONG, xDest, 24, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, LONG, yDest, 28, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, LONG, xSrc, 32, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, LONG, ySrc, 36, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, LONG, cxSrc, 40, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, LONG, cySrc, 44, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, DWORD, offBmiSrc, 48, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, DWORD, cbBmiSrc, 52, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, DWORD, offBitsSrc, 56, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, DWORD, cbBitsSrc, 60, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, DWORD, iUsageSrc, 64, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, DWORD, dwRop, 68, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, LONG, cxDest, 72, 4, 4);
- TEST_FIELD(EMRSTRETCHDIBITS, LONG, cyDest, 76, 4, 4);
+ TEST_TYPE_SIZE (EMRSTRETCHDIBITS, 80)
+ TEST_TYPE_ALIGN (EMRSTRETCHDIBITS, 4)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, emr, 8)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, emr, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, emr, 0)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, rclBounds, 8)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, xDest, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, xDest, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, xDest, 24)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, yDest, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, yDest, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, yDest, 28)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, xSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, xSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, xSrc, 32)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, ySrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, ySrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, ySrc, 36)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, cxSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, cxSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, cxSrc, 40)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, cySrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, cySrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, cySrc, 44)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, offBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, offBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, offBmiSrc, 48)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, cbBmiSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, cbBmiSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, cbBmiSrc, 52)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, offBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, offBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, offBitsSrc, 56)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, cbBitsSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, cbBitsSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, cbBitsSrc, 60)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, iUsageSrc, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, iUsageSrc, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, iUsageSrc, 64)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, dwRop, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, dwRop, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, dwRop, 68)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, cxDest, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, cxDest, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, cxDest, 72)
+ TEST_FIELD_SIZE (EMRSTRETCHDIBITS, cyDest, 4)
+ TEST_FIELD_ALIGN (EMRSTRETCHDIBITS, cyDest, 4)
+ TEST_FIELD_OFFSET(EMRSTRETCHDIBITS, cyDest, 76)
}
static void test_pack_EMRSTROKEANDFILLPATH(void)
{
/* EMRSTROKEANDFILLPATH (pack 4) */
- TEST_TYPE(EMRSTROKEANDFILLPATH, 24, 4);
- TEST_FIELD(EMRSTROKEANDFILLPATH, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSTROKEANDFILLPATH, RECTL, rclBounds, 8, 16, 4);
+ TEST_TYPE_SIZE (EMRSTROKEANDFILLPATH, 24)
+ TEST_TYPE_ALIGN (EMRSTROKEANDFILLPATH, 4)
+ TEST_FIELD_SIZE (EMRSTROKEANDFILLPATH, emr, 8)
+ TEST_FIELD_ALIGN (EMRSTROKEANDFILLPATH, emr, 4)
+ TEST_FIELD_OFFSET(EMRSTROKEANDFILLPATH, emr, 0)
+ TEST_FIELD_SIZE (EMRSTROKEANDFILLPATH, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRSTROKEANDFILLPATH, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRSTROKEANDFILLPATH, rclBounds, 8)
}
static void test_pack_EMRSTROKEPATH(void)
{
/* EMRSTROKEPATH (pack 4) */
- TEST_TYPE(EMRSTROKEPATH, 24, 4);
- TEST_FIELD(EMRSTROKEPATH, EMR, emr, 0, 8, 4);
- TEST_FIELD(EMRSTROKEPATH, RECTL, rclBounds, 8, 16, 4);
+ TEST_TYPE_SIZE (EMRSTROKEPATH, 24)
+ TEST_TYPE_ALIGN (EMRSTROKEPATH, 4)
+ TEST_FIELD_SIZE (EMRSTROKEPATH, emr, 8)
+ TEST_FIELD_ALIGN (EMRSTROKEPATH, emr, 4)
+ TEST_FIELD_OFFSET(EMRSTROKEPATH, emr, 0)
+ TEST_FIELD_SIZE (EMRSTROKEPATH, rclBounds, 16)
+ TEST_FIELD_ALIGN (EMRSTROKEPATH, rclBounds, 4)
+ TEST_FIELD_OFFSET(EMRSTROKEPATH, rclBounds, 8)
}
static void test_pack_EMRTEXT(void)
{
/* EMRTEXT (pack 4) */
- TEST_TYPE(EMRTEXT, 40, 4);
- TEST_FIELD(EMRTEXT, POINTL, ptlReference, 0, 8, 4);
- TEST_FIELD(EMRTEXT, DWORD, nChars, 8, 4, 4);
- TEST_FIELD(EMRTEXT, DWORD, offString, 12, 4, 4);
- TEST_FIELD(EMRTEXT, DWORD, fOptions, 16, 4, 4);
- TEST_FIELD(EMRTEXT, RECTL, rcl, 20, 16, 4);
- TEST_FIELD(EMRTEXT, DWORD, offDx, 36, 4, 4);
+ TEST_TYPE_SIZE (EMRTEXT, 40)
+ TEST_TYPE_ALIGN (EMRTEXT, 4)
+ TEST_FIELD_SIZE (EMRTEXT, ptlReference, 8)
+ TEST_FIELD_ALIGN (EMRTEXT, ptlReference, 4)
+ TEST_FIELD_OFFSET(EMRTEXT, ptlReference, 0)
+ TEST_FIELD_SIZE (EMRTEXT, nChars, 4)
+ TEST_FIELD_ALIGN (EMRTEXT, nChars, 4)
+ TEST_FIELD_OFFSET(EMRTEXT, nChars, 8)
+ TEST_FIELD_SIZE (EMRTEXT, offString, 4)
+ TEST_FIELD_ALIGN (EMRTEXT, offString, 4)
+ TEST_FIELD_OFFSET(EMRTEXT, offString, 12)
+ TEST_FIELD_SIZE (EMRTEXT, fOptions, 4)
+ TEST_FIELD_ALIGN (EMRTEXT, fOptions, 4)
+ TEST_FIELD_OFFSET(EMRTEXT, fOptions, 16)
+ TEST_FIELD_SIZE (EMRTEXT, rcl, 16)
+ TEST_FIELD_ALIGN (EMRTEXT, rcl, 4)
+ TEST_FIELD_OFFSET(EMRTEXT, rcl, 20)
+ TEST_FIELD_SIZE (EMRTEXT, offDx, 4)
+ TEST_FIELD_ALIGN (EMRTEXT, offDx, 4)
+ TEST_FIELD_OFFSET(EMRTEXT, offDx, 36)
}
static void test_pack_EMRWIDENPATH(void)
{
/* EMRWIDENPATH (pack 4) */
- TEST_TYPE(EMRWIDENPATH, 8, 4);
- TEST_FIELD(EMRWIDENPATH, EMR, emr, 0, 8, 4);
+ TEST_TYPE_SIZE (EMRWIDENPATH, 8)
+ TEST_TYPE_ALIGN (EMRWIDENPATH, 4)
+ TEST_FIELD_SIZE (EMRWIDENPATH, emr, 8)
+ TEST_FIELD_ALIGN (EMRWIDENPATH, emr, 4)
+ TEST_FIELD_OFFSET(EMRWIDENPATH, emr, 0)
}
static void test_pack_ENHMETAHEADER(void)
{
/* ENHMETAHEADER (pack 4) */
- TEST_TYPE(ENHMETAHEADER, 108, 4);
- TEST_FIELD(ENHMETAHEADER, DWORD, iType, 0, 4, 4);
- TEST_FIELD(ENHMETAHEADER, DWORD, nSize, 4, 4, 4);
- TEST_FIELD(ENHMETAHEADER, RECTL, rclBounds, 8, 16, 4);
- TEST_FIELD(ENHMETAHEADER, RECTL, rclFrame, 24, 16, 4);
- TEST_FIELD(ENHMETAHEADER, DWORD, dSignature, 40, 4, 4);
- TEST_FIELD(ENHMETAHEADER, DWORD, nVersion, 44, 4, 4);
- TEST_FIELD(ENHMETAHEADER, DWORD, nBytes, 48, 4, 4);
- TEST_FIELD(ENHMETAHEADER, DWORD, nRecords, 52, 4, 4);
- TEST_FIELD(ENHMETAHEADER, WORD, nHandles, 56, 2, 2);
- TEST_FIELD(ENHMETAHEADER, WORD, sReserved, 58, 2, 2);
- TEST_FIELD(ENHMETAHEADER, DWORD, nDescription, 60, 4, 4);
- TEST_FIELD(ENHMETAHEADER, DWORD, offDescription, 64, 4, 4);
- TEST_FIELD(ENHMETAHEADER, DWORD, nPalEntries, 68, 4, 4);
- TEST_FIELD(ENHMETAHEADER, SIZEL, szlDevice, 72, 8, 4);
- TEST_FIELD(ENHMETAHEADER, SIZEL, szlMillimeters, 80, 8, 4);
- TEST_FIELD(ENHMETAHEADER, DWORD, cbPixelFormat, 88, 4, 4);
- TEST_FIELD(ENHMETAHEADER, DWORD, offPixelFormat, 92, 4, 4);
- TEST_FIELD(ENHMETAHEADER, DWORD, bOpenGL, 96, 4, 4);
- TEST_FIELD(ENHMETAHEADER, SIZEL, szlMicrometers, 100, 8, 4);
+ TEST_TYPE_SIZE (ENHMETAHEADER, 108)
+ TEST_TYPE_ALIGN (ENHMETAHEADER, 4)
+ TEST_FIELD_SIZE (ENHMETAHEADER, iType, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, iType, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, iType, 0)
+ TEST_FIELD_SIZE (ENHMETAHEADER, nSize, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, nSize, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, nSize, 4)
+ TEST_FIELD_SIZE (ENHMETAHEADER, rclBounds, 16)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, rclBounds, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, rclBounds, 8)
+ TEST_FIELD_SIZE (ENHMETAHEADER, rclFrame, 16)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, rclFrame, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, rclFrame, 24)
+ TEST_FIELD_SIZE (ENHMETAHEADER, dSignature, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, dSignature, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, dSignature, 40)
+ TEST_FIELD_SIZE (ENHMETAHEADER, nVersion, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, nVersion, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, nVersion, 44)
+ TEST_FIELD_SIZE (ENHMETAHEADER, nBytes, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, nBytes, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, nBytes, 48)
+ TEST_FIELD_SIZE (ENHMETAHEADER, nRecords, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, nRecords, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, nRecords, 52)
+ TEST_FIELD_SIZE (ENHMETAHEADER, nHandles, 2)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, nHandles, 2)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, nHandles, 56)
+ TEST_FIELD_SIZE (ENHMETAHEADER, sReserved, 2)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, sReserved, 2)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, sReserved, 58)
+ TEST_FIELD_SIZE (ENHMETAHEADER, nDescription, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, nDescription, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, nDescription, 60)
+ TEST_FIELD_SIZE (ENHMETAHEADER, offDescription, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, offDescription, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, offDescription, 64)
+ TEST_FIELD_SIZE (ENHMETAHEADER, nPalEntries, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, nPalEntries, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, nPalEntries, 68)
+ TEST_FIELD_SIZE (ENHMETAHEADER, szlDevice, 8)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, szlDevice, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, szlDevice, 72)
+ TEST_FIELD_SIZE (ENHMETAHEADER, szlMillimeters, 8)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, szlMillimeters, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, szlMillimeters, 80)
+ TEST_FIELD_SIZE (ENHMETAHEADER, cbPixelFormat, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, cbPixelFormat, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, cbPixelFormat, 88)
+ TEST_FIELD_SIZE (ENHMETAHEADER, offPixelFormat, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, offPixelFormat, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, offPixelFormat, 92)
+ TEST_FIELD_SIZE (ENHMETAHEADER, bOpenGL, 4)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, bOpenGL, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, bOpenGL, 96)
+ TEST_FIELD_SIZE (ENHMETAHEADER, szlMicrometers, 8)
+ TEST_FIELD_ALIGN (ENHMETAHEADER, szlMicrometers, 4)
+ TEST_FIELD_OFFSET(ENHMETAHEADER, szlMicrometers, 100)
}
static void test_pack_ENHMETARECORD(void)
{
/* ENHMETARECORD (pack 4) */
- TEST_TYPE(ENHMETARECORD, 12, 4);
- TEST_FIELD(ENHMETARECORD, DWORD, iType, 0, 4, 4);
- TEST_FIELD(ENHMETARECORD, DWORD, nSize, 4, 4, 4);
- TEST_FIELD(ENHMETARECORD, DWORD[1], dParm, 8, 4, 4);
+ TEST_TYPE_SIZE (ENHMETARECORD, 12)
+ TEST_TYPE_ALIGN (ENHMETARECORD, 4)
+ TEST_FIELD_SIZE (ENHMETARECORD, iType, 4)
+ TEST_FIELD_ALIGN (ENHMETARECORD, iType, 4)
+ TEST_FIELD_OFFSET(ENHMETARECORD, iType, 0)
+ TEST_FIELD_SIZE (ENHMETARECORD, nSize, 4)
+ TEST_FIELD_ALIGN (ENHMETARECORD, nSize, 4)
+ TEST_FIELD_OFFSET(ENHMETARECORD, nSize, 4)
+ TEST_FIELD_SIZE (ENHMETARECORD, dParm, 4)
+ TEST_FIELD_ALIGN (ENHMETARECORD, dParm, 4)
+ TEST_FIELD_OFFSET(ENHMETARECORD, dParm, 8)
}
static void test_pack_ENHMFENUMPROC(void)
{
/* ENHMFENUMPROC */
- TEST_TYPE(ENHMFENUMPROC, 4, 4);
+ TEST_TYPE_SIZE (ENHMFENUMPROC, 4)
+ TEST_TYPE_ALIGN (ENHMFENUMPROC, 4)
}
static void test_pack_ENUMLOGFONTA(void)
{
/* ENUMLOGFONTA (pack 4) */
- TEST_TYPE(ENUMLOGFONTA, 156, 4);
- TEST_FIELD(ENUMLOGFONTA, LOGFONTA, elfLogFont, 0, 60, 4);
- TEST_FIELD(ENUMLOGFONTA, BYTE[LF_FULLFACESIZE], elfFullName, 60, 64, 1);
- TEST_FIELD(ENUMLOGFONTA, BYTE[LF_FACESIZE], elfStyle, 124, 32, 1);
+ TEST_TYPE_SIZE (ENUMLOGFONTA, 156)
+ TEST_TYPE_ALIGN (ENUMLOGFONTA, 4)
+ TEST_FIELD_SIZE (ENUMLOGFONTA, elfLogFont, 60)
+ TEST_FIELD_ALIGN (ENUMLOGFONTA, elfLogFont, 4)
+ TEST_FIELD_OFFSET(ENUMLOGFONTA, elfLogFont, 0)
+ TEST_FIELD_SIZE (ENUMLOGFONTA, elfFullName, 64)
+ TEST_FIELD_ALIGN (ENUMLOGFONTA, elfFullName, 1)
+ TEST_FIELD_OFFSET(ENUMLOGFONTA, elfFullName, 60)
+ TEST_FIELD_SIZE (ENUMLOGFONTA, elfStyle, 32)
+ TEST_FIELD_ALIGN (ENUMLOGFONTA, elfStyle, 1)
+ TEST_FIELD_OFFSET(ENUMLOGFONTA, elfStyle, 124)
}
static void test_pack_ENUMLOGFONTEXA(void)
{
/* ENUMLOGFONTEXA (pack 4) */
- TEST_TYPE(ENUMLOGFONTEXA, 188, 4);
- TEST_FIELD(ENUMLOGFONTEXA, LOGFONTA, elfLogFont, 0, 60, 4);
- TEST_FIELD(ENUMLOGFONTEXA, BYTE[LF_FULLFACESIZE], elfFullName, 60, 64, 1);
- TEST_FIELD(ENUMLOGFONTEXA, BYTE[LF_FACESIZE], elfStyle, 124, 32, 1);
- TEST_FIELD(ENUMLOGFONTEXA, BYTE[LF_FACESIZE], elfScript, 156, 32, 1);
+ TEST_TYPE_SIZE (ENUMLOGFONTEXA, 188)
+ TEST_TYPE_ALIGN (ENUMLOGFONTEXA, 4)
+ TEST_FIELD_SIZE (ENUMLOGFONTEXA, elfLogFont, 60)
+ TEST_FIELD_ALIGN (ENUMLOGFONTEXA, elfLogFont, 4)
+ TEST_FIELD_OFFSET(ENUMLOGFONTEXA, elfLogFont, 0)
+ TEST_FIELD_SIZE (ENUMLOGFONTEXA, elfFullName, 64)
+ TEST_FIELD_ALIGN (ENUMLOGFONTEXA, elfFullName, 1)
+ TEST_FIELD_OFFSET(ENUMLOGFONTEXA, elfFullName, 60)
+ TEST_FIELD_SIZE (ENUMLOGFONTEXA, elfStyle, 32)
+ TEST_FIELD_ALIGN (ENUMLOGFONTEXA, elfStyle, 1)
+ TEST_FIELD_OFFSET(ENUMLOGFONTEXA, elfStyle, 124)
+ TEST_FIELD_SIZE (ENUMLOGFONTEXA, elfScript, 32)
+ TEST_FIELD_ALIGN (ENUMLOGFONTEXA, elfScript, 1)
+ TEST_FIELD_OFFSET(ENUMLOGFONTEXA, elfScript, 156)
}
static void test_pack_ENUMLOGFONTEXW(void)
{
/* ENUMLOGFONTEXW (pack 4) */
- TEST_TYPE(ENUMLOGFONTEXW, 348, 4);
- TEST_FIELD(ENUMLOGFONTEXW, LOGFONTW, elfLogFont, 0, 92, 4);
- TEST_FIELD(ENUMLOGFONTEXW, WCHAR[LF_FULLFACESIZE], elfFullName, 92, 128, 2);
- TEST_FIELD(ENUMLOGFONTEXW, WCHAR[LF_FACESIZE], elfStyle, 220, 64, 2);
- TEST_FIELD(ENUMLOGFONTEXW, WCHAR[LF_FACESIZE], elfScript, 284, 64, 2);
+ TEST_TYPE_SIZE (ENUMLOGFONTEXW, 348)
+ TEST_TYPE_ALIGN (ENUMLOGFONTEXW, 4)
+ TEST_FIELD_SIZE (ENUMLOGFONTEXW, elfLogFont, 92)
+ TEST_FIELD_ALIGN (ENUMLOGFONTEXW, elfLogFont, 4)
+ TEST_FIELD_OFFSET(ENUMLOGFONTEXW, elfLogFont, 0)
+ TEST_FIELD_SIZE (ENUMLOGFONTEXW, elfFullName, 128)
+ TEST_FIELD_ALIGN (ENUMLOGFONTEXW, elfFullName, 2)
+ TEST_FIELD_OFFSET(ENUMLOGFONTEXW, elfFullName, 92)
+ TEST_FIELD_SIZE (ENUMLOGFONTEXW, elfStyle, 64)
+ TEST_FIELD_ALIGN (ENUMLOGFONTEXW, elfStyle, 2)
+ TEST_FIELD_OFFSET(ENUMLOGFONTEXW, elfStyle, 220)
+ TEST_FIELD_SIZE (ENUMLOGFONTEXW, elfScript, 64)
+ TEST_FIELD_ALIGN (ENUMLOGFONTEXW, elfScript, 2)
+ TEST_FIELD_OFFSET(ENUMLOGFONTEXW, elfScript, 284)
}
static void test_pack_ENUMLOGFONTW(void)
{
/* ENUMLOGFONTW (pack 4) */
- TEST_TYPE(ENUMLOGFONTW, 284, 4);
- TEST_FIELD(ENUMLOGFONTW, LOGFONTW, elfLogFont, 0, 92, 4);
- TEST_FIELD(ENUMLOGFONTW, WCHAR[LF_FULLFACESIZE], elfFullName, 92, 128, 2);
- TEST_FIELD(ENUMLOGFONTW, WCHAR[LF_FACESIZE], elfStyle, 220, 64, 2);
+ TEST_TYPE_SIZE (ENUMLOGFONTW, 284)
+ TEST_TYPE_ALIGN (ENUMLOGFONTW, 4)
+ TEST_FIELD_SIZE (ENUMLOGFONTW, elfLogFont, 92)
+ TEST_FIELD_ALIGN (ENUMLOGFONTW, elfLogFont, 4)
+ TEST_FIELD_OFFSET(ENUMLOGFONTW, elfLogFont, 0)
+ TEST_FIELD_SIZE (ENUMLOGFONTW, elfFullName, 128)
+ TEST_FIELD_ALIGN (ENUMLOGFONTW, elfFullName, 2)
+ TEST_FIELD_OFFSET(ENUMLOGFONTW, elfFullName, 92)
+ TEST_FIELD_SIZE (ENUMLOGFONTW, elfStyle, 64)
+ TEST_FIELD_ALIGN (ENUMLOGFONTW, elfStyle, 2)
+ TEST_FIELD_OFFSET(ENUMLOGFONTW, elfStyle, 220)
}
static void test_pack_EXTLOGFONTA(void)
{
/* EXTLOGFONTA (pack 4) */
- TEST_TYPE(EXTLOGFONTA, 192, 4);
- TEST_FIELD(EXTLOGFONTA, LOGFONTA, elfLogFont, 0, 60, 4);
- TEST_FIELD(EXTLOGFONTA, BYTE[LF_FULLFACESIZE], elfFullName, 60, 64, 1);
- TEST_FIELD(EXTLOGFONTA, BYTE[LF_FACESIZE], elfStyle, 124, 32, 1);
- TEST_FIELD(EXTLOGFONTA, DWORD, elfVersion, 156, 4, 4);
- TEST_FIELD(EXTLOGFONTA, DWORD, elfStyleSize, 160, 4, 4);
- TEST_FIELD(EXTLOGFONTA, DWORD, elfMatch, 164, 4, 4);
- TEST_FIELD(EXTLOGFONTA, DWORD, elfReserved, 168, 4, 4);
- TEST_FIELD(EXTLOGFONTA, BYTE[ELF_VENDOR_SIZE], elfVendorId, 172, 4, 1);
- TEST_FIELD(EXTLOGFONTA, DWORD, elfCulture, 176, 4, 4);
- TEST_FIELD(EXTLOGFONTA, PANOSE, elfPanose, 180, 10, 1);
+ TEST_TYPE_SIZE (EXTLOGFONTA, 192)
+ TEST_TYPE_ALIGN (EXTLOGFONTA, 4)
+ TEST_FIELD_SIZE (EXTLOGFONTA, elfLogFont, 60)
+ TEST_FIELD_ALIGN (EXTLOGFONTA, elfLogFont, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTA, elfLogFont, 0)
+ TEST_FIELD_SIZE (EXTLOGFONTA, elfFullName, 64)
+ TEST_FIELD_ALIGN (EXTLOGFONTA, elfFullName, 1)
+ TEST_FIELD_OFFSET(EXTLOGFONTA, elfFullName, 60)
+ TEST_FIELD_SIZE (EXTLOGFONTA, elfStyle, 32)
+ TEST_FIELD_ALIGN (EXTLOGFONTA, elfStyle, 1)
+ TEST_FIELD_OFFSET(EXTLOGFONTA, elfStyle, 124)
+ TEST_FIELD_SIZE (EXTLOGFONTA, elfVersion, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTA, elfVersion, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTA, elfVersion, 156)
+ TEST_FIELD_SIZE (EXTLOGFONTA, elfStyleSize, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTA, elfStyleSize, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTA, elfStyleSize, 160)
+ TEST_FIELD_SIZE (EXTLOGFONTA, elfMatch, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTA, elfMatch, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTA, elfMatch, 164)
+ TEST_FIELD_SIZE (EXTLOGFONTA, elfReserved, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTA, elfReserved, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTA, elfReserved, 168)
+ TEST_FIELD_SIZE (EXTLOGFONTA, elfVendorId, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTA, elfVendorId, 1)
+ TEST_FIELD_OFFSET(EXTLOGFONTA, elfVendorId, 172)
+ TEST_FIELD_SIZE (EXTLOGFONTA, elfCulture, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTA, elfCulture, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTA, elfCulture, 176)
+ TEST_FIELD_SIZE (EXTLOGFONTA, elfPanose, 10)
+ TEST_FIELD_ALIGN (EXTLOGFONTA, elfPanose, 1)
+ TEST_FIELD_OFFSET(EXTLOGFONTA, elfPanose, 180)
}
static void test_pack_EXTLOGFONTW(void)
{
/* EXTLOGFONTW (pack 4) */
- TEST_TYPE(EXTLOGFONTW, 320, 4);
- TEST_FIELD(EXTLOGFONTW, LOGFONTW, elfLogFont, 0, 92, 4);
- TEST_FIELD(EXTLOGFONTW, WCHAR[LF_FULLFACESIZE], elfFullName, 92, 128, 2);
- TEST_FIELD(EXTLOGFONTW, WCHAR[LF_FACESIZE], elfStyle, 220, 64, 2);
- TEST_FIELD(EXTLOGFONTW, DWORD, elfVersion, 284, 4, 4);
- TEST_FIELD(EXTLOGFONTW, DWORD, elfStyleSize, 288, 4, 4);
- TEST_FIELD(EXTLOGFONTW, DWORD, elfMatch, 292, 4, 4);
- TEST_FIELD(EXTLOGFONTW, DWORD, elfReserved, 296, 4, 4);
- TEST_FIELD(EXTLOGFONTW, BYTE[ELF_VENDOR_SIZE], elfVendorId, 300, 4, 1);
- TEST_FIELD(EXTLOGFONTW, DWORD, elfCulture, 304, 4, 4);
- TEST_FIELD(EXTLOGFONTW, PANOSE, elfPanose, 308, 10, 1);
+ TEST_TYPE_SIZE (EXTLOGFONTW, 320)
+ TEST_TYPE_ALIGN (EXTLOGFONTW, 4)
+ TEST_FIELD_SIZE (EXTLOGFONTW, elfLogFont, 92)
+ TEST_FIELD_ALIGN (EXTLOGFONTW, elfLogFont, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTW, elfLogFont, 0)
+ TEST_FIELD_SIZE (EXTLOGFONTW, elfFullName, 128)
+ TEST_FIELD_ALIGN (EXTLOGFONTW, elfFullName, 2)
+ TEST_FIELD_OFFSET(EXTLOGFONTW, elfFullName, 92)
+ TEST_FIELD_SIZE (EXTLOGFONTW, elfStyle, 64)
+ TEST_FIELD_ALIGN (EXTLOGFONTW, elfStyle, 2)
+ TEST_FIELD_OFFSET(EXTLOGFONTW, elfStyle, 220)
+ TEST_FIELD_SIZE (EXTLOGFONTW, elfVersion, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTW, elfVersion, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTW, elfVersion, 284)
+ TEST_FIELD_SIZE (EXTLOGFONTW, elfStyleSize, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTW, elfStyleSize, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTW, elfStyleSize, 288)
+ TEST_FIELD_SIZE (EXTLOGFONTW, elfMatch, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTW, elfMatch, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTW, elfMatch, 292)
+ TEST_FIELD_SIZE (EXTLOGFONTW, elfReserved, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTW, elfReserved, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTW, elfReserved, 296)
+ TEST_FIELD_SIZE (EXTLOGFONTW, elfVendorId, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTW, elfVendorId, 1)
+ TEST_FIELD_OFFSET(EXTLOGFONTW, elfVendorId, 300)
+ TEST_FIELD_SIZE (EXTLOGFONTW, elfCulture, 4)
+ TEST_FIELD_ALIGN (EXTLOGFONTW, elfCulture, 4)
+ TEST_FIELD_OFFSET(EXTLOGFONTW, elfCulture, 304)
+ TEST_FIELD_SIZE (EXTLOGFONTW, elfPanose, 10)
+ TEST_FIELD_ALIGN (EXTLOGFONTW, elfPanose, 1)
+ TEST_FIELD_OFFSET(EXTLOGFONTW, elfPanose, 308)
}
static void test_pack_EXTLOGPEN(void)
{
/* EXTLOGPEN (pack 4) */
- TEST_TYPE(EXTLOGPEN, 28, 4);
- TEST_FIELD(EXTLOGPEN, DWORD, elpPenStyle, 0, 4, 4);
- TEST_FIELD(EXTLOGPEN, DWORD, elpWidth, 4, 4, 4);
- TEST_FIELD(EXTLOGPEN, UINT, elpBrushStyle, 8, 4, 4);
- TEST_FIELD(EXTLOGPEN, COLORREF, elpColor, 12, 4, 4);
- TEST_FIELD(EXTLOGPEN, ULONG_PTR, elpHatch, 16, 4, 4);
- TEST_FIELD(EXTLOGPEN, DWORD, elpNumEntries, 20, 4, 4);
- TEST_FIELD(EXTLOGPEN, DWORD[1], elpStyleEntry, 24, 4, 4);
+ TEST_TYPE_SIZE (EXTLOGPEN, 28)
+ TEST_TYPE_ALIGN (EXTLOGPEN, 4)
+ TEST_FIELD_SIZE (EXTLOGPEN, elpPenStyle, 4)
+ TEST_FIELD_ALIGN (EXTLOGPEN, elpPenStyle, 4)
+ TEST_FIELD_OFFSET(EXTLOGPEN, elpPenStyle, 0)
+ TEST_FIELD_SIZE (EXTLOGPEN, elpWidth, 4)
+ TEST_FIELD_ALIGN (EXTLOGPEN, elpWidth, 4)
+ TEST_FIELD_OFFSET(EXTLOGPEN, elpWidth, 4)
+ TEST_FIELD_SIZE (EXTLOGPEN, elpBrushStyle, 4)
+ TEST_FIELD_ALIGN (EXTLOGPEN, elpBrushStyle, 4)
+ TEST_FIELD_OFFSET(EXTLOGPEN, elpBrushStyle, 8)
+ TEST_FIELD_SIZE (EXTLOGPEN, elpColor, 4)
+ TEST_FIELD_ALIGN (EXTLOGPEN, elpColor, 4)
+ TEST_FIELD_OFFSET(EXTLOGPEN, elpColor, 12)
+ TEST_FIELD_SIZE (EXTLOGPEN, elpHatch, 4)
+ TEST_FIELD_ALIGN (EXTLOGPEN, elpHatch, 4)
+ TEST_FIELD_OFFSET(EXTLOGPEN, elpHatch, 16)
+ TEST_FIELD_SIZE (EXTLOGPEN, elpNumEntries, 4)
+ TEST_FIELD_ALIGN (EXTLOGPEN, elpNumEntries, 4)
+ TEST_FIELD_OFFSET(EXTLOGPEN, elpNumEntries, 20)
+ TEST_FIELD_SIZE (EXTLOGPEN, elpStyleEntry, 4)
+ TEST_FIELD_ALIGN (EXTLOGPEN, elpStyleEntry, 4)
+ TEST_FIELD_OFFSET(EXTLOGPEN, elpStyleEntry, 24)
}
static void test_pack_FIXED(void)
{
/* FIXED (pack 4) */
- TEST_TYPE(FIXED, 4, 2);
- TEST_FIELD(FIXED, WORD, fract, 0, 2, 2);
- TEST_FIELD(FIXED, SHORT, value, 2, 2, 2);
+ TEST_TYPE_SIZE (FIXED, 4)
+ TEST_TYPE_ALIGN (FIXED, 2)
+ TEST_FIELD_SIZE (FIXED, fract, 2)
+ TEST_FIELD_ALIGN (FIXED, fract, 2)
+ TEST_FIELD_OFFSET(FIXED, fract, 0)
+ TEST_FIELD_SIZE (FIXED, value, 2)
+ TEST_FIELD_ALIGN (FIXED, value, 2)
+ TEST_FIELD_OFFSET(FIXED, value, 2)
}
static void test_pack_FONTENUMPROCA(void)
{
/* FONTENUMPROCA */
- TEST_TYPE(FONTENUMPROCA, 4, 4);
+ TEST_TYPE_SIZE (FONTENUMPROCA, 4)
+ TEST_TYPE_ALIGN (FONTENUMPROCA, 4)
}
static void test_pack_FONTENUMPROCW(void)
{
/* FONTENUMPROCW */
- TEST_TYPE(FONTENUMPROCW, 4, 4);
+ TEST_TYPE_SIZE (FONTENUMPROCW, 4)
+ TEST_TYPE_ALIGN (FONTENUMPROCW, 4)
}
static void test_pack_FONTSIGNATURE(void)
{
/* FONTSIGNATURE (pack 4) */
- TEST_TYPE(FONTSIGNATURE, 24, 4);
- TEST_FIELD(FONTSIGNATURE, DWORD[4], fsUsb, 0, 16, 4);
- TEST_FIELD(FONTSIGNATURE, DWORD[2], fsCsb, 16, 8, 4);
+ TEST_TYPE_SIZE (FONTSIGNATURE, 24)
+ TEST_TYPE_ALIGN (FONTSIGNATURE, 4)
+ TEST_FIELD_SIZE (FONTSIGNATURE, fsUsb, 16)
+ TEST_FIELD_ALIGN (FONTSIGNATURE, fsUsb, 4)
+ TEST_FIELD_OFFSET(FONTSIGNATURE, fsUsb, 0)
+ TEST_FIELD_SIZE (FONTSIGNATURE, fsCsb, 8)
+ TEST_FIELD_ALIGN (FONTSIGNATURE, fsCsb, 4)
+ TEST_FIELD_OFFSET(FONTSIGNATURE, fsCsb, 16)
}
static void test_pack_FXPT16DOT16(void)
{
/* FXPT16DOT16 */
- TEST_TYPE(FXPT16DOT16, 4, 4);
+ TEST_TYPE_SIZE (FXPT16DOT16, 4)
+ TEST_TYPE_ALIGN (FXPT16DOT16, 4)
}
static void test_pack_FXPT2DOT30(void)
{
/* FXPT2DOT30 */
- TEST_TYPE(FXPT2DOT30, 4, 4);
+ TEST_TYPE_SIZE (FXPT2DOT30, 4)
+ TEST_TYPE_ALIGN (FXPT2DOT30, 4)
}
static void test_pack_GCP_RESULTSA(void)
{
/* GCP_RESULTSA (pack 4) */
- TEST_TYPE(GCP_RESULTSA, 36, 4);
- TEST_FIELD(GCP_RESULTSA, DWORD, lStructSize, 0, 4, 4);
- TEST_FIELD(GCP_RESULTSA, LPSTR, lpOutString, 4, 4, 4);
- TEST_FIELD(GCP_RESULTSA, UINT *, lpOrder, 8, 4, 4);
- TEST_FIELD(GCP_RESULTSA, INT *, lpDx, 12, 4, 4);
- TEST_FIELD(GCP_RESULTSA, INT *, lpCaretPos, 16, 4, 4);
- TEST_FIELD(GCP_RESULTSA, LPSTR, lpClass, 20, 4, 4);
- TEST_FIELD(GCP_RESULTSA, LPWSTR, lpGlyphs, 24, 4, 4);
- TEST_FIELD(GCP_RESULTSA, UINT, nGlyphs, 28, 4, 4);
- TEST_FIELD(GCP_RESULTSA, UINT, nMaxFit, 32, 4, 4);
+ TEST_TYPE_SIZE (GCP_RESULTSA, 36)
+ TEST_TYPE_ALIGN (GCP_RESULTSA, 4)
+ TEST_FIELD_SIZE (GCP_RESULTSA, lStructSize, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSA, lStructSize, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSA, lStructSize, 0)
+ TEST_FIELD_SIZE (GCP_RESULTSA, lpOutString, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSA, lpOutString, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSA, lpOutString, 4)
+ TEST_FIELD_SIZE (GCP_RESULTSA, lpOrder, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSA, lpOrder, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSA, lpOrder, 8)
+ TEST_FIELD_SIZE (GCP_RESULTSA, lpDx, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSA, lpDx, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSA, lpDx, 12)
+ TEST_FIELD_SIZE (GCP_RESULTSA, lpCaretPos, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSA, lpCaretPos, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSA, lpCaretPos, 16)
+ TEST_FIELD_SIZE (GCP_RESULTSA, lpClass, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSA, lpClass, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSA, lpClass, 20)
+ TEST_FIELD_SIZE (GCP_RESULTSA, lpGlyphs, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSA, lpGlyphs, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSA, lpGlyphs, 24)
+ TEST_FIELD_SIZE (GCP_RESULTSA, nGlyphs, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSA, nGlyphs, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSA, nGlyphs, 28)
+ TEST_FIELD_SIZE (GCP_RESULTSA, nMaxFit, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSA, nMaxFit, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSA, nMaxFit, 32)
}
static void test_pack_GCP_RESULTSW(void)
{
/* GCP_RESULTSW (pack 4) */
- TEST_TYPE(GCP_RESULTSW, 36, 4);
- TEST_FIELD(GCP_RESULTSW, DWORD, lStructSize, 0, 4, 4);
- TEST_FIELD(GCP_RESULTSW, LPWSTR, lpOutString, 4, 4, 4);
- TEST_FIELD(GCP_RESULTSW, UINT *, lpOrder, 8, 4, 4);
- TEST_FIELD(GCP_RESULTSW, INT *, lpDx, 12, 4, 4);
- TEST_FIELD(GCP_RESULTSW, INT *, lpCaretPos, 16, 4, 4);
- TEST_FIELD(GCP_RESULTSW, LPSTR, lpClass, 20, 4, 4);
- TEST_FIELD(GCP_RESULTSW, LPWSTR, lpGlyphs, 24, 4, 4);
- TEST_FIELD(GCP_RESULTSW, UINT, nGlyphs, 28, 4, 4);
- TEST_FIELD(GCP_RESULTSW, UINT, nMaxFit, 32, 4, 4);
+ TEST_TYPE_SIZE (GCP_RESULTSW, 36)
+ TEST_TYPE_ALIGN (GCP_RESULTSW, 4)
+ TEST_FIELD_SIZE (GCP_RESULTSW, lStructSize, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSW, lStructSize, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSW, lStructSize, 0)
+ TEST_FIELD_SIZE (GCP_RESULTSW, lpOutString, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSW, lpOutString, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSW, lpOutString, 4)
+ TEST_FIELD_SIZE (GCP_RESULTSW, lpOrder, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSW, lpOrder, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSW, lpOrder, 8)
+ TEST_FIELD_SIZE (GCP_RESULTSW, lpDx, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSW, lpDx, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSW, lpDx, 12)
+ TEST_FIELD_SIZE (GCP_RESULTSW, lpCaretPos, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSW, lpCaretPos, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSW, lpCaretPos, 16)
+ TEST_FIELD_SIZE (GCP_RESULTSW, lpClass, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSW, lpClass, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSW, lpClass, 20)
+ TEST_FIELD_SIZE (GCP_RESULTSW, lpGlyphs, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSW, lpGlyphs, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSW, lpGlyphs, 24)
+ TEST_FIELD_SIZE (GCP_RESULTSW, nGlyphs, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSW, nGlyphs, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSW, nGlyphs, 28)
+ TEST_FIELD_SIZE (GCP_RESULTSW, nMaxFit, 4)
+ TEST_FIELD_ALIGN (GCP_RESULTSW, nMaxFit, 4)
+ TEST_FIELD_OFFSET(GCP_RESULTSW, nMaxFit, 32)
}
static void test_pack_GLYPHMETRICS(void)
{
/* GLYPHMETRICS (pack 4) */
- TEST_TYPE(GLYPHMETRICS, 20, 4);
- TEST_FIELD(GLYPHMETRICS, UINT, gmBlackBoxX, 0, 4, 4);
- TEST_FIELD(GLYPHMETRICS, UINT, gmBlackBoxY, 4, 4, 4);
- TEST_FIELD(GLYPHMETRICS, POINT, gmptGlyphOrigin, 8, 8, 4);
- TEST_FIELD(GLYPHMETRICS, SHORT, gmCellIncX, 16, 2, 2);
- TEST_FIELD(GLYPHMETRICS, SHORT, gmCellIncY, 18, 2, 2);
+ TEST_TYPE_SIZE (GLYPHMETRICS, 20)
+ TEST_TYPE_ALIGN (GLYPHMETRICS, 4)
+ TEST_FIELD_SIZE (GLYPHMETRICS, gmBlackBoxX, 4)
+ TEST_FIELD_ALIGN (GLYPHMETRICS, gmBlackBoxX, 4)
+ TEST_FIELD_OFFSET(GLYPHMETRICS, gmBlackBoxX, 0)
+ TEST_FIELD_SIZE (GLYPHMETRICS, gmBlackBoxY, 4)
+ TEST_FIELD_ALIGN (GLYPHMETRICS, gmBlackBoxY, 4)
+ TEST_FIELD_OFFSET(GLYPHMETRICS, gmBlackBoxY, 4)
+ TEST_FIELD_SIZE (GLYPHMETRICS, gmptGlyphOrigin, 8)
+ TEST_FIELD_ALIGN (GLYPHMETRICS, gmptGlyphOrigin, 4)
+ TEST_FIELD_OFFSET(GLYPHMETRICS, gmptGlyphOrigin, 8)
+ TEST_FIELD_SIZE (GLYPHMETRICS, gmCellIncX, 2)
+ TEST_FIELD_ALIGN (GLYPHMETRICS, gmCellIncX, 2)
+ TEST_FIELD_OFFSET(GLYPHMETRICS, gmCellIncX, 16)
+ TEST_FIELD_SIZE (GLYPHMETRICS, gmCellIncY, 2)
+ TEST_FIELD_ALIGN (GLYPHMETRICS, gmCellIncY, 2)
+ TEST_FIELD_OFFSET(GLYPHMETRICS, gmCellIncY, 18)
}
static void test_pack_GLYPHMETRICSFLOAT(void)
{
/* GLYPHMETRICSFLOAT (pack 4) */
- TEST_TYPE(GLYPHMETRICSFLOAT, 24, 4);
- TEST_FIELD(GLYPHMETRICSFLOAT, FLOAT, gmfBlackBoxX, 0, 4, 4);
- TEST_FIELD(GLYPHMETRICSFLOAT, FLOAT, gmfBlackBoxY, 4, 4, 4);
- TEST_FIELD(GLYPHMETRICSFLOAT, POINTFLOAT, gmfptGlyphOrigin, 8, 8, 4);
- TEST_FIELD(GLYPHMETRICSFLOAT, FLOAT, gmfCellIncX, 16, 4, 4);
- TEST_FIELD(GLYPHMETRICSFLOAT, FLOAT, gmfCellIncY, 20, 4, 4);
+ TEST_TYPE_SIZE (GLYPHMETRICSFLOAT, 24)
+ TEST_TYPE_ALIGN (GLYPHMETRICSFLOAT, 4)
+ TEST_FIELD_SIZE (GLYPHMETRICSFLOAT, gmfBlackBoxX, 4)
+ TEST_FIELD_ALIGN (GLYPHMETRICSFLOAT, gmfBlackBoxX, 4)
+ TEST_FIELD_OFFSET(GLYPHMETRICSFLOAT, gmfBlackBoxX, 0)
+ TEST_FIELD_SIZE (GLYPHMETRICSFLOAT, gmfBlackBoxY, 4)
+ TEST_FIELD_ALIGN (GLYPHMETRICSFLOAT, gmfBlackBoxY, 4)
+ TEST_FIELD_OFFSET(GLYPHMETRICSFLOAT, gmfBlackBoxY, 4)
+ TEST_FIELD_SIZE (GLYPHMETRICSFLOAT, gmfptGlyphOrigin, 8)
+ TEST_FIELD_ALIGN (GLYPHMETRICSFLOAT, gmfptGlyphOrigin, 4)
+ TEST_FIELD_OFFSET(GLYPHMETRICSFLOAT, gmfptGlyphOrigin, 8)
+ TEST_FIELD_SIZE (GLYPHMETRICSFLOAT, gmfCellIncX, 4)
+ TEST_FIELD_ALIGN (GLYPHMETRICSFLOAT, gmfCellIncX, 4)
+ TEST_FIELD_OFFSET(GLYPHMETRICSFLOAT, gmfCellIncX, 16)
+ TEST_FIELD_SIZE (GLYPHMETRICSFLOAT, gmfCellIncY, 4)
+ TEST_FIELD_ALIGN (GLYPHMETRICSFLOAT, gmfCellIncY, 4)
+ TEST_FIELD_OFFSET(GLYPHMETRICSFLOAT, gmfCellIncY, 20)
}
static void test_pack_GOBJENUMPROC(void)
{
/* GOBJENUMPROC */
- TEST_TYPE(GOBJENUMPROC, 4, 4);
+ TEST_TYPE_SIZE (GOBJENUMPROC, 4)
+ TEST_TYPE_ALIGN (GOBJENUMPROC, 4)
}
static void test_pack_GRADIENT_RECT(void)
{
/* GRADIENT_RECT (pack 4) */
- TEST_TYPE(GRADIENT_RECT, 8, 4);
- TEST_FIELD(GRADIENT_RECT, ULONG, UpperLeft, 0, 4, 4);
- TEST_FIELD(GRADIENT_RECT, ULONG, LowerRight, 4, 4, 4);
+ TEST_TYPE_SIZE (GRADIENT_RECT, 8)
+ TEST_TYPE_ALIGN (GRADIENT_RECT, 4)
+ TEST_FIELD_SIZE (GRADIENT_RECT, UpperLeft, 4)
+ TEST_FIELD_ALIGN (GRADIENT_RECT, UpperLeft, 4)
+ TEST_FIELD_OFFSET(GRADIENT_RECT, UpperLeft, 0)
+ TEST_FIELD_SIZE (GRADIENT_RECT, LowerRight, 4)
+ TEST_FIELD_ALIGN (GRADIENT_RECT, LowerRight, 4)
+ TEST_FIELD_OFFSET(GRADIENT_RECT, LowerRight, 4)
}
static void test_pack_GRADIENT_TRIANGLE(void)
{
/* GRADIENT_TRIANGLE (pack 4) */
- TEST_TYPE(GRADIENT_TRIANGLE, 12, 4);
- TEST_FIELD(GRADIENT_TRIANGLE, ULONG, Vertex1, 0, 4, 4);
- TEST_FIELD(GRADIENT_TRIANGLE, ULONG, Vertex2, 4, 4, 4);
- TEST_FIELD(GRADIENT_TRIANGLE, ULONG, Vertex3, 8, 4, 4);
+ TEST_TYPE_SIZE (GRADIENT_TRIANGLE, 12)
+ TEST_TYPE_ALIGN (GRADIENT_TRIANGLE, 4)
+ TEST_FIELD_SIZE (GRADIENT_TRIANGLE, Vertex1, 4)
+ TEST_FIELD_ALIGN (GRADIENT_TRIANGLE, Vertex1, 4)
+ TEST_FIELD_OFFSET(GRADIENT_TRIANGLE, Vertex1, 0)
+ TEST_FIELD_SIZE (GRADIENT_TRIANGLE, Vertex2, 4)
+ TEST_FIELD_ALIGN (GRADIENT_TRIANGLE, Vertex2, 4)
+ TEST_FIELD_OFFSET(GRADIENT_TRIANGLE, Vertex2, 4)
+ TEST_FIELD_SIZE (GRADIENT_TRIANGLE, Vertex3, 4)
+ TEST_FIELD_ALIGN (GRADIENT_TRIANGLE, Vertex3, 4)
+ TEST_FIELD_OFFSET(GRADIENT_TRIANGLE, Vertex3, 8)
}
static void test_pack_HANDLETABLE(void)
{
/* HANDLETABLE (pack 4) */
- TEST_TYPE(HANDLETABLE, 4, 4);
- TEST_FIELD(HANDLETABLE, HGDIOBJ[1], objectHandle, 0, 4, 4);
+ TEST_TYPE_SIZE (HANDLETABLE, 4)
+ TEST_TYPE_ALIGN (HANDLETABLE, 4)
+ TEST_FIELD_SIZE (HANDLETABLE, objectHandle, 4)
+ TEST_FIELD_ALIGN (HANDLETABLE, objectHandle, 4)
+ TEST_FIELD_OFFSET(HANDLETABLE, objectHandle, 0)
}
static void test_pack_ICMENUMPROCA(void)
{
/* ICMENUMPROCA */
- TEST_TYPE(ICMENUMPROCA, 4, 4);
+ TEST_TYPE_SIZE (ICMENUMPROCA, 4)
+ TEST_TYPE_ALIGN (ICMENUMPROCA, 4)
}
static void test_pack_ICMENUMPROCW(void)
{
/* ICMENUMPROCW */
- TEST_TYPE(ICMENUMPROCW, 4, 4);
+ TEST_TYPE_SIZE (ICMENUMPROCW, 4)
+ TEST_TYPE_ALIGN (ICMENUMPROCW, 4)
}
static void test_pack_KERNINGPAIR(void)
{
/* KERNINGPAIR (pack 4) */
- TEST_TYPE(KERNINGPAIR, 8, 4);
- TEST_FIELD(KERNINGPAIR, WORD, wFirst, 0, 2, 2);
- TEST_FIELD(KERNINGPAIR, WORD, wSecond, 2, 2, 2);
- TEST_FIELD(KERNINGPAIR, INT, iKernAmount, 4, 4, 4);
+ TEST_TYPE_SIZE (KERNINGPAIR, 8)
+ TEST_TYPE_ALIGN (KERNINGPAIR, 4)
+ TEST_FIELD_SIZE (KERNINGPAIR, wFirst, 2)
+ TEST_FIELD_ALIGN (KERNINGPAIR, wFirst, 2)
+ TEST_FIELD_OFFSET(KERNINGPAIR, wFirst, 0)
+ TEST_FIELD_SIZE (KERNINGPAIR, wSecond, 2)
+ TEST_FIELD_ALIGN (KERNINGPAIR, wSecond, 2)
+ TEST_FIELD_OFFSET(KERNINGPAIR, wSecond, 2)
+ TEST_FIELD_SIZE (KERNINGPAIR, iKernAmount, 4)
+ TEST_FIELD_ALIGN (KERNINGPAIR, iKernAmount, 4)
+ TEST_FIELD_OFFSET(KERNINGPAIR, iKernAmount, 4)
}
static void test_pack_LAYERPLANEDESCRIPTOR(void)
{
/* LAYERPLANEDESCRIPTOR (pack 4) */
- TEST_TYPE(LAYERPLANEDESCRIPTOR, 32, 4);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, WORD, nSize, 0, 2, 2);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, WORD, nVersion, 2, 2, 2);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, iPixelType, 8, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cColorBits, 9, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cRedBits, 10, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cRedShift, 11, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cGreenBits, 12, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cGreenShift, 13, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cBlueBits, 14, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cBlueShift, 15, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAlphaBits, 16, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAlphaShift, 17, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAccumBits, 18, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAccumRedBits, 19, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAccumGreenBits, 20, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAccumBlueBits, 21, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAccumAlphaBits, 22, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cDepthBits, 23, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cStencilBits, 24, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, cAuxBuffers, 25, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, iLayerPlane, 26, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, BYTE, bReserved, 27, 1, 1);
- TEST_FIELD(LAYERPLANEDESCRIPTOR, COLORREF, crTransparent, 28, 4, 4);
+ TEST_TYPE_SIZE (LAYERPLANEDESCRIPTOR, 32)
+ TEST_TYPE_ALIGN (LAYERPLANEDESCRIPTOR, 4)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, nSize, 2)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, nSize, 2)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, nSize, 0)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, nVersion, 2)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, nVersion, 2)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, nVersion, 2)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, dwFlags, 4)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, dwFlags, 4)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, dwFlags, 4)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, iPixelType, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, iPixelType, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, iPixelType, 8)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cColorBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cColorBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cColorBits, 9)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cRedBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cRedBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cRedBits, 10)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cRedShift, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cRedShift, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cRedShift, 11)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cGreenBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cGreenBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cGreenBits, 12)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cGreenShift, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cGreenShift, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cGreenShift, 13)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cBlueBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cBlueBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cBlueBits, 14)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cBlueShift, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cBlueShift, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cBlueShift, 15)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cAlphaBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cAlphaBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cAlphaBits, 16)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cAlphaShift, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cAlphaShift, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cAlphaShift, 17)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cAccumBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cAccumBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cAccumBits, 18)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cAccumRedBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cAccumRedBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cAccumRedBits, 19)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cAccumGreenBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cAccumGreenBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cAccumGreenBits, 20)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cAccumBlueBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cAccumBlueBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cAccumBlueBits, 21)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cAccumAlphaBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cAccumAlphaBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cAccumAlphaBits, 22)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cDepthBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cDepthBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cDepthBits, 23)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cStencilBits, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cStencilBits, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cStencilBits, 24)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, cAuxBuffers, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, cAuxBuffers, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, cAuxBuffers, 25)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, iLayerPlane, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, iLayerPlane, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, iLayerPlane, 26)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, bReserved, 1)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, bReserved, 1)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, bReserved, 27)
+ TEST_FIELD_SIZE (LAYERPLANEDESCRIPTOR, crTransparent, 4)
+ TEST_FIELD_ALIGN (LAYERPLANEDESCRIPTOR, crTransparent, 4)
+ TEST_FIELD_OFFSET(LAYERPLANEDESCRIPTOR, crTransparent, 28)
}
static void test_pack_LCSCSTYPE(void)
{
/* LCSCSTYPE */
- TEST_TYPE(LCSCSTYPE, 4, 4);
+ TEST_TYPE_SIZE (LCSCSTYPE, 4)
+ TEST_TYPE_ALIGN (LCSCSTYPE, 4)
}
static void test_pack_LCSGAMUTMATCH(void)
{
/* LCSGAMUTMATCH */
- TEST_TYPE(LCSGAMUTMATCH, 4, 4);
+ TEST_TYPE_SIZE (LCSGAMUTMATCH, 4)
+ TEST_TYPE_ALIGN (LCSGAMUTMATCH, 4)
}
static void test_pack_LINEDDAPROC(void)
{
/* LINEDDAPROC */
- TEST_TYPE(LINEDDAPROC, 4, 4);
+ TEST_TYPE_SIZE (LINEDDAPROC, 4)
+ TEST_TYPE_ALIGN (LINEDDAPROC, 4)
}
static void test_pack_LOCALESIGNATURE(void)
{
/* LOCALESIGNATURE (pack 4) */
- TEST_TYPE(LOCALESIGNATURE, 32, 4);
- TEST_FIELD(LOCALESIGNATURE, DWORD[4], lsUsb, 0, 16, 4);
- TEST_FIELD(LOCALESIGNATURE, DWORD[2], lsCsbDefault, 16, 8, 4);
- TEST_FIELD(LOCALESIGNATURE, DWORD[2], lsCsbSupported, 24, 8, 4);
+ TEST_TYPE_SIZE (LOCALESIGNATURE, 32)
+ TEST_TYPE_ALIGN (LOCALESIGNATURE, 4)
+ TEST_FIELD_SIZE (LOCALESIGNATURE, lsUsb, 16)
+ TEST_FIELD_ALIGN (LOCALESIGNATURE, lsUsb, 4)
+ TEST_FIELD_OFFSET(LOCALESIGNATURE, lsUsb, 0)
+ TEST_FIELD_SIZE (LOCALESIGNATURE, lsCsbDefault, 8)
+ TEST_FIELD_ALIGN (LOCALESIGNATURE, lsCsbDefault, 4)
+ TEST_FIELD_OFFSET(LOCALESIGNATURE, lsCsbDefault, 16)
+ TEST_FIELD_SIZE (LOCALESIGNATURE, lsCsbSupported, 8)
+ TEST_FIELD_ALIGN (LOCALESIGNATURE, lsCsbSupported, 4)
+ TEST_FIELD_OFFSET(LOCALESIGNATURE, lsCsbSupported, 24)
}
static void test_pack_LOGBRUSH(void)
{
/* LOGBRUSH (pack 4) */
- TEST_TYPE(LOGBRUSH, 12, 4);
- TEST_FIELD(LOGBRUSH, UINT, lbStyle, 0, 4, 4);
- TEST_FIELD(LOGBRUSH, COLORREF, lbColor, 4, 4, 4);
- TEST_FIELD(LOGBRUSH, ULONG_PTR, lbHatch, 8, 4, 4);
+ TEST_TYPE_SIZE (LOGBRUSH, 12)
+ TEST_TYPE_ALIGN (LOGBRUSH, 4)
+ TEST_FIELD_SIZE (LOGBRUSH, lbStyle, 4)
+ TEST_FIELD_ALIGN (LOGBRUSH, lbStyle, 4)
+ TEST_FIELD_OFFSET(LOGBRUSH, lbStyle, 0)
+ TEST_FIELD_SIZE (LOGBRUSH, lbColor, 4)
+ TEST_FIELD_ALIGN (LOGBRUSH, lbColor, 4)
+ TEST_FIELD_OFFSET(LOGBRUSH, lbColor, 4)
+ TEST_FIELD_SIZE (LOGBRUSH, lbHatch, 4)
+ TEST_FIELD_ALIGN (LOGBRUSH, lbHatch, 4)
+ TEST_FIELD_OFFSET(LOGBRUSH, lbHatch, 8)
}
static void test_pack_LOGCOLORSPACEA(void)
{
/* LOGCOLORSPACEA (pack 4) */
- TEST_TYPE(LOGCOLORSPACEA, 328, 4);
- TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsSignature, 0, 4, 4);
- TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsVersion, 4, 4, 4);
- TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsSize, 8, 4, 4);
- TEST_FIELD(LOGCOLORSPACEA, LCSCSTYPE, lcsCSType, 12, 4, 4);
- TEST_FIELD(LOGCOLORSPACEA, LCSGAMUTMATCH, lcsIntent, 16, 4, 4);
- TEST_FIELD(LOGCOLORSPACEA, CIEXYZTRIPLE, lcsEndpoints, 20, 36, 4);
- TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsGammaRed, 56, 4, 4);
- TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsGammaGreen, 60, 4, 4);
- TEST_FIELD(LOGCOLORSPACEA, DWORD, lcsGammaBlue, 64, 4, 4);
- TEST_FIELD(LOGCOLORSPACEA, CHAR[MAX_PATH], lcsFilename, 68, 260, 1);
+ TEST_TYPE_SIZE (LOGCOLORSPACEA, 328)
+ TEST_TYPE_ALIGN (LOGCOLORSPACEA, 4)
+ TEST_FIELD_SIZE (LOGCOLORSPACEA, lcsSignature, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEA, lcsSignature, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEA, lcsSignature, 0)
+ TEST_FIELD_SIZE (LOGCOLORSPACEA, lcsVersion, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEA, lcsVersion, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEA, lcsVersion, 4)
+ TEST_FIELD_SIZE (LOGCOLORSPACEA, lcsSize, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEA, lcsSize, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEA, lcsSize, 8)
+ TEST_FIELD_SIZE (LOGCOLORSPACEA, lcsCSType, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEA, lcsCSType, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEA, lcsCSType, 12)
+ TEST_FIELD_SIZE (LOGCOLORSPACEA, lcsIntent, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEA, lcsIntent, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEA, lcsIntent, 16)
+ TEST_FIELD_SIZE (LOGCOLORSPACEA, lcsEndpoints, 36)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEA, lcsEndpoints, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEA, lcsEndpoints, 20)
+ TEST_FIELD_SIZE (LOGCOLORSPACEA, lcsGammaRed, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEA, lcsGammaRed, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEA, lcsGammaRed, 56)
+ TEST_FIELD_SIZE (LOGCOLORSPACEA, lcsGammaGreen, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEA, lcsGammaGreen, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEA, lcsGammaGreen, 60)
+ TEST_FIELD_SIZE (LOGCOLORSPACEA, lcsGammaBlue, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEA, lcsGammaBlue, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEA, lcsGammaBlue, 64)
+ TEST_FIELD_SIZE (LOGCOLORSPACEA, lcsFilename, 260)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEA, lcsFilename, 1)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEA, lcsFilename, 68)
}
static void test_pack_LOGCOLORSPACEW(void)
{
/* LOGCOLORSPACEW (pack 4) */
- TEST_TYPE(LOGCOLORSPACEW, 588, 4);
- TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsSignature, 0, 4, 4);
- TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsVersion, 4, 4, 4);
- TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsSize, 8, 4, 4);
- TEST_FIELD(LOGCOLORSPACEW, LCSCSTYPE, lcsCSType, 12, 4, 4);
- TEST_FIELD(LOGCOLORSPACEW, LCSGAMUTMATCH, lcsIntent, 16, 4, 4);
- TEST_FIELD(LOGCOLORSPACEW, CIEXYZTRIPLE, lcsEndpoints, 20, 36, 4);
- TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsGammaRed, 56, 4, 4);
- TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsGammaGreen, 60, 4, 4);
- TEST_FIELD(LOGCOLORSPACEW, DWORD, lcsGammaBlue, 64, 4, 4);
- TEST_FIELD(LOGCOLORSPACEW, WCHAR[MAX_PATH], lcsFilename, 68, 520, 2);
+ TEST_TYPE_SIZE (LOGCOLORSPACEW, 588)
+ TEST_TYPE_ALIGN (LOGCOLORSPACEW, 4)
+ TEST_FIELD_SIZE (LOGCOLORSPACEW, lcsSignature, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEW, lcsSignature, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEW, lcsSignature, 0)
+ TEST_FIELD_SIZE (LOGCOLORSPACEW, lcsVersion, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEW, lcsVersion, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEW, lcsVersion, 4)
+ TEST_FIELD_SIZE (LOGCOLORSPACEW, lcsSize, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEW, lcsSize, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEW, lcsSize, 8)
+ TEST_FIELD_SIZE (LOGCOLORSPACEW, lcsCSType, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEW, lcsCSType, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEW, lcsCSType, 12)
+ TEST_FIELD_SIZE (LOGCOLORSPACEW, lcsIntent, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEW, lcsIntent, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEW, lcsIntent, 16)
+ TEST_FIELD_SIZE (LOGCOLORSPACEW, lcsEndpoints, 36)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEW, lcsEndpoints, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEW, lcsEndpoints, 20)
+ TEST_FIELD_SIZE (LOGCOLORSPACEW, lcsGammaRed, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEW, lcsGammaRed, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEW, lcsGammaRed, 56)
+ TEST_FIELD_SIZE (LOGCOLORSPACEW, lcsGammaGreen, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEW, lcsGammaGreen, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEW, lcsGammaGreen, 60)
+ TEST_FIELD_SIZE (LOGCOLORSPACEW, lcsGammaBlue, 4)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEW, lcsGammaBlue, 4)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEW, lcsGammaBlue, 64)
+ TEST_FIELD_SIZE (LOGCOLORSPACEW, lcsFilename, 520)
+ TEST_FIELD_ALIGN (LOGCOLORSPACEW, lcsFilename, 2)
+ TEST_FIELD_OFFSET(LOGCOLORSPACEW, lcsFilename, 68)
}
static void test_pack_LOGFONTA(void)
{
/* LOGFONTA (pack 4) */
- TEST_TYPE(LOGFONTA, 60, 4);
- TEST_FIELD(LOGFONTA, LONG, lfHeight, 0, 4, 4);
- TEST_FIELD(LOGFONTA, LONG, lfWidth, 4, 4, 4);
- TEST_FIELD(LOGFONTA, LONG, lfEscapement, 8, 4, 4);
- TEST_FIELD(LOGFONTA, LONG, lfOrientation, 12, 4, 4);
- TEST_FIELD(LOGFONTA, LONG, lfWeight, 16, 4, 4);
- TEST_FIELD(LOGFONTA, BYTE, lfItalic, 20, 1, 1);
- TEST_FIELD(LOGFONTA, BYTE, lfUnderline, 21, 1, 1);
- TEST_FIELD(LOGFONTA, BYTE, lfStrikeOut, 22, 1, 1);
- TEST_FIELD(LOGFONTA, BYTE, lfCharSet, 23, 1, 1);
- TEST_FIELD(LOGFONTA, BYTE, lfOutPrecision, 24, 1, 1);
- TEST_FIELD(LOGFONTA, BYTE, lfClipPrecision, 25, 1, 1);
- TEST_FIELD(LOGFONTA, BYTE, lfQuality, 26, 1, 1);
- TEST_FIELD(LOGFONTA, BYTE, lfPitchAndFamily, 27, 1, 1);
- TEST_FIELD(LOGFONTA, CHAR[LF_FACESIZE], lfFaceName, 28, 32, 1);
+ TEST_TYPE_SIZE (LOGFONTA, 60)
+ TEST_TYPE_ALIGN (LOGFONTA, 4)
+ TEST_FIELD_SIZE (LOGFONTA, lfHeight, 4)
+ TEST_FIELD_ALIGN (LOGFONTA, lfHeight, 4)
+ TEST_FIELD_OFFSET(LOGFONTA, lfHeight, 0)
+ TEST_FIELD_SIZE (LOGFONTA, lfWidth, 4)
+ TEST_FIELD_ALIGN (LOGFONTA, lfWidth, 4)
+ TEST_FIELD_OFFSET(LOGFONTA, lfWidth, 4)
+ TEST_FIELD_SIZE (LOGFONTA, lfEscapement, 4)
+ TEST_FIELD_ALIGN (LOGFONTA, lfEscapement, 4)
+ TEST_FIELD_OFFSET(LOGFONTA, lfEscapement, 8)
+ TEST_FIELD_SIZE (LOGFONTA, lfOrientation, 4)
+ TEST_FIELD_ALIGN (LOGFONTA, lfOrientation, 4)
+ TEST_FIELD_OFFSET(LOGFONTA, lfOrientation, 12)
+ TEST_FIELD_SIZE (LOGFONTA, lfWeight, 4)
+ TEST_FIELD_ALIGN (LOGFONTA, lfWeight, 4)
+ TEST_FIELD_OFFSET(LOGFONTA, lfWeight, 16)
+ TEST_FIELD_SIZE (LOGFONTA, lfItalic, 1)
+ TEST_FIELD_ALIGN (LOGFONTA, lfItalic, 1)
+ TEST_FIELD_OFFSET(LOGFONTA, lfItalic, 20)
+ TEST_FIELD_SIZE (LOGFONTA, lfUnderline, 1)
+ TEST_FIELD_ALIGN (LOGFONTA, lfUnderline, 1)
+ TEST_FIELD_OFFSET(LOGFONTA, lfUnderline, 21)
+ TEST_FIELD_SIZE (LOGFONTA, lfStrikeOut, 1)
+ TEST_FIELD_ALIGN (LOGFONTA, lfStrikeOut, 1)
+ TEST_FIELD_OFFSET(LOGFONTA, lfStrikeOut, 22)
+ TEST_FIELD_SIZE (LOGFONTA, lfCharSet, 1)
+ TEST_FIELD_ALIGN (LOGFONTA, lfCharSet, 1)
+ TEST_FIELD_OFFSET(LOGFONTA, lfCharSet, 23)
+ TEST_FIELD_SIZE (LOGFONTA, lfOutPrecision, 1)
+ TEST_FIELD_ALIGN (LOGFONTA, lfOutPrecision, 1)
+ TEST_FIELD_OFFSET(LOGFONTA, lfOutPrecision, 24)
+ TEST_FIELD_SIZE (LOGFONTA, lfClipPrecision, 1)
+ TEST_FIELD_ALIGN (LOGFONTA, lfClipPrecision, 1)
+ TEST_FIELD_OFFSET(LOGFONTA, lfClipPrecision, 25)
+ TEST_FIELD_SIZE (LOGFONTA, lfQuality, 1)
+ TEST_FIELD_ALIGN (LOGFONTA, lfQuality, 1)
+ TEST_FIELD_OFFSET(LOGFONTA, lfQuality, 26)
+ TEST_FIELD_SIZE (LOGFONTA, lfPitchAndFamily, 1)
+ TEST_FIELD_ALIGN (LOGFONTA, lfPitchAndFamily, 1)
+ TEST_FIELD_OFFSET(LOGFONTA, lfPitchAndFamily, 27)
+ TEST_FIELD_SIZE (LOGFONTA, lfFaceName, 32)
+ TEST_FIELD_ALIGN (LOGFONTA, lfFaceName, 1)
+ TEST_FIELD_OFFSET(LOGFONTA, lfFaceName, 28)
}
static void test_pack_LOGFONTW(void)
{
/* LOGFONTW (pack 4) */
- TEST_TYPE(LOGFONTW, 92, 4);
- TEST_FIELD(LOGFONTW, LONG, lfHeight, 0, 4, 4);
- TEST_FIELD(LOGFONTW, LONG, lfWidth, 4, 4, 4);
- TEST_FIELD(LOGFONTW, LONG, lfEscapement, 8, 4, 4);
- TEST_FIELD(LOGFONTW, LONG, lfOrientation, 12, 4, 4);
- TEST_FIELD(LOGFONTW, LONG, lfWeight, 16, 4, 4);
- TEST_FIELD(LOGFONTW, BYTE, lfItalic, 20, 1, 1);
- TEST_FIELD(LOGFONTW, BYTE, lfUnderline, 21, 1, 1);
- TEST_FIELD(LOGFONTW, BYTE, lfStrikeOut, 22, 1, 1);
- TEST_FIELD(LOGFONTW, BYTE, lfCharSet, 23, 1, 1);
- TEST_FIELD(LOGFONTW, BYTE, lfOutPrecision, 24, 1, 1);
- TEST_FIELD(LOGFONTW, BYTE, lfClipPrecision, 25, 1, 1);
- TEST_FIELD(LOGFONTW, BYTE, lfQuality, 26, 1, 1);
- TEST_FIELD(LOGFONTW, BYTE, lfPitchAndFamily, 27, 1, 1);
- TEST_FIELD(LOGFONTW, WCHAR[LF_FACESIZE], lfFaceName, 28, 64, 2);
+ TEST_TYPE_SIZE (LOGFONTW, 92)
+ TEST_TYPE_ALIGN (LOGFONTW, 4)
+ TEST_FIELD_SIZE (LOGFONTW, lfHeight, 4)
+ TEST_FIELD_ALIGN (LOGFONTW, lfHeight, 4)
+ TEST_FIELD_OFFSET(LOGFONTW, lfHeight, 0)
+ TEST_FIELD_SIZE (LOGFONTW, lfWidth, 4)
+ TEST_FIELD_ALIGN (LOGFONTW, lfWidth, 4)
+ TEST_FIELD_OFFSET(LOGFONTW, lfWidth, 4)
+ TEST_FIELD_SIZE (LOGFONTW, lfEscapement, 4)
+ TEST_FIELD_ALIGN (LOGFONTW, lfEscapement, 4)
+ TEST_FIELD_OFFSET(LOGFONTW, lfEscapement, 8)
+ TEST_FIELD_SIZE (LOGFONTW, lfOrientation, 4)
+ TEST_FIELD_ALIGN (LOGFONTW, lfOrientation, 4)
+ TEST_FIELD_OFFSET(LOGFONTW, lfOrientation, 12)
+ TEST_FIELD_SIZE (LOGFONTW, lfWeight, 4)
+ TEST_FIELD_ALIGN (LOGFONTW, lfWeight, 4)
+ TEST_FIELD_OFFSET(LOGFONTW, lfWeight, 16)
+ TEST_FIELD_SIZE (LOGFONTW, lfItalic, 1)
+ TEST_FIELD_ALIGN (LOGFONTW, lfItalic, 1)
+ TEST_FIELD_OFFSET(LOGFONTW, lfItalic, 20)
+ TEST_FIELD_SIZE (LOGFONTW, lfUnderline, 1)
+ TEST_FIELD_ALIGN (LOGFONTW, lfUnderline, 1)
+ TEST_FIELD_OFFSET(LOGFONTW, lfUnderline, 21)
+ TEST_FIELD_SIZE (LOGFONTW, lfStrikeOut, 1)
+ TEST_FIELD_ALIGN (LOGFONTW, lfStrikeOut, 1)
+ TEST_FIELD_OFFSET(LOGFONTW, lfStrikeOut, 22)
+ TEST_FIELD_SIZE (LOGFONTW, lfCharSet, 1)
+ TEST_FIELD_ALIGN (LOGFONTW, lfCharSet, 1)
+ TEST_FIELD_OFFSET(LOGFONTW, lfCharSet, 23)
+ TEST_FIELD_SIZE (LOGFONTW, lfOutPrecision, 1)
+ TEST_FIELD_ALIGN (LOGFONTW, lfOutPrecision, 1)
+ TEST_FIELD_OFFSET(LOGFONTW, lfOutPrecision, 24)
+ TEST_FIELD_SIZE (LOGFONTW, lfClipPrecision, 1)
+ TEST_FIELD_ALIGN (LOGFONTW, lfClipPrecision, 1)
+ TEST_FIELD_OFFSET(LOGFONTW, lfClipPrecision, 25)
+ TEST_FIELD_SIZE (LOGFONTW, lfQuality, 1)
+ TEST_FIELD_ALIGN (LOGFONTW, lfQuality, 1)
+ TEST_FIELD_OFFSET(LOGFONTW, lfQuality, 26)
+ TEST_FIELD_SIZE (LOGFONTW, lfPitchAndFamily, 1)
+ TEST_FIELD_ALIGN (LOGFONTW, lfPitchAndFamily, 1)
+ TEST_FIELD_OFFSET(LOGFONTW, lfPitchAndFamily, 27)
+ TEST_FIELD_SIZE (LOGFONTW, lfFaceName, 64)
+ TEST_FIELD_ALIGN (LOGFONTW, lfFaceName, 2)
+ TEST_FIELD_OFFSET(LOGFONTW, lfFaceName, 28)
}
static void test_pack_LOGPEN(void)
{
/* LOGPEN (pack 4) */
- TEST_TYPE(LOGPEN, 16, 4);
- TEST_FIELD(LOGPEN, UINT, lopnStyle, 0, 4, 4);
- TEST_FIELD(LOGPEN, POINT, lopnWidth, 4, 8, 4);
- TEST_FIELD(LOGPEN, COLORREF, lopnColor, 12, 4, 4);
+ TEST_TYPE_SIZE (LOGPEN, 16)
+ TEST_TYPE_ALIGN (LOGPEN, 4)
+ TEST_FIELD_SIZE (LOGPEN, lopnStyle, 4)
+ TEST_FIELD_ALIGN (LOGPEN, lopnStyle, 4)
+ TEST_FIELD_OFFSET(LOGPEN, lopnStyle, 0)
+ TEST_FIELD_SIZE (LOGPEN, lopnWidth, 8)
+ TEST_FIELD_ALIGN (LOGPEN, lopnWidth, 4)
+ TEST_FIELD_OFFSET(LOGPEN, lopnWidth, 4)
+ TEST_FIELD_SIZE (LOGPEN, lopnColor, 4)
+ TEST_FIELD_ALIGN (LOGPEN, lopnColor, 4)
+ TEST_FIELD_OFFSET(LOGPEN, lopnColor, 12)
}
static void test_pack_LPABC(void)
{
/* LPABC */
- TEST_TYPE(LPABC, 4, 4);
- TEST_TYPE_POINTER(LPABC, 12, 4);
+ TEST_TYPE_SIZE (LPABC, 4)
+ TEST_TYPE_ALIGN (LPABC, 4)
+ TEST_TARGET_SIZE (LPABC, 12)
+ TEST_TARGET_ALIGN(LPABC, 4)
}
static void test_pack_LPABCFLOAT(void)
{
/* LPABCFLOAT */
- TEST_TYPE(LPABCFLOAT, 4, 4);
- TEST_TYPE_POINTER(LPABCFLOAT, 12, 4);
+ TEST_TYPE_SIZE (LPABCFLOAT, 4)
+ TEST_TYPE_ALIGN (LPABCFLOAT, 4)
+ TEST_TARGET_SIZE (LPABCFLOAT, 12)
+ TEST_TARGET_ALIGN(LPABCFLOAT, 4)
}
static void test_pack_LPBITMAP(void)
{
/* LPBITMAP */
- TEST_TYPE(LPBITMAP, 4, 4);
- TEST_TYPE_POINTER(LPBITMAP, 24, 4);
+ TEST_TYPE_SIZE (LPBITMAP, 4)
+ TEST_TYPE_ALIGN (LPBITMAP, 4)
+ TEST_TARGET_SIZE (LPBITMAP, 24)
+ TEST_TARGET_ALIGN(LPBITMAP, 4)
}
static void test_pack_LPBITMAPCOREHEADER(void)
{
/* LPBITMAPCOREHEADER */
- TEST_TYPE(LPBITMAPCOREHEADER, 4, 4);
- TEST_TYPE_POINTER(LPBITMAPCOREHEADER, 12, 4);
+ TEST_TYPE_SIZE (LPBITMAPCOREHEADER, 4)
+ TEST_TYPE_ALIGN (LPBITMAPCOREHEADER, 4)
+ TEST_TARGET_SIZE (LPBITMAPCOREHEADER, 12)
+ TEST_TARGET_ALIGN(LPBITMAPCOREHEADER, 4)
}
static void test_pack_LPBITMAPCOREINFO(void)
{
/* LPBITMAPCOREINFO */
- TEST_TYPE(LPBITMAPCOREINFO, 4, 4);
- TEST_TYPE_POINTER(LPBITMAPCOREINFO, 16, 4);
+ TEST_TYPE_SIZE (LPBITMAPCOREINFO, 4)
+ TEST_TYPE_ALIGN (LPBITMAPCOREINFO, 4)
+ TEST_TARGET_SIZE (LPBITMAPCOREINFO, 16)
+ TEST_TARGET_ALIGN(LPBITMAPCOREINFO, 4)
}
static void test_pack_LPBITMAPFILEHEADER(void)
{
/* LPBITMAPFILEHEADER */
- TEST_TYPE(LPBITMAPFILEHEADER, 4, 4);
- TEST_TYPE_POINTER(LPBITMAPFILEHEADER, 14, 2);
+ TEST_TYPE_SIZE (LPBITMAPFILEHEADER, 4)
+ TEST_TYPE_ALIGN (LPBITMAPFILEHEADER, 4)
+ TEST_TARGET_SIZE (LPBITMAPFILEHEADER, 14)
+ TEST_TARGET_ALIGN(LPBITMAPFILEHEADER, 2)
}
static void test_pack_LPBITMAPINFO(void)
{
/* LPBITMAPINFO */
- TEST_TYPE(LPBITMAPINFO, 4, 4);
- TEST_TYPE_POINTER(LPBITMAPINFO, 44, 4);
+ TEST_TYPE_SIZE (LPBITMAPINFO, 4)
+ TEST_TYPE_ALIGN (LPBITMAPINFO, 4)
+ TEST_TARGET_SIZE (LPBITMAPINFO, 44)
+ TEST_TARGET_ALIGN(LPBITMAPINFO, 4)
}
static void test_pack_LPBITMAPINFOHEADER(void)
{
/* LPBITMAPINFOHEADER */
- TEST_TYPE(LPBITMAPINFOHEADER, 4, 4);
- TEST_TYPE_POINTER(LPBITMAPINFOHEADER, 40, 4);
+ TEST_TYPE_SIZE (LPBITMAPINFOHEADER, 4)
+ TEST_TYPE_ALIGN (LPBITMAPINFOHEADER, 4)
+ TEST_TARGET_SIZE (LPBITMAPINFOHEADER, 40)
+ TEST_TARGET_ALIGN(LPBITMAPINFOHEADER, 4)
}
static void test_pack_LPBITMAPV5HEADER(void)
{
/* LPBITMAPV5HEADER */
- TEST_TYPE(LPBITMAPV5HEADER, 4, 4);
- TEST_TYPE_POINTER(LPBITMAPV5HEADER, 124, 4);
+ TEST_TYPE_SIZE (LPBITMAPV5HEADER, 4)
+ TEST_TYPE_ALIGN (LPBITMAPV5HEADER, 4)
+ TEST_TARGET_SIZE (LPBITMAPV5HEADER, 124)
+ TEST_TARGET_ALIGN(LPBITMAPV5HEADER, 4)
}
static void test_pack_LPCHARSETINFO(void)
{
/* LPCHARSETINFO */
- TEST_TYPE(LPCHARSETINFO, 4, 4);
- TEST_TYPE_POINTER(LPCHARSETINFO, 32, 4);
+ TEST_TYPE_SIZE (LPCHARSETINFO, 4)
+ TEST_TYPE_ALIGN (LPCHARSETINFO, 4)
+ TEST_TARGET_SIZE (LPCHARSETINFO, 32)
+ TEST_TARGET_ALIGN(LPCHARSETINFO, 4)
}
static void test_pack_LPCIEXYZ(void)
{
/* LPCIEXYZ */
- TEST_TYPE(LPCIEXYZ, 4, 4);
- TEST_TYPE_POINTER(LPCIEXYZ, 12, 4);
+ TEST_TYPE_SIZE (LPCIEXYZ, 4)
+ TEST_TYPE_ALIGN (LPCIEXYZ, 4)
+ TEST_TARGET_SIZE (LPCIEXYZ, 12)
+ TEST_TARGET_ALIGN(LPCIEXYZ, 4)
}
static void test_pack_LPCIEXYZTRIPLE(void)
{
/* LPCIEXYZTRIPLE */
- TEST_TYPE(LPCIEXYZTRIPLE, 4, 4);
- TEST_TYPE_POINTER(LPCIEXYZTRIPLE, 36, 4);
+ TEST_TYPE_SIZE (LPCIEXYZTRIPLE, 4)
+ TEST_TYPE_ALIGN (LPCIEXYZTRIPLE, 4)
+ TEST_TARGET_SIZE (LPCIEXYZTRIPLE, 36)
+ TEST_TARGET_ALIGN(LPCIEXYZTRIPLE, 4)
}
static void test_pack_LPCOLORADJUSTMENT(void)
{
/* LPCOLORADJUSTMENT */
- TEST_TYPE(LPCOLORADJUSTMENT, 4, 4);
- TEST_TYPE_POINTER(LPCOLORADJUSTMENT, 24, 2);
+ TEST_TYPE_SIZE (LPCOLORADJUSTMENT, 4)
+ TEST_TYPE_ALIGN (LPCOLORADJUSTMENT, 4)
+ TEST_TARGET_SIZE (LPCOLORADJUSTMENT, 24)
+ TEST_TARGET_ALIGN(LPCOLORADJUSTMENT, 2)
}
static void test_pack_LPDEVMODEA(void)
{
/* LPDEVMODEA */
- TEST_TYPE(LPDEVMODEA, 4, 4);
+ TEST_TYPE_SIZE (LPDEVMODEA, 4)
+ TEST_TYPE_ALIGN (LPDEVMODEA, 4)
}
static void test_pack_LPDEVMODEW(void)
{
/* LPDEVMODEW */
- TEST_TYPE(LPDEVMODEW, 4, 4);
+ TEST_TYPE_SIZE (LPDEVMODEW, 4)
+ TEST_TYPE_ALIGN (LPDEVMODEW, 4)
}
static void test_pack_LPDIBSECTION(void)
{
/* LPDIBSECTION */
- TEST_TYPE(LPDIBSECTION, 4, 4);
- TEST_TYPE_POINTER(LPDIBSECTION, 84, 4);
+ TEST_TYPE_SIZE (LPDIBSECTION, 4)
+ TEST_TYPE_ALIGN (LPDIBSECTION, 4)
+ TEST_TARGET_SIZE (LPDIBSECTION, 84)
+ TEST_TARGET_ALIGN(LPDIBSECTION, 4)
}
static void test_pack_LPDISPLAY_DEVICEA(void)
{
/* LPDISPLAY_DEVICEA */
- TEST_TYPE(LPDISPLAY_DEVICEA, 4, 4);
- TEST_TYPE_POINTER(LPDISPLAY_DEVICEA, 424, 4);
+ TEST_TYPE_SIZE (LPDISPLAY_DEVICEA, 4)
+ TEST_TYPE_ALIGN (LPDISPLAY_DEVICEA, 4)
+ TEST_TARGET_SIZE (LPDISPLAY_DEVICEA, 424)
+ TEST_TARGET_ALIGN(LPDISPLAY_DEVICEA, 4)
}
static void test_pack_LPDISPLAY_DEVICEW(void)
{
/* LPDISPLAY_DEVICEW */
- TEST_TYPE(LPDISPLAY_DEVICEW, 4, 4);
- TEST_TYPE_POINTER(LPDISPLAY_DEVICEW, 840, 4);
+ TEST_TYPE_SIZE (LPDISPLAY_DEVICEW, 4)
+ TEST_TYPE_ALIGN (LPDISPLAY_DEVICEW, 4)
+ TEST_TARGET_SIZE (LPDISPLAY_DEVICEW, 840)
+ TEST_TARGET_ALIGN(LPDISPLAY_DEVICEW, 4)
}
static void test_pack_LPDOCINFOA(void)
{
/* LPDOCINFOA */
- TEST_TYPE(LPDOCINFOA, 4, 4);
- TEST_TYPE_POINTER(LPDOCINFOA, 20, 4);
+ TEST_TYPE_SIZE (LPDOCINFOA, 4)
+ TEST_TYPE_ALIGN (LPDOCINFOA, 4)
+ TEST_TARGET_SIZE (LPDOCINFOA, 20)
+ TEST_TARGET_ALIGN(LPDOCINFOA, 4)
}
static void test_pack_LPDOCINFOW(void)
{
/* LPDOCINFOW */
- TEST_TYPE(LPDOCINFOW, 4, 4);
- TEST_TYPE_POINTER(LPDOCINFOW, 20, 4);
+ TEST_TYPE_SIZE (LPDOCINFOW, 4)
+ TEST_TYPE_ALIGN (LPDOCINFOW, 4)
+ TEST_TARGET_SIZE (LPDOCINFOW, 20)
+ TEST_TARGET_ALIGN(LPDOCINFOW, 4)
}
static void test_pack_LPENHMETAHEADER(void)
{
/* LPENHMETAHEADER */
- TEST_TYPE(LPENHMETAHEADER, 4, 4);
- TEST_TYPE_POINTER(LPENHMETAHEADER, 108, 4);
+ TEST_TYPE_SIZE (LPENHMETAHEADER, 4)
+ TEST_TYPE_ALIGN (LPENHMETAHEADER, 4)
+ TEST_TARGET_SIZE (LPENHMETAHEADER, 108)
+ TEST_TARGET_ALIGN(LPENHMETAHEADER, 4)
}
static void test_pack_LPENHMETARECORD(void)
{
/* LPENHMETARECORD */
- TEST_TYPE(LPENHMETARECORD, 4, 4);
- TEST_TYPE_POINTER(LPENHMETARECORD, 12, 4);
+ TEST_TYPE_SIZE (LPENHMETARECORD, 4)
+ TEST_TYPE_ALIGN (LPENHMETARECORD, 4)
+ TEST_TARGET_SIZE (LPENHMETARECORD, 12)
+ TEST_TARGET_ALIGN(LPENHMETARECORD, 4)
}
static void test_pack_LPENUMLOGFONTA(void)
{
/* LPENUMLOGFONTA */
- TEST_TYPE(LPENUMLOGFONTA, 4, 4);
- TEST_TYPE_POINTER(LPENUMLOGFONTA, 156, 4);
+ TEST_TYPE_SIZE (LPENUMLOGFONTA, 4)
+ TEST_TYPE_ALIGN (LPENUMLOGFONTA, 4)
+ TEST_TARGET_SIZE (LPENUMLOGFONTA, 156)
+ TEST_TARGET_ALIGN(LPENUMLOGFONTA, 4)
}
static void test_pack_LPENUMLOGFONTEXA(void)
{
/* LPENUMLOGFONTEXA */
- TEST_TYPE(LPENUMLOGFONTEXA, 4, 4);
- TEST_TYPE_POINTER(LPENUMLOGFONTEXA, 188, 4);
+ TEST_TYPE_SIZE (LPENUMLOGFONTEXA, 4)
+ TEST_TYPE_ALIGN (LPENUMLOGFONTEXA, 4)
+ TEST_TARGET_SIZE (LPENUMLOGFONTEXA, 188)
+ TEST_TARGET_ALIGN(LPENUMLOGFONTEXA, 4)
}
static void test_pack_LPENUMLOGFONTEXW(void)
{
/* LPENUMLOGFONTEXW */
- TEST_TYPE(LPENUMLOGFONTEXW, 4, 4);
- TEST_TYPE_POINTER(LPENUMLOGFONTEXW, 348, 4);
+ TEST_TYPE_SIZE (LPENUMLOGFONTEXW, 4)
+ TEST_TYPE_ALIGN (LPENUMLOGFONTEXW, 4)
+ TEST_TARGET_SIZE (LPENUMLOGFONTEXW, 348)
+ TEST_TARGET_ALIGN(LPENUMLOGFONTEXW, 4)
}
static void test_pack_LPENUMLOGFONTW(void)
{
/* LPENUMLOGFONTW */
- TEST_TYPE(LPENUMLOGFONTW, 4, 4);
- TEST_TYPE_POINTER(LPENUMLOGFONTW, 284, 4);
+ TEST_TYPE_SIZE (LPENUMLOGFONTW, 4)
+ TEST_TYPE_ALIGN (LPENUMLOGFONTW, 4)
+ TEST_TARGET_SIZE (LPENUMLOGFONTW, 284)
+ TEST_TARGET_ALIGN(LPENUMLOGFONTW, 4)
}
static void test_pack_LPEXTLOGFONTA(void)
{
/* LPEXTLOGFONTA */
- TEST_TYPE(LPEXTLOGFONTA, 4, 4);
- TEST_TYPE_POINTER(LPEXTLOGFONTA, 192, 4);
+ TEST_TYPE_SIZE (LPEXTLOGFONTA, 4)
+ TEST_TYPE_ALIGN (LPEXTLOGFONTA, 4)
+ TEST_TARGET_SIZE (LPEXTLOGFONTA, 192)
+ TEST_TARGET_ALIGN(LPEXTLOGFONTA, 4)
}
static void test_pack_LPEXTLOGFONTW(void)
{
/* LPEXTLOGFONTW */
- TEST_TYPE(LPEXTLOGFONTW, 4, 4);
- TEST_TYPE_POINTER(LPEXTLOGFONTW, 320, 4);
+ TEST_TYPE_SIZE (LPEXTLOGFONTW, 4)
+ TEST_TYPE_ALIGN (LPEXTLOGFONTW, 4)
+ TEST_TARGET_SIZE (LPEXTLOGFONTW, 320)
+ TEST_TARGET_ALIGN(LPEXTLOGFONTW, 4)
}
static void test_pack_LPEXTLOGPEN(void)
{
/* LPEXTLOGPEN */
- TEST_TYPE(LPEXTLOGPEN, 4, 4);
- TEST_TYPE_POINTER(LPEXTLOGPEN, 28, 4);
+ TEST_TYPE_SIZE (LPEXTLOGPEN, 4)
+ TEST_TYPE_ALIGN (LPEXTLOGPEN, 4)
+ TEST_TARGET_SIZE (LPEXTLOGPEN, 28)
+ TEST_TARGET_ALIGN(LPEXTLOGPEN, 4)
}
static void test_pack_LPFONTSIGNATURE(void)
{
/* LPFONTSIGNATURE */
- TEST_TYPE(LPFONTSIGNATURE, 4, 4);
- TEST_TYPE_POINTER(LPFONTSIGNATURE, 24, 4);
+ TEST_TYPE_SIZE (LPFONTSIGNATURE, 4)
+ TEST_TYPE_ALIGN (LPFONTSIGNATURE, 4)
+ TEST_TARGET_SIZE (LPFONTSIGNATURE, 24)
+ TEST_TARGET_ALIGN(LPFONTSIGNATURE, 4)
}
static void test_pack_LPGCP_RESULTSA(void)
{
/* LPGCP_RESULTSA */
- TEST_TYPE(LPGCP_RESULTSA, 4, 4);
- TEST_TYPE_POINTER(LPGCP_RESULTSA, 36, 4);
+ TEST_TYPE_SIZE (LPGCP_RESULTSA, 4)
+ TEST_TYPE_ALIGN (LPGCP_RESULTSA, 4)
+ TEST_TARGET_SIZE (LPGCP_RESULTSA, 36)
+ TEST_TARGET_ALIGN(LPGCP_RESULTSA, 4)
}
static void test_pack_LPGCP_RESULTSW(void)
{
/* LPGCP_RESULTSW */
- TEST_TYPE(LPGCP_RESULTSW, 4, 4);
- TEST_TYPE_POINTER(LPGCP_RESULTSW, 36, 4);
+ TEST_TYPE_SIZE (LPGCP_RESULTSW, 4)
+ TEST_TYPE_ALIGN (LPGCP_RESULTSW, 4)
+ TEST_TARGET_SIZE (LPGCP_RESULTSW, 36)
+ TEST_TARGET_ALIGN(LPGCP_RESULTSW, 4)
}
static void test_pack_LPGLYPHMETRICS(void)
{
/* LPGLYPHMETRICS */
- TEST_TYPE(LPGLYPHMETRICS, 4, 4);
- TEST_TYPE_POINTER(LPGLYPHMETRICS, 20, 4);
+ TEST_TYPE_SIZE (LPGLYPHMETRICS, 4)
+ TEST_TYPE_ALIGN (LPGLYPHMETRICS, 4)
+ TEST_TARGET_SIZE (LPGLYPHMETRICS, 20)
+ TEST_TARGET_ALIGN(LPGLYPHMETRICS, 4)
}
static void test_pack_LPGLYPHMETRICSFLOAT(void)
{
/* LPGLYPHMETRICSFLOAT */
- TEST_TYPE(LPGLYPHMETRICSFLOAT, 4, 4);
- TEST_TYPE_POINTER(LPGLYPHMETRICSFLOAT, 24, 4);
+ TEST_TYPE_SIZE (LPGLYPHMETRICSFLOAT, 4)
+ TEST_TYPE_ALIGN (LPGLYPHMETRICSFLOAT, 4)
+ TEST_TARGET_SIZE (LPGLYPHMETRICSFLOAT, 24)
+ TEST_TARGET_ALIGN(LPGLYPHMETRICSFLOAT, 4)
}
static void test_pack_LPGRADIENT_RECT(void)
{
/* LPGRADIENT_RECT */
- TEST_TYPE(LPGRADIENT_RECT, 4, 4);
- TEST_TYPE_POINTER(LPGRADIENT_RECT, 8, 4);
+ TEST_TYPE_SIZE (LPGRADIENT_RECT, 4)
+ TEST_TYPE_ALIGN (LPGRADIENT_RECT, 4)
+ TEST_TARGET_SIZE (LPGRADIENT_RECT, 8)
+ TEST_TARGET_ALIGN(LPGRADIENT_RECT, 4)
}
static void test_pack_LPGRADIENT_TRIANGLE(void)
{
/* LPGRADIENT_TRIANGLE */
- TEST_TYPE(LPGRADIENT_TRIANGLE, 4, 4);
- TEST_TYPE_POINTER(LPGRADIENT_TRIANGLE, 12, 4);
+ TEST_TYPE_SIZE (LPGRADIENT_TRIANGLE, 4)
+ TEST_TYPE_ALIGN (LPGRADIENT_TRIANGLE, 4)
+ TEST_TARGET_SIZE (LPGRADIENT_TRIANGLE, 12)
+ TEST_TARGET_ALIGN(LPGRADIENT_TRIANGLE, 4)
}
static void test_pack_LPHANDLETABLE(void)
{
/* LPHANDLETABLE */
- TEST_TYPE(LPHANDLETABLE, 4, 4);
- TEST_TYPE_POINTER(LPHANDLETABLE, 4, 4);
+ TEST_TYPE_SIZE (LPHANDLETABLE, 4)
+ TEST_TYPE_ALIGN (LPHANDLETABLE, 4)
+ TEST_TARGET_SIZE (LPHANDLETABLE, 4)
+ TEST_TARGET_ALIGN(LPHANDLETABLE, 4)
}
static void test_pack_LPKERNINGPAIR(void)
{
/* LPKERNINGPAIR */
- TEST_TYPE(LPKERNINGPAIR, 4, 4);
- TEST_TYPE_POINTER(LPKERNINGPAIR, 8, 4);
+ TEST_TYPE_SIZE (LPKERNINGPAIR, 4)
+ TEST_TYPE_ALIGN (LPKERNINGPAIR, 4)
+ TEST_TARGET_SIZE (LPKERNINGPAIR, 8)
+ TEST_TARGET_ALIGN(LPKERNINGPAIR, 4)
}
static void test_pack_LPLAYERPLANEDESCRIPTOR(void)
{
/* LPLAYERPLANEDESCRIPTOR */
- TEST_TYPE(LPLAYERPLANEDESCRIPTOR, 4, 4);
- TEST_TYPE_POINTER(LPLAYERPLANEDESCRIPTOR, 32, 4);
+ TEST_TYPE_SIZE (LPLAYERPLANEDESCRIPTOR, 4)
+ TEST_TYPE_ALIGN (LPLAYERPLANEDESCRIPTOR, 4)
+ TEST_TARGET_SIZE (LPLAYERPLANEDESCRIPTOR, 32)
+ TEST_TARGET_ALIGN(LPLAYERPLANEDESCRIPTOR, 4)
}
static void test_pack_LPLOCALESIGNATURE(void)
{
/* LPLOCALESIGNATURE */
- TEST_TYPE(LPLOCALESIGNATURE, 4, 4);
- TEST_TYPE_POINTER(LPLOCALESIGNATURE, 32, 4);
+ TEST_TYPE_SIZE (LPLOCALESIGNATURE, 4)
+ TEST_TYPE_ALIGN (LPLOCALESIGNATURE, 4)
+ TEST_TARGET_SIZE (LPLOCALESIGNATURE, 32)
+ TEST_TARGET_ALIGN(LPLOCALESIGNATURE, 4)
}
static void test_pack_LPLOGBRUSH(void)
{
/* LPLOGBRUSH */
- TEST_TYPE(LPLOGBRUSH, 4, 4);
- TEST_TYPE_POINTER(LPLOGBRUSH, 12, 4);
+ TEST_TYPE_SIZE (LPLOGBRUSH, 4)
+ TEST_TYPE_ALIGN (LPLOGBRUSH, 4)
+ TEST_TARGET_SIZE (LPLOGBRUSH, 12)
+ TEST_TARGET_ALIGN(LPLOGBRUSH, 4)
}
static void test_pack_LPLOGCOLORSPACEA(void)
{
/* LPLOGCOLORSPACEA */
- TEST_TYPE(LPLOGCOLORSPACEA, 4, 4);
- TEST_TYPE_POINTER(LPLOGCOLORSPACEA, 328, 4);
+ TEST_TYPE_SIZE (LPLOGCOLORSPACEA, 4)
+ TEST_TYPE_ALIGN (LPLOGCOLORSPACEA, 4)
+ TEST_TARGET_SIZE (LPLOGCOLORSPACEA, 328)
+ TEST_TARGET_ALIGN(LPLOGCOLORSPACEA, 4)
}
static void test_pack_LPLOGCOLORSPACEW(void)
{
/* LPLOGCOLORSPACEW */
- TEST_TYPE(LPLOGCOLORSPACEW, 4, 4);
- TEST_TYPE_POINTER(LPLOGCOLORSPACEW, 588, 4);
+ TEST_TYPE_SIZE (LPLOGCOLORSPACEW, 4)
+ TEST_TYPE_ALIGN (LPLOGCOLORSPACEW, 4)
+ TEST_TARGET_SIZE (LPLOGCOLORSPACEW, 588)
+ TEST_TARGET_ALIGN(LPLOGCOLORSPACEW, 4)
}
static void test_pack_LPLOGFONTA(void)
{
/* LPLOGFONTA */
- TEST_TYPE(LPLOGFONTA, 4, 4);
- TEST_TYPE_POINTER(LPLOGFONTA, 60, 4);
+ TEST_TYPE_SIZE (LPLOGFONTA, 4)
+ TEST_TYPE_ALIGN (LPLOGFONTA, 4)
+ TEST_TARGET_SIZE (LPLOGFONTA, 60)
+ TEST_TARGET_ALIGN(LPLOGFONTA, 4)
}
static void test_pack_LPLOGFONTW(void)
{
/* LPLOGFONTW */
- TEST_TYPE(LPLOGFONTW, 4, 4);
- TEST_TYPE_POINTER(LPLOGFONTW, 92, 4);
+ TEST_TYPE_SIZE (LPLOGFONTW, 4)
+ TEST_TYPE_ALIGN (LPLOGFONTW, 4)
+ TEST_TARGET_SIZE (LPLOGFONTW, 92)
+ TEST_TARGET_ALIGN(LPLOGFONTW, 4)
}
static void test_pack_LPLOGPEN(void)
{
/* LPLOGPEN */
- TEST_TYPE(LPLOGPEN, 4, 4);
- TEST_TYPE_POINTER(LPLOGPEN, 16, 4);
+ TEST_TYPE_SIZE (LPLOGPEN, 4)
+ TEST_TYPE_ALIGN (LPLOGPEN, 4)
+ TEST_TARGET_SIZE (LPLOGPEN, 16)
+ TEST_TARGET_ALIGN(LPLOGPEN, 4)
}
static void test_pack_LPMAT2(void)
{
/* LPMAT2 */
- TEST_TYPE(LPMAT2, 4, 4);
- TEST_TYPE_POINTER(LPMAT2, 16, 2);
+ TEST_TYPE_SIZE (LPMAT2, 4)
+ TEST_TYPE_ALIGN (LPMAT2, 4)
+ TEST_TARGET_SIZE (LPMAT2, 16)
+ TEST_TARGET_ALIGN(LPMAT2, 2)
}
static void test_pack_LPMETAFILEPICT(void)
{
/* LPMETAFILEPICT */
- TEST_TYPE(LPMETAFILEPICT, 4, 4);
- TEST_TYPE_POINTER(LPMETAFILEPICT, 16, 4);
+ TEST_TYPE_SIZE (LPMETAFILEPICT, 4)
+ TEST_TYPE_ALIGN (LPMETAFILEPICT, 4)
+ TEST_TARGET_SIZE (LPMETAFILEPICT, 16)
+ TEST_TARGET_ALIGN(LPMETAFILEPICT, 4)
}
static void test_pack_LPMETAHEADER(void)
{
/* LPMETAHEADER */
- TEST_TYPE(LPMETAHEADER, 4, 4);
- TEST_TYPE_POINTER(LPMETAHEADER, 18, 2);
+ TEST_TYPE_SIZE (LPMETAHEADER, 4)
+ TEST_TYPE_ALIGN (LPMETAHEADER, 4)
+ TEST_TARGET_SIZE (LPMETAHEADER, 18)
+ TEST_TARGET_ALIGN(LPMETAHEADER, 2)
}
static void test_pack_LPMETARECORD(void)
{
/* LPMETARECORD */
- TEST_TYPE(LPMETARECORD, 4, 4);
- TEST_TYPE_POINTER(LPMETARECORD, 8, 4);
+ TEST_TYPE_SIZE (LPMETARECORD, 4)
+ TEST_TYPE_ALIGN (LPMETARECORD, 4)
+ TEST_TARGET_SIZE (LPMETARECORD, 8)
+ TEST_TARGET_ALIGN(LPMETARECORD, 4)
}
static void test_pack_LPNEWTEXTMETRICA(void)
{
/* LPNEWTEXTMETRICA */
- TEST_TYPE(LPNEWTEXTMETRICA, 4, 4);
- TEST_TYPE_POINTER(LPNEWTEXTMETRICA, 72, 4);
+ TEST_TYPE_SIZE (LPNEWTEXTMETRICA, 4)
+ TEST_TYPE_ALIGN (LPNEWTEXTMETRICA, 4)
+ TEST_TARGET_SIZE (LPNEWTEXTMETRICA, 72)
+ TEST_TARGET_ALIGN(LPNEWTEXTMETRICA, 4)
}
static void test_pack_LPNEWTEXTMETRICW(void)
{
/* LPNEWTEXTMETRICW */
- TEST_TYPE(LPNEWTEXTMETRICW, 4, 4);
- TEST_TYPE_POINTER(LPNEWTEXTMETRICW, 76, 4);
+ TEST_TYPE_SIZE (LPNEWTEXTMETRICW, 4)
+ TEST_TYPE_ALIGN (LPNEWTEXTMETRICW, 4)
+ TEST_TARGET_SIZE (LPNEWTEXTMETRICW, 76)
+ TEST_TARGET_ALIGN(LPNEWTEXTMETRICW, 4)
}
static void test_pack_LPOUTLINETEXTMETRICA(void)
{
/* LPOUTLINETEXTMETRICA */
- TEST_TYPE(LPOUTLINETEXTMETRICA, 4, 4);
- TEST_TYPE_POINTER(LPOUTLINETEXTMETRICA, 212, 4);
+ TEST_TYPE_SIZE (LPOUTLINETEXTMETRICA, 4)
+ TEST_TYPE_ALIGN (LPOUTLINETEXTMETRICA, 4)
+ TEST_TARGET_SIZE (LPOUTLINETEXTMETRICA, 212)
+ TEST_TARGET_ALIGN(LPOUTLINETEXTMETRICA, 4)
}
static void test_pack_LPOUTLINETEXTMETRICW(void)
{
/* LPOUTLINETEXTMETRICW */
- TEST_TYPE(LPOUTLINETEXTMETRICW, 4, 4);
- TEST_TYPE_POINTER(LPOUTLINETEXTMETRICW, 216, 4);
+ TEST_TYPE_SIZE (LPOUTLINETEXTMETRICW, 4)
+ TEST_TYPE_ALIGN (LPOUTLINETEXTMETRICW, 4)
+ TEST_TARGET_SIZE (LPOUTLINETEXTMETRICW, 216)
+ TEST_TARGET_ALIGN(LPOUTLINETEXTMETRICW, 4)
}
static void test_pack_LPPANOSE(void)
{
/* LPPANOSE */
- TEST_TYPE(LPPANOSE, 4, 4);
- TEST_TYPE_POINTER(LPPANOSE, 10, 1);
+ TEST_TYPE_SIZE (LPPANOSE, 4)
+ TEST_TYPE_ALIGN (LPPANOSE, 4)
+ TEST_TARGET_SIZE (LPPANOSE, 10)
+ TEST_TARGET_ALIGN(LPPANOSE, 1)
}
static void test_pack_LPPELARRAY(void)
{
/* LPPELARRAY */
- TEST_TYPE(LPPELARRAY, 4, 4);
- TEST_TYPE_POINTER(LPPELARRAY, 20, 4);
+ TEST_TYPE_SIZE (LPPELARRAY, 4)
+ TEST_TYPE_ALIGN (LPPELARRAY, 4)
+ TEST_TARGET_SIZE (LPPELARRAY, 20)
+ TEST_TARGET_ALIGN(LPPELARRAY, 4)
}
static void test_pack_LPPIXELFORMATDESCRIPTOR(void)
{
/* LPPIXELFORMATDESCRIPTOR */
- TEST_TYPE(LPPIXELFORMATDESCRIPTOR, 4, 4);
- TEST_TYPE_POINTER(LPPIXELFORMATDESCRIPTOR, 40, 4);
+ TEST_TYPE_SIZE (LPPIXELFORMATDESCRIPTOR, 4)
+ TEST_TYPE_ALIGN (LPPIXELFORMATDESCRIPTOR, 4)
+ TEST_TARGET_SIZE (LPPIXELFORMATDESCRIPTOR, 40)
+ TEST_TARGET_ALIGN(LPPIXELFORMATDESCRIPTOR, 4)
}
static void test_pack_LPPOINTFX(void)
{
/* LPPOINTFX */
- TEST_TYPE(LPPOINTFX, 4, 4);
- TEST_TYPE_POINTER(LPPOINTFX, 8, 2);
+ TEST_TYPE_SIZE (LPPOINTFX, 4)
+ TEST_TYPE_ALIGN (LPPOINTFX, 4)
+ TEST_TARGET_SIZE (LPPOINTFX, 8)
+ TEST_TARGET_ALIGN(LPPOINTFX, 2)
}
static void test_pack_LPPOLYTEXTA(void)
{
/* LPPOLYTEXTA */
- TEST_TYPE(LPPOLYTEXTA, 4, 4);
- TEST_TYPE_POINTER(LPPOLYTEXTA, 40, 4);
+ TEST_TYPE_SIZE (LPPOLYTEXTA, 4)
+ TEST_TYPE_ALIGN (LPPOLYTEXTA, 4)
+ TEST_TARGET_SIZE (LPPOLYTEXTA, 40)
+ TEST_TARGET_ALIGN(LPPOLYTEXTA, 4)
}
static void test_pack_LPPOLYTEXTW(void)
{
/* LPPOLYTEXTW */
- TEST_TYPE(LPPOLYTEXTW, 4, 4);
- TEST_TYPE_POINTER(LPPOLYTEXTW, 40, 4);
+ TEST_TYPE_SIZE (LPPOLYTEXTW, 4)
+ TEST_TYPE_ALIGN (LPPOLYTEXTW, 4)
+ TEST_TARGET_SIZE (LPPOLYTEXTW, 40)
+ TEST_TARGET_ALIGN(LPPOLYTEXTW, 4)
}
static void test_pack_LPRASTERIZER_STATUS(void)
{
/* LPRASTERIZER_STATUS */
- TEST_TYPE(LPRASTERIZER_STATUS, 4, 4);
- TEST_TYPE_POINTER(LPRASTERIZER_STATUS, 6, 2);
+ TEST_TYPE_SIZE (LPRASTERIZER_STATUS, 4)
+ TEST_TYPE_ALIGN (LPRASTERIZER_STATUS, 4)
+ TEST_TARGET_SIZE (LPRASTERIZER_STATUS, 6)
+ TEST_TARGET_ALIGN(LPRASTERIZER_STATUS, 2)
}
static void test_pack_LPRGBQUAD(void)
{
/* LPRGBQUAD */
- TEST_TYPE(LPRGBQUAD, 4, 4);
- TEST_TYPE_POINTER(LPRGBQUAD, 4, 1);
+ TEST_TYPE_SIZE (LPRGBQUAD, 4)
+ TEST_TYPE_ALIGN (LPRGBQUAD, 4)
+ TEST_TARGET_SIZE (LPRGBQUAD, 4)
+ TEST_TARGET_ALIGN(LPRGBQUAD, 1)
}
static void test_pack_LPRGNDATA(void)
{
/* LPRGNDATA */
- TEST_TYPE(LPRGNDATA, 4, 4);
- TEST_TYPE_POINTER(LPRGNDATA, 36, 4);
+ TEST_TYPE_SIZE (LPRGNDATA, 4)
+ TEST_TYPE_ALIGN (LPRGNDATA, 4)
+ TEST_TARGET_SIZE (LPRGNDATA, 36)
+ TEST_TARGET_ALIGN(LPRGNDATA, 4)
}
static void test_pack_LPTEXTMETRICA(void)
{
/* LPTEXTMETRICA */
- TEST_TYPE(LPTEXTMETRICA, 4, 4);
- TEST_TYPE_POINTER(LPTEXTMETRICA, 56, 4);
+ TEST_TYPE_SIZE (LPTEXTMETRICA, 4)
+ TEST_TYPE_ALIGN (LPTEXTMETRICA, 4)
+ TEST_TARGET_SIZE (LPTEXTMETRICA, 56)
+ TEST_TARGET_ALIGN(LPTEXTMETRICA, 4)
}
static void test_pack_LPTEXTMETRICW(void)
{
/* LPTEXTMETRICW */
- TEST_TYPE(LPTEXTMETRICW, 4, 4);
- TEST_TYPE_POINTER(LPTEXTMETRICW, 60, 4);
+ TEST_TYPE_SIZE (LPTEXTMETRICW, 4)
+ TEST_TYPE_ALIGN (LPTEXTMETRICW, 4)
+ TEST_TARGET_SIZE (LPTEXTMETRICW, 60)
+ TEST_TARGET_ALIGN(LPTEXTMETRICW, 4)
}
static void test_pack_LPTRIVERTEX(void)
{
/* LPTRIVERTEX */
- TEST_TYPE(LPTRIVERTEX, 4, 4);
- TEST_TYPE_POINTER(LPTRIVERTEX, 16, 4);
+ TEST_TYPE_SIZE (LPTRIVERTEX, 4)
+ TEST_TYPE_ALIGN (LPTRIVERTEX, 4)
+ TEST_TARGET_SIZE (LPTRIVERTEX, 16)
+ TEST_TARGET_ALIGN(LPTRIVERTEX, 4)
}
static void test_pack_LPTTPOLYCURVE(void)
{
/* LPTTPOLYCURVE */
- TEST_TYPE(LPTTPOLYCURVE, 4, 4);
- TEST_TYPE_POINTER(LPTTPOLYCURVE, 12, 2);
+ TEST_TYPE_SIZE (LPTTPOLYCURVE, 4)
+ TEST_TYPE_ALIGN (LPTTPOLYCURVE, 4)
+ TEST_TARGET_SIZE (LPTTPOLYCURVE, 12)
+ TEST_TARGET_ALIGN(LPTTPOLYCURVE, 2)
}
static void test_pack_LPTTPOLYGONHEADER(void)
{
/* LPTTPOLYGONHEADER */
- TEST_TYPE(LPTTPOLYGONHEADER, 4, 4);
- TEST_TYPE_POINTER(LPTTPOLYGONHEADER, 16, 4);
+ TEST_TYPE_SIZE (LPTTPOLYGONHEADER, 4)
+ TEST_TYPE_ALIGN (LPTTPOLYGONHEADER, 4)
+ TEST_TARGET_SIZE (LPTTPOLYGONHEADER, 16)
+ TEST_TARGET_ALIGN(LPTTPOLYGONHEADER, 4)
}
static void test_pack_LPXFORM(void)
{
/* LPXFORM */
- TEST_TYPE(LPXFORM, 4, 4);
- TEST_TYPE_POINTER(LPXFORM, 24, 4);
+ TEST_TYPE_SIZE (LPXFORM, 4)
+ TEST_TYPE_ALIGN (LPXFORM, 4)
+ TEST_TARGET_SIZE (LPXFORM, 24)
+ TEST_TARGET_ALIGN(LPXFORM, 4)
}
static void test_pack_MAT2(void)
{
/* MAT2 (pack 4) */
- TEST_TYPE(MAT2, 16, 2);
- TEST_FIELD(MAT2, FIXED, eM11, 0, 4, 2);
- TEST_FIELD(MAT2, FIXED, eM12, 4, 4, 2);
- TEST_FIELD(MAT2, FIXED, eM21, 8, 4, 2);
- TEST_FIELD(MAT2, FIXED, eM22, 12, 4, 2);
+ TEST_TYPE_SIZE (MAT2, 16)
+ TEST_TYPE_ALIGN (MAT2, 2)
+ TEST_FIELD_SIZE (MAT2, eM11, 4)
+ TEST_FIELD_ALIGN (MAT2, eM11, 2)
+ TEST_FIELD_OFFSET(MAT2, eM11, 0)
+ TEST_FIELD_SIZE (MAT2, eM12, 4)
+ TEST_FIELD_ALIGN (MAT2, eM12, 2)
+ TEST_FIELD_OFFSET(MAT2, eM12, 4)
+ TEST_FIELD_SIZE (MAT2, eM21, 4)
+ TEST_FIELD_ALIGN (MAT2, eM21, 2)
+ TEST_FIELD_OFFSET(MAT2, eM21, 8)
+ TEST_FIELD_SIZE (MAT2, eM22, 4)
+ TEST_FIELD_ALIGN (MAT2, eM22, 2)
+ TEST_FIELD_OFFSET(MAT2, eM22, 12)
}
static void test_pack_METAFILEPICT(void)
{
/* METAFILEPICT (pack 4) */
- TEST_TYPE(METAFILEPICT, 16, 4);
- TEST_FIELD(METAFILEPICT, LONG, mm, 0, 4, 4);
- TEST_FIELD(METAFILEPICT, LONG, xExt, 4, 4, 4);
- TEST_FIELD(METAFILEPICT, LONG, yExt, 8, 4, 4);
- TEST_FIELD(METAFILEPICT, HMETAFILE, hMF, 12, 4, 4);
+ TEST_TYPE_SIZE (METAFILEPICT, 16)
+ TEST_TYPE_ALIGN (METAFILEPICT, 4)
+ TEST_FIELD_SIZE (METAFILEPICT, mm, 4)
+ TEST_FIELD_ALIGN (METAFILEPICT, mm, 4)
+ TEST_FIELD_OFFSET(METAFILEPICT, mm, 0)
+ TEST_FIELD_SIZE (METAFILEPICT, xExt, 4)
+ TEST_FIELD_ALIGN (METAFILEPICT, xExt, 4)
+ TEST_FIELD_OFFSET(METAFILEPICT, xExt, 4)
+ TEST_FIELD_SIZE (METAFILEPICT, yExt, 4)
+ TEST_FIELD_ALIGN (METAFILEPICT, yExt, 4)
+ TEST_FIELD_OFFSET(METAFILEPICT, yExt, 8)
+ TEST_FIELD_SIZE (METAFILEPICT, hMF, 4)
+ TEST_FIELD_ALIGN (METAFILEPICT, hMF, 4)
+ TEST_FIELD_OFFSET(METAFILEPICT, hMF, 12)
}
static void test_pack_METAHEADER(void)
{
/* METAHEADER (pack 2) */
- TEST_TYPE(METAHEADER, 18, 2);
- TEST_FIELD(METAHEADER, WORD, mtType, 0, 2, 2);
- TEST_FIELD(METAHEADER, WORD, mtHeaderSize, 2, 2, 2);
- TEST_FIELD(METAHEADER, WORD, mtVersion, 4, 2, 2);
- TEST_FIELD(METAHEADER, DWORD, mtSize, 6, 4, 2);
- TEST_FIELD(METAHEADER, WORD, mtNoObjects, 10, 2, 2);
- TEST_FIELD(METAHEADER, DWORD, mtMaxRecord, 12, 4, 2);
- TEST_FIELD(METAHEADER, WORD, mtNoParameters, 16, 2, 2);
+ TEST_TYPE_SIZE (METAHEADER, 18)
+ TEST_TYPE_ALIGN (METAHEADER, 2)
+ TEST_FIELD_SIZE (METAHEADER, mtType, 2)
+ TEST_FIELD_ALIGN (METAHEADER, mtType, 2)
+ TEST_FIELD_OFFSET(METAHEADER, mtType, 0)
+ TEST_FIELD_SIZE (METAHEADER, mtHeaderSize, 2)
+ TEST_FIELD_ALIGN (METAHEADER, mtHeaderSize, 2)
+ TEST_FIELD_OFFSET(METAHEADER, mtHeaderSize, 2)
+ TEST_FIELD_SIZE (METAHEADER, mtVersion, 2)
+ TEST_FIELD_ALIGN (METAHEADER, mtVersion, 2)
+ TEST_FIELD_OFFSET(METAHEADER, mtVersion, 4)
+ TEST_FIELD_SIZE (METAHEADER, mtSize, 4)
+ TEST_FIELD_ALIGN (METAHEADER, mtSize, 2)
+ TEST_FIELD_OFFSET(METAHEADER, mtSize, 6)
+ TEST_FIELD_SIZE (METAHEADER, mtNoObjects, 2)
+ TEST_FIELD_ALIGN (METAHEADER, mtNoObjects, 2)
+ TEST_FIELD_OFFSET(METAHEADER, mtNoObjects, 10)
+ TEST_FIELD_SIZE (METAHEADER, mtMaxRecord, 4)
+ TEST_FIELD_ALIGN (METAHEADER, mtMaxRecord, 2)
+ TEST_FIELD_OFFSET(METAHEADER, mtMaxRecord, 12)
+ TEST_FIELD_SIZE (METAHEADER, mtNoParameters, 2)
+ TEST_FIELD_ALIGN (METAHEADER, mtNoParameters, 2)
+ TEST_FIELD_OFFSET(METAHEADER, mtNoParameters, 16)
}
static void test_pack_METARECORD(void)
{
/* METARECORD (pack 4) */
- TEST_TYPE(METARECORD, 8, 4);
- TEST_FIELD(METARECORD, DWORD, rdSize, 0, 4, 4);
- TEST_FIELD(METARECORD, WORD, rdFunction, 4, 2, 2);
- TEST_FIELD(METARECORD, WORD[1], rdParm, 6, 2, 2);
+ TEST_TYPE_SIZE (METARECORD, 8)
+ TEST_TYPE_ALIGN (METARECORD, 4)
+ TEST_FIELD_SIZE (METARECORD, rdSize, 4)
+ TEST_FIELD_ALIGN (METARECORD, rdSize, 4)
+ TEST_FIELD_OFFSET(METARECORD, rdSize, 0)
+ TEST_FIELD_SIZE (METARECORD, rdFunction, 2)
+ TEST_FIELD_ALIGN (METARECORD, rdFunction, 2)
+ TEST_FIELD_OFFSET(METARECORD, rdFunction, 4)
+ TEST_FIELD_SIZE (METARECORD, rdParm, 2)
+ TEST_FIELD_ALIGN (METARECORD, rdParm, 2)
+ TEST_FIELD_OFFSET(METARECORD, rdParm, 6)
}
static void test_pack_MFENUMPROC(void)
{
/* MFENUMPROC */
- TEST_TYPE(MFENUMPROC, 4, 4);
+ TEST_TYPE_SIZE (MFENUMPROC, 4)
+ TEST_TYPE_ALIGN (MFENUMPROC, 4)
}
static void test_pack_NEWTEXTMETRICA(void)
{
/* NEWTEXTMETRICA (pack 4) */
- TEST_TYPE(NEWTEXTMETRICA, 72, 4);
- TEST_FIELD(NEWTEXTMETRICA, LONG, tmHeight, 0, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, LONG, tmAscent, 4, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, LONG, tmDescent, 8, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, LONG, tmInternalLeading, 12, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, LONG, tmExternalLeading, 16, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, LONG, tmAveCharWidth, 20, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, LONG, tmMaxCharWidth, 24, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, LONG, tmWeight, 28, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, LONG, tmOverhang, 32, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, LONG, tmDigitizedAspectX, 36, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, LONG, tmDigitizedAspectY, 40, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, BYTE, tmFirstChar, 44, 1, 1);
- TEST_FIELD(NEWTEXTMETRICA, BYTE, tmLastChar, 45, 1, 1);
- TEST_FIELD(NEWTEXTMETRICA, BYTE, tmDefaultChar, 46, 1, 1);
- TEST_FIELD(NEWTEXTMETRICA, BYTE, tmBreakChar, 47, 1, 1);
- TEST_FIELD(NEWTEXTMETRICA, BYTE, tmItalic, 48, 1, 1);
- TEST_FIELD(NEWTEXTMETRICA, BYTE, tmUnderlined, 49, 1, 1);
- TEST_FIELD(NEWTEXTMETRICA, BYTE, tmStruckOut, 50, 1, 1);
- TEST_FIELD(NEWTEXTMETRICA, BYTE, tmPitchAndFamily, 51, 1, 1);
- TEST_FIELD(NEWTEXTMETRICA, BYTE, tmCharSet, 52, 1, 1);
- TEST_FIELD(NEWTEXTMETRICA, DWORD, ntmFlags, 56, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, UINT, ntmSizeEM, 60, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, UINT, ntmCellHeight, 64, 4, 4);
- TEST_FIELD(NEWTEXTMETRICA, UINT, ntmAvgWidth, 68, 4, 4);
+ TEST_TYPE_SIZE (NEWTEXTMETRICA, 72)
+ TEST_TYPE_ALIGN (NEWTEXTMETRICA, 4)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmHeight, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmHeight, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmHeight, 0)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmAscent, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmAscent, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmAscent, 4)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmDescent, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmDescent, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmDescent, 8)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmInternalLeading, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmInternalLeading, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmInternalLeading, 12)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmExternalLeading, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmExternalLeading, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmExternalLeading, 16)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmAveCharWidth, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmAveCharWidth, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmAveCharWidth, 20)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmMaxCharWidth, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmMaxCharWidth, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmMaxCharWidth, 24)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmWeight, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmWeight, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmWeight, 28)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmOverhang, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmOverhang, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmOverhang, 32)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmDigitizedAspectX, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmDigitizedAspectX, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmDigitizedAspectX, 36)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmDigitizedAspectY, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmDigitizedAspectY, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmDigitizedAspectY, 40)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmFirstChar, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmFirstChar, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmFirstChar, 44)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmLastChar, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmLastChar, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmLastChar, 45)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmDefaultChar, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmDefaultChar, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmDefaultChar, 46)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmBreakChar, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmBreakChar, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmBreakChar, 47)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmItalic, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmItalic, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmItalic, 48)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmUnderlined, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmUnderlined, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmUnderlined, 49)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmStruckOut, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmStruckOut, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmStruckOut, 50)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmPitchAndFamily, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmPitchAndFamily, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmPitchAndFamily, 51)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, tmCharSet, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, tmCharSet, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, tmCharSet, 52)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, ntmFlags, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, ntmFlags, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, ntmFlags, 56)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, ntmSizeEM, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, ntmSizeEM, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, ntmSizeEM, 60)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, ntmCellHeight, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, ntmCellHeight, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, ntmCellHeight, 64)
+ TEST_FIELD_SIZE (NEWTEXTMETRICA, ntmAvgWidth, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICA, ntmAvgWidth, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICA, ntmAvgWidth, 68)
}
static void test_pack_NEWTEXTMETRICEXA(void)
{
/* NEWTEXTMETRICEXA (pack 4) */
- TEST_TYPE(NEWTEXTMETRICEXA, 96, 4);
- TEST_FIELD(NEWTEXTMETRICEXA, NEWTEXTMETRICA, ntmTm, 0, 72, 4);
- TEST_FIELD(NEWTEXTMETRICEXA, FONTSIGNATURE, ntmFontSig, 72, 24, 4);
+ TEST_TYPE_SIZE (NEWTEXTMETRICEXA, 96)
+ TEST_TYPE_ALIGN (NEWTEXTMETRICEXA, 4)
+ TEST_FIELD_SIZE (NEWTEXTMETRICEXA, ntmTm, 72)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICEXA, ntmTm, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICEXA, ntmTm, 0)
+ TEST_FIELD_SIZE (NEWTEXTMETRICEXA, ntmFontSig, 24)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICEXA, ntmFontSig, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICEXA, ntmFontSig, 72)
}
static void test_pack_NEWTEXTMETRICEXW(void)
{
/* NEWTEXTMETRICEXW (pack 4) */
- TEST_TYPE(NEWTEXTMETRICEXW, 100, 4);
- TEST_FIELD(NEWTEXTMETRICEXW, NEWTEXTMETRICW, ntmTm, 0, 76, 4);
- TEST_FIELD(NEWTEXTMETRICEXW, FONTSIGNATURE, ntmFontSig, 76, 24, 4);
+ TEST_TYPE_SIZE (NEWTEXTMETRICEXW, 100)
+ TEST_TYPE_ALIGN (NEWTEXTMETRICEXW, 4)
+ TEST_FIELD_SIZE (NEWTEXTMETRICEXW, ntmTm, 76)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICEXW, ntmTm, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICEXW, ntmTm, 0)
+ TEST_FIELD_SIZE (NEWTEXTMETRICEXW, ntmFontSig, 24)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICEXW, ntmFontSig, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICEXW, ntmFontSig, 76)
}
static void test_pack_NEWTEXTMETRICW(void)
{
/* NEWTEXTMETRICW (pack 4) */
- TEST_TYPE(NEWTEXTMETRICW, 76, 4);
- TEST_FIELD(NEWTEXTMETRICW, LONG, tmHeight, 0, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, LONG, tmAscent, 4, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, LONG, tmDescent, 8, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, LONG, tmInternalLeading, 12, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, LONG, tmExternalLeading, 16, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, LONG, tmAveCharWidth, 20, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, LONG, tmMaxCharWidth, 24, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, LONG, tmWeight, 28, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, LONG, tmOverhang, 32, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, LONG, tmDigitizedAspectX, 36, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, LONG, tmDigitizedAspectY, 40, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, WCHAR, tmFirstChar, 44, 2, 2);
- TEST_FIELD(NEWTEXTMETRICW, WCHAR, tmLastChar, 46, 2, 2);
- TEST_FIELD(NEWTEXTMETRICW, WCHAR, tmDefaultChar, 48, 2, 2);
- TEST_FIELD(NEWTEXTMETRICW, WCHAR, tmBreakChar, 50, 2, 2);
- TEST_FIELD(NEWTEXTMETRICW, BYTE, tmItalic, 52, 1, 1);
- TEST_FIELD(NEWTEXTMETRICW, BYTE, tmUnderlined, 53, 1, 1);
- TEST_FIELD(NEWTEXTMETRICW, BYTE, tmStruckOut, 54, 1, 1);
- TEST_FIELD(NEWTEXTMETRICW, BYTE, tmPitchAndFamily, 55, 1, 1);
- TEST_FIELD(NEWTEXTMETRICW, BYTE, tmCharSet, 56, 1, 1);
- TEST_FIELD(NEWTEXTMETRICW, DWORD, ntmFlags, 60, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, UINT, ntmSizeEM, 64, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, UINT, ntmCellHeight, 68, 4, 4);
- TEST_FIELD(NEWTEXTMETRICW, UINT, ntmAvgWidth, 72, 4, 4);
+ TEST_TYPE_SIZE (NEWTEXTMETRICW, 76)
+ TEST_TYPE_ALIGN (NEWTEXTMETRICW, 4)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmHeight, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmHeight, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmHeight, 0)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmAscent, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmAscent, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmAscent, 4)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmDescent, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmDescent, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmDescent, 8)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmInternalLeading, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmInternalLeading, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmInternalLeading, 12)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmExternalLeading, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmExternalLeading, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmExternalLeading, 16)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmAveCharWidth, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmAveCharWidth, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmAveCharWidth, 20)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmMaxCharWidth, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmMaxCharWidth, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmMaxCharWidth, 24)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmWeight, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmWeight, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmWeight, 28)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmOverhang, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmOverhang, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmOverhang, 32)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmDigitizedAspectX, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmDigitizedAspectX, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmDigitizedAspectX, 36)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmDigitizedAspectY, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmDigitizedAspectY, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmDigitizedAspectY, 40)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmFirstChar, 2)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmFirstChar, 2)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmFirstChar, 44)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmLastChar, 2)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmLastChar, 2)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmLastChar, 46)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmDefaultChar, 2)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmDefaultChar, 2)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmDefaultChar, 48)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmBreakChar, 2)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmBreakChar, 2)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmBreakChar, 50)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmItalic, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmItalic, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmItalic, 52)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmUnderlined, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmUnderlined, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmUnderlined, 53)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmStruckOut, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmStruckOut, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmStruckOut, 54)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmPitchAndFamily, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmPitchAndFamily, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmPitchAndFamily, 55)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, tmCharSet, 1)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, tmCharSet, 1)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, tmCharSet, 56)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, ntmFlags, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, ntmFlags, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, ntmFlags, 60)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, ntmSizeEM, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, ntmSizeEM, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, ntmSizeEM, 64)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, ntmCellHeight, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, ntmCellHeight, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, ntmCellHeight, 68)
+ TEST_FIELD_SIZE (NEWTEXTMETRICW, ntmAvgWidth, 4)
+ TEST_FIELD_ALIGN (NEWTEXTMETRICW, ntmAvgWidth, 4)
+ TEST_FIELD_OFFSET(NEWTEXTMETRICW, ntmAvgWidth, 72)
}
static void test_pack_NPEXTLOGPEN(void)
{
/* NPEXTLOGPEN */
- TEST_TYPE(NPEXTLOGPEN, 4, 4);
- TEST_TYPE_POINTER(NPEXTLOGPEN, 28, 4);
+ TEST_TYPE_SIZE (NPEXTLOGPEN, 4)
+ TEST_TYPE_ALIGN (NPEXTLOGPEN, 4)
+ TEST_TARGET_SIZE (NPEXTLOGPEN, 28)
+ TEST_TARGET_ALIGN(NPEXTLOGPEN, 4)
}
static void test_pack_OLDFONTENUMPROC(void)
{
/* OLDFONTENUMPROC */
- TEST_TYPE(OLDFONTENUMPROC, 4, 4);
+ TEST_TYPE_SIZE (OLDFONTENUMPROC, 4)
+ TEST_TYPE_ALIGN (OLDFONTENUMPROC, 4)
}
static void test_pack_OLDFONTENUMPROCA(void)
{
/* OLDFONTENUMPROCA */
- TEST_TYPE(OLDFONTENUMPROCA, 4, 4);
+ TEST_TYPE_SIZE (OLDFONTENUMPROCA, 4)
+ TEST_TYPE_ALIGN (OLDFONTENUMPROCA, 4)
}
static void test_pack_OLDFONTENUMPROCW(void)
{
/* OLDFONTENUMPROCW */
- TEST_TYPE(OLDFONTENUMPROCW, 4, 4);
+ TEST_TYPE_SIZE (OLDFONTENUMPROCW, 4)
+ TEST_TYPE_ALIGN (OLDFONTENUMPROCW, 4)
}
static void test_pack_OUTLINETEXTMETRICA(void)
{
/* OUTLINETEXTMETRICA (pack 4) */
- TEST_TYPE(OUTLINETEXTMETRICA, 212, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmSize, 0, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, TEXTMETRICA, otmTextMetrics, 4, 56, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, BYTE, otmFiller, 60, 1, 1);
- TEST_FIELD(OUTLINETEXTMETRICA, PANOSE, otmPanoseNumber, 61, 10, 1);
- TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmfsSelection, 72, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmfsType, 76, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, INT, otmsCharSlopeRise, 80, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, INT, otmsCharSlopeRun, 84, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, INT, otmItalicAngle, 88, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmEMSquare, 92, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, INT, otmAscent, 96, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, INT, otmDescent, 100, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmLineGap, 104, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmsCapEmHeight, 108, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmsXHeight, 112, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, RECT, otmrcFontBox, 116, 16, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, INT, otmMacAscent, 132, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, INT, otmMacDescent, 136, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmMacLineGap, 140, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmusMinimumPPEM, 144, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, POINT, otmptSubscriptSize, 148, 8, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, POINT, otmptSubscriptOffset, 156, 8, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, POINT, otmptSuperscriptSize, 164, 8, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, POINT, otmptSuperscriptOffset, 172, 8, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, UINT, otmsStrikeoutSize, 180, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, INT, otmsStrikeoutPosition, 184, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, INT, otmsUnderscoreSize, 188, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, INT, otmsUnderscorePosition, 192, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, LPSTR, otmpFamilyName, 196, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, LPSTR, otmpFaceName, 200, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, LPSTR, otmpStyleName, 204, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICA, LPSTR, otmpFullName, 208, 4, 4);
+ TEST_TYPE_SIZE (OUTLINETEXTMETRICA, 212)
+ TEST_TYPE_ALIGN (OUTLINETEXTMETRICA, 4)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmSize, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmSize, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmSize, 0)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmTextMetrics, 56)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmTextMetrics, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmTextMetrics, 4)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmFiller, 1)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmFiller, 1)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmFiller, 60)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmPanoseNumber, 10)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmPanoseNumber, 1)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmPanoseNumber, 61)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmfsSelection, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmfsSelection, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmfsSelection, 72)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmfsType, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmfsType, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmfsType, 76)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmsCharSlopeRise, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmsCharSlopeRise, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmsCharSlopeRise, 80)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmsCharSlopeRun, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmsCharSlopeRun, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmsCharSlopeRun, 84)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmItalicAngle, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmItalicAngle, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmItalicAngle, 88)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmEMSquare, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmEMSquare, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmEMSquare, 92)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmAscent, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmAscent, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmAscent, 96)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmDescent, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmDescent, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmDescent, 100)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmLineGap, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmLineGap, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmLineGap, 104)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmsCapEmHeight, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmsCapEmHeight, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmsCapEmHeight, 108)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmsXHeight, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmsXHeight, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmsXHeight, 112)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmrcFontBox, 16)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmrcFontBox, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmrcFontBox, 116)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmMacAscent, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmMacAscent, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmMacAscent, 132)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmMacDescent, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmMacDescent, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmMacDescent, 136)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmMacLineGap, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmMacLineGap, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmMacLineGap, 140)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmusMinimumPPEM, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmusMinimumPPEM, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmusMinimumPPEM, 144)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmptSubscriptSize, 8)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmptSubscriptSize, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmptSubscriptSize, 148)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmptSubscriptOffset, 8)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmptSubscriptOffset, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmptSubscriptOffset, 156)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmptSuperscriptSize, 8)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmptSuperscriptSize, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmptSuperscriptSize, 164)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmptSuperscriptOffset, 8)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmptSuperscriptOffset, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmptSuperscriptOffset, 172)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmsStrikeoutSize, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmsStrikeoutSize, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmsStrikeoutSize, 180)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmsStrikeoutPosition, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmsStrikeoutPosition, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmsStrikeoutPosition, 184)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmsUnderscoreSize, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmsUnderscoreSize, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmsUnderscoreSize, 188)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmsUnderscorePosition, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmsUnderscorePosition, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmsUnderscorePosition, 192)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmpFamilyName, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmpFamilyName, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmpFamilyName, 196)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmpFaceName, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmpFaceName, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmpFaceName, 200)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmpStyleName, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmpStyleName, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmpStyleName, 204)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICA, otmpFullName, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICA, otmpFullName, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICA, otmpFullName, 208)
}
static void test_pack_OUTLINETEXTMETRICW(void)
{
/* OUTLINETEXTMETRICW (pack 4) */
- TEST_TYPE(OUTLINETEXTMETRICW, 216, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmSize, 0, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, TEXTMETRICW, otmTextMetrics, 4, 60, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, BYTE, otmFiller, 64, 1, 1);
- TEST_FIELD(OUTLINETEXTMETRICW, PANOSE, otmPanoseNumber, 65, 10, 1);
- TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmfsSelection, 76, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmfsType, 80, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, INT, otmsCharSlopeRise, 84, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, INT, otmsCharSlopeRun, 88, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, INT, otmItalicAngle, 92, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmEMSquare, 96, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, INT, otmAscent, 100, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, INT, otmDescent, 104, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmLineGap, 108, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmsCapEmHeight, 112, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmsXHeight, 116, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, RECT, otmrcFontBox, 120, 16, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, INT, otmMacAscent, 136, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, INT, otmMacDescent, 140, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmMacLineGap, 144, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmusMinimumPPEM, 148, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, POINT, otmptSubscriptSize, 152, 8, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, POINT, otmptSubscriptOffset, 160, 8, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, POINT, otmptSuperscriptSize, 168, 8, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, POINT, otmptSuperscriptOffset, 176, 8, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, UINT, otmsStrikeoutSize, 184, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, INT, otmsStrikeoutPosition, 188, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, INT, otmsUnderscoreSize, 192, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, INT, otmsUnderscorePosition, 196, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, LPSTR, otmpFamilyName, 200, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, LPSTR, otmpFaceName, 204, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, LPSTR, otmpStyleName, 208, 4, 4);
- TEST_FIELD(OUTLINETEXTMETRICW, LPSTR, otmpFullName, 212, 4, 4);
+ TEST_TYPE_SIZE (OUTLINETEXTMETRICW, 216)
+ TEST_TYPE_ALIGN (OUTLINETEXTMETRICW, 4)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmSize, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmSize, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmSize, 0)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmTextMetrics, 60)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmTextMetrics, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmTextMetrics, 4)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmFiller, 1)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmFiller, 1)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmFiller, 64)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmPanoseNumber, 10)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmPanoseNumber, 1)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmPanoseNumber, 65)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmfsSelection, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmfsSelection, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmfsSelection, 76)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmfsType, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmfsType, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmfsType, 80)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmsCharSlopeRise, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmsCharSlopeRise, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmsCharSlopeRise, 84)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmsCharSlopeRun, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmsCharSlopeRun, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmsCharSlopeRun, 88)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmItalicAngle, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmItalicAngle, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmItalicAngle, 92)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmEMSquare, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmEMSquare, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmEMSquare, 96)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmAscent, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmAscent, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmAscent, 100)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmDescent, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmDescent, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmDescent, 104)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmLineGap, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmLineGap, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmLineGap, 108)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmsCapEmHeight, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmsCapEmHeight, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmsCapEmHeight, 112)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmsXHeight, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmsXHeight, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmsXHeight, 116)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmrcFontBox, 16)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmrcFontBox, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmrcFontBox, 120)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmMacAscent, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmMacAscent, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmMacAscent, 136)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmMacDescent, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmMacDescent, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmMacDescent, 140)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmMacLineGap, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmMacLineGap, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmMacLineGap, 144)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmusMinimumPPEM, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmusMinimumPPEM, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmusMinimumPPEM, 148)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmptSubscriptSize, 8)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmptSubscriptSize, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmptSubscriptSize, 152)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmptSubscriptOffset, 8)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmptSubscriptOffset, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmptSubscriptOffset, 160)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmptSuperscriptSize, 8)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmptSuperscriptSize, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmptSuperscriptSize, 168)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmptSuperscriptOffset, 8)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmptSuperscriptOffset, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmptSuperscriptOffset, 176)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmsStrikeoutSize, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmsStrikeoutSize, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmsStrikeoutSize, 184)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmsStrikeoutPosition, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmsStrikeoutPosition, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmsStrikeoutPosition, 188)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmsUnderscoreSize, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmsUnderscoreSize, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmsUnderscoreSize, 192)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmsUnderscorePosition, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmsUnderscorePosition, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmsUnderscorePosition, 196)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmpFamilyName, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmpFamilyName, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmpFamilyName, 200)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmpFaceName, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmpFaceName, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmpFaceName, 204)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmpStyleName, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmpStyleName, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmpStyleName, 208)
+ TEST_FIELD_SIZE (OUTLINETEXTMETRICW, otmpFullName, 4)
+ TEST_FIELD_ALIGN (OUTLINETEXTMETRICW, otmpFullName, 4)
+ TEST_FIELD_OFFSET(OUTLINETEXTMETRICW, otmpFullName, 212)
}
static void test_pack_PABC(void)
{
/* PABC */
- TEST_TYPE(PABC, 4, 4);
- TEST_TYPE_POINTER(PABC, 12, 4);
+ TEST_TYPE_SIZE (PABC, 4)
+ TEST_TYPE_ALIGN (PABC, 4)
+ TEST_TARGET_SIZE (PABC, 12)
+ TEST_TARGET_ALIGN(PABC, 4)
}
static void test_pack_PABCFLOAT(void)
{
/* PABCFLOAT */
- TEST_TYPE(PABCFLOAT, 4, 4);
- TEST_TYPE_POINTER(PABCFLOAT, 12, 4);
+ TEST_TYPE_SIZE (PABCFLOAT, 4)
+ TEST_TYPE_ALIGN (PABCFLOAT, 4)
+ TEST_TARGET_SIZE (PABCFLOAT, 12)
+ TEST_TARGET_ALIGN(PABCFLOAT, 4)
}
static void test_pack_PANOSE(void)
{
/* PANOSE (pack 4) */
- TEST_TYPE(PANOSE, 10, 1);
- TEST_FIELD(PANOSE, BYTE, bFamilyType, 0, 1, 1);
- TEST_FIELD(PANOSE, BYTE, bSerifStyle, 1, 1, 1);
- TEST_FIELD(PANOSE, BYTE, bWeight, 2, 1, 1);
- TEST_FIELD(PANOSE, BYTE, bProportion, 3, 1, 1);
- TEST_FIELD(PANOSE, BYTE, bContrast, 4, 1, 1);
- TEST_FIELD(PANOSE, BYTE, bStrokeVariation, 5, 1, 1);
- TEST_FIELD(PANOSE, BYTE, bArmStyle, 6, 1, 1);
- TEST_FIELD(PANOSE, BYTE, bLetterform, 7, 1, 1);
- TEST_FIELD(PANOSE, BYTE, bMidline, 8, 1, 1);
- TEST_FIELD(PANOSE, BYTE, bXHeight, 9, 1, 1);
+ TEST_TYPE_SIZE (PANOSE, 10)
+ TEST_TYPE_ALIGN (PANOSE, 1)
+ TEST_FIELD_SIZE (PANOSE, bFamilyType, 1)
+ TEST_FIELD_ALIGN (PANOSE, bFamilyType, 1)
+ TEST_FIELD_OFFSET(PANOSE, bFamilyType, 0)
+ TEST_FIELD_SIZE (PANOSE, bSerifStyle, 1)
+ TEST_FIELD_ALIGN (PANOSE, bSerifStyle, 1)
+ TEST_FIELD_OFFSET(PANOSE, bSerifStyle, 1)
+ TEST_FIELD_SIZE (PANOSE, bWeight, 1)
+ TEST_FIELD_ALIGN (PANOSE, bWeight, 1)
+ TEST_FIELD_OFFSET(PANOSE, bWeight, 2)
+ TEST_FIELD_SIZE (PANOSE, bProportion, 1)
+ TEST_FIELD_ALIGN (PANOSE, bProportion, 1)
+ TEST_FIELD_OFFSET(PANOSE, bProportion, 3)
+ TEST_FIELD_SIZE (PANOSE, bContrast, 1)
+ TEST_FIELD_ALIGN (PANOSE, bContrast, 1)
+ TEST_FIELD_OFFSET(PANOSE, bContrast, 4)
+ TEST_FIELD_SIZE (PANOSE, bStrokeVariation, 1)
+ TEST_FIELD_ALIGN (PANOSE, bStrokeVariation, 1)
+ TEST_FIELD_OFFSET(PANOSE, bStrokeVariation, 5)
+ TEST_FIELD_SIZE (PANOSE, bArmStyle, 1)
+ TEST_FIELD_ALIGN (PANOSE, bArmStyle, 1)
+ TEST_FIELD_OFFSET(PANOSE, bArmStyle, 6)
+ TEST_FIELD_SIZE (PANOSE, bLetterform, 1)
+ TEST_FIELD_ALIGN (PANOSE, bLetterform, 1)
+ TEST_FIELD_OFFSET(PANOSE, bLetterform, 7)
+ TEST_FIELD_SIZE (PANOSE, bMidline, 1)
+ TEST_FIELD_ALIGN (PANOSE, bMidline, 1)
+ TEST_FIELD_OFFSET(PANOSE, bMidline, 8)
+ TEST_FIELD_SIZE (PANOSE, bXHeight, 1)
+ TEST_FIELD_ALIGN (PANOSE, bXHeight, 1)
+ TEST_FIELD_OFFSET(PANOSE, bXHeight, 9)
}
static void test_pack_PATTERN(void)
{
/* PATTERN */
- TEST_TYPE(PATTERN, 12, 4);
+ TEST_TYPE_SIZE (PATTERN, 12)
+ TEST_TYPE_ALIGN (PATTERN, 4)
}
static void test_pack_PBITMAP(void)
{
/* PBITMAP */
- TEST_TYPE(PBITMAP, 4, 4);
- TEST_TYPE_POINTER(PBITMAP, 24, 4);
+ TEST_TYPE_SIZE (PBITMAP, 4)
+ TEST_TYPE_ALIGN (PBITMAP, 4)
+ TEST_TARGET_SIZE (PBITMAP, 24)
+ TEST_TARGET_ALIGN(PBITMAP, 4)
}
static void test_pack_PBITMAPCOREHEADER(void)
{
/* PBITMAPCOREHEADER */
- TEST_TYPE(PBITMAPCOREHEADER, 4, 4);
- TEST_TYPE_POINTER(PBITMAPCOREHEADER, 12, 4);
+ TEST_TYPE_SIZE (PBITMAPCOREHEADER, 4)
+ TEST_TYPE_ALIGN (PBITMAPCOREHEADER, 4)
+ TEST_TARGET_SIZE (PBITMAPCOREHEADER, 12)
+ TEST_TARGET_ALIGN(PBITMAPCOREHEADER, 4)
}
static void test_pack_PBITMAPCOREINFO(void)
{
/* PBITMAPCOREINFO */
- TEST_TYPE(PBITMAPCOREINFO, 4, 4);
- TEST_TYPE_POINTER(PBITMAPCOREINFO, 16, 4);
+ TEST_TYPE_SIZE (PBITMAPCOREINFO, 4)
+ TEST_TYPE_ALIGN (PBITMAPCOREINFO, 4)
+ TEST_TARGET_SIZE (PBITMAPCOREINFO, 16)
+ TEST_TARGET_ALIGN(PBITMAPCOREINFO, 4)
}
static void test_pack_PBITMAPFILEHEADER(void)
{
/* PBITMAPFILEHEADER */
- TEST_TYPE(PBITMAPFILEHEADER, 4, 4);
- TEST_TYPE_POINTER(PBITMAPFILEHEADER, 14, 2);
+ TEST_TYPE_SIZE (PBITMAPFILEHEADER, 4)
+ TEST_TYPE_ALIGN (PBITMAPFILEHEADER, 4)
+ TEST_TARGET_SIZE (PBITMAPFILEHEADER, 14)
+ TEST_TARGET_ALIGN(PBITMAPFILEHEADER, 2)
}
static void test_pack_PBITMAPINFO(void)
{
/* PBITMAPINFO */
- TEST_TYPE(PBITMAPINFO, 4, 4);
- TEST_TYPE_POINTER(PBITMAPINFO, 44, 4);
+ TEST_TYPE_SIZE (PBITMAPINFO, 4)
+ TEST_TYPE_ALIGN (PBITMAPINFO, 4)
+ TEST_TARGET_SIZE (PBITMAPINFO, 44)
+ TEST_TARGET_ALIGN(PBITMAPINFO, 4)
}
static void test_pack_PBITMAPINFOHEADER(void)
{
/* PBITMAPINFOHEADER */
- TEST_TYPE(PBITMAPINFOHEADER, 4, 4);
- TEST_TYPE_POINTER(PBITMAPINFOHEADER, 40, 4);
+ TEST_TYPE_SIZE (PBITMAPINFOHEADER, 4)
+ TEST_TYPE_ALIGN (PBITMAPINFOHEADER, 4)
+ TEST_TARGET_SIZE (PBITMAPINFOHEADER, 40)
+ TEST_TARGET_ALIGN(PBITMAPINFOHEADER, 4)
}
static void test_pack_PBITMAPV4HEADER(void)
{
/* PBITMAPV4HEADER */
- TEST_TYPE(PBITMAPV4HEADER, 4, 4);
- TEST_TYPE_POINTER(PBITMAPV4HEADER, 108, 4);
+ TEST_TYPE_SIZE (PBITMAPV4HEADER, 4)
+ TEST_TYPE_ALIGN (PBITMAPV4HEADER, 4)
+ TEST_TARGET_SIZE (PBITMAPV4HEADER, 108)
+ TEST_TARGET_ALIGN(PBITMAPV4HEADER, 4)
}
static void test_pack_PBITMAPV5HEADER(void)
{
/* PBITMAPV5HEADER */
- TEST_TYPE(PBITMAPV5HEADER, 4, 4);
- TEST_TYPE_POINTER(PBITMAPV5HEADER, 124, 4);
+ TEST_TYPE_SIZE (PBITMAPV5HEADER, 4)
+ TEST_TYPE_ALIGN (PBITMAPV5HEADER, 4)
+ TEST_TARGET_SIZE (PBITMAPV5HEADER, 124)
+ TEST_TARGET_ALIGN(PBITMAPV5HEADER, 4)
}
static void test_pack_PBLENDFUNCTION(void)
{
/* PBLENDFUNCTION */
- TEST_TYPE(PBLENDFUNCTION, 4, 4);
- TEST_TYPE_POINTER(PBLENDFUNCTION, 4, 1);
+ TEST_TYPE_SIZE (PBLENDFUNCTION, 4)
+ TEST_TYPE_ALIGN (PBLENDFUNCTION, 4)
+ TEST_TARGET_SIZE (PBLENDFUNCTION, 4)
+ TEST_TARGET_ALIGN(PBLENDFUNCTION, 1)
}
static void test_pack_PCHARSETINFO(void)
{
/* PCHARSETINFO */
- TEST_TYPE(PCHARSETINFO, 4, 4);
- TEST_TYPE_POINTER(PCHARSETINFO, 32, 4);
+ TEST_TYPE_SIZE (PCHARSETINFO, 4)
+ TEST_TYPE_ALIGN (PCHARSETINFO, 4)
+ TEST_TARGET_SIZE (PCHARSETINFO, 32)
+ TEST_TARGET_ALIGN(PCHARSETINFO, 4)
}
static void test_pack_PCOLORADJUSTMENT(void)
{
/* PCOLORADJUSTMENT */
- TEST_TYPE(PCOLORADJUSTMENT, 4, 4);
- TEST_TYPE_POINTER(PCOLORADJUSTMENT, 24, 2);
+ TEST_TYPE_SIZE (PCOLORADJUSTMENT, 4)
+ TEST_TYPE_ALIGN (PCOLORADJUSTMENT, 4)
+ TEST_TARGET_SIZE (PCOLORADJUSTMENT, 24)
+ TEST_TARGET_ALIGN(PCOLORADJUSTMENT, 2)
}
static void test_pack_PDEVMODEA(void)
{
/* PDEVMODEA */
- TEST_TYPE(PDEVMODEA, 4, 4);
+ TEST_TYPE_SIZE (PDEVMODEA, 4)
+ TEST_TYPE_ALIGN (PDEVMODEA, 4)
}
static void test_pack_PDEVMODEW(void)
{
/* PDEVMODEW */
- TEST_TYPE(PDEVMODEW, 4, 4);
+ TEST_TYPE_SIZE (PDEVMODEW, 4)
+ TEST_TYPE_ALIGN (PDEVMODEW, 4)
}
static void test_pack_PDIBSECTION(void)
{
/* PDIBSECTION */
- TEST_TYPE(PDIBSECTION, 4, 4);
- TEST_TYPE_POINTER(PDIBSECTION, 84, 4);
+ TEST_TYPE_SIZE (PDIBSECTION, 4)
+ TEST_TYPE_ALIGN (PDIBSECTION, 4)
+ TEST_TARGET_SIZE (PDIBSECTION, 84)
+ TEST_TARGET_ALIGN(PDIBSECTION, 4)
}
static void test_pack_PDISPLAY_DEVICEA(void)
{
/* PDISPLAY_DEVICEA */
- TEST_TYPE(PDISPLAY_DEVICEA, 4, 4);
- TEST_TYPE_POINTER(PDISPLAY_DEVICEA, 424, 4);
+ TEST_TYPE_SIZE (PDISPLAY_DEVICEA, 4)
+ TEST_TYPE_ALIGN (PDISPLAY_DEVICEA, 4)
+ TEST_TARGET_SIZE (PDISPLAY_DEVICEA, 424)
+ TEST_TARGET_ALIGN(PDISPLAY_DEVICEA, 4)
}
static void test_pack_PDISPLAY_DEVICEW(void)
{
/* PDISPLAY_DEVICEW */
- TEST_TYPE(PDISPLAY_DEVICEW, 4, 4);
- TEST_TYPE_POINTER(PDISPLAY_DEVICEW, 840, 4);
+ TEST_TYPE_SIZE (PDISPLAY_DEVICEW, 4)
+ TEST_TYPE_ALIGN (PDISPLAY_DEVICEW, 4)
+ TEST_TARGET_SIZE (PDISPLAY_DEVICEW, 840)
+ TEST_TARGET_ALIGN(PDISPLAY_DEVICEW, 4)
}
static void test_pack_PELARRAY(void)
{
/* PELARRAY (pack 4) */
- TEST_TYPE(PELARRAY, 20, 4);
- TEST_FIELD(PELARRAY, LONG, paXCount, 0, 4, 4);
- TEST_FIELD(PELARRAY, LONG, paYCount, 4, 4, 4);
- TEST_FIELD(PELARRAY, LONG, paXExt, 8, 4, 4);
- TEST_FIELD(PELARRAY, LONG, paYExt, 12, 4, 4);
- TEST_FIELD(PELARRAY, BYTE, paRGBs, 16, 1, 1);
+ TEST_TYPE_SIZE (PELARRAY, 20)
+ TEST_TYPE_ALIGN (PELARRAY, 4)
+ TEST_FIELD_SIZE (PELARRAY, paXCount, 4)
+ TEST_FIELD_ALIGN (PELARRAY, paXCount, 4)
+ TEST_FIELD_OFFSET(PELARRAY, paXCount, 0)
+ TEST_FIELD_SIZE (PELARRAY, paYCount, 4)
+ TEST_FIELD_ALIGN (PELARRAY, paYCount, 4)
+ TEST_FIELD_OFFSET(PELARRAY, paYCount, 4)
+ TEST_FIELD_SIZE (PELARRAY, paXExt, 4)
+ TEST_FIELD_ALIGN (PELARRAY, paXExt, 4)
+ TEST_FIELD_OFFSET(PELARRAY, paXExt, 8)
+ TEST_FIELD_SIZE (PELARRAY, paYExt, 4)
+ TEST_FIELD_ALIGN (PELARRAY, paYExt, 4)
+ TEST_FIELD_OFFSET(PELARRAY, paYExt, 12)
+ TEST_FIELD_SIZE (PELARRAY, paRGBs, 1)
+ TEST_FIELD_ALIGN (PELARRAY, paRGBs, 1)
+ TEST_FIELD_OFFSET(PELARRAY, paRGBs, 16)
}
static void test_pack_PEMR(void)
{
/* PEMR */
- TEST_TYPE(PEMR, 4, 4);
- TEST_TYPE_POINTER(PEMR, 8, 4);
+ TEST_TYPE_SIZE (PEMR, 4)
+ TEST_TYPE_ALIGN (PEMR, 4)
+ TEST_TARGET_SIZE (PEMR, 8)
+ TEST_TARGET_ALIGN(PEMR, 4)
}
static void test_pack_PEMRABORTPATH(void)
{
/* PEMRABORTPATH */
- TEST_TYPE(PEMRABORTPATH, 4, 4);
- TEST_TYPE_POINTER(PEMRABORTPATH, 8, 4);
+ TEST_TYPE_SIZE (PEMRABORTPATH, 4)
+ TEST_TYPE_ALIGN (PEMRABORTPATH, 4)
+ TEST_TARGET_SIZE (PEMRABORTPATH, 8)
+ TEST_TARGET_ALIGN(PEMRABORTPATH, 4)
}
static void test_pack_PEMRANGLEARC(void)
{
/* PEMRANGLEARC */
- TEST_TYPE(PEMRANGLEARC, 4, 4);
- TEST_TYPE_POINTER(PEMRANGLEARC, 28, 4);
+ TEST_TYPE_SIZE (PEMRANGLEARC, 4)
+ TEST_TYPE_ALIGN (PEMRANGLEARC, 4)
+ TEST_TARGET_SIZE (PEMRANGLEARC, 28)
+ TEST_TARGET_ALIGN(PEMRANGLEARC, 4)
}
static void test_pack_PEMRARC(void)
{
/* PEMRARC */
- TEST_TYPE(PEMRARC, 4, 4);
- TEST_TYPE_POINTER(PEMRARC, 40, 4);
+ TEST_TYPE_SIZE (PEMRARC, 4)
+ TEST_TYPE_ALIGN (PEMRARC, 4)
+ TEST_TARGET_SIZE (PEMRARC, 40)
+ TEST_TARGET_ALIGN(PEMRARC, 4)
}
static void test_pack_PEMRARCTO(void)
{
/* PEMRARCTO */
- TEST_TYPE(PEMRARCTO, 4, 4);
- TEST_TYPE_POINTER(PEMRARCTO, 40, 4);
+ TEST_TYPE_SIZE (PEMRARCTO, 4)
+ TEST_TYPE_ALIGN (PEMRARCTO, 4)
+ TEST_TARGET_SIZE (PEMRARCTO, 40)
+ TEST_TARGET_ALIGN(PEMRARCTO, 4)
}
static void test_pack_PEMRBEGINPATH(void)
{
/* PEMRBEGINPATH */
- TEST_TYPE(PEMRBEGINPATH, 4, 4);
- TEST_TYPE_POINTER(PEMRBEGINPATH, 8, 4);
+ TEST_TYPE_SIZE (PEMRBEGINPATH, 4)
+ TEST_TYPE_ALIGN (PEMRBEGINPATH, 4)
+ TEST_TARGET_SIZE (PEMRBEGINPATH, 8)
+ TEST_TARGET_ALIGN(PEMRBEGINPATH, 4)
}
static void test_pack_PEMRBITBLT(void)
{
/* PEMRBITBLT */
- TEST_TYPE(PEMRBITBLT, 4, 4);
- TEST_TYPE_POINTER(PEMRBITBLT, 100, 4);
+ TEST_TYPE_SIZE (PEMRBITBLT, 4)
+ TEST_TYPE_ALIGN (PEMRBITBLT, 4)
+ TEST_TARGET_SIZE (PEMRBITBLT, 100)
+ TEST_TARGET_ALIGN(PEMRBITBLT, 4)
}
static void test_pack_PEMRCHORD(void)
{
/* PEMRCHORD */
- TEST_TYPE(PEMRCHORD, 4, 4);
- TEST_TYPE_POINTER(PEMRCHORD, 40, 4);
+ TEST_TYPE_SIZE (PEMRCHORD, 4)
+ TEST_TYPE_ALIGN (PEMRCHORD, 4)
+ TEST_TARGET_SIZE (PEMRCHORD, 40)
+ TEST_TARGET_ALIGN(PEMRCHORD, 4)
}
static void test_pack_PEMRCLOSEFIGURE(void)
{
/* PEMRCLOSEFIGURE */
- TEST_TYPE(PEMRCLOSEFIGURE, 4, 4);
- TEST_TYPE_POINTER(PEMRCLOSEFIGURE, 8, 4);
+ TEST_TYPE_SIZE (PEMRCLOSEFIGURE, 4)
+ TEST_TYPE_ALIGN (PEMRCLOSEFIGURE, 4)
+ TEST_TARGET_SIZE (PEMRCLOSEFIGURE, 8)
+ TEST_TARGET_ALIGN(PEMRCLOSEFIGURE, 4)
}
static void test_pack_PEMRCREATEBRUSHINDIRECT(void)
{
/* PEMRCREATEBRUSHINDIRECT */
- TEST_TYPE(PEMRCREATEBRUSHINDIRECT, 4, 4);
- TEST_TYPE_POINTER(PEMRCREATEBRUSHINDIRECT, 24, 4);
+ TEST_TYPE_SIZE (PEMRCREATEBRUSHINDIRECT, 4)
+ TEST_TYPE_ALIGN (PEMRCREATEBRUSHINDIRECT, 4)
+ TEST_TARGET_SIZE (PEMRCREATEBRUSHINDIRECT, 24)
+ TEST_TARGET_ALIGN(PEMRCREATEBRUSHINDIRECT, 4)
}
static void test_pack_PEMRCREATECOLORSPACE(void)
{
/* PEMRCREATECOLORSPACE */
- TEST_TYPE(PEMRCREATECOLORSPACE, 4, 4);
- TEST_TYPE_POINTER(PEMRCREATECOLORSPACE, 340, 4);
+ TEST_TYPE_SIZE (PEMRCREATECOLORSPACE, 4)
+ TEST_TYPE_ALIGN (PEMRCREATECOLORSPACE, 4)
+ TEST_TARGET_SIZE (PEMRCREATECOLORSPACE, 340)
+ TEST_TARGET_ALIGN(PEMRCREATECOLORSPACE, 4)
}
static void test_pack_PEMRCREATECOLORSPACEW(void)
{
/* PEMRCREATECOLORSPACEW */
- TEST_TYPE(PEMRCREATECOLORSPACEW, 4, 4);
- TEST_TYPE_POINTER(PEMRCREATECOLORSPACEW, 612, 4);
+ TEST_TYPE_SIZE (PEMRCREATECOLORSPACEW, 4)
+ TEST_TYPE_ALIGN (PEMRCREATECOLORSPACEW, 4)
+ TEST_TARGET_SIZE (PEMRCREATECOLORSPACEW, 612)
+ TEST_TARGET_ALIGN(PEMRCREATECOLORSPACEW, 4)
}
static void test_pack_PEMRCREATEDIBPATTERNBRUSHPT(void)
{
/* PEMRCREATEDIBPATTERNBRUSHPT */
- TEST_TYPE(PEMRCREATEDIBPATTERNBRUSHPT, 4, 4);
- TEST_TYPE_POINTER(PEMRCREATEDIBPATTERNBRUSHPT, 32, 4);
+ TEST_TYPE_SIZE (PEMRCREATEDIBPATTERNBRUSHPT, 4)
+ TEST_TYPE_ALIGN (PEMRCREATEDIBPATTERNBRUSHPT, 4)
+ TEST_TARGET_SIZE (PEMRCREATEDIBPATTERNBRUSHPT, 32)
+ TEST_TARGET_ALIGN(PEMRCREATEDIBPATTERNBRUSHPT, 4)
}
static void test_pack_PEMRCREATEMONOBRUSH(void)
{
/* PEMRCREATEMONOBRUSH */
- TEST_TYPE(PEMRCREATEMONOBRUSH, 4, 4);
- TEST_TYPE_POINTER(PEMRCREATEMONOBRUSH, 32, 4);
+ TEST_TYPE_SIZE (PEMRCREATEMONOBRUSH, 4)
+ TEST_TYPE_ALIGN (PEMRCREATEMONOBRUSH, 4)
+ TEST_TARGET_SIZE (PEMRCREATEMONOBRUSH, 32)
+ TEST_TARGET_ALIGN(PEMRCREATEMONOBRUSH, 4)
}
static void test_pack_PEMRCREATEPALETTE(void)
{
/* PEMRCREATEPALETTE */
- TEST_TYPE(PEMRCREATEPALETTE, 4, 4);
- TEST_TYPE_POINTER(PEMRCREATEPALETTE, 20, 4);
+ TEST_TYPE_SIZE (PEMRCREATEPALETTE, 4)
+ TEST_TYPE_ALIGN (PEMRCREATEPALETTE, 4)
+ TEST_TARGET_SIZE (PEMRCREATEPALETTE, 20)
+ TEST_TARGET_ALIGN(PEMRCREATEPALETTE, 4)
}
static void test_pack_PEMRCREATEPEN(void)
{
/* PEMRCREATEPEN */
- TEST_TYPE(PEMRCREATEPEN, 4, 4);
- TEST_TYPE_POINTER(PEMRCREATEPEN, 28, 4);
+ TEST_TYPE_SIZE (PEMRCREATEPEN, 4)
+ TEST_TYPE_ALIGN (PEMRCREATEPEN, 4)
+ TEST_TARGET_SIZE (PEMRCREATEPEN, 28)
+ TEST_TARGET_ALIGN(PEMRCREATEPEN, 4)
}
static void test_pack_PEMRDELETECOLORSPACE(void)
{
/* PEMRDELETECOLORSPACE */
- TEST_TYPE(PEMRDELETECOLORSPACE, 4, 4);
- TEST_TYPE_POINTER(PEMRDELETECOLORSPACE, 12, 4);
+ TEST_TYPE_SIZE (PEMRDELETECOLORSPACE, 4)
+ TEST_TYPE_ALIGN (PEMRDELETECOLORSPACE, 4)
+ TEST_TARGET_SIZE (PEMRDELETECOLORSPACE, 12)
+ TEST_TARGET_ALIGN(PEMRDELETECOLORSPACE, 4)
}
static void test_pack_PEMRDELETEOBJECT(void)
{
/* PEMRDELETEOBJECT */
- TEST_TYPE(PEMRDELETEOBJECT, 4, 4);
- TEST_TYPE_POINTER(PEMRDELETEOBJECT, 12, 4);
+ TEST_TYPE_SIZE (PEMRDELETEOBJECT, 4)
+ TEST_TYPE_ALIGN (PEMRDELETEOBJECT, 4)
+ TEST_TARGET_SIZE (PEMRDELETEOBJECT, 12)
+ TEST_TARGET_ALIGN(PEMRDELETEOBJECT, 4)
}
static void test_pack_PEMRELLIPSE(void)
{
/* PEMRELLIPSE */
- TEST_TYPE(PEMRELLIPSE, 4, 4);
- TEST_TYPE_POINTER(PEMRELLIPSE, 24, 4);
+ TEST_TYPE_SIZE (PEMRELLIPSE, 4)
+ TEST_TYPE_ALIGN (PEMRELLIPSE, 4)
+ TEST_TARGET_SIZE (PEMRELLIPSE, 24)
+ TEST_TARGET_ALIGN(PEMRELLIPSE, 4)
}
static void test_pack_PEMRENDPATH(void)
{
/* PEMRENDPATH */
- TEST_TYPE(PEMRENDPATH, 4, 4);
- TEST_TYPE_POINTER(PEMRENDPATH, 8, 4);
+ TEST_TYPE_SIZE (PEMRENDPATH, 4)
+ TEST_TYPE_ALIGN (PEMRENDPATH, 4)
+ TEST_TARGET_SIZE (PEMRENDPATH, 8)
+ TEST_TARGET_ALIGN(PEMRENDPATH, 4)
}
static void test_pack_PEMREOF(void)
{
/* PEMREOF */
- TEST_TYPE(PEMREOF, 4, 4);
- TEST_TYPE_POINTER(PEMREOF, 20, 4);
+ TEST_TYPE_SIZE (PEMREOF, 4)
+ TEST_TYPE_ALIGN (PEMREOF, 4)
+ TEST_TARGET_SIZE (PEMREOF, 20)
+ TEST_TARGET_ALIGN(PEMREOF, 4)
}
static void test_pack_PEMREXCLUDECLIPRECT(void)
{
/* PEMREXCLUDECLIPRECT */
- TEST_TYPE(PEMREXCLUDECLIPRECT, 4, 4);
- TEST_TYPE_POINTER(PEMREXCLUDECLIPRECT, 24, 4);
+ TEST_TYPE_SIZE (PEMREXCLUDECLIPRECT, 4)
+ TEST_TYPE_ALIGN (PEMREXCLUDECLIPRECT, 4)
+ TEST_TARGET_SIZE (PEMREXCLUDECLIPRECT, 24)
+ TEST_TARGET_ALIGN(PEMREXCLUDECLIPRECT, 4)
}
static void test_pack_PEMREXTCREATEFONTINDIRECTW(void)
{
/* PEMREXTCREATEFONTINDIRECTW */
- TEST_TYPE(PEMREXTCREATEFONTINDIRECTW, 4, 4);
- TEST_TYPE_POINTER(PEMREXTCREATEFONTINDIRECTW, 332, 4);
+ TEST_TYPE_SIZE (PEMREXTCREATEFONTINDIRECTW, 4)
+ TEST_TYPE_ALIGN (PEMREXTCREATEFONTINDIRECTW, 4)
+ TEST_TARGET_SIZE (PEMREXTCREATEFONTINDIRECTW, 332)
+ TEST_TARGET_ALIGN(PEMREXTCREATEFONTINDIRECTW, 4)
}
static void test_pack_PEMREXTCREATEPEN(void)
{
/* PEMREXTCREATEPEN */
- TEST_TYPE(PEMREXTCREATEPEN, 4, 4);
- TEST_TYPE_POINTER(PEMREXTCREATEPEN, 56, 4);
+ TEST_TYPE_SIZE (PEMREXTCREATEPEN, 4)
+ TEST_TYPE_ALIGN (PEMREXTCREATEPEN, 4)
+ TEST_TARGET_SIZE (PEMREXTCREATEPEN, 56)
+ TEST_TARGET_ALIGN(PEMREXTCREATEPEN, 4)
}
static void test_pack_PEMREXTFLOODFILL(void)
{
/* PEMREXTFLOODFILL */
- TEST_TYPE(PEMREXTFLOODFILL, 4, 4);
- TEST_TYPE_POINTER(PEMREXTFLOODFILL, 24, 4);
+ TEST_TYPE_SIZE (PEMREXTFLOODFILL, 4)
+ TEST_TYPE_ALIGN (PEMREXTFLOODFILL, 4)
+ TEST_TARGET_SIZE (PEMREXTFLOODFILL, 24)
+ TEST_TARGET_ALIGN(PEMREXTFLOODFILL, 4)
}
static void test_pack_PEMREXTSELECTCLIPRGN(void)
{
/* PEMREXTSELECTCLIPRGN */
- TEST_TYPE(PEMREXTSELECTCLIPRGN, 4, 4);
- TEST_TYPE_POINTER(PEMREXTSELECTCLIPRGN, 20, 4);
+ TEST_TYPE_SIZE (PEMREXTSELECTCLIPRGN, 4)
+ TEST_TYPE_ALIGN (PEMREXTSELECTCLIPRGN, 4)
+ TEST_TARGET_SIZE (PEMREXTSELECTCLIPRGN, 20)
+ TEST_TARGET_ALIGN(PEMREXTSELECTCLIPRGN, 4)
}
static void test_pack_PEMREXTTEXTOUTA(void)
{
/* PEMREXTTEXTOUTA */
- TEST_TYPE(PEMREXTTEXTOUTA, 4, 4);
- TEST_TYPE_POINTER(PEMREXTTEXTOUTA, 76, 4);
+ TEST_TYPE_SIZE (PEMREXTTEXTOUTA, 4)
+ TEST_TYPE_ALIGN (PEMREXTTEXTOUTA, 4)
+ TEST_TARGET_SIZE (PEMREXTTEXTOUTA, 76)
+ TEST_TARGET_ALIGN(PEMREXTTEXTOUTA, 4)
}
static void test_pack_PEMREXTTEXTOUTW(void)
{
/* PEMREXTTEXTOUTW */
- TEST_TYPE(PEMREXTTEXTOUTW, 4, 4);
- TEST_TYPE_POINTER(PEMREXTTEXTOUTW, 76, 4);
+ TEST_TYPE_SIZE (PEMREXTTEXTOUTW, 4)
+ TEST_TYPE_ALIGN (PEMREXTTEXTOUTW, 4)
+ TEST_TARGET_SIZE (PEMREXTTEXTOUTW, 76)
+ TEST_TARGET_ALIGN(PEMREXTTEXTOUTW, 4)
}
static void test_pack_PEMRFILLPATH(void)
{
/* PEMRFILLPATH */
- TEST_TYPE(PEMRFILLPATH, 4, 4);
- TEST_TYPE_POINTER(PEMRFILLPATH, 24, 4);
+ TEST_TYPE_SIZE (PEMRFILLPATH, 4)
+ TEST_TYPE_ALIGN (PEMRFILLPATH, 4)
+ TEST_TARGET_SIZE (PEMRFILLPATH, 24)
+ TEST_TARGET_ALIGN(PEMRFILLPATH, 4)
}
static void test_pack_PEMRFILLRGN(void)
{
/* PEMRFILLRGN */
- TEST_TYPE(PEMRFILLRGN, 4, 4);
- TEST_TYPE_POINTER(PEMRFILLRGN, 36, 4);
+ TEST_TYPE_SIZE (PEMRFILLRGN, 4)
+ TEST_TYPE_ALIGN (PEMRFILLRGN, 4)
+ TEST_TARGET_SIZE (PEMRFILLRGN, 36)
+ TEST_TARGET_ALIGN(PEMRFILLRGN, 4)
}
static void test_pack_PEMRFLATTENPATH(void)
{
/* PEMRFLATTENPATH */
- TEST_TYPE(PEMRFLATTENPATH, 4, 4);
- TEST_TYPE_POINTER(PEMRFLATTENPATH, 8, 4);
+ TEST_TYPE_SIZE (PEMRFLATTENPATH, 4)
+ TEST_TYPE_ALIGN (PEMRFLATTENPATH, 4)
+ TEST_TARGET_SIZE (PEMRFLATTENPATH, 8)
+ TEST_TARGET_ALIGN(PEMRFLATTENPATH, 4)
}
static void test_pack_PEMRFORMAT(void)
{
/* PEMRFORMAT */
- TEST_TYPE(PEMRFORMAT, 4, 4);
- TEST_TYPE_POINTER(PEMRFORMAT, 16, 4);
+ TEST_TYPE_SIZE (PEMRFORMAT, 4)
+ TEST_TYPE_ALIGN (PEMRFORMAT, 4)
+ TEST_TARGET_SIZE (PEMRFORMAT, 16)
+ TEST_TARGET_ALIGN(PEMRFORMAT, 4)
}
static void test_pack_PEMRFRAMERGN(void)
{
/* PEMRFRAMERGN */
- TEST_TYPE(PEMRFRAMERGN, 4, 4);
- TEST_TYPE_POINTER(PEMRFRAMERGN, 44, 4);
+ TEST_TYPE_SIZE (PEMRFRAMERGN, 4)
+ TEST_TYPE_ALIGN (PEMRFRAMERGN, 4)
+ TEST_TARGET_SIZE (PEMRFRAMERGN, 44)
+ TEST_TARGET_ALIGN(PEMRFRAMERGN, 4)
}
static void test_pack_PEMRGDICOMMENT(void)
{
/* PEMRGDICOMMENT */
- TEST_TYPE(PEMRGDICOMMENT, 4, 4);
- TEST_TYPE_POINTER(PEMRGDICOMMENT, 16, 4);
+ TEST_TYPE_SIZE (PEMRGDICOMMENT, 4)
+ TEST_TYPE_ALIGN (PEMRGDICOMMENT, 4)
+ TEST_TARGET_SIZE (PEMRGDICOMMENT, 16)
+ TEST_TARGET_ALIGN(PEMRGDICOMMENT, 4)
}
static void test_pack_PEMRGLSBOUNDEDRECORD(void)
{
/* PEMRGLSBOUNDEDRECORD */
- TEST_TYPE(PEMRGLSBOUNDEDRECORD, 4, 4);
- TEST_TYPE_POINTER(PEMRGLSBOUNDEDRECORD, 32, 4);
+ TEST_TYPE_SIZE (PEMRGLSBOUNDEDRECORD, 4)
+ TEST_TYPE_ALIGN (PEMRGLSBOUNDEDRECORD, 4)
+ TEST_TARGET_SIZE (PEMRGLSBOUNDEDRECORD, 32)
+ TEST_TARGET_ALIGN(PEMRGLSBOUNDEDRECORD, 4)
}
static void test_pack_PEMRGLSRECORD(void)
{
/* PEMRGLSRECORD */
- TEST_TYPE(PEMRGLSRECORD, 4, 4);
- TEST_TYPE_POINTER(PEMRGLSRECORD, 16, 4);
+ TEST_TYPE_SIZE (PEMRGLSRECORD, 4)
+ TEST_TYPE_ALIGN (PEMRGLSRECORD, 4)
+ TEST_TARGET_SIZE (PEMRGLSRECORD, 16)
+ TEST_TARGET_ALIGN(PEMRGLSRECORD, 4)
}
static void test_pack_PEMRINTERSECTCLIPRECT(void)
{
/* PEMRINTERSECTCLIPRECT */
- TEST_TYPE(PEMRINTERSECTCLIPRECT, 4, 4);
- TEST_TYPE_POINTER(PEMRINTERSECTCLIPRECT, 24, 4);
+ TEST_TYPE_SIZE (PEMRINTERSECTCLIPRECT, 4)
+ TEST_TYPE_ALIGN (PEMRINTERSECTCLIPRECT, 4)
+ TEST_TARGET_SIZE (PEMRINTERSECTCLIPRECT, 24)
+ TEST_TARGET_ALIGN(PEMRINTERSECTCLIPRECT, 4)
}
static void test_pack_PEMRINVERTRGN(void)
{
/* PEMRINVERTRGN */
- TEST_TYPE(PEMRINVERTRGN, 4, 4);
- TEST_TYPE_POINTER(PEMRINVERTRGN, 32, 4);
+ TEST_TYPE_SIZE (PEMRINVERTRGN, 4)
+ TEST_TYPE_ALIGN (PEMRINVERTRGN, 4)
+ TEST_TARGET_SIZE (PEMRINVERTRGN, 32)
+ TEST_TARGET_ALIGN(PEMRINVERTRGN, 4)
}
static void test_pack_PEMRLINETO(void)
{
/* PEMRLINETO */
- TEST_TYPE(PEMRLINETO, 4, 4);
- TEST_TYPE_POINTER(PEMRLINETO, 16, 4);
+ TEST_TYPE_SIZE (PEMRLINETO, 4)
+ TEST_TYPE_ALIGN (PEMRLINETO, 4)
+ TEST_TARGET_SIZE (PEMRLINETO, 16)
+ TEST_TARGET_ALIGN(PEMRLINETO, 4)
}
static void test_pack_PEMRMASKBLT(void)
{
/* PEMRMASKBLT */
- TEST_TYPE(PEMRMASKBLT, 4, 4);
- TEST_TYPE_POINTER(PEMRMASKBLT, 128, 4);
+ TEST_TYPE_SIZE (PEMRMASKBLT, 4)
+ TEST_TYPE_ALIGN (PEMRMASKBLT, 4)
+ TEST_TARGET_SIZE (PEMRMASKBLT, 128)
+ TEST_TARGET_ALIGN(PEMRMASKBLT, 4)
}
static void test_pack_PEMRMODIFYWORLDTRANSFORM(void)
{
/* PEMRMODIFYWORLDTRANSFORM */
- TEST_TYPE(PEMRMODIFYWORLDTRANSFORM, 4, 4);
- TEST_TYPE_POINTER(PEMRMODIFYWORLDTRANSFORM, 36, 4);
+ TEST_TYPE_SIZE (PEMRMODIFYWORLDTRANSFORM, 4)
+ TEST_TYPE_ALIGN (PEMRMODIFYWORLDTRANSFORM, 4)
+ TEST_TARGET_SIZE (PEMRMODIFYWORLDTRANSFORM, 36)
+ TEST_TARGET_ALIGN(PEMRMODIFYWORLDTRANSFORM, 4)
}
static void test_pack_PEMRMOVETOEX(void)
{
/* PEMRMOVETOEX */
- TEST_TYPE(PEMRMOVETOEX, 4, 4);
- TEST_TYPE_POINTER(PEMRMOVETOEX, 16, 4);
+ TEST_TYPE_SIZE (PEMRMOVETOEX, 4)
+ TEST_TYPE_ALIGN (PEMRMOVETOEX, 4)
+ TEST_TARGET_SIZE (PEMRMOVETOEX, 16)
+ TEST_TARGET_ALIGN(PEMRMOVETOEX, 4)
}
static void test_pack_PEMROFFSETCLIPRGN(void)
{
/* PEMROFFSETCLIPRGN */
- TEST_TYPE(PEMROFFSETCLIPRGN, 4, 4);
- TEST_TYPE_POINTER(PEMROFFSETCLIPRGN, 16, 4);
+ TEST_TYPE_SIZE (PEMROFFSETCLIPRGN, 4)
+ TEST_TYPE_ALIGN (PEMROFFSETCLIPRGN, 4)
+ TEST_TARGET_SIZE (PEMROFFSETCLIPRGN, 16)
+ TEST_TARGET_ALIGN(PEMROFFSETCLIPRGN, 4)
}
static void test_pack_PEMRPAINTRGN(void)
{
/* PEMRPAINTRGN */
- TEST_TYPE(PEMRPAINTRGN, 4, 4);
- TEST_TYPE_POINTER(PEMRPAINTRGN, 32, 4);
+ TEST_TYPE_SIZE (PEMRPAINTRGN, 4)
+ TEST_TYPE_ALIGN (PEMRPAINTRGN, 4)
+ TEST_TARGET_SIZE (PEMRPAINTRGN, 32)
+ TEST_TARGET_ALIGN(PEMRPAINTRGN, 4)
}
static void test_pack_PEMRPIE(void)
{
/* PEMRPIE */
- TEST_TYPE(PEMRPIE, 4, 4);
- TEST_TYPE_POINTER(PEMRPIE, 40, 4);
+ TEST_TYPE_SIZE (PEMRPIE, 4)
+ TEST_TYPE_ALIGN (PEMRPIE, 4)
+ TEST_TARGET_SIZE (PEMRPIE, 40)
+ TEST_TARGET_ALIGN(PEMRPIE, 4)
}
static void test_pack_PEMRPIXELFORMAT(void)
{
/* PEMRPIXELFORMAT */
- TEST_TYPE(PEMRPIXELFORMAT, 4, 4);
- TEST_TYPE_POINTER(PEMRPIXELFORMAT, 48, 4);
+ TEST_TYPE_SIZE (PEMRPIXELFORMAT, 4)
+ TEST_TYPE_ALIGN (PEMRPIXELFORMAT, 4)
+ TEST_TARGET_SIZE (PEMRPIXELFORMAT, 48)
+ TEST_TARGET_ALIGN(PEMRPIXELFORMAT, 4)
}
static void test_pack_PEMRPLGBLT(void)
{
/* PEMRPLGBLT */
- TEST_TYPE(PEMRPLGBLT, 4, 4);
- TEST_TYPE_POINTER(PEMRPLGBLT, 140, 4);
+ TEST_TYPE_SIZE (PEMRPLGBLT, 4)
+ TEST_TYPE_ALIGN (PEMRPLGBLT, 4)
+ TEST_TARGET_SIZE (PEMRPLGBLT, 140)
+ TEST_TARGET_ALIGN(PEMRPLGBLT, 4)
}
static void test_pack_PEMRPOLYBEZIER(void)
{
/* PEMRPOLYBEZIER */
- TEST_TYPE(PEMRPOLYBEZIER, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYBEZIER, 36, 4);
+ TEST_TYPE_SIZE (PEMRPOLYBEZIER, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYBEZIER, 4)
+ TEST_TARGET_SIZE (PEMRPOLYBEZIER, 36)
+ TEST_TARGET_ALIGN(PEMRPOLYBEZIER, 4)
}
static void test_pack_PEMRPOLYBEZIER16(void)
{
/* PEMRPOLYBEZIER16 */
- TEST_TYPE(PEMRPOLYBEZIER16, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYBEZIER16, 32, 4);
+ TEST_TYPE_SIZE (PEMRPOLYBEZIER16, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYBEZIER16, 4)
+ TEST_TARGET_SIZE (PEMRPOLYBEZIER16, 32)
+ TEST_TARGET_ALIGN(PEMRPOLYBEZIER16, 4)
}
static void test_pack_PEMRPOLYBEZIERTO(void)
{
/* PEMRPOLYBEZIERTO */
- TEST_TYPE(PEMRPOLYBEZIERTO, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYBEZIERTO, 36, 4);
+ TEST_TYPE_SIZE (PEMRPOLYBEZIERTO, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYBEZIERTO, 4)
+ TEST_TARGET_SIZE (PEMRPOLYBEZIERTO, 36)
+ TEST_TARGET_ALIGN(PEMRPOLYBEZIERTO, 4)
}
static void test_pack_PEMRPOLYBEZIERTO16(void)
{
/* PEMRPOLYBEZIERTO16 */
- TEST_TYPE(PEMRPOLYBEZIERTO16, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYBEZIERTO16, 32, 4);
+ TEST_TYPE_SIZE (PEMRPOLYBEZIERTO16, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYBEZIERTO16, 4)
+ TEST_TARGET_SIZE (PEMRPOLYBEZIERTO16, 32)
+ TEST_TARGET_ALIGN(PEMRPOLYBEZIERTO16, 4)
}
static void test_pack_PEMRPOLYDRAW(void)
{
/* PEMRPOLYDRAW */
- TEST_TYPE(PEMRPOLYDRAW, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYDRAW, 40, 4);
+ TEST_TYPE_SIZE (PEMRPOLYDRAW, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYDRAW, 4)
+ TEST_TARGET_SIZE (PEMRPOLYDRAW, 40)
+ TEST_TARGET_ALIGN(PEMRPOLYDRAW, 4)
}
static void test_pack_PEMRPOLYDRAW16(void)
{
/* PEMRPOLYDRAW16 */
- TEST_TYPE(PEMRPOLYDRAW16, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYDRAW16, 36, 4);
+ TEST_TYPE_SIZE (PEMRPOLYDRAW16, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYDRAW16, 4)
+ TEST_TARGET_SIZE (PEMRPOLYDRAW16, 36)
+ TEST_TARGET_ALIGN(PEMRPOLYDRAW16, 4)
}
static void test_pack_PEMRPOLYGON(void)
{
/* PEMRPOLYGON */
- TEST_TYPE(PEMRPOLYGON, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYGON, 36, 4);
+ TEST_TYPE_SIZE (PEMRPOLYGON, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYGON, 4)
+ TEST_TARGET_SIZE (PEMRPOLYGON, 36)
+ TEST_TARGET_ALIGN(PEMRPOLYGON, 4)
}
static void test_pack_PEMRPOLYGON16(void)
{
/* PEMRPOLYGON16 */
- TEST_TYPE(PEMRPOLYGON16, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYGON16, 32, 4);
+ TEST_TYPE_SIZE (PEMRPOLYGON16, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYGON16, 4)
+ TEST_TARGET_SIZE (PEMRPOLYGON16, 32)
+ TEST_TARGET_ALIGN(PEMRPOLYGON16, 4)
}
static void test_pack_PEMRPOLYLINE(void)
{
/* PEMRPOLYLINE */
- TEST_TYPE(PEMRPOLYLINE, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYLINE, 36, 4);
+ TEST_TYPE_SIZE (PEMRPOLYLINE, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYLINE, 4)
+ TEST_TARGET_SIZE (PEMRPOLYLINE, 36)
+ TEST_TARGET_ALIGN(PEMRPOLYLINE, 4)
}
static void test_pack_PEMRPOLYLINE16(void)
{
/* PEMRPOLYLINE16 */
- TEST_TYPE(PEMRPOLYLINE16, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYLINE16, 32, 4);
+ TEST_TYPE_SIZE (PEMRPOLYLINE16, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYLINE16, 4)
+ TEST_TARGET_SIZE (PEMRPOLYLINE16, 32)
+ TEST_TARGET_ALIGN(PEMRPOLYLINE16, 4)
}
static void test_pack_PEMRPOLYLINETO(void)
{
/* PEMRPOLYLINETO */
- TEST_TYPE(PEMRPOLYLINETO, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYLINETO, 36, 4);
+ TEST_TYPE_SIZE (PEMRPOLYLINETO, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYLINETO, 4)
+ TEST_TARGET_SIZE (PEMRPOLYLINETO, 36)
+ TEST_TARGET_ALIGN(PEMRPOLYLINETO, 4)
}
static void test_pack_PEMRPOLYLINETO16(void)
{
/* PEMRPOLYLINETO16 */
- TEST_TYPE(PEMRPOLYLINETO16, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYLINETO16, 32, 4);
+ TEST_TYPE_SIZE (PEMRPOLYLINETO16, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYLINETO16, 4)
+ TEST_TARGET_SIZE (PEMRPOLYLINETO16, 32)
+ TEST_TARGET_ALIGN(PEMRPOLYLINETO16, 4)
}
static void test_pack_PEMRPOLYPOLYGON(void)
{
/* PEMRPOLYPOLYGON */
- TEST_TYPE(PEMRPOLYPOLYGON, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYPOLYGON, 44, 4);
+ TEST_TYPE_SIZE (PEMRPOLYPOLYGON, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYPOLYGON, 4)
+ TEST_TARGET_SIZE (PEMRPOLYPOLYGON, 44)
+ TEST_TARGET_ALIGN(PEMRPOLYPOLYGON, 4)
}
static void test_pack_PEMRPOLYPOLYGON16(void)
{
/* PEMRPOLYPOLYGON16 */
- TEST_TYPE(PEMRPOLYPOLYGON16, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYPOLYGON16, 40, 4);
+ TEST_TYPE_SIZE (PEMRPOLYPOLYGON16, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYPOLYGON16, 4)
+ TEST_TARGET_SIZE (PEMRPOLYPOLYGON16, 40)
+ TEST_TARGET_ALIGN(PEMRPOLYPOLYGON16, 4)
}
static void test_pack_PEMRPOLYPOLYLINE(void)
{
/* PEMRPOLYPOLYLINE */
- TEST_TYPE(PEMRPOLYPOLYLINE, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYPOLYLINE, 44, 4);
+ TEST_TYPE_SIZE (PEMRPOLYPOLYLINE, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYPOLYLINE, 4)
+ TEST_TARGET_SIZE (PEMRPOLYPOLYLINE, 44)
+ TEST_TARGET_ALIGN(PEMRPOLYPOLYLINE, 4)
}
static void test_pack_PEMRPOLYPOLYLINE16(void)
{
/* PEMRPOLYPOLYLINE16 */
- TEST_TYPE(PEMRPOLYPOLYLINE16, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYPOLYLINE16, 40, 4);
+ TEST_TYPE_SIZE (PEMRPOLYPOLYLINE16, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYPOLYLINE16, 4)
+ TEST_TARGET_SIZE (PEMRPOLYPOLYLINE16, 40)
+ TEST_TARGET_ALIGN(PEMRPOLYPOLYLINE16, 4)
}
static void test_pack_PEMRPOLYTEXTOUTA(void)
{
/* PEMRPOLYTEXTOUTA */
- TEST_TYPE(PEMRPOLYTEXTOUTA, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYTEXTOUTA, 80, 4);
+ TEST_TYPE_SIZE (PEMRPOLYTEXTOUTA, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYTEXTOUTA, 4)
+ TEST_TARGET_SIZE (PEMRPOLYTEXTOUTA, 80)
+ TEST_TARGET_ALIGN(PEMRPOLYTEXTOUTA, 4)
}
static void test_pack_PEMRPOLYTEXTOUTW(void)
{
/* PEMRPOLYTEXTOUTW */
- TEST_TYPE(PEMRPOLYTEXTOUTW, 4, 4);
- TEST_TYPE_POINTER(PEMRPOLYTEXTOUTW, 80, 4);
+ TEST_TYPE_SIZE (PEMRPOLYTEXTOUTW, 4)
+ TEST_TYPE_ALIGN (PEMRPOLYTEXTOUTW, 4)
+ TEST_TARGET_SIZE (PEMRPOLYTEXTOUTW, 80)
+ TEST_TARGET_ALIGN(PEMRPOLYTEXTOUTW, 4)
}
static void test_pack_PEMRREALIZEPALETTE(void)
{
/* PEMRREALIZEPALETTE */
- TEST_TYPE(PEMRREALIZEPALETTE, 4, 4);
- TEST_TYPE_POINTER(PEMRREALIZEPALETTE, 8, 4);
+ TEST_TYPE_SIZE (PEMRREALIZEPALETTE, 4)
+ TEST_TYPE_ALIGN (PEMRREALIZEPALETTE, 4)
+ TEST_TARGET_SIZE (PEMRREALIZEPALETTE, 8)
+ TEST_TARGET_ALIGN(PEMRREALIZEPALETTE, 4)
}
static void test_pack_PEMRRECTANGLE(void)
{
/* PEMRRECTANGLE */
- TEST_TYPE(PEMRRECTANGLE, 4, 4);
- TEST_TYPE_POINTER(PEMRRECTANGLE, 24, 4);
+ TEST_TYPE_SIZE (PEMRRECTANGLE, 4)
+ TEST_TYPE_ALIGN (PEMRRECTANGLE, 4)
+ TEST_TARGET_SIZE (PEMRRECTANGLE, 24)
+ TEST_TARGET_ALIGN(PEMRRECTANGLE, 4)
}
static void test_pack_PEMRRESIZEPALETTE(void)
{
/* PEMRRESIZEPALETTE */
- TEST_TYPE(PEMRRESIZEPALETTE, 4, 4);
- TEST_TYPE_POINTER(PEMRRESIZEPALETTE, 16, 4);
+ TEST_TYPE_SIZE (PEMRRESIZEPALETTE, 4)
+ TEST_TYPE_ALIGN (PEMRRESIZEPALETTE, 4)
+ TEST_TARGET_SIZE (PEMRRESIZEPALETTE, 16)
+ TEST_TARGET_ALIGN(PEMRRESIZEPALETTE, 4)
}
static void test_pack_PEMRRESTOREDC(void)
{
/* PEMRRESTOREDC */
- TEST_TYPE(PEMRRESTOREDC, 4, 4);
- TEST_TYPE_POINTER(PEMRRESTOREDC, 12, 4);
+ TEST_TYPE_SIZE (PEMRRESTOREDC, 4)
+ TEST_TYPE_ALIGN (PEMRRESTOREDC, 4)
+ TEST_TARGET_SIZE (PEMRRESTOREDC, 12)
+ TEST_TARGET_ALIGN(PEMRRESTOREDC, 4)
}
static void test_pack_PEMRROUNDRECT(void)
{
/* PEMRROUNDRECT */
- TEST_TYPE(PEMRROUNDRECT, 4, 4);
- TEST_TYPE_POINTER(PEMRROUNDRECT, 32, 4);
+ TEST_TYPE_SIZE (PEMRROUNDRECT, 4)
+ TEST_TYPE_ALIGN (PEMRROUNDRECT, 4)
+ TEST_TARGET_SIZE (PEMRROUNDRECT, 32)
+ TEST_TARGET_ALIGN(PEMRROUNDRECT, 4)
}
static void test_pack_PEMRSAVEDC(void)
{
/* PEMRSAVEDC */
- TEST_TYPE(PEMRSAVEDC, 4, 4);
- TEST_TYPE_POINTER(PEMRSAVEDC, 8, 4);
+ TEST_TYPE_SIZE (PEMRSAVEDC, 4)
+ TEST_TYPE_ALIGN (PEMRSAVEDC, 4)
+ TEST_TARGET_SIZE (PEMRSAVEDC, 8)
+ TEST_TARGET_ALIGN(PEMRSAVEDC, 4)
}
static void test_pack_PEMRSCALEVIEWPORTEXTEX(void)
{
/* PEMRSCALEVIEWPORTEXTEX */
- TEST_TYPE(PEMRSCALEVIEWPORTEXTEX, 4, 4);
- TEST_TYPE_POINTER(PEMRSCALEVIEWPORTEXTEX, 24, 4);
+ TEST_TYPE_SIZE (PEMRSCALEVIEWPORTEXTEX, 4)
+ TEST_TYPE_ALIGN (PEMRSCALEVIEWPORTEXTEX, 4)
+ TEST_TARGET_SIZE (PEMRSCALEVIEWPORTEXTEX, 24)
+ TEST_TARGET_ALIGN(PEMRSCALEVIEWPORTEXTEX, 4)
}
static void test_pack_PEMRSCALEWINDOWEXTEX(void)
{
/* PEMRSCALEWINDOWEXTEX */
- TEST_TYPE(PEMRSCALEWINDOWEXTEX, 4, 4);
- TEST_TYPE_POINTER(PEMRSCALEWINDOWEXTEX, 24, 4);
+ TEST_TYPE_SIZE (PEMRSCALEWINDOWEXTEX, 4)
+ TEST_TYPE_ALIGN (PEMRSCALEWINDOWEXTEX, 4)
+ TEST_TARGET_SIZE (PEMRSCALEWINDOWEXTEX, 24)
+ TEST_TARGET_ALIGN(PEMRSCALEWINDOWEXTEX, 4)
}
static void test_pack_PEMRSELECTCLIPPATH(void)
{
/* PEMRSELECTCLIPPATH */
- TEST_TYPE(PEMRSELECTCLIPPATH, 4, 4);
- TEST_TYPE_POINTER(PEMRSELECTCLIPPATH, 12, 4);
+ TEST_TYPE_SIZE (PEMRSELECTCLIPPATH, 4)
+ TEST_TYPE_ALIGN (PEMRSELECTCLIPPATH, 4)
+ TEST_TARGET_SIZE (PEMRSELECTCLIPPATH, 12)
+ TEST_TARGET_ALIGN(PEMRSELECTCLIPPATH, 4)
}
static void test_pack_PEMRSELECTCOLORSPACE(void)
{
/* PEMRSELECTCOLORSPACE */
- TEST_TYPE(PEMRSELECTCOLORSPACE, 4, 4);
- TEST_TYPE_POINTER(PEMRSELECTCOLORSPACE, 12, 4);
+ TEST_TYPE_SIZE (PEMRSELECTCOLORSPACE, 4)
+ TEST_TYPE_ALIGN (PEMRSELECTCOLORSPACE, 4)
+ TEST_TARGET_SIZE (PEMRSELECTCOLORSPACE, 12)
+ TEST_TARGET_ALIGN(PEMRSELECTCOLORSPACE, 4)
}
static void test_pack_PEMRSELECTOBJECT(void)
{
/* PEMRSELECTOBJECT */
- TEST_TYPE(PEMRSELECTOBJECT, 4, 4);
- TEST_TYPE_POINTER(PEMRSELECTOBJECT, 12, 4);
+ TEST_TYPE_SIZE (PEMRSELECTOBJECT, 4)
+ TEST_TYPE_ALIGN (PEMRSELECTOBJECT, 4)
+ TEST_TARGET_SIZE (PEMRSELECTOBJECT, 12)
+ TEST_TARGET_ALIGN(PEMRSELECTOBJECT, 4)
}
static void test_pack_PEMRSELECTPALETTE(void)
{
/* PEMRSELECTPALETTE */
- TEST_TYPE(PEMRSELECTPALETTE, 4, 4);
- TEST_TYPE_POINTER(PEMRSELECTPALETTE, 12, 4);
+ TEST_TYPE_SIZE (PEMRSELECTPALETTE, 4)
+ TEST_TYPE_ALIGN (PEMRSELECTPALETTE, 4)
+ TEST_TARGET_SIZE (PEMRSELECTPALETTE, 12)
+ TEST_TARGET_ALIGN(PEMRSELECTPALETTE, 4)
}
static void test_pack_PEMRSETARCDIRECTION(void)
{
/* PEMRSETARCDIRECTION */
- TEST_TYPE(PEMRSETARCDIRECTION, 4, 4);
- TEST_TYPE_POINTER(PEMRSETARCDIRECTION, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETARCDIRECTION, 4)
+ TEST_TYPE_ALIGN (PEMRSETARCDIRECTION, 4)
+ TEST_TARGET_SIZE (PEMRSETARCDIRECTION, 12)
+ TEST_TARGET_ALIGN(PEMRSETARCDIRECTION, 4)
}
static void test_pack_PEMRSETBKCOLOR(void)
{
/* PEMRSETBKCOLOR */
- TEST_TYPE(PEMRSETBKCOLOR, 4, 4);
- TEST_TYPE_POINTER(PEMRSETBKCOLOR, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETBKCOLOR, 4)
+ TEST_TYPE_ALIGN (PEMRSETBKCOLOR, 4)
+ TEST_TARGET_SIZE (PEMRSETBKCOLOR, 12)
+ TEST_TARGET_ALIGN(PEMRSETBKCOLOR, 4)
}
static void test_pack_PEMRSETBKMODE(void)
{
/* PEMRSETBKMODE */
- TEST_TYPE(PEMRSETBKMODE, 4, 4);
- TEST_TYPE_POINTER(PEMRSETBKMODE, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETBKMODE, 4)
+ TEST_TYPE_ALIGN (PEMRSETBKMODE, 4)
+ TEST_TARGET_SIZE (PEMRSETBKMODE, 12)
+ TEST_TARGET_ALIGN(PEMRSETBKMODE, 4)
}
static void test_pack_PEMRSETBRUSHORGEX(void)
{
/* PEMRSETBRUSHORGEX */
- TEST_TYPE(PEMRSETBRUSHORGEX, 4, 4);
- TEST_TYPE_POINTER(PEMRSETBRUSHORGEX, 16, 4);
+ TEST_TYPE_SIZE (PEMRSETBRUSHORGEX, 4)
+ TEST_TYPE_ALIGN (PEMRSETBRUSHORGEX, 4)
+ TEST_TARGET_SIZE (PEMRSETBRUSHORGEX, 16)
+ TEST_TARGET_ALIGN(PEMRSETBRUSHORGEX, 4)
}
static void test_pack_PEMRSETCOLORADJUSTMENT(void)
{
/* PEMRSETCOLORADJUSTMENT */
- TEST_TYPE(PEMRSETCOLORADJUSTMENT, 4, 4);
- TEST_TYPE_POINTER(PEMRSETCOLORADJUSTMENT, 32, 4);
+ TEST_TYPE_SIZE (PEMRSETCOLORADJUSTMENT, 4)
+ TEST_TYPE_ALIGN (PEMRSETCOLORADJUSTMENT, 4)
+ TEST_TARGET_SIZE (PEMRSETCOLORADJUSTMENT, 32)
+ TEST_TARGET_ALIGN(PEMRSETCOLORADJUSTMENT, 4)
}
static void test_pack_PEMRSETCOLORSPACE(void)
{
/* PEMRSETCOLORSPACE */
- TEST_TYPE(PEMRSETCOLORSPACE, 4, 4);
- TEST_TYPE_POINTER(PEMRSETCOLORSPACE, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETCOLORSPACE, 4)
+ TEST_TYPE_ALIGN (PEMRSETCOLORSPACE, 4)
+ TEST_TARGET_SIZE (PEMRSETCOLORSPACE, 12)
+ TEST_TARGET_ALIGN(PEMRSETCOLORSPACE, 4)
}
static void test_pack_PEMRSETDIBITSTODEVICE(void)
{
/* PEMRSETDIBITSTODEVICE */
- TEST_TYPE(PEMRSETDIBITSTODEVICE, 4, 4);
- TEST_TYPE_POINTER(PEMRSETDIBITSTODEVICE, 76, 4);
+ TEST_TYPE_SIZE (PEMRSETDIBITSTODEVICE, 4)
+ TEST_TYPE_ALIGN (PEMRSETDIBITSTODEVICE, 4)
+ TEST_TARGET_SIZE (PEMRSETDIBITSTODEVICE, 76)
+ TEST_TARGET_ALIGN(PEMRSETDIBITSTODEVICE, 4)
}
static void test_pack_PEMRSETICMMODE(void)
{
/* PEMRSETICMMODE */
- TEST_TYPE(PEMRSETICMMODE, 4, 4);
- TEST_TYPE_POINTER(PEMRSETICMMODE, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETICMMODE, 4)
+ TEST_TYPE_ALIGN (PEMRSETICMMODE, 4)
+ TEST_TARGET_SIZE (PEMRSETICMMODE, 12)
+ TEST_TARGET_ALIGN(PEMRSETICMMODE, 4)
}
static void test_pack_PEMRSETLAYOUT(void)
{
/* PEMRSETLAYOUT */
- TEST_TYPE(PEMRSETLAYOUT, 4, 4);
- TEST_TYPE_POINTER(PEMRSETLAYOUT, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETLAYOUT, 4)
+ TEST_TYPE_ALIGN (PEMRSETLAYOUT, 4)
+ TEST_TARGET_SIZE (PEMRSETLAYOUT, 12)
+ TEST_TARGET_ALIGN(PEMRSETLAYOUT, 4)
}
static void test_pack_PEMRSETMAPMODE(void)
{
/* PEMRSETMAPMODE */
- TEST_TYPE(PEMRSETMAPMODE, 4, 4);
- TEST_TYPE_POINTER(PEMRSETMAPMODE, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETMAPMODE, 4)
+ TEST_TYPE_ALIGN (PEMRSETMAPMODE, 4)
+ TEST_TARGET_SIZE (PEMRSETMAPMODE, 12)
+ TEST_TARGET_ALIGN(PEMRSETMAPMODE, 4)
}
static void test_pack_PEMRSETMAPPERFLAGS(void)
{
/* PEMRSETMAPPERFLAGS */
- TEST_TYPE(PEMRSETMAPPERFLAGS, 4, 4);
- TEST_TYPE_POINTER(PEMRSETMAPPERFLAGS, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETMAPPERFLAGS, 4)
+ TEST_TYPE_ALIGN (PEMRSETMAPPERFLAGS, 4)
+ TEST_TARGET_SIZE (PEMRSETMAPPERFLAGS, 12)
+ TEST_TARGET_ALIGN(PEMRSETMAPPERFLAGS, 4)
}
static void test_pack_PEMRSETMETARGN(void)
{
/* PEMRSETMETARGN */
- TEST_TYPE(PEMRSETMETARGN, 4, 4);
- TEST_TYPE_POINTER(PEMRSETMETARGN, 8, 4);
+ TEST_TYPE_SIZE (PEMRSETMETARGN, 4)
+ TEST_TYPE_ALIGN (PEMRSETMETARGN, 4)
+ TEST_TARGET_SIZE (PEMRSETMETARGN, 8)
+ TEST_TARGET_ALIGN(PEMRSETMETARGN, 4)
}
static void test_pack_PEMRSETMITERLIMIT(void)
{
/* PEMRSETMITERLIMIT */
- TEST_TYPE(PEMRSETMITERLIMIT, 4, 4);
- TEST_TYPE_POINTER(PEMRSETMITERLIMIT, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETMITERLIMIT, 4)
+ TEST_TYPE_ALIGN (PEMRSETMITERLIMIT, 4)
+ TEST_TARGET_SIZE (PEMRSETMITERLIMIT, 12)
+ TEST_TARGET_ALIGN(PEMRSETMITERLIMIT, 4)
}
static void test_pack_PEMRSETPALETTEENTRIES(void)
{
/* PEMRSETPALETTEENTRIES */
- TEST_TYPE(PEMRSETPALETTEENTRIES, 4, 4);
- TEST_TYPE_POINTER(PEMRSETPALETTEENTRIES, 24, 4);
+ TEST_TYPE_SIZE (PEMRSETPALETTEENTRIES, 4)
+ TEST_TYPE_ALIGN (PEMRSETPALETTEENTRIES, 4)
+ TEST_TARGET_SIZE (PEMRSETPALETTEENTRIES, 24)
+ TEST_TARGET_ALIGN(PEMRSETPALETTEENTRIES, 4)
}
static void test_pack_PEMRSETPIXELV(void)
{
/* PEMRSETPIXELV */
- TEST_TYPE(PEMRSETPIXELV, 4, 4);
- TEST_TYPE_POINTER(PEMRSETPIXELV, 20, 4);
+ TEST_TYPE_SIZE (PEMRSETPIXELV, 4)
+ TEST_TYPE_ALIGN (PEMRSETPIXELV, 4)
+ TEST_TARGET_SIZE (PEMRSETPIXELV, 20)
+ TEST_TARGET_ALIGN(PEMRSETPIXELV, 4)
}
static void test_pack_PEMRSETPOLYFILLMODE(void)
{
/* PEMRSETPOLYFILLMODE */
- TEST_TYPE(PEMRSETPOLYFILLMODE, 4, 4);
- TEST_TYPE_POINTER(PEMRSETPOLYFILLMODE, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETPOLYFILLMODE, 4)
+ TEST_TYPE_ALIGN (PEMRSETPOLYFILLMODE, 4)
+ TEST_TARGET_SIZE (PEMRSETPOLYFILLMODE, 12)
+ TEST_TARGET_ALIGN(PEMRSETPOLYFILLMODE, 4)
}
static void test_pack_PEMRSETROP2(void)
{
/* PEMRSETROP2 */
- TEST_TYPE(PEMRSETROP2, 4, 4);
- TEST_TYPE_POINTER(PEMRSETROP2, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETROP2, 4)
+ TEST_TYPE_ALIGN (PEMRSETROP2, 4)
+ TEST_TARGET_SIZE (PEMRSETROP2, 12)
+ TEST_TARGET_ALIGN(PEMRSETROP2, 4)
}
static void test_pack_PEMRSETSTRETCHBLTMODE(void)
{
/* PEMRSETSTRETCHBLTMODE */
- TEST_TYPE(PEMRSETSTRETCHBLTMODE, 4, 4);
- TEST_TYPE_POINTER(PEMRSETSTRETCHBLTMODE, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETSTRETCHBLTMODE, 4)
+ TEST_TYPE_ALIGN (PEMRSETSTRETCHBLTMODE, 4)
+ TEST_TARGET_SIZE (PEMRSETSTRETCHBLTMODE, 12)
+ TEST_TARGET_ALIGN(PEMRSETSTRETCHBLTMODE, 4)
}
static void test_pack_PEMRSETTEXTALIGN(void)
{
/* PEMRSETTEXTALIGN */
- TEST_TYPE(PEMRSETTEXTALIGN, 4, 4);
- TEST_TYPE_POINTER(PEMRSETTEXTALIGN, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETTEXTALIGN, 4)
+ TEST_TYPE_ALIGN (PEMRSETTEXTALIGN, 4)
+ TEST_TARGET_SIZE (PEMRSETTEXTALIGN, 12)
+ TEST_TARGET_ALIGN(PEMRSETTEXTALIGN, 4)
}
static void test_pack_PEMRSETTEXTCOLOR(void)
{
/* PEMRSETTEXTCOLOR */
- TEST_TYPE(PEMRSETTEXTCOLOR, 4, 4);
- TEST_TYPE_POINTER(PEMRSETTEXTCOLOR, 12, 4);
+ TEST_TYPE_SIZE (PEMRSETTEXTCOLOR, 4)
+ TEST_TYPE_ALIGN (PEMRSETTEXTCOLOR, 4)
+ TEST_TARGET_SIZE (PEMRSETTEXTCOLOR, 12)
+ TEST_TARGET_ALIGN(PEMRSETTEXTCOLOR, 4)
}
static void test_pack_PEMRSETVIEWPORTEXTEX(void)
{
/* PEMRSETVIEWPORTEXTEX */
- TEST_TYPE(PEMRSETVIEWPORTEXTEX, 4, 4);
- TEST_TYPE_POINTER(PEMRSETVIEWPORTEXTEX, 16, 4);
+ TEST_TYPE_SIZE (PEMRSETVIEWPORTEXTEX, 4)
+ TEST_TYPE_ALIGN (PEMRSETVIEWPORTEXTEX, 4)
+ TEST_TARGET_SIZE (PEMRSETVIEWPORTEXTEX, 16)
+ TEST_TARGET_ALIGN(PEMRSETVIEWPORTEXTEX, 4)
}
static void test_pack_PEMRSETVIEWPORTORGEX(void)
{
/* PEMRSETVIEWPORTORGEX */
- TEST_TYPE(PEMRSETVIEWPORTORGEX, 4, 4);
- TEST_TYPE_POINTER(PEMRSETVIEWPORTORGEX, 16, 4);
+ TEST_TYPE_SIZE (PEMRSETVIEWPORTORGEX, 4)
+ TEST_TYPE_ALIGN (PEMRSETVIEWPORTORGEX, 4)
+ TEST_TARGET_SIZE (PEMRSETVIEWPORTORGEX, 16)
+ TEST_TARGET_ALIGN(PEMRSETVIEWPORTORGEX, 4)
}
static void test_pack_PEMRSETWINDOWEXTEX(void)
{
/* PEMRSETWINDOWEXTEX */
- TEST_TYPE(PEMRSETWINDOWEXTEX, 4, 4);
- TEST_TYPE_POINTER(PEMRSETWINDOWEXTEX, 16, 4);
+ TEST_TYPE_SIZE (PEMRSETWINDOWEXTEX, 4)
+ TEST_TYPE_ALIGN (PEMRSETWINDOWEXTEX, 4)
+ TEST_TARGET_SIZE (PEMRSETWINDOWEXTEX, 16)
+ TEST_TARGET_ALIGN(PEMRSETWINDOWEXTEX, 4)
}
static void test_pack_PEMRSETWINDOWORGEX(void)
{
/* PEMRSETWINDOWORGEX */
- TEST_TYPE(PEMRSETWINDOWORGEX, 4, 4);
- TEST_TYPE_POINTER(PEMRSETWINDOWORGEX, 16, 4);
+ TEST_TYPE_SIZE (PEMRSETWINDOWORGEX, 4)
+ TEST_TYPE_ALIGN (PEMRSETWINDOWORGEX, 4)
+ TEST_TARGET_SIZE (PEMRSETWINDOWORGEX, 16)
+ TEST_TARGET_ALIGN(PEMRSETWINDOWORGEX, 4)
}
static void test_pack_PEMRSETWORLDTRANSFORM(void)
{
/* PEMRSETWORLDTRANSFORM */
- TEST_TYPE(PEMRSETWORLDTRANSFORM, 4, 4);
- TEST_TYPE_POINTER(PEMRSETWORLDTRANSFORM, 32, 4);
+ TEST_TYPE_SIZE (PEMRSETWORLDTRANSFORM, 4)
+ TEST_TYPE_ALIGN (PEMRSETWORLDTRANSFORM, 4)
+ TEST_TARGET_SIZE (PEMRSETWORLDTRANSFORM, 32)
+ TEST_TARGET_ALIGN(PEMRSETWORLDTRANSFORM, 4)
}
static void test_pack_PEMRSTRETCHBLT(void)
{
/* PEMRSTRETCHBLT */
- TEST_TYPE(PEMRSTRETCHBLT, 4, 4);
- TEST_TYPE_POINTER(PEMRSTRETCHBLT, 108, 4);
+ TEST_TYPE_SIZE (PEMRSTRETCHBLT, 4)
+ TEST_TYPE_ALIGN (PEMRSTRETCHBLT, 4)
+ TEST_TARGET_SIZE (PEMRSTRETCHBLT, 108)
+ TEST_TARGET_ALIGN(PEMRSTRETCHBLT, 4)
}
static void test_pack_PEMRSTRETCHDIBITS(void)
{
/* PEMRSTRETCHDIBITS */
- TEST_TYPE(PEMRSTRETCHDIBITS, 4, 4);
- TEST_TYPE_POINTER(PEMRSTRETCHDIBITS, 80, 4);
+ TEST_TYPE_SIZE (PEMRSTRETCHDIBITS, 4)
+ TEST_TYPE_ALIGN (PEMRSTRETCHDIBITS, 4)
+ TEST_TARGET_SIZE (PEMRSTRETCHDIBITS, 80)
+ TEST_TARGET_ALIGN(PEMRSTRETCHDIBITS, 4)
}
static void test_pack_PEMRSTROKEANDFILLPATH(void)
{
/* PEMRSTROKEANDFILLPATH */
- TEST_TYPE(PEMRSTROKEANDFILLPATH, 4, 4);
- TEST_TYPE_POINTER(PEMRSTROKEANDFILLPATH, 24, 4);
+ TEST_TYPE_SIZE (PEMRSTROKEANDFILLPATH, 4)
+ TEST_TYPE_ALIGN (PEMRSTROKEANDFILLPATH, 4)
+ TEST_TARGET_SIZE (PEMRSTROKEANDFILLPATH, 24)
+ TEST_TARGET_ALIGN(PEMRSTROKEANDFILLPATH, 4)
}
static void test_pack_PEMRSTROKEPATH(void)
{
/* PEMRSTROKEPATH */
- TEST_TYPE(PEMRSTROKEPATH, 4, 4);
- TEST_TYPE_POINTER(PEMRSTROKEPATH, 24, 4);
+ TEST_TYPE_SIZE (PEMRSTROKEPATH, 4)
+ TEST_TYPE_ALIGN (PEMRSTROKEPATH, 4)
+ TEST_TARGET_SIZE (PEMRSTROKEPATH, 24)
+ TEST_TARGET_ALIGN(PEMRSTROKEPATH, 4)
}
static void test_pack_PEMRTEXT(void)
{
/* PEMRTEXT */
- TEST_TYPE(PEMRTEXT, 4, 4);
- TEST_TYPE_POINTER(PEMRTEXT, 40, 4);
+ TEST_TYPE_SIZE (PEMRTEXT, 4)
+ TEST_TYPE_ALIGN (PEMRTEXT, 4)
+ TEST_TARGET_SIZE (PEMRTEXT, 40)
+ TEST_TARGET_ALIGN(PEMRTEXT, 4)
}
static void test_pack_PEMRWIDENPATH(void)
{
/* PEMRWIDENPATH */
- TEST_TYPE(PEMRWIDENPATH, 4, 4);
- TEST_TYPE_POINTER(PEMRWIDENPATH, 8, 4);
+ TEST_TYPE_SIZE (PEMRWIDENPATH, 4)
+ TEST_TYPE_ALIGN (PEMRWIDENPATH, 4)
+ TEST_TARGET_SIZE (PEMRWIDENPATH, 8)
+ TEST_TARGET_ALIGN(PEMRWIDENPATH, 4)
}
static void test_pack_PENHMETAHEADER(void)
{
/* PENHMETAHEADER */
- TEST_TYPE(PENHMETAHEADER, 4, 4);
- TEST_TYPE_POINTER(PENHMETAHEADER, 108, 4);
+ TEST_TYPE_SIZE (PENHMETAHEADER, 4)
+ TEST_TYPE_ALIGN (PENHMETAHEADER, 4)
+ TEST_TARGET_SIZE (PENHMETAHEADER, 108)
+ TEST_TARGET_ALIGN(PENHMETAHEADER, 4)
}
static void test_pack_PEXTLOGFONTA(void)
{
/* PEXTLOGFONTA */
- TEST_TYPE(PEXTLOGFONTA, 4, 4);
- TEST_TYPE_POINTER(PEXTLOGFONTA, 192, 4);
+ TEST_TYPE_SIZE (PEXTLOGFONTA, 4)
+ TEST_TYPE_ALIGN (PEXTLOGFONTA, 4)
+ TEST_TARGET_SIZE (PEXTLOGFONTA, 192)
+ TEST_TARGET_ALIGN(PEXTLOGFONTA, 4)
}
static void test_pack_PEXTLOGFONTW(void)
{
/* PEXTLOGFONTW */
- TEST_TYPE(PEXTLOGFONTW, 4, 4);
- TEST_TYPE_POINTER(PEXTLOGFONTW, 320, 4);
+ TEST_TYPE_SIZE (PEXTLOGFONTW, 4)
+ TEST_TYPE_ALIGN (PEXTLOGFONTW, 4)
+ TEST_TARGET_SIZE (PEXTLOGFONTW, 320)
+ TEST_TARGET_ALIGN(PEXTLOGFONTW, 4)
}
static void test_pack_PEXTLOGPEN(void)
{
/* PEXTLOGPEN */
- TEST_TYPE(PEXTLOGPEN, 4, 4);
- TEST_TYPE_POINTER(PEXTLOGPEN, 28, 4);
+ TEST_TYPE_SIZE (PEXTLOGPEN, 4)
+ TEST_TYPE_ALIGN (PEXTLOGPEN, 4)
+ TEST_TARGET_SIZE (PEXTLOGPEN, 28)
+ TEST_TARGET_ALIGN(PEXTLOGPEN, 4)
}
static void test_pack_PFONTSIGNATURE(void)
{
/* PFONTSIGNATURE */
- TEST_TYPE(PFONTSIGNATURE, 4, 4);
- TEST_TYPE_POINTER(PFONTSIGNATURE, 24, 4);
+ TEST_TYPE_SIZE (PFONTSIGNATURE, 4)
+ TEST_TYPE_ALIGN (PFONTSIGNATURE, 4)
+ TEST_TARGET_SIZE (PFONTSIGNATURE, 24)
+ TEST_TARGET_ALIGN(PFONTSIGNATURE, 4)
}
static void test_pack_PGLYPHMETRICSFLOAT(void)
{
/* PGLYPHMETRICSFLOAT */
- TEST_TYPE(PGLYPHMETRICSFLOAT, 4, 4);
- TEST_TYPE_POINTER(PGLYPHMETRICSFLOAT, 24, 4);
+ TEST_TYPE_SIZE (PGLYPHMETRICSFLOAT, 4)
+ TEST_TYPE_ALIGN (PGLYPHMETRICSFLOAT, 4)
+ TEST_TARGET_SIZE (PGLYPHMETRICSFLOAT, 24)
+ TEST_TARGET_ALIGN(PGLYPHMETRICSFLOAT, 4)
}
static void test_pack_PGRADIENT_RECT(void)
{
/* PGRADIENT_RECT */
- TEST_TYPE(PGRADIENT_RECT, 4, 4);
- TEST_TYPE_POINTER(PGRADIENT_RECT, 8, 4);
+ TEST_TYPE_SIZE (PGRADIENT_RECT, 4)
+ TEST_TYPE_ALIGN (PGRADIENT_RECT, 4)
+ TEST_TARGET_SIZE (PGRADIENT_RECT, 8)
+ TEST_TARGET_ALIGN(PGRADIENT_RECT, 4)
}
static void test_pack_PGRADIENT_TRIANGLE(void)
{
/* PGRADIENT_TRIANGLE */
- TEST_TYPE(PGRADIENT_TRIANGLE, 4, 4);
- TEST_TYPE_POINTER(PGRADIENT_TRIANGLE, 12, 4);
+ TEST_TYPE_SIZE (PGRADIENT_TRIANGLE, 4)
+ TEST_TYPE_ALIGN (PGRADIENT_TRIANGLE, 4)
+ TEST_TARGET_SIZE (PGRADIENT_TRIANGLE, 12)
+ TEST_TARGET_ALIGN(PGRADIENT_TRIANGLE, 4)
}
static void test_pack_PHANDLETABLE(void)
{
/* PHANDLETABLE */
- TEST_TYPE(PHANDLETABLE, 4, 4);
- TEST_TYPE_POINTER(PHANDLETABLE, 4, 4);
+ TEST_TYPE_SIZE (PHANDLETABLE, 4)
+ TEST_TYPE_ALIGN (PHANDLETABLE, 4)
+ TEST_TARGET_SIZE (PHANDLETABLE, 4)
+ TEST_TARGET_ALIGN(PHANDLETABLE, 4)
}
static void test_pack_PIXELFORMATDESCRIPTOR(void)
{
/* PIXELFORMATDESCRIPTOR (pack 4) */
- TEST_TYPE(PIXELFORMATDESCRIPTOR, 40, 4);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, WORD, nSize, 0, 2, 2);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, WORD, nVersion, 2, 2, 2);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, iPixelType, 8, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cColorBits, 9, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cRedBits, 10, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cRedShift, 11, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cGreenBits, 12, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cGreenShift, 13, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cBlueBits, 14, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cBlueShift, 15, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAlphaBits, 16, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAlphaShift, 17, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAccumBits, 18, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAccumRedBits, 19, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAccumGreenBits, 20, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAccumBlueBits, 21, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAccumAlphaBits, 22, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cDepthBits, 23, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cStencilBits, 24, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, cAuxBuffers, 25, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, iLayerType, 26, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, BYTE, bReserved, 27, 1, 1);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, DWORD, dwLayerMask, 28, 4, 4);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, DWORD, dwVisibleMask, 32, 4, 4);
- TEST_FIELD(PIXELFORMATDESCRIPTOR, DWORD, dwDamageMask, 36, 4, 4);
+ TEST_TYPE_SIZE (PIXELFORMATDESCRIPTOR, 40)
+ TEST_TYPE_ALIGN (PIXELFORMATDESCRIPTOR, 4)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, nSize, 2)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, nSize, 2)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, nSize, 0)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, nVersion, 2)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, nVersion, 2)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, nVersion, 2)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, dwFlags, 4)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, dwFlags, 4)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, dwFlags, 4)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, iPixelType, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, iPixelType, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, iPixelType, 8)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cColorBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cColorBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cColorBits, 9)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cRedBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cRedBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cRedBits, 10)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cRedShift, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cRedShift, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cRedShift, 11)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cGreenBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cGreenBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cGreenBits, 12)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cGreenShift, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cGreenShift, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cGreenShift, 13)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cBlueBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cBlueBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cBlueBits, 14)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cBlueShift, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cBlueShift, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cBlueShift, 15)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cAlphaBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cAlphaBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cAlphaBits, 16)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cAlphaShift, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cAlphaShift, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cAlphaShift, 17)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cAccumBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cAccumBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cAccumBits, 18)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cAccumRedBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cAccumRedBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cAccumRedBits, 19)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cAccumGreenBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cAccumGreenBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cAccumGreenBits, 20)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cAccumBlueBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cAccumBlueBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cAccumBlueBits, 21)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cAccumAlphaBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cAccumAlphaBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cAccumAlphaBits, 22)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cDepthBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cDepthBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cDepthBits, 23)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cStencilBits, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cStencilBits, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cStencilBits, 24)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, cAuxBuffers, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, cAuxBuffers, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, cAuxBuffers, 25)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, iLayerType, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, iLayerType, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, iLayerType, 26)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, bReserved, 1)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, bReserved, 1)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, bReserved, 27)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, dwLayerMask, 4)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, dwLayerMask, 4)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, dwLayerMask, 28)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, dwVisibleMask, 4)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, dwVisibleMask, 4)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, dwVisibleMask, 32)
+ TEST_FIELD_SIZE (PIXELFORMATDESCRIPTOR, dwDamageMask, 4)
+ TEST_FIELD_ALIGN (PIXELFORMATDESCRIPTOR, dwDamageMask, 4)
+ TEST_FIELD_OFFSET(PIXELFORMATDESCRIPTOR, dwDamageMask, 36)
}
static void test_pack_PLAYERPLANEDESCRIPTOR(void)
{
/* PLAYERPLANEDESCRIPTOR */
- TEST_TYPE(PLAYERPLANEDESCRIPTOR, 4, 4);
- TEST_TYPE_POINTER(PLAYERPLANEDESCRIPTOR, 32, 4);
+ TEST_TYPE_SIZE (PLAYERPLANEDESCRIPTOR, 4)
+ TEST_TYPE_ALIGN (PLAYERPLANEDESCRIPTOR, 4)
+ TEST_TARGET_SIZE (PLAYERPLANEDESCRIPTOR, 32)
+ TEST_TARGET_ALIGN(PLAYERPLANEDESCRIPTOR, 4)
}
static void test_pack_PLOCALESIGNATURE(void)
{
/* PLOCALESIGNATURE */
- TEST_TYPE(PLOCALESIGNATURE, 4, 4);
- TEST_TYPE_POINTER(PLOCALESIGNATURE, 32, 4);
+ TEST_TYPE_SIZE (PLOCALESIGNATURE, 4)
+ TEST_TYPE_ALIGN (PLOCALESIGNATURE, 4)
+ TEST_TARGET_SIZE (PLOCALESIGNATURE, 32)
+ TEST_TARGET_ALIGN(PLOCALESIGNATURE, 4)
}
static void test_pack_PLOGBRUSH(void)
{
/* PLOGBRUSH */
- TEST_TYPE(PLOGBRUSH, 4, 4);
- TEST_TYPE_POINTER(PLOGBRUSH, 12, 4);
+ TEST_TYPE_SIZE (PLOGBRUSH, 4)
+ TEST_TYPE_ALIGN (PLOGBRUSH, 4)
+ TEST_TARGET_SIZE (PLOGBRUSH, 12)
+ TEST_TARGET_ALIGN(PLOGBRUSH, 4)
}
static void test_pack_PLOGFONTA(void)
{
/* PLOGFONTA */
- TEST_TYPE(PLOGFONTA, 4, 4);
- TEST_TYPE_POINTER(PLOGFONTA, 60, 4);
+ TEST_TYPE_SIZE (PLOGFONTA, 4)
+ TEST_TYPE_ALIGN (PLOGFONTA, 4)
+ TEST_TARGET_SIZE (PLOGFONTA, 60)
+ TEST_TARGET_ALIGN(PLOGFONTA, 4)
}
static void test_pack_PLOGFONTW(void)
{
/* PLOGFONTW */
- TEST_TYPE(PLOGFONTW, 4, 4);
- TEST_TYPE_POINTER(PLOGFONTW, 92, 4);
+ TEST_TYPE_SIZE (PLOGFONTW, 4)
+ TEST_TYPE_ALIGN (PLOGFONTW, 4)
+ TEST_TARGET_SIZE (PLOGFONTW, 92)
+ TEST_TARGET_ALIGN(PLOGFONTW, 4)
}
static void test_pack_PMETAHEADER(void)
{
/* PMETAHEADER */
- TEST_TYPE(PMETAHEADER, 4, 4);
- TEST_TYPE_POINTER(PMETAHEADER, 18, 2);
+ TEST_TYPE_SIZE (PMETAHEADER, 4)
+ TEST_TYPE_ALIGN (PMETAHEADER, 4)
+ TEST_TARGET_SIZE (PMETAHEADER, 18)
+ TEST_TARGET_ALIGN(PMETAHEADER, 2)
}
static void test_pack_PMETARECORD(void)
{
/* PMETARECORD */
- TEST_TYPE(PMETARECORD, 4, 4);
- TEST_TYPE_POINTER(PMETARECORD, 8, 4);
+ TEST_TYPE_SIZE (PMETARECORD, 4)
+ TEST_TYPE_ALIGN (PMETARECORD, 4)
+ TEST_TARGET_SIZE (PMETARECORD, 8)
+ TEST_TARGET_ALIGN(PMETARECORD, 4)
}
static void test_pack_PNEWTEXTMETRICA(void)
{
/* PNEWTEXTMETRICA */
- TEST_TYPE(PNEWTEXTMETRICA, 4, 4);
- TEST_TYPE_POINTER(PNEWTEXTMETRICA, 72, 4);
+ TEST_TYPE_SIZE (PNEWTEXTMETRICA, 4)
+ TEST_TYPE_ALIGN (PNEWTEXTMETRICA, 4)
+ TEST_TARGET_SIZE (PNEWTEXTMETRICA, 72)
+ TEST_TARGET_ALIGN(PNEWTEXTMETRICA, 4)
}
static void test_pack_PNEWTEXTMETRICW(void)
{
/* PNEWTEXTMETRICW */
- TEST_TYPE(PNEWTEXTMETRICW, 4, 4);
- TEST_TYPE_POINTER(PNEWTEXTMETRICW, 76, 4);
+ TEST_TYPE_SIZE (PNEWTEXTMETRICW, 4)
+ TEST_TYPE_ALIGN (PNEWTEXTMETRICW, 4)
+ TEST_TARGET_SIZE (PNEWTEXTMETRICW, 76)
+ TEST_TARGET_ALIGN(PNEWTEXTMETRICW, 4)
}
static void test_pack_POINTFLOAT(void)
{
/* POINTFLOAT (pack 4) */
- TEST_TYPE(POINTFLOAT, 8, 4);
- TEST_FIELD(POINTFLOAT, FLOAT, x, 0, 4, 4);
- TEST_FIELD(POINTFLOAT, FLOAT, y, 4, 4, 4);
+ TEST_TYPE_SIZE (POINTFLOAT, 8)
+ TEST_TYPE_ALIGN (POINTFLOAT, 4)
+ TEST_FIELD_SIZE (POINTFLOAT, x, 4)
+ TEST_FIELD_ALIGN (POINTFLOAT, x, 4)
+ TEST_FIELD_OFFSET(POINTFLOAT, x, 0)
+ TEST_FIELD_SIZE (POINTFLOAT, y, 4)
+ TEST_FIELD_ALIGN (POINTFLOAT, y, 4)
+ TEST_FIELD_OFFSET(POINTFLOAT, y, 4)
}
static void test_pack_POINTFX(void)
{
/* POINTFX (pack 4) */
- TEST_TYPE(POINTFX, 8, 2);
- TEST_FIELD(POINTFX, FIXED, x, 0, 4, 2);
- TEST_FIELD(POINTFX, FIXED, y, 4, 4, 2);
+ TEST_TYPE_SIZE (POINTFX, 8)
+ TEST_TYPE_ALIGN (POINTFX, 2)
+ TEST_FIELD_SIZE (POINTFX, x, 4)
+ TEST_FIELD_ALIGN (POINTFX, x, 2)
+ TEST_FIELD_OFFSET(POINTFX, x, 0)
+ TEST_FIELD_SIZE (POINTFX, y, 4)
+ TEST_FIELD_ALIGN (POINTFX, y, 2)
+ TEST_FIELD_OFFSET(POINTFX, y, 4)
}
static void test_pack_POLYTEXTA(void)
{
/* POLYTEXTA (pack 4) */
- TEST_TYPE(POLYTEXTA, 40, 4);
- TEST_FIELD(POLYTEXTA, INT, x, 0, 4, 4);
- TEST_FIELD(POLYTEXTA, INT, y, 4, 4, 4);
- TEST_FIELD(POLYTEXTA, UINT, n, 8, 4, 4);
- TEST_FIELD(POLYTEXTA, LPCSTR, lpstr, 12, 4, 4);
- TEST_FIELD(POLYTEXTA, UINT, uiFlags, 16, 4, 4);
- TEST_FIELD(POLYTEXTA, RECT, rcl, 20, 16, 4);
- TEST_FIELD(POLYTEXTA, INT *, pdx, 36, 4, 4);
+ TEST_TYPE_SIZE (POLYTEXTA, 40)
+ TEST_TYPE_ALIGN (POLYTEXTA, 4)
+ TEST_FIELD_SIZE (POLYTEXTA, x, 4)
+ TEST_FIELD_ALIGN (POLYTEXTA, x, 4)
+ TEST_FIELD_OFFSET(POLYTEXTA, x, 0)
+ TEST_FIELD_SIZE (POLYTEXTA, y, 4)
+ TEST_FIELD_ALIGN (POLYTEXTA, y, 4)
+ TEST_FIELD_OFFSET(POLYTEXTA, y, 4)
+ TEST_FIELD_SIZE (POLYTEXTA, n, 4)
+ TEST_FIELD_ALIGN (POLYTEXTA, n, 4)
+ TEST_FIELD_OFFSET(POLYTEXTA, n, 8)
+ TEST_FIELD_SIZE (POLYTEXTA, lpstr, 4)
+ TEST_FIELD_ALIGN (POLYTEXTA, lpstr, 4)
+ TEST_FIELD_OFFSET(POLYTEXTA, lpstr, 12)
+ TEST_FIELD_SIZE (POLYTEXTA, uiFlags, 4)
+ TEST_FIELD_ALIGN (POLYTEXTA, uiFlags, 4)
+ TEST_FIELD_OFFSET(POLYTEXTA, uiFlags, 16)
+ TEST_FIELD_SIZE (POLYTEXTA, rcl, 16)
+ TEST_FIELD_ALIGN (POLYTEXTA, rcl, 4)
+ TEST_FIELD_OFFSET(POLYTEXTA, rcl, 20)
+ TEST_FIELD_SIZE (POLYTEXTA, pdx, 4)
+ TEST_FIELD_ALIGN (POLYTEXTA, pdx, 4)
+ TEST_FIELD_OFFSET(POLYTEXTA, pdx, 36)
}
static void test_pack_POLYTEXTW(void)
{
/* POLYTEXTW (pack 4) */
- TEST_TYPE(POLYTEXTW, 40, 4);
- TEST_FIELD(POLYTEXTW, INT, x, 0, 4, 4);
- TEST_FIELD(POLYTEXTW, INT, y, 4, 4, 4);
- TEST_FIELD(POLYTEXTW, UINT, n, 8, 4, 4);
- TEST_FIELD(POLYTEXTW, LPCWSTR, lpstr, 12, 4, 4);
- TEST_FIELD(POLYTEXTW, UINT, uiFlags, 16, 4, 4);
- TEST_FIELD(POLYTEXTW, RECT, rcl, 20, 16, 4);
- TEST_FIELD(POLYTEXTW, INT *, pdx, 36, 4, 4);
+ TEST_TYPE_SIZE (POLYTEXTW, 40)
+ TEST_TYPE_ALIGN (POLYTEXTW, 4)
+ TEST_FIELD_SIZE (POLYTEXTW, x, 4)
+ TEST_FIELD_ALIGN (POLYTEXTW, x, 4)
+ TEST_FIELD_OFFSET(POLYTEXTW, x, 0)
+ TEST_FIELD_SIZE (POLYTEXTW, y, 4)
+ TEST_FIELD_ALIGN (POLYTEXTW, y, 4)
+ TEST_FIELD_OFFSET(POLYTEXTW, y, 4)
+ TEST_FIELD_SIZE (POLYTEXTW, n, 4)
+ TEST_FIELD_ALIGN (POLYTEXTW, n, 4)
+ TEST_FIELD_OFFSET(POLYTEXTW, n, 8)
+ TEST_FIELD_SIZE (POLYTEXTW, lpstr, 4)
+ TEST_FIELD_ALIGN (POLYTEXTW, lpstr, 4)
+ TEST_FIELD_OFFSET(POLYTEXTW, lpstr, 12)
+ TEST_FIELD_SIZE (POLYTEXTW, uiFlags, 4)
+ TEST_FIELD_ALIGN (POLYTEXTW, uiFlags, 4)
+ TEST_FIELD_OFFSET(POLYTEXTW, uiFlags, 16)
+ TEST_FIELD_SIZE (POLYTEXTW, rcl, 16)
+ TEST_FIELD_ALIGN (POLYTEXTW, rcl, 4)
+ TEST_FIELD_OFFSET(POLYTEXTW, rcl, 20)
+ TEST_FIELD_SIZE (POLYTEXTW, pdx, 4)
+ TEST_FIELD_ALIGN (POLYTEXTW, pdx, 4)
+ TEST_FIELD_OFFSET(POLYTEXTW, pdx, 36)
}
static void test_pack_POUTLINETEXTMETRICA(void)
{
/* POUTLINETEXTMETRICA */
- TEST_TYPE(POUTLINETEXTMETRICA, 4, 4);
- TEST_TYPE_POINTER(POUTLINETEXTMETRICA, 212, 4);
+ TEST_TYPE_SIZE (POUTLINETEXTMETRICA, 4)
+ TEST_TYPE_ALIGN (POUTLINETEXTMETRICA, 4)
+ TEST_TARGET_SIZE (POUTLINETEXTMETRICA, 212)
+ TEST_TARGET_ALIGN(POUTLINETEXTMETRICA, 4)
}
static void test_pack_POUTLINETEXTMETRICW(void)
{
/* POUTLINETEXTMETRICW */
- TEST_TYPE(POUTLINETEXTMETRICW, 4, 4);
- TEST_TYPE_POINTER(POUTLINETEXTMETRICW, 216, 4);
+ TEST_TYPE_SIZE (POUTLINETEXTMETRICW, 4)
+ TEST_TYPE_ALIGN (POUTLINETEXTMETRICW, 4)
+ TEST_TARGET_SIZE (POUTLINETEXTMETRICW, 216)
+ TEST_TARGET_ALIGN(POUTLINETEXTMETRICW, 4)
}
static void test_pack_PPELARRAY(void)
{
/* PPELARRAY */
- TEST_TYPE(PPELARRAY, 4, 4);
- TEST_TYPE_POINTER(PPELARRAY, 20, 4);
+ TEST_TYPE_SIZE (PPELARRAY, 4)
+ TEST_TYPE_ALIGN (PPELARRAY, 4)
+ TEST_TARGET_SIZE (PPELARRAY, 20)
+ TEST_TARGET_ALIGN(PPELARRAY, 4)
}
static void test_pack_PPIXELFORMATDESCRIPTOR(void)
{
/* PPIXELFORMATDESCRIPTOR */
- TEST_TYPE(PPIXELFORMATDESCRIPTOR, 4, 4);
- TEST_TYPE_POINTER(PPIXELFORMATDESCRIPTOR, 40, 4);
+ TEST_TYPE_SIZE (PPIXELFORMATDESCRIPTOR, 4)
+ TEST_TYPE_ALIGN (PPIXELFORMATDESCRIPTOR, 4)
+ TEST_TARGET_SIZE (PPIXELFORMATDESCRIPTOR, 40)
+ TEST_TARGET_ALIGN(PPIXELFORMATDESCRIPTOR, 4)
}
static void test_pack_PPOINTFLOAT(void)
{
/* PPOINTFLOAT */
- TEST_TYPE(PPOINTFLOAT, 4, 4);
- TEST_TYPE_POINTER(PPOINTFLOAT, 8, 4);
+ TEST_TYPE_SIZE (PPOINTFLOAT, 4)
+ TEST_TYPE_ALIGN (PPOINTFLOAT, 4)
+ TEST_TARGET_SIZE (PPOINTFLOAT, 8)
+ TEST_TARGET_ALIGN(PPOINTFLOAT, 4)
}
static void test_pack_PPOLYTEXTA(void)
{
/* PPOLYTEXTA */
- TEST_TYPE(PPOLYTEXTA, 4, 4);
- TEST_TYPE_POINTER(PPOLYTEXTA, 40, 4);
+ TEST_TYPE_SIZE (PPOLYTEXTA, 4)
+ TEST_TYPE_ALIGN (PPOLYTEXTA, 4)
+ TEST_TARGET_SIZE (PPOLYTEXTA, 40)
+ TEST_TARGET_ALIGN(PPOLYTEXTA, 4)
}
static void test_pack_PPOLYTEXTW(void)
{
/* PPOLYTEXTW */
- TEST_TYPE(PPOLYTEXTW, 4, 4);
- TEST_TYPE_POINTER(PPOLYTEXTW, 40, 4);
+ TEST_TYPE_SIZE (PPOLYTEXTW, 4)
+ TEST_TYPE_ALIGN (PPOLYTEXTW, 4)
+ TEST_TARGET_SIZE (PPOLYTEXTW, 40)
+ TEST_TARGET_ALIGN(PPOLYTEXTW, 4)
}
static void test_pack_PRGNDATA(void)
{
/* PRGNDATA */
- TEST_TYPE(PRGNDATA, 4, 4);
- TEST_TYPE_POINTER(PRGNDATA, 36, 4);
+ TEST_TYPE_SIZE (PRGNDATA, 4)
+ TEST_TYPE_ALIGN (PRGNDATA, 4)
+ TEST_TARGET_SIZE (PRGNDATA, 36)
+ TEST_TARGET_ALIGN(PRGNDATA, 4)
}
static void test_pack_PRGNDATAHEADER(void)
{
/* PRGNDATAHEADER */
- TEST_TYPE(PRGNDATAHEADER, 4, 4);
- TEST_TYPE_POINTER(PRGNDATAHEADER, 32, 4);
+ TEST_TYPE_SIZE (PRGNDATAHEADER, 4)
+ TEST_TYPE_ALIGN (PRGNDATAHEADER, 4)
+ TEST_TARGET_SIZE (PRGNDATAHEADER, 32)
+ TEST_TARGET_ALIGN(PRGNDATAHEADER, 4)
}
static void test_pack_PTEXTMETRICA(void)
{
/* PTEXTMETRICA */
- TEST_TYPE(PTEXTMETRICA, 4, 4);
- TEST_TYPE_POINTER(PTEXTMETRICA, 56, 4);
+ TEST_TYPE_SIZE (PTEXTMETRICA, 4)
+ TEST_TYPE_ALIGN (PTEXTMETRICA, 4)
+ TEST_TARGET_SIZE (PTEXTMETRICA, 56)
+ TEST_TARGET_ALIGN(PTEXTMETRICA, 4)
}
static void test_pack_PTEXTMETRICW(void)
{
/* PTEXTMETRICW */
- TEST_TYPE(PTEXTMETRICW, 4, 4);
- TEST_TYPE_POINTER(PTEXTMETRICW, 60, 4);
+ TEST_TYPE_SIZE (PTEXTMETRICW, 4)
+ TEST_TYPE_ALIGN (PTEXTMETRICW, 4)
+ TEST_TARGET_SIZE (PTEXTMETRICW, 60)
+ TEST_TARGET_ALIGN(PTEXTMETRICW, 4)
}
static void test_pack_PTRIVERTEX(void)
{
/* PTRIVERTEX */
- TEST_TYPE(PTRIVERTEX, 4, 4);
- TEST_TYPE_POINTER(PTRIVERTEX, 16, 4);
+ TEST_TYPE_SIZE (PTRIVERTEX, 4)
+ TEST_TYPE_ALIGN (PTRIVERTEX, 4)
+ TEST_TARGET_SIZE (PTRIVERTEX, 16)
+ TEST_TARGET_ALIGN(PTRIVERTEX, 4)
}
static void test_pack_PXFORM(void)
{
/* PXFORM */
- TEST_TYPE(PXFORM, 4, 4);
- TEST_TYPE_POINTER(PXFORM, 24, 4);
+ TEST_TYPE_SIZE (PXFORM, 4)
+ TEST_TYPE_ALIGN (PXFORM, 4)
+ TEST_TARGET_SIZE (PXFORM, 24)
+ TEST_TARGET_ALIGN(PXFORM, 4)
}
static void test_pack_RASTERIZER_STATUS(void)
{
/* RASTERIZER_STATUS (pack 4) */
- TEST_TYPE(RASTERIZER_STATUS, 6, 2);
- TEST_FIELD(RASTERIZER_STATUS, SHORT, nSize, 0, 2, 2);
- TEST_FIELD(RASTERIZER_STATUS, SHORT, wFlags, 2, 2, 2);
- TEST_FIELD(RASTERIZER_STATUS, SHORT, nLanguageID, 4, 2, 2);
+ TEST_TYPE_SIZE (RASTERIZER_STATUS, 6)
+ TEST_TYPE_ALIGN (RASTERIZER_STATUS, 2)
+ TEST_FIELD_SIZE (RASTERIZER_STATUS, nSize, 2)
+ TEST_FIELD_ALIGN (RASTERIZER_STATUS, nSize, 2)
+ TEST_FIELD_OFFSET(RASTERIZER_STATUS, nSize, 0)
+ TEST_FIELD_SIZE (RASTERIZER_STATUS, wFlags, 2)
+ TEST_FIELD_ALIGN (RASTERIZER_STATUS, wFlags, 2)
+ TEST_FIELD_OFFSET(RASTERIZER_STATUS, wFlags, 2)
+ TEST_FIELD_SIZE (RASTERIZER_STATUS, nLanguageID, 2)
+ TEST_FIELD_ALIGN (RASTERIZER_STATUS, nLanguageID, 2)
+ TEST_FIELD_OFFSET(RASTERIZER_STATUS, nLanguageID, 4)
}
static void test_pack_RGBQUAD(void)
{
/* RGBQUAD (pack 4) */
- TEST_TYPE(RGBQUAD, 4, 1);
- TEST_FIELD(RGBQUAD, BYTE, rgbBlue, 0, 1, 1);
- TEST_FIELD(RGBQUAD, BYTE, rgbGreen, 1, 1, 1);
- TEST_FIELD(RGBQUAD, BYTE, rgbRed, 2, 1, 1);
- TEST_FIELD(RGBQUAD, BYTE, rgbReserved, 3, 1, 1);
+ TEST_TYPE_SIZE (RGBQUAD, 4)
+ TEST_TYPE_ALIGN (RGBQUAD, 1)
+ TEST_FIELD_SIZE (RGBQUAD, rgbBlue, 1)
+ TEST_FIELD_ALIGN (RGBQUAD, rgbBlue, 1)
+ TEST_FIELD_OFFSET(RGBQUAD, rgbBlue, 0)
+ TEST_FIELD_SIZE (RGBQUAD, rgbGreen, 1)
+ TEST_FIELD_ALIGN (RGBQUAD, rgbGreen, 1)
+ TEST_FIELD_OFFSET(RGBQUAD, rgbGreen, 1)
+ TEST_FIELD_SIZE (RGBQUAD, rgbRed, 1)
+ TEST_FIELD_ALIGN (RGBQUAD, rgbRed, 1)
+ TEST_FIELD_OFFSET(RGBQUAD, rgbRed, 2)
+ TEST_FIELD_SIZE (RGBQUAD, rgbReserved, 1)
+ TEST_FIELD_ALIGN (RGBQUAD, rgbReserved, 1)
+ TEST_FIELD_OFFSET(RGBQUAD, rgbReserved, 3)
}
static void test_pack_RGBTRIPLE(void)
{
/* RGBTRIPLE (pack 4) */
- TEST_TYPE(RGBTRIPLE, 3, 1);
- TEST_FIELD(RGBTRIPLE, BYTE, rgbtBlue, 0, 1, 1);
- TEST_FIELD(RGBTRIPLE, BYTE, rgbtGreen, 1, 1, 1);
- TEST_FIELD(RGBTRIPLE, BYTE, rgbtRed, 2, 1, 1);
+ TEST_TYPE_SIZE (RGBTRIPLE, 3)
+ TEST_TYPE_ALIGN (RGBTRIPLE, 1)
+ TEST_FIELD_SIZE (RGBTRIPLE, rgbtBlue, 1)
+ TEST_FIELD_ALIGN (RGBTRIPLE, rgbtBlue, 1)
+ TEST_FIELD_OFFSET(RGBTRIPLE, rgbtBlue, 0)
+ TEST_FIELD_SIZE (RGBTRIPLE, rgbtGreen, 1)
+ TEST_FIELD_ALIGN (RGBTRIPLE, rgbtGreen, 1)
+ TEST_FIELD_OFFSET(RGBTRIPLE, rgbtGreen, 1)
+ TEST_FIELD_SIZE (RGBTRIPLE, rgbtRed, 1)
+ TEST_FIELD_ALIGN (RGBTRIPLE, rgbtRed, 1)
+ TEST_FIELD_OFFSET(RGBTRIPLE, rgbtRed, 2)
}
static void test_pack_RGNDATA(void)
{
/* RGNDATA (pack 4) */
- TEST_TYPE(RGNDATA, 36, 4);
- TEST_FIELD(RGNDATA, RGNDATAHEADER, rdh, 0, 32, 4);
- TEST_FIELD(RGNDATA, char[1], Buffer, 32, 1, 1);
+ TEST_TYPE_SIZE (RGNDATA, 36)
+ TEST_TYPE_ALIGN (RGNDATA, 4)
+ TEST_FIELD_SIZE (RGNDATA, rdh, 32)
+ TEST_FIELD_ALIGN (RGNDATA, rdh, 4)
+ TEST_FIELD_OFFSET(RGNDATA, rdh, 0)
+ TEST_FIELD_SIZE (RGNDATA, Buffer, 1)
+ TEST_FIELD_ALIGN (RGNDATA, Buffer, 1)
+ TEST_FIELD_OFFSET(RGNDATA, Buffer, 32)
}
static void test_pack_RGNDATAHEADER(void)
{
/* RGNDATAHEADER (pack 4) */
- TEST_TYPE(RGNDATAHEADER, 32, 4);
- TEST_FIELD(RGNDATAHEADER, DWORD, dwSize, 0, 4, 4);
- TEST_FIELD(RGNDATAHEADER, DWORD, iType, 4, 4, 4);
- TEST_FIELD(RGNDATAHEADER, DWORD, nCount, 8, 4, 4);
- TEST_FIELD(RGNDATAHEADER, DWORD, nRgnSize, 12, 4, 4);
- TEST_FIELD(RGNDATAHEADER, RECT, rcBound, 16, 16, 4);
+ TEST_TYPE_SIZE (RGNDATAHEADER, 32)
+ TEST_TYPE_ALIGN (RGNDATAHEADER, 4)
+ TEST_FIELD_SIZE (RGNDATAHEADER, dwSize, 4)
+ TEST_FIELD_ALIGN (RGNDATAHEADER, dwSize, 4)
+ TEST_FIELD_OFFSET(RGNDATAHEADER, dwSize, 0)
+ TEST_FIELD_SIZE (RGNDATAHEADER, iType, 4)
+ TEST_FIELD_ALIGN (RGNDATAHEADER, iType, 4)
+ TEST_FIELD_OFFSET(RGNDATAHEADER, iType, 4)
+ TEST_FIELD_SIZE (RGNDATAHEADER, nCount, 4)
+ TEST_FIELD_ALIGN (RGNDATAHEADER, nCount, 4)
+ TEST_FIELD_OFFSET(RGNDATAHEADER, nCount, 8)
+ TEST_FIELD_SIZE (RGNDATAHEADER, nRgnSize, 4)
+ TEST_FIELD_ALIGN (RGNDATAHEADER, nRgnSize, 4)
+ TEST_FIELD_OFFSET(RGNDATAHEADER, nRgnSize, 12)
+ TEST_FIELD_SIZE (RGNDATAHEADER, rcBound, 16)
+ TEST_FIELD_ALIGN (RGNDATAHEADER, rcBound, 4)
+ TEST_FIELD_OFFSET(RGNDATAHEADER, rcBound, 16)
}
static void test_pack_TEXTMETRICA(void)
{
/* TEXTMETRICA (pack 4) */
- TEST_TYPE(TEXTMETRICA, 56, 4);
- TEST_FIELD(TEXTMETRICA, LONG, tmHeight, 0, 4, 4);
- TEST_FIELD(TEXTMETRICA, LONG, tmAscent, 4, 4, 4);
- TEST_FIELD(TEXTMETRICA, LONG, tmDescent, 8, 4, 4);
- TEST_FIELD(TEXTMETRICA, LONG, tmInternalLeading, 12, 4, 4);
- TEST_FIELD(TEXTMETRICA, LONG, tmExternalLeading, 16, 4, 4);
- TEST_FIELD(TEXTMETRICA, LONG, tmAveCharWidth, 20, 4, 4);
- TEST_FIELD(TEXTMETRICA, LONG, tmMaxCharWidth, 24, 4, 4);
- TEST_FIELD(TEXTMETRICA, LONG, tmWeight, 28, 4, 4);
- TEST_FIELD(TEXTMETRICA, LONG, tmOverhang, 32, 4, 4);
- TEST_FIELD(TEXTMETRICA, LONG, tmDigitizedAspectX, 36, 4, 4);
- TEST_FIELD(TEXTMETRICA, LONG, tmDigitizedAspectY, 40, 4, 4);
- TEST_FIELD(TEXTMETRICA, BYTE, tmFirstChar, 44, 1, 1);
- TEST_FIELD(TEXTMETRICA, BYTE, tmLastChar, 45, 1, 1);
- TEST_FIELD(TEXTMETRICA, BYTE, tmDefaultChar, 46, 1, 1);
- TEST_FIELD(TEXTMETRICA, BYTE, tmBreakChar, 47, 1, 1);
- TEST_FIELD(TEXTMETRICA, BYTE, tmItalic, 48, 1, 1);
- TEST_FIELD(TEXTMETRICA, BYTE, tmUnderlined, 49, 1, 1);
- TEST_FIELD(TEXTMETRICA, BYTE, tmStruckOut, 50, 1, 1);
- TEST_FIELD(TEXTMETRICA, BYTE, tmPitchAndFamily, 51, 1, 1);
- TEST_FIELD(TEXTMETRICA, BYTE, tmCharSet, 52, 1, 1);
+ TEST_TYPE_SIZE (TEXTMETRICA, 56)
+ TEST_TYPE_ALIGN (TEXTMETRICA, 4)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmHeight, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmHeight, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmHeight, 0)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmAscent, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmAscent, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmAscent, 4)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmDescent, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmDescent, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmDescent, 8)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmInternalLeading, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmInternalLeading, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmInternalLeading, 12)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmExternalLeading, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmExternalLeading, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmExternalLeading, 16)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmAveCharWidth, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmAveCharWidth, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmAveCharWidth, 20)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmMaxCharWidth, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmMaxCharWidth, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmMaxCharWidth, 24)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmWeight, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmWeight, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmWeight, 28)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmOverhang, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmOverhang, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmOverhang, 32)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmDigitizedAspectX, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmDigitizedAspectX, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmDigitizedAspectX, 36)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmDigitizedAspectY, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmDigitizedAspectY, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmDigitizedAspectY, 40)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmFirstChar, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmFirstChar, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmFirstChar, 44)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmLastChar, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmLastChar, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmLastChar, 45)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmDefaultChar, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmDefaultChar, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmDefaultChar, 46)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmBreakChar, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmBreakChar, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmBreakChar, 47)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmItalic, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmItalic, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmItalic, 48)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmUnderlined, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmUnderlined, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmUnderlined, 49)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmStruckOut, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmStruckOut, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmStruckOut, 50)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmPitchAndFamily, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmPitchAndFamily, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmPitchAndFamily, 51)
+ TEST_FIELD_SIZE (TEXTMETRICA, tmCharSet, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICA, tmCharSet, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICA, tmCharSet, 52)
}
static void test_pack_TEXTMETRICW(void)
{
/* TEXTMETRICW (pack 4) */
- TEST_TYPE(TEXTMETRICW, 60, 4);
- TEST_FIELD(TEXTMETRICW, LONG, tmHeight, 0, 4, 4);
- TEST_FIELD(TEXTMETRICW, LONG, tmAscent, 4, 4, 4);
- TEST_FIELD(TEXTMETRICW, LONG, tmDescent, 8, 4, 4);
- TEST_FIELD(TEXTMETRICW, LONG, tmInternalLeading, 12, 4, 4);
- TEST_FIELD(TEXTMETRICW, LONG, tmExternalLeading, 16, 4, 4);
- TEST_FIELD(TEXTMETRICW, LONG, tmAveCharWidth, 20, 4, 4);
- TEST_FIELD(TEXTMETRICW, LONG, tmMaxCharWidth, 24, 4, 4);
- TEST_FIELD(TEXTMETRICW, LONG, tmWeight, 28, 4, 4);
- TEST_FIELD(TEXTMETRICW, LONG, tmOverhang, 32, 4, 4);
- TEST_FIELD(TEXTMETRICW, LONG, tmDigitizedAspectX, 36, 4, 4);
- TEST_FIELD(TEXTMETRICW, LONG, tmDigitizedAspectY, 40, 4, 4);
- TEST_FIELD(TEXTMETRICW, WCHAR, tmFirstChar, 44, 2, 2);
- TEST_FIELD(TEXTMETRICW, WCHAR, tmLastChar, 46, 2, 2);
- TEST_FIELD(TEXTMETRICW, WCHAR, tmDefaultChar, 48, 2, 2);
- TEST_FIELD(TEXTMETRICW, WCHAR, tmBreakChar, 50, 2, 2);
- TEST_FIELD(TEXTMETRICW, BYTE, tmItalic, 52, 1, 1);
- TEST_FIELD(TEXTMETRICW, BYTE, tmUnderlined, 53, 1, 1);
- TEST_FIELD(TEXTMETRICW, BYTE, tmStruckOut, 54, 1, 1);
- TEST_FIELD(TEXTMETRICW, BYTE, tmPitchAndFamily, 55, 1, 1);
- TEST_FIELD(TEXTMETRICW, BYTE, tmCharSet, 56, 1, 1);
+ TEST_TYPE_SIZE (TEXTMETRICW, 60)
+ TEST_TYPE_ALIGN (TEXTMETRICW, 4)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmHeight, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmHeight, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmHeight, 0)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmAscent, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmAscent, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmAscent, 4)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmDescent, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmDescent, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmDescent, 8)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmInternalLeading, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmInternalLeading, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmInternalLeading, 12)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmExternalLeading, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmExternalLeading, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmExternalLeading, 16)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmAveCharWidth, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmAveCharWidth, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmAveCharWidth, 20)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmMaxCharWidth, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmMaxCharWidth, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmMaxCharWidth, 24)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmWeight, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmWeight, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmWeight, 28)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmOverhang, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmOverhang, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmOverhang, 32)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmDigitizedAspectX, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmDigitizedAspectX, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmDigitizedAspectX, 36)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmDigitizedAspectY, 4)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmDigitizedAspectY, 4)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmDigitizedAspectY, 40)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmFirstChar, 2)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmFirstChar, 2)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmFirstChar, 44)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmLastChar, 2)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmLastChar, 2)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmLastChar, 46)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmDefaultChar, 2)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmDefaultChar, 2)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmDefaultChar, 48)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmBreakChar, 2)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmBreakChar, 2)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmBreakChar, 50)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmItalic, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmItalic, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmItalic, 52)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmUnderlined, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmUnderlined, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmUnderlined, 53)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmStruckOut, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmStruckOut, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmStruckOut, 54)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmPitchAndFamily, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmPitchAndFamily, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmPitchAndFamily, 55)
+ TEST_FIELD_SIZE (TEXTMETRICW, tmCharSet, 1)
+ TEST_FIELD_ALIGN (TEXTMETRICW, tmCharSet, 1)
+ TEST_FIELD_OFFSET(TEXTMETRICW, tmCharSet, 56)
}
static void test_pack_TRIVERTEX(void)
{
/* TRIVERTEX (pack 4) */
- TEST_TYPE(TRIVERTEX, 16, 4);
- TEST_FIELD(TRIVERTEX, LONG, x, 0, 4, 4);
- TEST_FIELD(TRIVERTEX, LONG, y, 4, 4, 4);
- TEST_FIELD(TRIVERTEX, COLOR16, Red, 8, 2, 2);
- TEST_FIELD(TRIVERTEX, COLOR16, Green, 10, 2, 2);
- TEST_FIELD(TRIVERTEX, COLOR16, Blue, 12, 2, 2);
- TEST_FIELD(TRIVERTEX, COLOR16, Alpha, 14, 2, 2);
+ TEST_TYPE_SIZE (TRIVERTEX, 16)
+ TEST_TYPE_ALIGN (TRIVERTEX, 4)
+ TEST_FIELD_SIZE (TRIVERTEX, x, 4)
+ TEST_FIELD_ALIGN (TRIVERTEX, x, 4)
+ TEST_FIELD_OFFSET(TRIVERTEX, x, 0)
+ TEST_FIELD_SIZE (TRIVERTEX, y, 4)
+ TEST_FIELD_ALIGN (TRIVERTEX, y, 4)
+ TEST_FIELD_OFFSET(TRIVERTEX, y, 4)
+ TEST_FIELD_SIZE (TRIVERTEX, Red, 2)
+ TEST_FIELD_ALIGN (TRIVERTEX, Red, 2)
+ TEST_FIELD_OFFSET(TRIVERTEX, Red, 8)
+ TEST_FIELD_SIZE (TRIVERTEX, Green, 2)
+ TEST_FIELD_ALIGN (TRIVERTEX, Green, 2)
+ TEST_FIELD_OFFSET(TRIVERTEX, Green, 10)
+ TEST_FIELD_SIZE (TRIVERTEX, Blue, 2)
+ TEST_FIELD_ALIGN (TRIVERTEX, Blue, 2)
+ TEST_FIELD_OFFSET(TRIVERTEX, Blue, 12)
+ TEST_FIELD_SIZE (TRIVERTEX, Alpha, 2)
+ TEST_FIELD_ALIGN (TRIVERTEX, Alpha, 2)
+ TEST_FIELD_OFFSET(TRIVERTEX, Alpha, 14)
}
static void test_pack_TTPOLYCURVE(void)
{
/* TTPOLYCURVE (pack 4) */
- TEST_TYPE(TTPOLYCURVE, 12, 2);
- TEST_FIELD(TTPOLYCURVE, WORD, wType, 0, 2, 2);
- TEST_FIELD(TTPOLYCURVE, WORD, cpfx, 2, 2, 2);
- TEST_FIELD(TTPOLYCURVE, POINTFX[1], apfx, 4, 8, 2);
+ TEST_TYPE_SIZE (TTPOLYCURVE, 12)
+ TEST_TYPE_ALIGN (TTPOLYCURVE, 2)
+ TEST_FIELD_SIZE (TTPOLYCURVE, wType, 2)
+ TEST_FIELD_ALIGN (TTPOLYCURVE, wType, 2)
+ TEST_FIELD_OFFSET(TTPOLYCURVE, wType, 0)
+ TEST_FIELD_SIZE (TTPOLYCURVE, cpfx, 2)
+ TEST_FIELD_ALIGN (TTPOLYCURVE, cpfx, 2)
+ TEST_FIELD_OFFSET(TTPOLYCURVE, cpfx, 2)
+ TEST_FIELD_SIZE (TTPOLYCURVE, apfx, 8)
+ TEST_FIELD_ALIGN (TTPOLYCURVE, apfx, 2)
+ TEST_FIELD_OFFSET(TTPOLYCURVE, apfx, 4)
}
static void test_pack_TTPOLYGONHEADER(void)
{
/* TTPOLYGONHEADER (pack 4) */
- TEST_TYPE(TTPOLYGONHEADER, 16, 4);
- TEST_FIELD(TTPOLYGONHEADER, DWORD, cb, 0, 4, 4);
- TEST_FIELD(TTPOLYGONHEADER, DWORD, dwType, 4, 4, 4);
- TEST_FIELD(TTPOLYGONHEADER, POINTFX, pfxStart, 8, 8, 2);
+ TEST_TYPE_SIZE (TTPOLYGONHEADER, 16)
+ TEST_TYPE_ALIGN (TTPOLYGONHEADER, 4)
+ TEST_FIELD_SIZE (TTPOLYGONHEADER, cb, 4)
+ TEST_FIELD_ALIGN (TTPOLYGONHEADER, cb, 4)
+ TEST_FIELD_OFFSET(TTPOLYGONHEADER, cb, 0)
+ TEST_FIELD_SIZE (TTPOLYGONHEADER, dwType, 4)
+ TEST_FIELD_ALIGN (TTPOLYGONHEADER, dwType, 4)
+ TEST_FIELD_OFFSET(TTPOLYGONHEADER, dwType, 4)
+ TEST_FIELD_SIZE (TTPOLYGONHEADER, pfxStart, 8)
+ TEST_FIELD_ALIGN (TTPOLYGONHEADER, pfxStart, 2)
+ TEST_FIELD_OFFSET(TTPOLYGONHEADER, pfxStart, 8)
}
static void test_pack_XFORM(void)
{
/* XFORM (pack 4) */
- TEST_TYPE(XFORM, 24, 4);
- TEST_FIELD(XFORM, FLOAT, eM11, 0, 4, 4);
- TEST_FIELD(XFORM, FLOAT, eM12, 4, 4, 4);
- TEST_FIELD(XFORM, FLOAT, eM21, 8, 4, 4);
- TEST_FIELD(XFORM, FLOAT, eM22, 12, 4, 4);
- TEST_FIELD(XFORM, FLOAT, eDx, 16, 4, 4);
- TEST_FIELD(XFORM, FLOAT, eDy, 20, 4, 4);
+ TEST_TYPE_SIZE (XFORM, 24)
+ TEST_TYPE_ALIGN (XFORM, 4)
+ TEST_FIELD_SIZE (XFORM, eM11, 4)
+ TEST_FIELD_ALIGN (XFORM, eM11, 4)
+ TEST_FIELD_OFFSET(XFORM, eM11, 0)
+ TEST_FIELD_SIZE (XFORM, eM12, 4)
+ TEST_FIELD_ALIGN (XFORM, eM12, 4)
+ TEST_FIELD_OFFSET(XFORM, eM12, 4)
+ TEST_FIELD_SIZE (XFORM, eM21, 4)
+ TEST_FIELD_ALIGN (XFORM, eM21, 4)
+ TEST_FIELD_OFFSET(XFORM, eM21, 8)
+ TEST_FIELD_SIZE (XFORM, eM22, 4)
+ TEST_FIELD_ALIGN (XFORM, eM22, 4)
+ TEST_FIELD_OFFSET(XFORM, eM22, 12)
+ TEST_FIELD_SIZE (XFORM, eDx, 4)
+ TEST_FIELD_ALIGN (XFORM, eDx, 4)
+ TEST_FIELD_OFFSET(XFORM, eDx, 16)
+ TEST_FIELD_SIZE (XFORM, eDy, 4)
+ TEST_FIELD_ALIGN (XFORM, eDy, 4)
+ TEST_FIELD_OFFSET(XFORM, eDy, 20)
}
static void test_pack(void)
@@ -4366,5 +7049,9 @@ static void test_pack(void)
START_TEST(generated)
{
+#ifdef _WIN64
+ ok(0, "The type size / alignment tests don't support Win64 yet\n");
+#else
test_pack();
+#endif
}
diff --git a/rostests/winetests/gdi32/icm.c b/rostests/winetests/gdi32/icm.c
index 424082cc8a9..06812aa055b 100644
--- a/rostests/winetests/gdi32/icm.c
+++ b/rostests/winetests/gdi32/icm.c
@@ -39,7 +39,7 @@ static void test_GetICMProfileA( HDC dc )
ret = GetICMProfileA( NULL, NULL, NULL );
if ( !ret && ( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED ) )
{
- skip( "GetICMProfileA is not implemented\n" );
+ win_skip( "GetICMProfileA is not implemented\n" );
return;
}
ok( !ret, "GetICMProfileA succeeded\n" );
@@ -91,7 +91,7 @@ static void test_GetICMProfileW( HDC dc )
ret = GetICMProfileW( NULL, NULL, NULL );
if ( !ret && ( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED ) )
{
- skip( "GetICMProfileW is not implemented\n" );
+ win_skip( "GetICMProfileW is not implemented\n" );
return;
}
ok( !ret, "GetICMProfileW succeeded\n" );
@@ -136,7 +136,7 @@ static void test_SetICMMode( HDC dc )
impl = GetICMProfileA( NULL, NULL, NULL );
if ( !impl && ( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED ) )
{
- skip( "On NT4 where SetICMMode is not implemented but this is not advertised\n" );
+ win_skip( "On NT4 where SetICMMode is not implemented but this is not advertised\n" );
return;
}
@@ -165,7 +165,7 @@ static void test_SetICMMode( HDC dc )
dc = CreateDCW( displayW, NULL, NULL, NULL );
if ( !dc && ( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED ) )
{
- skip( "CreateDCW is not implemented\n" );
+ win_skip( "CreateDCW is not implemented\n" );
return;
}
ok( dc != NULL, "CreateDCW failed (%d)\n", GetLastError() );
diff --git a/rostests/winetests/gdi32/mapping.c b/rostests/winetests/gdi32/mapping.c
index 7e85ca9e05a..03428174617 100644
--- a/rostests/winetests/gdi32/mapping.c
+++ b/rostests/winetests/gdi32/mapping.c
@@ -75,8 +75,9 @@ static void test_world_transform(void)
{
BOOL is_win9x;
HDC hdc;
- INT ret, size_cx, size_cy, res_x, res_y;
+ INT ret, size_cx, size_cy, res_x, res_y, dpi_x, dpi_y;
XFORM xform;
+ SIZE size;
SetLastError(0xdeadbeef);
GetWorldTransform(0, NULL);
@@ -84,11 +85,23 @@ static void test_world_transform(void)
hdc = CreateCompatibleDC(0);
+ xform.eM11 = 1.0f;
+ xform.eM12 = 0.0f;
+ xform.eM21 = 0.0f;
+ xform.eM22 = 1.0f;
+ xform.eDx = 0.0f;
+ xform.eDy = 0.0f;
+ ret = SetWorldTransform(hdc, &xform);
+ ok(!ret, "SetWorldTransform should fail in GM_COMPATIBLE mode\n");
+
size_cx = GetDeviceCaps(hdc, HORZSIZE);
size_cy = GetDeviceCaps(hdc, VERTSIZE);
res_x = GetDeviceCaps(hdc, HORZRES);
res_y = GetDeviceCaps(hdc, VERTRES);
- trace("dc size %d x %d, resolution %d x %d\n", size_cx, size_cy, res_x, res_y);
+ dpi_x = GetDeviceCaps(hdc, LOGPIXELSX);
+ dpi_y = GetDeviceCaps(hdc, LOGPIXELSY);
+ trace("dc size %d x %d, resolution %d x %d dpi %d x %d\n",
+ size_cx, size_cy, res_x, res_y, dpi_x, dpi_y );
expect_viewport_ext(hdc, 1, 1);
expect_window_ext(hdc, 1, 1);
@@ -101,13 +114,19 @@ static void test_world_transform(void)
if (is_win9x)
{
- expect_viewport_ext(hdc, GetDeviceCaps(hdc, LOGPIXELSX), GetDeviceCaps(hdc, LOGPIXELSY));
+ expect_viewport_ext(hdc, dpi_x, dpi_y);
expect_window_ext(hdc, 254, -254);
}
else
{
expect_viewport_ext(hdc, res_x, -res_y);
- expect_window_ext(hdc, size_cx * 10, size_cy * 10);
+ ok( GetWindowExtEx( hdc, &size ), "GetWindowExtEx failed\n" );
+ ok( size.cx == size_cx * 10 ||
+ size.cx == MulDiv( res_x, 254, dpi_x ), /* Vista uses a more precise method */
+ "expected cx %d or %d, got %d\n", size_cx * 10, MulDiv( res_x, 254, dpi_x ), size.cx );
+ ok( size.cy == size_cy * 10 ||
+ size.cy == MulDiv( res_y, 254, dpi_y ), /* Vista uses a more precise method */
+ "expected cy %d or %d, got %d\n", size_cy * 10, MulDiv( res_y, 254, dpi_y ), size.cy );
}
expect_world_trasform(hdc, 1.0, 1.0);
expect_LPtoDP(hdc, MulDiv(1000 / 10, res_x, size_cx), -MulDiv(1000 / 10, res_y, size_cy));
@@ -134,6 +153,18 @@ static void test_world_transform(void)
expect_world_trasform(hdc, 1.0, 1.0);
expect_LPtoDP(hdc, 1000, 1000);
+ /* The transform must conform to (eM11 * eM22 != eM12 * eM21) requirement */
+ xform.eM11 = 1.0f;
+ xform.eM12 = 2.0f;
+ xform.eM21 = 1.0f;
+ xform.eM22 = 2.0f;
+ xform.eDx = 0.0f;
+ xform.eDy = 0.0f;
+ ret = SetWorldTransform(hdc, &xform);
+ ok(!ret ||
+ broken(ret), /* NT4 */
+ "SetWorldTransform should fail with an invalid xform\n");
+
xform.eM11 = 20.0f;
xform.eM12 = 0.0f;
xform.eM21 = 0.0f;
@@ -154,9 +185,15 @@ static void test_world_transform(void)
ok(ret == MM_TEXT, "expected MM_TEXT, got %d\n", ret);
expect_viewport_ext(hdc, res_x, -res_y);
- expect_window_ext(hdc, size_cx * 10, size_cy * 10);
+ ok( GetWindowExtEx( hdc, &size ), "GetWindowExtEx failed\n" );
+ ok( size.cx == size_cx * 10 ||
+ size.cx == MulDiv( res_x, 254, dpi_x ), /* Vista uses a more precise method */
+ "expected cx %d or %d, got %d\n", size_cx * 10, MulDiv( res_x, 254, dpi_x ), size.cx );
+ ok( size.cy == size_cy * 10 ||
+ size.cy == MulDiv( res_y, 254, dpi_y ), /* Vista uses a more precise method */
+ "expected cy %d or %d, got %d\n", size_cy * 10, MulDiv( res_y, 254, dpi_y ), size.cy );
expect_world_trasform(hdc, 20.0, 20.0);
- expect_LPtoDP(hdc, MulDiv(1000 * 2, res_x, size_cx), -MulDiv(1000 * 2, res_y, size_cy));
+ expect_LPtoDP(hdc, MulDiv(20000, res_x, size.cx), -MulDiv(20000, res_y, size.cy));
SetLastError(0xdeadbeef);
ret = SetMapMode(hdc, MM_TEXT);
@@ -167,6 +204,16 @@ static void test_world_transform(void)
expect_world_trasform(hdc, 20.0, 20.0);
expect_LPtoDP(hdc, 20000, 20000);
+ ret = SetGraphicsMode(hdc, GM_COMPATIBLE);
+ ok(ret, "SetGraphicsMode(GM_COMPATIBLE) should not fail if DC has't an identity transform\n");
+ ret = GetGraphicsMode(hdc);
+ ok(ret == GM_COMPATIBLE, "expected GM_COMPATIBLE, got %d\n", ret);
+
+ expect_viewport_ext(hdc, 1, 1);
+ expect_window_ext(hdc, 1, 1);
+ expect_world_trasform(hdc, 20.0, 20.0);
+ expect_LPtoDP(hdc, 20000, 20000);
+
DeleteDC(hdc);
}
diff --git a/rostests/winetests/gdi32/metafile.c b/rostests/winetests/gdi32/metafile.c
index 85bc5290abe..077977ec0de 100755
--- a/rostests/winetests/gdi32/metafile.c
+++ b/rostests/winetests/gdi32/metafile.c
@@ -121,8 +121,11 @@ static int CALLBACK eto_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table,
const EMREXTTEXTOUTW *emr_ExtTextOutW = (const EMREXTTEXTOUTW *)emr;
dx = (const INT *)((const char *)emr + emr_ExtTextOutW->emrtext.offDx);
+ SetLastError(0xdeadbeef);
ret = GetObjectA(GetCurrentObject(hdc, OBJ_FONT), sizeof(device_lf), &device_lf);
- ok( ret == sizeof(device_lf), "GetObjectA error %d\n", GetLastError());
+ ok( ret == sizeof(device_lf) ||
+ broken(ret == (sizeof(device_lf) - LF_FACESIZE + strlen(device_lf.lfFaceName) + 1)), /* NT4 */
+ "GetObjectA error %d\n", GetLastError());
/* compare up to lfOutPrecision, other values are not interesting,
* and in fact sometimes arbitrary adapted by Win9x.
@@ -327,6 +330,7 @@ static int CALLBACK savedc_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table,
SIZE size;
static int save_state;
static int restore_no;
+ static int select_no;
trace("hdc %p, emr->iType %d, emr->nSize %d, param %p\n",
hdc, emr->iType, emr->nSize, (void *)param);
@@ -372,6 +376,7 @@ static int CALLBACK savedc_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table,
save_state = 0;
restore_no = 0;
+ select_no = 0;
check_dc_state(hdc, restore_no, 0, 0, 1, 1, 0, 0, 1, 1);
break;
}
@@ -435,8 +440,16 @@ static int CALLBACK savedc_emf_enum_proc(HDC hdc, HANDLETABLE *handle_table,
save_state += restoredc->iRelative;
break;
}
+ case EMR_SELECTOBJECT:
+ {
+ const EMRSELECTOBJECT *selectobj = (const EMRSELECTOBJECT*)emr;
+ trace("EMR_SELECTOBJECT: %x\n",selectobj->ihObject);
+ select_no ++;
+ break;
+ }
case EMR_EOF:
ok(save_state == 0, "EOF save_state %d\n", save_state);
+ ok(select_no == 3, "Too many/few selects %i\n",select_no);
break;
}
@@ -469,6 +482,9 @@ static void test_SaveDC(void)
HENHMETAFILE hMetafile;
HWND hwnd;
int ret;
+ POINT pt;
+ SIZE size;
+ HFONT hFont,hFont2,hFontOld,hFontCheck;
static const RECT rc = { 0, 0, 150, 150 };
/* Win9x doesn't play EMFs on invisible windows */
@@ -495,6 +511,190 @@ static void test_SaveDC(void)
/* Force Win9x to update DC state */
SetPixelV(hdcMetafile, 50, 50, 0);
+ ret = GetViewportOrgEx(hdcMetafile, &pt);
+ ok(pt.x == 0,"Expecting ViewportOrg x of 0, got %i\n",pt.x);
+ ret = GetViewportExtEx(hdcMetafile, &size);
+ ok(size.cx == 120,"Expecting ViewportExt cx of 120, got %i\n",size.cx);
+ ret = SaveDC(hdcMetafile);
+ ok(ret == 1, "ret = %d\n", ret);
+
+ SetWindowOrgEx(hdcMetafile, -1, -1, NULL);
+ SetViewportOrgEx(hdcMetafile, 10, 10, NULL);
+ SetWindowExtEx(hdcMetafile, 150, 150, NULL );
+ SetViewportExtEx(hdcMetafile, 200, 200, NULL );
+
+ /* Force Win9x to update DC state */
+ SetPixelV(hdcMetafile, 50, 50, 0);
+
+ ret = GetViewportOrgEx(hdcMetafile, &pt);
+ ok(pt.x == 10,"Expecting ViewportOrg x of 10, got %i\n",pt.x);
+ ret = GetViewportExtEx(hdcMetafile, &size);
+ ok(size.cx == 200,"Expecting ViewportExt cx of 200, got %i\n",size.cx);
+ ret = SaveDC(hdcMetafile);
+ ok(ret == 2, "ret = %d\n", ret);
+
+ SetWindowOrgEx(hdcMetafile, -2, -2, NULL);
+ SetViewportOrgEx(hdcMetafile, 20, 20, NULL);
+ SetWindowExtEx(hdcMetafile, 120, 120, NULL );
+ SetViewportExtEx(hdcMetafile, 300, 300, NULL );
+ SetPolyFillMode( hdcMetafile, ALTERNATE );
+ SetBkColor( hdcMetafile, 0 );
+
+ /* Force Win9x to update DC state */
+ SetPixelV(hdcMetafile, 50, 50, 0);
+
+ ret = GetViewportOrgEx(hdcMetafile, &pt);
+ ok(pt.x == 20,"Expecting ViewportOrg x of 20, got %i\n",pt.x);
+ ret = GetViewportExtEx(hdcMetafile, &size);
+ ok(size.cx == 300,"Expecting ViewportExt cx of 300, got %i\n",size.cx);
+ ret = SaveDC(hdcMetafile);
+ ok(ret == 3, "ret = %d\n", ret);
+
+ SetWindowOrgEx(hdcMetafile, -3, -3, NULL);
+ SetViewportOrgEx(hdcMetafile, 30, 30, NULL);
+ SetWindowExtEx(hdcMetafile, 200, 200, NULL );
+ SetViewportExtEx(hdcMetafile, 400, 400, NULL );
+
+ SetPolyFillMode( hdcMetafile, WINDING );
+ SetBkColor( hdcMetafile, 0x123456 );
+ ok( GetPolyFillMode( hdcMetafile ) == WINDING, "PolyFillMode not restored\n" );
+ ok( GetBkColor( hdcMetafile ) == 0x123456, "Background color not restored\n" );
+
+ /* Force Win9x to update DC state */
+ SetPixelV(hdcMetafile, 50, 50, 0);
+
+ ret = GetViewportOrgEx(hdcMetafile, &pt);
+ ok(pt.x == 30,"Expecting ViewportOrg x of 30, got %i\n",pt.x);
+ ret = GetViewportExtEx(hdcMetafile, &size);
+ ok(size.cx == 400,"Expecting ViewportExt cx of 400, got %i\n",size.cx);
+ ret = RestoreDC(hdcMetafile, -1);
+ ok(ret, "ret = %d\n", ret);
+
+ ret = GetViewportOrgEx(hdcMetafile, &pt);
+ ok(pt.x == 20,"Expecting ViewportOrg x of 20, got %i\n",pt.x);
+ ret = GetViewportExtEx(hdcMetafile, &size);
+ ok(size.cx == 300,"Expecting ViewportExt cx of 300, got %i\n",size.cx);
+ ok( GetPolyFillMode( hdcMetafile ) == ALTERNATE, "PolyFillMode not restored\n" );
+ ok( GetBkColor( hdcMetafile ) == 0, "Background color not restored\n" );
+ ret = SaveDC(hdcMetafile);
+ ok(ret == 3, "ret = %d\n", ret);
+
+ ret = GetViewportOrgEx(hdcMetafile, &pt);
+ ok(pt.x == 20,"Expecting ViewportOrg x of 20, got %i\n",pt.x);
+ ret = GetViewportExtEx(hdcMetafile, &size);
+ ok(size.cx == 300,"Expecting ViewportExt cx of 300, got %i\n",size.cx);
+ ret = RestoreDC(hdcMetafile, 1);
+ ok(ret, "ret = %d\n", ret);
+ ret = GetViewportOrgEx(hdcMetafile, &pt);
+ ok(pt.x == 0,"Expecting ViewportOrg x of 0, got %i\n",pt.x);
+ ret = GetViewportExtEx(hdcMetafile, &size);
+ ok(size.cx == 120,"Expecting ViewportExt cx of 120, got %i\n",size.cx);
+
+ SetWindowOrgEx(hdcMetafile, -4, -4, NULL);
+ SetViewportOrgEx(hdcMetafile, 40, 40, NULL);
+ SetWindowExtEx(hdcMetafile, 500, 500, NULL );
+ SetViewportExtEx(hdcMetafile, 50, 50, NULL );
+
+ /* Force Win9x to update DC state */
+ SetPixelV(hdcMetafile, 50, 50, 0);
+
+ ret = GetViewportOrgEx(hdcMetafile, &pt);
+ ok(pt.x == 40,"Expecting ViewportOrg x of 40, got %i\n",pt.x);
+ ret = GetViewportExtEx(hdcMetafile, &size);
+ ok(size.cx == 50,"Expecting ViewportExt cx of 50, got %i\n",size.cx);
+ ret = SaveDC(hdcMetafile);
+ ok(ret == 1, "ret = %d\n", ret);
+
+ ret = GetViewportOrgEx(hdcMetafile, &pt);
+ ok(pt.x == 40,"Expecting ViewportOrg x of 40, got %i\n",pt.x);
+ ret = GetViewportExtEx(hdcMetafile, &size);
+ ok(size.cx == 50,"Expecting ViewportExt cx of 50, got %i\n",size.cx);
+ ret = SaveDC(hdcMetafile);
+ ok(ret == 2, "ret = %d\n", ret);
+
+ memset(&orig_lf, 0, sizeof(orig_lf));
+ orig_lf.lfCharSet = ANSI_CHARSET;
+ orig_lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+ orig_lf.lfWeight = FW_DONTCARE;
+ orig_lf.lfHeight = 7;
+ orig_lf.lfQuality = DEFAULT_QUALITY;
+ lstrcpyA(orig_lf.lfFaceName, "Arial");
+ hFont = CreateFontIndirectA(&orig_lf);
+ ok(hFont != 0, "CreateFontIndirectA error %d\n", GetLastError());
+
+ hFontOld = SelectObject(hdcMetafile, hFont);
+
+ hFont2 = CreateFontIndirectA(&orig_lf);
+ ok(hFont2 != 0, "CreateFontIndirectA error %d\n", GetLastError());
+ hFontCheck = SelectObject(hdcMetafile, hFont2);
+ ok(hFontCheck == hFont, "Font not selected\n");
+
+ /* Force Win9x to update DC state */
+ SetPixelV(hdcMetafile, 50, 50, 0);
+
+ ret = RestoreDC(hdcMetafile, 1);
+ ok(ret, "ret = %d\n", ret);
+ ret = GetViewportOrgEx(hdcMetafile, &pt);
+ ok(pt.x == 40,"Expecting ViewportOrg x of 40, got %i\n",pt.x);
+ ret = GetViewportExtEx(hdcMetafile, &size);
+ ok(size.cx == 50,"Expecting ViewportExt cx of 50, got %i\n",size.cx);
+
+ hFontCheck = SelectObject(hdcMetafile, hFontOld);
+ ok(hFontOld == hFontCheck && hFontCheck != hFont && hFontCheck != hFont2,
+ "Font not reverted with DC Restore\n");
+
+ ret = RestoreDC(hdcMetafile, -20);
+ ok(!ret, "ret = %d\n", ret);
+ ret = RestoreDC(hdcMetafile, 20);
+ ok(!ret, "ret = %d\n", ret);
+
+ hMetafile = CloseEnhMetaFile(hdcMetafile);
+ ok(hMetafile != 0, "CloseEnhMetaFile error %d\n", GetLastError());
+
+ ret = EnumEnhMetaFile(hdcDisplay, hMetafile, savedc_emf_enum_proc, 0, &rc);
+ ok( ret == 1, "EnumEnhMetaFile rets %d\n", ret);
+
+ ret = DeleteObject(hFont);
+ ok( ret, "DeleteObject error %d\n", GetLastError());
+ ret = DeleteObject(hFont2);
+ ok( ret, "DeleteObject error %d\n", GetLastError());
+ ret = DeleteEnhMetaFile(hMetafile);
+ ok( ret, "DeleteEnhMetaFile error %d\n", GetLastError());
+ ret = ReleaseDC(hwnd, hdcDisplay);
+ ok( ret, "ReleaseDC error %d\n", GetLastError());
+ DestroyWindow(hwnd);
+}
+
+static void test_mf_SaveDC(void)
+{
+ HDC hdcMetafile;
+ HMETAFILE hMetafile;
+ int ret;
+ POINT pt;
+ SIZE size;
+ HFONT hFont,hFont2,hFontOld,hFontCheck;
+
+ hdcMetafile = CreateMetaFileA(NULL);
+ ok(hdcMetafile != 0, "CreateMetaFileA error %d\n", GetLastError());
+
+ ret = SetMapMode(hdcMetafile, MM_ANISOTROPIC);
+ ok (ret, "SetMapMode should not fail\n");
+
+ /* Need to write something to the emf, otherwise Windows won't play it back */
+ LineTo(hdcMetafile, 150, 150);
+
+ SetWindowOrgEx(hdcMetafile, 0, 0, NULL);
+ SetViewportOrgEx(hdcMetafile, 0, 0, NULL);
+ SetWindowExtEx(hdcMetafile, 110, 110, NULL );
+ SetViewportExtEx(hdcMetafile, 120, 120, NULL );
+
+ /* Force Win9x to update DC state */
+ SetPixelV(hdcMetafile, 50, 50, 0);
+
+ ret = GetViewportOrgEx(hdcMetafile, &pt);
+ todo_wine ok (!ret, "GetViewportOrgEx should fail\n");
+ ret = GetViewportExtEx(hdcMetafile, &size);
+ todo_wine ok (!ret, "GetViewportExtEx should fail\n");
ret = SaveDC(hdcMetafile);
ok(ret == 1, "ret = %d\n", ret);
@@ -507,7 +707,7 @@ static void test_SaveDC(void)
SetPixelV(hdcMetafile, 50, 50, 0);
ret = SaveDC(hdcMetafile);
- ok(ret == 2, "ret = %d\n", ret);
+ ok(ret == 1, "ret = %d\n", ret);
SetWindowOrgEx(hdcMetafile, -2, -2, NULL);
SetViewportOrgEx(hdcMetafile, 20, 20, NULL);
@@ -516,15 +716,22 @@ static void test_SaveDC(void)
/* Force Win9x to update DC state */
SetPixelV(hdcMetafile, 50, 50, 0);
+ SetPolyFillMode( hdcMetafile, ALTERNATE );
+ SetBkColor( hdcMetafile, 0 );
ret = SaveDC(hdcMetafile);
- ok(ret == 3, "ret = %d\n", ret);
+ ok(ret == 1, "ret = %d\n", ret);
SetWindowOrgEx(hdcMetafile, -3, -3, NULL);
SetViewportOrgEx(hdcMetafile, 30, 30, NULL);
SetWindowExtEx(hdcMetafile, 200, 200, NULL );
SetViewportExtEx(hdcMetafile, 400, 400, NULL );
+ SetPolyFillMode( hdcMetafile, WINDING );
+ SetBkColor( hdcMetafile, 0x123456 );
+ todo_wine ok( !GetPolyFillMode( hdcMetafile ), "GetPolyFillMode succeeded\n" );
+ todo_wine ok( GetBkColor( hdcMetafile ) == CLR_INVALID, "GetBkColor succeeded\n" );
+
/* Force Win9x to update DC state */
SetPixelV(hdcMetafile, 50, 50, 0);
@@ -532,7 +739,7 @@ static void test_SaveDC(void)
ok(ret, "ret = %d\n", ret);
ret = SaveDC(hdcMetafile);
- ok(ret == 3, "ret = %d\n", ret);
+ ok(ret == 1, "ret = %d\n", ret);
ret = RestoreDC(hdcMetafile, 1);
ok(ret, "ret = %d\n", ret);
@@ -549,21 +756,54 @@ static void test_SaveDC(void)
ok(ret == 1, "ret = %d\n", ret);
ret = SaveDC(hdcMetafile);
- ok(ret == 2, "ret = %d\n", ret);
+ ok(ret == 1, "ret = %d\n", ret);
- hMetafile = CloseEnhMetaFile(hdcMetafile);
+ memset(&orig_lf, 0, sizeof(orig_lf));
+ orig_lf.lfCharSet = ANSI_CHARSET;
+ orig_lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+ orig_lf.lfWeight = FW_DONTCARE;
+ orig_lf.lfHeight = 7;
+ orig_lf.lfQuality = DEFAULT_QUALITY;
+ lstrcpyA(orig_lf.lfFaceName, "Arial");
+ hFont = CreateFontIndirectA(&orig_lf);
+ ok(hFont != 0, "CreateFontIndirectA error %d\n", GetLastError());
+
+ hFontOld = SelectObject(hdcMetafile, hFont);
+
+ hFont2 = CreateFontIndirectA(&orig_lf);
+ ok(hFont2 != 0, "CreateFontIndirectA error %d\n", GetLastError());
+ hFontCheck = SelectObject(hdcMetafile, hFont2);
+ ok(hFontCheck == hFont, "Font not selected\n");
+
+ /* Force Win9x to update DC state */
+ SetPixelV(hdcMetafile, 50, 50, 0);
+
+ ret = RestoreDC(hdcMetafile, 1);
+ ok(ret, "ret = %d\n", ret);
+
+ hFontCheck = SelectObject(hdcMetafile, hFontOld);
+ ok(hFontOld != hFontCheck && hFontCheck == hFont2, "Font incorrectly reverted with DC Restore\n");
+
+ /* restore level is ignored */
+ ret = RestoreDC(hdcMetafile, -20);
+ ok(ret, "ret = %d\n", ret);
+ ret = RestoreDC(hdcMetafile, 20);
+ ok(ret, "ret = %d\n", ret);
+ ret = RestoreDC(hdcMetafile, 0);
+ ok(ret, "ret = %d\n", ret);
+
+ hMetafile = CloseMetaFile(hdcMetafile);
ok(hMetafile != 0, "CloseEnhMetaFile error %d\n", GetLastError());
- ret = EnumEnhMetaFile(hdcDisplay, hMetafile, savedc_emf_enum_proc, 0, &rc);
- ok( ret == 1, "EnumEnhMetaFile rets %d\n", ret);
-
- ret = DeleteEnhMetaFile(hMetafile);
- ok( ret, "DeleteEnhMetaFile error %d\n", GetLastError());
- ret = ReleaseDC(hwnd, hdcDisplay);
- ok( ret, "ReleaseDC error %d\n", GetLastError());
- DestroyWindow(hwnd);
+ ret = DeleteMetaFile(hMetafile);
+ ok( ret, "DeleteMetaFile error %d\n", GetLastError());
+ ret = DeleteObject(hFont);
+ ok( ret, "DeleteObject error %d\n", GetLastError());
+ ret = DeleteObject(hFont2);
+ ok( ret, "DeleteObject error %d\n", GetLastError());
}
+
/* Win-format metafile (mfdrv) tests */
/* These tests compare the generated metafiles byte-by-byte */
/* with the nominal results. */
@@ -992,33 +1232,15 @@ static void dump_EMREXTTEXTOUT(const EMREXTTEXTOUTW *eto)
}
static BOOL match_emf_record(const ENHMETARECORD *emr1, const ENHMETARECORD *emr2,
- const char *desc, BOOL ignore_scaling, BOOL todo)
+ const char *desc, BOOL ignore_scaling)
{
int diff;
- if (emr1->iType != emr2->iType && todo)
- {
- todo_wine
- {
- ok(emr1->iType == emr2->iType, "%s: emr->iType %u != %u\n",
- desc, emr1->iType, emr2->iType);
- }
- }
- else
- ok(emr1->iType == emr2->iType, "%s: emr->iType %u != %u\n",
- desc, emr1->iType, emr2->iType);
+ ok(emr1->iType == emr2->iType, "%s: emr->iType %u != %u\n",
+ desc, emr1->iType, emr2->iType);
- if (emr1->nSize != emr2->nSize && todo)
- {
- todo_wine
- {
- ok(emr1->nSize == emr2->nSize, "%s: emr->nSize %u != %u\n",
- desc, emr1->nSize, emr2->nSize);
- }
- }
- else
- ok(emr1->nSize == emr2->nSize, "%s: emr->nSize %u != %u\n",
- desc, emr1->nSize, emr2->nSize);
+ ok(emr1->nSize == emr2->nSize, "%s: emr->nSize %u != %u\n",
+ desc, emr1->nSize, emr2->nSize);
/* iType and nSize mismatches are fatal */
if (emr1->iType != emr2->iType || emr1->nSize != emr2->nSize) return FALSE;
@@ -1057,13 +1279,8 @@ static BOOL match_emf_record(const ENHMETARECORD *emr1, const ENHMETARECORD *emr
}
else
diff = memcmp(emr1, emr2, emr1->nSize);
- if (diff && todo)
- {
- todo_wine
- ok(diff == 0, "%s: contents of record %u don't match\n", desc, emr1->iType);
- }
- else
- ok(diff == 0, "%s: contents of record %u don't match\n", desc, emr1->iType);
+
+ ok(diff == 0, "%s: contents of record %u don't match\n", desc, emr1->iType);
if (diff)
{
@@ -1071,7 +1288,7 @@ static BOOL match_emf_record(const ENHMETARECORD *emr1, const ENHMETARECORD *emr
dump_emf_record(emr2, "actual bits");
}
- return diff == 0 || todo; /* report all non-fatal record mismatches */
+ return diff == 0; /* report all non-fatal record mismatches */
}
/* Compare the EMF produced by a test function with the
@@ -1082,7 +1299,7 @@ static BOOL match_emf_record(const ENHMETARECORD *emr1, const ENHMETARECORD *emr
*/
static int compare_emf_bits(const HENHMETAFILE mf, const unsigned char *bits,
UINT bsize, const char *desc,
- BOOL ignore_scaling, BOOL todo)
+ BOOL ignore_scaling)
{
unsigned char buf[MF_BUFSIZE];
UINT mfsize, offset;
@@ -1093,12 +1310,6 @@ static int compare_emf_bits(const HENHMETAFILE mf, const unsigned char *bits,
if (mfsize < MF_BUFSIZE)
{
- if (mfsize != bsize && todo)
- {
- todo_wine
- ok(mfsize == bsize, "%s: mfsize=%d, bsize=%d\n", desc, mfsize, bsize);
- }
- else
ok(mfsize == bsize, "%s: mfsize=%d, bsize=%d\n", desc, mfsize, bsize);
}
else
@@ -1116,20 +1327,8 @@ static int compare_emf_bits(const HENHMETAFILE mf, const unsigned char *bits,
ok(emh1->iType == emh2->iType, "expected EMR_HEADER, got %u\n", emh2->iType);
ok(emh1->nSize == emh2->nSize, "expected nSize %u, got %u\n", emh1->nSize, emh2->nSize);
ok(emh1->dSignature == emh2->dSignature, "expected dSignature %u, got %u\n", emh1->dSignature, emh2->dSignature);
- if (todo && emh1->nBytes != emh2->nBytes)
- {
- todo_wine
- ok(emh1->nBytes == emh2->nBytes, "expected nBytes %u, got %u\n", emh1->nBytes, emh2->nBytes);
- }
- else
- ok(emh1->nBytes == emh2->nBytes, "expected nBytes %u, got %u\n", emh1->nBytes, emh2->nBytes);
- if (todo && emh1->nRecords != emh2->nRecords)
- {
- todo_wine
- ok(emh1->nRecords == emh2->nRecords, "expected nBytes %u, got %u\n", emh1->nRecords, emh2->nRecords);
- }
- else
- ok(emh1->nRecords == emh2->nRecords, "expected nBytes %u, got %u\n", emh1->nRecords, emh2->nRecords);
+ ok(emh1->nBytes == emh2->nBytes, "expected nBytes %u, got %u\n", emh1->nBytes, emh2->nBytes);
+ ok(emh1->nRecords == emh2->nRecords, "expected nBytes %u, got %u\n", emh1->nRecords, emh2->nRecords);
offset = emh1->nSize;
while (offset < emh1->nBytes)
@@ -1140,7 +1339,7 @@ static int compare_emf_bits(const HENHMETAFILE mf, const unsigned char *bits,
trace("EMF record %u, size %u/record %u, size %u\n",
emr1->iType, emr1->nSize, emr2->iType, emr2->nSize);
- if (!match_emf_record(emr1, emr2, desc, ignore_scaling, todo)) return -1;
+ if (!match_emf_record(emr1, emr2, desc, ignore_scaling)) return -1;
offset += emr1->nSize;
}
@@ -1261,7 +1460,9 @@ static void test_SetMetaFileBits(void)
SetLastError(0xdeadbeef);
hmf = SetMetaFileBitsEx(0, MF_GRAPHICS_BITS);
ok(!hmf, "SetMetaFileBitsEx should fail\n");
- ok(GetLastError() == ERROR_INVALID_DATA, "wrong error %d\n", GetLastError());
+ ok(GetLastError() == ERROR_INVALID_DATA ||
+ broken(GetLastError() == ERROR_INVALID_PARAMETER), /* Win9x */
+ "wrong error %d\n", GetLastError());
/* Now with not even size */
SetLastError(0xdeadbeef);
@@ -1280,7 +1481,9 @@ static void test_SetMetaFileBits(void)
SetLastError(0xdeadbeef);
hmf = SetMetaFileBitsEx(sizeof(MF_GRAPHICS_BITS), buf);
ok(!hmf, "SetMetaFileBitsEx should fail\n");
- ok(GetLastError() == ERROR_INVALID_DATA, "wrong error %d\n", GetLastError());
+ ok(GetLastError() == ERROR_INVALID_DATA ||
+ broken(GetLastError() == ERROR_INVALID_PARAMETER), /* Win9x */
+ "wrong error %d\n", GetLastError());
/* Now with corrupted mtSize field */
memcpy(buf, MF_GRAPHICS_BITS, sizeof(MF_GRAPHICS_BITS));
@@ -1480,7 +1683,7 @@ static void test_emf_ExtTextOut_on_path(void)
* are there, but their contents don't match for different reasons.
*/
if (compare_emf_bits(hMetafile, EMF_TEXTOUT_ON_PATH_BITS, sizeof(EMF_TEXTOUT_ON_PATH_BITS),
- "emf_TextOut_on_path", FALSE, FALSE) != 0)
+ "emf_TextOut_on_path", FALSE) != 0)
{
dump_emf_bits(hMetafile, "emf_TextOut_on_path");
dump_emf_records(hMetafile, "emf_TextOut_on_path");
@@ -1676,7 +1879,7 @@ static void test_emf_clipping(void)
ok(hemf != 0, "CloseEnhMetaFile error %d\n", GetLastError());
if (compare_emf_bits(hemf, EMF_CLIPPING, sizeof(EMF_CLIPPING),
- "emf_clipping", FALSE, FALSE) != 0)
+ "emf_clipping", FALSE) != 0)
{
dump_emf_bits(hemf, "emf_clipping");
dump_emf_records(hemf, "emf_clipping");
@@ -1785,7 +1988,7 @@ static void test_mf_conversions(void)
hemf = create_converted_emf(&mfp);
if (compare_emf_bits(hemf, EMF_LINETO_MM_ANISOTROPIC_BITS, sizeof(EMF_LINETO_MM_ANISOTROPIC_BITS),
- "emf_LineTo MM_ANISOTROPIC", TRUE, FALSE) != 0)
+ "emf_LineTo MM_ANISOTROPIC", TRUE) != 0)
{
dump_emf_bits(hemf, "emf_LineTo MM_ANISOTROPIC");
dump_emf_records(hemf, "emf_LineTo MM_ANISOTROPIC");
@@ -1810,7 +2013,7 @@ static void test_mf_conversions(void)
hemf = create_converted_emf(&mfp);
if (compare_emf_bits(hemf, EMF_LINETO_MM_TEXT_BITS, sizeof(EMF_LINETO_MM_TEXT_BITS),
- "emf_LineTo MM_TEXT", TRUE, FALSE) != 0)
+ "emf_LineTo MM_TEXT", TRUE) != 0)
{
dump_emf_bits(hemf, "emf_LineTo MM_TEXT");
dump_emf_records(hemf, "emf_LineTo MM_TEXT");
@@ -1830,7 +2033,7 @@ static void test_mf_conversions(void)
hemf = create_converted_emf(NULL);
if (compare_emf_bits(hemf, EMF_LINETO_BITS, sizeof(EMF_LINETO_BITS),
- "emf_LineTo NULL", TRUE, FALSE) != 0)
+ "emf_LineTo NULL", TRUE) != 0)
{
dump_emf_bits(hemf, "emf_LineTo NULL");
dump_emf_records(hemf, "emf_LineTo NULL");
@@ -2146,7 +2349,6 @@ static void test_SetEnhMetaFileBits(void)
ok(!hemf ||
broken(hemf != NULL), /* Win9x, WinMe */
"SetEnhMetaFileBits should fail\n");
- todo_wine
ok(GetLastError() == 0xdeadbeef, "Expected deadbeef, got %u\n", GetLastError());
DeleteEnhMetaFile(hemf);
@@ -2157,7 +2359,6 @@ static void test_SetEnhMetaFileBits(void)
ok(!hemf ||
broken(hemf != NULL), /* Win9x, WinMe */
"SetEnhMetaFileBits should fail\n");
- todo_wine
ok(GetLastError() == 0xdeadbeef, "Expected deadbeef, got %u\n", GetLastError());
DeleteEnhMetaFile(hemf);
}
@@ -2171,6 +2372,7 @@ START_TEST(metafile)
test_SaveDC();
/* For win-format metafiles (mfdrv) */
+ test_mf_SaveDC();
test_mf_Blank();
test_mf_Graphics();
test_mf_PatternBrush();
diff --git a/rostests/winetests/gdi32/path.c b/rostests/winetests/gdi32/path.c
index 58e84677fcf..4a8ea6d4743 100644
--- a/rostests/winetests/gdi32/path.c
+++ b/rostests/winetests/gdi32/path.c
@@ -238,7 +238,7 @@ static void test_arcto(void)
GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
/* ArcTo is only available on Win2k and later */
- skip("ArcTo is not available\n");
+ win_skip("ArcTo is not available\n");
goto done;
}
SetArcDirection(hdc, AD_COUNTERCLOCKWISE);
@@ -282,7 +282,7 @@ static void test_anglearc(void)
GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
/* AngleArc is only available on Win2k and later */
- skip("AngleArc is not available\n");
+ win_skip("AngleArc is not available\n");
goto done;
}
AngleArc(hdc, 300, 300, 80, 150.0, -180.0);
@@ -355,7 +355,7 @@ static void test_polydraw(void)
GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
/* PolyDraw is only available on Win2k and later */
- skip("PolyDraw is not available\n");
+ win_skip("PolyDraw is not available\n");
goto done;
}
expect(TRUE, retb);
diff --git a/rostests/winetests/gdi32/pen.c b/rostests/winetests/gdi32/pen.c
index 64304fac1a2..460288d9cd3 100644
--- a/rostests/winetests/gdi32/pen.c
+++ b/rostests/winetests/gdi32/pen.c
@@ -61,6 +61,7 @@ static void test_logpen(void)
LOGPEN lp;
EXTLOGPEN elp;
LOGBRUSH lb;
+ DWORD_PTR unset_hatch;
DWORD obj_type, user_style[2] = { 0xabc, 0xdef };
struct
{
@@ -90,9 +91,19 @@ static void test_logpen(void)
size = GetObject(hpen, sizeof(lp), &lp);
ok(size == sizeof(lp), "GetObject returned %d, error %d\n", size, GetLastError());
+ if (pen[i].style == PS_USERSTYLE || pen[i].style == PS_ALTERNATE)
+ {
+ if (lp.lopnStyle == pen[i].style)
+ {
+ win_skip("Skipping PS_USERSTYLE and PS_ALTERNATE tests on Win9x\n");
+ continue;
+ }
+ }
ok(lp.lopnStyle == pen[i].ret_style, "expected %u, got %u\n", pen[i].ret_style, lp.lopnStyle);
ok(lp.lopnWidth.x == pen[i].ret_width, "expected %u, got %d\n", pen[i].ret_width, lp.lopnWidth.x);
- ok(lp.lopnWidth.y == 0, "expected 0, got %d\n", lp.lopnWidth.y);
+ ok(lp.lopnWidth.y == 0 ||
+ broken(lp.lopnWidth.y == 0xb), /* Win9x */
+ "expected 0, got %d\n", lp.lopnWidth.y);
ok(lp.lopnColor == pen[i].ret_color, "expected %08x, got %08x\n", pen[i].ret_color, lp.lopnColor);
DeleteObject(hpen);
@@ -113,12 +124,14 @@ static void test_logpen(void)
memset(&lp, 0xb0, sizeof(lp));
SetLastError(0xdeadbeef);
size = GetObject(hpen, sizeof(lp.lopnStyle), &lp);
- ok(!size, "GetObject should fail: size %d, error %d\n", size, GetLastError());
+ ok(!size ||
+ broken(size == sizeof(lp.lopnStyle)), /* Win9x */
+ "GetObject should fail: size %d, error %d\n", size, GetLastError());
/* see how larger buffer sizes are handled */
memset(&lp, 0xb0, sizeof(lp));
SetLastError(0xdeadbeef);
- size = GetObject(hpen, sizeof(lp) * 2, &lp);
+ size = GetObject(hpen, sizeof(lp) * 4, &lp);
ok(size == sizeof(lp), "GetObject returned %d, error %d\n", size, GetLastError());
/* see how larger buffer sizes are handled */
@@ -225,12 +238,17 @@ static void test_logpen(void)
break;
case PS_USERSTYLE:
- ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry) + sizeof(user_style),
+ ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry) + sizeof(user_style) ||
+ broken(size == 0 && GetLastError() == ERROR_INVALID_PARAMETER), /* Win9x */
"GetObject returned %d, error %d\n", size, GetLastError());
break;
default:
- ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry),
+ ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry) ||
+ broken(size == sizeof(LOGPEN)) || /* Win9x */
+ broken(pen[i].style == PS_ALTERNATE &&
+ size == 0 &&
+ GetLastError() == ERROR_INVALID_PARAMETER), /* Win9x */
"GetObject returned %d, error %d\n", size, GetLastError());
break;
}
@@ -239,7 +257,9 @@ static void test_logpen(void)
memset(&elp, 0xb0, sizeof(elp));
SetLastError(0xdeadbeef);
size = GetObject(hpen, sizeof(elp.elpPenStyle), &elp);
- ok(!size, "GetObject should fail: size %d, error %d\n", size, GetLastError());
+ ok(!size ||
+ broken(size == sizeof(elp.elpPenStyle)), /* Win9x */
+ "GetObject should fail: size %d, error %d\n", size, GetLastError());
/* see how larger buffer sizes are handled */
memset(&ext_pen, 0xb0, sizeof(ext_pen));
@@ -258,11 +278,12 @@ static void test_logpen(void)
/* for PS_NULL it also works this way */
memset(&elp, 0xb0, sizeof(elp));
+ memset(&unset_hatch, 0xb0, sizeof(unset_hatch));
SetLastError(0xdeadbeef);
size = GetObject(hpen, sizeof(elp), &elp);
ok(size == sizeof(EXTLOGPEN),
"GetObject returned %d, error %d\n", size, GetLastError());
- ok(ext_pen.elp.elpHatch == 0xb0b0b0b0, "expected 0xb0b0b0b0, got %p\n", (void *)ext_pen.elp.elpHatch);
+ ok(ext_pen.elp.elpHatch == unset_hatch, "expected 0xb0b0b0b0, got %p\n", (void *)ext_pen.elp.elpHatch);
ok(ext_pen.elp.elpNumEntries == 0xb0b0b0b0, "expected 0xb0b0b0b0, got %x\n", ext_pen.elp.elpNumEntries);
break;
@@ -276,7 +297,11 @@ static void test_logpen(void)
break;
default:
- ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry),
+ ok(size == sizeof(EXTLOGPEN) - sizeof(elp.elpStyleEntry) ||
+ broken(size == sizeof(LOGPEN)) || /* Win9x */
+ broken(pen[i].style == PS_ALTERNATE &&
+ size == 0 &&
+ GetLastError() == ERROR_INVALID_PARAMETER), /* Win9x */
"GetObject returned %d, error %d\n", size, GetLastError());
ok(ext_pen.elp.elpHatch == HS_CROSS, "expected HS_CROSS, got %p\n", (void *)ext_pen.elp.elpHatch);
ok(ext_pen.elp.elpNumEntries == 0, "expected 0, got %x\n", ext_pen.elp.elpNumEntries);
@@ -504,6 +529,11 @@ static void test_ps_userstyle(void)
pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, 3, NULL);
ok(pen == 0, "ExtCreatePen should fail\n");
+ if (pen == 0 && GetLastError() == 0xdeadbeef)
+ {
+ win_skip("Looks like 9x, skipping PS_USERSTYLE tests\n");
+ return;
+ }
expect(ERROR_INVALID_PARAMETER, GetLastError());
DeleteObject(pen);
SetLastError(0xdeadbeef);
@@ -542,7 +572,7 @@ static void test_ps_userstyle(void)
ok(pen != 0, "ExtCreatePen should not fail\n");
size = GetObject(pen, sizeof(ext_pen), &ext_pen);
- expect(88, size);
+ expect(FIELD_OFFSET(EXTLOGPEN,elpStyleEntry[16]), size);
for(i = 0; i < 16; i++)
expect(style[i], ext_pen.elp.elpStyleEntry[i]);
diff --git a/rostests/winetests/gdiplus/brush.c b/rostests/winetests/gdiplus/brush.c
index d2cbd3c77e3..b6fbe3044ef 100644
--- a/rostests/winetests/gdiplus/brush.c
+++ b/rostests/winetests/gdiplus/brush.c
@@ -328,6 +328,34 @@ static void test_gradientgetrect(void)
expectf(10.0, rectf.Width);
todo_wine expectf(10.0, rectf.Height);
status = GdipDeleteBrush((GpBrush*)brush);
+ /* slope = -1 */
+ pt1.X = pt1.Y = 0.0;
+ pt2.X = 20.0;
+ pt2.Y = -20.0;
+ status = GdipCreateLineBrush(&pt1, &pt2, 0, 0, WrapModeTile, &brush);
+ expect(Ok, status);
+ memset(&rectf, 0, sizeof(GpRectF));
+ status = GdipGetLineRect(brush, &rectf);
+ expect(Ok, status);
+ expectf(0.0, rectf.X);
+ expectf(-20.0, rectf.Y);
+ expectf(20.0, rectf.Width);
+ expectf(20.0, rectf.Height);
+ status = GdipDeleteBrush((GpBrush*)brush);
+ /* slope = 1/100 */
+ pt1.X = pt1.Y = 0.0;
+ pt2.X = 100.0;
+ pt2.Y = 1.0;
+ status = GdipCreateLineBrush(&pt1, &pt2, 0, 0, WrapModeTile, &brush);
+ expect(Ok, status);
+ memset(&rectf, 0, sizeof(GpRectF));
+ status = GdipGetLineRect(brush, &rectf);
+ expect(Ok, status);
+ expectf(0.0, rectf.X);
+ expectf(0.0, rectf.Y);
+ expectf(100.0, rectf.Width);
+ expectf(1.0, rectf.Height);
+ status = GdipDeleteBrush((GpBrush*)brush);
/* from rect with LinearGradientModeHorizontal */
rectf.X = rectf.Y = 10.0;
rectf.Width = rectf.Height = 100.0;
@@ -342,6 +370,127 @@ static void test_gradientgetrect(void)
expectf(100.0, rectf.Width);
expectf(100.0, rectf.Height);
status = GdipDeleteBrush((GpBrush*)brush);
+ /* passing negative Width/Height to LinearGradientModeHorizontal */
+ rectf.X = rectf.Y = 10.0;
+ rectf.Width = rectf.Height = -100.0;
+ status = GdipCreateLineBrushFromRect(&rectf, 0, 0, LinearGradientModeHorizontal,
+ WrapModeTile, &brush);
+ expect(Ok, status);
+ memset(&rectf, 0, sizeof(GpRectF));
+ status = GdipGetLineRect(brush, &rectf);
+ expect(Ok, status);
+ expectf(10.0, rectf.X);
+ expectf(10.0, rectf.Y);
+ expectf(-100.0, rectf.Width);
+ expectf(-100.0, rectf.Height);
+ status = GdipDeleteBrush((GpBrush*)brush);
+}
+
+static void test_lineblend(void)
+{
+ GpLineGradient *brush;
+ GpStatus status;
+ GpPointF pt1, pt2;
+ INT count=10;
+ int i;
+ const REAL factors[5] = {0.0f, 0.1f, 0.5f, 0.9f, 1.0f};
+ const REAL positions[5] = {0.0f, 0.2f, 0.5f, 0.8f, 1.0f};
+ REAL res_factors[6] = {0.3f, 0.0f, 0.0f, 0.0f, 0.0f};
+ REAL res_positions[6] = {0.3f, 0.0f, 0.0f, 0.0f, 0.0f};
+
+ pt1.X = pt1.Y = 1.0;
+ pt2.X = pt2.Y = 100.0;
+ status = GdipCreateLineBrush(&pt1, &pt2, 0, 0, WrapModeTile, &brush);
+ expect(Ok, status);
+
+ status = GdipGetLineBlendCount(NULL, &count);
+ expect(InvalidParameter, status);
+
+ status = GdipGetLineBlendCount(brush, NULL);
+ expect(InvalidParameter, status);
+
+ status = GdipGetLineBlendCount(brush, &count);
+ expect(Ok, status);
+ expect(1, count);
+
+ status = GdipGetLineBlend(NULL, res_factors, res_positions, 1);
+ expect(InvalidParameter, status);
+
+ status = GdipGetLineBlend(brush, NULL, res_positions, 1);
+ expect(InvalidParameter, status);
+
+ status = GdipGetLineBlend(brush, res_factors, NULL, 1);
+ expect(InvalidParameter, status);
+
+ status = GdipGetLineBlend(brush, res_factors, res_positions, 0);
+ expect(InvalidParameter, status);
+
+ status = GdipGetLineBlend(brush, res_factors, res_positions, -1);
+ expect(InvalidParameter, status);
+
+ status = GdipGetLineBlend(brush, res_factors, res_positions, 1);
+ expect(Ok, status);
+
+ status = GdipGetLineBlend(brush, res_factors, res_positions, 2);
+ expect(Ok, status);
+
+ status = GdipSetLineBlend(NULL, factors, positions, 5);
+ expect(InvalidParameter, status);
+
+ status = GdipSetLineBlend(brush, NULL, positions, 5);
+ expect(InvalidParameter, status);
+
+ status = GdipSetLineBlend(brush, factors, NULL, 5);
+ expect(InvalidParameter, status);
+
+ status = GdipSetLineBlend(brush, factors, positions, 0);
+ expect(InvalidParameter, status);
+
+ status = GdipSetLineBlend(brush, factors, positions, -1);
+ expect(InvalidParameter, status);
+
+ /* leave off the 0.0 position */
+ status = GdipSetLineBlend(brush, &factors[1], &positions[1], 4);
+ expect(InvalidParameter, status);
+
+ /* leave off the 1.0 position */
+ status = GdipSetLineBlend(brush, factors, positions, 4);
+ expect(InvalidParameter, status);
+
+ status = GdipSetLineBlend(brush, factors, positions, 5);
+ expect(Ok, status);
+
+ status = GdipGetLineBlendCount(brush, &count);
+ expect(Ok, status);
+ expect(5, count);
+
+ status = GdipGetLineBlend(brush, res_factors, res_positions, 4);
+ expect(InsufficientBuffer, status);
+
+ status = GdipGetLineBlend(brush, res_factors, res_positions, 5);
+ expect(Ok, status);
+
+ for (i=0; i<5; i++)
+ {
+ expectf(factors[i], res_factors[i]);
+ expectf(positions[i], res_positions[i]);
+ }
+
+ status = GdipGetLineBlend(brush, res_factors, res_positions, 6);
+ expect(Ok, status);
+
+ status = GdipSetLineBlend(brush, factors, positions, 1);
+ expect(Ok, status);
+
+ status = GdipGetLineBlendCount(brush, &count);
+ expect(Ok, status);
+ expect(1, count);
+
+ status = GdipGetLineBlend(brush, res_factors, res_positions, 1);
+ expect(Ok, status);
+
+ status = GdipDeleteBrush((GpBrush*)brush);
+ expect(Ok, status);
}
START_TEST(brush)
@@ -365,6 +514,7 @@ START_TEST(brush)
test_transform();
test_texturewrap();
test_gradientgetrect();
+ test_lineblend();
GdiplusShutdown(gdiplusToken);
}
diff --git a/rostests/winetests/gdiplus/font.c b/rostests/winetests/gdiplus/font.c
index 125535df45a..0da5b2f7bc3 100644
--- a/rostests/winetests/gdiplus/font.c
+++ b/rostests/winetests/gdiplus/font.c
@@ -97,7 +97,7 @@ static void test_createfont(void)
static void test_logfont(void)
{
- LOGFONTW lfw, lfw2;
+ LOGFONTA lfa, lfa2;
GpFont *font;
GpStatus stat;
GpGraphics *graphics;
@@ -105,70 +105,69 @@ static void test_logfont(void)
INT style;
GdipCreateFromHDC(hdc, &graphics);
- memset(&lfw, 0, sizeof(LOGFONTW));
- memset(&lfw2, 0xff, sizeof(LOGFONTW));
+ memset(&lfa, 0, sizeof(LOGFONTA));
+ memset(&lfa2, 0xff, sizeof(LOGFONTA));
/* empty FaceName */
- lfw.lfFaceName[0] = 0;
- stat = GdipCreateFontFromLogfontW(hdc, &lfw, &font);
-
+ lfa.lfFaceName[0] = 0;
+ stat = GdipCreateFontFromLogfontA(hdc, &lfa, &font);
expect(NotTrueTypeFont, stat);
- memcpy(&lfw.lfFaceName, arial, 6 * sizeof(WCHAR));
+ lstrcpyA(lfa.lfFaceName, "Arial");
- stat = GdipCreateFontFromLogfontW(hdc, &lfw, &font);
+ stat = GdipCreateFontFromLogfontA(hdc, &lfa, &font);
if (stat == FileNotFound)
{
skip("Arial not installed.\n");
return;
}
expect(Ok, stat);
- stat = GdipGetLogFontW(font, graphics, &lfw2);
+ stat = GdipGetLogFontA(font, graphics, &lfa2);
expect(Ok, stat);
- ok(lfw2.lfHeight < 0, "Expected negative height\n");
- expect(0, lfw2.lfWidth);
- expect(0, lfw2.lfEscapement);
- expect(0, lfw2.lfOrientation);
- ok((lfw2.lfWeight >= 100) && (lfw2.lfWeight <= 900), "Expected weight to be set\n");
- expect(0, lfw2.lfItalic);
- expect(0, lfw2.lfUnderline);
- expect(0, lfw2.lfStrikeOut);
- expect(GetTextCharset(hdc), lfw2.lfCharSet);
- expect(0, lfw2.lfOutPrecision);
- expect(0, lfw2.lfClipPrecision);
- expect(0, lfw2.lfQuality);
- expect(0, lfw2.lfPitchAndFamily);
+ ok(lfa2.lfHeight < 0, "Expected negative height\n");
+ expect(0, lfa2.lfWidth);
+ expect(0, lfa2.lfEscapement);
+ expect(0, lfa2.lfOrientation);
+ ok((lfa2.lfWeight >= 100) && (lfa2.lfWeight <= 900), "Expected weight to be set\n");
+ expect(0, lfa2.lfItalic);
+ expect(0, lfa2.lfUnderline);
+ expect(0, lfa2.lfStrikeOut);
+ expect(GetTextCharset(hdc), lfa2.lfCharSet);
+ expect(0, lfa2.lfOutPrecision);
+ expect(0, lfa2.lfClipPrecision);
+ expect(0, lfa2.lfQuality);
+ expect(0, lfa2.lfPitchAndFamily);
GdipDeleteFont(font);
- memset(&lfw, 0, sizeof(LOGFONTW));
- lfw.lfHeight = 25;
- lfw.lfWidth = 25;
- lfw.lfEscapement = lfw.lfOrientation = 50;
- lfw.lfItalic = lfw.lfUnderline = lfw.lfStrikeOut = TRUE;
+ memset(&lfa, 0, sizeof(LOGFONTA));
+ lfa.lfHeight = 25;
+ lfa.lfWidth = 25;
+ lfa.lfEscapement = lfa.lfOrientation = 50;
+ lfa.lfItalic = lfa.lfUnderline = lfa.lfStrikeOut = TRUE;
- memset(&lfw2, 0xff, sizeof(LOGFONTW));
- memcpy(&lfw.lfFaceName, arial, 6 * sizeof(WCHAR));
+ memset(&lfa2, 0xff, sizeof(LOGFONTA));
+ lstrcpyA(lfa.lfFaceName, "Arial");
- stat = GdipCreateFontFromLogfontW(hdc, &lfw, &font);
+ stat = GdipCreateFontFromLogfontA(hdc, &lfa, &font);
expect(Ok, stat);
- stat = GdipGetLogFontW(font, graphics, &lfw2);
+ stat = GdipGetLogFontA(font, graphics, &lfa2);
expect(Ok, stat);
- ok(lfw2.lfHeight < 0, "Expected negative height\n");
- expect(0, lfw2.lfWidth);
- expect(0, lfw2.lfEscapement);
- expect(0, lfw2.lfOrientation);
- ok((lfw2.lfWeight >= 100) && (lfw2.lfWeight <= 900), "Expected weight to be set\n");
- expect(TRUE, lfw2.lfItalic);
- expect(TRUE, lfw2.lfUnderline);
- expect(TRUE, lfw2.lfStrikeOut);
- expect(GetTextCharset(hdc), lfw2.lfCharSet);
- expect(0, lfw2.lfOutPrecision);
- expect(0, lfw2.lfClipPrecision);
- expect(0, lfw2.lfQuality);
- expect(0, lfw2.lfPitchAndFamily);
+ ok(lfa2.lfHeight < 0, "Expected negative height\n");
+ expect(0, lfa2.lfWidth);
+ expect(0, lfa2.lfEscapement);
+ expect(0, lfa2.lfOrientation);
+ ok((lfa2.lfWeight >= 100) && (lfa2.lfWeight <= 900), "Expected weight to be set\n");
+ expect(TRUE, lfa2.lfItalic);
+ expect(TRUE, lfa2.lfUnderline);
+ expect(TRUE, lfa2.lfStrikeOut);
+ expect(GetTextCharset(hdc), lfa2.lfCharSet);
+ expect(0, lfa2.lfOutPrecision);
+ expect(0, lfa2.lfClipPrecision);
+ expect(0, lfa2.lfQuality);
+ expect(0, lfa2.lfPitchAndFamily);
stat = GdipGetFontStyle(font, &style);
expect(Ok, stat);
@@ -341,6 +340,19 @@ monospace:
expect (Ok, stat);
}
+static void test_installedfonts (void)
+{
+ GpStatus stat;
+ GpFontCollection* collection=NULL;
+
+ stat = GdipNewInstalledFontCollection(NULL);
+ expect (InvalidParameter, stat);
+
+ stat = GdipNewInstalledFontCollection(&collection);
+ expect (Ok, stat);
+ ok (collection != NULL, "got NULL font collection\n");
+}
+
START_TEST(font)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -358,6 +370,7 @@ START_TEST(font)
test_fontfamily();
test_fontfamily_properties();
test_getgenerics();
+ test_installedfonts();
GdiplusShutdown(gdiplusToken);
}
diff --git a/rostests/winetests/gdiplus/graphics.c b/rostests/winetests/gdiplus/graphics.c
index 8091a9adff3..71991511072 100644
--- a/rostests/winetests/gdiplus/graphics.c
+++ b/rostests/winetests/gdiplus/graphics.c
@@ -935,6 +935,57 @@ static void test_textcontrast(void)
ReleaseDC(0, hdc);
}
+static void test_GdipDrawString(void)
+{
+ GpStatus status;
+ GpGraphics *graphics = NULL;
+ GpFont *fnt = NULL;
+ RectF rect;
+ GpStringFormat *format;
+ GpBrush *brush;
+ LOGFONTA logfont;
+ HDC hdc = GetDC(0);
+ static const WCHAR string[] = {'T','e','s','t',0};
+
+ memset(&logfont,0,sizeof(logfont));
+ strcpy(logfont.lfFaceName,"Arial");
+ logfont.lfHeight = 12;
+ logfont.lfCharSet = DEFAULT_CHARSET;
+
+ status = GdipCreateFromHDC(hdc, &graphics);
+ expect(Ok, status);
+
+ status = GdipCreateFontFromLogfontA(hdc, &logfont, &fnt);
+ if (status == FileNotFound)
+ {
+ skip("Arial not installed.\n");
+ return;
+ }
+ expect(Ok, status);
+
+ status = GdipCreateSolidFill((ARGB)0xdeadbeef, (GpSolidFill**)&brush);
+ expect(Ok, status);
+
+ status = GdipCreateStringFormat(0,0,&format);
+ expect(Ok, status);
+
+ rect.X = 0;
+ rect.Y = 0;
+ rect.Width = 0;
+ rect.Height = 12;
+
+ status = GdipDrawString(graphics, string, 4, fnt, &rect, format, brush);
+ expect(Ok, status);
+
+ GdipDeleteGraphics(graphics);
+ GdipDeleteBrush(brush);
+ GdipDeleteFont(fnt);
+ GdipDeleteStringFormat(format);
+
+ ReleaseDC(0, hdc);
+}
+
+
START_TEST(graphics)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -954,6 +1005,7 @@ START_TEST(graphics)
test_GdipDrawArcI();
test_GdipDrawLineI();
test_GdipDrawLinesI();
+ test_GdipDrawString();
test_Get_Release_DC();
test_transformpoints();
test_get_set_clip();
diff --git a/rostests/winetests/gdiplus/image.c b/rostests/winetests/gdiplus/image.c
index 12fab7cb659..4443f88822a 100644
--- a/rostests/winetests/gdiplus/image.c
+++ b/rostests/winetests/gdiplus/image.c
@@ -229,6 +229,7 @@ static void test_SavingImages(void)
const REAL WIDTH = 10.0, HEIGHT = 20.0;
REAL w, h;
ImageCodecInfo *codecs;
+ static const CHAR filenameA[] = "a.bmp";
static const WCHAR filename[] = { 'a','.','b','m','p',0 };
codecs = NULL;
@@ -280,7 +281,7 @@ static void test_SavingImages(void)
GdipFree(codecs);
if (bm)
GdipDisposeImage((GpImage*)bm);
- ok(DeleteFileW(filename), "Delete failed.\n");
+ ok(DeleteFileA(filenameA), "Delete failed.\n");
}
static void test_encoders(void)
@@ -292,7 +293,7 @@ static void test_encoders(void)
int i;
int bmp_found;
- static const WCHAR bmp_format[] = {'B', 'M', 'P', 0};
+ static const CHAR bmp_format[] = "BMP";
stat = GdipGetImageEncodersSize(&n, &s);
expect(stat, Ok);
@@ -319,8 +320,13 @@ static void test_encoders(void)
bmp_found = FALSE;
for (i = 0; i < n; i++)
{
- if (CompareStringW(LOCALE_SYSTEM_DEFAULT, 0,
- codecs[i].FormatDescription, -1,
+ CHAR desc[32];
+
+ WideCharToMultiByte(CP_ACP, 0, codecs[i].FormatDescription, -1,
+ desc, 32, 0, 0);
+
+ if (CompareStringA(LOCALE_SYSTEM_DEFAULT, 0,
+ desc, -1,
bmp_format, -1) == CSTR_EQUAL) {
bmp_found = TRUE;
break;
@@ -474,7 +480,7 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
expectf(HEIGHT1, height);
if (stat == Ok)
GdipDisposeImage((GpImage*)gpbm);
- GlobalFree(hbm);
+ DeleteObject(hbm);
hbm = CreateBitmap(WIDTH2, HEIGHT2, 1, 1, &buff);
stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm);
@@ -487,7 +493,7 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
expectf(HEIGHT2, height);
if (stat == Ok)
GdipDisposeImage((GpImage*)gpbm);
- GlobalFree(hbm);
+ DeleteObject(hbm);
hdc = CreateCompatibleDC(0);
ok(hdc != NULL, "CreateCompatibleDC failed\n");
@@ -524,8 +530,8 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
if (stat == Ok)
GdipDisposeImage((GpImage*)gpbm);
- GlobalFree(hpal);
- GlobalFree(hbm);
+ DeleteObject(hpal);
+ DeleteObject(hbm);
}
static void test_GdipGetImageFlags(void)
@@ -623,7 +629,9 @@ static void test_fromhicon(void)
DeleteObject(hbmColor);
stat = GdipCreateBitmapFromHICON(hIcon, &bitmap);
- expect(Ok, stat);
+ ok(stat == Ok ||
+ broken(stat == InvalidParameter), /* Win98 */
+ "Expected Ok, got %.8x\n", stat);
if(stat == Ok){
/* check attributes */
stat = GdipGetImageHeight((GpImage*)bitmap, &dim);
diff --git a/rostests/winetests/gdiplus/region.c b/rostests/winetests/gdiplus/region.c
index 689811cedc4..d48554c48b6 100644
--- a/rostests/winetests/gdiplus/region.c
+++ b/rostests/winetests/gdiplus/region.c
@@ -793,12 +793,14 @@ static void test_fromhrgn(void)
status = GdipGetRegionDataSize(region, &needed);
todo_wine{
expect(Ok, status);
- expect(216, needed);
+ ok(needed == 216 ||
+ needed == 196, /* win98 */
+ "Got %.8x\n", needed);
}
status = GdipGetRegionData(region, (BYTE*)buf, sizeof(buf), &needed);
todo_wine expect(Ok, status);
- if(status == Ok)
+ if(status == Ok && needed == 216) /* Don't try to test win98 layout */
{
todo_wine{
expect(Ok, status);
diff --git a/rostests/winetests/imm32/imm32.c b/rostests/winetests/imm32/imm32.c
index 591feb337fd..7e7f752d466 100644
--- a/rostests/winetests/imm32/imm32.c
+++ b/rostests/winetests/imm32/imm32.c
@@ -135,6 +135,7 @@ static HWND hwnd;
static int init(void) {
WNDCLASSEX wc;
+ HIMC imc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
@@ -158,6 +159,14 @@ static int init(void) {
if (!hwnd)
return 0;
+ imc = ImmGetContext(hwnd);
+ if (!imc)
+ {
+ win_skip("IME support not implemented\n");
+ return 0;
+ }
+ ImmReleaseContext(hwnd, imc);
+
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
@@ -173,7 +182,7 @@ static void cleanup(void) {
UnregisterClass(wndcls, GetModuleHandle(0));
}
-static int test_ImmNotifyIME(void) {
+static void test_ImmNotifyIME(void) {
static const char string[] = "wine";
char resstr[16] = "";
HIMC imc;
@@ -216,12 +225,88 @@ static int test_ImmNotifyIME(void) {
msg_spy_flush_msgs();
ImmReleaseContext(hwnd, imc);
+}
- return 0;
+static void test_ImmGetCompositionString(void)
+{
+ HIMC imc;
+ static const WCHAR string[] = {'w','i','n','e',0x65e5,0x672c,0x8a9e};
+ char cstring[20];
+ WCHAR wstring[20];
+ DWORD len;
+ DWORD alen,wlen;
+
+ imc = ImmGetContext(hwnd);
+ ImmSetCompositionStringW(imc, SCS_SETSTR, string, sizeof(string), NULL,0);
+ alen = ImmGetCompositionStringA(imc, GCS_COMPSTR, cstring, 20);
+ wlen = ImmGetCompositionStringW(imc, GCS_COMPSTR, wstring, 20);
+ /* windows machines without any IME installed just return 0 above */
+ if( alen && wlen)
+ {
+ len = ImmGetCompositionStringW(imc, GCS_COMPATTR, NULL, 0);
+ ok(len*sizeof(WCHAR)==wlen,"GCS_COMPATTR(W) not returning correct count\n");
+ len = ImmGetCompositionStringA(imc, GCS_COMPATTR, NULL, 0);
+ ok(len==alen,"GCS_COMPATTR(A) not returning correct count\n");
+ }
+ ImmReleaseContext(hwnd, imc);
+}
+
+static void test_ImmSetCompositionString(void)
+{
+ HIMC imc;
+ BOOL ret;
+
+ SetLastError(0xdeadbeef);
+ imc = ImmGetContext(hwnd);
+ ok(imc != 0, "ImmGetContext() failed. Last error: %u\n", GetLastError());
+ if (!imc)
+ return;
+
+ ret = ImmSetCompositionStringW(imc, SCS_SETSTR, NULL, 0, NULL, 0);
+ todo_wine
+ ok(!ret, "ImmSetCompositionStringW() succeeded.\n");
+
+ ret = ImmSetCompositionStringW(imc, SCS_SETSTR | SCS_CHANGEATTR,
+ NULL, 0, NULL, 0);
+ todo_wine
+ ok(!ret, "ImmSetCompositionStringW() succeeded.\n");
+
+ ret = ImmSetCompositionStringW(imc, SCS_SETSTR | SCS_CHANGECLAUSE,
+ NULL, 0, NULL, 0);
+ todo_wine
+ ok(!ret, "ImmSetCompositionStringW() succeeded.\n");
+
+ ret = ImmSetCompositionStringW(imc, SCS_CHANGEATTR | SCS_CHANGECLAUSE,
+ NULL, 0, NULL, 0);
+ todo_wine
+ ok(!ret, "ImmSetCompositionStringW() succeeded.\n");
+
+ ImmReleaseContext(hwnd, imc);
+}
+
+static void test_ImmIME(void)
+{
+ HIMC imc;
+
+ imc = ImmGetContext(hwnd);
+ if (imc)
+ {
+ BOOL rc;
+ rc = ImmConfigureIMEA(imc, NULL, IME_CONFIG_REGISTERWORD, NULL);
+ ok (rc == 0, "ImmConfigureIMEA did not fail\n");
+ rc = ImmConfigureIMEW(imc, NULL, IME_CONFIG_REGISTERWORD, NULL);
+ ok (rc == 0, "ImmConfigureIMEW did not fail\n");
+ }
+ ImmReleaseContext(hwnd,imc);
}
START_TEST(imm32) {
if (init())
+ {
test_ImmNotifyIME();
+ test_ImmGetCompositionString();
+ test_ImmSetCompositionString();
+ test_ImmIME();
+ }
cleanup();
}
diff --git a/rostests/winetests/inetmib1/main.c b/rostests/winetests/inetmib1/main.c
index 13613fd9d42..6c83d58e7fd 100644
--- a/rostests/winetests/inetmib1/main.c
+++ b/rostests/winetests/inetmib1/main.c
@@ -35,7 +35,7 @@ static void testInit(void)
pInit = (void *)GetProcAddress(inetmib1, "SnmpExtensionInit");
if (!pInit)
{
- skip("no SnmpExtensionInit\n");
+ win_skip("no SnmpExtensionInit\n");
return;
}
/* Crash
@@ -72,7 +72,7 @@ static void testQuery(void)
pQuery = (void *)GetProcAddress(inetmib1, "SnmpExtensionQuery");
if (!pQuery)
{
- skip("couldn't find SnmpExtensionQuery\n");
+ win_skip("couldn't find SnmpExtensionQuery\n");
return;
}
/* Crash
@@ -473,4 +473,5 @@ START_TEST(main)
inetmib1 = LoadLibraryA("inetmib1");
testInit();
testQuery();
+ FreeLibrary(inetmib1);
}
diff --git a/rostests/winetests/iphlpapi/iphlpapi.c b/rostests/winetests/iphlpapi/iphlpapi.c
index 23f85ece3f0..cd2e45200a3 100644
--- a/rostests/winetests/iphlpapi/iphlpapi.c
+++ b/rostests/winetests/iphlpapi/iphlpapi.c
@@ -35,6 +35,7 @@
*/
#include
+#include "winsock2.h"
#include "windef.h"
#include "winbase.h"
#include "iphlpapi.h"
@@ -43,6 +44,16 @@
#include
#include
+#undef htonl
+#undef htons
+#undef ntohl
+#undef ntohs
+
+#define htonl(l) ((u_long)(l))
+#define htons(s) ((u_short)(s))
+#define ntohl(l) ((u_long)(l))
+#define ntohs(s) ((u_short)(s))
+
static HMODULE hLibrary = NULL;
typedef DWORD (WINAPI *GetNumberOfInterfacesFunc)(PDWORD);
@@ -62,6 +73,7 @@ typedef DWORD (WINAPI *GetUdpStatisticsFunc)(PMIB_UDPSTATS);
typedef DWORD (WINAPI *GetTcpTableFunc)(PMIB_TCPTABLE,PDWORD,BOOL);
typedef DWORD (WINAPI *GetUdpTableFunc)(PMIB_UDPTABLE,PDWORD,BOOL);
typedef DWORD (WINAPI *GetPerAdapterInfoFunc)(ULONG,PIP_PER_ADAPTER_INFO,PULONG);
+typedef DWORD (WINAPI *GetAdaptersAddressesFunc)(ULONG,ULONG,PVOID,PIP_ADAPTER_ADDRESSES,PULONG);
static GetNumberOfInterfacesFunc gGetNumberOfInterfaces = NULL;
static GetIpAddrTableFunc gGetIpAddrTable = NULL;
@@ -80,6 +92,7 @@ static GetUdpStatisticsFunc gGetUdpStatistics = NULL;
static GetTcpTableFunc gGetTcpTable = NULL;
static GetUdpTableFunc gGetUdpTable = NULL;
static GetPerAdapterInfoFunc gGetPerAdapterInfo = NULL;
+static GetAdaptersAddressesFunc gGetAdaptersAddresses = NULL;
static void loadIPHlpApi(void)
{
@@ -118,6 +131,7 @@ static void loadIPHlpApi(void)
gGetUdpTable = (GetUdpTableFunc)GetProcAddress(
hLibrary, "GetUdpTable");
gGetPerAdapterInfo = (GetPerAdapterInfoFunc)GetProcAddress(hLibrary, "GetPerAdapterInfo");
+ gGetAdaptersAddresses = (GetAdaptersAddressesFunc)GetProcAddress(hLibrary, "GetAdaptersAddresses");
}
}
@@ -145,6 +159,16 @@ static void freeIPHlpApi(void)
}
}
+/* replacement for inet_ntoa */
+static const char *ntoa( DWORD ip )
+{
+ static char buffer[40];
+
+ ip = htonl(ip);
+ sprintf( buffer, "%u.%u.%u.%u", (ip >> 24) & 0xff, (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff );
+ return buffer;
+}
+
/*
still-to-be-tested 98-only functions:
GetUniDirectionalAdapterInfo
@@ -263,6 +287,30 @@ static void testGetIfTable(void)
ok(apiReturn == NO_ERROR,
"GetIfTable(buf, &dwSize, FALSE) returned %d, expected NO_ERROR\n\n",
apiReturn);
+
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ DWORD i, j;
+ char name[MAX_INTERFACE_NAME_LEN];
+
+ trace( "interface table: %u entries\n", buf->dwNumEntries );
+ for (i = 0; i < buf->dwNumEntries; i++)
+ {
+ MIB_IFROW *row = &buf->table[i];
+ WideCharToMultiByte( CP_ACP, 0, row->wszName, -1, name, MAX_INTERFACE_NAME_LEN, NULL, NULL );
+ trace( "%u: '%s' type %u mtu %u speed %u phys",
+ row->dwIndex, name, row->dwType, row->dwMtu, row->dwSpeed );
+ for (j = 0; j < row->dwPhysAddrLen; j++)
+ printf( " %02x", row->bPhysAddr[j] );
+ printf( "\n" );
+ trace( " in: bytes %u upkts %u nupkts %u disc %u err %u unk %u\n",
+ row->dwInOctets, row->dwInUcastPkts, row->dwInNUcastPkts,
+ row->dwInDiscards, row->dwInErrors, row->dwInUnknownProtos );
+ trace( " out: bytes %u upkts %u nupkts %u disc %u err %u\n",
+ row->dwOutOctets, row->dwOutUcastPkts, row->dwOutNUcastPkts,
+ row->dwOutDiscards, row->dwOutErrors );
+ }
+ }
HeapFree(GetProcessHeap(), 0, buf);
}
}
@@ -293,6 +341,22 @@ static void testGetIpForwardTable(void)
ok(apiReturn == NO_ERROR,
"GetIpForwardTable(buf, &dwSize, FALSE) returned %d, expected NO_ERROR\n",
apiReturn);
+
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ DWORD i;
+
+ trace( "IP forward table: %u entries\n", buf->dwNumEntries );
+ for (i = 0; i < buf->dwNumEntries; i++)
+ {
+ char buffer[40];
+ sprintf( buffer, "dest %s", ntoa( buf->table[i].dwForwardDest ));
+ sprintf( buffer + strlen(buffer), " mask %s", ntoa( buf->table[i].dwForwardMask ));
+ trace( "%u: %s gw %s if %u type %u\n", i, buffer,
+ ntoa( buf->table[i].dwForwardNextHop ),
+ buf->table[i].dwForwardIfIndex, buf->table[i].dwForwardType );
+ }
+ }
HeapFree(GetProcessHeap(), 0, buf);
}
}
@@ -326,6 +390,21 @@ static void testGetIpNetTable(void)
apiReturn == ERROR_NO_DATA, /* empty ARP table's okay */
"GetIpNetTable(buf, &dwSize, FALSE) returned %d, expected NO_ERROR\n",
apiReturn);
+
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ DWORD i, j;
+
+ trace( "IP net table: %u entries\n", buf->dwNumEntries );
+ for (i = 0; i < buf->dwNumEntries; i++)
+ {
+ trace( "%u: idx %u type %u addr %s phys",
+ i, buf->table[i].dwIndex, buf->table[i].dwType, ntoa( buf->table[i].dwAddr ));
+ for (j = 0; j < buf->table[i].dwPhysAddrLen; j++)
+ printf( " %02x", buf->table[i].bPhysAddr[j] );
+ printf( "\n" );
+ }
+ }
HeapFree(GetProcessHeap(), 0, buf);
}
}
@@ -355,6 +434,23 @@ static void testGetIcmpStatistics(void)
}
ok(apiReturn == NO_ERROR,
"GetIcmpStatistics returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ trace( "ICMP stats: %8s %8s\n", "in", "out" );
+ trace( " dwMsgs: %8u %8u\n", stats.stats.icmpInStats.dwMsgs, stats.stats.icmpOutStats.dwMsgs );
+ trace( " dwErrors: %8u %8u\n", stats.stats.icmpInStats.dwErrors, stats.stats.icmpOutStats.dwErrors );
+ trace( " dwDestUnreachs: %8u %8u\n", stats.stats.icmpInStats.dwDestUnreachs, stats.stats.icmpOutStats.dwDestUnreachs );
+ trace( " dwTimeExcds: %8u %8u\n", stats.stats.icmpInStats.dwTimeExcds, stats.stats.icmpOutStats.dwTimeExcds );
+ trace( " dwParmProbs: %8u %8u\n", stats.stats.icmpInStats.dwParmProbs, stats.stats.icmpOutStats.dwParmProbs );
+ trace( " dwSrcQuenchs: %8u %8u\n", stats.stats.icmpInStats.dwSrcQuenchs, stats.stats.icmpOutStats.dwSrcQuenchs );
+ trace( " dwRedirects: %8u %8u\n", stats.stats.icmpInStats.dwRedirects, stats.stats.icmpOutStats.dwRedirects );
+ trace( " dwEchos: %8u %8u\n", stats.stats.icmpInStats.dwEchos, stats.stats.icmpOutStats.dwEchos );
+ trace( " dwEchoReps: %8u %8u\n", stats.stats.icmpInStats.dwEchoReps, stats.stats.icmpOutStats.dwEchoReps );
+ trace( " dwTimestamps: %8u %8u\n", stats.stats.icmpInStats.dwTimestamps, stats.stats.icmpOutStats.dwTimestamps );
+ trace( " dwTimestampReps: %8u %8u\n", stats.stats.icmpInStats.dwTimestampReps, stats.stats.icmpOutStats.dwTimestampReps );
+ trace( " dwAddrMasks: %8u %8u\n", stats.stats.icmpInStats.dwAddrMasks, stats.stats.icmpOutStats.dwAddrMasks );
+ trace( " dwAddrMaskReps: %8u %8u\n", stats.stats.icmpInStats.dwAddrMaskReps, stats.stats.icmpOutStats.dwAddrMaskReps );
+ }
}
}
@@ -375,6 +471,33 @@ static void testGetIpStatistics(void)
apiReturn = gGetIpStatistics(&stats);
ok(apiReturn == NO_ERROR,
"GetIpStatistics returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ trace( "IP stats:\n" );
+ trace( " dwForwarding: %u\n", stats.dwForwarding );
+ trace( " dwDefaultTTL: %u\n", stats.dwDefaultTTL );
+ trace( " dwInReceives: %u\n", stats.dwInReceives );
+ trace( " dwInHdrErrors: %u\n", stats.dwInHdrErrors );
+ trace( " dwInAddrErrors: %u\n", stats.dwInAddrErrors );
+ trace( " dwForwDatagrams: %u\n", stats.dwForwDatagrams );
+ trace( " dwInUnknownProtos: %u\n", stats.dwInUnknownProtos );
+ trace( " dwInDiscards: %u\n", stats.dwInDiscards );
+ trace( " dwInDelivers: %u\n", stats.dwInDelivers );
+ trace( " dwOutRequests: %u\n", stats.dwOutRequests );
+ trace( " dwRoutingDiscards: %u\n", stats.dwRoutingDiscards );
+ trace( " dwOutDiscards: %u\n", stats.dwOutDiscards );
+ trace( " dwOutNoRoutes: %u\n", stats.dwOutNoRoutes );
+ trace( " dwReasmTimeout: %u\n", stats.dwReasmTimeout );
+ trace( " dwReasmReqds: %u\n", stats.dwReasmReqds );
+ trace( " dwReasmOks: %u\n", stats.dwReasmOks );
+ trace( " dwReasmFails: %u\n", stats.dwReasmFails );
+ trace( " dwFragOks: %u\n", stats.dwFragOks );
+ trace( " dwFragFails: %u\n", stats.dwFragFails );
+ trace( " dwFragCreates: %u\n", stats.dwFragCreates );
+ trace( " dwNumIf: %u\n", stats.dwNumIf );
+ trace( " dwNumAddr: %u\n", stats.dwNumAddr );
+ trace( " dwNumRoutes: %u\n", stats.dwNumRoutes );
+ }
}
}
@@ -395,6 +518,25 @@ static void testGetTcpStatistics(void)
apiReturn = gGetTcpStatistics(&stats);
ok(apiReturn == NO_ERROR,
"GetTcpStatistics returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ trace( "TCP stats:\n" );
+ trace( " dwRtoAlgorithm: %u\n", stats.dwRtoAlgorithm );
+ trace( " dwRtoMin: %u\n", stats.dwRtoMin );
+ trace( " dwRtoMax: %u\n", stats.dwRtoMax );
+ trace( " dwMaxConn: %u\n", stats.dwMaxConn );
+ trace( " dwActiveOpens: %u\n", stats.dwActiveOpens );
+ trace( " dwPassiveOpens: %u\n", stats.dwPassiveOpens );
+ trace( " dwAttemptFails: %u\n", stats.dwAttemptFails );
+ trace( " dwEstabResets: %u\n", stats.dwEstabResets );
+ trace( " dwCurrEstab: %u\n", stats.dwCurrEstab );
+ trace( " dwInSegs: %u\n", stats.dwInSegs );
+ trace( " dwOutSegs: %u\n", stats.dwOutSegs );
+ trace( " dwRetransSegs: %u\n", stats.dwRetransSegs );
+ trace( " dwInErrs: %u\n", stats.dwInErrs );
+ trace( " dwOutRsts: %u\n", stats.dwOutRsts );
+ trace( " dwNumConns: %u\n", stats.dwNumConns );
+ }
}
}
@@ -415,6 +557,15 @@ static void testGetUdpStatistics(void)
apiReturn = gGetUdpStatistics(&stats);
ok(apiReturn == NO_ERROR,
"GetUdpStatistics returned %d, expected NO_ERROR\n", apiReturn);
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ trace( "UDP stats:\n" );
+ trace( " dwInDatagrams: %u\n", stats.dwInDatagrams );
+ trace( " dwNoPorts: %u\n", stats.dwNoPorts );
+ trace( " dwInErrors: %u\n", stats.dwInErrors );
+ trace( " dwOutDatagrams: %u\n", stats.dwOutDatagrams );
+ trace( " dwNumAddrs: %u\n", stats.dwNumAddrs );
+ }
}
}
@@ -424,15 +575,11 @@ static void testGetTcpTable(void)
DWORD apiReturn;
ULONG dwSize = 0;
- apiReturn = gGetTcpTable(NULL, NULL, FALSE);
+ apiReturn = gGetTcpTable(NULL, &dwSize, FALSE);
if (apiReturn == ERROR_NOT_SUPPORTED) {
skip("GetTcpTable is not supported\n");
return;
}
- ok(apiReturn == ERROR_INVALID_PARAMETER,
- "GetTcpTable(NULL, NULL, FALSE) returned %d, expected ERROR_INVALID_PARAMETER\n",
- apiReturn);
- apiReturn = gGetTcpTable(NULL, &dwSize, FALSE);
ok(apiReturn == ERROR_INSUFFICIENT_BUFFER ||
broken(apiReturn == ERROR_NO_DATA), /* win95 */
"GetTcpTable(NULL, &dwSize, FALSE) returned %d, expected ERROR_INSUFFICIENT_BUFFER\n",
@@ -444,6 +591,21 @@ static void testGetTcpTable(void)
ok(apiReturn == NO_ERROR,
"GetTcpTable(buf, &dwSize, FALSE) returned %d, expected NO_ERROR\n",
apiReturn);
+
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ DWORD i;
+ trace( "TCP table: %u entries\n", buf->dwNumEntries );
+ for (i = 0; i < buf->dwNumEntries; i++)
+ {
+ char buffer[40];
+ sprintf( buffer, "local %s:%u",
+ ntoa(buf->table[i].dwLocalAddr), ntohs(buf->table[i].dwLocalPort) );
+ trace( "%u: %s remote %s:%u state %u\n",
+ i, buffer, ntoa( buf->table[i].dwRemoteAddr ),
+ ntohs(buf->table[i].dwRemotePort), buf->table[i].dwState );
+ }
+ }
HeapFree(GetProcessHeap(), 0, buf);
}
}
@@ -455,25 +617,30 @@ static void testGetUdpTable(void)
DWORD apiReturn;
ULONG dwSize = 0;
- apiReturn = gGetUdpTable(NULL, NULL, FALSE);
+ apiReturn = gGetUdpTable(NULL, &dwSize, FALSE);
if (apiReturn == ERROR_NOT_SUPPORTED) {
skip("GetUdpTable is not supported\n");
return;
}
- ok(apiReturn == ERROR_INVALID_PARAMETER,
- "GetUdpTable(NULL, NULL, FALSE) returned %d, expected ERROR_INVALID_PARAMETER\n",
- apiReturn);
- apiReturn = gGetUdpTable(NULL, &dwSize, FALSE);
ok(apiReturn == ERROR_INSUFFICIENT_BUFFER,
"GetUdpTable(NULL, &dwSize, FALSE) returned %d, expected ERROR_INSUFFICIENT_BUFFER\n",
apiReturn);
- if (apiReturn != ERROR_INSUFFICIENT_BUFFER) {
+ if (apiReturn == ERROR_INSUFFICIENT_BUFFER) {
PMIB_UDPTABLE buf = HeapAlloc(GetProcessHeap(), 0, dwSize);
apiReturn = gGetUdpTable(buf, &dwSize, FALSE);
ok(apiReturn == NO_ERROR,
"GetUdpTable(buf, &dwSize, FALSE) returned %d, expected NO_ERROR\n",
apiReturn);
+
+ if (apiReturn == NO_ERROR && winetest_debug > 1)
+ {
+ DWORD i;
+ trace( "UDP table: %u entries\n", buf->dwNumEntries );
+ for (i = 0; i < buf->dwNumEntries; i++)
+ trace( "%u: %s:%u\n",
+ i, ntoa( buf->table[i].dwLocalAddr ), ntohs(buf->table[i].dwLocalPort) );
+ }
HeapFree(GetProcessHeap(), 0, buf);
}
}
@@ -657,6 +824,71 @@ static void testWin2KFunctions(void)
testGetPerAdapterInfo();
}
+static void test_GetAdaptersAddresses(void)
+{
+ ULONG ret, size;
+ IP_ADAPTER_ADDRESSES *aa;
+ IP_ADAPTER_UNICAST_ADDRESS *ua;
+
+ if (!gGetAdaptersAddresses)
+ {
+ win_skip("GetAdaptersAddresses not present\n");
+ return;
+ }
+
+ ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, NULL, NULL);
+ ok(ret == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", ret);
+
+ ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, NULL, &size);
+ ok(ret == ERROR_BUFFER_OVERFLOW, "expected ERROR_BUFFER_OVERFLOW, got %u\n", ret);
+ if (ret != ERROR_BUFFER_OVERFLOW) return;
+
+ aa = HeapAlloc(GetProcessHeap(), 0, size);
+ ret = gGetAdaptersAddresses(AF_UNSPEC, 0, NULL, aa, &size);
+ ok(!ret, "expected ERROR_SUCCESS got %u\n", ret);
+
+ while (!ret && winetest_debug > 1 && aa)
+ {
+ trace("Length: %u\n", aa->Length);
+ trace("IfIndex: %u\n", aa->IfIndex);
+ trace("Next: %p\n", aa->Next);
+ trace("AdapterName: %s\n", aa->AdapterName);
+ trace("FirstUnicastAddress: %p\n", aa->FirstUnicastAddress);
+ ua = aa->FirstUnicastAddress;
+ while (ua)
+ {
+ trace("\tLength: %u\n", ua->Length);
+ trace("\tFlags: 0x%08x\n", ua->Flags);
+ trace("\tNext: %p\n", ua->Next);
+ trace("\tAddress.lpSockaddr: %p\n", ua->Address.lpSockaddr);
+ trace("\tAddress.iSockaddrLength: %d\n", ua->Address.iSockaddrLength);
+ trace("\tPrefixOrigin: %u\n", ua->PrefixOrigin);
+ trace("\tSuffixOrigin: %u\n", ua->SuffixOrigin);
+ trace("\tDadState: %u\n", ua->DadState);
+ trace("\tValidLifetime: 0x%08x\n", ua->ValidLifetime);
+ trace("\tPreferredLifetime: 0x%08x\n", ua->PreferredLifetime);
+ trace("\tLeaseLifetime: 0x%08x\n", ua->LeaseLifetime);
+ trace("\n");
+ ua = ua->Next;
+ }
+ trace("FirstAnycastAddress: %p\n", aa->FirstAnycastAddress);
+ trace("FirstMulticastAddress: %p\n", aa->FirstMulticastAddress);
+ trace("FirstDnsServerAddress: %p\n", aa->FirstDnsServerAddress);
+ trace("DnsSuffix: %p\n", aa->DnsSuffix);
+ trace("Description: %p\n", aa->Description);
+ trace("FriendlyName: %p\n", aa->FriendlyName);
+ trace("PhysicalAddress: %02x\n", aa->PhysicalAddress[0]);
+ trace("PhysicalAddressLength: %u\n", aa->PhysicalAddressLength);
+ trace("Flags: 0x%08x\n", aa->Flags);
+ trace("Mtu: %u\n", aa->Mtu);
+ trace("IfType: %u\n", aa->IfType);
+ trace("OperStatus: %u\n", aa->OperStatus);
+ trace("\n");
+ aa = aa->Next;
+ }
+ HeapFree(GetProcessHeap(), 0, aa);
+}
+
START_TEST(iphlpapi)
{
@@ -666,6 +898,7 @@ START_TEST(iphlpapi)
testWinNT4Functions();
testWin98Functions();
testWin2KFunctions();
+ test_GetAdaptersAddresses();
freeIPHlpApi();
}
}
diff --git a/rostests/winetests/jscript/api.js b/rostests/winetests/jscript/api.js
index f3700987a33..30f201738e7 100644
--- a/rostests/winetests/jscript/api.js
+++ b/rostests/winetests/jscript/api.js
@@ -579,6 +579,36 @@ ok(tmp === Infinity, "Math.abs(-Infinite) = " + tmp);
tmp = Math.abs(-3, 2);
ok(tmp === 3, "Math.abs(-3, 2) = " + tmp);
+tmp = Math.cos(0);
+ok(tmp === 1, "Math.cos(0) = " + tmp);
+
+tmp = Math.cos(Math.PI/2);
+ok(Math.floor(tmp*100) === 0, "Math.cos(Math.PI/2) = " + tmp);
+
+tmp = Math.cos(-Math.PI/2);
+ok(Math.floor(tmp*100) === 0, "Math.cos(-Math.PI/2) = " + tmp);
+
+tmp = Math.cos(Math.PI/3, 2);
+ok(Math.floor(tmp*100) === 50, "Math.cos(Math.PI/3, 2) = " + tmp);
+
+tmp = Math.cos(true);
+ok(Math.floor(tmp*100) === 54, "Math.cos(true) = " + tmp);
+
+tmp = Math.cos(false);
+ok(tmp === 1, "Math.cos(false) = " + tmp);
+
+tmp = Math.cos();
+ok(isNaN(tmp), "Math.cos() is not NaN");
+
+tmp = Math.cos(NaN);
+ok(isNaN(tmp), "Math.cos(NaN) is not NaN");
+
+tmp = Math.cos(Infinity);
+ok(isNaN(tmp), "Math.cos(Infinity) is not NaN");
+
+tmp = Math.cos(-Infinity);
+ok(isNaN(tmp), "Math.cos(-Infinity) is not NaN");
+
tmp = Math.pow(2, 2);
ok(tmp === 4, "Math.pow(2, 2) = " + tmp);
@@ -640,4 +670,9 @@ ok(Math.floor(Math.LOG10E*100) === 43, "Math.LOG10E = " + Math.LOG10E);
Math.LOG10E = "test";
ok(Math.floor(Math.LOG10E*100) === 43, "modified Math.LOG10E = " + Math.LOG10E);
+ok(typeof(Math.LN2) === "number", "typeof(Math.LN2) = " + typeof(Math.LN2));
+ok(Math.floor(Math.LN2*100) === 69, "Math.LN2 = " + Math.LN2);
+Math.LN2 = "test";
+ok(Math.floor(Math.LN2*100) === 69, "modified Math.LN2 = " + Math.LN2);
+
reportSuccess();
diff --git a/rostests/winetests/jscript/run.c b/rostests/winetests/jscript/run.c
index 39577cd8b49..a1fe3b6daeb 100644
--- a/rostests/winetests/jscript/run.c
+++ b/rostests/winetests/jscript/run.c
@@ -600,6 +600,47 @@ static void parse_script(BSTR script_str)
IUnknown_Release(parser);
}
+static HRESULT parse_htmlscript(BSTR script_str)
+{
+ IActiveScriptParse *parser;
+ IActiveScript *engine;
+ HRESULT hres;
+ BSTR tmp = a2bstr("");
+
+ engine = create_script();
+ if(!engine)
+ return E_FAIL;
+
+ hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptParse, (void**)&parser);
+ ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
+ if (FAILED(hres))
+ {
+ IActiveScript_Release(engine);
+ return E_FAIL;
+ }
+
+ hres = IActiveScriptParse64_InitNew(parser);
+ ok(hres == S_OK, "InitNew failed: %08x\n", hres);
+
+ hres = IActiveScript_SetScriptSite(engine, &ActiveScriptSite);
+ ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
+
+ hres = IActiveScript_AddNamedItem(engine, testW,
+ SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE|SCRIPTITEM_GLOBALMEMBERS);
+ ok(hres == S_OK, "AddNamedItem failed: %08x\n", hres);
+
+ hres = IActiveScript_SetScriptState(engine, SCRIPTSTATE_STARTED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08x\n", hres);
+
+ hres = IActiveScriptParse64_ParseScriptText(parser, script_str, NULL, NULL, tmp, 0, 0, 0, NULL, NULL);
+
+ IActiveScript_Release(engine);
+ IUnknown_Release(parser);
+ SysFreeString(tmp);
+
+ return hres;
+}
+
static void parse_script_a(const char *src)
{
BSTR tmp = a2bstr(src);
@@ -607,6 +648,16 @@ static void parse_script_a(const char *src)
SysFreeString(tmp);
}
+static HRESULT parse_htmlscript_a(const char *src)
+{
+ HRESULT hres;
+ BSTR tmp = a2bstr(src);
+ hres = parse_htmlscript(tmp);
+ SysFreeString(tmp);
+
+ return hres;
+}
+
static BSTR get_script_from_file(const char *filename)
{
DWORD size, len;
@@ -741,6 +792,8 @@ static void test_isvisible(BOOL global_members)
static void run_tests(void)
{
+ HRESULT hres;
+
strict_dispid_check = TRUE;
parse_script_a("");
@@ -776,6 +829,19 @@ static void run_tests(void)
test_isvisible(FALSE);
test_isvisible(TRUE);
+
+ hres = parse_htmlscript_a("");
+ ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
+ hres = parse_htmlscript_a("\n");
+ ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
+ hres = parse_htmlscript_a("\n");
+ ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
+ hres = parse_htmlscript_a("var a=1;\nif(a-->0) a=5;\n");
+ ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
+ hres = parse_htmlscript_a("var a=1;\nif(a\n-->0) a=5;\n");
+ ok(hres != S_OK, "ParseScriptText have not failed\n");
}
START_TEST(run)
diff --git a/rostests/winetests/kernel32/actctx.c b/rostests/winetests/kernel32/actctx.c
index 1215ef587a0..d8f48de7472 100644
--- a/rostests/winetests/kernel32/actctx.c
+++ b/rostests/winetests/kernel32/actctx.c
@@ -43,6 +43,14 @@ static const char* strw(LPCWSTR x)
return buffer;
}
+#ifdef __i386__
+#define ARCH "x86"
+#elif defined __x86_64__
+#define ARCH "amd64"
+#else
+#define ARCH "none"
+#endif
+
static const char manifest1[] =
""
""
@@ -54,7 +62,7 @@ static const char manifest2[] =
""
""
""
-""
+""
""
""
""
@@ -76,7 +84,7 @@ static const char manifest4[] =
""
""
""
+ "version=\"6.0.1.0\" processorArchitecture=\"" ARCH "\" publicKeyToken=\"6595b64144ccf1df\">"
""
""
""
@@ -84,19 +92,19 @@ static const char manifest4[] =
static const char testdep_manifest1[] =
""
-""
+""
"";
static const char testdep_manifest2[] =
""
-""
+""
""
""
"";
static const char testdep_manifest3[] =
" "
-""
+""
""
""
"wndClass"
@@ -138,7 +146,7 @@ static const char wrong_manifest6[] =
static const char wrong_manifest7[] =
""
-""
+""
""
"";
@@ -150,7 +158,7 @@ static const char wrong_manifest8[] =
static const char wrong_depmanifest1[] =
""
-""
+""
"";
static const WCHAR testlib_dll[] =
@@ -386,21 +394,21 @@ static const info_in_assembly manifest4_info = {
static const info_in_assembly depmanifest1_info = {
0x10, depmanifest_path,
- "testdep,processorArchitecture=\"x86\","
+ "testdep,processorArchitecture=\"" ARCH "\","
"type=\"win32\",version=\"6.5.4.3\"",
TRUE
};
static const info_in_assembly depmanifest2_info = {
0x10, depmanifest_path,
- "testdep,processorArchitecture=\"x86\","
+ "testdep,processorArchitecture=\"" ARCH "\","
"type=\"win32\",version=\"6.5.4.3\"",
TRUE
};
static const info_in_assembly depmanifest3_info = {
0x10, depmanifest_path,
- "testdep,processorArchitecture=\"x86\",type=\"win32\",version=\"6.5.4.3\"",
+ "testdep,processorArchitecture=\"" ARCH "\",type=\"win32\",version=\"6.5.4.3\"",
TRUE
};
@@ -1202,7 +1210,7 @@ START_TEST(actctx)
if (!init_funcs())
{
- skip("Needed functions are not available\n");
+ win_skip("Needed functions are not available\n");
return;
}
init_paths();
diff --git a/rostests/winetests/kernel32/atom.c b/rostests/winetests/kernel32/atom.c
index 9601fd616c9..c7398500ab9 100755
--- a/rostests/winetests/kernel32/atom.c
+++ b/rostests/winetests/kernel32/atom.c
@@ -77,7 +77,7 @@ static BOOL unicode_OS;
static void test_add_atom(void)
{
ATOM atom, w_atom;
- int i;
+ INT_PTR i;
SetLastError( 0xdeadbeef );
atom = GlobalAddAtomA( "foobar" );
@@ -129,20 +129,20 @@ static void test_add_atom(void)
{
SetLastError( 0xdeadbeef );
ok( GlobalAddAtomA((LPCSTR)i) == i && GetLastError() == 0xdeadbeef,
- "failed to add atom %x\n", i );
+ "failed to add atom %lx\n", i );
if (unicode_OS)
{
SetLastError( 0xdeadbeef );
ok( GlobalAddAtomW((LPCWSTR)i) == i && GetLastError() == 0xdeadbeef,
- "failed to add atom %x\n", i );
+ "failed to add atom %lx\n", i );
}
}
for (i = 0xc000; i <= 0xffff; i++)
{
- ok( !GlobalAddAtomA((LPCSTR)i), "succeeded adding %x\n", i );
+ ok( !GlobalAddAtomA((LPCSTR)i), "succeeded adding %lx\n", i );
if (unicode_OS)
- ok( !GlobalAddAtomW((LPCWSTR)i), "succeeded adding %x\n", i );
+ ok( !GlobalAddAtomW((LPCWSTR)i), "succeeded adding %lx\n", i );
}
}
@@ -201,6 +201,7 @@ static void test_get_atom_name(void)
sprintf( res, "#%d", i );
memset( res + strlen(res) + 1, 'a', 10 );
ok( !memcmp( res, buf, 10 ), "bad buffer contents %s\n", buf );
+ if (len <= 1 || len >= 7) break; /* don't bother testing all of them */
}
else
ok( !len, "bad length %d\n", len );
@@ -283,6 +284,7 @@ static void test_get_atom_name(void)
print_integral( res, i );
memset( res + lstrlenW(res) + 1, 'a', 10 * sizeof(WCHAR));
ok( !memcmp( res, outW, 10 * sizeof(WCHAR) ), "bad buffer contents for %d\n", i );
+ if (len <= 1 || len >= 7) break; /* don't bother testing all of them */
}
else
ok( !len, "bad length %d\n", len );
@@ -349,7 +351,7 @@ static void test_error_handling(void)
static void test_local_add_atom(void)
{
ATOM atom, w_atom;
- int i;
+ INT_PTR i;
SetLastError( 0xdeadbeef );
atom = AddAtomA( "foobar" );
@@ -401,20 +403,20 @@ static void test_local_add_atom(void)
{
SetLastError( 0xdeadbeef );
ok( AddAtomA((LPCSTR)i) == i && GetLastError() == 0xdeadbeef,
- "failed to add atom %x\n", i );
+ "failed to add atom %lx\n", i );
if (unicode_OS)
{
SetLastError( 0xdeadbeef );
ok( AddAtomW((LPCWSTR)i) == i && GetLastError() == 0xdeadbeef,
- "failed to add atom %x\n", i );
+ "failed to add atom %lx\n", i );
}
}
for (i = 0xc000; i <= 0xffff; i++)
{
- ok( !AddAtomA((LPCSTR)i), "succeeded adding %x\n", i );
+ ok( !AddAtomA((LPCSTR)i), "succeeded adding %lx\n", i );
if (unicode_OS)
- ok( !AddAtomW((LPCWSTR)i), "succeeded adding %x\n", i );
+ ok( !AddAtomW((LPCWSTR)i), "succeeded adding %lx\n", i );
}
}
diff --git a/rostests/winetests/kernel32/change.c b/rostests/winetests/kernel32/change.c
index cb500ef4076..50d899a424f 100755
--- a/rostests/winetests/kernel32/change.c
+++ b/rostests/winetests/kernel32/change.c
@@ -38,7 +38,7 @@
static DWORD CALLBACK NotificationThread(LPVOID arg)
{
- HANDLE change = (HANDLE) arg;
+ HANDLE change = arg;
BOOL notified = FALSE;
BOOL ret = FALSE;
DWORD status;
@@ -65,8 +65,7 @@ static HANDLE StartNotificationThread(LPCSTR path, BOOL subtree, DWORD flags)
change = FindFirstChangeNotificationA(path, subtree, flags);
ok(change != INVALID_HANDLE_VALUE, "FindFirstChangeNotification error: %d\n", GetLastError());
- thread = CreateThread(NULL, 0, NotificationThread, (LPVOID)change,
- 0, &threadId);
+ thread = CreateThread(NULL, 0, NotificationThread, change, 0, &threadId);
ok(thread != NULL, "CreateThread error: %d\n", GetLastError());
return thread;
@@ -264,7 +263,7 @@ static void test_ffcn(void)
r = GetTempPathW( MAX_PATH, path );
if (!r && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED))
{
- skip("GetTempPathW is not implemented\n");
+ win_skip("GetTempPathW is not implemented\n");
return;
}
ok( r != 0, "temp path failed\n");
@@ -356,8 +355,8 @@ static void test_ffcnMultipleThreads(void)
* directory object with an empty wine user APC queue for this thread (bug #7286) */
/* Create our notification thread */
- handles[1] = CreateThread(NULL, 0, NotificationThread, (LPVOID)handles[0],
- 0, &threadId);
+ handles[1] = CreateThread(NULL, 0, NotificationThread, handles[0], 0,
+ &threadId);
ok(handles[1] != NULL, "CreateThread error: %d\n", GetLastError());
status = WaitForMultipleObjects(2, handles, FALSE, 5000);
@@ -387,7 +386,7 @@ static void test_readdirectorychanges(void)
if (!pReadDirectoryChangesW)
{
- skip("ReadDirectoryChangesW is not available\n");
+ win_skip("ReadDirectoryChangesW is not available\n");
return;
}
@@ -395,7 +394,7 @@ static void test_readdirectorychanges(void)
r = GetTempPathW( MAX_PATH, path );
if (!r && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED))
{
- skip("GetTempPathW is not implemented\n");
+ win_skip("GetTempPathW is not implemented\n");
return;
}
ok( r != 0, "temp path failed\n");
@@ -615,14 +614,14 @@ static void test_readdirectorychanges_null(void)
if (!pReadDirectoryChangesW)
{
- skip("ReadDirectoryChangesW is not available\n");
+ win_skip("ReadDirectoryChangesW is not available\n");
return;
}
SetLastError(0xdeadbeef);
r = GetTempPathW( MAX_PATH, path );
if (!r && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED))
{
- skip("GetTempPathW is not implemented\n");
+ win_skip("GetTempPathW is not implemented\n");
return;
}
ok( r != 0, "temp path failed\n");
@@ -717,7 +716,7 @@ static void test_readdirectorychanges_filedir(void)
r = GetTempPathW( MAX_PATH, path );
if (!r && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED))
{
- skip("GetTempPathW is not implemented\n");
+ win_skip("GetTempPathW is not implemented\n");
return;
}
ok( r != 0, "temp path failed\n");
@@ -848,8 +847,8 @@ static void test_ffcn_directory_overlap(void)
ret = FindCloseChangeNotification(parent_watch);
ok(ret, "FindCloseChangeNotification error: %d\n", GetLastError());
- child_thread = CreateThread(NULL, 0, NotificationThread,
- (LPVOID)child_watch, 0, &threadId);
+ child_thread = CreateThread(NULL, 0, NotificationThread, child_watch, 0,
+ &threadId);
ok(child_thread != NULL, "CreateThread error: %d\n", GetLastError());
/* Create a file in child */
diff --git a/rostests/winetests/kernel32/codepage.c b/rostests/winetests/kernel32/codepage.c
index 8dc6af949ed..906124156b7 100755
--- a/rostests/winetests/kernel32/codepage.c
+++ b/rostests/winetests/kernel32/codepage.c
@@ -205,7 +205,7 @@ static void test_overlapped_buffers(void)
int ret;
SetLastError(0xdeadbeef);
- memcpy((WCHAR *)(buf + 1), strW, sizeof(strW));
+ memcpy(buf + 1, strW, sizeof(strW));
ret = WideCharToMultiByte(CP_ACP, 0, (WCHAR *)(buf + 1), -1, buf, sizeof(buf), NULL, NULL);
ok(ret == sizeof(strA), "unexpected ret %d\n", ret);
ok(!memcmp(buf, strA, sizeof(strA)), "conversion failed: %s\n", buf);
diff --git a/rostests/winetests/kernel32/comm.c b/rostests/winetests/kernel32/comm.c
index 3c73eb54355..99fe505d294 100755
--- a/rostests/winetests/kernel32/comm.c
+++ b/rostests/winetests/kernel32/comm.c
@@ -1161,15 +1161,14 @@ static void test_WaitRx(HANDLE hcom)
*/
static DWORD CALLBACK toggle_ctlLine(LPVOID arg)
{
- DWORD *args = (DWORD *) arg;
+ DWORD_PTR *args = arg;
DWORD timeout = args[0];
DWORD ctl = args[1];
HANDLE hcom = (HANDLE) args[2];
HANDLE hComPortEvent = (HANDLE) args[3];
DWORD success, err;
- trace("toggle_ctlLine timeout %d clt 0x%08x handle 0x%08x\n",
- args[0], args[1], args[2]);
+ trace("toggle_ctlLine timeout %d ctl 0x%08x handle %p\n", timeout, ctl, hcom );
Sleep(timeout);
ok(EscapeCommFunction(hcom, ctl),"EscapeCommFunction 0x%08x failed\n", ctl);
trace("toggle_ctline done\n");
@@ -1190,8 +1189,8 @@ static void test_WaitCts(HANDLE hcom)
OVERLAPPED overlapped;
HANDLE hComPortEvent;
HANDLE alarmThread;
- DWORD args[4], defaultStat = 0;
- DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0;
+ DWORD_PTR args[4];
+ DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0, defaultStat = 0;
ok(GetCommState(hcom, &dcb), "GetCommState failed\n");
dcb.fRtsControl=RTS_CONTROL_ENABLE;
@@ -1208,15 +1207,15 @@ static void test_WaitCts(HANDLE hcom)
args[1] = CLRRTS;
else
args[1] = SETRTS;
- args[2]=(DWORD) hcom;
+ args[2]=(DWORD_PTR)hcom;
- trace("test_WaitCts timeout %d clt 0x%08x handle 0x%08x\n",args[0], args[1], args[2]);
+ trace("test_WaitCts timeout %ld clt 0x%08lx handle %p\n",args[0], args[1], hcom);
ok(SetCommMask(hcom, EV_CTS), "SetCommMask failed\n");
hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
ok(hComPortEvent != 0, "CreateEvent failed\n");
- args[3] = (DWORD) hComPortEvent;
- alarmThread = CreateThread(NULL, 0, toggle_ctlLine, (void *) &args, 0, &alarmThreadId);
+ args[3] = (DWORD_PTR)hComPortEvent;
+ alarmThread = CreateThread(NULL, 0, toggle_ctlLine, args, 0, &alarmThreadId);
/* Wait a minimum to let the thread start up */
Sleep(10);
trace("Thread created\n");
@@ -1265,7 +1264,7 @@ static void test_WaitCts(HANDLE hcom)
*/
static DWORD CALLBACK reset_CommMask(LPVOID arg)
{
- DWORD *args = (DWORD *) arg;
+ DWORD_PTR *args = arg;
DWORD timeout = args[0];
HANDLE hcom = (HANDLE) args[1];
@@ -1287,7 +1286,7 @@ static void test_AbortWaitCts(HANDLE hcom)
OVERLAPPED overlapped;
HANDLE hComPortEvent;
HANDLE alarmThread;
- DWORD args[2];
+ DWORD_PTR args[2];
DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0;
ok(GetCommState(hcom, &dcb), "GetCommState failed\n");
@@ -1297,14 +1296,14 @@ static void test_AbortWaitCts(HANDLE hcom)
return;
}
args[0]= TIMEOUT >>1;
- args[1]=(DWORD) hcom;
+ args[1]= (DWORD_PTR)hcom;
- trace("test_AbortWaitCts timeout %d handle 0x%08x\n",args[0], args[1]);
+ trace("test_AbortWaitCts timeout %ld handle %p\n",args[0], hcom);
ok(SetCommMask(hcom, EV_CTS), "SetCommMask failed\n");
hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
ok(hComPortEvent != 0, "CreateEvent failed\n");
- alarmThread = CreateThread(NULL, 0, reset_CommMask, (void *) &args, 0, &alarmThreadId);
+ alarmThread = CreateThread(NULL, 0, reset_CommMask, args, 0, &alarmThreadId);
/* Wait a minimum to let the thread start up */
Sleep(10);
trace("Thread created\n");
@@ -1348,8 +1347,8 @@ static void test_WaitDsr(HANDLE hcom)
OVERLAPPED overlapped;
HANDLE hComPortEvent;
HANDLE alarmThread;
- DWORD args[3], defaultStat = 0;
- DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0;
+ DWORD_PTR args[3];
+ DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0, defaultStat = 0;
ok(GetCommState(hcom, &dcb), "GetCommState failed\n");
if (dcb.fDtrControl == DTR_CONTROL_DISABLE)
@@ -1363,14 +1362,14 @@ static void test_WaitDsr(HANDLE hcom)
args[1] = CLRDTR;
else
args[1] = SETDTR;
- args[2]=(DWORD) hcom;
+ args[2]= (DWORD_PTR)hcom;
- trace("test_WaitDsr timeout %d clt 0x%08x handle 0x%08x\n",args[0], args[1], args[2]);
+ trace("test_WaitDsr timeout %ld clt 0x%08lx handle %p\n",args[0], args[1], hcom);
ok(SetCommMask(hcom, EV_DSR), "SetCommMask failed\n");
hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
ok(hComPortEvent != 0, "CreateEvent failed\n");
- alarmThread = CreateThread(NULL, 0, toggle_ctlLine, (void *) &args, 0, &alarmThreadId);
+ alarmThread = CreateThread(NULL, 0, toggle_ctlLine, args, 0, &alarmThreadId);
ok(alarmThread !=0 , "CreateThread Failed\n");
ZeroMemory( &overlapped, sizeof(overlapped));
@@ -1421,8 +1420,8 @@ static void test_WaitRing(HANDLE hcom)
OVERLAPPED overlapped;
HANDLE hComPortEvent;
HANDLE alarmThread;
- DWORD args[3], defaultStat;
- DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0;
+ DWORD_PTR args[3];
+ DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0, defaultStat;
BOOL ret;
ok(GetCommState(hcom, &dcb), "GetCommState failed\n");
@@ -1441,14 +1440,14 @@ static void test_WaitRing(HANDLE hcom)
args[1] = CLRDTR;
else
args[1] = SETDTR;
- args[2]=(DWORD) hcom;
+ args[2]=(DWORD_PTR) hcom;
- trace("test_WaitRing timeout %d clt 0x%08x handle 0x%08x\n",args[0], args[1], args[2]);
+ trace("test_WaitRing timeout %ld clt 0x%08lx handle %p\n",args[0], args[1], hcom);
ok(SetCommMask(hcom, EV_RING), "SetCommMask failed\n");
hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
ok(hComPortEvent != 0, "CreateEvent failed\n");
- alarmThread = CreateThread(NULL, 0, toggle_ctlLine, (void *) &args, 0, &alarmThreadId);
+ alarmThread = CreateThread(NULL, 0, toggle_ctlLine, args, 0, &alarmThreadId);
ok(alarmThread !=0 , "CreateThread Failed\n");
ZeroMemory( &overlapped, sizeof(overlapped));
@@ -1498,8 +1497,8 @@ static void test_WaitDcd(HANDLE hcom)
OVERLAPPED overlapped;
HANDLE hComPortEvent;
HANDLE alarmThread;
- DWORD args[3], defaultStat = 0;
- DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0;
+ DWORD_PTR args[3];
+ DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0, defaultStat = 0;
ok(GetCommState(hcom, &dcb), "GetCommState failed\n");
if (dcb.fDtrControl == DTR_CONTROL_DISABLE)
@@ -1513,14 +1512,14 @@ static void test_WaitDcd(HANDLE hcom)
args[1] = CLRDTR;
else
args[1] = SETDTR;
- args[2]=(DWORD) hcom;
+ args[2]= (DWORD_PTR)hcom;
- trace("test_WaitDcd timeout %d clt 0x%08x handle 0x%08x\n",args[0], args[1], args[2]);
+ trace("test_WaitDcd timeout %ld clt 0x%08lx handle %p\n",args[0], args[1], hcom);
ok(SetCommMask(hcom, EV_RLSD), "SetCommMask failed\n");
hComPortEvent = CreateEvent( NULL, TRUE, FALSE, NULL );
ok(hComPortEvent != 0, "CreateEvent failed\n");
- alarmThread = CreateThread(NULL, 0, toggle_ctlLine, (void *) &args, 0, &alarmThreadId);
+ alarmThread = CreateThread(NULL, 0, toggle_ctlLine, args, 0, &alarmThreadId);
ok(alarmThread !=0 , "CreateThread Failed\n");
ZeroMemory( &overlapped, sizeof(overlapped));
@@ -1566,7 +1565,7 @@ static void test_WaitDcd(HANDLE hcom)
*/
static DWORD CALLBACK set_CommBreak(LPVOID arg)
{
- DWORD *args = (DWORD *) arg;
+ DWORD_PTR *args = arg;
DWORD timeout = args[0];
HANDLE hcom = (HANDLE) args[1];
@@ -1587,7 +1586,7 @@ static void test_WaitBreak(HANDLE hcom)
OVERLAPPED overlapped;
HANDLE hComPortEvent;
HANDLE alarmThread;
- DWORD args[2];
+ DWORD_PTR args[2];
DWORD alarmThreadId, before, after, after1, diff, success, err, written, evtmask=0;
ok(SetCommMask(hcom, EV_BREAK), "SetCommMask failed\n");
@@ -1596,8 +1595,8 @@ static void test_WaitBreak(HANDLE hcom)
trace("test_WaitBreak\n");
args[0]= TIMEOUT >>1;
- args[1]=(DWORD) hcom;
- alarmThread = CreateThread(NULL, 0, set_CommBreak, (void *) &args, 0, &alarmThreadId);
+ args[1]= (DWORD_PTR)hcom;
+ alarmThread = CreateThread(NULL, 0, set_CommBreak, args, 0, &alarmThreadId);
/* Wait a minimum to let the thread start up */
Sleep(10);
trace("Thread created\n");
diff --git a/rostests/winetests/kernel32/console.c b/rostests/winetests/kernel32/console.c
index 6eed56bd07f..a54ff5cdda4 100755
--- a/rostests/winetests/kernel32/console.c
+++ b/rostests/winetests/kernel32/console.c
@@ -162,7 +162,7 @@ static void testCursorInfo(HANDLE hCon)
if (info.dwSize == 12)
{
- skip("NULL CONSOLE_CURSOR_INFO will crash on win9x\n");
+ win_skip("NULL CONSOLE_CURSOR_INFO will crash on win9x\n");
return;
}
@@ -173,7 +173,46 @@ static void testCursorInfo(HANDLE hCon)
ERROR_INVALID_ACCESS, GetLastError());
}
-static void testWriteSimple(HANDLE hCon, COORD sbSize)
+static void testEmptyWrite(HANDLE hCon)
+{
+ COORD c;
+ DWORD len;
+ const char* mytest = "";
+
+ c.X = c.Y = 0;
+ ok(SetConsoleCursorPosition(hCon, c) != 0, "Cursor in upper-left\n");
+
+ len = -1;
+ ok(WriteConsole(hCon, NULL, 0, &len, NULL) != 0 && len == 0, "WriteConsole\n");
+ okCURSOR(hCon, c);
+
+ /* Passing a NULL lpBuffer with sufficiently large non-zero length succeeds
+ * on native Windows and result in memory-like contents being written to
+ * the console. Calling WriteConsoleW like this will crash on Wine. */
+ if (0)
+ {
+ len = -1;
+ ok(!WriteConsole(hCon, NULL, 16, &len, NULL) && len == -1, "WriteConsole\n");
+ okCURSOR(hCon, c);
+
+ /* Cursor advances for this call. */
+ len = -1;
+ ok(WriteConsole(hCon, NULL, 128, &len, NULL) != 0 && len == 128, "WriteConsole\n");
+ }
+
+ len = -1;
+ ok(WriteConsole(hCon, mytest, 0, &len, NULL) != 0 && len == 0, "WriteConsole\n");
+ okCURSOR(hCon, c);
+
+ /* WriteConsole does not halt on a null terminator and is happy to write
+ * memory contents beyond the actual size of the buffer. */
+ len = -1;
+ ok(WriteConsole(hCon, mytest, 16, &len, NULL) != 0 && len == 16, "WriteConsole\n");
+ c.X += 16;
+ okCURSOR(hCon, c);
+}
+
+static void testWriteSimple(HANDLE hCon)
{
COORD c;
DWORD len;
@@ -407,7 +446,9 @@ static void testWrite(HANDLE hCon, COORD sbSize)
/* FIXME: should in fact insure that the sb is at least 10 character wide */
ok(SetConsoleTextAttribute(hCon, TEST_ATTRIB), "Setting default text color\n");
resetContent(hCon, sbSize, FALSE);
- testWriteSimple(hCon, sbSize);
+ testEmptyWrite(hCon);
+ resetContent(hCon, sbSize, FALSE);
+ testWriteSimple(hCon);
resetContent(hCon, sbSize, FALSE);
testWriteNotWrappedNotProcessed(hCon, sbSize);
resetContent(hCon, sbSize, FALSE);
@@ -665,7 +706,7 @@ static void testScreenBuffer(HANDLE hConOut)
ret = SetConsoleOutputCP(866);
if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("SetConsoleOutputCP is not implemented\n");
+ win_skip("SetConsoleOutputCP is not implemented\n");
return;
}
ok(ret, "Cannot set output codepage to 866\n");
@@ -901,7 +942,8 @@ START_TEST(console)
ok(hConIn != INVALID_HANDLE_VALUE, "Opening ConIn\n");
ok(hConOut != INVALID_HANDLE_VALUE, "Opening ConOut\n");
- ok(ret = GetConsoleScreenBufferInfo(hConOut, &sbi), "Getting sb info\n");
+ ret = GetConsoleScreenBufferInfo(hConOut, &sbi);
+ ok(ret, "Getting sb info\n");
if (!ret) return;
/* Non interactive tests */
@@ -921,7 +963,7 @@ START_TEST(console)
if (!pGetConsoleInputExeNameA || !pSetConsoleInputExeNameA)
{
- skip("GetConsoleInputExeNameA and/or SetConsoleInputExeNameA is not available\n");
+ win_skip("GetConsoleInputExeNameA and/or SetConsoleInputExeNameA is not available\n");
return;
}
else
diff --git a/rostests/winetests/kernel32/debugger.c b/rostests/winetests/kernel32/debugger.c
index 1a5072c25d6..363dd216c24 100644
--- a/rostests/winetests/kernel32/debugger.c
+++ b/rostests/winetests/kernel32/debugger.c
@@ -47,6 +47,40 @@ static void get_file_name(char* buf)
GetTempFileNameA(path, "wt", 0, buf);
}
+typedef struct tag_reg_save_value
+{
+ const char *name;
+ DWORD type;
+ BYTE *data;
+ DWORD size;
+} reg_save_value;
+
+static DWORD save_value(HKEY hkey, const char *value, reg_save_value *saved)
+{
+ DWORD ret;
+ saved->name=value;
+ saved->data=0;
+ saved->size=0;
+ ret=RegQueryValueExA(hkey, value, NULL, &saved->type, NULL, &saved->size);
+ if (ret == ERROR_SUCCESS)
+ {
+ saved->data=HeapAlloc(GetProcessHeap(), 0, saved->size);
+ RegQueryValueExA(hkey, value, NULL, &saved->type, saved->data, &saved->size);
+ }
+ return ret;
+}
+
+static void restore_value(HKEY hkey, reg_save_value *saved)
+{
+ if (saved->data)
+ {
+ RegSetValueExA(hkey, saved->name, 0, saved->type, saved->data, saved->size);
+ HeapFree(GetProcessHeap(), 0, saved->data);
+ }
+ else
+ RegDeleteValueA(hkey, saved->name);
+}
+
static void get_events(const char* name, HANDLE *start_event, HANDLE *done_event)
{
const char* basename;
@@ -133,7 +167,7 @@ static void doDebugger(int argc, char** argv)
{
const char* logfile;
debugger_blackbox_t blackbox;
- HANDLE start_event, done_event, debug_event;
+ HANDLE start_event = 0, done_event = 0, debug_event;
blackbox.argc=argc;
logfile=(argc >= 4 ? argv[3] : NULL);
@@ -149,7 +183,7 @@ static void doDebugger(int argc, char** argv)
else
blackbox.attach_rc=TRUE;
- debug_event=(argc >= 6 ? (HANDLE)atol(argv[5]) : NULL);
+ debug_event=(argc >= 6 ? (HANDLE)(INT_PTR)atol(argv[5]) : NULL);
blackbox.debug_err=0;
if (debug_event && strstr(myARGV[2], "event"))
{
@@ -313,14 +347,13 @@ static void crash_and_winedbg(HKEY hkey, const char* argv0)
static void test_ExitCode(void)
{
static const char* AeDebug="Software\\Microsoft\\Windows NT\\CurrentVersion\\AeDebug";
+ static const char* WineDbg="Software\\Wine\\WineDbg";
char test_exe[MAX_PATH];
DWORD ret;
HKEY hkey;
DWORD disposition;
- LPBYTE auto_val=NULL;
- DWORD auto_size, auto_type;
- LPBYTE debugger_val=NULL;
- DWORD debugger_size, debugger_type;
+ reg_save_value auto_value;
+ reg_save_value debugger_value;
GetModuleFileNameA(GetModuleHandle(NULL), test_exe, sizeof(test_exe));
if (GetFileAttributes(test_exe) == INVALID_FILE_ATTRIBUTES)
@@ -334,22 +367,9 @@ static void test_ExitCode(void)
ret=RegCreateKeyExA(HKEY_LOCAL_MACHINE, AeDebug, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, &disposition);
if (ret == ERROR_SUCCESS)
{
- auto_size=0;
- ret=RegQueryValueExA(hkey, "auto", NULL, &auto_type, NULL, &auto_size);
- if (ret == ERROR_SUCCESS)
- {
- auto_val=HeapAlloc(GetProcessHeap(), 0, auto_size);
- RegQueryValueExA(hkey, "auto", NULL, &auto_type, auto_val, &auto_size);
- }
-
- debugger_size=0;
- ret=RegQueryValueExA(hkey, "debugger", NULL, &debugger_type, NULL, &debugger_size);
- if (ret == ERROR_SUCCESS)
- {
- debugger_val=HeapAlloc(GetProcessHeap(), 0, debugger_size);
- RegQueryValueExA(hkey, "debugger", NULL, &debugger_type, debugger_val, &debugger_size);
- trace("HKLM\\%s\\debugger is set to '%s'\n", AeDebug, debugger_val);
- }
+ save_value(hkey, "auto", &auto_value);
+ save_value(hkey, "debugger", &debugger_value);
+ trace("HKLM\\%s\\debugger is set to '%s'\n", AeDebug, debugger_value.data);
}
else if (ret == ERROR_ACCESS_DENIED)
{
@@ -362,11 +382,32 @@ static void test_ExitCode(void)
return;
}
- if (debugger_val && debugger_type == REG_SZ &&
- strstr((char*)debugger_val, "winedbg --auto"))
- crash_and_winedbg(hkey, test_exe);
+ if (debugger_value.data && debugger_value.type == REG_SZ &&
+ strstr((char*)debugger_value.data, "winedbg --auto"))
+ {
+ HKEY hkeyWinedbg;
+ ret=RegCreateKeyA(HKEY_CURRENT_USER, WineDbg, &hkeyWinedbg);
+ if (ret == ERROR_SUCCESS)
+ {
+ static DWORD zero;
+ reg_save_value crash_dlg_value;
+ save_value(hkeyWinedbg, "ShowCrashDialog", &crash_dlg_value);
+ RegSetValueExA(hkeyWinedbg, "ShowCrashDialog", 0, REG_DWORD, (BYTE *)&zero, sizeof(DWORD));
+ crash_and_winedbg(hkey, test_exe);
+ restore_value(hkeyWinedbg, &crash_dlg_value);
+ RegCloseKey(hkeyWinedbg);
+ }
+ else
+ ok(0, "Couldn't access WineDbg Key - error %u\n", ret);
+ }
- crash_and_debug(hkey, test_exe, "dbg,none");
+ if (winetest_interactive)
+ /* Since the debugging process never sets the debug event, it isn't recognized
+ as a valid debugger and, after the debugger exits, Windows will show a dialog box
+ asking the user what to do */
+ crash_and_debug(hkey, test_exe, "dbg,none");
+ else
+ skip("\"none\" debugger test needs user interaction\n");
crash_and_debug(hkey, test_exe, "dbg,event,order");
crash_and_debug(hkey, test_exe, "dbg,attach,event,code2");
if (pDebugSetProcessKillOnExit)
@@ -381,20 +422,8 @@ static void test_ExitCode(void)
}
else
{
- if (auto_val)
- {
- RegSetValueExA(hkey, "auto", 0, auto_type, auto_val, auto_size);
- HeapFree(GetProcessHeap(), 0, auto_val);
- }
- else
- RegDeleteValueA(hkey, "auto");
- if (debugger_val)
- {
- RegSetValueExA(hkey, "debugger", 0, debugger_type, debugger_val, debugger_size);
- HeapFree(GetProcessHeap(), 0, debugger_val);
- }
- else
- RegDeleteValueA(hkey, "debugger");
+ restore_value(hkey, &auto_value);
+ restore_value(hkey, &debugger_value);
RegCloseKey(hkey);
}
}
diff --git a/rostests/winetests/kernel32/directory.c b/rostests/winetests/kernel32/directory.c
index 47e77013a1d..a0ccd9f924d 100755
--- a/rostests/winetests/kernel32/directory.c
+++ b/rostests/winetests/kernel32/directory.c
@@ -339,27 +339,32 @@ static void test_CreateDirectoryW(void)
ret = CreateDirectoryW(NULL, NULL);
if (!ret && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
return;
- ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, "should not create NULL path\n");
+ ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND,
+ "should not create NULL path ret %u err %u\n", ret, GetLastError());
ret = CreateDirectoryW(empty_strW, NULL);
- ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND, "should not create empty path\n");
+ ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND,
+ "should not create empty path ret %u err %u\n", ret, GetLastError());
ret = GetSystemDirectoryW(tmpdir, MAX_PATH);
ok(ret < MAX_PATH, "System directory should fit into MAX_PATH\n");
ret = SetCurrentDirectoryW(tmpdir);
- ok(ret == TRUE, "could not chdir to the System directory\n");
+ ok(ret == TRUE, "could not chdir to the System directory ret %u err %u\n", ret, GetLastError());
ret = CreateDirectoryW(dotW, NULL);
- ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, "should not create existing path\n");
+ ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS,
+ "should not create existing path ret %u err %u\n", ret, GetLastError());
ret = CreateDirectoryW(dotdotW, NULL);
- ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, "should not create existing path\n");
+ ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS,
+ "should not create existing path ret %u err %u\n", ret, GetLastError());
GetTempPathW(MAX_PATH, tmpdir);
tmpdir[3] = 0; /* truncate the path */
ret = CreateDirectoryW(tmpdir, NULL);
- ok(ret == FALSE && GetLastError() == ERROR_ACCESS_DENIED, "should deny access to the drive root\n");
+ ok(ret == FALSE && (GetLastError() == ERROR_ACCESS_DENIED || GetLastError() == ERROR_ALREADY_EXISTS),
+ "should deny access to the drive root ret %u err %u\n", ret, GetLastError());
GetTempPathW(MAX_PATH, tmpdir);
lstrcatW(tmpdir, tmp_dir_name);
@@ -367,7 +372,8 @@ static void test_CreateDirectoryW(void)
ok(ret == TRUE, "CreateDirectoryW should always succeed\n");
ret = CreateDirectoryW(tmpdir, NULL);
- ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS, "should not create existing path\n");
+ ok(ret == FALSE && GetLastError() == ERROR_ALREADY_EXISTS,
+ "should not create existing path ret %u err %u\n", ret, GetLastError());
ret = RemoveDirectoryW(tmpdir);
ok(ret == TRUE, "RemoveDirectoryW should always succeed\n");
@@ -391,8 +397,9 @@ static void test_CreateDirectoryW(void)
lstrcatW(tmpdir, slashW);
lstrcatW(tmpdir, tmp_dir_name);
ret = CreateDirectoryW(tmpdir, NULL);
- ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND,
- "CreateDirectoryW with multiple nonexistent directories in path should fail\n");
+ ok(ret == FALSE && GetLastError() == ERROR_PATH_NOT_FOUND,
+ "CreateDirectoryW with multiple nonexistent directories in path should fail ret %u err %u\n",
+ ret, GetLastError());
ret = RemoveDirectoryW(tmpdir);
}
diff --git a/rostests/winetests/kernel32/drive.c b/rostests/winetests/kernel32/drive.c
index a94cbdfea6e..98bc12667e7 100755
--- a/rostests/winetests/kernel32/drive.c
+++ b/rostests/winetests/kernel32/drive.c
@@ -118,7 +118,12 @@ static void test_GetDiskFreeSpaceA(void)
else
{
ok(ret ||
- (!ret && (GetLastError() == ERROR_NOT_READY || GetLastError() == ERROR_INVALID_DRIVE)),
+ GetLastError() == ERROR_NOT_READY ||
+ GetLastError() == ERROR_INVALID_FUNCTION ||
+ GetLastError() == ERROR_INVALID_DRIVE ||
+ GetLastError() == ERROR_PATH_NOT_FOUND ||
+ GetLastError() == ERROR_REQUEST_ABORTED ||
+ GetLastError() == ERROR_UNRECOGNIZED_VOLUME,
"GetDiskFreeSpaceA(%s): ret=%d GetLastError=%d\n",
drive, ret, GetLastError());
if( GetVersion() & 0x80000000)
@@ -132,7 +137,12 @@ static void test_GetDiskFreeSpaceA(void)
tot.QuadPart = sectors_per_cluster;
tot.QuadPart = (tot.QuadPart * bytes_per_sector) * total_clusters;
ret = pGetDiskFreeSpaceExA( drive, &d, &totEx, NULL);
- ok( ret || (!ret && ERROR_NOT_READY == GetLastError()),
+ ok( ret ||
+ GetLastError() == ERROR_NOT_READY ||
+ GetLastError() == ERROR_INVALID_FUNCTION ||
+ GetLastError() == ERROR_PATH_NOT_FOUND ||
+ GetLastError() == ERROR_REQUEST_ABORTED ||
+ GetLastError() == ERROR_UNRECOGNIZED_VOLUME,
"GetDiskFreeSpaceExA( %s ) failed. GetLastError=%d\n", drive, GetLastError());
ok( bytes_per_sector == 0 || /* empty cd rom drive */
totEx.QuadPart <= tot.QuadPart,
@@ -188,7 +198,12 @@ static void test_GetDiskFreeSpaceW(void)
"GetDiskFreeSpaceW(%c): ret=%d GetLastError=%d\n",
drive[0], ret, GetLastError());
else
- ok(ret || GetLastError() == ERROR_NOT_READY,
+ ok( ret ||
+ GetLastError() == ERROR_NOT_READY ||
+ GetLastError() == ERROR_INVALID_FUNCTION ||
+ GetLastError() == ERROR_PATH_NOT_FOUND ||
+ GetLastError() == ERROR_REQUEST_ABORTED ||
+ GetLastError() == ERROR_UNRECOGNIZED_VOLUME,
"GetDiskFreeSpaceW(%c): ret=%d GetLastError=%d\n",
drive[0], ret, GetLastError());
}
diff --git a/rostests/winetests/kernel32/environ.c b/rostests/winetests/kernel32/environ.c
index 70549e30240..b3526675b20 100755
--- a/rostests/winetests/kernel32/environ.c
+++ b/rostests/winetests/kernel32/environ.c
@@ -148,7 +148,7 @@ static void test_GetSetEnvironmentVariableW(void)
if (ret == FALSE && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
{
/* Must be Win9x which doesn't support the Unicode functions */
- skip("SetEnvironmentVariableW is not implemented\n");
+ win_skip("SetEnvironmentVariableW is not implemented\n");
return;
}
ok(ret == TRUE,
@@ -245,13 +245,14 @@ static void test_ExpandEnvironmentStringsA(void)
SetEnvironmentVariableA("EnvVar", value);
ret_size = ExpandEnvironmentStringsA(NULL, buf1, sizeof(buf1));
- ok(ret_size == 1 || ret_size == 0 /* Win9x */,
+ ok(ret_size == 1 || ret_size == 0 /* Win9x */ || ret_size == 2 /* NT4 */,
"ExpandEnvironmentStrings returned %d\n", ret_size);
/* Try to get the required buffer size 'the natural way' */
strcpy(buf, "%EnvVar%");
ret_size = ExpandEnvironmentStringsA(buf, NULL, 0);
ok(ret_size == strlen(value)+1 || /* win98 */
+ ret_size == (strlen(value)+1)*2 || /* NT4 */
ret_size == strlen(value)+2 || /* win2k, XP, win2k3 */
ret_size == 0 /* Win95 */,
"ExpandEnvironmentStrings returned %d instead of %d, %d or %d\n",
@@ -260,21 +261,24 @@ static void test_ExpandEnvironmentStringsA(void)
/* Again, side-stepping the Win95 bug */
ret_size = ExpandEnvironmentStringsA(buf, buf1, 0);
/* v5.1.2600.2945 (XP SP2) returns len + 2 here! */
- ok(ret_size == strlen(value)+1 || ret_size == strlen(value)+2,
+ ok(ret_size == strlen(value)+1 || ret_size == strlen(value)+2 ||
+ ret_size == (strlen(value)+1)*2 /* NT4 */,
"ExpandEnvironmentStrings returned %d instead of %d\n",
ret_size, lstrlenA(value)+1);
/* Try with a buffer that's too small */
ret_size = ExpandEnvironmentStringsA(buf, buf1, 12);
/* v5.1.2600.2945 (XP SP2) returns len + 2 here! */
- ok(ret_size == strlen(value)+1 || ret_size == strlen(value)+2,
+ ok(ret_size == strlen(value)+1 || ret_size == strlen(value)+2 ||
+ ret_size == (strlen(value)+1)*2 /* NT4 */,
"ExpandEnvironmentStrings returned %d instead of %d\n",
ret_size, lstrlenA(value)+1);
/* Try with a buffer of just the right size */
/* v5.1.2600.2945 (XP SP2) needs and returns len + 2 here! */
ret_size = ExpandEnvironmentStringsA(buf, buf1, ret_size);
- ok(ret_size == strlen(value)+1 || ret_size == strlen(value)+2,
+ ok(ret_size == strlen(value)+1 || ret_size == strlen(value)+2 ||
+ ret_size == (strlen(value)+1)*2 /* NT4 */,
"ExpandEnvironmentStrings returned %d instead of %d\n",
ret_size, lstrlenA(value)+1);
ok(!strcmp(buf1, value), "ExpandEnvironmentStrings returned [%s]\n", buf1);
@@ -282,7 +286,9 @@ static void test_ExpandEnvironmentStringsA(void)
/* Try with an unset environment variable */
strcpy(buf, not_an_env_var);
ret_size = ExpandEnvironmentStringsA(buf, buf1, sizeof(buf1));
- ok(ret_size == strlen(not_an_env_var)+1, "ExpandEnvironmentStrings returned %d instead of %d\n", ret_size, lstrlenA(value)+1);
+ ok(ret_size == strlen(not_an_env_var)+1 ||
+ ret_size == (strlen(not_an_env_var)+1)*2 /* NT4 */,
+ "ExpandEnvironmentStrings returned %d instead of %d\n", ret_size, lstrlenA(not_an_env_var)+1);
ok(!strcmp(buf1, not_an_env_var), "ExpandEnvironmentStrings returned [%s]\n", buf1);
/* test a large destination size */
@@ -303,7 +309,9 @@ static void test_ExpandEnvironmentStringsA(void)
strcpy(buf, "Indirect-%IndirectVar%-Indirect");
strcpy(buf2, "Indirect-Foo%EnvVar%Bar-Indirect");
ret_size = ExpandEnvironmentStringsA(buf, buf1, sizeof(buf1));
- ok(ret_size == strlen(buf2)+1, "ExpandEnvironmentStrings returned %d instead of %d\n", ret_size, lstrlen(buf2)+1);
+ ok(ret_size == strlen(buf2)+1 ||
+ ret_size == (strlen(buf2)+1)*2 /* NT4 */,
+ "ExpandEnvironmentStrings returned %d instead of %d\n", ret_size, lstrlen(buf2)+1);
ok(!strcmp(buf1, buf2), "ExpandEnvironmentStrings returned [%s]\n", buf1);
SetEnvironmentVariableA("IndirectVar", NULL);
@@ -351,7 +359,7 @@ static void test_GetComputerName(void)
ret = GetComputerNameW((LPWSTR)0xdeadbeef, &size);
error = GetLastError();
if (error == ERROR_CALL_NOT_IMPLEMENTED)
- skip("GetComputerNameW is not implemented\n");
+ win_skip("GetComputerNameW is not implemented\n");
else
{
todo_wine
@@ -376,7 +384,7 @@ static void test_GetComputerNameExA(void)
if (!pGetComputerNameExA)
{
- skip("GetComputerNameExA function not implemented\n");
+ win_skip("GetComputerNameExA function not implemented\n");
return;
}
@@ -450,7 +458,7 @@ static void test_GetComputerNameExW(void)
if (!pGetComputerNameExW)
{
- skip("GetComputerNameExW function not implemented\n");
+ win_skip("GetComputerNameExW function not implemented\n");
return;
}
diff --git a/rostests/winetests/kernel32/file.c b/rostests/winetests/kernel32/file.c
index 2239558f677..89b284d74cf 100755
--- a/rostests/winetests/kernel32/file.c
+++ b/rostests/winetests/kernel32/file.c
@@ -20,6 +20,9 @@
*
*/
+/* ReplaceFile requires Windows 2000 or newer */
+#define _WIN32_WINNT 0x0500
+
#include
#include
#include
@@ -32,6 +35,7 @@
static HANDLE (WINAPI *pFindFirstFileExA)(LPCSTR,FINDEX_INFO_LEVELS,LPVOID,FINDEX_SEARCH_OPS,LPVOID,DWORD);
static BOOL (WINAPI *pReplaceFileA)(LPCSTR, LPCSTR, LPCSTR, DWORD, LPVOID, LPVOID);
static BOOL (WINAPI *pReplaceFileW)(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPVOID, LPVOID);
+static UINT (WINAPI *pGetSystemWindowsDirectoryA)(LPSTR, UINT);
/* keep filename and filenameW the same */
static const char filename[] = "testfile.xxx";
@@ -55,6 +59,7 @@ static void InitFunctionPointers(void)
pFindFirstFileExA=(void*)GetProcAddress(hkernel32, "FindFirstFileExA");
pReplaceFileA=(void*)GetProcAddress(hkernel32, "ReplaceFileA");
pReplaceFileW=(void*)GetProcAddress(hkernel32, "ReplaceFileW");
+ pGetSystemWindowsDirectoryA=(void*)GetProcAddress(hkernel32, "GetSystemWindowsDirectoryA");
}
static void test__hread( void )
@@ -351,20 +356,20 @@ static void test__llseek( void )
for (i = 0; i < 400; i++)
{
- ok( HFILE_ERROR != _hwrite( filehandle, sillytext, strlen( sillytext ) ), "_hwrite complains\n" );
+ ok( _hwrite( filehandle, sillytext, strlen( sillytext ) ) != -1, "_hwrite complains\n" );
}
- ok( HFILE_ERROR != _llseek( filehandle, 400 * strlen( sillytext ), FILE_CURRENT ), "should be able to seek\n" );
- ok( HFILE_ERROR != _llseek( filehandle, 27 + 35 * strlen( sillytext ), FILE_BEGIN ), "should be able to seek\n" );
+ ok( _llseek( filehandle, 400 * strlen( sillytext ), FILE_CURRENT ) != -1, "should be able to seek\n" );
+ ok( _llseek( filehandle, 27 + 35 * strlen( sillytext ), FILE_BEGIN ) != -1, "should be able to seek\n" );
bytes_read = _hread( filehandle, buffer, 1);
ok( 1 == bytes_read, "file read size error\n" );
ok( buffer[0] == sillytext[27], "_llseek error, it got lost seeking\n" );
- ok( HFILE_ERROR != _llseek( filehandle, -400 * strlen( sillytext ), FILE_END ), "should be able to seek\n" );
+ ok( _llseek( filehandle, -400 * (LONG)strlen( sillytext ), FILE_END ) != -1, "should be able to seek\n" );
bytes_read = _hread( filehandle, buffer, 1);
ok( 1 == bytes_read, "file read size error\n" );
ok( buffer[0] == sillytext[0], "_llseek error, it got lost seeking\n" );
- ok( HFILE_ERROR != _llseek( filehandle, 1000000, FILE_END ), "should be able to seek past file; poor, poor Windows programmers\n" );
+ ok( _llseek( filehandle, 1000000, FILE_END ) != -1, "should be able to seek past file; poor, poor Windows programmers\n" );
ok( HFILE_ERROR != _lclose(filehandle), "_lclose complains\n" );
ret = DeleteFileA( filename );
@@ -559,6 +564,9 @@ static void test_CopyFileA(void)
ret = GetTempFileNameA(temp_path, prefix, 0, source);
ok(ret != 0, "GetTempFileNameA error %d\n", GetLastError());
+ ret = MoveFileA(source, source);
+ todo_wine ok(ret, "MoveFileA: failed, error %d\n", GetLastError());
+
/* make the source have not zero size */
hfile = CreateFileA(source, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0 );
ok(hfile != INVALID_HANDLE_VALUE, "failed to open source file\n");
@@ -1318,6 +1326,7 @@ static void test_FindFirstFileA(void)
int err;
char buffer[5] = "C:\\";
char buffer2[100];
+ char nonexistent[MAX_PATH];
/* try FindFirstFileA on "C:\" */
buffer[0] = get_windows_drive();
@@ -1355,8 +1364,10 @@ static void test_FindFirstFileA(void)
/* try FindFirstFileA on "C:\foo\" */
SetLastError( 0xdeadbeaf );
- strcpy(buffer2, buffer);
- strcat(buffer2, "foo\\");
+ GetTempFileNameA( buffer, "foo", 0, nonexistent );
+ DeleteFileA( nonexistent );
+ strcpy(buffer2, nonexistent);
+ strcat(buffer2, "\\");
handle = FindFirstFileA(buffer2, &data);
err = GetLastError();
ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 );
@@ -1366,8 +1377,8 @@ static void test_FindFirstFileA(void)
/* try FindFirstFileA on "C:\foo\bar.txt" */
SetLastError( 0xdeadbeaf );
- strcpy(buffer2, buffer);
- strcat(buffer2, "foo\\bar.txt");
+ strcpy(buffer2, nonexistent);
+ strcat(buffer2, "\\bar.txt");
handle = FindFirstFileA(buffer2, &data);
err = GetLastError();
ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 );
@@ -1375,8 +1386,8 @@ static void test_FindFirstFileA(void)
/* try FindFirstFileA on "C:\foo\*.*" */
SetLastError( 0xdeadbeaf );
- strcpy(buffer2, buffer);
- strcat(buffer2, "foo\\*.*");
+ strcpy(buffer2, nonexistent);
+ strcat(buffer2, "\\*.*");
handle = FindFirstFileA(buffer2, &data);
err = GetLastError();
ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 );
@@ -1384,7 +1395,8 @@ static void test_FindFirstFileA(void)
/* try FindFirstFileA on "foo\bar.txt" */
SetLastError( 0xdeadbeaf );
- strcpy(buffer2, "foo\\bar.txt");
+ strcpy(buffer2, nonexistent + 3);
+ strcat(buffer2, "\\bar.txt");
handle = FindFirstFileA(buffer2, &data);
err = GetLastError();
ok ( handle == INVALID_HANDLE_VALUE, "FindFirstFile on %s should Fail\n", buffer2 );
@@ -1494,7 +1506,7 @@ static void test_FindFirstFileExA(void)
if (!pFindFirstFileExA)
{
- skip("FindFirstFileExA() is missing\n");
+ win_skip("FindFirstFileExA() is missing\n");
return;
}
@@ -1507,7 +1519,7 @@ static void test_FindFirstFileExA(void)
handle = pFindFirstFileExA("test-dir\\*", FindExInfoStandard, &search_results, FindExSearchLimitToDirectories, NULL, 0);
if (handle == INVALID_HANDLE_VALUE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("FindFirstFileExA is not implemented\n");
+ win_skip("FindFirstFileExA is not implemented\n");
goto cleanup;
}
ok(handle != INVALID_HANDLE_VALUE, "FindFirstFile failed (err=%u)\n", GetLastError());
@@ -1668,10 +1680,11 @@ static void test_async_file_errors(void)
static void test_read_write(void)
{
- DWORD bytes, ret;
+ DWORD bytes, ret, old_prot;
HANDLE hFile;
char temp_path[MAX_PATH];
char filename[MAX_PATH];
+ char *mem;
static const char prefix[] = "pfx";
ret = GetTempPathA(MAX_PATH, temp_path);
@@ -1721,6 +1734,95 @@ static void test_read_write(void)
"ret = %d, error %d\n", ret, GetLastError());
ok(!bytes, "bytes = %d\n", bytes);
+ /* test passing protected memory as buffer */
+
+ mem = VirtualAlloc( NULL, 0x4000, MEM_COMMIT, PAGE_READWRITE );
+ ok( mem != NULL, "failed to allocate virtual mem error %u\n", GetLastError() );
+
+ ret = WriteFile( hFile, mem, 0x4000, &bytes, NULL );
+ ok( ret, "WriteFile failed error %u\n", GetLastError() );
+ ok( bytes == 0x4000, "only wrote %x bytes\n", bytes );
+
+ ret = VirtualProtect( mem + 0x2000, 0x2000, PAGE_NOACCESS, &old_prot );
+ ok( ret, "VirtualProtect failed error %u\n", GetLastError() );
+
+ ret = WriteFile( hFile, mem, 0x4000, &bytes, NULL );
+ ok( !ret, "WriteFile succeeded\n" );
+ ok( GetLastError() == ERROR_INVALID_USER_BUFFER ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
+ "wrong error %u\n", GetLastError() );
+ ok( bytes == 0, "wrote %x bytes\n", bytes );
+
+ ret = WriteFile( (HANDLE)0xdead, mem, 0x4000, &bytes, NULL );
+ ok( !ret, "WriteFile succeeded\n" );
+ ok( GetLastError() == ERROR_INVALID_HANDLE || /* handle is checked before buffer on NT */
+ GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
+ "wrong error %u\n", GetLastError() );
+ ok( bytes == 0, "wrote %x bytes\n", bytes );
+
+ ret = VirtualProtect( mem, 0x2000, PAGE_NOACCESS, &old_prot );
+ ok( ret, "VirtualProtect failed error %u\n", GetLastError() );
+
+ ret = WriteFile( hFile, mem, 0x4000, &bytes, NULL );
+ ok( !ret, "WriteFile succeeded\n" );
+ ok( GetLastError() == ERROR_INVALID_USER_BUFFER ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
+ "wrong error %u\n", GetLastError() );
+ ok( bytes == 0, "wrote %x bytes\n", bytes );
+
+ SetFilePointer( hFile, 0, NULL, FILE_BEGIN );
+
+ ret = ReadFile( hFile, mem, 0x4000, &bytes, NULL );
+ ok( !ret, "ReadFile succeeded\n" );
+ ok( GetLastError() == ERROR_NOACCESS ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
+ "wrong error %u\n", GetLastError() );
+ ok( bytes == 0, "read %x bytes\n", bytes );
+
+ ret = VirtualProtect( mem, 0x2000, PAGE_READONLY, &old_prot );
+ ok( ret, "VirtualProtect failed error %u\n", GetLastError() );
+
+ ret = ReadFile( hFile, mem, 0x4000, &bytes, NULL );
+ ok( !ret, "ReadFile succeeded\n" );
+ ok( GetLastError() == ERROR_NOACCESS ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
+ "wrong error %u\n", GetLastError() );
+ ok( bytes == 0, "read %x bytes\n", bytes );
+
+ ret = VirtualProtect( mem, 0x2000, PAGE_READWRITE, &old_prot );
+ ok( ret, "VirtualProtect failed error %u\n", GetLastError() );
+
+ ret = ReadFile( hFile, mem, 0x4000, &bytes, NULL );
+ ok( !ret, "ReadFile succeeded\n" );
+ ok( GetLastError() == ERROR_NOACCESS ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
+ "wrong error %u\n", GetLastError() );
+ ok( bytes == 0, "read %x bytes\n", bytes );
+
+ SetFilePointer( hFile, 0x1234, NULL, FILE_BEGIN );
+ SetEndOfFile( hFile );
+ SetFilePointer( hFile, 0, NULL, FILE_BEGIN );
+
+ ret = ReadFile( hFile, mem, 0x4000, &bytes, NULL );
+ ok( !ret, "ReadFile succeeded\n" );
+ ok( GetLastError() == ERROR_NOACCESS ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
+ "wrong error %u\n", GetLastError() );
+ ok( bytes == 0, "read %x bytes\n", bytes );
+
+ ret = ReadFile( hFile, mem, 0x2000, &bytes, NULL );
+ ok( ret, "ReadFile failed error %u\n", GetLastError() );
+ ok( bytes == 0x1234, "read %x bytes\n", bytes );
+
+ ret = ReadFile( hFile, NULL, 1, &bytes, NULL );
+ ok( !ret, "ReadFile succeeded\n" );
+ ok( GetLastError() == ERROR_NOACCESS ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
+ "wrong error %u\n", GetLastError() );
+ ok( bytes == 0, "read %x bytes\n", bytes );
+
+ VirtualFree( mem, 0, MEM_FREE );
+
ret = CloseHandle(hFile);
ok( ret, "CloseHandle: error %d\n", GetLastError());
ret = DeleteFileA(filename);
@@ -1749,7 +1851,10 @@ static void test_OpenFile(void)
UINT length;
/* Check for existing file */
- length = GetWindowsDirectoryA(buff, MAX_PATH);
+ if (!pGetSystemWindowsDirectoryA)
+ length = GetWindowsDirectoryA(buff, MAX_PATH);
+ else
+ length = pGetSystemWindowsDirectoryA(buff, MAX_PATH);
if (length + sizeof(file) < MAX_PATH)
{
@@ -1837,8 +1942,8 @@ static void test_OpenFile(void)
ok( ofs.cBytes == sizeof(OFSTRUCT), "OpenFile set ofs.cBytes to %d\n", ofs.cBytes );
ok( ofs.nErrCode == ERROR_SUCCESS || broken(ofs.nErrCode != ERROR_SUCCESS) /* win9x */,
"OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode );
- ret = CloseHandle((HANDLE)hFile);
- ok( ret == TRUE, "CloseHandle() returns %d\n", ret );
+ ret = _lclose(hFile);
+ ok( !ret, "_lclose() returns %d\n", ret );
retval = GetFileAttributesA(filename);
ok( retval != INVALID_FILE_ATTRIBUTES, "GetFileAttributesA: error %d\n", GetLastError() );
@@ -1855,8 +1960,8 @@ static void test_OpenFile(void)
"OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode );
ok( lstrcmpiA(ofs.szPathName, buff) == 0,
"OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff );
- ret = CloseHandle((HANDLE)hFile);
- ok( ret == TRUE, "CloseHandle() returns %d\n", ret );
+ ret = _lclose(hFile);
+ ok( !ret, "_lclose() returns %d\n", ret );
memset(&ofs, 0xA5, sizeof(ofs));
SetLastError(0xfaceabee);
@@ -1870,8 +1975,8 @@ static void test_OpenFile(void)
"OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode );
ok( lstrcmpiA(ofs.szPathName, buff) == 0,
"OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff );
- ret = CloseHandle((HANDLE)hFile);
- ok( ret == TRUE, "CloseHandle() returns %d\n", ret );
+ ret = _lclose(hFile);
+ ok( !ret, "_lclose() returns %d\n", ret );
memset(&ofs, 0xA5, sizeof(ofs));
SetLastError(0xfaceabee);
@@ -1885,8 +1990,8 @@ static void test_OpenFile(void)
"OpenFile set ofs.nErrCode to %d\n", ofs.nErrCode );
ok( lstrcmpiA(ofs.szPathName, buff) == 0,
"OpenFile returned '%s', but was expected to return '%s'\n", ofs.szPathName, buff );
- ret = CloseHandle((HANDLE)hFile);
- ok( ret == TRUE, "CloseHandle() returns %d\n", ret );
+ ret = _lclose(hFile);
+ ok( !ret, "_lclose() returns %d\n", ret );
memset(&ofs, 0xA5, sizeof(ofs));
SetLastError(0xfaceabee);
@@ -1924,6 +2029,12 @@ static void test_overlapped(void)
DWORD r, result;
/* GetOverlappedResult crashes if the 2nd or 3rd param are NULL */
+ if (0) /* tested: WinXP */
+ {
+ GetOverlappedResult(0, NULL, &result, FALSE);
+ GetOverlappedResult(0, &ov, NULL, FALSE);
+ GetOverlappedResult(0, NULL, NULL, FALSE);
+ }
memset( &ov, 0, sizeof ov );
result = 1;
@@ -2024,11 +2135,11 @@ static void test_ReplaceFileA(void)
static const char prefix[] = "pfx";
char temp_path[MAX_PATH];
DWORD ret;
- BOOL retok;
+ BOOL retok, removeBackup = FALSE;
if (!pReplaceFileA)
{
- skip("ReplaceFileA() is missing\n");
+ win_skip("ReplaceFileA() is missing\n");
return;
}
@@ -2109,27 +2220,32 @@ static void test_ReplaceFileA(void)
/* make sure that the "replaced" file has the size of the replacement file */
hReplacedFile = CreateFileA(replaced, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
ok(hReplacedFile != INVALID_HANDLE_VALUE,
- "failed to open replaced file\n");
- ret = GetFileSize(hReplacedFile, NULL);
- ok(ret == sizeof(replacementData),
- "replaced file has wrong size %d\n", ret);
- /* make sure that the replacement file no-longer exists */
- hReplacementFile = CreateFileA(replacement, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
- ok(hReplacementFile == INVALID_HANDLE_VALUE,
- "unexpected error, replacement file should not exist %d\n", GetLastError());
- /* make sure that the backup has the old "replaced" filetime */
- ret = GetFileTime(hBackupFile, NULL, NULL, &ftBackup);
- ok( ret, "GetFileTime error (backup %d\n", GetLastError());
- ok(check_file_time(&ftBackup, &ftReplaced, 20000000), "backup file has wrong filetime\n");
- CloseHandle(hBackupFile);
- /* make sure that the "replaced" has the old replacement filetime */
- ret = GetFileTime(hReplacedFile, NULL, NULL, &ftReplaced);
- ok( ret, "GetFileTime error (backup %d\n", GetLastError());
- ok(check_file_time(&ftReplaced, &ftReplacement, 20000000),
- "replaced file has wrong filetime %x%08x / %x%08x\n",
- ftReplaced.dwHighDateTime, ftReplaced.dwLowDateTime,
- ftReplacement.dwHighDateTime, ftReplacement.dwLowDateTime );
- CloseHandle(hReplacedFile);
+ "failed to open replaced file: %d\n", GetLastError());
+ if (hReplacedFile != INVALID_HANDLE_VALUE)
+ {
+ ret = GetFileSize(hReplacedFile, NULL);
+ ok(ret == sizeof(replacementData),
+ "replaced file has wrong size %d\n", ret);
+ /* make sure that the replacement file no-longer exists */
+ hReplacementFile = CreateFileA(replacement, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
+ ok(hReplacementFile == INVALID_HANDLE_VALUE,
+ "unexpected error, replacement file should not exist %d\n", GetLastError());
+ /* make sure that the backup has the old "replaced" filetime */
+ ret = GetFileTime(hBackupFile, NULL, NULL, &ftBackup);
+ ok( ret, "GetFileTime error (backup %d\n", GetLastError());
+ ok(check_file_time(&ftBackup, &ftReplaced, 20000000), "backup file has wrong filetime\n");
+ CloseHandle(hBackupFile);
+ /* make sure that the "replaced" has the old replacement filetime */
+ ret = GetFileTime(hReplacedFile, NULL, NULL, &ftReplaced);
+ ok( ret, "GetFileTime error (backup %d\n", GetLastError());
+ ok(check_file_time(&ftReplaced, &ftReplacement, 20000000),
+ "replaced file has wrong filetime %x%08x / %x%08x\n",
+ ftReplaced.dwHighDateTime, ftReplaced.dwLowDateTime,
+ ftReplacement.dwHighDateTime, ftReplacement.dwLowDateTime );
+ CloseHandle(hReplacedFile);
+ }
+ else
+ skip("couldn't open replacement file, skipping tests\n");
/* re-create replacement file for pass w/o backup (blank) */
ret = GetTempFileNameA(temp_path, prefix, 0, replacement);
@@ -2139,7 +2255,8 @@ static void test_ReplaceFileA(void)
*/
SetLastError(0xdeadbeef);
ret = pReplaceFileA(replaced, replacement, NULL, 0, 0, 0);
- ok(ret, "ReplaceFileA: unexpected error %d\n", GetLastError());
+ ok(ret || GetLastError() == ERROR_ACCESS_DENIED,
+ "ReplaceFileA: unexpected error %d\n", GetLastError());
/* re-create replacement file for pass w/ backup (backup-file not existing) */
ret = GetTempFileNameA(temp_path, prefix, 0, replacement);
@@ -2151,13 +2268,17 @@ static void test_ReplaceFileA(void)
*/
SetLastError(0xdeadbeef);
ret = pReplaceFileA(replaced, replacement, backup, 0, 0, 0);
- ok(ret, "ReplaceFileA: unexpected error %d\n", GetLastError());
+ ok(ret || GetLastError() == ERROR_ACCESS_DENIED,
+ "ReplaceFileA: unexpected error %d\n", GetLastError());
+ if (ret)
+ removeBackup = TRUE;
/* re-create replacement file for pass w/ no permissions to "replaced" */
ret = GetTempFileNameA(temp_path, prefix, 0, replacement);
ok(ret != 0, "GetTempFileNameA error (replacement) %d\n", GetLastError());
ret = SetFileAttributesA(replaced, FILE_ATTRIBUTE_READONLY);
- ok(ret, "SetFileAttributesA: error setting to read only %d\n", GetLastError());
+ ok(ret || GetLastError() == ERROR_ACCESS_DENIED,
+ "SetFileAttributesA: error setting to read only %d\n", GetLastError());
/* perform replacement w/ backup (no permission to "replaced")
* TODO: flags are not implemented
*/
@@ -2171,25 +2292,29 @@ static void test_ReplaceFileA(void)
"unexpected error, replacement file should still exist %d\n", GetLastError());
CloseHandle(hReplacementFile);
ret = SetFileAttributesA(replaced, FILE_ATTRIBUTE_NORMAL);
- ok(ret, "SetFileAttributesA: error setting to normal %d\n", GetLastError());
+ ok(ret || GetLastError() == ERROR_ACCESS_DENIED,
+ "SetFileAttributesA: error setting to normal %d\n", GetLastError());
/* replacement file still exists, make pass w/o "replaced" */
ret = DeleteFileA(replaced);
- ok(ret, "DeleteFileA: error (replaced) %d\n", GetLastError());
+ ok(ret || GetLastError() == ERROR_ACCESS_DENIED,
+ "DeleteFileA: error (replaced) %d\n", GetLastError());
/* perform replacement w/ backup (no pre-existing backup or "replaced")
* TODO: flags are not implemented
*/
SetLastError(0xdeadbeef);
ret = pReplaceFileA(replaced, replacement, backup, 0, 0, 0);
- ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
- "ReplaceFileA: unexpected error %d\n", GetLastError());
+ ok(!ret && (GetLastError() == ERROR_FILE_NOT_FOUND ||
+ GetLastError() == ERROR_ACCESS_DENIED),
+ "ReplaceFileA: unexpected error %d\n", GetLastError());
/* perform replacement w/o existing "replacement" file
* TODO: flags are not implemented
*/
SetLastError(0xdeadbeef);
ret = pReplaceFileA(replaced, replacement, NULL, 0, 0, 0);
- ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
+ ok(!ret && (GetLastError() == ERROR_FILE_NOT_FOUND ||
+ GetLastError() == ERROR_ACCESS_DENIED),
"ReplaceFileA: unexpected error %d\n", GetLastError());
/*
@@ -2199,10 +2324,13 @@ static void test_ReplaceFileA(void)
*/
/* delete temporary files, replacement and replaced are already deleted */
- ret = DeleteFileA(backup);
- ok(ret ||
- broken(GetLastError() == ERROR_ACCESS_DENIED), /* win2k */
- "DeleteFileA: error (backup) %d\n", GetLastError());
+ if (removeBackup)
+ {
+ ret = DeleteFileA(backup);
+ ok(ret ||
+ broken(GetLastError() == ERROR_ACCESS_DENIED), /* win2k */
+ "DeleteFileA: error (backup) %d\n", GetLastError());
+ }
}
/*
@@ -2215,10 +2343,11 @@ static void test_ReplaceFileW(void)
static const WCHAR prefix[] = {'p','f','x',0};
WCHAR temp_path[MAX_PATH];
DWORD ret;
+ BOOL removeBackup = FALSE;
if (!pReplaceFileW)
{
- skip("ReplaceFileW() is missing\n");
+ win_skip("ReplaceFileW() is missing\n");
return;
}
@@ -2243,25 +2372,31 @@ static void test_ReplaceFileW(void)
ret = GetTempFileNameW(temp_path, prefix, 0, replacement);
ok(ret != 0, "GetTempFileNameW error (replacement) %d\n", GetLastError());
ret = pReplaceFileW(replaced, replacement, NULL, 0, 0, 0);
- ok(ret, "ReplaceFileW: error %d\n", GetLastError());
+ ok(ret || GetLastError() == ERROR_ACCESS_DENIED,
+ "ReplaceFileW: error %d\n", GetLastError());
ret = GetTempFileNameW(temp_path, prefix, 0, replacement);
ok(ret != 0, "GetTempFileNameW error (replacement) %d\n", GetLastError());
ret = DeleteFileW(backup);
ok(ret, "DeleteFileW: error (backup) %d\n", GetLastError());
ret = pReplaceFileW(replaced, replacement, backup, 0, 0, 0);
- ok(ret, "ReplaceFileW: error %d\n", GetLastError());
+ ok(ret || GetLastError() == ERROR_ACCESS_DENIED,
+ "ReplaceFileW: error %d\n", GetLastError());
ret = GetTempFileNameW(temp_path, prefix, 0, replacement);
ok(ret != 0, "GetTempFileNameW error (replacement) %d\n", GetLastError());
ret = SetFileAttributesW(replaced, FILE_ATTRIBUTE_READONLY);
- ok(ret, "SetFileAttributesW: error setting to read only %d\n", GetLastError());
+ ok(ret || GetLastError() == ERROR_ACCESS_DENIED,
+ "SetFileAttributesW: error setting to read only %d\n", GetLastError());
ret = pReplaceFileW(replaced, replacement, backup, 0, 0, 0);
ok(ret != ERROR_UNABLE_TO_REMOVE_REPLACED,
"ReplaceFileW: unexpected error %d\n", GetLastError());
ret = SetFileAttributesW(replaced, FILE_ATTRIBUTE_NORMAL);
- ok(ret, "SetFileAttributesW: error setting to normal %d\n", GetLastError());
+ ok(ret || GetLastError() == ERROR_ACCESS_DENIED,
+ "SetFileAttributesW: error setting to normal %d\n", GetLastError());
+ if (ret)
+ removeBackup = TRUE;
ret = DeleteFileW(replaced);
ok(ret, "DeleteFileW: error (replaced) %d\n", GetLastError());
@@ -2269,13 +2404,17 @@ static void test_ReplaceFileW(void)
ok(!ret, "ReplaceFileW: error %d\n", GetLastError());
ret = pReplaceFileW(replaced, replacement, NULL, 0, 0, 0);
- ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
+ ok(!ret && (GetLastError() == ERROR_FILE_NOT_FOUND ||
+ GetLastError() == ERROR_ACCESS_DENIED),
"ReplaceFileW: unexpected error %d\n", GetLastError());
- ret = DeleteFileW(backup);
- ok(ret ||
- broken(GetLastError() == ERROR_ACCESS_DENIED), /* win2k */
- "DeleteFileW: error (backup) %d\n", GetLastError());
+ if (removeBackup)
+ {
+ ret = DeleteFileW(backup);
+ ok(ret ||
+ broken(GetLastError() == ERROR_ACCESS_DENIED), /* win2k */
+ "DeleteFileW: error (backup) %d\n", GetLastError());
+ }
}
START_TEST(file)
diff --git a/rostests/winetests/kernel32/format_msg.c b/rostests/winetests/kernel32/format_msg.c
index 74d51090074..cbb8b5aec38 100755
--- a/rostests/winetests/kernel32/format_msg.c
+++ b/rostests/winetests/kernel32/format_msg.c
@@ -237,7 +237,7 @@ static void test_message_null_buffer(void)
error = GetLastError();
if (!ret && error == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("FormatMessageW is not implemented\n");
+ win_skip("FormatMessageW is not implemented\n");
return;
}
diff --git a/rostests/winetests/kernel32/heap.c b/rostests/winetests/kernel32/heap.c
index c196c23e3cd..39517ccb0ec 100755
--- a/rostests/winetests/kernel32/heap.c
+++ b/rostests/winetests/kernel32/heap.c
@@ -34,7 +34,30 @@ static SIZE_T resize_9x(SIZE_T size)
return max(dwSizeAligned, 12); /* at least 12 bytes */
}
-START_TEST(heap)
+static void test_sized_HeapAlloc(int nbytes)
+{
+ int success;
+ char *buf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, nbytes);
+ ok(buf != NULL, "allocate failed\n");
+ ok(buf[0] == 0, "buffer not zeroed\n");
+ success = HeapFree(GetProcessHeap(), 0, buf);
+ ok(success, "free failed\n");
+}
+
+static void test_sized_HeapReAlloc(int nbytes1, int nbytes2)
+{
+ int success;
+ char *buf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, nbytes1);
+ ok(buf != NULL, "allocate failed\n");
+ ok(buf[0] == 0, "buffer not zeroed\n");
+ buf = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, buf, nbytes2);
+ ok(buf != NULL, "reallocate failed\n");
+ ok(buf[nbytes2-1] == 0, "buffer not zeroed\n");
+ success = HeapFree(GetProcessHeap(), 0, buf);
+ ok(success, "free failed\n");
+}
+
+static void test_heap(void)
{
LPVOID mem;
LPVOID msecond;
@@ -64,13 +87,13 @@ START_TEST(heap)
/* test some border cases of HeapAlloc and HeapReAlloc */
mem = HeapAlloc(GetProcessHeap(), 0, 0);
ok(mem != NULL, "memory not allocated for size 0\n");
- msecond = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, mem, ~0UL - 7);
- ok(msecond == NULL, "HeapReAlloc(0xfffffff8) should have failed\n");
- msecond = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, mem, ~0UL);
- ok(msecond == NULL, "HeapReAlloc(0xffffffff) should have failed\n");
+ msecond = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, mem, ~(SIZE_T)0 - 7);
+ ok(msecond == NULL, "HeapReAlloc(~0 - 7) should have failed\n");
+ msecond = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, mem, ~(SIZE_T)0);
+ ok(msecond == NULL, "HeapReAlloc(~0) should have failed\n");
HeapFree(GetProcessHeap(), 0, mem);
- mem = HeapAlloc(GetProcessHeap(), 0, ~0UL);
- ok(mem == NULL, "memory allocated for size ~0UL\n");
+ mem = HeapAlloc(GetProcessHeap(), 0, ~(SIZE_T)0);
+ ok(mem == NULL, "memory allocated for size ~0\n");
/* large blocks must be 16-byte aligned */
mem = HeapAlloc(GetProcessHeap(), 0, 512 * 1024);
@@ -190,13 +213,16 @@ START_TEST(heap)
ok(mem == NULL, "Expected NULL, got %p\n", mem);
/* invalid free */
- SetLastError(MAGIC_DEAD);
- mem = GlobalFree(gbl);
- ok(mem == gbl || broken(mem == NULL) /* nt4 */, "Expected gbl, got %p\n", mem);
- if (mem == gbl)
- ok(GetLastError() == ERROR_INVALID_HANDLE ||
- GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
- "Expected ERROR_INVALID_HANDLE or ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+ if (sizeof(void *) != 8) /* crashes on 64-bit Vista */
+ {
+ SetLastError(MAGIC_DEAD);
+ mem = GlobalFree(gbl);
+ ok(mem == gbl || broken(mem == NULL) /* nt4 */, "Expected gbl, got %p\n", mem);
+ if (mem == gbl)
+ ok(GetLastError() == ERROR_INVALID_HANDLE ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
+ "Expected ERROR_INVALID_HANDLE or ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+ }
gbl = GlobalAlloc(GMEM_DDESHARE, 100);
@@ -211,12 +237,15 @@ START_TEST(heap)
"Expected 1 or 0, got %d\n", res);
/* GlobalSize on an invalid handle */
- SetLastError(MAGIC_DEAD);
- size = GlobalSize((HGLOBAL)0xc042);
- ok(size == 0, "Expected 0, got %ld\n", size);
- ok(GetLastError() == ERROR_INVALID_HANDLE ||
- GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
- "Expected ERROR_INVALID_HANDLE or ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+ if (sizeof(void *) != 8) /* crashes on 64-bit Vista */
+ {
+ SetLastError(MAGIC_DEAD);
+ size = GlobalSize((HGLOBAL)0xc042);
+ ok(size == 0, "Expected 0, got %ld\n", size);
+ ok(GetLastError() == ERROR_INVALID_HANDLE ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* win9x */
+ "Expected ERROR_INVALID_HANDLE or ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+ }
/* ####################################### */
/* Local*() functions */
@@ -332,3 +361,16 @@ START_TEST(heap)
GlobalFree(gbl);
}
+
+START_TEST(heap)
+{
+ test_heap();
+
+ /* Test both short and very long blocks */
+ test_sized_HeapAlloc(1);
+ test_sized_HeapAlloc(1 << 20);
+ test_sized_HeapReAlloc(1, 100);
+ test_sized_HeapReAlloc(1, (1 << 20));
+ test_sized_HeapReAlloc((1 << 20), (2 << 20));
+ test_sized_HeapReAlloc((1 << 20), 1);
+}
diff --git a/rostests/winetests/kernel32/loader.c b/rostests/winetests/kernel32/loader.c
index 5187d882a45..9361ed58c12 100644
--- a/rostests/winetests/kernel32/loader.c
+++ b/rostests/winetests/kernel32/loader.c
@@ -52,6 +52,8 @@ static IMAGE_NT_HEADERS nt_header =
IMAGE_FILE_MACHINE_I386, /* Machine */
#elif defined __x86_64__
IMAGE_FILE_MACHINE_AMD64, /* Machine */
+#elif defined __powerpc__
+ IMAGE_FILE_MACHINE_POWERPC, /* Machine */
#else
# error You must specify the machine type
#endif
@@ -70,7 +72,9 @@ static IMAGE_NT_HEADERS nt_header =
0, /* SizeOfUninitializedData */
0, /* AddressOfEntryPoint */
0x10, /* BaseOfCode, also serves as e_lfanew in the truncated MZ header */
+#ifndef _WIN64
0, /* BaseOfData */
+#endif
0x10000000, /* ImageBase */
0, /* SectionAlignment */
0, /* FileAlignment */
@@ -398,7 +402,7 @@ static void test_Loader(void)
"%d: VirtualQuery error %d\n", i, GetLastError());
if (nt_header.OptionalHeader.SectionAlignment < si.dwPageSize)
{
- ok(info.BaseAddress == (char *)hlib, "%d: got %p != expected %p\n", i, info.BaseAddress, (char *)hlib);
+ ok(info.BaseAddress == hlib, "%d: got %p != expected %p\n", i, info.BaseAddress, hlib);
ok(info.RegionSize == ALIGN_SIZE(nt_header.OptionalHeader.SizeOfImage, si.dwPageSize), "%d: got %lx != expected %x\n",
i, info.RegionSize, ALIGN_SIZE(nt_header.OptionalHeader.SizeOfImage, si.dwPageSize));
ok(info.Protect == PAGE_EXECUTE_WRITECOPY, "%d: %x != PAGE_EXECUTE_WRITECOPY\n", i, info.Protect);
diff --git a/rostests/winetests/kernel32/locale.c b/rostests/winetests/kernel32/locale.c
index 4dce7335e0b..e88e182a37c 100755
--- a/rostests/winetests/kernel32/locale.c
+++ b/rostests/winetests/kernel32/locale.c
@@ -1110,6 +1110,12 @@ static void test_CompareStringA(void)
ret = CompareStringA(lcid, 0, "\2", 2, "\1", 2);
todo_wine ok(ret != 2, "\\2 vs \\1 expected unequal\n");
+
+ ret = CompareStringA(lcid, NORM_IGNORECASE | LOCALE_USE_CP_ACP, "#", -1, ".", -1);
+ todo_wine ok(ret == CSTR_LESS_THAN, "\"#\" vs \".\" expected CSTR_LESS_THAN, got %d\n", ret);
+
+ ret = lstrcmpi("#", ".");
+ todo_wine ok(ret == -1, "\"#\" vs \".\" expected -1, got %d\n", ret);
}
static void test_LCMapStringA(void)
@@ -1221,9 +1227,11 @@ static void test_LCMapStringA(void)
ret = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_SORTKEY,
upper_case, -1, buf, sizeof(buf));
ok(ret, "LCMapStringA must succeed\n");
+ ok(buf[ret-1] == 0, "LCMapStringA not null-terminated\n");
ret2 = LCMapStringA(LOCALE_USER_DEFAULT, LCMAP_SORTKEY,
upper_case, lstrlenA(upper_case), buf2, sizeof(buf2));
- ok(ret, "LCMapStringA must succeed\n");
+ ok(ret2, "LCMapStringA must succeed\n");
+ ok(buf2[ret2-1] == 0, "LCMapStringA not null-terminated\n" );
ok(ret == ret2, "lengths of sort keys must be equal\n");
ok(!lstrcmpA(buf, buf2), "sort keys must be equal\n");
@@ -1901,7 +1909,7 @@ static void test_FoldStringW(void)
if (!pFoldStringW)
{
- skip("FoldStringW is not available\n");
+ win_skip("FoldStringW is not available\n");
return; /* FoldString is present in NT v3.1+, but not 95/98/Me */
}
@@ -1913,7 +1921,7 @@ static void test_FoldStringW(void)
ret = pFoldStringW(badFlags[i], src, 256, dst, 256);
if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("FoldStringW is not implemented\n");
+ win_skip("FoldStringW is not implemented\n");
return;
}
ok(!ret && GetLastError() == ERROR_INVALID_FLAGS,
@@ -2291,7 +2299,7 @@ static void test_EnumUILanguageA(void)
{
BOOL ret;
if (!pEnumUILanguagesA) {
- skip("EnumUILanguagesA is not available on Win9x or NT4\n");
+ win_skip("EnumUILanguagesA is not available on Win9x or NT4\n");
return;
}
diff --git a/rostests/winetests/kernel32/path.c b/rostests/winetests/kernel32/path.c
index e8e6c1e1ce1..20ee4535b85 100755
--- a/rostests/winetests/kernel32/path.c
+++ b/rostests/winetests/kernel32/path.c
@@ -328,7 +328,7 @@ static void test_InitPathA(CHAR *newdir, CHAR *curDrive, CHAR *otherDrive)
"GetTempPathA returned a path that did not end in '\\'\n");
lstrcpyA(tmpstr,"aaaaaaaa");
len1=GetTempPathA(len,tmpstr);
- ok(len1==len+1,
+ ok(len1==len+1 || broken(len1 == len), /* WinME */
"GetTempPathA should return string length %d instead of %d\n",len+1,len1);
/* Test GetTmpFileNameA
@@ -384,14 +384,16 @@ static void test_InitPathA(CHAR *newdir, CHAR *curDrive, CHAR *otherDrive)
ok(CreateDirectoryA(tmpstr,NULL),"CreateDirectoryA failed\n");
sprintf(tmpstr,"%s\\%s",newdir,LONGDIR);
ok(CreateDirectoryA(tmpstr,NULL),"CreateDirectoryA failed\n");
- bRes = CreateDirectoryA("c:",NULL);
- ok(!bRes && (GetLastError() == ERROR_ACCESS_DENIED ||
- GetLastError() == ERROR_ALREADY_EXISTS),
- "CreateDirectoryA(\"c:\" should have failed (%d)\n", GetLastError());
- bRes = CreateDirectoryA("c:\\",NULL);
+ sprintf(tmpstr,"%c:", *curDrive);
+ bRes = CreateDirectoryA(tmpstr,NULL);
ok(!bRes && (GetLastError() == ERROR_ACCESS_DENIED ||
GetLastError() == ERROR_ALREADY_EXISTS),
- "CreateDirectoryA(\"c:\\\" should have failed (%d)\n", GetLastError());
+ "CreateDirectoryA(\"%s\" should have failed (%d)\n", tmpstr, GetLastError());
+ sprintf(tmpstr,"%c:\\", *curDrive);
+ bRes = CreateDirectoryA(tmpstr,NULL);
+ ok(!bRes && (GetLastError() == ERROR_ACCESS_DENIED ||
+ GetLastError() == ERROR_ALREADY_EXISTS),
+ "CreateDirectoryA(\"%s\" should have failed (%d)\n", tmpstr, GetLastError());
sprintf(tmpstr,"%s\\%s\\%s",newdir,SHORTDIR,SHORTFILE);
hndl=CreateFileA(tmpstr,GENERIC_WRITE,0,NULL,
CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
@@ -468,10 +470,10 @@ static void test_CurrentDirectoryA(CHAR *origdir, CHAR *newdir)
/* change to root without a trailing backslash. The function call succeeds
but the directory is not changed.
*/
- strcpy(tmpstr,"C:");
+ sprintf(tmpstr, "%c:", newdir[0]);
test_setdir(newdir,tmpstr,newdir,1,"check 10");
/* works however with a trailing backslash */
- strcpy(tmpstr,"C:\\");
+ sprintf(tmpstr, "%c:\\", newdir[0]);
test_setdir(newdir,tmpstr,NULL,1,"check 11");
}
@@ -901,15 +903,18 @@ static void test_GetTempPath(void)
char windir[MAX_PATH];
char buf[MAX_PATH];
- GetEnvironmentVariableA("TMP", save_TMP, sizeof(save_TMP));
+ if (!GetEnvironmentVariableA("TMP", save_TMP, sizeof(save_TMP))) save_TMP[0] = 0;
/* test default configuration */
trace("TMP=%s\n", save_TMP);
- strcpy(buf,save_TMP);
- if (buf[strlen(buf)-1]!='\\')
- strcat(buf,"\\");
- test_GetTempPathA(buf);
- test_GetTempPathW(buf);
+ if (save_TMP[0])
+ {
+ strcpy(buf,save_TMP);
+ if (buf[strlen(buf)-1]!='\\')
+ strcat(buf,"\\");
+ test_GetTempPathA(buf);
+ test_GetTempPathW(buf);
+ }
/* TMP=C:\WINDOWS */
GetWindowsDirectoryA(windir, sizeof(windir));
@@ -956,7 +961,7 @@ static void test_GetLongPathNameW(void)
length = pGetLongPathNameW(NULL,NULL,0);
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("GetLongPathNameW is not implemented\n");
+ win_skip("GetLongPathNameW is not implemented\n");
return;
}
ok(0==length,"GetLongPathNameW returned %d but expected 0\n",length);
@@ -985,7 +990,7 @@ static void test_GetShortPathNameW(void)
GetTempPathW( MAX_PATH, path );
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("GetTempPathW is not implemented\n");
+ win_skip("GetTempPathW is not implemented\n");
return;
}
@@ -1216,8 +1221,11 @@ static void test_drive_letter_case(void)
ret = GetTempPath(sizeof(buf), buf);
ok(ret, "GetTempPath error %u\n", GetLastError());
ok(ret < sizeof(buf), "buffer should be %u bytes\n", ret);
- ok(buf[1] == ':', "expected buf[1] == ':' got %c\n", buf[1]);
- ok(buf[strlen(buf)-1] == '\\', "Temporary path (%s) doesn't end in a slash\n", buf);
+ if (buf[0])
+ {
+ ok(buf[1] == ':', "expected buf[1] == ':' got %c\n", buf[1]);
+ ok(buf[strlen(buf)-1] == '\\', "Temporary path (%s) doesn't end in a slash\n", buf);
+ }
memset(buf, 0, sizeof(buf));
SetLastError(0xdeadbeef);
diff --git a/rostests/winetests/kernel32/pipe.c b/rostests/winetests/kernel32/pipe.c
index a4b6853317a..a1080faad3d 100755
--- a/rostests/winetests/kernel32/pipe.c
+++ b/rostests/winetests/kernel32/pipe.c
@@ -62,13 +62,6 @@ static void test_CreateNamedPipe(int pipemode)
/* nInBufSize */ 1024,
/* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT,
/* lpSecurityAttrib */ NULL);
-
- if (hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) {
- /* Is this the right way to notify user of skipped tests? */
- ok(hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
- "CreateNamedPipe not supported on this platform, skipping tests.\n");
- return;
- }
ok(hnp == INVALID_HANDLE_VALUE && GetLastError() == ERROR_INVALID_NAME,
"CreateNamedPipe should fail if name doesn't start with \\\\.\\pipe\n");
@@ -389,7 +382,7 @@ static void test_CreateNamedPipe_instances_must_match(void)
/** implementation of alarm() */
static DWORD CALLBACK alarmThreadMain(LPVOID arg)
{
- DWORD timeout = (DWORD) arg;
+ DWORD_PTR timeout = (DWORD_PTR) arg;
trace("alarmThreadMain\n");
if (WaitForSingleObject( alarm_event, timeout ) == WAIT_TIMEOUT)
{
@@ -548,7 +541,7 @@ static DWORD CALLBACK serverThreadMain3(LPVOID arg)
OVERLAPPED oOverlap;
int letWFSOEwait = (i & 2);
int letGORwait = (i & 1);
- DWORD err;
+ DWORD err;
memset(&oOverlap, 0, sizeof(oOverlap));
oOverlap.hEvent = hEvent;
@@ -557,51 +550,74 @@ static DWORD CALLBACK serverThreadMain3(LPVOID arg)
trace("Server calling overlapped ConnectNamedPipe...\n");
success = ConnectNamedPipe(hnp, &oOverlap);
err = GetLastError();
- ok(success || err == ERROR_IO_PENDING
- || err == ERROR_PIPE_CONNECTED, "overlapped ConnectNamedPipe\n");
+ ok(!success && (err == ERROR_IO_PENDING || err == ERROR_PIPE_CONNECTED), "overlapped ConnectNamedPipe\n");
trace("overlapped ConnectNamedPipe returned.\n");
- if (!success && (err == ERROR_IO_PENDING) && letWFSOEwait)
- ok(WaitForSingleObjectEx(hEvent, INFINITE, TRUE) == 0, "wait ConnectNamedPipe\n");
- success = GetOverlappedResult(hnp, &oOverlap, &dummy, letGORwait);
- if (!letGORwait && !letWFSOEwait && !success) {
- ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult\n");
- success = GetOverlappedResult(hnp, &oOverlap, &dummy, TRUE);
- }
- ok(success, "GetOverlappedResult ConnectNamedPipe\n");
+ if (!success && (err == ERROR_IO_PENDING)) {
+ if (letWFSOEwait)
+ {
+ DWORD ret;
+ do {
+ ret = WaitForSingleObjectEx(hEvent, INFINITE, TRUE);
+ } while (ret == WAIT_IO_COMPLETION);
+ ok(ret == 0, "wait ConnectNamedPipe returned %x\n", ret);
+ }
+ success = GetOverlappedResult(hnp, &oOverlap, &dummy, letGORwait);
+ if (!letGORwait && !letWFSOEwait && !success) {
+ ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult\n");
+ success = GetOverlappedResult(hnp, &oOverlap, &dummy, TRUE);
+ }
+ }
+ ok(success || (err == ERROR_PIPE_CONNECTED), "GetOverlappedResult ConnectNamedPipe\n");
trace("overlapped ConnectNamedPipe operation complete.\n");
/* Echo bytes once */
memset(buf, 0, sizeof(buf));
trace("Server reading...\n");
- success = ReadFile(hnp, buf, sizeof(buf), NULL, &oOverlap);
+ success = ReadFile(hnp, buf, sizeof(buf), &readden, &oOverlap);
trace("Server ReadFile returned...\n");
err = GetLastError();
ok(success || err == ERROR_IO_PENDING, "overlapped ReadFile\n");
trace("overlapped ReadFile returned.\n");
- if (!success && (err == ERROR_IO_PENDING) && letWFSOEwait)
- ok(WaitForSingleObjectEx(hEvent, INFINITE, TRUE) == 0, "wait ReadFile\n");
- success = GetOverlappedResult(hnp, &oOverlap, &readden, letGORwait);
- if (!letGORwait && !letWFSOEwait && !success) {
- ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult\n");
- success = GetOverlappedResult(hnp, &oOverlap, &readden, TRUE);
- }
+ if (!success && (err == ERROR_IO_PENDING)) {
+ if (letWFSOEwait)
+ {
+ DWORD ret;
+ do {
+ ret = WaitForSingleObjectEx(hEvent, INFINITE, TRUE);
+ } while (ret == WAIT_IO_COMPLETION);
+ ok(ret == 0, "wait ReadFile returned %x\n", ret);
+ }
+ success = GetOverlappedResult(hnp, &oOverlap, &readden, letGORwait);
+ if (!letGORwait && !letWFSOEwait && !success) {
+ ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult\n");
+ success = GetOverlappedResult(hnp, &oOverlap, &readden, TRUE);
+ }
+ }
trace("Server done reading.\n");
ok(success, "overlapped ReadFile\n");
trace("Server writing...\n");
- success = WriteFile(hnp, buf, readden, NULL, &oOverlap);
+ success = WriteFile(hnp, buf, readden, &written, &oOverlap);
trace("Server WriteFile returned...\n");
err = GetLastError();
ok(success || err == ERROR_IO_PENDING, "overlapped WriteFile\n");
trace("overlapped WriteFile returned.\n");
- if (!success && (err == ERROR_IO_PENDING) && letWFSOEwait)
- ok(WaitForSingleObjectEx(hEvent, INFINITE, TRUE) == 0, "wait WriteFile\n");
- success = GetOverlappedResult(hnp, &oOverlap, &written, letGORwait);
- if (!letGORwait && !letWFSOEwait && !success) {
- ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult\n");
- success = GetOverlappedResult(hnp, &oOverlap, &written, TRUE);
- }
+ if (!success && (err == ERROR_IO_PENDING)) {
+ if (letWFSOEwait)
+ {
+ DWORD ret;
+ do {
+ ret = WaitForSingleObjectEx(hEvent, INFINITE, TRUE);
+ } while (ret == WAIT_IO_COMPLETION);
+ ok(ret == 0, "wait WriteFile returned %x\n", ret);
+ }
+ success = GetOverlappedResult(hnp, &oOverlap, &written, letGORwait);
+ if (!letGORwait && !letWFSOEwait && !success) {
+ ok(GetLastError() == ERROR_IO_INCOMPLETE, "GetOverlappedResult\n");
+ success = GetOverlappedResult(hnp, &oOverlap, &written, TRUE);
+ }
+ }
trace("Server done writing.\n");
ok(success, "overlapped WriteFile\n");
ok(written == readden, "write file len\n");
@@ -613,6 +629,113 @@ static DWORD CALLBACK serverThreadMain3(LPVOID arg)
return 0;
}
+/** Trivial byte echo server - uses i/o completion ports */
+static DWORD CALLBACK serverThreadMain4(LPVOID arg)
+{
+ int i;
+ HANDLE hcompletion;
+
+ trace("serverThreadMain4\n");
+ /* Set up a simple echo server */
+ hnp = CreateNamedPipe(PIPENAME "serverThreadMain4", PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
+ PIPE_TYPE_BYTE | PIPE_WAIT,
+ /* nMaxInstances */ 1,
+ /* nOutBufSize */ 1024,
+ /* nInBufSize */ 1024,
+ /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT,
+ /* lpSecurityAttrib */ NULL);
+ ok(hnp != INVALID_HANDLE_VALUE, "CreateNamedPipe failed\n");
+
+ hcompletion = CreateIoCompletionPort(hnp, NULL, 12345, 1);
+ ok(hcompletion != NULL, "CreateIoCompletionPort failed, error=%i\n", GetLastError());
+
+ for (i = 0; i < NB_SERVER_LOOPS; i++) {
+ char buf[512];
+ DWORD written;
+ DWORD readden;
+ DWORD dummy;
+ DWORD success;
+ OVERLAPPED oConnect;
+ OVERLAPPED oRead;
+ OVERLAPPED oWrite;
+ OVERLAPPED *oResult;
+ DWORD err;
+ ULONG_PTR compkey;
+
+ memset(&oConnect, 0, sizeof(oConnect));
+ memset(&oRead, 0, sizeof(oRead));
+ memset(&oWrite, 0, sizeof(oWrite));
+
+ /* Wait for client to connect */
+ trace("Server calling overlapped ConnectNamedPipe...\n");
+ success = ConnectNamedPipe(hnp, &oConnect);
+ err = GetLastError();
+ ok(!success && (err == ERROR_IO_PENDING || err == ERROR_PIPE_CONNECTED),
+ "overlapped ConnectNamedPipe got %u err %u\n", success, err );
+ if (!success && err == ERROR_IO_PENDING) {
+ trace("ConnectNamedPipe GetQueuedCompletionStatus\n");
+ success = GetQueuedCompletionStatus(hcompletion, &dummy, &compkey, &oResult, 0);
+ if (!success)
+ {
+ ok( GetLastError() == WAIT_TIMEOUT,
+ "ConnectNamedPipe GetQueuedCompletionStatus wrong error %u\n", GetLastError());
+ success = GetQueuedCompletionStatus(hcompletion, &dummy, &compkey, &oResult, 10000);
+ }
+ ok(success, "ConnectNamedPipe GetQueuedCompletionStatus failed, errno=%i\n", GetLastError());
+ if (success)
+ {
+ ok(compkey == 12345, "got completion key %i instead of 12345\n", (int)compkey);
+ ok(oResult == &oConnect, "got overlapped pointer %p instead of %p\n", oResult, &oConnect);
+ }
+ }
+ trace("overlapped ConnectNamedPipe operation complete.\n");
+
+ /* Echo bytes once */
+ memset(buf, 0, sizeof(buf));
+
+ trace("Server reading...\n");
+ success = ReadFile(hnp, buf, sizeof(buf), &readden, &oRead);
+ trace("Server ReadFile returned...\n");
+ err = GetLastError();
+ ok(success || err == ERROR_IO_PENDING, "overlapped ReadFile, err=%i\n", err);
+ success = GetQueuedCompletionStatus(hcompletion, &readden, &compkey,
+ &oResult, 10000);
+ ok(success, "ReadFile GetQueuedCompletionStatus failed, errno=%i\n", GetLastError());
+ if (success)
+ {
+ ok(compkey == 12345, "got completion key %i instead of 12345\n", (int)compkey);
+ ok(oResult == &oRead, "got overlapped pointer %p instead of %p\n", oResult, &oRead);
+ }
+ trace("Server done reading.\n");
+
+ trace("Server writing...\n");
+ success = WriteFile(hnp, buf, readden, &written, &oWrite);
+ trace("Server WriteFile returned...\n");
+ err = GetLastError();
+ ok(success || err == ERROR_IO_PENDING, "overlapped WriteFile failed, err=%u\n", err);
+ success = GetQueuedCompletionStatus(hcompletion, &written, &compkey,
+ &oResult, 10000);
+ ok(success, "WriteFile GetQueuedCompletionStatus failed, errno=%i\n", GetLastError());
+ if (success)
+ {
+ ok(compkey == 12345, "got completion key %i instead of 12345\n", (int)compkey);
+ ok(oResult == &oWrite, "got overlapped pointer %p instead of %p\n", oResult, &oWrite);
+ ok(written == readden, "write file len\n");
+ }
+ trace("Server done writing.\n");
+
+ /* finish this connection, wait for next one */
+ ok(FlushFileBuffers(hnp), "FlushFileBuffers\n");
+ success = DisconnectNamedPipe(hnp);
+ ok(success, "DisconnectNamedPipe failed, err %u\n", GetLastError());
+ }
+
+ ok(CloseHandle(hnp), "CloseHandle named pipe failed, err=%i\n", GetLastError());
+ ok(CloseHandle(hcompletion), "CloseHandle completion failed, err=%i\n", GetLastError());
+
+ return 0;
+}
+
static void exercizeServer(const char *pipename, HANDLE serverThread)
{
int i;
@@ -690,13 +813,15 @@ static void test_NamedPipe_2(void)
ok(serverThread != INVALID_HANDLE_VALUE, "CreateThread\n");
exercizeServer(PIPENAME "serverThreadMain2", serverThread);
- if( 0 ) /* overlapped pipe server doesn't work yet - it randomly fails */
- {
/* Try server #3 */
serverThread = CreateThread(NULL, 0, serverThreadMain3, 0, 0, &serverThreadId);
ok(serverThread != INVALID_HANDLE_VALUE, "CreateThread\n");
exercizeServer(PIPENAME "serverThreadMain3", serverThread);
- }
+
+ /* Try server #4 */
+ serverThread = CreateThread(NULL, 0, serverThreadMain4, 0, 0, &serverThreadId);
+ ok(serverThread != INVALID_HANDLE_VALUE, "CreateThread\n");
+ exercizeServer(PIPENAME "serverThreadMain4", serverThread);
ok(SetEvent( alarm_event ), "SetEvent\n");
CloseHandle( alarm_event );
@@ -821,7 +946,7 @@ struct named_pipe_client_params
static DWORD CALLBACK named_pipe_client_func(LPVOID p)
{
- struct named_pipe_client_params *params = (struct named_pipe_client_params *)p;
+ struct named_pipe_client_params *params = p;
HANDLE pipe;
BOOL ret;
const char message[] = "Test";
@@ -1266,7 +1391,7 @@ static DWORD CALLBACK overlapped_server(LPVOID arg)
OVERLAPPED ol;
HANDLE pipe;
int ret, err;
- struct overlapped_server_args *a = (struct overlapped_server_args*)arg;
+ struct overlapped_server_args *a = arg;
DWORD num;
char buf[100];
@@ -1323,6 +1448,117 @@ static void test_overlapped(void)
CloseHandle(thread);
}
+static void test_NamedPipeHandleState(void)
+{
+ HANDLE server, client;
+ BOOL ret;
+ DWORD state, instances, maxCollectionCount, collectDataTimeout;
+ char userName[MAX_PATH];
+
+ server = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX,
+ /* dwOpenMode */ PIPE_TYPE_BYTE | PIPE_WAIT,
+ /* nMaxInstances */ 1,
+ /* nOutBufSize */ 1024,
+ /* nInBufSize */ 1024,
+ /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT,
+ /* lpSecurityAttrib */ NULL);
+ ok(server != INVALID_HANDLE_VALUE, "cf failed\n");
+ ret = GetNamedPipeHandleState(server, NULL, NULL, NULL, NULL, NULL, 0);
+ todo_wine
+ ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
+ ret = GetNamedPipeHandleState(server, &state, &instances, NULL, NULL, NULL,
+ 0);
+ todo_wine
+ ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
+ if (ret)
+ {
+ ok(state == 0, "unexpected state %08x\n", state);
+ ok(instances == 1, "expected 1 instances, got %d\n", instances);
+ }
+ /* Some parameters have no meaning, and therefore can't be retrieved,
+ * on a local pipe.
+ */
+ SetLastError(0xdeadbeef);
+ ret = GetNamedPipeHandleState(server, &state, &instances,
+ &maxCollectionCount, &collectDataTimeout, userName,
+ sizeof(userName) / sizeof(userName[0]));
+ todo_wine
+ ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+ "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+ /* A byte-mode pipe server can't be changed to message mode. */
+ state = PIPE_READMODE_MESSAGE;
+ SetLastError(0xdeadbeef);
+ ret = SetNamedPipeHandleState(server, &state, NULL, NULL);
+ todo_wine
+ ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+ "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+
+ client = CreateFileA(PIPENAME, GENERIC_READ|GENERIC_WRITE, 0, NULL,
+ OPEN_EXISTING, 0, NULL);
+ ok(client != INVALID_HANDLE_VALUE, "cf failed\n");
+
+ state = PIPE_READMODE_BYTE;
+ ret = SetNamedPipeHandleState(client, &state, NULL, NULL);
+ todo_wine
+ ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
+ /* A byte-mode pipe client can't be changed to message mode, either. */
+ state = PIPE_READMODE_MESSAGE;
+ SetLastError(0xdeadbeef);
+ ret = SetNamedPipeHandleState(server, &state, NULL, NULL);
+ todo_wine
+ ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+ "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+
+ CloseHandle(client);
+ CloseHandle(server);
+
+ server = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX,
+ /* dwOpenMode */ PIPE_TYPE_MESSAGE | PIPE_WAIT,
+ /* nMaxInstances */ 1,
+ /* nOutBufSize */ 1024,
+ /* nInBufSize */ 1024,
+ /* nDefaultWait */ NMPWAIT_USE_DEFAULT_WAIT,
+ /* lpSecurityAttrib */ NULL);
+ ok(server != INVALID_HANDLE_VALUE, "cf failed\n");
+ ret = GetNamedPipeHandleState(server, NULL, NULL, NULL, NULL, NULL, 0);
+ todo_wine
+ ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
+ ret = GetNamedPipeHandleState(server, &state, &instances, NULL, NULL, NULL,
+ 0);
+ todo_wine
+ ok(ret, "GetNamedPipeHandleState failed: %d\n", GetLastError());
+ if (ret)
+ {
+ ok(state == 0, "unexpected state %08x\n", state);
+ ok(instances == 1, "expected 1 instances, got %d\n", instances);
+ }
+ /* In contrast to byte-mode pipes, a message-mode pipe server can be
+ * changed to byte mode.
+ */
+ state = PIPE_READMODE_BYTE;
+ ret = SetNamedPipeHandleState(server, &state, NULL, NULL);
+ todo_wine
+ ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
+
+ client = CreateFileA(PIPENAME, GENERIC_READ|GENERIC_WRITE, 0, NULL,
+ OPEN_EXISTING, 0, NULL);
+ ok(client != INVALID_HANDLE_VALUE, "cf failed\n");
+
+ state = PIPE_READMODE_MESSAGE;
+ ret = SetNamedPipeHandleState(client, &state, NULL, NULL);
+ todo_wine
+ ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
+ /* A message-mode pipe client can also be changed to byte mode.
+ */
+ state = PIPE_READMODE_BYTE;
+ ret = SetNamedPipeHandleState(client, &state, NULL, NULL);
+ todo_wine
+ ok(ret, "SetNamedPipeHandleState failed: %d\n", GetLastError());
+
+ CloseHandle(client);
+ CloseHandle(server);
+}
+
START_TEST(pipe)
{
HMODULE hmod;
@@ -1339,4 +1575,5 @@ START_TEST(pipe)
test_CreatePipe();
test_impersonation();
test_overlapped();
+ test_NamedPipeHandleState();
}
diff --git a/rostests/winetests/kernel32/process.c b/rostests/winetests/kernel32/process.c
index 0568b527e03..2b07450b9ee 100755
--- a/rostests/winetests/kernel32/process.c
+++ b/rostests/winetests/kernel32/process.c
@@ -35,9 +35,42 @@
#include "wine/test.h"
+#define PROCESS_NAME_NATIVE 1
+
+#define expect_eq_d(expected, actual) \
+ do { \
+ int value = (actual); \
+ ok((expected) == value, "Expected " #actual " to be %d (" #expected ") is %d\n", \
+ (expected), value); \
+ } while (0)
+#define expect_eq_ws_i(expected, actual) \
+ do { \
+ LPCWSTR value = (actual); \
+ ok(lstrcmpiW((expected), value) == 0, "Expected " #actual " to be L\"%s\" (" #expected ") is L\"%s\"\n", \
+ wine_dbgstr_w(expected), wine_dbgstr_w(value)); \
+ } while (0)
+
+/* A simpler version of wine_dbgstr_w. Note that the returned buffer will be
+ * invalid after 16 calls to this funciton. */
+static const char *wine_dbgstr_w(LPCWSTR wstr)
+{
+ static char *buffers[16];
+ static int curr_buffer = 0;
+
+ int size;
+
+ curr_buffer = (curr_buffer + 1) % 16;
+ HeapFree(GetProcessHeap(), 0, buffers[curr_buffer]);
+ size = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
+ buffers[curr_buffer] = HeapAlloc(GetProcessHeap(), 0, size);
+ size = WideCharToMultiByte(CP_ACP, 0, wstr, -1, buffers[curr_buffer], size, NULL, NULL);
+ return buffers[curr_buffer];
+}
+
static HINSTANCE hkernel32;
static LPVOID (WINAPI *pVirtualAllocEx)(HANDLE, LPVOID, SIZE_T, DWORD, DWORD);
static BOOL (WINAPI *pVirtualFreeEx)(HANDLE, LPVOID, SIZE_T, DWORD);
+static BOOL (WINAPI *pQueryFullProcessImageNameW)(HANDLE hProcess, DWORD dwFlags, LPWSTR lpExeName, PDWORD lpdwSize);
/* ############################### */
static char base[MAX_PATH];
@@ -175,6 +208,7 @@ static int init(void)
hkernel32 = GetModuleHandleA("kernel32");
pVirtualAllocEx = (void *) GetProcAddress(hkernel32, "VirtualAllocEx");
pVirtualFreeEx = (void *) GetProcAddress(hkernel32, "VirtualFreeEx");
+ pQueryFullProcessImageNameW = (void *) GetProcAddress(hkernel32, "QueryFullProcessImageNameW");
return 1;
}
@@ -241,7 +275,7 @@ static void doChild(const char* file, const char* option)
siA.dwX, siA.dwY, siA.dwXSize, siA.dwYSize,
siA.dwXCountChars, siA.dwYCountChars, siA.dwFillAttribute,
siA.dwFlags, siA.wShowWindow,
- (DWORD)siA.hStdInput, (DWORD)siA.hStdOutput, (DWORD)siA.hStdError);
+ (DWORD_PTR)siA.hStdInput, (DWORD_PTR)siA.hStdOutput, (DWORD_PTR)siA.hStdError);
/* since GetStartupInfoW is only implemented in win2k,
* zero out before calling so we can notice the difference
@@ -258,7 +292,7 @@ static void doChild(const char* file, const char* option)
siW.dwX, siW.dwY, siW.dwXSize, siW.dwYSize,
siW.dwXCountChars, siW.dwYCountChars, siW.dwFillAttribute,
siW.dwFlags, siW.wShowWindow,
- (DWORD)siW.hStdInput, (DWORD)siW.hStdOutput, (DWORD)siW.hStdError);
+ (DWORD_PTR)siW.hStdInput, (DWORD_PTR)siW.hStdOutput, (DWORD_PTR)siW.hStdError);
/* Arguments */
childPrintf(hFile, "[Arguments]\nargcA=%d\n", myARGC);
@@ -492,7 +526,7 @@ static void ok_child_stringWA( int line, const char *sect, const char *key,
#define okChildInt(sect, key, expect) \
do { \
UINT result = GetPrivateProfileIntA((sect), (key), !(expect), resfile); \
- ok(result == expect, "%s:%s expected %d, but got %d\n", (sect), (key), (int)(expect), result); \
+ ok(result == expect, "%s:%s expected %u, but got %u\n", (sect), (key), (UINT)(expect), result); \
} while (0)
static void test_Startup(void)
@@ -1292,9 +1326,9 @@ static void test_Console(void)
okChildInt("StartupInfoA", "wShowWindow", startup.wShowWindow);
/* check child correctly inherited the console */
- okChildInt("StartupInfoA", "hStdInput", (DWORD)startup.hStdInput);
- okChildInt("StartupInfoA", "hStdOutput", (DWORD)startup.hStdOutput);
- okChildInt("StartupInfoA", "hStdError", (DWORD)startup.hStdError);
+ okChildInt("StartupInfoA", "hStdInput", (DWORD_PTR)startup.hStdInput);
+ okChildInt("StartupInfoA", "hStdOutput", (DWORD_PTR)startup.hStdOutput);
+ okChildInt("StartupInfoA", "hStdError", (DWORD_PTR)startup.hStdError);
okChildInt("Console", "SizeX", (DWORD)sbi.dwSize.X);
okChildInt("Console", "SizeY", (DWORD)sbi.dwSize.Y);
okChildInt("Console", "CursorX", (DWORD)sbi.dwCursorPosition.X);
@@ -1409,7 +1443,7 @@ static void test_OpenProcess(void)
/* not exported in all windows versions */
if ((!pVirtualAllocEx) || (!pVirtualFreeEx)) {
- skip("VirtualAllocEx not found\n");
+ win_skip("VirtualAllocEx not found\n");
return;
}
@@ -1423,7 +1457,7 @@ static void test_OpenProcess(void)
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{ /* Win9x */
CloseHandle(hproc);
- skip("VirtualAllocEx not implemented\n");
+ win_skip("VirtualAllocEx not implemented\n");
return;
}
ok(GetLastError() == ERROR_ACCESS_DENIED, "wrong error %d\n", GetLastError());
@@ -1520,6 +1554,76 @@ static void test_GetProcessVersion(void)
CloseHandle(pi.hThread);
}
+static void test_ProcessName(void)
+{
+ HANDLE hSelf;
+ WCHAR module_name[1024];
+ WCHAR deviceW[] = {'\\','D', 'e','v','i','c','e',0};
+ WCHAR buf[1024];
+ DWORD size;
+
+ if (!pQueryFullProcessImageNameW)
+ {
+ win_skip("QueryFullProcessImageNameW unavailable (added in Windows Vista)\n");
+ return;
+ }
+
+ ok(GetModuleFileNameW(NULL, module_name, 1024), "GetModuleFileNameW(NULL, ...) failed\n");
+
+ /* GetCurrentProcess pseudo-handle */
+ size = sizeof(buf) / sizeof(buf[0]);
+ expect_eq_d(TRUE, pQueryFullProcessImageNameW(GetCurrentProcess(), 0, buf, &size));
+ expect_eq_d(lstrlenW(buf), size);
+ expect_eq_ws_i(buf, module_name);
+
+ hSelf = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId());
+ /* Real handle */
+ size = sizeof(buf) / sizeof(buf[0]);
+ expect_eq_d(TRUE, pQueryFullProcessImageNameW(hSelf, 0, buf, &size));
+ expect_eq_d(lstrlenW(buf), size);
+ expect_eq_ws_i(buf, module_name);
+
+ /* Buffer too small */
+ size = lstrlenW(module_name)/2;
+ lstrcpyW(buf, deviceW);
+ SetLastError(0xdeadbeef);
+ expect_eq_d(FALSE, pQueryFullProcessImageNameW(hSelf, 0, buf, &size));
+ expect_eq_d(lstrlenW(module_name)/2, size); /* size not changed(!) */
+ expect_eq_d(ERROR_INSUFFICIENT_BUFFER, GetLastError());
+ expect_eq_ws_i(deviceW, buf); /* buffer not changed */
+
+ /* Too small - not space for NUL terminator */
+ size = lstrlenW(module_name);
+ SetLastError(0xdeadbeef);
+ expect_eq_d(FALSE, pQueryFullProcessImageNameW(hSelf, 0, buf, &size));
+ expect_eq_d(lstrlenW(module_name), size); /* size not changed(!) */
+ expect_eq_d(ERROR_INSUFFICIENT_BUFFER, GetLastError());
+
+ /* NULL buffer */
+ size = 0;
+ expect_eq_d(FALSE, pQueryFullProcessImageNameW(hSelf, 0, NULL, &size));
+ expect_eq_d(0, size);
+ expect_eq_d(ERROR_INSUFFICIENT_BUFFER, GetLastError());
+
+ /* native path */
+ size = sizeof(buf) / sizeof(buf[0]);
+ expect_eq_d(TRUE, pQueryFullProcessImageNameW(hSelf, PROCESS_NAME_NATIVE, buf, &size));
+ expect_eq_d(lstrlenW(buf), size);
+ ok(buf[0] == '\\', "NT path should begin with '\\'\n");
+ todo_wine ok(memcmp(buf, deviceW, sizeof(WCHAR)*lstrlenW(deviceW)) == 0, "NT path should begin with \\Device\n");
+
+ /* Buffer too small */
+ size = lstrlenW(module_name)/2;
+ SetLastError(0xdeadbeef);
+ lstrcpyW(buf, module_name);
+ expect_eq_d(FALSE, pQueryFullProcessImageNameW(hSelf, 0, buf, &size));
+ expect_eq_d(lstrlenW(module_name)/2, size); /* size not changed(!) */
+ expect_eq_d(ERROR_INSUFFICIENT_BUFFER, GetLastError());
+ expect_eq_ws_i(module_name, buf); /* buffer not changed */
+
+ CloseHandle(hSelf);
+}
+
static void test_Handles(void)
{
HANDLE handle = GetCurrentProcess();
@@ -1573,6 +1677,7 @@ START_TEST(process)
test_ExitCode();
test_OpenProcess();
test_GetProcessVersion();
+ test_ProcessName();
test_Handles();
/* things that can be tested:
* lookup: check the way program to be executed is searched
diff --git a/rostests/winetests/kernel32/profile.c b/rostests/winetests/kernel32/profile.c
index 87c0a738670..fbf5d2400b1 100755
--- a/rostests/winetests/kernel32/profile.c
+++ b/rostests/winetests/kernel32/profile.c
@@ -186,7 +186,15 @@ static void test_profile_sections(void)
broken(GetLastError() == 0xdeadbeef), /* Win9x, WinME */
"expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
- /* And a real one */
+ /* Existing empty section with no keys */
+ SetLastError(0xdeadbeef);
+ ret=GetPrivateProfileSectionA("section2", buf, sizeof(buf), testfile4);
+ ok( ret == 0, "expected return size 0, got %d\n", ret );
+ ok( GetLastError() == ERROR_SUCCESS ||
+ broken(GetLastError() == 0xdeadbeef), /* Win9x, WinME */
+ "expected ERROR_SUCCESS, got %d\n", GetLastError());
+
+ /* Existing section with keys and values*/
SetLastError(0xdeadbeef);
ret=GetPrivateProfileSectionA("section1", buf, sizeof(buf), testfile4);
for( p = buf + strlen(buf) + 1; *p;p += strlen(p)+1)
@@ -798,17 +806,28 @@ static void test_GetPrivateProfileString(const char *content, const char *descri
ok(ret == 4, "Expected 4, got %d\n", ret);
ok(!lstrcmpA(buf, "val1"), "Expected \"val1\", got \"%s\"\n", buf);
+ /* Existing section with no keys in an existing file */
+ memset(buf, 0xc,sizeof(buf));
+ SetLastError(0xdeadbeef);
+ ret=GetPrivateProfileStringA("section2", "DoesntExist", "",
+ buf, MAX_PATH, filename);
+ ok( ret == 0, "expected return size 0, got %d\n", ret );
+ ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf);
+ todo_wine
+ ok( GetLastError() == 0xdeadbeef , "expected 0xdeadbeef, got %d\n",
+ GetLastError());
+
+
DeleteFileA(path);
DeleteFileA(filename);
}
static DWORD timeout = 0;
-static BOOL check_file_data(LPCSTR path, LPCSTR data)
+static BOOL check_binary_file_data(LPCSTR path, const VOID *data, DWORD size)
{
HANDLE file;
CHAR buf[MAX_PATH];
- DWORD size;
BOOL ret;
/* Sleep() is needed on Win9x and WinME */
@@ -819,17 +838,23 @@ static BOOL check_file_data(LPCSTR path, LPCSTR data)
if (file == INVALID_HANDLE_VALUE)
return FALSE;
- size = GetFileSize(file, NULL);
- buf[size] = '\0';
+ if(size != GetFileSize(file, NULL) )
+ {
+ CloseHandle(file);
+ return FALSE;
+ }
+
ret = ReadFile(file, buf, size, &size, NULL);
CloseHandle(file);
if (!ret)
return FALSE;
- if (!*data && size != 0)
- return FALSE;
+ return !memcmp(buf, data, size);
+}
- return !lstrcmpA(buf, data);
+static BOOL check_file_data(LPCSTR path, LPCSTR data)
+{
+ return check_binary_file_data(path, data, lstrlenA(data));
}
static void test_WritePrivateProfileString(void)
@@ -1019,7 +1044,23 @@ static void test_WritePrivateProfileString(void)
ret = WritePrivateProfileStringA("App3", "key5", NULL, path);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
ok(check_file_data(path, data), "File doesn't match\n");
+ DeleteFileA(path);
+ /* NULLs in file before first section. Should be preserved in output */
+ data = "Data \0 before \0 first \0 section" /* 31 bytes */
+ "\r\n[section1]\r\n" /* 14 bytes */
+ "key1=string1\r\n"; /* 14 bytes */
+ GetTempFileNameA(temp, "wine", 0, path);
+ create_test_file(path, data, 31);
+ ret = WritePrivateProfileStringA("section1", "key1", "string1", path);
+ ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+ todo_wine
+ ok( check_binary_file_data(path, data, 59) ||
+ broken( check_binary_file_data(path, /* Windows 9x */
+ "Data \0 before \0 first \0 section" /* 31 bytes */
+ "\r\n\r\n[section1]\r\n" /* 14 bytes */
+ "key1=string1" /* 14 bytes */
+ , 59)), "File doesn't match\n");
DeleteFileA(path);
}
diff --git a/rostests/winetests/kernel32/resource.c b/rostests/winetests/kernel32/resource.c
index cde27a8d535..622f7814c8f 100644
--- a/rostests/winetests/kernel32/resource.c
+++ b/rostests/winetests/kernel32/resource.c
@@ -310,7 +310,7 @@ START_TEST(resource)
if (GLE == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("Resource calls are not implemented\n");
+ win_skip("Resource calls are not implemented\n");
return;
}
diff --git a/rostests/winetests/kernel32/sync.c b/rostests/winetests/kernel32/sync.c
index 32d37e868b8..ea36fc60847 100755
--- a/rostests/winetests/kernel32/sync.c
+++ b/rostests/winetests/kernel32/sync.c
@@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#define _WIN32_WINNT 0x500
#include
#include
#include
@@ -53,7 +54,7 @@ static void test_signalandwait(void)
r = pSignalObjectAndWait(NULL, NULL, 0, 0);
if (r == ERROR_INVALID_FUNCTION)
{
- skip("SignalObjectAndWait is not implemented\n");
+ win_skip("SignalObjectAndWait is not implemented\n");
return; /* Win98/ME */
}
ok( r == WAIT_FAILED, "should fail\n");
@@ -196,7 +197,7 @@ static void test_slist(void)
int value;
} item1, item2, item3, *pitem;
- SLIST_HEADER slist_header, test_header;
+ SLIST_HEADER slist_header;
PSLIST_ENTRY entry;
USHORT size;
@@ -219,15 +220,12 @@ static void test_slist(void)
pInterlockedPopEntrySList == NULL ||
pInterlockedPushEntrySList == NULL)
{
- skip("some required slist entrypoints were not found, skipping tests\n");
+ win_skip("some required slist entrypoints were not found, skipping tests\n");
return;
}
- memset(&test_header, 0, sizeof(test_header));
memset(&slist_header, 0xFF, sizeof(slist_header));
pInitializeSListHead(&slist_header);
- ok(memcmp(&test_header, &slist_header, sizeof(SLIST_HEADER)) == 0,
- "InitializeSListHead didn't zero-fill list header\n");
size = pQueryDepthSList(&slist_header);
ok(size == 0, "initially created slist has size %d, expected 0\n", size);
@@ -395,7 +393,7 @@ static void test_waitable_timer(void)
if (!pCreateWaitableTimerA || !pOpenWaitableTimerA)
{
- skip("{Create,Open}WaitableTimerA() is not available\n");
+ win_skip("{Create,Open}WaitableTimerA() is not available\n");
return;
}
@@ -457,7 +455,7 @@ static void test_iocp_callback(void)
p_BindIoCompletionCallback = (void*)GetProcAddress(hmod, "BindIoCompletionCallback");
if(!p_BindIoCompletionCallback) {
- skip("BindIoCompletionCallback not found in this DLL\n");
+ win_skip("BindIoCompletionCallback not found in this DLL\n");
return;
}
@@ -492,7 +490,7 @@ static void test_iocp_callback(void)
ok(retb == TRUE, "BindIoCompletionCallback failed\n");
memset(&overlapped, 0, sizeof(overlapped));
- retb = WriteFile(hFile, (const void *) buffer, 4, &bytesWritten, &overlapped);
+ retb = WriteFile(hFile, buffer, 4, &bytesWritten, &overlapped);
ok(retb == TRUE || GetLastError() == ERROR_IO_PENDING, "WriteFile failed, lastError = %d\n", GetLastError());
ret = WaitForSingleObject(sem, 5000);
@@ -536,7 +534,7 @@ static void test_iocp_callback(void)
static void CALLBACK timer_queue_cb1(PVOID p, BOOLEAN timedOut)
{
- int *pn = (int *) p;
+ int *pn = p;
ok(timedOut, "Timer callbacks should always time out\n");
++*pn;
}
@@ -596,7 +594,7 @@ static void CALLBACK timer_queue_cb4(PVOID p, BOOLEAN timedOut)
static void CALLBACK timer_queue_cb5(PVOID p, BOOLEAN timedOut)
{
- DWORD delay = (DWORD) p;
+ DWORD_PTR delay = (DWORD_PTR) p;
ok(timedOut, "Timer callbacks should always time out\n");
if (delay)
Sleep(delay);
@@ -647,7 +645,7 @@ static void test_timer_queue(void)
if (!pChangeTimerQueueTimer || !pCreateTimerQueue || !pCreateTimerQueueTimer
|| !pDeleteTimerQueueEx || !pDeleteTimerQueueTimer)
{
- skip("TimerQueue API not present\n");
+ win_skip("TimerQueue API not present\n");
return;
}
diff --git a/rostests/winetests/kernel32/thread.c b/rostests/winetests/kernel32/thread.c
index 0030422b5fe..c1d65c1dd93 100755
--- a/rostests/winetests/kernel32/thread.c
+++ b/rostests/winetests/kernel32/thread.c
@@ -18,6 +18,9 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+/* Define _WIN32_WINNT to get SetThreadIdealProcessor on Windows */
+#define _WIN32_WINNT 0x0500
+
#include
#include
#include
@@ -180,11 +183,11 @@ INT obeying_ars = 0; /* -1 == no, 0 == dunno yet, 1 == yes */
*/
static DWORD WINAPI threadFunc1(LPVOID p)
{
- t1Struct *tstruct = (t1Struct *)p;
+ t1Struct *tstruct = p;
int i;
/* write our thread # into shared memory */
tstruct->threadmem[tstruct->threadnum]=GetCurrentThreadId();
- ok(TlsSetValue(tlsIndex,(LPVOID)(tstruct->threadnum+1))!=0,
+ ok(TlsSetValue(tlsIndex,(LPVOID)(INT_PTR)(tstruct->threadnum+1))!=0,
"TlsSetValue failed\n");
/* The threads synchronize before terminating. This is done by
Signaling an event, and waiting for all events to occur
@@ -202,7 +205,7 @@ static DWORD WINAPI threadFunc1(LPVOID p)
ok( lstrlenA( (char *)0xdeadbeef ) == 0, "lstrlenA: unexpected success\n" );
/* Check that no one changed our tls memory */
- ok((int)TlsGetValue(tlsIndex)-1==tstruct->threadnum,
+ ok((INT_PTR)TlsGetValue(tlsIndex)-1==tstruct->threadnum,
"TlsGetValue failed\n");
return NUM_THREADS+tstruct->threadnum;
}
@@ -222,7 +225,7 @@ static DWORD WINAPI threadFunc3(LPVOID p)
static DWORD WINAPI threadFunc4(LPVOID p)
{
- HANDLE event = (HANDLE)p;
+ HANDLE event = p;
if(event != NULL) {
SetEvent(event);
}
@@ -233,7 +236,7 @@ static DWORD WINAPI threadFunc4(LPVOID p)
#if CHECK_STACK
static DWORD WINAPI threadFunc5(LPVOID p)
{
- DWORD *exitCode = (DWORD *)p;
+ DWORD *exitCode = p;
SYSTEM_INFO sysInfo;
sysInfo.dwPageSize=0;
GetSystemInfo(&sysInfo);
@@ -252,13 +255,13 @@ static DWORD WINAPI threadFunc5(LPVOID p)
static DWORD WINAPI threadFunc_SetEvent(LPVOID p)
{
- SetEvent((HANDLE) p);
+ SetEvent(p);
return 0;
}
static DWORD WINAPI threadFunc_CloseHandle(LPVOID p)
{
- CloseHandle((HANDLE) p);
+ CloseHandle(p);
return 0;
}
@@ -305,7 +308,7 @@ static VOID test_CreateRemoteThread(void)
hRemoteEvent, CREATE_SUSPENDED, &tid);
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("CreateRemoteThread is not implemented\n");
+ win_skip("CreateRemoteThread is not implemented\n");
goto cleanup;
}
ok(hThread != NULL, "CreateRemoteThread failed, err=%u\n", GetLastError());
@@ -547,8 +550,7 @@ static VOID test_TerminateThread(void)
HANDLE thread,access_thread,event;
DWORD threadId,exitCode;
event=CreateEventA(NULL,TRUE,FALSE,NULL);
- thread = CreateThread(NULL,0,threadFunc4,
- (LPVOID)event, 0,&threadId);
+ thread = CreateThread(NULL,0,threadFunc4,event,0,&threadId);
ok(thread!=NULL,"Create Thread failed\n");
/* TerminateThread has a race condition in Wine. If the thread is terminated
before it starts, it leaves a process behind. Therefore, we wait for the
@@ -926,7 +928,7 @@ static DWORD CALLBACK work_function(void *p)
static void test_QueueUserWorkItem(void)
{
- int i;
+ INT_PTR i;
DWORD wait_result;
DWORD before, after;
@@ -975,7 +977,7 @@ static void test_RegisterWaitForSingleObject(void)
if (!pRegisterWaitForSingleObject || !pUnregisterWait)
{
- skip("RegisterWaitForSingleObject or UnregisterWait not implemented\n");
+ win_skip("RegisterWaitForSingleObject or UnregisterWait not implemented\n");
return;
}
@@ -1043,7 +1045,7 @@ static DWORD WINAPI TLS_InheritanceProc(LPVOID p)
inheritance with TLS_InheritanceProc. */
static DWORD WINAPI TLS_ThreadProc(LPVOID p)
{
- LONG id = (LONG) p;
+ LONG_PTR id = (LONG_PTR) p;
LPVOID val;
BOOL ret;
@@ -1163,7 +1165,7 @@ static DWORD WINAPI TLS_ThreadProc(LPVOID p)
static void test_TLS(void)
{
HANDLE threads[2];
- LONG i;
+ LONG_PTR i;
DWORD ret;
BOOL suc;
diff --git a/rostests/winetests/kernel32/time.c b/rostests/winetests/kernel32/time.c
index 21a8232b917..0b3959a56e5 100755
--- a/rostests/winetests/kernel32/time.c
+++ b/rostests/winetests/kernel32/time.c
@@ -294,7 +294,7 @@ static void test_GetTimeZoneInformation(void)
if (!pSystemTimeToTzSpecificLocalTime)
{
- skip("SystemTimeToTzSpecificLocalTime not present\n");
+ win_skip("SystemTimeToTzSpecificLocalTime not available\n");
return;
}
@@ -305,7 +305,7 @@ static void test_GetTimeZoneInformation(void)
res = pSystemTimeToTzSpecificLocalTime(&tzinfo, &utc, ¤t);
if (!res && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("SystemTimeToTzSpecificLocalTime is not implemented\n");
+ win_skip("SystemTimeToTzSpecificLocalTime is not implemented\n");
return;
}
@@ -425,7 +425,7 @@ static void test_TzSpecificLocalTimeToSystemTime(void)
if (!pTzSpecificLocalTimeToSystemTime || !pSystemTimeToTzSpecificLocalTime)
{
- skip("TzSpecificLocalTimeToSystemTime or SystemTimeToTzSpecificLocalTime not present\n");
+ win_skip("TzSpecificLocalTimeToSystemTime or SystemTimeToTzSpecificLocalTime not available\n");
return;
}
diff --git a/rostests/winetests/kernel32/timer.c b/rostests/winetests/kernel32/timer.c
index 40b2277dd92..3c3fde76f11 100755
--- a/rostests/winetests/kernel32/timer.c
+++ b/rostests/winetests/kernel32/timer.c
@@ -18,6 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#define _WIN32_WINNT 0x0501
+
#include "wine/test.h"
#include "winbase.h"
@@ -37,14 +39,14 @@ static void test_timer(void)
pCreateWaitableTimerA = (fnCreateWaitableTimerA) GetProcAddress( hker, "CreateWaitableTimerA");
if( !pCreateWaitableTimerA )
{
- skip("CreateWaitableTimerA is not available\n");
+ win_skip("CreateWaitableTimerA is not available\n");
return;
}
pSetWaitableTimer = (fnSetWaitableTimer) GetProcAddress( hker, "SetWaitableTimer");
if( !pSetWaitableTimer )
{
- skip("SetWaitableTimer is not available\n");
+ win_skip("SetWaitableTimer is not available\n");
return;
}
diff --git a/rostests/winetests/kernel32/toolhelp.c b/rostests/winetests/kernel32/toolhelp.c
index 804d266294c..dfe4ad8d0d5 100644
--- a/rostests/winetests/kernel32/toolhelp.c
+++ b/rostests/winetests/kernel32/toolhelp.c
@@ -44,7 +44,7 @@ static BOOL (WINAPI *pThread32Next)(HANDLE, LPTHREADENTRY32);
static DWORD WINAPI sub_thread(void* pmt)
{
- DWORD w = WaitForSingleObject((HANDLE)pmt, WAIT_TIME);
+ DWORD w = WaitForSingleObject(pmt, WAIT_TIME);
return w;
}
@@ -73,8 +73,8 @@ static int init(void)
case 2: /* the test program */
return 0;
case 4: /* the sub-process */
- ev1 = (HANDLE)atoi(argv[2]);
- ev2 = (HANDLE)atoi(argv[3]);
+ ev1 = (HANDLE)(INT_PTR)atoi(argv[2]);
+ ev2 = (HANDLE)(INT_PTR)atoi(argv[3]);
ev3 = CreateEvent(NULL, FALSE, FALSE, NULL);
if (ev3 == NULL) ExitProcess(WAIT_ABANDONED);
@@ -204,14 +204,14 @@ static void test_thread(DWORD curr_pid, DWORD sub_pcs_pid)
static const char* curr_expected_modules[] =
{
- "kernel32.dll",
"kernel32_test.exe"
+ "kernel32.dll",
/* FIXME: could test for ntdll on NT and Wine */
};
static const char* sub_expected_modules[] =
{
- "kernel32.dll",
"kernel32_test.exe",
+ "kernel32.dll",
"shell32.dll"
/* FIXME: could test for ntdll on NT and Wine */
};
@@ -283,6 +283,7 @@ START_TEST(toolhelp)
{
DWORD pid = GetCurrentProcessId();
int r;
+ char *p, module[MAX_PATH];
char buffer[MAX_PATH];
SECURITY_ATTRIBUTES sa;
PROCESS_INFORMATION info;
@@ -304,7 +305,7 @@ START_TEST(toolhelp)
!pProcess32First || !pProcess32Next ||
!pThread32First || !pThread32Next)
{
- skip("Needed functions are not available, most likely running on Windows NT\n");
+ win_skip("Needed functions are not available, most likely running on Windows NT\n");
return;
}
@@ -324,12 +325,18 @@ START_TEST(toolhelp)
startup.dwFlags = STARTF_USESHOWWINDOW;
startup.wShowWindow = SW_SHOWNORMAL;
- sprintf(buffer, "%s tests/toolhelp.c %u %u", selfname, (DWORD)ev1, (DWORD)ev2);
+ sprintf(buffer, "%s tests/toolhelp.c %lu %lu", selfname, (DWORD_PTR)ev1, (DWORD_PTR)ev2);
ok(CreateProcessA(NULL, buffer, NULL, NULL, TRUE, 0, NULL, NULL, &startup, &info), "CreateProcess\n");
/* wait for child to be initialized */
w = WaitForSingleObject(ev1, WAIT_TIME);
ok(w == WAIT_OBJECT_0, "Failed to wait on sub-process startup\n");
+ GetModuleFileNameA( 0, module, sizeof(module) );
+ if (!(p = strrchr( module, '\\' ))) p = module;
+ else p++;
+ curr_expected_modules[0] = p;
+ sub_expected_modules[0] = p;
+
test_process(pid, info.dwProcessId);
test_thread(pid, info.dwProcessId);
test_module(pid, curr_expected_modules, NUM_OF(curr_expected_modules));
diff --git a/rostests/winetests/kernel32/version.c b/rostests/winetests/kernel32/version.c
index d051b5d875b..5805e32f6e2 100644
--- a/rostests/winetests/kernel32/version.c
+++ b/rostests/winetests/kernel32/version.c
@@ -107,7 +107,7 @@ static void test_VerifyVersionInfo(void)
if(!pVerifyVersionInfoA || !pVerSetConditionMask)
{
- skip("Needed functions not available\n");
+ win_skip("Needed functions not available\n");
return;
}
diff --git a/rostests/winetests/kernel32/virtual.c b/rostests/winetests/kernel32/virtual.c
index 5bd0c016642..5bea0099ebd 100755
--- a/rostests/winetests/kernel32/virtual.c
+++ b/rostests/winetests/kernel32/virtual.c
@@ -22,7 +22,7 @@
#include
#include "windef.h"
-#include "psdk/winbase.h"
+#include "winbase.h"
#include "winerror.h"
#include "wine/test.h"
@@ -57,7 +57,7 @@ static void test_VirtualAllocEx(void)
{
const unsigned int alloc_size = 1<<15;
char *src, *dst;
- unsigned long bytes_written = 0, bytes_read = 0, i;
+ SIZE_T bytes_written = 0, bytes_read = 0, i;
void *addr1, *addr2;
BOOL b;
DWORD old_prot;
@@ -66,7 +66,7 @@ static void test_VirtualAllocEx(void)
/* not exported in all windows-versions */
if ((!pVirtualAllocEx) || (!pVirtualFreeEx)) {
- skip("VirtualAllocEx not found\n");
+ win_skip("Virtual{Alloc,Free}Ex not available\n");
return;
}
@@ -78,14 +78,14 @@ static void test_VirtualAllocEx(void)
PAGE_EXECUTE_READWRITE);
if (!addr1 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{ /* Win9x */
- skip("VirtualAllocEx not implemented\n");
+ win_skip("VirtualAllocEx not implemented\n");
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
return;
}
- src = HeapAlloc( GetProcessHeap(), 0, alloc_size );
- dst = HeapAlloc( GetProcessHeap(), 0, alloc_size );
+ src = VirtualAlloc( NULL, alloc_size, MEM_COMMIT, PAGE_READWRITE );
+ dst = VirtualAlloc( NULL, alloc_size, MEM_COMMIT, PAGE_READWRITE );
for (i = 0; i < alloc_size; i++)
src[i] = i & 0xff;
@@ -96,11 +96,40 @@ static void test_VirtualAllocEx(void)
b = ReadProcessMemory(hProcess, addr1, dst, alloc_size, &bytes_read);
ok(b && (bytes_read == alloc_size), "%lu bytes read\n", bytes_read);
ok(!memcmp(src, dst, alloc_size), "Data from remote process differs\n");
+
+ /* test invalid source buffers */
+
+ b = VirtualProtect( src + 0x2000, 0x2000, PAGE_NOACCESS, &old_prot );
+ ok( b, "VirtualProtect failed error %u\n", GetLastError() );
+ b = WriteProcessMemory(hProcess, addr1, src, alloc_size, &bytes_written);
+ ok( !b, "WriteProcessMemory succeeded\n" );
+ ok( GetLastError() == ERROR_NOACCESS ||
+ GetLastError() == ERROR_PARTIAL_COPY, /* vista */
+ "wrong error %u\n", GetLastError() );
+ ok( bytes_written == 0, "%lu bytes written\n", bytes_written );
+ b = ReadProcessMemory(hProcess, addr1, src, alloc_size, &bytes_read);
+ ok( !b, "ReadProcessMemory succeeded\n" );
+ ok( GetLastError() == ERROR_NOACCESS, "wrong error %u\n", GetLastError() );
+ ok( bytes_read == 0, "%lu bytes written\n", bytes_read );
+
+ b = VirtualProtect( src, 0x2000, PAGE_NOACCESS, &old_prot );
+ ok( b, "VirtualProtect failed error %u\n", GetLastError() );
+ b = WriteProcessMemory(hProcess, addr1, src, alloc_size, &bytes_written);
+ ok( !b, "WriteProcessMemory succeeded\n" );
+ ok( GetLastError() == ERROR_NOACCESS ||
+ GetLastError() == ERROR_PARTIAL_COPY, /* vista */
+ "wrong error %u\n", GetLastError() );
+ ok( bytes_written == 0, "%lu bytes written\n", bytes_written );
+ b = ReadProcessMemory(hProcess, addr1, src, alloc_size, &bytes_read);
+ ok( !b, "ReadProcessMemory succeeded\n" );
+ ok( GetLastError() == ERROR_NOACCESS, "wrong error %u\n", GetLastError() );
+ ok( bytes_read == 0, "%lu bytes written\n", bytes_read );
+
b = pVirtualFreeEx(hProcess, addr1, 0, MEM_RELEASE);
ok(b != 0, "VirtualFreeEx, error %u\n", GetLastError());
- HeapFree( GetProcessHeap(), 0, src );
- HeapFree( GetProcessHeap(), 0, dst );
+ VirtualFree( src, 0, MEM_FREE );
+ VirtualFree( dst, 0, MEM_FREE );
/*
* The following tests parallel those in test_VirtualAlloc()
@@ -674,7 +703,7 @@ static void test_NtMapViewOfSection(void)
pNtUnmapViewOfSection = (void *)GetProcAddress( GetModuleHandle("ntdll.dll"), "NtUnmapViewOfSection" );
if (!pNtMapViewOfSection || !pNtUnmapViewOfSection)
{
- skip( "NtMapViewOfSection not found\n" );
+ win_skip( "NtMapViewOfSection not available\n" );
return;
}
diff --git a/rostests/winetests/kernel32/volume.c b/rostests/winetests/kernel32/volume.c
index 97e3559c000..19fc6f08f7d 100644
--- a/rostests/winetests/kernel32/volume.c
+++ b/rostests/winetests/kernel32/volume.c
@@ -20,6 +20,7 @@
#include "wine/test.h"
#include "winbase.h"
+#include
static HINSTANCE hdll;
static BOOL (WINAPI * pGetVolumeNameForVolumeMountPointA)(LPCSTR, LPSTR, DWORD);
@@ -29,29 +30,51 @@ static BOOL (WINAPI *pFindNextVolumeA)(HANDLE,LPSTR,DWORD);
static BOOL (WINAPI *pFindVolumeClose)(HANDLE);
static UINT (WINAPI *pGetLogicalDriveStringsA)(UINT,LPSTR);
static UINT (WINAPI *pGetLogicalDriveStringsW)(UINT,LPWSTR);
+static BOOL (WINAPI *pGetVolumeInformationA)(LPCSTR, LPSTR, DWORD, LPDWORD, LPDWORD, LPDWORD, LPSTR, DWORD);
/* ############################### */
static void test_query_dos_deviceA(void)
{
char drivestr[] = "a:";
- char *p, buffer[2000];
- DWORD ret;
+ char *p, *buffer, buffer2[2000];
+ DWORD ret, ret2, buflen=32768;
BOOL found = FALSE;
if (!pFindFirstVolumeA) {
- skip("On win9x, HARDDISK and RAMDISK not present\n");
+ win_skip("On win9x, HARDDISK and RAMDISK not present\n");
return;
}
+ buffer = HeapAlloc( GetProcessHeap(), 0, buflen );
+ ret = QueryDosDeviceA( NULL, buffer, buflen );
+ ok(ret && GetLastError() != ERROR_INSUFFICIENT_BUFFER,
+ "QueryDosDevice buffer too small\n");
+ if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
+ HeapFree( GetProcessHeap(), 0, buffer );
+ return;
+ }
+ ok(ret, "QueryDosDeviceA failed to return list, last error %u\n", GetLastError());
+ if (ret) {
+ p = buffer;
+ for (;;) {
+ if (!strlen(p)) break;
+ ret2 = QueryDosDeviceA( p, buffer2, sizeof(buffer2) );
+ ok(ret2, "QueryDosDeviceA failed to return current mapping for %s, last error %u\n", p, GetLastError());
+ p += strlen(p) + 1;
+ if (ret <= (p-buffer)) break;
+ }
+ }
+
for (;drivestr[0] <= 'z'; drivestr[0]++) {
- ret = QueryDosDeviceA( drivestr, buffer, sizeof(buffer));
+ ret = QueryDosDeviceA( drivestr, buffer, buflen);
if(ret) {
for (p = buffer; *p; p++) *p = toupper(*p);
if (strstr(buffer, "HARDDISK") || strstr(buffer, "RAMDISK")) found = TRUE;
}
}
ok(found, "expected at least one devicename to contain HARDDISK or RAMDISK\n");
+ HeapFree( GetProcessHeap(), 0, buffer );
}
static void test_FindFirstVolume(void)
@@ -216,6 +239,130 @@ static void test_GetLogicalDriveStringsW(void)
HeapFree(GetProcessHeap(), 0, buf);
}
+static void test_GetVolumeInformationA(void)
+{
+ BOOL ret;
+ UINT result;
+ char Root_Dir0[]="C:";
+ char Root_Dir1[]="C:\\";
+ char Root_Dir2[]="\\\\?\\C:\\";
+ char volume[MAX_PATH+1];
+ DWORD vol_name_size=MAX_PATH+1, vol_serial_num=-1, max_comp_len=0, fs_flags=0, fs_name_len=MAX_PATH+1;
+ char vol_name_buf[MAX_PATH+1], fs_name_buf[MAX_PATH+1];
+ char windowsdir[MAX_PATH+10];
+
+ if (!pGetVolumeInformationA) {
+ win_skip("GetVolumeInformationA not found\n");
+ return;
+ }
+ if (!pGetVolumeNameForVolumeMountPointA) {
+ win_skip("GetVolumeNameForVolumeMountPointA not found\n");
+ return;
+ }
+
+ /* get windows drive letter and update strings for testing */
+ result = GetWindowsDirectory(windowsdir, sizeof(windowsdir));
+ ok(result < sizeof(windowsdir), "windowsdir is abnormally long!\n");
+ ok(result != 0, "GetWindowsDirectory: error %d\n", GetLastError());
+ Root_Dir0[0] = windowsdir[0];
+ Root_Dir1[0] = windowsdir[0];
+ Root_Dir2[4] = windowsdir[0];
+
+ /* get the unique volume name for the windows drive */
+ ret = pGetVolumeNameForVolumeMountPointA(Root_Dir1, volume, MAX_PATH);
+ ok(ret == TRUE, "GetVolumeNameForVolumeMountPointA failed\n");
+
+ /* **** now start the tests **** */
+ /* check for error on no trailing \ */
+ ret = pGetVolumeInformationA(Root_Dir0, vol_name_buf, vol_name_size, NULL,
+ NULL, NULL, fs_name_buf, fs_name_len);
+ ok(!ret && GetLastError() == ERROR_INVALID_NAME,
+ "GetVolumeInformationA w/o '\\' did not fail, last error %u\n", GetLastError());
+
+ /* try null root directory to return "root of the current directory" */
+ ret = pGetVolumeInformationA(NULL, vol_name_buf, vol_name_size, NULL,
+ NULL, NULL, fs_name_buf, fs_name_len);
+ ok(ret, "GetVolumeInformationA failed on null root dir, last error %u\n", GetLastError());
+
+ /* Try normal drive letter with trailing \ */
+ ret = pGetVolumeInformationA(Root_Dir1, vol_name_buf, vol_name_size,
+ &vol_serial_num, &max_comp_len, &fs_flags, fs_name_buf, fs_name_len);
+ ok(ret, "GetVolumeInformationA failed, root=%s, last error=%u\n", Root_Dir1, GetLastError());
+
+ /* try again with dirve letter and the "disable parsing" prefix */
+ ret = pGetVolumeInformationA(Root_Dir2, vol_name_buf, vol_name_size,
+ &vol_serial_num, &max_comp_len, &fs_flags, fs_name_buf, fs_name_len);
+ todo_wine ok(ret, "GetVolumeInformationA failed, root=%s, last error=%u\n", Root_Dir2, GetLastError());
+
+ /* try again with unique voluem name */
+ ret = pGetVolumeInformationA(volume, vol_name_buf, vol_name_size,
+ &vol_serial_num, &max_comp_len, &fs_flags, fs_name_buf, fs_name_len);
+ todo_wine ok(ret, "GetVolumeInformationA failed, root=%s, last error=%u\n", volume, GetLastError());
+
+ /* try again with device name space */
+ Root_Dir2[2] = '.';
+ ret = pGetVolumeInformationA(Root_Dir2, vol_name_buf, vol_name_size,
+ &vol_serial_num, &max_comp_len, &fs_flags, fs_name_buf, fs_name_len);
+ todo_wine ok(ret, "GetVolumeInformationA failed, root=%s, last error=%u\n", Root_Dir2, GetLastError());
+
+ /* try again with a directory off the root - should generate error */
+ if (windowsdir[strlen(windowsdir)-1] != '\\') strcat(windowsdir, "\\");
+ ret = pGetVolumeInformationA(windowsdir, vol_name_buf, vol_name_size,
+ &vol_serial_num, &max_comp_len, &fs_flags, fs_name_buf, fs_name_len);
+ todo_wine ok(!ret && GetLastError()==ERROR_DIR_NOT_ROOT,
+ "GetVolumeInformationA failed, root=%s, last error=%u\n", windowsdir, GetLastError());
+}
+
+/* Test to check that unique volume name from windows dir mount point */
+/* matches at least one of the unique volume names returned from the */
+/* FindFirstVolumeA/FindNextVolumeA list. */
+static void test_enum_vols(void)
+{
+ DWORD ret;
+ HANDLE hFind = INVALID_HANDLE_VALUE;
+ char Volume_1[MAX_PATH] = {0};
+ char Volume_2[MAX_PATH] = {0};
+ char path[] = "c:\\";
+ BOOL found = FALSE;
+ char windowsdir[MAX_PATH];
+
+ if (!pGetVolumeNameForVolumeMountPointA) {
+ win_skip("GetVolumeNameForVolumeMountPointA not found\n");
+ return;
+ }
+
+ /*get windows drive letter and update strings for testing */
+ ret = GetWindowsDirectory( windowsdir, sizeof(windowsdir) );
+ ok(ret < sizeof(windowsdir), "windowsdir is abnormally long!\n");
+ ok(ret != 0, "GetWindowsDirecory: error %d\n", GetLastError());
+ path[0] = windowsdir[0];
+
+ /* get the unique volume name for the windows drive */
+ ret = pGetVolumeNameForVolumeMountPointA( path, Volume_1, MAX_PATH );
+ ok(ret == TRUE, "GetVolumeNameForVolumeMountPointA failed\n");
+todo_wine
+ ok(strlen(Volume_1) == 49, "GetVolumeNameForVolumeMountPointA returned wrong length name %s\n", Volume_1);
+
+ /* get first unique volume name of list */
+ hFind = pFindFirstVolumeA( Volume_2, MAX_PATH );
+ ok(hFind != INVALID_HANDLE_VALUE, "FindFirstVolume failed, err=%u\n",
+ GetLastError());
+
+ do
+ {
+ /* validate correct length of unique volume name */
+ ok(strlen(Volume_2) == 49, "Find[First/Next]Volume returned wrong length name %s\n", Volume_1);
+ if (memcmp(Volume_1, Volume_2, 49) == 0)
+ {
+ found = TRUE;
+ break;
+ }
+ } while (pFindNextVolumeA( hFind, Volume_2, MAX_PATH ));
+todo_wine
+ ok(found, "volume name %s not found by Find[First/Next]Volume\n", Volume_1);
+ pFindVolumeClose( hFind );
+}
+
START_TEST(volume)
{
hdll = GetModuleHandleA("kernel32.dll");
@@ -226,6 +373,7 @@ START_TEST(volume)
pFindVolumeClose = (void *) GetProcAddress(hdll, "FindVolumeClose");
pGetLogicalDriveStringsA = (void *) GetProcAddress(hdll, "GetLogicalDriveStringsA");
pGetLogicalDriveStringsW = (void *) GetProcAddress(hdll, "GetLogicalDriveStringsW");
+ pGetVolumeInformationA = (void *) GetProcAddress(hdll, "GetVolumeInformationA");
test_query_dos_deviceA();
test_FindFirstVolume();
@@ -233,4 +381,6 @@ START_TEST(volume)
test_GetVolumeNameForVolumeMountPointW();
test_GetLogicalDriveStringsA();
test_GetLogicalDriveStringsW();
+ test_GetVolumeInformationA();
+ test_enum_vols();
}
diff --git a/rostests/winetests/mlang/mlang.c b/rostests/winetests/mlang/mlang.c
index ae5060a7cdc..0f51df0a4d6 100644
--- a/rostests/winetests/mlang/mlang.c
+++ b/rostests/winetests/mlang/mlang.c
@@ -211,7 +211,7 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
ok(lenA == expected_len, "expected lenA %u, got %u\n", expected_len, lenA);
}
-static inline void cpinfo_cmp(MIMECPINFO *cpinfo1, MIMECPINFO *cpinfo2)
+static void cpinfo_cmp(MIMECPINFO *cpinfo1, MIMECPINFO *cpinfo2)
{
ok(cpinfo1->dwFlags == cpinfo2->dwFlags, "dwFlags mismatch: %08x != %08x\n", cpinfo1->dwFlags, cpinfo2->dwFlags);
ok(cpinfo1->uiCodePage == cpinfo2->uiCodePage, "uiCodePage mismatch: %u != %u\n", cpinfo1->uiCodePage, cpinfo2->uiCodePage);
@@ -538,7 +538,7 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
IEnumCodePage_Release(iEnumCP);
}
-static inline void scriptinfo_cmp(SCRIPTINFO *sinfo1, SCRIPTINFO *sinfo2)
+static void scriptinfo_cmp(SCRIPTINFO *sinfo1, SCRIPTINFO *sinfo2)
{
ok(sinfo1->ScriptId == sinfo2->ScriptId, "ScriptId mismatch: %d != %d\n", sinfo1->ScriptId, sinfo2->ScriptId);
ok(sinfo1->uiCodePage == sinfo2->uiCodePage, "uiCodePage mismatch: %u != %u\n", sinfo1->uiCodePage, sinfo2->uiCodePage);
@@ -649,6 +649,8 @@ static void IMLangFontLink_Test(IMLangFontLink* iMLFL)
DWORD dwCodePages, dwManyCodePages;
DWORD dwCmpCodePages;
UINT CodePage;
+ static const WCHAR str[3] = { 'd', 0x0436, 0xff90 };
+ LONG processed;
HRESULT ret;
dwCodePages = ~0u;
@@ -693,21 +695,89 @@ static void IMLangFontLink_Test(IMLangFontLink* iMLFL)
dwCmpCodePages = FS_LATIN1 | FS_LATIN2 | FS_CYRILLIC | FS_GREEK | FS_TURKISH
| FS_HEBREW | FS_ARABIC | FS_BALTIC | FS_VIETNAMESE | FS_THAI
| FS_JISJAPAN | FS_CHINESESIMP | FS_WANSUNG | FS_CHINESETRAD;
- ok(IMLangFontLink_GetCharCodePages(iMLFL, 'd', &dwCodePages) == S_OK,
- "IMLangFontLink_GetCharCodePages failed\n");
- ok(dwCodePages == dwCmpCodePages, "Incorrect CodePages returned (%i)\n", dwCodePages);
+ ret = IMLangFontLink_GetCharCodePages(iMLFL, 'd', &dwCodePages);
+ ok(ret == S_OK, "IMLangFontLink_GetCharCodePages error %x\n", ret);
+ ok(dwCodePages == dwCmpCodePages, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+
+ dwCodePages = 0;
+ processed = 0;
+ ret = IMLangFontLink_GetStrCodePages(iMLFL, &str[0], 1, 0, &dwCodePages, &processed);
+ ok(ret == S_OK, "IMLangFontLink_GetStrCodePages error %x\n", ret);
+ ok(dwCodePages == dwCmpCodePages, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+ ok(processed == 1, "expected 1, got %d\n", processed);
/* Cyrillic */
dwCmpCodePages = FS_CYRILLIC | FS_JISJAPAN | FS_CHINESESIMP | FS_WANSUNG;
- ok(IMLangFontLink_GetCharCodePages(iMLFL, 0x0436, &dwCodePages) == S_OK,
- "IMLangFontLink_GetCharCodePages failed\n");
- ok(dwCodePages == dwCmpCodePages, "Incorrect CodePages returned (%i)\n", dwCodePages);
+ ret = IMLangFontLink_GetCharCodePages(iMLFL, 0x0436, &dwCodePages);
+ ok(ret == S_OK, "IMLangFontLink_GetCharCodePages error %x\n", ret);
+ ok(dwCodePages == dwCmpCodePages, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+
+ dwCodePages = 0;
+ processed = 0;
+ ret = IMLangFontLink_GetStrCodePages(iMLFL, &str[1], 1, 0, &dwCodePages, &processed);
+ ok(ret == S_OK, "IMLangFontLink_GetStrCodePages error %x\n", ret);
+ ok(dwCodePages == dwCmpCodePages, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+ ok(processed == 1, "expected 1, got %d\n", processed);
/* Japanese */
dwCmpCodePages = FS_JISJAPAN;
- ok(IMLangFontLink_GetCharCodePages(iMLFL, 0xff90, &dwCodePages) == S_OK,
- "IMLangFontLink_GetCharCodePages failed\n");
- ok(dwCodePages == dwCmpCodePages, "Incorrect CodePages returned (%i)\n", dwCodePages);
+ ret = IMLangFontLink_GetCharCodePages(iMLFL, 0xff90, &dwCodePages);
+ ok(ret == S_OK, "IMLangFontLink_GetCharCodePages error %x\n", ret);
+ ok(dwCodePages == dwCmpCodePages, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+
+ dwCodePages = 0;
+ processed = 0;
+ ret = IMLangFontLink_GetStrCodePages(iMLFL, &str[2], 1, 0, &dwCodePages, &processed);
+ ok(ret == S_OK, "IMLangFontLink_GetStrCodePages error %x\n", ret);
+ ok(dwCodePages == dwCmpCodePages, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+ ok(processed == 1, "expected 1, got %d\n", processed);
+
+ dwCmpCodePages = FS_CYRILLIC | FS_JISJAPAN | FS_CHINESESIMP | FS_WANSUNG;
+ dwCodePages = 0;
+ processed = 0;
+ ret = IMLangFontLink_GetStrCodePages(iMLFL, str, 2, 0, &dwCodePages, &processed);
+ ok(ret == S_OK, "IMLangFontLink_GetStrCodePages error %x\n", ret);
+ ok(dwCodePages == dwCmpCodePages, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+ ok(processed == 2, "expected 2, got %d\n", processed);
+
+ dwCmpCodePages = FS_JISJAPAN;
+ dwCodePages = 0;
+ processed = 0;
+ ret = IMLangFontLink_GetStrCodePages(iMLFL, str, 3, 0, &dwCodePages, &processed);
+ ok(ret == S_OK, "IMLangFontLink_GetStrCodePages error %x\n", ret);
+ ok(dwCodePages == dwCmpCodePages, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+ ok(processed == 3, "expected 3, got %d\n", processed);
+
+ dwCodePages = 0xffff;
+ processed = -1;
+ ret = IMLangFontLink_GetStrCodePages(iMLFL, &str[2], 1, 0, &dwCodePages, &processed);
+ ok(ret == S_OK, "IMLangFontLink_GetStrCodePages error %x\n", ret);
+ ok(dwCodePages == dwCmpCodePages, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+ ok(processed == 1, "expected 0, got %d\n", processed);
+
+ ret = IMLangFontLink_GetStrCodePages(iMLFL, &str[2], 1, 0, NULL, NULL);
+ ok(ret == S_OK, "IMLangFontLink_GetStrCodePages error %x\n", ret);
+
+ dwCodePages = 0xffff;
+ processed = -1;
+ ret = IMLangFontLink_GetStrCodePages(iMLFL, str, -1, 0, &dwCodePages, &processed);
+ ok(ret == E_INVALIDARG, "IMLangFontLink_GetStrCodePages should fail: %x\n", ret);
+ ok(dwCodePages == 0, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+ ok(processed == 0, "expected 0, got %d\n", processed);
+
+ dwCodePages = 0xffff;
+ processed = -1;
+ ret = IMLangFontLink_GetStrCodePages(iMLFL, NULL, 1, 0, &dwCodePages, &processed);
+ ok(ret == E_INVALIDARG, "IMLangFontLink_GetStrCodePages should fail: %x\n", ret);
+ ok(dwCodePages == 0, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+ ok(processed == 0, "expected 0, got %d\n", processed);
+
+ dwCodePages = 0xffff;
+ processed = -1;
+ ret = IMLangFontLink_GetStrCodePages(iMLFL, str, 0, 0, &dwCodePages, &processed);
+ ok(ret == E_INVALIDARG, "IMLangFontLink_GetStrCodePages should fail: %x\n", ret);
+ ok(dwCodePages == 0, "expected %x, got %x\n", dwCmpCodePages, dwCodePages);
+ ok(processed == 0, "expected 0, got %d\n", processed);
}
/* copied from libs/wine/string.c */
@@ -1395,7 +1465,7 @@ static void test_GetScriptFontInfo(IMLangFontLink2 *font_link)
hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidLatin, SCRIPTCONTF_FIXED_FONT, &nfonts, sfi);
ok(hr == S_OK, "GetScriptFontInfo failed %u\n", GetLastError());
ok(nfonts == 1, "got %u, expected 1\n", nfonts);
- ok(sfi[0].scripts, "unexpected result\n");
+ ok(sfi[0].scripts != 0, "unexpected result\n");
ok(sfi[0].wszFont[0], "unexpected result\n");
nfonts = 1;
@@ -1403,7 +1473,7 @@ static void test_GetScriptFontInfo(IMLangFontLink2 *font_link)
hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidLatin, SCRIPTCONTF_PROPORTIONAL_FONT, &nfonts, sfi);
ok(hr == S_OK, "GetScriptFontInfo failed %u\n", GetLastError());
ok(nfonts == 1, "got %u, expected 1\n", nfonts);
- ok(sfi[0].scripts, "unexpected result\n");
+ ok(sfi[0].scripts != 0, "unexpected result\n");
ok(sfi[0].wszFont[0], "unexpected result\n");
}
diff --git a/rostests/winetests/mscms/profile.c b/rostests/winetests/mscms/profile.c
index e33280ab857..100c15c4f1f 100644
--- a/rostests/winetests/mscms/profile.c
+++ b/rostests/winetests/mscms/profile.c
@@ -581,9 +581,14 @@ static void check_registry(BOOL *has_space_rgb)
trace("RegEnumValueA() failed (%d), cannot enumerate profiles\n", res);
break;
}
- ok( dwType == REG_SZ, "RegEnumValueA() returned unexpected value type (%d)\n", dwType );
- if (dwType != REG_SZ) break;
- trace(" found '%s' value containing '%s' (%d chars)\n", szName, szData, lstrlenA(szData));
+ ok( dwType == REG_SZ || dwType == REG_DWORD, "RegEnumValueA() returned unexpected value type (%d)\n", dwType );
+
+ if (dwType == REG_SZ)
+ trace(" found string value '%s' containing '%s' (%d chars)\n", szName, szData, lstrlenA(szData));
+ else if (dwType == REG_DWORD)
+ trace(" found DWORD value '%s' containing '%x'\n", szName, *(DWORD *)szData);
+ else
+ break;
}
RegCloseKey( hkIcmKey );
diff --git a/rostests/winetests/msctf/inputprocessor.c b/rostests/winetests/msctf/inputprocessor.c
index b7e2695b38d..7ba9140573a 100644
--- a/rostests/winetests/msctf/inputprocessor.c
+++ b/rostests/winetests/msctf/inputprocessor.c
@@ -23,15 +23,42 @@
#define COBJMACROS
#include "wine/test.h"
#include "winuser.h"
+#include "initguid.h"
#include "shlwapi.h"
#include "shlguid.h"
#include "comcat.h"
-#include "initguid.h"
#include "msctf.h"
+#include "olectl.h"
static ITfInputProcessorProfiles* g_ipp;
static LANGID gLangid;
-static ITfCategoryMgr * g_cm;
+static ITfCategoryMgr * g_cm = NULL;
+static ITfThreadMgr* g_tm = NULL;
+static ITfDocumentMgr *g_dm = NULL;
+static TfClientId cid = 0;
+static TfClientId tid = 0;
+
+#define SINK_UNEXPECTED 0
+#define SINK_EXPECTED 1
+#define SINK_FIRED 2
+
+static BOOL test_ShouldActivate = FALSE;
+static BOOL test_ShouldDeactivate = FALSE;
+
+static DWORD tmSinkCookie;
+static DWORD tmSinkRefCount;
+static ITfDocumentMgr *test_CurrentFocus = NULL;
+static ITfDocumentMgr *test_PrevFocus = NULL;
+static INT test_OnSetFocus = SINK_UNEXPECTED;
+static INT test_OnInitDocumentMgr = SINK_UNEXPECTED;
+static INT test_OnPushContext = SINK_UNEXPECTED;
+static INT test_OnPopContext = SINK_UNEXPECTED;
+static INT test_KEV_OnSetFocus = SINK_UNEXPECTED;
+
+HRESULT RegisterTextService(REFCLSID rclsid);
+HRESULT UnregisterTextService();
+HRESULT ThreadMgrEventSink_Constructor(IUnknown **ppOut);
+HRESULT TextStoreACP_Constructor(IUnknown **ppOut);
DEFINE_GUID(CLSID_FakeService, 0xEDE1A7AD,0x66DE,0x47E0,0xB6,0x20,0x3E,0x92,0xF8,0x24,0x6B,0xF3);
DEFINE_GUID(CLSID_TF_InputProcessorProfiles, 0x33c53a50,0xf456,0x4884,0xb0,0x49,0x85,0xfd,0x64,0x3e,0xcf,0xed);
@@ -41,6 +68,8 @@ DEFINE_GUID(GUID_TFCAT_TIP_SPEECH, 0xB5A73CD1,0x8355,0x426B,0xA1,0x61,0x25
DEFINE_GUID(GUID_TFCAT_TIP_HANDWRITING, 0x246ecb87,0xc2f2,0x4abe,0x90,0x5b,0xc8,0xb3,0x8a,0xdd,0x2c,0x43);
DEFINE_GUID (GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER, 0x046B8C80,0x1647,0x40F7,0x9B,0x21,0xB9,0x3B,0x81,0xAA,0xBC,0x1B);
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
+DEFINE_GUID(CLSID_TF_ThreadMgr, 0x529a9e6b,0x6587,0x4f23,0xab,0x9e,0x9c,0x7d,0x68,0x3e,0x3c,0x50);
+DEFINE_GUID(CLSID_PreservedKey, 0xA0ED8E55,0xCD3B,0x4274,0xB2,0x95,0xF6,0xC9,0xBA,0x2B,0x84,0x72);
static HRESULT initialize(void)
@@ -52,6 +81,9 @@ static HRESULT initialize(void)
if (SUCCEEDED(hr))
hr = CoCreateInstance (&CLSID_TF_CategoryMgr, NULL,
CLSCTX_INPROC_SERVER, &IID_ITfCategoryMgr, (void**)&g_cm);
+ if (SUCCEEDED(hr))
+ hr = CoCreateInstance (&CLSID_TF_ThreadMgr, NULL,
+ CLSCTX_INPROC_SERVER, &IID_ITfThreadMgr, (void**)&g_tm);
return hr;
}
@@ -61,6 +93,8 @@ static void cleanup(void)
ITfInputProcessorProfiles_Release(g_ipp);
if (g_cm)
ITfCategoryMgr_Release(g_cm);
+ if (g_tm)
+ ITfThreadMgr_Release(g_tm);
CoUninitialize();
}
@@ -71,6 +105,12 @@ static void test_Register(void)
static const WCHAR szDesc[] = {'F','a','k','e',' ','W','i','n','e',' ','S','e','r','v','i','c','e',0};
static const WCHAR szFile[] = {'F','a','k','e',' ','W','i','n','e',' ','S','e','r','v','i','c','e',' ','F','i','l','e',0};
+ hr = ITfInputProcessorProfiles_GetCurrentLanguage(g_ipp,&gLangid);
+ ok(SUCCEEDED(hr),"Unable to get current language id\n");
+ trace("Current Language %x\n",gLangid);
+
+ hr = RegisterTextService(&CLSID_FakeService);
+ ok(SUCCEEDED(hr),"Unable to register COM for TextService\n");
hr = ITfInputProcessorProfiles_Register(g_ipp, &CLSID_FakeService);
ok(SUCCEEDED(hr),"Unable to register text service(%x)\n",hr);
hr = ITfInputProcessorProfiles_AddLanguageProfile(g_ipp, &CLSID_FakeService, gLangid, &CLSID_FakeService, szDesc, sizeof(szDesc)/sizeof(WCHAR), szFile, sizeof(szFile)/sizeof(WCHAR), 1);
@@ -82,6 +122,7 @@ static void test_Unregister(void)
HRESULT hr;
hr = ITfInputProcessorProfiles_Unregister(g_ipp, &CLSID_FakeService);
ok(SUCCEEDED(hr),"Unable to unregister text service(%x)\n",hr);
+ UnregisterTextService();
}
static void test_EnumInputProcessorInfo(void)
@@ -115,7 +156,7 @@ static void test_EnumLanguageProfiles(void)
{
found = TRUE;
ok(profile.langid == gLangid, "LangId Incorrect\n");
- todo_wine ok(IsEqualGUID(&profile.catid,&GUID_TFCAT_TIP_KEYBOARD), "CatId Incorrect\n");
+ ok(IsEqualGUID(&profile.catid,&GUID_TFCAT_TIP_KEYBOARD), "CatId Incorrect\n");
ok(IsEqualGUID(&profile.guidProfile,&CLSID_FakeService), "guidProfile Incorrect\n");
}
}
@@ -128,24 +169,549 @@ static void test_RegisterCategory(void)
HRESULT hr;
hr = ITfCategoryMgr_RegisterCategory(g_cm, &CLSID_FakeService, &GUID_TFCAT_TIP_KEYBOARD, &CLSID_FakeService);
ok(SUCCEEDED(hr),"ITfCategoryMgr_RegisterCategory failed\n");
+ hr = ITfCategoryMgr_RegisterCategory(g_cm, &CLSID_FakeService, &GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER, &CLSID_FakeService);
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_RegisterCategory failed\n");
}
static void test_UnregisterCategory(void)
{
HRESULT hr;
hr = ITfCategoryMgr_UnregisterCategory(g_cm, &CLSID_FakeService, &GUID_TFCAT_TIP_KEYBOARD, &CLSID_FakeService);
- todo_wine ok(SUCCEEDED(hr),"ITfCategoryMgr_UnregisterCategory failed\n");
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_UnregisterCategory failed\n");
+ hr = ITfCategoryMgr_UnregisterCategory(g_cm, &CLSID_FakeService, &GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER, &CLSID_FakeService);
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_UnregisterCategory failed\n");
+}
+
+static void test_FindClosestCategory(void)
+{
+ GUID output;
+ HRESULT hr;
+ const GUID *list[3] = {&GUID_TFCAT_TIP_SPEECH, &GUID_TFCAT_TIP_KEYBOARD, &GUID_TFCAT_TIP_HANDWRITING};
+
+ hr = ITfCategoryMgr_FindClosestCategory(g_cm, &CLSID_FakeService, &output, NULL, 0);
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_FindClosestCategory failed (%x)\n",hr);
+ ok(IsEqualGUID(&output,&GUID_TFCAT_DISPLAYATTRIBUTEPROVIDER),"Wrong GUID\n");
+
+ hr = ITfCategoryMgr_FindClosestCategory(g_cm, &CLSID_FakeService, &output, list, 1);
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_FindClosestCategory failed (%x)\n",hr);
+ ok(IsEqualGUID(&output,&GUID_NULL),"Wrong GUID\n");
+
+ hr = ITfCategoryMgr_FindClosestCategory(g_cm, &CLSID_FakeService, &output, list, 3);
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_FindClosestCategory failed (%x)\n",hr);
+ ok(IsEqualGUID(&output,&GUID_TFCAT_TIP_KEYBOARD),"Wrong GUID\n");
+}
+
+static void test_Enable(void)
+{
+ HRESULT hr;
+ BOOL enabled = FALSE;
+
+ hr = ITfInputProcessorProfiles_EnableLanguageProfile(g_ipp,&CLSID_FakeService, gLangid, &CLSID_FakeService, TRUE);
+ ok(SUCCEEDED(hr),"Failed to enable text service\n");
+ hr = ITfInputProcessorProfiles_IsEnabledLanguageProfile(g_ipp,&CLSID_FakeService, gLangid, &CLSID_FakeService, &enabled);
+ ok(SUCCEEDED(hr),"Failed to get enabled state\n");
+ ok(enabled == TRUE,"enabled state incorrect\n");
+}
+
+static void test_Disable(void)
+{
+ HRESULT hr;
+
+ trace("Disabling\n");
+ hr = ITfInputProcessorProfiles_EnableLanguageProfile(g_ipp,&CLSID_FakeService, gLangid, &CLSID_FakeService, FALSE);
+ ok(SUCCEEDED(hr),"Failed to disable text service\n");
+}
+
+static void test_ThreadMgrAdviseSinks(void)
+{
+ ITfSource *source = NULL;
+ HRESULT hr;
+ IUnknown *sink;
+
+ hr = ITfThreadMgr_QueryInterface(g_tm, &IID_ITfSource, (LPVOID*)&source);
+ ok(SUCCEEDED(hr),"Failed to get IID_ITfSource for ThreadMgr\n");
+ if (!source)
+ return;
+
+ ThreadMgrEventSink_Constructor(&sink);
+
+ tmSinkRefCount = 1;
+ tmSinkCookie = 0;
+ hr = ITfSource_AdviseSink(source,&IID_ITfThreadMgrEventSink, sink, &tmSinkCookie);
+ ok(SUCCEEDED(hr),"Failed to Advise Sink\n");
+ ok(tmSinkCookie!=0,"Failed to get sink cookie\n");
+
+ /* Advising the sink adds a ref, Relesing here lets the object be deleted
+ when unadvised */
+ tmSinkRefCount = 2;
+ IUnknown_Release(sink);
+ ITfSource_Release(source);
+}
+
+static void test_ThreadMgrUnadviseSinks(void)
+{
+ ITfSource *source = NULL;
+ HRESULT hr;
+
+ hr = ITfThreadMgr_QueryInterface(g_tm, &IID_ITfSource, (LPVOID*)&source);
+ ok(SUCCEEDED(hr),"Failed to get IID_ITfSource for ThreadMgr\n");
+ if (!source)
+ return;
+
+ tmSinkRefCount = 1;
+ hr = ITfSource_UnadviseSink(source, tmSinkCookie);
+ ok(SUCCEEDED(hr),"Failed to unadvise Sink\n");
+ ITfSource_Release(source);
+}
+
+/**********************************************************************
+ * ITfKeyEventSink
+ **********************************************************************/
+typedef struct tagKeyEventSink
+{
+ const ITfKeyEventSinkVtbl *KeyEventSinkVtbl;
+ LONG refCount;
+} KeyEventSink;
+
+static void KeyEventSink_Destructor(KeyEventSink *This)
+{
+ HeapFree(GetProcessHeap(),0,This);
+}
+
+static HRESULT WINAPI KeyEventSink_QueryInterface(ITfKeyEventSink *iface, REFIID iid, LPVOID *ppvOut)
+{
+ KeyEventSink *This = (KeyEventSink *)iface;
+ *ppvOut = NULL;
+
+ if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfKeyEventSink))
+ {
+ *ppvOut = This;
+ }
+
+ if (*ppvOut)
+ {
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI KeyEventSink_AddRef(ITfKeyEventSink *iface)
+{
+ KeyEventSink *This = (KeyEventSink *)iface;
+ return InterlockedIncrement(&This->refCount);
+}
+
+static ULONG WINAPI KeyEventSink_Release(ITfKeyEventSink *iface)
+{
+ KeyEventSink *This = (KeyEventSink *)iface;
+ ULONG ret;
+
+ ret = InterlockedDecrement(&This->refCount);
+ if (ret == 0)
+ KeyEventSink_Destructor(This);
+ return ret;
+}
+
+static HRESULT WINAPI KeyEventSink_OnSetFocus(ITfKeyEventSink *iface,
+ BOOL fForeground)
+{
+ ok(test_KEV_OnSetFocus == SINK_EXPECTED,"Unexpected KeyEventSink_OnSetFocus\n");
+ test_KEV_OnSetFocus = SINK_FIRED;
+ return S_OK;
+}
+
+static HRESULT WINAPI KeyEventSink_OnTestKeyDown(ITfKeyEventSink *iface,
+ ITfContext *pic, WPARAM wParam, LPARAM lParam, BOOL *pfEaten)
+{
+ trace("\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI KeyEventSink_OnTestKeyUp(ITfKeyEventSink *iface,
+ ITfContext *pic, WPARAM wParam, LPARAM lParam, BOOL *pfEaten)
+{
+ trace("\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI KeyEventSink_OnKeyDown(ITfKeyEventSink *iface,
+ ITfContext *pic, WPARAM wParam, LPARAM lParam, BOOL *pfEaten)
+{
+ trace("\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI KeyEventSink_OnKeyUp(ITfKeyEventSink *iface,
+ ITfContext *pic, WPARAM wParam, LPARAM lParam, BOOL *pfEaten)
+{
+ trace("\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI KeyEventSink_OnPreservedKey(ITfKeyEventSink *iface,
+ ITfContext *pic, REFGUID rguid, BOOL *pfEaten)
+{
+ trace("\n");
+ return S_OK;
+}
+
+static const ITfKeyEventSinkVtbl KeyEventSink_KeyEventSinkVtbl =
+{
+ KeyEventSink_QueryInterface,
+ KeyEventSink_AddRef,
+ KeyEventSink_Release,
+
+ KeyEventSink_OnSetFocus,
+ KeyEventSink_OnTestKeyDown,
+ KeyEventSink_OnTestKeyUp,
+ KeyEventSink_OnKeyDown,
+ KeyEventSink_OnKeyUp,
+ KeyEventSink_OnPreservedKey
+};
+
+HRESULT KeyEventSink_Constructor(ITfKeyEventSink **ppOut)
+{
+ KeyEventSink *This;
+
+ This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(KeyEventSink));
+ if (This == NULL)
+ return E_OUTOFMEMORY;
+
+ This->KeyEventSinkVtbl = &KeyEventSink_KeyEventSinkVtbl;
+ This->refCount = 1;
+
+ *ppOut = (ITfKeyEventSink*)This;
+ return S_OK;
+}
+
+
+static void test_KeystrokeMgr(void)
+{
+ ITfKeystrokeMgr *keymgr= NULL;
+ HRESULT hr;
+ TF_PRESERVEDKEY tfpk;
+ BOOL preserved;
+ ITfKeyEventSink *sink;
+
+ KeyEventSink_Constructor(&sink);
+
+ hr = ITfThreadMgr_QueryInterface(g_tm, &IID_ITfKeystrokeMgr, (LPVOID*)&keymgr);
+ ok(SUCCEEDED(hr),"Failed to get IID_ITfKeystrokeMgr for ThreadMgr\n");
+
+ tfpk.uVKey = 'A';
+ tfpk.uModifiers = TF_MOD_SHIFT;
+
+ test_KEV_OnSetFocus = SINK_EXPECTED;
+ hr = ITfKeystrokeMgr_AdviseKeyEventSink(keymgr,tid,sink,TRUE);
+ todo_wine ok(SUCCEEDED(hr),"ITfKeystrokeMgr_AdviseKeyEventSink failed\n");
+ todo_wine ok(test_KEV_OnSetFocus == SINK_FIRED, "KeyEventSink_OnSetFocus not fired as expected\n");
+
+ hr =ITfKeystrokeMgr_PreserveKey(keymgr, 0, &CLSID_PreservedKey, &tfpk, NULL, 0);
+ ok(hr==E_INVALIDARG,"ITfKeystrokeMgr_PreserveKey inproperly succeeded\n");
+
+ hr =ITfKeystrokeMgr_PreserveKey(keymgr, tid, &CLSID_PreservedKey, &tfpk, NULL, 0);
+ ok(SUCCEEDED(hr),"ITfKeystrokeMgr_PreserveKey failed\n");
+
+ hr =ITfKeystrokeMgr_PreserveKey(keymgr, tid, &CLSID_PreservedKey, &tfpk, NULL, 0);
+ ok(hr == TF_E_ALREADY_EXISTS,"ITfKeystrokeMgr_PreserveKey inproperly succeeded\n");
+
+ preserved = FALSE;
+ hr = ITfKeystrokeMgr_IsPreservedKey(keymgr, &CLSID_PreservedKey, &tfpk, &preserved);
+ ok(hr == S_OK, "ITfKeystrokeMgr_IsPreservedKey failed\n");
+ if (hr == S_OK) ok(preserved == TRUE,"misreporting preserved key\n");
+
+ hr = ITfKeystrokeMgr_UnpreserveKey(keymgr, &CLSID_PreservedKey,&tfpk);
+ ok(SUCCEEDED(hr),"ITfKeystrokeMgr_UnpreserveKey failed\n");
+
+ hr = ITfKeystrokeMgr_IsPreservedKey(keymgr, &CLSID_PreservedKey, &tfpk, &preserved);
+ ok(hr == S_FALSE, "ITfKeystrokeMgr_IsPreservedKey failed\n");
+ if (hr == S_FALSE) ok(preserved == FALSE,"misreporting preserved key\n");
+
+ hr = ITfKeystrokeMgr_UnpreserveKey(keymgr, &CLSID_PreservedKey,&tfpk);
+ ok(hr==CONNECT_E_NOCONNECTION,"ITfKeystrokeMgr_UnpreserveKey inproperly succeeded\n");
+
+ hr = ITfKeystrokeMgr_UnadviseKeyEventSink(keymgr,tid);
+ todo_wine ok(SUCCEEDED(hr),"ITfKeystrokeMgr_UnadviseKeyEventSink failed\n");
+
+ ITfKeystrokeMgr_Release(keymgr);
+ ITfKeyEventSink_Release(sink);
+}
+
+static void test_Activate(void)
+{
+ HRESULT hr;
+
+ hr = ITfInputProcessorProfiles_ActivateLanguageProfile(g_ipp,&CLSID_FakeService,gLangid,&CLSID_FakeService);
+ ok(SUCCEEDED(hr),"Failed to Activate text service\n");
+}
+
+static inline int check_context_refcount(ITfContext *iface)
+{
+ IUnknown_AddRef(iface);
+ return IUnknown_Release(iface);
+}
+
+static void test_startSession(void)
+{
+ HRESULT hr;
+ DWORD cnt;
+ DWORD editCookie;
+ ITfDocumentMgr *dmtest;
+ ITfContext *cxt,*cxt2,*cxt3,*cxtTest;
+ ITextStoreACP *ts;
+ TfClientId cid2 = 0;
+
+ hr = ITfThreadMgr_Deactivate(g_tm);
+ ok(hr == E_UNEXPECTED,"Deactivate should have failed with E_UNEXPECTED\n");
+
+ test_ShouldActivate = TRUE;
+ hr = ITfThreadMgr_Activate(g_tm,&cid);
+ ok(SUCCEEDED(hr),"Failed to Activate\n");
+ ok(cid != tid,"TextService id mistakenly matches Client id\n");
+
+ test_ShouldActivate = FALSE;
+ hr = ITfThreadMgr_Activate(g_tm,&cid2);
+ ok(SUCCEEDED(hr),"Failed to Activate\n");
+ ok (cid == cid2, "Second activate client ID does not match\n");
+
+ hr = ITfThreadMgr_Deactivate(g_tm);
+ ok(SUCCEEDED(hr),"Failed to Deactivate\n");
+
+ hr = ITfThreadMgr_CreateDocumentMgr(g_tm,&g_dm);
+ ok(SUCCEEDED(hr),"CreateDocumentMgr failed\n");
+
+ hr = ITfThreadMgr_GetFocus(g_tm,&dmtest);
+ ok(SUCCEEDED(hr),"GetFocus Failed\n");
+ ok(dmtest == NULL,"Initial focus not null\n");
+
+ test_CurrentFocus = g_dm;
+ test_PrevFocus = NULL;
+ test_OnSetFocus = SINK_EXPECTED;
+ hr = ITfThreadMgr_SetFocus(g_tm,g_dm);
+ ok(SUCCEEDED(hr),"SetFocus Failed\n");
+ ok(test_OnSetFocus == SINK_FIRED, "OnSetFocus sink not called\n");
+ test_OnSetFocus = SINK_UNEXPECTED;
+
+ hr = ITfThreadMgr_GetFocus(g_tm,&dmtest);
+ ok(SUCCEEDED(hr),"GetFocus Failed\n");
+ ok(g_dm == dmtest,"Expected DocumentMgr not focused\n");
+
+ cnt = ITfDocumentMgr_Release(g_dm);
+ ok(cnt == 2,"DocumentMgr refcount not expected (2 vs %i)\n",cnt);
+
+ hr = ITfThreadMgr_GetFocus(g_tm,&dmtest);
+ ok(SUCCEEDED(hr),"GetFocus Failed\n");
+ ok(g_dm == dmtest,"Expected DocumentMgr not focused\n");
+
+ TextStoreACP_Constructor((IUnknown**)&ts);
+
+ hr = ITfDocumentMgr_CreateContext(g_dm, cid, 0, (IUnknown*)ts, &cxt, &editCookie);
+ ok(SUCCEEDED(hr),"CreateContext Failed\n");
+
+ hr = ITfDocumentMgr_CreateContext(g_dm, cid, 0, NULL, &cxt2, &editCookie);
+ ok(SUCCEEDED(hr),"CreateContext Failed\n");
+
+ hr = ITfDocumentMgr_CreateContext(g_dm, cid, 0, NULL, &cxt3, &editCookie);
+ ok(SUCCEEDED(hr),"CreateContext Failed\n");
+
+ cnt = check_context_refcount(cxt);
+ test_OnPushContext = SINK_EXPECTED;
+ test_OnInitDocumentMgr = SINK_EXPECTED;
+ hr = ITfDocumentMgr_Push(g_dm, cxt);
+ ok(SUCCEEDED(hr),"Push Failed\n");
+ ok(check_context_refcount(cxt) > cnt, "Ref count did not increase\n");
+ ok(test_OnPushContext == SINK_FIRED, "OnPushContext sink not fired\n");
+ ok(test_OnInitDocumentMgr == SINK_FIRED, "OnInitDocumentMgr sink not fired\n");
+
+ hr = ITfDocumentMgr_GetTop(g_dm, &cxtTest);
+ ok(SUCCEEDED(hr),"GetTop Failed\n");
+ ok(cxtTest == cxt, "Wrong context on top\n");
+ ok(check_context_refcount(cxt) > cnt, "Ref count did not increase\n");
+ cnt = ITfContext_Release(cxtTest);
+
+ hr = ITfDocumentMgr_GetBase(g_dm, &cxtTest);
+ ok(SUCCEEDED(hr),"GetBase Failed\n");
+ ok(cxtTest == cxt, "Wrong context on Base\n");
+ ok(check_context_refcount(cxt) > cnt, "Ref count did not increase\n");
+ ITfContext_Release(cxtTest);
+
+ check_context_refcount(cxt2);
+ test_OnPushContext = SINK_EXPECTED;
+ hr = ITfDocumentMgr_Push(g_dm, cxt2);
+ ok(SUCCEEDED(hr),"Push Failed\n");
+ ok(test_OnPushContext == SINK_FIRED, "OnPushContext sink not fired\n");
+
+ cnt = check_context_refcount(cxt2);
+ hr = ITfDocumentMgr_GetTop(g_dm, &cxtTest);
+ ok(SUCCEEDED(hr),"GetTop Failed\n");
+ ok(cxtTest == cxt2, "Wrong context on top\n");
+ ok(check_context_refcount(cxt2) > cnt, "Ref count did not increase\n");
+ ITfContext_Release(cxtTest);
+
+ cnt = check_context_refcount(cxt);
+ hr = ITfDocumentMgr_GetBase(g_dm, &cxtTest);
+ ok(SUCCEEDED(hr),"GetBase Failed\n");
+ ok(cxtTest == cxt, "Wrong context on Base\n");
+ ok(check_context_refcount(cxt) > cnt, "Ref count did not increase\n");
+ ITfContext_Release(cxtTest);
+
+ cnt = check_context_refcount(cxt3);
+ hr = ITfDocumentMgr_Push(g_dm, cxt3);
+ ok(!SUCCEEDED(hr),"Push Succeeded\n");
+ ok(check_context_refcount(cxt3) == cnt, "Ref changed\n");
+
+ cnt = check_context_refcount(cxt2);
+ hr = ITfDocumentMgr_GetTop(g_dm, &cxtTest);
+ ok(SUCCEEDED(hr),"GetTop Failed\n");
+ ok(cxtTest == cxt2, "Wrong context on top\n");
+ ok(check_context_refcount(cxt2) > cnt, "Ref count did not increase\n");
+ ITfContext_Release(cxtTest);
+
+ cnt = check_context_refcount(cxt);
+ hr = ITfDocumentMgr_GetBase(g_dm, &cxtTest);
+ ok(SUCCEEDED(hr),"GetBase Failed\n");
+ ok(cxtTest == cxt, "Wrong context on Base\n");
+ ok(check_context_refcount(cxt) > cnt, "Ref count did not increase\n");
+ ITfContext_Release(cxtTest);
+
+ cnt = check_context_refcount(cxt2);
+ test_OnPopContext = SINK_EXPECTED;
+ hr = ITfDocumentMgr_Pop(g_dm, 0);
+ ok(SUCCEEDED(hr),"Pop Failed\n");
+ ok(check_context_refcount(cxt2) < cnt, "Ref count did not decrease\n");
+ ok(test_OnPopContext == SINK_FIRED, "OnPopContext sink not fired\n");
+
+ hr = ITfDocumentMgr_GetTop(g_dm, &cxtTest);
+ ok(SUCCEEDED(hr),"GetTop Failed\n");
+ ok(cxtTest == cxt, "Wrong context on top\n");
+ ITfContext_Release(cxtTest);
+
+ hr = ITfDocumentMgr_GetBase(g_dm, &cxtTest);
+ ok(SUCCEEDED(hr),"GetBase Failed\n");
+ ok(cxtTest == cxt, "Wrong context on base\n");
+ ITfContext_Release(cxtTest);
+
+ hr = ITfDocumentMgr_Pop(g_dm, 0);
+ ok(!SUCCEEDED(hr),"Pop Succeeded\n");
+
+ hr = ITfDocumentMgr_GetTop(g_dm, &cxtTest);
+ ok(SUCCEEDED(hr),"GetTop Failed\n");
+ ok(cxtTest == cxt, "Wrong context on top\n");
+ ITfContext_Release(cxtTest);
+
+ hr = ITfDocumentMgr_GetBase(g_dm, &cxtTest);
+ ok(SUCCEEDED(hr),"GetBase Failed\n");
+ ok(cxtTest == cxt, "Wrong context on base\n");
+ ITfContext_Release(cxtTest);
+
+ ITfContext_Release(cxt);
+ ITfContext_Release(cxt2);
+ ITfContext_Release(cxt3);
+}
+
+static void test_endSession(void)
+{
+ HRESULT hr;
+ test_ShouldDeactivate = TRUE;
+ test_CurrentFocus = NULL;
+ test_PrevFocus = g_dm;
+ test_OnSetFocus = SINK_EXPECTED;
+ hr = ITfThreadMgr_Deactivate(g_tm);
+ ok(SUCCEEDED(hr),"Failed to Deactivate\n");
+ ok(test_OnSetFocus == SINK_FIRED, "OnSetFocus sink not called\n");
+ test_OnSetFocus = SINK_UNEXPECTED;
+}
+
+static void test_TfGuidAtom(void)
+{
+ GUID gtest,g1;
+ HRESULT hr;
+ TfGuidAtom atom1,atom2;
+ BOOL equal;
+
+ CoCreateGuid(>est);
+
+ /* msdn reports this should return E_INVALIDARG. However my test show it crashing (winxp)*/
+ /*
+ hr = ITfCategoryMgr_RegisterGUID(g_cm,>est,NULL);
+ ok(hr==E_INVALIDARG,"ITfCategoryMgr_RegisterGUID should have failed\n");
+ */
+ hr = ITfCategoryMgr_RegisterGUID(g_cm,>est,&atom1);
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_RegisterGUID failed\n");
+ hr = ITfCategoryMgr_RegisterGUID(g_cm,>est,&atom2);
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_RegisterGUID failed\n");
+ ok(atom1 == atom2,"atoms do not match\n");
+ hr = ITfCategoryMgr_GetGUID(g_cm,atom2,NULL);
+ ok(hr==E_INVALIDARG,"ITfCategoryMgr_GetGUID should have failed\n");
+ hr = ITfCategoryMgr_GetGUID(g_cm,atom2,&g1);
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_GetGUID failed\n");
+ ok(IsEqualGUID(&g1,>est),"guids do not match\n");
+ hr = ITfCategoryMgr_IsEqualTfGuidAtom(g_cm,atom1,>est,NULL);
+ ok(hr==E_INVALIDARG,"ITfCategoryMgr_IsEqualTfGuidAtom should have failed\n");
+ hr = ITfCategoryMgr_IsEqualTfGuidAtom(g_cm,atom1,>est,&equal);
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_IsEqualTfGuidAtom failed\n");
+ ok(equal == TRUE,"Equal value invalid\n");
+
+ /* show that cid and tid TfClientIds are also TfGuidAtoms */
+ hr = ITfCategoryMgr_IsEqualTfGuidAtom(g_cm,tid,&CLSID_FakeService,&equal);
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_IsEqualTfGuidAtom failed\n");
+ ok(equal == TRUE,"Equal value invalid\n");
+ hr = ITfCategoryMgr_GetGUID(g_cm,cid,&g1);
+ ok(SUCCEEDED(hr),"ITfCategoryMgr_GetGUID failed\n");
+ ok(!IsEqualGUID(&g1,&GUID_NULL),"guid should not be NULL\n");
+}
+
+static void test_ClientId(void)
+{
+ ITfClientId *pcid;
+ TfClientId id1,id2;
+ HRESULT hr;
+ GUID g2;
+
+ hr = ITfThreadMgr_QueryInterface(g_tm, &IID_ITfClientId, (LPVOID*)&pcid);
+ ok(SUCCEEDED(hr),"Unable to aquire ITfClientId interface\n");
+
+ CoCreateGuid(&g2);
+
+ hr = ITfClientId_GetClientId(pcid,&GUID_NULL,&id1);
+ ok(SUCCEEDED(hr),"GetClientId failed\n");
+ hr = ITfClientId_GetClientId(pcid,&GUID_NULL,&id2);
+ ok(SUCCEEDED(hr),"GetClientId failed\n");
+ ok(id1==id2,"Id's for GUID_NULL do not match\n");
+ hr = ITfClientId_GetClientId(pcid,&CLSID_FakeService,&id2);
+ ok(SUCCEEDED(hr),"GetClientId failed\n");
+ ok(id2!=id1,"Id matches GUID_NULL\n");
+ ok(id2==tid,"Id for CLSID_FakeService not matching tid\n");
+ ok(id2!=cid,"Id for CLSID_FakeService matching cid\n");
+ hr = ITfClientId_GetClientId(pcid,&g2,&id2);
+ ok(SUCCEEDED(hr),"GetClientId failed\n");
+ ok(id2!=id1,"Id matches GUID_NULL\n");
+ ok(id2!=tid,"Id for random guid matching tid\n");
+ ok(id2!=cid,"Id for random guid matching cid\n");
+ ITfClientId_Release(pcid);
}
START_TEST(inputprocessor)
{
if (SUCCEEDED(initialize()))
{
- gLangid = GetUserDefaultLCID();
test_Register();
test_RegisterCategory();
test_EnumInputProcessorInfo();
+ test_Enable();
+ test_ThreadMgrAdviseSinks();
+ test_Activate();
+ test_startSession();
+ test_TfGuidAtom();
+ test_ClientId();
+ test_KeystrokeMgr();
+ test_endSession();
test_EnumLanguageProfiles();
+ test_FindClosestCategory();
+ test_Disable();
+ test_ThreadMgrUnadviseSinks();
test_UnregisterCategory();
test_Unregister();
}
@@ -153,3 +719,593 @@ START_TEST(inputprocessor)
skip("Unable to create InputProcessor\n");
cleanup();
}
+
+/**********************************************************************
+ * ITextStoreACP
+ **********************************************************************/
+typedef struct tagTextStoreACP
+{
+ const ITextStoreACPVtbl *TextStoreACPVtbl;
+ LONG refCount;
+} TextStoreACP;
+
+static void TextStoreACP_Destructor(TextStoreACP *This)
+{
+ HeapFree(GetProcessHeap(),0,This);
+}
+
+static HRESULT WINAPI TextStoreACP_QueryInterface(ITextStoreACP *iface, REFIID iid, LPVOID *ppvOut)
+{
+ TextStoreACP *This = (TextStoreACP *)iface;
+ *ppvOut = NULL;
+
+ if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITextStoreACP))
+ {
+ *ppvOut = This;
+ }
+
+ if (*ppvOut)
+ {
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI TextStoreACP_AddRef(ITextStoreACP *iface)
+{
+ TextStoreACP *This = (TextStoreACP *)iface;
+ return InterlockedIncrement(&This->refCount);
+}
+
+static ULONG WINAPI TextStoreACP_Release(ITextStoreACP *iface)
+{
+ TextStoreACP *This = (TextStoreACP *)iface;
+ ULONG ret;
+
+ ret = InterlockedDecrement(&This->refCount);
+ if (ret == 0)
+ TextStoreACP_Destructor(This);
+ return ret;
+}
+
+static HRESULT WINAPI TextStoreACP_AdviseSink(ITextStoreACP *iface,
+ REFIID riid, IUnknown *punk, DWORD dwMask)
+{
+ trace("\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI TextStoreACP_UnadviseSink(ITextStoreACP *iface,
+ IUnknown *punk)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_RequestLock(ITextStoreACP *iface,
+ DWORD dwLockFlags, HRESULT *phrSession)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetStatus(ITextStoreACP *iface,
+ TS_STATUS *pdcs)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_QueryInsert(ITextStoreACP *iface,
+ LONG acpTestStart, LONG acpTestEnd, ULONG cch, LONG *pacpResultStart,
+ LONG *pacpResultEnd)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetSelection(ITextStoreACP *iface,
+ ULONG ulIndex, ULONG ulCount, TS_SELECTION_ACP *pSelection, ULONG *pcFetched)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_SetSelection(ITextStoreACP *iface,
+ ULONG ulCount, const TS_SELECTION_ACP *pSelection)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetText(ITextStoreACP *iface,
+ LONG acpStart, LONG acpEnd, WCHAR *pchPlain, ULONG cchPlainReq,
+ ULONG *pcchPlainRet, TS_RUNINFO *prgRunInfo, ULONG cRunInfoReq,
+ ULONG *pcRunInfoRet, LONG *pacpNext)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_SetText(ITextStoreACP *iface,
+ DWORD dwFlags, LONG acpStart, LONG acpEnd, const WCHAR *pchText,
+ ULONG cch, TS_TEXTCHANGE *pChange)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetFormattedText(ITextStoreACP *iface,
+ LONG acpStart, LONG acpEnd, IDataObject **ppDataObject)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetEmbedded(ITextStoreACP *iface,
+ LONG acpPos, REFGUID rguidService, REFIID riid, IUnknown **ppunk)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_QueryInsertEmbedded(ITextStoreACP *iface,
+ const GUID *pguidService, const FORMATETC *pFormatEtc, BOOL *pfInsertable)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_InsertEmbedded(ITextStoreACP *iface,
+ DWORD dwFlags, LONG acpStart, LONG acpEnd, IDataObject *pDataObject,
+ TS_TEXTCHANGE *pChange)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_InsertTextAtSelection(ITextStoreACP *iface,
+ DWORD dwFlags, const WCHAR *pchText, ULONG cch, LONG *pacpStart,
+ LONG *pacpEnd, TS_TEXTCHANGE *pChange)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_InsertEmbeddedAtSelection(ITextStoreACP *iface,
+ DWORD dwFlags, IDataObject *pDataObject, LONG *pacpStart, LONG *pacpEnd,
+ TS_TEXTCHANGE *pChange)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_RequestSupportedAttrs(ITextStoreACP *iface,
+ DWORD dwFlags, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_RequestAttrsAtPosition(ITextStoreACP *iface,
+ LONG acpPos, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs,
+ DWORD dwFlags)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_RequestAttrsTransitioningAtPosition(ITextStoreACP *iface,
+ LONG acpPos, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs,
+ DWORD dwFlags)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_FindNextAttrTransition(ITextStoreACP *iface,
+ LONG acpStart, LONG acpHalt, ULONG cFilterAttrs, const TS_ATTRID *paFilterAttrs,
+ DWORD dwFlags, LONG *pacpNext, BOOL *pfFound, LONG *plFoundOffset)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_RetrieveRequestedAttrs(ITextStoreACP *iface,
+ ULONG ulCount, TS_ATTRVAL *paAttrVals, ULONG *pcFetched)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetEndACP(ITextStoreACP *iface,
+ LONG *pacp)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetActiveView(ITextStoreACP *iface,
+ TsViewCookie *pvcView)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetACPFromPoint(ITextStoreACP *iface,
+ TsViewCookie vcView, const POINT *ptScreen, DWORD dwFlags,
+ LONG *pacp)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetTextExt(ITextStoreACP *iface,
+ TsViewCookie vcView, LONG acpStart, LONG acpEnd, RECT *prc,
+ BOOL *pfClipped)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetScreenExt(ITextStoreACP *iface,
+ TsViewCookie vcView, RECT *prc)
+{
+ trace("\n");
+ return S_OK;
+}
+static HRESULT WINAPI TextStoreACP_GetWnd(ITextStoreACP *iface,
+ TsViewCookie vcView, HWND *phwnd)
+{
+ trace("\n");
+ return S_OK;
+}
+
+static const ITextStoreACPVtbl TextStoreACP_TextStoreACPVtbl =
+{
+ TextStoreACP_QueryInterface,
+ TextStoreACP_AddRef,
+ TextStoreACP_Release,
+
+ TextStoreACP_AdviseSink,
+ TextStoreACP_UnadviseSink,
+ TextStoreACP_RequestLock,
+ TextStoreACP_GetStatus,
+ TextStoreACP_QueryInsert,
+ TextStoreACP_GetSelection,
+ TextStoreACP_SetSelection,
+ TextStoreACP_GetText,
+ TextStoreACP_SetText,
+ TextStoreACP_GetFormattedText,
+ TextStoreACP_GetEmbedded,
+ TextStoreACP_QueryInsertEmbedded,
+ TextStoreACP_InsertEmbedded,
+ TextStoreACP_InsertTextAtSelection,
+ TextStoreACP_InsertEmbeddedAtSelection,
+ TextStoreACP_RequestSupportedAttrs,
+ TextStoreACP_RequestAttrsAtPosition,
+ TextStoreACP_RequestAttrsTransitioningAtPosition,
+ TextStoreACP_FindNextAttrTransition,
+ TextStoreACP_RetrieveRequestedAttrs,
+ TextStoreACP_GetEndACP,
+ TextStoreACP_GetActiveView,
+ TextStoreACP_GetACPFromPoint,
+ TextStoreACP_GetTextExt,
+ TextStoreACP_GetScreenExt,
+ TextStoreACP_GetWnd
+};
+
+HRESULT TextStoreACP_Constructor(IUnknown **ppOut)
+{
+ TextStoreACP *This;
+
+ This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(TextStoreACP));
+ if (This == NULL)
+ return E_OUTOFMEMORY;
+
+ This->TextStoreACPVtbl = &TextStoreACP_TextStoreACPVtbl;
+ This->refCount = 1;
+
+ *ppOut = (IUnknown *)This;
+ return S_OK;
+}
+
+/**********************************************************************
+ * ITfThreadMgrEventSink
+ **********************************************************************/
+typedef struct tagThreadMgrEventSink
+{
+ const ITfThreadMgrEventSinkVtbl *ThreadMgrEventSinkVtbl;
+ LONG refCount;
+} ThreadMgrEventSink;
+
+static void ThreadMgrEventSink_Destructor(ThreadMgrEventSink *This)
+{
+ HeapFree(GetProcessHeap(),0,This);
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_QueryInterface(ITfThreadMgrEventSink *iface, REFIID iid, LPVOID *ppvOut)
+{
+ ThreadMgrEventSink *This = (ThreadMgrEventSink *)iface;
+ *ppvOut = NULL;
+
+ if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfThreadMgrEventSink))
+ {
+ *ppvOut = This;
+ }
+
+ if (*ppvOut)
+ {
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ThreadMgrEventSink_AddRef(ITfThreadMgrEventSink *iface)
+{
+ ThreadMgrEventSink *This = (ThreadMgrEventSink *)iface;
+ ok (tmSinkRefCount == This->refCount,"ThreadMgrEventSink refcount off %i vs %i\n",This->refCount,tmSinkRefCount);
+ return InterlockedIncrement(&This->refCount);
+}
+
+static ULONG WINAPI ThreadMgrEventSink_Release(ITfThreadMgrEventSink *iface)
+{
+ ThreadMgrEventSink *This = (ThreadMgrEventSink *)iface;
+ ULONG ret;
+
+ ok (tmSinkRefCount == This->refCount,"ThreadMgrEventSink refcount off %i vs %i\n",This->refCount,tmSinkRefCount);
+ ret = InterlockedDecrement(&This->refCount);
+ if (ret == 0)
+ ThreadMgrEventSink_Destructor(This);
+ return ret;
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_OnInitDocumentMgr(ITfThreadMgrEventSink *iface,
+ITfDocumentMgr *pdim)
+{
+ ok(test_OnInitDocumentMgr == SINK_EXPECTED, "Unexpected OnInitDocumentMgr sink\n");
+ test_OnInitDocumentMgr = SINK_FIRED;
+ return S_OK;
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_OnUninitDocumentMgr(ITfThreadMgrEventSink *iface,
+ITfDocumentMgr *pdim)
+{
+ trace("\n");
+ return S_OK;
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_OnSetFocus(ITfThreadMgrEventSink *iface,
+ITfDocumentMgr *pdimFocus, ITfDocumentMgr *pdimPrevFocus)
+{
+ ok(test_OnSetFocus == SINK_EXPECTED, "Unexpected OnSetFocus sink\n");
+ ok(pdimFocus == test_CurrentFocus,"Sink reports wrong focus\n");
+ ok(pdimPrevFocus == test_PrevFocus,"Sink reports wrong previous focus\n");
+ test_OnSetFocus = SINK_FIRED;
+ return S_OK;
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_OnPushContext(ITfThreadMgrEventSink *iface,
+ITfContext *pic)
+{
+ ok(test_OnPushContext == SINK_EXPECTED, "Unexpected OnPushContext sink\n");
+ test_OnPushContext = SINK_FIRED;
+ return S_OK;
+}
+
+static HRESULT WINAPI ThreadMgrEventSink_OnPopContext(ITfThreadMgrEventSink *iface,
+ITfContext *pic)
+{
+ ok(test_OnPopContext == SINK_EXPECTED, "Unexpected OnPopContext sink\n");
+ test_OnPopContext = SINK_FIRED;
+ return S_OK;
+}
+
+static const ITfThreadMgrEventSinkVtbl ThreadMgrEventSink_ThreadMgrEventSinkVtbl =
+{
+ ThreadMgrEventSink_QueryInterface,
+ ThreadMgrEventSink_AddRef,
+ ThreadMgrEventSink_Release,
+
+ ThreadMgrEventSink_OnInitDocumentMgr,
+ ThreadMgrEventSink_OnUninitDocumentMgr,
+ ThreadMgrEventSink_OnSetFocus,
+ ThreadMgrEventSink_OnPushContext,
+ ThreadMgrEventSink_OnPopContext
+};
+
+HRESULT ThreadMgrEventSink_Constructor(IUnknown **ppOut)
+{
+ ThreadMgrEventSink *This;
+
+ This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(ThreadMgrEventSink));
+ if (This == NULL)
+ return E_OUTOFMEMORY;
+
+ This->ThreadMgrEventSinkVtbl = &ThreadMgrEventSink_ThreadMgrEventSinkVtbl;
+ This->refCount = 1;
+
+ *ppOut = (IUnknown *)This;
+ return S_OK;
+}
+
+
+/********************************************************************************************
+ * Stub text service for testing
+ ********************************************************************************************/
+
+static LONG TS_refCount;
+static IClassFactory *cf;
+static DWORD regid;
+
+typedef HRESULT (*LPFNCONSTRUCTOR)(IUnknown *pUnkOuter, IUnknown **ppvOut);
+
+typedef struct tagClassFactory
+{
+ const IClassFactoryVtbl *vtbl;
+ LONG ref;
+ LPFNCONSTRUCTOR ctor;
+} ClassFactory;
+
+typedef struct tagTextService
+{
+ const ITfTextInputProcessorVtbl *TextInputProcessorVtbl;
+ LONG refCount;
+} TextService;
+
+static void ClassFactory_Destructor(ClassFactory *This)
+{
+ HeapFree(GetProcessHeap(),0,This);
+ TS_refCount--;
+}
+
+static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, LPVOID *ppvOut)
+{
+ *ppvOut = NULL;
+ if (IsEqualIID(riid, &IID_IClassFactory) || IsEqualIID(riid, &IID_IUnknown))
+ {
+ IClassFactory_AddRef(iface);
+ *ppvOut = iface;
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
+{
+ ClassFactory *This = (ClassFactory *)iface;
+ return InterlockedIncrement(&This->ref);
+}
+
+static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
+{
+ ClassFactory *This = (ClassFactory *)iface;
+ ULONG ret = InterlockedDecrement(&This->ref);
+
+ if (ret == 0)
+ ClassFactory_Destructor(This);
+ return ret;
+}
+
+static HRESULT WINAPI ClassFactory_CreateInstance(IClassFactory *iface, IUnknown *punkOuter, REFIID iid, LPVOID *ppvOut)
+{
+ ClassFactory *This = (ClassFactory *)iface;
+ HRESULT ret;
+ IUnknown *obj;
+
+ ret = This->ctor(punkOuter, &obj);
+ if (FAILED(ret))
+ return ret;
+ ret = IUnknown_QueryInterface(obj, iid, ppvOut);
+ IUnknown_Release(obj);
+ return ret;
+}
+
+static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
+{
+ if(fLock)
+ InterlockedIncrement(&TS_refCount);
+ else
+ InterlockedDecrement(&TS_refCount);
+
+ return S_OK;
+}
+
+static const IClassFactoryVtbl ClassFactoryVtbl = {
+ /* IUnknown */
+ ClassFactory_QueryInterface,
+ ClassFactory_AddRef,
+ ClassFactory_Release,
+
+ /* IClassFactory*/
+ ClassFactory_CreateInstance,
+ ClassFactory_LockServer
+};
+
+static HRESULT ClassFactory_Constructor(LPFNCONSTRUCTOR ctor, LPVOID *ppvOut)
+{
+ ClassFactory *This = HeapAlloc(GetProcessHeap(),0,sizeof(ClassFactory));
+ This->vtbl = &ClassFactoryVtbl;
+ This->ref = 1;
+ This->ctor = ctor;
+ *ppvOut = (LPVOID)This;
+ TS_refCount++;
+ return S_OK;
+}
+
+static void TextService_Destructor(TextService *This)
+{
+ HeapFree(GetProcessHeap(),0,This);
+}
+
+static HRESULT WINAPI TextService_QueryInterface(ITfTextInputProcessor *iface, REFIID iid, LPVOID *ppvOut)
+{
+ TextService *This = (TextService *)iface;
+ *ppvOut = NULL;
+
+ if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_ITfTextInputProcessor))
+ {
+ *ppvOut = This;
+ }
+
+ if (*ppvOut)
+ {
+ IUnknown_AddRef(iface);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI TextService_AddRef(ITfTextInputProcessor *iface)
+{
+ TextService *This = (TextService *)iface;
+ return InterlockedIncrement(&This->refCount);
+}
+
+static ULONG WINAPI TextService_Release(ITfTextInputProcessor *iface)
+{
+ TextService *This = (TextService *)iface;
+ ULONG ret;
+
+ ret = InterlockedDecrement(&This->refCount);
+ if (ret == 0)
+ TextService_Destructor(This);
+ return ret;
+}
+
+static HRESULT WINAPI TextService_Activate(ITfTextInputProcessor *iface,
+ ITfThreadMgr *ptim, TfClientId id)
+{
+ trace("TextService_Activate\n");
+ ok(test_ShouldActivate,"Activation came unexpectedly\n");
+ tid = id;
+ return S_OK;
+}
+
+static HRESULT WINAPI TextService_Deactivate(ITfTextInputProcessor *iface)
+{
+ trace("TextService_Deactivate\n");
+ ok(test_ShouldDeactivate,"Deactivation came unexpectedly\n");
+ return S_OK;
+}
+
+static const ITfTextInputProcessorVtbl TextService_TextInputProcessorVtbl=
+{
+ TextService_QueryInterface,
+ TextService_AddRef,
+ TextService_Release,
+
+ TextService_Activate,
+ TextService_Deactivate
+};
+
+HRESULT TextService_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
+{
+ TextService *This;
+ if (pUnkOuter)
+ return CLASS_E_NOAGGREGATION;
+
+ This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(TextService));
+ if (This == NULL)
+ return E_OUTOFMEMORY;
+
+ This->TextInputProcessorVtbl= &TextService_TextInputProcessorVtbl;
+ This->refCount = 1;
+
+ *ppOut = (IUnknown *)This;
+ return S_OK;
+}
+
+HRESULT RegisterTextService(REFCLSID rclsid)
+{
+ ClassFactory_Constructor( TextService_Constructor ,(LPVOID*)&cf);
+ return CoRegisterClassObject(rclsid, (IUnknown*) cf, CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, ®id);
+}
+
+HRESULT UnregisterTextService()
+{
+ return CoRevokeClassObject(regid);
+}
diff --git a/rostests/winetests/mshtml/dom.c b/rostests/winetests/mshtml/dom.c
index b4889999cbe..249968d4250 100644
--- a/rostests/winetests/mshtml/dom.c
+++ b/rostests/winetests/mshtml/dom.c
@@ -66,8 +66,6 @@ static WCHAR wordW[] = {'w','o','r','d',0};
static const WCHAR text_javascriptW[] = {'t','e','x','t','/','j','a','v','a','s','c','r','i','p','t',0};
-static const WCHAR idW[] = {'i','d',0};
-
typedef enum {
ET_NONE,
ET_HTML,
@@ -486,7 +484,7 @@ static IHTMLElement *_get_elem_iface(unsigned line, IUnknown *unk)
HRESULT hres;
hres = IUnknown_QueryInterface(unk, &IID_IHTMLElement, (void**)&elem);
- ok_(__FILE__,line) (hres == S_OK, "Coule not get IHTMLElement: %08x\n", hres);
+ ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLElement: %08x\n", hres);
return elem;
}
@@ -497,7 +495,7 @@ static IHTMLElement2 *_get_elem2_iface(unsigned line, IUnknown *unk)
HRESULT hres;
hres = IUnknown_QueryInterface(unk, &IID_IHTMLElement2, (void**)&elem);
- ok_(__FILE__,line) (hres == S_OK, "Coule not get IHTMLElement2: %08x\n", hres);
+ ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLElement2: %08x\n", hres);
return elem;
}
@@ -508,7 +506,7 @@ static IHTMLElement3 *_get_elem3_iface(unsigned line, IUnknown *unk)
HRESULT hres;
hres = IUnknown_QueryInterface(unk, &IID_IHTMLElement3, (void**)&elem);
- ok_(__FILE__,line) (hres == S_OK, "Coule not get IHTMLElement3: %08x\n", hres);
+ ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLElement3: %08x\n", hres);
return elem;
}
@@ -519,7 +517,7 @@ static IHTMLDOMNode *_get_node_iface(unsigned line, IUnknown *unk)
HRESULT hres;
hres = IUnknown_QueryInterface(unk, &IID_IHTMLDOMNode, (void**)&node);
- ok_(__FILE__,line) (hres == S_OK, "Coule not get IHTMLDOMNode: %08x\n", hres);
+ ok_(__FILE__,line) (hres == S_OK, "Could not get IHTMLDOMNode: %08x\n", hres);
return node;
}
@@ -575,10 +573,10 @@ static void _test_elem_type(unsigned line, IUnknown *unk, elem_type_t type)
}
#define get_node_type(n) _get_node_type(__LINE__,n)
-static long _get_node_type(unsigned line, IUnknown *unk)
+static LONG _get_node_type(unsigned line, IUnknown *unk)
{
IHTMLDOMNode *node = _get_node_iface(line, unk);
- long type = -1;
+ LONG type = -1;
HRESULT hres;
hres = IHTMLDOMNode_get_nodeType(node, &type);
@@ -611,7 +609,7 @@ static IHTMLDOMChildrenCollection *_get_child_nodes(unsigned line, IUnknown *unk
}
#define get_child_item(c,i) _get_child_item(__LINE__,c,i)
-static IHTMLDOMNode *_get_child_item(unsigned line, IHTMLDOMChildrenCollection *col, long idx)
+static IHTMLDOMNode *_get_child_item(unsigned line, IHTMLDOMChildrenCollection *col, LONG idx)
{
IHTMLDOMNode *node = NULL;
IDispatch *disp;
@@ -627,7 +625,7 @@ static IHTMLDOMNode *_get_child_item(unsigned line, IHTMLDOMChildrenCollection *
}
#define test_elem_attr(e,n,v) _test_elem_attr(__LINE__,e,n,v)
-static void _test_elem_attr(unsigned line, IHTMLElement *elem, LPCWSTR name, LPCWSTR exval)
+static void _test_elem_attr(unsigned line, IHTMLElement *elem, const char *name, const char *exval)
{
VARIANT value;
BSTR tmp;
@@ -635,14 +633,14 @@ static void _test_elem_attr(unsigned line, IHTMLElement *elem, LPCWSTR name, LPC
VariantInit(&value);
- tmp = SysAllocString(name);
+ tmp = a2bstr(name);
hres = IHTMLElement_getAttribute(elem, tmp, 0, &value);
SysFreeString(tmp);
ok_(__FILE__,line) (hres == S_OK, "getAttribute failed: %08x\n", hres);
if(exval) {
ok_(__FILE__,line) (V_VT(&value) == VT_BSTR, "vt=%d\n", V_VT(&value));
- ok_(__FILE__,line) (!lstrcmpW(exval, V_BSTR(&value)), "unexpected value %s\n", dbgstr_w(V_BSTR(&value)));
+ ok_(__FILE__,line) (!strcmp_wa(V_BSTR(&value), exval), "unexpected value %s\n", dbgstr_w(V_BSTR(&value)));
}else {
ok_(__FILE__,line) (V_VT(&value) == VT_NULL, "vt=%d\n", V_VT(&value));
}
@@ -654,7 +652,7 @@ static void _test_elem_attr(unsigned line, IHTMLElement *elem, LPCWSTR name, LPC
static void _test_elem_offset(unsigned line, IUnknown *unk)
{
IHTMLElement *elem = _get_elem_iface(line, unk);
- long l;
+ LONG l;
HRESULT hres;
hres = IHTMLElement_get_offsetTop(elem, &l);
@@ -793,29 +791,29 @@ static IHTMLOptionElement *_create_option_elem(unsigned line, IHTMLDocument2 *do
}
#define test_select_length(s,l) _test_select_length(__LINE__,s,l)
-static void _test_select_length(unsigned line, IHTMLSelectElement *select, long length)
+static void _test_select_length(unsigned line, IHTMLSelectElement *select, LONG length)
{
- long len = 0xdeadbeef;
+ LONG len = 0xdeadbeef;
HRESULT hres;
hres = IHTMLSelectElement_get_length(select, &len);
ok_(__FILE__,line) (hres == S_OK, "get_length failed: %08x\n", hres);
- ok_(__FILE__,line) (len == length, "len=%ld, expected %ld\n", len, length);
+ ok_(__FILE__,line) (len == length, "len=%d, expected %d\n", len, length);
}
#define test_select_selidx(s,i) _test_select_selidx(__LINE__,s,i)
-static void _test_select_selidx(unsigned line, IHTMLSelectElement *select, long index)
+static void _test_select_selidx(unsigned line, IHTMLSelectElement *select, LONG index)
{
- long idx = 0xdeadbeef;
+ LONG idx = 0xdeadbeef;
HRESULT hres;
hres = IHTMLSelectElement_get_selectedIndex(select, &idx);
ok_(__FILE__,line) (hres == S_OK, "get_selectedIndex failed: %08x\n", hres);
- ok_(__FILE__,line) (idx == index, "idx=%ld, expected %ld\n", idx, index);
+ ok_(__FILE__,line) (idx == index, "idx=%d, expected %d\n", idx, index);
}
#define test_select_put_selidx(s,i) _test_select_put_selidx(__LINE__,s,i)
-static void _test_select_put_selidx(unsigned line, IHTMLSelectElement *select, long index)
+static void _test_select_put_selidx(unsigned line, IHTMLSelectElement *select, LONG index)
{
HRESULT hres;
@@ -905,38 +903,38 @@ static void _test_range_expand(unsigned line, IHTMLTxtRange *range, LPWSTR unit,
}
#define test_range_move(r,u,c,e) _test_range_move(__LINE__,r,u,c,e)
-static void _test_range_move(unsigned line, IHTMLTxtRange *range, LPWSTR unit, long cnt, long excnt)
+static void _test_range_move(unsigned line, IHTMLTxtRange *range, LPWSTR unit, LONG cnt, LONG excnt)
{
- long c = 0xdeadbeef;
+ LONG c = 0xdeadbeef;
HRESULT hres;
hres = IHTMLTxtRange_move(range, unit, cnt, &c);
ok_(__FILE__,line) (hres == S_OK, "move failed: %08x\n", hres);
- ok_(__FILE__,line) (c == excnt, "count=%ld, expected %ld\n", c, excnt);
+ ok_(__FILE__,line) (c == excnt, "count=%d, expected %d\n", c, excnt);
_test_range_text(line, range, NULL);
}
#define test_range_movestart(r,u,c,e) _test_range_movestart(__LINE__,r,u,c,e)
static void _test_range_movestart(unsigned line, IHTMLTxtRange *range,
- LPWSTR unit, long cnt, long excnt)
+ LPWSTR unit, LONG cnt, LONG excnt)
{
- long c = 0xdeadbeef;
+ LONG c = 0xdeadbeef;
HRESULT hres;
hres = IHTMLTxtRange_moveStart(range, unit, cnt, &c);
ok_(__FILE__,line) (hres == S_OK, "move failed: %08x\n", hres);
- ok_(__FILE__,line) (c == excnt, "count=%ld, expected %ld\n", c, excnt);
+ ok_(__FILE__,line) (c == excnt, "count=%d, expected %d\n", c, excnt);
}
#define test_range_moveend(r,u,c,e) _test_range_moveend(__LINE__,r,u,c,e)
-static void _test_range_moveend(unsigned line, IHTMLTxtRange *range, LPWSTR unit, long cnt, long excnt)
+static void _test_range_moveend(unsigned line, IHTMLTxtRange *range, LPWSTR unit, LONG cnt, LONG excnt)
{
- long c = 0xdeadbeef;
+ LONG c = 0xdeadbeef;
HRESULT hres;
hres = IHTMLTxtRange_moveEnd(range, unit, cnt, &c);
ok_(__FILE__,line) (hres == S_OK, "move failed: %08x\n", hres);
- ok_(__FILE__,line) (c == excnt, "count=%ld, expected %ld\n", c, excnt);
+ ok_(__FILE__,line) (c == excnt, "count=%d, expected %d\n", c, excnt);
}
#define test_range_put_text(r,t) _test_range_put_text(__LINE__,r,t)
@@ -1001,10 +999,10 @@ static void _test_range_parent(unsigned line, IHTMLTxtRange *range, elem_type_t
#define test_elem_collection(c,t,l) _test_elem_collection(__LINE__,c,t,l)
static void _test_elem_collection(unsigned line, IUnknown *unk,
- const elem_type_t *elem_types, long exlen)
+ const elem_type_t *elem_types, LONG exlen)
{
IHTMLElementCollection *col;
- long len;
+ LONG len;
DWORD i;
VARIANT name, index;
IDispatch *disp;
@@ -1017,7 +1015,7 @@ static void _test_elem_collection(unsigned line, IUnknown *unk,
hres = IHTMLElementCollection_get_length(col, &len);
ok_(__FILE__,line) (hres == S_OK, "get_length failed: %08x\n", hres);
- ok_(__FILE__,line) (len == exlen, "len=%ld, expected %ld\n", len, exlen);
+ ok_(__FILE__,line) (len == exlen, "len=%d, expected %d\n", len, exlen);
if(len > exlen)
len = exlen;
@@ -1054,7 +1052,7 @@ static void _test_elem_collection(unsigned line, IUnknown *unk,
}
#define test_elem_getelembytag(u,t,l) _test_elem_getelembytag(__LINE__,u,t,l)
-static void _test_elem_getelembytag(unsigned line, IUnknown *unk, elem_type_t type, long exlen)
+static void _test_elem_getelembytag(unsigned line, IUnknown *unk, elem_type_t type, LONG exlen)
{
IHTMLElement2 *elem = _get_elem2_iface(line, unk);
IHTMLElementCollection *col = NULL;
@@ -1112,18 +1110,18 @@ static void _test_elem_set_innertext(unsigned line, IHTMLElement *elem, const ch
col = _get_child_nodes(line, (IUnknown*)elem);
ok(col != NULL, "col == NULL\n");
if(col) {
- long length = 0, type;
+ LONG length = 0, type;
IHTMLDOMNode *node;
hres = IHTMLDOMChildrenCollection_get_length(col, &length);
ok(hres == S_OK, "get_length failed: %08x\n", hres);
- ok(length == 1, "length = %ld\n", length);
+ ok(length == 1, "length = %d\n", length);
node = _get_child_item(line, col, 0);
ok(node != NULL, "node == NULL\n");
if(node) {
type = _get_node_type(line, (IUnknown*)node);
- ok(type == 3, "type=%ld\n", type);
+ ok(type == 3, "type=%d\n", type);
IHTMLDOMNode_Release(node);
}
@@ -1132,6 +1130,39 @@ static void _test_elem_set_innertext(unsigned line, IHTMLElement *elem, const ch
}
+#define test_elem_innerhtml(e,t) _test_elem_innerhtml(__LINE__,e,t)
+static void _test_elem_innerhtml(unsigned line, IUnknown *unk, const char *inner_html)
+{
+ IHTMLElement *elem = _get_elem_iface(line, unk);
+ BSTR html;
+ HRESULT hres;
+
+ hres = IHTMLElement_get_innerHTML(elem, &html);
+ ok_(__FILE__,line)(hres == S_OK, "get_innerHTML failed: %08x\n", hres);
+ if(inner_html)
+ ok_(__FILE__,line)(!strcmp_wa(html, inner_html), "unexpected innerHTML: %s\n", dbgstr_w(html));
+ else
+ ok_(__FILE__,line)(!html, "innerHTML = %s\n", dbgstr_w(html));
+
+ IHTMLElement_Release(elem);
+ SysFreeString(html);
+}
+
+#define test_elem_set_innerhtml(e,t) _test_elem_set_innerhtml(__LINE__,e,t)
+static void _test_elem_set_innerhtml(unsigned line, IUnknown *unk, const char *inner_html)
+{
+ IHTMLElement *elem = _get_elem_iface(line, unk);
+ BSTR html;
+ HRESULT hres;
+
+ html = a2bstr(inner_html);
+ hres = IHTMLElement_put_innerHTML(elem, html);
+ ok_(__FILE__,line)(hres == S_OK, "put_innerHTML failed: %08x\n", hres);
+
+ IHTMLElement_Release(elem);
+ SysFreeString(html);
+}
+
#define get_first_child(n) _get_first_child(__LINE__,n)
static IHTMLDOMNode *_get_first_child(unsigned line, IUnknown *unk)
{
@@ -1241,11 +1272,11 @@ static void _test_select_set_disabled(unsigned line, IHTMLSelectElement *select,
}
#define elem_get_scroll_height(u) _elem_get_scroll_height(__LINE__,u)
-static long _elem_get_scroll_height(unsigned line, IUnknown *unk)
+static LONG _elem_get_scroll_height(unsigned line, IUnknown *unk)
{
IHTMLElement2 *elem = _get_elem2_iface(line, unk);
IHTMLTextContainer *txtcont;
- long l = -1, l2 = -1;
+ LONG l = -1, l2 = -1;
HRESULT hres;
hres = IHTMLElement2_get_scrollHeight(elem, &l);
@@ -1257,18 +1288,18 @@ static long _elem_get_scroll_height(unsigned line, IUnknown *unk)
hres = IHTMLTextContainer_get_scrollHeight(txtcont, &l2);
IHTMLTextContainer_Release(txtcont);
- ok_(__FILE__,line) (hres == S_OK, "IHTMLTextContainer::get_scrollHeight failed: %ld\n", l2);
- ok_(__FILE__,line) (l == l2, "unexpected height %ld, expected %ld\n", l2, l);
+ ok_(__FILE__,line) (hres == S_OK, "IHTMLTextContainer::get_scrollHeight failed: %d\n", l2);
+ ok_(__FILE__,line) (l == l2, "unexpected height %d, expected %d\n", l2, l);
return l;
}
#define elem_get_scroll_width(u) _elem_get_scroll_width(__LINE__,u)
-static long _elem_get_scroll_width(unsigned line, IUnknown *unk)
+static LONG _elem_get_scroll_width(unsigned line, IUnknown *unk)
{
IHTMLElement2 *elem = _get_elem2_iface(line, unk);
IHTMLTextContainer *txtcont;
- long l = -1, l2 = -1;
+ LONG l = -1, l2 = -1;
HRESULT hres;
hres = IHTMLElement2_get_scrollWidth(elem, &l);
@@ -1280,18 +1311,18 @@ static long _elem_get_scroll_width(unsigned line, IUnknown *unk)
hres = IHTMLTextContainer_get_scrollWidth(txtcont, &l2);
IHTMLTextContainer_Release(txtcont);
- ok_(__FILE__,line) (hres == S_OK, "IHTMLTextContainer::get_scrollWidth failed: %ld\n", l2);
- ok_(__FILE__,line) (l == l2, "unexpected width %ld, expected %ld\n", l2, l);
+ ok_(__FILE__,line) (hres == S_OK, "IHTMLTextContainer::get_scrollWidth failed: %d\n", l2);
+ ok_(__FILE__,line) (l == l2, "unexpected width %d, expected %d\n", l2, l);
return l;
}
#define elem_get_scroll_top(u) _elem_get_scroll_top(__LINE__,u)
-static long _elem_get_scroll_top(unsigned line, IUnknown *unk)
+static LONG _elem_get_scroll_top(unsigned line, IUnknown *unk)
{
IHTMLElement2 *elem = _get_elem2_iface(line, unk);
IHTMLTextContainer *txtcont;
- long l = -1, l2 = -1;
+ LONG l = -1, l2 = -1;
HRESULT hres;
hres = IHTMLElement2_get_scrollTop(elem, &l);
@@ -1303,8 +1334,8 @@ static long _elem_get_scroll_top(unsigned line, IUnknown *unk)
hres = IHTMLTextContainer_get_scrollTop(txtcont, &l2);
IHTMLTextContainer_Release(txtcont);
- ok_(__FILE__,line) (hres == S_OK, "IHTMLTextContainer::get_scrollTop failed: %ld\n", l2);
- ok_(__FILE__,line) (l == l2, "unexpected top %ld, expected %ld\n", l2, l);
+ ok_(__FILE__,line) (hres == S_OK, "IHTMLTextContainer::get_scrollTop failed: %d\n", l2);
+ ok_(__FILE__,line) (l == l2, "unexpected top %d, expected %d\n", l2, l);
return l;
}
@@ -1314,7 +1345,7 @@ static void _elem_get_scroll_left(unsigned line, IUnknown *unk)
{
IHTMLElement2 *elem = _get_elem2_iface(line, unk);
IHTMLTextContainer *txtcont;
- long l = -1, l2 = -1;
+ LONG l = -1, l2 = -1;
HRESULT hres;
hres = IHTMLElement2_get_scrollLeft(elem, NULL);
@@ -1329,8 +1360,8 @@ static void _elem_get_scroll_left(unsigned line, IUnknown *unk)
hres = IHTMLTextContainer_get_scrollLeft(txtcont, &l2);
IHTMLTextContainer_Release(txtcont);
- ok(hres == S_OK, "IHTMLTextContainer::get_scrollLeft failed: %ld\n", l2);
- ok(l == l2, "unexpected left %ld, expected %ld\n", l2, l);
+ ok(hres == S_OK, "IHTMLTextContainer::get_scrollLeft failed: %d\n", l2);
+ ok(l == l2, "unexpected left %d, expected %d\n", l2, l);
}
#define test_img_src(i,s) _test_img_src(__LINE__,i,s)
@@ -1670,7 +1701,7 @@ static void _test_node_put_value_str(unsigned line, IUnknown *unk, const char *v
static void _test_elem_client_size(unsigned line, IUnknown *unk)
{
IHTMLElement2 *elem = _get_elem2_iface(line, unk);
- long l;
+ LONG l;
HRESULT hres;
hres = IHTMLElement2_get_clientWidth(elem, &l);
@@ -1894,8 +1925,36 @@ static void _test_border_styles(unsigned line, IHTMLStyle *pStyle, BSTR Name)
}
}
-static void test_elem_col_item(IHTMLElementCollection *col, LPCWSTR n,
- const elem_type_t *elem_types, long len)
+#define test_style_csstext(s,t) _test_style_csstext(__LINE__,s,t)
+static void _test_style_csstext(unsigned line, IHTMLStyle *style, const char *extext)
+{
+ BSTR text = (void*)0xdeadbeef;
+ HRESULT hres;
+
+ hres = IHTMLStyle_get_cssText(style, &text);
+ ok_(__FILE__,line)(hres == S_OK, "get_cssText failed: %08x\n", hres);
+ if(extext)
+ ok_(__FILE__,line)(!strcmp_wa(text, extext), "cssText = %s\n", dbgstr_w(text));
+ else
+ ok_(__FILE__,line)(!text, "cssText = %s\n", dbgstr_w(text));
+
+ SysFreeString(text);
+}
+
+#define test_style_set_csstext(s,t) _test_style_set_csstext(__LINE__,s,t)
+static void _test_style_set_csstext(unsigned line, IHTMLStyle *style, const char *text)
+{
+ BSTR tmp;
+ HRESULT hres;
+
+ tmp = a2bstr(text);
+ hres = IHTMLStyle_put_cssText(style, tmp);
+ ok_(__FILE__,line)(hres == S_OK, "put_cssText failed: %08x\n", hres);
+ SysFreeString(tmp);
+}
+
+static void test_elem_col_item(IHTMLElementCollection *col, const char *n,
+ const elem_type_t *elem_types, LONG len)
{
IDispatch *disp;
VARIANT name, index;
@@ -1904,7 +1963,7 @@ static void test_elem_col_item(IHTMLElementCollection *col, LPCWSTR n,
V_VT(&index) = VT_EMPTY;
V_VT(&name) = VT_BSTR;
- V_BSTR(&name) = SysAllocString(n);
+ V_BSTR(&name) = a2bstr(n);
hres = IHTMLElementCollection_item(col, name, index, &disp);
ok(hres == S_OK, "item failed: %08x\n", hres);
@@ -1947,7 +2006,7 @@ cleanup:
SysFreeString(V_BSTR(&name));
}
-static IHTMLElement *get_elem_by_id(IHTMLDocument2 *doc, LPCWSTR id, BOOL expect_success)
+static IHTMLElement *get_elem_by_id(IHTMLDocument2 *doc, const char *id, BOOL expect_success)
{
IHTMLElementCollection *col;
IHTMLElement *elem;
@@ -1963,7 +2022,7 @@ static IHTMLElement *get_elem_by_id(IHTMLDocument2 *doc, LPCWSTR id, BOOL expect
V_VT(&index) = VT_EMPTY;
V_VT(&name) = VT_BSTR;
- V_BSTR(&name) = SysAllocString(id);
+ V_BSTR(&name) = a2bstr(id);
hres = IHTMLElementCollection_item(col, name, index, &disp);
IHTMLElementCollection_Release(col);
@@ -1984,7 +2043,7 @@ static IHTMLElement *get_elem_by_id(IHTMLDocument2 *doc, LPCWSTR id, BOOL expect
return elem;
}
-static IHTMLElement *get_doc_elem_by_id(IHTMLDocument2 *doc, LPCWSTR id)
+static IHTMLElement *get_doc_elem_by_id(IHTMLDocument2 *doc, const char *id)
{
IHTMLDocument3 *doc3;
IHTMLElement *elem;
@@ -1994,10 +2053,10 @@ static IHTMLElement *get_doc_elem_by_id(IHTMLDocument2 *doc, LPCWSTR id)
hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument3, (void**)&doc3);
ok(hres == S_OK, "Could not get IHTMLDocument3 iface: %08x\n", hres);
- tmp = SysAllocString(id);
+ tmp = a2bstr(id);
hres = IHTMLDocument3_getElementById(doc3, tmp, &elem);
SysFreeString(tmp);
- ok(hres == S_OK, "getElementById(%s) failed: %08x\n", dbgstr_w(id), hres);
+ ok(hres == S_OK, "getElementById(%s) failed: %08x\n", id, hres);
IHTMLDocument3_Release(doc3);
@@ -2440,6 +2499,19 @@ static void test_current_style(IHTMLCurrentStyle *current_style)
ok(!strcmp_wa(str, "default"), "get_cursor returned %s\n", dbgstr_w(str));
SysFreeString(str);
+ hres = IHTMLCurrentStyle_get_backgroundRepeat(current_style, &str);
+ ok(hres == S_OK, "get_backgroundRepeat failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "repeat"), "get_backgroundRepeat returned %s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_borderColor(current_style, &str);
+ ok(hres == S_OK, "get_borderColor failed: %08x\n", hres);
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_borderStyle(current_style, &str);
+ ok(hres == S_OK, "get_borderStyle failed: %08x\n", hres);
+ SysFreeString(str);
+
hres = IHTMLCurrentStyle_get_fontWeight(current_style, &v);
ok(hres == S_OK, "get_fontWeight failed: %08x\n", hres);
ok(V_VT(&v) == VT_I4, "V_VT(v) = %d\n", V_VT(&v));
@@ -2492,6 +2564,11 @@ static void test_current_style(IHTMLCurrentStyle *current_style)
ok(hres == S_OK, "get_marginRight failed: %08x\n", hres);
ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
VariantClear(&v);
+
+ hres = IHTMLCurrentStyle_get_marginLeft(current_style, &v);
+ ok(hres == S_OK, "get_marginLeft failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
+ VariantClear(&v);
}
static void test_style2(IHTMLStyle2 *style2)
@@ -2506,7 +2583,7 @@ static void test_style2(IHTMLStyle2 *style2)
str = a2bstr("absolute");
hres = IHTMLStyle2_put_position(style2, str);
- ok(hres == S_OK, "get_position failed: %08x\n", hres);
+ ok(hres == S_OK, "put_position failed: %08x\n", hres);
SysFreeString(str);
str = NULL;
@@ -2557,6 +2634,8 @@ static void test_default_style(IHTMLStyle *style)
test_disp((IUnknown*)style, &DIID_DispHTMLStyle);
test_ifaces((IUnknown*)style, style_iids);
+ test_style_csstext(style, NULL);
+
hres = IHTMLStyle_get_position(style, &str);
ok(hres == S_OK, "get_position failed: %08x\n", hres);
ok(!str, "str=%s\n", dbgstr_w(str));
@@ -2658,6 +2737,7 @@ static void test_default_style(IHTMLStyle *style)
hres = IHTMLStyle_put_fontWeight(style, sDefault);
ok(hres == S_OK, "put_fontWeight failed: %08x\n", hres);
+ SysFreeString(sDefault);
/* font Variant */
hres = IHTMLStyle_get_fontVariant(style, NULL);
@@ -2713,7 +2793,7 @@ static void test_default_style(IHTMLStyle *style)
ok(b == VARIANT_FALSE, "textDecorationUnderline = %x\n", b);
hres = IHTMLStyle_put_textDecorationUnderline(style, VARIANT_TRUE);
- ok(hres == S_OK, "get_textDecorationUnderline failed: %08x\n", hres);
+ ok(hres == S_OK, "put_textDecorationUnderline failed: %08x\n", hres);
ok(b == VARIANT_FALSE, "textDecorationUnderline = %x\n", b);
hres = IHTMLStyle_get_textDecorationUnderline(style, &b);
@@ -2721,7 +2801,7 @@ static void test_default_style(IHTMLStyle *style)
ok(b == VARIANT_TRUE, "textDecorationUnderline = %x\n", b);
hres = IHTMLStyle_put_textDecorationUnderline(style, VARIANT_FALSE);
- ok(hres == S_OK, "get_textDecorationUnderline failed: %08x\n", hres);
+ ok(hres == S_OK, "put_textDecorationUnderline failed: %08x\n", hres);
b = 0xfefe;
hres = IHTMLStyle_get_textDecorationLineThrough(style, &b);
@@ -2729,7 +2809,7 @@ static void test_default_style(IHTMLStyle *style)
ok(b == VARIANT_FALSE, "textDecorationLineThrough = %x\n", b);
hres = IHTMLStyle_put_textDecorationLineThrough(style, VARIANT_TRUE);
- ok(hres == S_OK, "get_textDecorationLineThrough failed: %08x\n", hres);
+ ok(hres == S_OK, "put_textDecorationLineThrough failed: %08x\n", hres);
ok(b == VARIANT_FALSE, "textDecorationLineThrough = %x\n", b);
hres = IHTMLStyle_get_textDecorationLineThrough(style, &b);
@@ -2737,7 +2817,97 @@ static void test_default_style(IHTMLStyle *style)
ok(b == VARIANT_TRUE, "textDecorationLineThrough = %x\n", b);
hres = IHTMLStyle_put_textDecorationLineThrough(style, VARIANT_FALSE);
- ok(hres == S_OK, "get_textDecorationLineThrough failed: %08x\n", hres);
+ ok(hres == S_OK, "put_textDecorationLineThrough failed: %08x\n", hres);
+
+ b = 0xfefe;
+ hres = IHTMLStyle_get_textDecorationNone(style, &b);
+ ok(hres == S_OK, "get_textDecorationNone failed: %08x\n", hres);
+ ok(b == VARIANT_FALSE, "textDecorationNone = %x\n", b);
+
+ hres = IHTMLStyle_put_textDecorationNone(style, VARIANT_TRUE);
+ ok(hres == S_OK, "put_textDecorationNone failed: %08x\n", hres);
+ ok(b == VARIANT_FALSE, "textDecorationNone = %x\n", b);
+
+ hres = IHTMLStyle_get_textDecorationNone(style, &b);
+ ok(hres == S_OK, "get_textDecorationNone failed: %08x\n", hres);
+ ok(b == VARIANT_TRUE, "textDecorationNone = %x\n", b);
+
+ hres = IHTMLStyle_put_textDecorationNone(style, VARIANT_FALSE);
+ ok(hres == S_OK, "put_textDecorationNone failed: %08x\n", hres);
+
+ b = 0xfefe;
+ hres = IHTMLStyle_get_textDecorationOverline(style, &b);
+ ok(hres == S_OK, "get_textDecorationOverline failed: %08x\n", hres);
+ ok(b == VARIANT_FALSE, "textDecorationOverline = %x\n", b);
+
+ hres = IHTMLStyle_put_textDecorationOverline(style, VARIANT_TRUE);
+ ok(hres == S_OK, "put_textDecorationOverline failed: %08x\n", hres);
+ ok(b == VARIANT_FALSE, "textDecorationOverline = %x\n", b);
+
+ hres = IHTMLStyle_get_textDecorationOverline(style, &b);
+ ok(hres == S_OK, "get_textDecorationOverline failed: %08x\n", hres);
+ ok(b == VARIANT_TRUE, "textDecorationOverline = %x\n", b);
+
+ hres = IHTMLStyle_put_textDecorationOverline(style, VARIANT_FALSE);
+ ok(hres == S_OK, "put_textDecorationOverline failed: %08x\n", hres);
+
+ b = 0xfefe;
+ hres = IHTMLStyle_get_textDecorationBlink(style, &b);
+ ok(hres == S_OK, "get_textDecorationBlink failed: %08x\n", hres);
+ ok(b == VARIANT_FALSE, "textDecorationBlink = %x\n", b);
+
+ hres = IHTMLStyle_put_textDecorationBlink(style, VARIANT_TRUE);
+ ok(hres == S_OK, "put_textDecorationBlink failed: %08x\n", hres);
+ ok(b == VARIANT_FALSE, "textDecorationBlink = %x\n", b);
+
+ hres = IHTMLStyle_get_textDecorationBlink(style, &b);
+ ok(hres == S_OK, "get_textDecorationBlink failed: %08x\n", hres);
+ ok(b == VARIANT_TRUE, "textDecorationBlink = %x\n", b);
+
+ hres = IHTMLStyle_put_textDecorationBlink(style, VARIANT_FALSE);
+ ok(hres == S_OK, "textDecorationBlink failed: %08x\n", hres);
+
+ hres = IHTMLStyle_get_textDecoration(style, &sDefault);
+ ok(hres == S_OK, "get_textDecoration failed: %08x\n", hres);
+
+ str = a2bstr("invalid");
+ hres = IHTMLStyle_put_textDecoration(style, str);
+ ok(hres == E_INVALIDARG, "put_textDecoration failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("none");
+ hres = IHTMLStyle_put_textDecoration(style, str);
+ ok(hres == S_OK, "put_textDecoration failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("underline");
+ hres = IHTMLStyle_put_textDecoration(style, str);
+ ok(hres == S_OK, "put_textDecoration failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("overline");
+ hres = IHTMLStyle_put_textDecoration(style, str);
+ ok(hres == S_OK, "put_textDecoration failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("line-through");
+ hres = IHTMLStyle_put_textDecoration(style, str);
+ ok(hres == S_OK, "put_textDecoration failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("blink");
+ hres = IHTMLStyle_put_textDecoration(style, str);
+ ok(hres == S_OK, "put_textDecoration failed: %08x\n", hres);
+ SysFreeString(str);
+
+ hres = IHTMLStyle_get_textDecoration(style, &str);
+ ok(hres == S_OK, "get_textDecoration failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "blink"), "str != blink\n");
+ SysFreeString(str);
+
+ hres = IHTMLStyle_put_textDecoration(style, sDefault);
+ ok(hres == S_OK, "put_textDecoration failed: %08x\n", hres);
+ SysFreeString(sDefault);
hres = IHTMLStyle_get_posWidth(style, NULL);
ok(hres == E_POINTER, "get_posWidth failed: %08x\n", hres);
@@ -2753,7 +2923,7 @@ static void test_default_style(IHTMLStyle *style)
ok(!V_BSTR(&v), "V_BSTR(v)=%p\n", V_BSTR(&v));
hres = IHTMLStyle_put_posWidth(style, 2.2);
- ok(hres == S_OK, "get_posWidth failed: %08x\n", hres);
+ ok(hres == S_OK, "put_posWidth failed: %08x\n", hres);
hres = IHTMLStyle_get_posWidth(style, &f);
ok(hres == S_OK, "get_posWidth failed: %08x\n", hres);
@@ -2780,7 +2950,7 @@ static void test_default_style(IHTMLStyle *style)
str = a2bstr("1");
hres = IHTMLStyle_put_margin(style, str);
- ok(hres == S_OK, "get_margin failed: %08x\n", hres);
+ ok(hres == S_OK, "put_margin failed: %08x\n", hres);
SysFreeString(str);
hres = IHTMLStyle_get_margin(style, &str);
@@ -2788,7 +2958,7 @@ static void test_default_style(IHTMLStyle *style)
ok(strcmp_wa(str, "1"), "margin = %s\n", dbgstr_w(str));
hres = IHTMLStyle_put_margin(style, NULL);
- ok(hres == S_OK, "get_margin failed: %08x\n", hres);
+ ok(hres == S_OK, "put_margin failed: %08x\n", hres);
str = NULL;
hres = IHTMLStyle_get_border(style, &str);
@@ -2798,7 +2968,7 @@ static void test_default_style(IHTMLStyle *style)
str = a2bstr("1px");
hres = IHTMLStyle_put_border(style, str);
- ok(hres == S_OK, "get_border failed: %08x\n", hres);
+ ok(hres == S_OK, "put_border failed: %08x\n", hres);
SysFreeString(str);
V_VT(&v) = VT_EMPTY;
@@ -2810,18 +2980,18 @@ static void test_default_style(IHTMLStyle *style)
/* Test posLeft */
hres = IHTMLStyle_get_posLeft(style, NULL);
- ok(hres == E_POINTER, "get_left failed: %08x\n", hres);
+ ok(hres == E_POINTER, "get_posLeft failed: %08x\n", hres);
f = 1.0f;
hres = IHTMLStyle_get_posLeft(style, &f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "get_posLeft failed: %08x\n", hres);
ok(f == 0.0, "expected 0.0 got %f\n", f);
hres = IHTMLStyle_put_posLeft(style, 4.9f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "put_posLeft failed: %08x\n", hres);
hres = IHTMLStyle_get_posLeft(style, &f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "get_posLeft failed: %08x\n", hres);
ok(f == 4.0, "expected 4.0 got %f\n", f);
/* Ensure left is updated correctly. */
@@ -2840,7 +3010,7 @@ static void test_default_style(IHTMLStyle *style)
VariantClear(&v);
hres = IHTMLStyle_get_posLeft(style, &f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "get_posLeft failed: %08x\n", hres);
ok(f == 3.0, "expected 3.0 got %f\n", f);
V_VT(&v) = VT_EMPTY;
@@ -2870,18 +3040,18 @@ static void test_default_style(IHTMLStyle *style)
/* Test posTop */
hres = IHTMLStyle_get_posTop(style, NULL);
- ok(hres == E_POINTER, "get_left failed: %08x\n", hres);
+ ok(hres == E_POINTER, "get_posTop failed: %08x\n", hres);
f = 1.0f;
hres = IHTMLStyle_get_posTop(style, &f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "get_posTop failed: %08x\n", hres);
ok(f == 0.0, "expected 0.0 got %f\n", f);
hres = IHTMLStyle_put_posTop(style, 4.9f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "put_posTop failed: %08x\n", hres);
hres = IHTMLStyle_get_posTop(style, &f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "get_posTop failed: %08x\n", hres);
ok(f == 4.0, "expected 4.0 got %f\n", f);
V_VT(&v) = VT_BSTR;
@@ -2898,7 +3068,7 @@ static void test_default_style(IHTMLStyle *style)
VariantClear(&v);
hres = IHTMLStyle_get_posTop(style, &f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "get_posTop failed: %08x\n", hres);
ok(f == 3.0, "expected 3.0 got %f\n", f);
V_VT(&v) = VT_NULL;
@@ -2914,7 +3084,7 @@ static void test_default_style(IHTMLStyle *style)
/* Test posHeight */
hres = IHTMLStyle_get_posHeight(style, NULL);
- ok(hres == E_POINTER, "get_left failed: %08x\n", hres);
+ ok(hres == E_POINTER, "get_posHeight failed: %08x\n", hres);
V_VT(&v) = VT_EMPTY;
hres = IHTMLStyle_get_height(style, &v);
@@ -2925,14 +3095,14 @@ static void test_default_style(IHTMLStyle *style)
f = 1.0f;
hres = IHTMLStyle_get_posHeight(style, &f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "get_posHeight failed: %08x\n", hres);
ok(f == 0.0, "expected 0.0 got %f\n", f);
hres = IHTMLStyle_put_posHeight(style, 4.9f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "put_posHeight failed: %08x\n", hres);
hres = IHTMLStyle_get_posHeight(style, &f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "get_posHeight failed: %08x\n", hres);
ok(f == 4.0, "expected 4.0 got %f\n", f);
V_VT(&v) = VT_BSTR;
@@ -2949,7 +3119,7 @@ static void test_default_style(IHTMLStyle *style)
VariantClear(&v);
hres = IHTMLStyle_get_posHeight(style, &f);
- ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(hres == S_OK, "get_posHeight failed: %08x\n", hres);
ok(f == 64.0, "expected 64.0 got %f\n", f);
str = (void*)0xdeadbeef;
@@ -2960,7 +3130,7 @@ static void test_default_style(IHTMLStyle *style)
str = a2bstr("default");
hres = IHTMLStyle_put_cursor(style, str);
- ok(hres == S_OK, "get_cursor failed: %08x\n", hres);
+ ok(hres == S_OK, "put_cursor failed: %08x\n", hres);
SysFreeString(str);
str = NULL;
@@ -3060,7 +3230,8 @@ static void test_default_style(IHTMLStyle *style)
SysFreeString(str);
hres = IHTMLStyle_put_fontStyle(style, sDefault);
- ok(hres == S_OK, "get_fontStyle failed: %08x\n", hres);
+ ok(hres == S_OK, "put_fontStyle failed: %08x\n", hres);
+ SysFreeString(sDefault);
/* overflow */
hres = IHTMLStyle_get_overflow(style, NULL);
@@ -3118,7 +3289,7 @@ static void test_default_style(IHTMLStyle *style)
VariantClear(&v);
hres = IHTMLStyle_setAttribute(style, NULL, v, 1);
- ok(hres == E_INVALIDARG, "getAttribute failed: %08x\n", hres);
+ ok(hres == E_INVALIDARG, "setAttribute failed: %08x\n", hres);
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = a2bstr("absolute");
@@ -3156,6 +3327,56 @@ static void test_default_style(IHTMLStyle *style)
test_border_styles(style, str);
SysFreeString(str);
+ hres = IHTMLStyle_get_borderStyle(style, &sDefault);
+ ok(hres == S_OK, "get_borderStyle failed: %08x\n", hres);
+
+ str = a2bstr("none dotted dashed solid");
+ hres = IHTMLStyle_put_borderStyle(style, str);
+ ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("none dotted dashed solid");
+ hres = IHTMLStyle_get_borderStyle(style, &str);
+ ok(hres == S_OK, "get_borderStyle failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "none dotted dashed solid"),
+ "expected (none dotted dashed solid) = (%s)\n", dbgstr_w(V_BSTR(&v)));
+ SysFreeString(str);
+
+ str = a2bstr("double groove ridge inset");
+ hres = IHTMLStyle_put_borderStyle(style, str);
+ ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("window-inset outset ridge inset");
+ hres = IHTMLStyle_put_borderStyle(style, str);
+ ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("window-inset");
+ hres = IHTMLStyle_put_borderStyle(style, str);
+ ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("none none none none none");
+ hres = IHTMLStyle_put_borderStyle(style, str);
+ ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("invalid none none none");
+ hres = IHTMLStyle_put_borderStyle(style, str);
+ ok(hres == E_INVALIDARG, "put_borderStyle failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("none invalid none none");
+ hres = IHTMLStyle_put_borderStyle(style, str);
+ ok(hres == E_INVALIDARG, "put_borderStyle failed: %08x\n", hres);
+ SysFreeString(str);
+
+ hres = IHTMLStyle_put_borderStyle(style, sDefault);
+ ok(hres == S_OK, "put_borderStyle failed: %08x\n", hres);
+ SysFreeString(sDefault);
+
+ /* backgoundColor */
hres = IHTMLStyle_get_backgroundColor(style, &v);
ok(hres == S_OK, "get_backgroundColor: %08x\n", hres);
ok(V_VT(&v) == VT_BSTR, "type failed: %d\n", V_VT(&v));
@@ -3169,7 +3390,7 @@ static void test_default_style(IHTMLStyle *style)
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = a2bstr("10");
hres = IHTMLStyle_put_paddingLeft(style, v);
- ok(hres == S_OK, "get_paddingLeft: %08x\n", hres);
+ ok(hres == S_OK, "put_paddingLeft: %08x\n", hres);
VariantClear(&v);
hres = IHTMLStyle_get_paddingLeft(style, &v);
@@ -3177,7 +3398,192 @@ static void test_default_style(IHTMLStyle *style)
ok(!strcmp_wa(V_BSTR(&v), "10px"), "expecte 10 = %s\n", dbgstr_w(V_BSTR(&v)));
hres = IHTMLStyle_put_paddingLeft(style, vDefault);
- ok(hres == S_OK, "get_paddingLeft: %08x\n", hres);
+ ok(hres == S_OK, "put_paddingLeft: %08x\n", hres);
+
+ /* BackgroundRepeat */
+ hres = IHTMLStyle_get_backgroundRepeat(style, &sDefault);
+ ok(hres == S_OK, "get_backgroundRepeat failed: %08x\n", hres);
+
+ str = a2bstr("invalid");
+ hres = IHTMLStyle_put_backgroundRepeat(style, str);
+ ok(hres == E_INVALIDARG, "put_backgroundRepeat failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("repeat");
+ hres = IHTMLStyle_put_backgroundRepeat(style, str);
+ ok(hres == S_OK, "put_backgroundRepeat failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("no-repeat");
+ hres = IHTMLStyle_put_backgroundRepeat(style, str);
+ ok(hres == S_OK, "put_backgroundRepeat failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("repeat-x");
+ hres = IHTMLStyle_put_backgroundRepeat(style, str);
+ ok(hres == S_OK, "put_backgroundRepeat failed: %08x\n", hres);
+ SysFreeString(str);
+
+ str = a2bstr("repeat-y");
+ hres = IHTMLStyle_put_backgroundRepeat(style, str);
+ ok(hres == S_OK, "put_backgroundRepeat failed: %08x\n", hres);
+ SysFreeString(str);
+
+ hres = IHTMLStyle_get_backgroundRepeat(style, &str);
+ ok(hres == S_OK, "get_backgroundRepeat failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "repeat-y"), "str=%s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLStyle_put_backgroundRepeat(style, sDefault);
+ ok(hres == S_OK, "put_backgroundRepeat failed: %08x\n", hres);
+ SysFreeString(sDefault);
+
+ /* BorderColor */
+ hres = IHTMLStyle_get_borderColor(style, &sDefault);
+ ok(hres == S_OK, "get_borderColor failed: %08x\n", hres);
+
+ str = a2bstr("red green red blue");
+ hres = IHTMLStyle_put_borderColor(style, str);
+ ok(hres == S_OK, "put_borderColor failed: %08x\n", hres);
+ SysFreeString(str);
+
+ hres = IHTMLStyle_get_borderColor(style, &str);
+ ok(hres == S_OK, "get_borderColor failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "red green red blue"), "str=%s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLStyle_put_borderColor(style, sDefault);
+ ok(hres == S_OK, "put_borderColor failed: %08x\n", hres);
+ SysFreeString(sDefault);
+
+ /* BorderLeft */
+ hres = IHTMLStyle_get_borderLeft(style, &sDefault);
+ ok(hres == S_OK, "get_borderLeft failed: %08x\n", hres);
+
+ str = a2bstr("thick dotted red");
+ hres = IHTMLStyle_put_borderLeft(style, str);
+ ok(hres == S_OK, "put_borderLeft failed: %08x\n", hres);
+ SysFreeString(str);
+
+ /* IHTMLStyle_get_borderLeft appears to have a bug where
+ it returns the first letter of the color. So we check
+ each style individually.
+ */
+ V_BSTR(&v) = NULL;
+ hres = IHTMLStyle_get_borderLeftColor(style, &v);
+ todo_wine ok(hres == S_OK, "get_borderLeftColor failed: %08x\n", hres);
+ todo_wine ok(!strcmp_wa(V_BSTR(&v), "red"), "str=%s\n", dbgstr_w(V_BSTR(&v)));
+ VariantClear(&v);
+
+ V_BSTR(&v) = NULL;
+ hres = IHTMLStyle_get_borderLeftWidth(style, &v);
+ todo_wine ok(hres == S_OK, "get_borderLeftWidth failed: %08x\n", hres);
+ todo_wine ok(!strcmp_wa(V_BSTR(&v), "thick"), "str=%s\n", dbgstr_w(V_BSTR(&v)));
+ VariantClear(&v);
+
+ hres = IHTMLStyle_get_borderLeftStyle(style, &str);
+ ok(hres == S_OK, "get_borderLeftStyle failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "dotted"), "str=%s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLStyle_put_borderLeft(style, sDefault);
+ ok(hres == S_OK, "put_borderLeft failed: %08x\n", hres);
+ SysFreeString(sDefault);
+
+ /* backgroundPositionX */
+ hres = IHTMLStyle_get_backgroundPositionX(style, &vDefault);
+ ok(hres == S_OK, "get_backgroundPositionX failed: %08x\n", hres);
+
+ V_VT(&v) = VT_BSTR;
+ V_BSTR(&v) = a2bstr("10px");
+ hres = IHTMLStyle_put_backgroundPositionX(style, v);
+ ok(hres == S_OK, "put_backgroundPositionX failed: %08x\n", hres);
+ VariantClear(&v);
+
+ hres = IHTMLStyle_get_backgroundPositionX(style, &v);
+ ok(hres == S_OK, "get_backgroundPositionX failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
+ VariantClear(&v);
+
+ hres = IHTMLStyle_put_backgroundPositionX(style, vDefault);
+ ok(hres == S_OK, "put_backgroundPositionX failed: %08x\n", hres);
+ VariantClear(&vDefault);
+
+ /* backgroundPositionY */
+ hres = IHTMLStyle_get_backgroundPositionY(style, &vDefault);
+ ok(hres == S_OK, "get_backgroundPositionY failed: %08x\n", hres);
+
+ V_VT(&v) = VT_BSTR;
+ V_BSTR(&v) = a2bstr("10px");
+ hres = IHTMLStyle_put_backgroundPositionY(style, v);
+ ok(hres == S_OK, "put_backgroundPositionY failed: %08x\n", hres);
+ VariantClear(&v);
+
+ hres = IHTMLStyle_get_backgroundPositionY(style, &v);
+ ok(hres == S_OK, "get_backgroundPositionY failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(v)=%d\n", V_VT(&v));
+ VariantClear(&v);
+
+ hres = IHTMLStyle_put_backgroundPositionY(style, vDefault);
+ ok(hres == S_OK, "put_backgroundPositionY failed: %08x\n", hres);
+ VariantClear(&vDefault);
+
+ /* borderTopWidth */
+ hres = IHTMLStyle_get_borderTopWidth(style, &vDefault);
+ ok(hres == S_OK, "get_borderTopWidth: %08x\n", hres);
+
+ V_VT(&v) = VT_BSTR;
+ V_BSTR(&v) = a2bstr("10px");
+ hres = IHTMLStyle_put_borderTopWidth(style, v);
+ ok(hres == S_OK, "put_borderTopWidth: %08x\n", hres);
+ VariantClear(&v);
+
+ hres = IHTMLStyle_get_borderTopWidth(style, &v);
+ ok(hres == S_OK, "get_borderTopWidth: %08x\n", hres);
+ ok(!strcmp_wa(V_BSTR(&v), "10px"), "expected 10px = %s\n", dbgstr_w(V_BSTR(&v)));
+ VariantClear(&v);
+
+ hres = IHTMLStyle_put_borderTopWidth(style, vDefault);
+ ok(hres == S_OK, "put_borderTopWidth: %08x\n", hres);
+ VariantClear(&vDefault);
+
+ /* borderRightWidth */
+ hres = IHTMLStyle_get_borderRightWidth(style, &vDefault);
+ ok(hres == S_OK, "get_borderRightWidth: %08x\n", hres);
+
+ V_VT(&v) = VT_BSTR;
+ V_BSTR(&v) = a2bstr("10");
+ hres = IHTMLStyle_put_borderRightWidth(style, v);
+ ok(hres == S_OK, "put_borderRightWidth: %08x\n", hres);
+ VariantClear(&v);
+
+ hres = IHTMLStyle_get_borderRightWidth(style, &v);
+ ok(hres == S_OK, "get_borderRightWidth: %08x\n", hres);
+ ok(!strcmp_wa(V_BSTR(&v), "10px"), "expected 10px = %s\n", dbgstr_w(V_BSTR(&v)));
+ VariantClear(&v);
+
+ hres = IHTMLStyle_put_borderRightWidth(style, vDefault);
+ ok(hres == S_OK, "put_borderRightWidth: %08x\n", hres);
+ VariantClear(&vDefault);
+
+ /* borderBottomWidth */
+ hres = IHTMLStyle_get_borderBottomWidth(style, &vDefault);
+ ok(hres == S_OK, "get_borderBottomWidth: %08x\n", hres);
+
+ V_VT(&v) = VT_BSTR;
+ V_BSTR(&v) = a2bstr("10");
+ hres = IHTMLStyle_put_borderBottomWidth(style, v);
+ ok(hres == S_OK, "put_borderBottomWidth: %08x\n", hres);
+ VariantClear(&v);
+
+ hres = IHTMLStyle_get_borderBottomWidth(style, &v);
+ ok(hres == S_OK, "get_borderBottomWidth: %08x\n", hres);
+ ok(!strcmp_wa(V_BSTR(&v), "10px"), "expected 10px = %s\n", dbgstr_w(V_BSTR(&v)));
+ VariantClear(&v);
+
+ hres = IHTMLStyle_put_borderBottomWidth(style, vDefault);
+ ok(hres == S_OK, "put_borderBottomWidth: %08x\n", hres);
+ VariantClear(&vDefault);
hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle2, (void**)&style2);
ok(hres == S_OK, "Could not get IHTMLStyle2 iface: %08x\n", hres);
@@ -3194,6 +3600,20 @@ static void test_default_style(IHTMLStyle *style)
}
}
+static void test_set_csstext(IHTMLStyle *style)
+{
+ VARIANT v;
+ HRESULT hres;
+
+ test_style_set_csstext(style, "background-color: black;");
+
+ hres = IHTMLStyle_get_backgroundColor(style, &v);
+ ok(hres == S_OK, "get_backgroundColor: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "type failed: %d\n", V_VT(&v));
+ ok(!strcmp_wa(V_BSTR(&v), "black"), "str=%s\n", dbgstr_w(V_BSTR(&v)));
+ VariantClear(&v);
+}
+
static void test_default_selection(IHTMLDocument2 *doc)
{
IHTMLSelectionObject *selection;
@@ -3224,7 +3644,7 @@ static void test_default_selection(IHTMLDocument2 *doc)
static void test_default_body(IHTMLBodyElement *body)
{
- long l;
+ LONG l;
BSTR bstr;
HRESULT hres;
VARIANT v;
@@ -3242,7 +3662,7 @@ static void test_default_body(IHTMLBodyElement *body)
l = elem_get_scroll_width((IUnknown*)body);
ok(l != -1, "scrollWidth == -1\n");
l = elem_get_scroll_top((IUnknown*)body);
- ok(!l, "scrollTop = %ld\n", l);
+ ok(!l, "scrollTop = %d\n", l);
elem_get_scroll_left((IUnknown*)body);
/* get_text tests */
@@ -3288,24 +3708,24 @@ static void test_body_funs(IHTMLBodyElement *body)
HRESULT hres;
hres = IHTMLBodyElement_get_bgColor(body, &vDefaultbg);
- ok(hres == S_OK, "get_background failed: %08x\n", hres);
+ ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
ok(V_VT(&vDefaultbg) == VT_BSTR, "bstr != NULL\n");
V_VT(&vbg) = VT_BSTR;
V_BSTR(&vbg) = SysAllocString(sRed);
hres = IHTMLBodyElement_put_bgColor(body, vbg);
- ok(hres == S_OK, "get_background failed: %08x\n", hres);
+ ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vbg);
hres = IHTMLBodyElement_get_bgColor(body, &vbg);
- ok(hres == S_OK, "get_background failed: %08x\n", hres);
+ ok(hres == S_OK, "get_bgColor failed: %08x\n", hres);
ok(V_VT(&vDefaultbg) == VT_BSTR, "V_VT(&vDefaultbg) != VT_BSTR\n");
ok(!lstrcmpW(V_BSTR(&vbg), sRedbg), "Unexpected type %s\n", dbgstr_w(V_BSTR(&vbg)));
VariantClear(&vbg);
/* Restore Originial */
hres = IHTMLBodyElement_put_bgColor(body, vDefaultbg);
- ok(hres == S_OK, "get_background failed: %08x\n", hres);
+ ok(hres == S_OK, "put_bgColor failed: %08x\n", hres);
VariantClear(&vDefaultbg);
}
@@ -3317,7 +3737,7 @@ static void test_window(IHTMLDocument2 *doc)
HRESULT hres;
hres = IHTMLDocument2_get_parentWindow(doc, &window);
- ok(hres == S_OK, "get_parentElement failed: %08x\n", hres);
+ ok(hres == S_OK, "get_parentWindow failed: %08x\n", hres);
test_ifaces((IUnknown*)window, window_iids);
test_disp((IUnknown*)window, &DIID_DispHTMLWindow2);
@@ -3332,7 +3752,7 @@ static void test_window(IHTMLDocument2 *doc)
ok(window2 != NULL, "window2 == NULL\n");
hres = IHTMLWindow2_get_self(window, &self);
- ok(hres == S_OK, "get_window failed: %08x\n", hres);
+ ok(hres == S_OK, "get_self failed: %08x\n", hres);
ok(window2 != NULL, "self == NULL\n");
ok(self == window2, "self != window2\n");
@@ -3357,7 +3777,7 @@ static void test_defaults(IHTMLDocument2 *doc)
IHTMLElement2 *elem2;
IHTMLElement *elem;
IHTMLStyle *style;
- long l;
+ LONG l;
HRESULT hres;
IHTMLElementCollection *collection;
@@ -3434,8 +3854,6 @@ static void test_defaults(IHTMLDocument2 *doc)
test_location(doc);
test_navigator(doc);
- IHTMLStyle_Release(style);
-
elem2 = get_elem2_iface((IUnknown*)elem);
hres = IHTMLElement2_get_currentStyle(elem2, &cstyle);
ok(hres == S_OK, "get_currentStyle failed: %08x\n", hres);
@@ -3447,13 +3865,16 @@ static void test_defaults(IHTMLDocument2 *doc)
IHTMLElement_Release(elem);
+ test_set_csstext(style);
+ IHTMLStyle_Release(style);
+
hres = IHTMLDocument2_get_styleSheets(doc, &stylesheetcol);
ok(hres == S_OK, "get_styleSheets failed: %08x\n", hres);
l = 0xdeadbeef;
hres = IHTMLStyleSheetsCollection_get_length(stylesheetcol, &l);
ok(hres == S_OK, "get_length failed: %08x\n", hres);
- ok(l == 0, "length = %ld\n", l);
+ ok(l == 0, "length = %d\n", l);
IHTMLStyleSheetsCollection_Release(stylesheetcol);
@@ -3611,7 +4032,7 @@ static void test_stylesheets(IHTMLDocument2 *doc)
{
IHTMLStyleSheetsCollection *col = NULL;
VARIANT idx, res;
- long len = 0;
+ LONG len = 0;
HRESULT hres;
hres = IHTMLDocument2_get_styleSheets(doc, &col);
@@ -3620,7 +4041,7 @@ static void test_stylesheets(IHTMLDocument2 *doc)
hres = IHTMLStyleSheetsCollection_get_length(col, &len);
ok(hres == S_OK, "get_length failed: %08x\n", hres);
- ok(len == 1, "len=%ld\n", len);
+ ok(len == 1, "len=%d\n", len);
VariantInit(&res);
V_VT(&idx) = VT_I4;
@@ -3653,7 +4074,7 @@ static void test_child_col_disp(IHTMLDOMChildrenCollection *col)
DISPPARAMS dp = {NULL, NULL, 0, 0};
VARIANT var;
EXCEPINFO ei;
- long type;
+ LONG type;
DISPID id;
BSTR bstr;
HRESULT hres;
@@ -3676,7 +4097,7 @@ static void test_child_col_disp(IHTMLDOMChildrenCollection *col)
ok(V_DISPATCH(&var) != NULL, "V_DISPATCH(var) == NULL\n");
node = get_node_iface((IUnknown*)V_DISPATCH(&var));
type = get_node_type((IUnknown*)node);
- ok(type == 3, "type=%ld\n", type);
+ ok(type == 3, "type=%d\n", type);
IHTMLDOMNode_Release(node);
VariantClear(&var);
@@ -3697,22 +4118,12 @@ static void test_elems(IHTMLDocument2 *doc)
IHTMLElement *elem, *elem2, *elem3;
IHTMLDOMNode *node, *node2;
IDispatch *disp;
- long type;
+ LONG type;
HRESULT hres;
IHTMLElementCollection *collection;
IHTMLDocument3 *doc3;
BSTR str;
- static const WCHAR imgidW[] = {'i','m','g','i','d',0};
- static const WCHAR inW[] = {'i','n',0};
- static const WCHAR xW[] = {'x',0};
- static const WCHAR sW[] = {'s',0};
- static const WCHAR scW[] = {'s','c',0};
- static const WCHAR xxxW[] = {'x','x','x',0};
- static const WCHAR tblW[] = {'t','b','l',0};
- static const WCHAR row2W[] = {'r','o','w','2',0};
- static const WCHAR ifrW[] = {'i','f','r',0};
-
static const elem_type_t all_types[] = {
ET_HTML,
ET_HEAD,
@@ -3747,7 +4158,7 @@ static void test_elems(IHTMLDocument2 *doc)
hres = IHTMLDocument2_get_all(doc, &col);
ok(hres == S_OK, "get_all failed: %08x\n", hres);
test_elem_collection((IUnknown*)col, all_types, sizeof(all_types)/sizeof(all_types[0]));
- test_elem_col_item(col, xW, item_types, sizeof(item_types)/sizeof(item_types[0]));
+ test_elem_col_item(col, "x", item_types, sizeof(item_types)/sizeof(item_types[0]));
IHTMLElementCollection_Release(col);
hres = IHTMLDocument2_get_images(doc, &collection);
@@ -3792,16 +4203,16 @@ static void test_elems(IHTMLDocument2 *doc)
test_elem_collection((IUnknown*)col, all_types+1, sizeof(all_types)/sizeof(all_types[0])-1);
IHTMLElementCollection_Release(col);
- get_elem_by_id(doc, xxxW, FALSE);
- elem = get_doc_elem_by_id(doc, xxxW);
+ get_elem_by_id(doc, "xxx", FALSE);
+ elem = get_doc_elem_by_id(doc, "xxx");
ok(!elem, "elem != NULL\n");
- elem = get_doc_elem_by_id(doc, sW);
+ elem = get_doc_elem_by_id(doc, "s");
ok(elem != NULL, "elem == NULL\n");
if(elem) {
test_elem_type((IUnknown*)elem, ET_SELECT);
- test_elem_attr(elem, xxxW, NULL);
- test_elem_attr(elem, idW, sW);
+ test_elem_attr(elem, "xxx", NULL);
+ test_elem_attr(elem, "id", "s");
test_elem_class((IUnknown*)elem, NULL);
test_elem_set_class((IUnknown*)elem, "cl");
test_elem_set_class((IUnknown*)elem, NULL);
@@ -3822,7 +4233,7 @@ static void test_elems(IHTMLDocument2 *doc)
{
test_node_name((IUnknown*)node, "#document");
type = get_node_type((IUnknown*)node);
- ok(type == 9, "type=%ld, expected 9\n", type);
+ ok(type == 9, "type=%d, expected 9\n", type);
node2 = test_node_get_parent((IUnknown*)node);
IHTMLDOMNode_Release(node);
ok(node2 == NULL, "node != NULL\n");
@@ -3848,7 +4259,7 @@ static void test_elems(IHTMLDocument2 *doc)
IHTMLElement_Release(elem);
}
- elem = get_elem_by_id(doc, sW, TRUE);
+ elem = get_elem_by_id(doc, "s", TRUE);
if(elem) {
IHTMLSelectElement *select;
@@ -3870,7 +4281,7 @@ static void test_elems(IHTMLDocument2 *doc)
}
type = get_node_type((IUnknown*)select);
- ok(type == 1, "type=%ld\n", type);
+ ok(type == 1, "type=%d\n", type);
IHTMLSelectElement_Release(select);
@@ -3881,7 +4292,7 @@ static void test_elems(IHTMLDocument2 *doc)
IHTMLElement_Release(elem);
}
- elem = get_elem_by_id(doc, scW, TRUE);
+ elem = get_elem_by_id(doc, "sc", TRUE);
if(elem) {
IHTMLScriptElement *script;
BSTR type;
@@ -3900,20 +4311,20 @@ static void test_elems(IHTMLDocument2 *doc)
/* test defer */
hres = IHTMLScriptElement_put_defer(script, VARIANT_TRUE);
- ok(hres == S_OK, "get_type failed: %08x\n", hres);
+ ok(hres == S_OK, "put_defer failed: %08x\n", hres);
hres = IHTMLScriptElement_get_defer(script, &vb);
- ok(hres == S_OK, "get_type failed: %08x\n", hres);
- ok(vb == VARIANT_TRUE, "get_type failed: %08x\n", hres);
+ ok(hres == S_OK, "get_defer failed: %08x\n", hres);
+ ok(vb == VARIANT_TRUE, "get_defer result is %08x\n", hres);
hres = IHTMLScriptElement_put_defer(script, VARIANT_FALSE);
- ok(hres == S_OK, "get_type failed: %08x\n", hres);
+ ok(hres == S_OK, "put_defer failed: %08x\n", hres);
}
IHTMLScriptElement_Release(script);
}
- elem = get_elem_by_id(doc, inW, TRUE);
+ elem = get_elem_by_id(doc, "in", TRUE);
if(elem) {
IHTMLInputElement *input;
@@ -3954,7 +4365,7 @@ static void test_elems(IHTMLDocument2 *doc)
IHTMLElement_Release(elem);
}
- elem = get_elem_by_id(doc, imgidW, TRUE);
+ elem = get_elem_by_id(doc, "imgid", TRUE);
if(elem) {
test_img_src((IUnknown*)elem, "");
test_img_set_src((IUnknown*)elem, "about:blank");
@@ -3963,21 +4374,21 @@ static void test_elems(IHTMLDocument2 *doc)
IHTMLElement_Release(elem);
}
- elem = get_doc_elem_by_id(doc, tblW);
+ elem = get_doc_elem_by_id(doc, "tbl");
ok(elem != NULL, "elem == NULL\n");
if(elem) {
test_table_elem(elem);
IHTMLElement_Release(elem);
}
- elem = get_doc_elem_by_id(doc, row2W);
+ elem = get_doc_elem_by_id(doc, "row2");
ok(elem != NULL, "elem == NULL\n");
if(elem) {
test_tr_elem(elem);
IHTMLElement_Release(elem);
}
- elem = get_doc_elem_by_id(doc, ifrW);
+ elem = get_doc_elem_by_id(doc, "ifr");
ok(elem != NULL, "elem == NULL\n");
if(elem) {
test_iframe_elem(elem);
@@ -3997,7 +4408,7 @@ static void test_elems(IHTMLDocument2 *doc)
ok(!node2, "node2 != NULL\n");
type = get_node_type((IUnknown*)node);
- ok(type == 3, "type=%ld\n", type);
+ ok(type == 3, "type=%d\n", type);
test_node_get_value_str((IUnknown*)node, "text test");
test_node_put_value_str((IUnknown*)elem, "test text");
@@ -4009,7 +4420,7 @@ static void test_elems(IHTMLDocument2 *doc)
child_col = get_child_nodes((IUnknown*)elem);
ok(child_col != NULL, "child_coll == NULL\n");
if(child_col) {
- long length = 0;
+ LONG length = 0;
test_disp((IUnknown*)child_col, &DIID_DispDOMChildrenCollection);
@@ -4021,7 +4432,7 @@ static void test_elems(IHTMLDocument2 *doc)
ok(node != NULL, "node == NULL\n");
if(node) {
type = get_node_type((IUnknown*)node);
- ok(type == 3, "type=%ld\n", type);
+ ok(type == 3, "type=%d\n", type);
IHTMLDOMNode_Release(node);
}
@@ -4029,7 +4440,7 @@ static void test_elems(IHTMLDocument2 *doc)
ok(node != NULL, "node == NULL\n");
if(node) {
type = get_node_type((IUnknown*)node);
- ok(type == 8, "type=%ld\n", type);
+ ok(type == 8, "type=%d\n", type);
test_elem_id((IUnknown*)node, NULL);
IHTMLDOMNode_Release(node);
@@ -4059,7 +4470,7 @@ static void test_elems(IHTMLDocument2 *doc)
test_stylesheets(doc);
test_create_option_elem(doc);
- elem = get_doc_elem_by_id(doc, tblW);
+ elem = get_doc_elem_by_id(doc, "tbl");
ok(elem != NULL, "elem = NULL\n");
test_elem_set_innertext(elem, "inner text");
IHTMLElement_Release(elem);
@@ -4094,8 +4505,8 @@ static void test_elems(IHTMLDocument2 *doc)
str = a2bstr("img");
hres = IHTMLDocument3_getElementsByTagName(doc3, str, &col);
+ ok(hres == S_OK, "getElementsByTagName(%s) failed: %08x\n", dbgstr_w(str), hres);
SysFreeString(str);
- ok(hres == S_OK, "getElementByTag(%s) failed: %08x\n", dbgstr_w(ifrW), hres);
if(hres == S_OK)
{
static const elem_type_t img_types[] = { ET_IMG };
@@ -4104,6 +4515,13 @@ static void test_elems(IHTMLDocument2 *doc)
IHTMLElementCollection_Release(col);
}
+ elem = get_doc_elem_by_id(doc, "y");
+ test_elem_set_innerhtml((IUnknown*)elem, "inner html");
+ test_elem_innerhtml((IUnknown*)elem, "inner html");
+ test_elem_set_innerhtml((IUnknown*)elem, "");
+ test_elem_innerhtml((IUnknown*)elem, NULL);
+ IHTMLElement_Release(elem);
+
IHTMLDocument3_Release(doc3);
}
@@ -4114,7 +4532,7 @@ static void test_create_elems(IHTMLDocument2 *doc)
IHTMLDocument5 *doc5;
IDispatch *disp;
VARIANT var;
- long type;
+ LONG type;
HRESULT hres;
BSTR str;
@@ -4123,7 +4541,7 @@ static void test_create_elems(IHTMLDocument2 *doc)
elem = test_create_elem(doc, "TEST");
test_elem_tag((IUnknown*)elem, "TEST");
type = get_node_type((IUnknown*)elem);
- ok(type == 1, "type=%ld\n", type);
+ ok(type == 1, "type=%d\n", type);
test_ifaces((IUnknown*)elem, elem_iids);
test_disp((IUnknown*)elem, &DIID_DispHTMLGenericElement);
@@ -4170,6 +4588,7 @@ static void test_create_elems(IHTMLDocument2 *doc)
IHTMLDOMNode_Release(node3);
test_elem_innertext(body, "insert test");
+ test_elem_innerhtml((IUnknown*)body, "insert test");
hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument5, (void**)&doc5);
if(hres == S_OK)
@@ -4181,7 +4600,7 @@ static void test_create_elems(IHTMLDocument2 *doc)
if(hres == S_OK)
{
type = get_node_type((IUnknown*)comment);
- ok(type == 8, "type=%ld, expected 8\n", type);
+ ok(type == 8, "type=%d, expected 8\n", type);
test_node_get_value_str((IUnknown*)comment, "testing");
diff --git a/rostests/winetests/mshtml/htmldoc.c b/rostests/winetests/mshtml/htmldoc.c
index e4ae1449875..60b3d2e2cf8 100644
--- a/rostests/winetests/mshtml/htmldoc.c
+++ b/rostests/winetests/mshtml/htmldoc.c
@@ -36,6 +36,7 @@
#include "dispex.h"
#include "idispids.h"
#include "shlguid.h"
+#include "perhist.h"
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
DEFINE_GUID(IID_IProxyManager,0x00000008,0x0000,0x0000,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46);
@@ -102,6 +103,7 @@ DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_1);
DEFINE_EXPECT(Exec_ShellDocView_37);
DEFINE_EXPECT(Exec_ShellDocView_84);
DEFINE_EXPECT(Exec_ShellDocView_103);
+DEFINE_EXPECT(Exec_ShellDocView_105);
DEFINE_EXPECT(Exec_UPDATECOMMANDS);
DEFINE_EXPECT(Exec_SETTITLE);
DEFINE_EXPECT(Exec_HTTPEQUIV);
@@ -148,7 +150,7 @@ static BOOL expect_LockContainer_fLock;
static BOOL expect_InPlaceUIWindow_SetActiveObject_active = TRUE;
static BOOL ipsex;
static BOOL set_clientsite = FALSE, container_locked = FALSE;
-static BOOL readystate_set_loading = FALSE, load_from_stream;
+static BOOL readystate_set_loading = FALSE, readystate_set_interactive = FALSE, load_from_stream;
static BOOL editmode = FALSE, show_failed;
static int stream_read, protocol_read;
static enum load_state_t {
@@ -334,7 +336,7 @@ static ULONG WINAPI Protocol_Release(IInternetProtocol *iface)
static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo,
- DWORD grfPI, DWORD dwReserved)
+ DWORD grfPI, HANDLE_PTR dwReserved)
{
BINDINFO bindinfo;
DWORD bindf = 0;
@@ -348,7 +350,7 @@ static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
ok(pOIProtSink != NULL, "pOIProtSink == NULL\n");
ok(pOIBindInfo != NULL, "pOIBindInfo == NULL\n");
ok(!grfPI, "grfPI = %x\n", grfPI);
- ok(!dwReserved, "dwReserved = %d\n", dwReserved);
+ ok(!dwReserved, "dwReserved = %lx\n", dwReserved);
memset(&bindinfo, 0, sizeof(bindinfo));
bindinfo.cbSize = sizeof(bindinfo);
@@ -647,9 +649,15 @@ static HRESULT WINAPI PropertyNotifySink_OnChanged(IPropertyNotifySink *iface, D
switch(dispID) {
case DISPID_READYSTATE:
CHECK_EXPECT2(OnChanged_READYSTATE);
- test_MSHTML_QueryStatus(NULL, OLECMDF_SUPPORTED
- | (editmode && (load_state == LD_INTERACTIVE || load_state == LD_COMPLETE)
- ? OLECMDF_ENABLED : 0));
+
+ if(readystate_set_interactive) {
+ readystate_set_interactive = FALSE;
+ load_state = LD_INTERACTIVE;
+ }
+ else
+ test_MSHTML_QueryStatus(NULL, OLECMDF_SUPPORTED
+ | (editmode && (load_state == LD_INTERACTIVE || load_state == LD_COMPLETE)
+ ? OLECMDF_ENABLED : 0));
if(readystate_set_loading) {
readystate_set_loading = FALSE;
@@ -662,7 +670,7 @@ static HRESULT WINAPI PropertyNotifySink_OnChanged(IPropertyNotifySink *iface, D
CHECK_EXPECT(OnChanged_1005);
if(!editmode)
test_readyState(NULL);
- load_state = LD_INTERACTIVE;
+ readystate_set_interactive = (load_state != LD_INTERACTIVE);
return S_OK;
}
@@ -2137,6 +2145,7 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID
break;
case 1:
CHECK_EXPECT(Exec_SETDOWNLOADSTATE_1);
+ readystate_set_interactive = (load_state != LD_INTERACTIVE);
break;
default:
ok(0, "unexpevted V_I4(pvaIn)=%d\n", V_I4(pvaIn));
@@ -2205,6 +2214,14 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID
return E_NOTIMPL;
+ case 105:
+ CHECK_EXPECT2(Exec_ShellDocView_105);
+
+ ok(pvaIn != NULL, "pvaIn == NULL\n");
+ ok(pvaOut == NULL, "pvaOut != NULL\n");
+
+ return E_NOTIMPL;
+
default:
ok(0, "unexpected command %d\n", nCmdID);
return E_FAIL;
@@ -2749,6 +2766,7 @@ static void test_download(BOOL verb_done, BOOL css_dwl, BOOL css_try_dwl)
SET_EXPECT(Exec_SETPROGRESSPOS);
SET_EXPECT(Exec_SETDOWNLOADSTATE_0);
SET_EXPECT(Exec_ShellDocView_103);
+ SET_EXPECT(Exec_ShellDocView_105);
SET_EXPECT(Exec_MSHTML_PARSECOMPLETE);
SET_EXPECT(Exec_HTTPEQUIV_DONE);
SET_EXPECT(SetStatusText);
@@ -2801,6 +2819,7 @@ static void test_download(BOOL verb_done, BOOL css_dwl, BOOL css_try_dwl)
CHECK_CALLED(Exec_SETPROGRESSPOS);
CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
SET_CALLED(Exec_ShellDocView_103);
+ SET_CALLED(Exec_ShellDocView_105);
CHECK_CALLED(Exec_MSHTML_PARSECOMPLETE);
CHECK_CALLED(Exec_HTTPEQUIV_DONE);
SET_CALLED(SetStatusText);
@@ -4160,6 +4179,26 @@ static void test_HTMLDoc_ISupportErrorInfo(void)
ok(ref == 0, "ref=%d, expected 0\n", ref);
}
+static void test_IPersistHistory(void)
+{
+ HRESULT hres;
+ IUnknown *unk;
+ LONG ref;
+ IPersistHistory *phist;
+
+ hres = create_document(&unk);
+ if(FAILED(hres))
+ return;
+
+ hres = IUnknown_QueryInterface(unk, &IID_IPersistHistory, (void**)&phist);
+ ok(hres == S_OK, "QueryInterface returned %08x, expected S_OK\n", hres);
+ if(hres == S_OK)
+ IPersistHistory_Release(phist);
+
+ ref = IUnknown_Release(unk);
+ ok(ref == 0, "ref=%d, expected 0\n", ref);
+}
+
START_TEST(htmldoc)
{
gecko_installer_workaround(TRUE);
@@ -4177,6 +4216,7 @@ START_TEST(htmldoc)
test_editing_mode(TRUE);
}
test_HTMLDoc_ISupportErrorInfo();
+ test_IPersistHistory();
DestroyWindow(container_hwnd);
CoUninitialize();
diff --git a/rostests/winetests/msi/automation.c b/rostests/winetests/msi/automation.c
index f831ef494a4..88ce287ae26 100644
--- a/rostests/winetests/msi/automation.c
+++ b/rostests/winetests/msi/automation.c
@@ -1046,7 +1046,7 @@ static HRESULT Session_EvaluateCondition(IDispatch *pSession, LPCWSTR szConditio
return hr;
}
-static HRESULT Session_Message(IDispatch *pSession, long kind, IDispatch *record, int *ret)
+static HRESULT Session_Message(IDispatch *pSession, LONG kind, IDispatch *record, int *ret)
{
VARIANT varresult;
VARIANTARG vararg[2];
@@ -1067,7 +1067,7 @@ static HRESULT Session_Message(IDispatch *pSession, long kind, IDispatch *record
return hr;
}
-static HRESULT Session_SetInstallLevel(IDispatch *pSession, long iInstallLevel)
+static HRESULT Session_SetInstallLevel(IDispatch *pSession, LONG iInstallLevel)
{
VARIANT varresult;
VARIANTARG vararg[1];
@@ -2022,7 +2022,7 @@ static void test_Installer_Products(BOOL bProductInstalled)
}
}
- if (bProductInstalled) todo_wine
+ if (bProductInstalled)
{
ok(bProductInstalled == bProductFound, "Product expected to %s installed but product code was %s\n",
bProductInstalled ? "be" : "not be",
@@ -2295,12 +2295,22 @@ static void test_Installer_InstallProduct(void)
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
res = find_registry_key(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData", "05FA3C1F65B896A40AC00077F34EF203", &hkey);
- ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+ ok(res == ERROR_SUCCESS ||
+ broken(res == ERROR_FILE_NOT_FOUND), /* win9x */
+ "Expected ERROR_SUCCESS, got %d\n", res);
if (res == ERROR_SUCCESS)
{
res = delete_registry_key(hkey, "05FA3C1F65B896A40AC00077F34EF203");
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
RegCloseKey(hkey);
+
+ res = RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\Products\\05FA3C1F65B896A40AC00077F34EF203");
+ ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res);
+ }
+ else
+ {
+ /* win9x defaults to a per-machine install. */
+ RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\Products\\05FA3C1F65B896A40AC00077F34EF203");
}
/* Remove registry keys written by PublishProduct standard action */
@@ -2315,16 +2325,12 @@ static void test_Installer_InstallProduct(void)
RegCloseKey(hkey);
- res = RegDeleteKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\Products\\05FA3C1F65B896A40AC00077F34EF203");
- ok(res == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %d\n", res);
-
/* Delete installation files we installed */
delete_test_files();
}
static void test_Installer(void)
{
- static WCHAR szBackslash[] = { '\\',0 };
static WCHAR szCreateRecordException[] = { 'C','r','e','a','t','e','R','e','c','o','r','d',',','C','o','u','n','t',0 };
static WCHAR szIntegerDataException[] = { 'I','n','t','e','g','e','r','D','a','t','a',',','F','i','e','l','d',0 };
WCHAR szPath[MAX_PATH];
@@ -2388,8 +2394,9 @@ static void test_Installer(void)
ok(len, "MultiByteToWideChar returned error %d\n", GetLastError());
if (!len) return;
- lstrcatW(szPath, szBackslash);
- lstrcatW(szPath, szMsifile);
+ /* lstrcatW does not work on win95 */
+ szPath[len - 1] = '\\';
+ memcpy(&szPath[len], szMsifile, sizeof(szMsifile));
/* Installer::OpenPackage */
hr = Installer_OpenPackage(szPath, 0, &pSession);
diff --git a/rostests/winetests/msi/db.c b/rostests/winetests/msi/db.c
index cb58de0c3fa..41f65f18498 100644
--- a/rostests/winetests/msi/db.c
+++ b/rostests/winetests/msi/db.c
@@ -321,10 +321,8 @@ static void test_msiinsert(void)
r = MsiRecordGetFieldCount(hrec);
ok(r == 3, "record count wrong\n");
- todo_wine {
r = MsiRecordIsNull(hrec, 0);
ok(r == FALSE, "field 0 not null\n");
- }
r = MsiRecordGetInteger(hrec, 1);
ok(r == 1, "field 1 contents wrong\n");
@@ -651,7 +649,10 @@ static void test_msibadqueries(void)
ok(r == ERROR_SUCCESS , "query failed\n");
r = try_query( hdb, "select * from c where b = 'x");
- todo_wine ok(r == ERROR_BAD_QUERY_SYNTAX, "query failed\n");
+ ok(r == ERROR_BAD_QUERY_SYNTAX, "query failed\n");
+
+ r = try_query( hdb, "select * from c where b = 'x'");
+ ok(r == ERROR_SUCCESS, "query failed\n");
r = try_query( hdb, "select * from 'c'");
ok(r == ERROR_BAD_QUERY_SYNTAX, "query failed\n");
@@ -900,10 +901,7 @@ static void test_viewmodify(void)
ok(r == ERROR_SUCCESS, "failed to set string\n");
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec);
- todo_wine
- {
- ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n");
- }
+ ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n");
r = MsiCloseHandle(hrec);
ok(r == ERROR_SUCCESS, "failed to close record\n");
@@ -1072,8 +1070,8 @@ static MSIHANDLE get_column_info(MSIHANDLE hdb, const char *query, MSICOLINFO ty
if( r == ERROR_SUCCESS )
{
MsiViewGetColumnInfo( hview, type, &rec );
- MsiViewClose(hview);
}
+ MsiViewClose(hview);
MsiCloseHandle(hview);
return rec;
}
@@ -1103,9 +1101,8 @@ static UINT get_columns_table_type(MSIHANDLE hdb, const char *table, UINT field)
type = MsiRecordGetInteger( rec, 4 );
MsiCloseHandle( rec );
}
-
- MsiViewClose(hview);
}
+ MsiViewClose(hview);
MsiCloseHandle(hview);
return type;
}
@@ -1131,7 +1128,14 @@ static void test_viewgetcolumninfo(void)
r = run_query( hdb, 0,
"CREATE TABLE `Properties` "
- "( `Property` CHAR(255), `Value` CHAR(1) PRIMARY KEY `Property`)" );
+ "( `Property` CHAR(255), "
+ " `Value` CHAR(1), "
+ " `Intvalue` INT, "
+ " `Integervalue` INTEGER, "
+ " `Shortvalue` SHORT, "
+ " `Longvalue` LONG, "
+ " `Longcharvalue` LONGCHAR "
+ " PRIMARY KEY `Property`)" );
ok( r == ERROR_SUCCESS , "Failed to create table\n" );
/* check the column types */
@@ -1140,12 +1144,22 @@ static void test_viewgetcolumninfo(void)
ok( check_record( rec, 1, "S255"), "wrong record type\n");
ok( check_record( rec, 2, "S1"), "wrong record type\n");
+ ok( check_record( rec, 3, "I2"), "wrong record type\n");
+ ok( check_record( rec, 4, "I2"), "wrong record type\n");
+ ok( check_record( rec, 5, "I2"), "wrong record type\n");
+ ok( check_record( rec, 6, "I4"), "wrong record type\n");
+ ok( check_record( rec, 7, "S0"), "wrong record type\n");
MsiCloseHandle( rec );
/* check the type in _Columns */
ok( 0x3dff == get_columns_table_type(hdb, "Properties", 1 ), "_columns table wrong\n");
ok( 0x1d01 == get_columns_table_type(hdb, "Properties", 2 ), "_columns table wrong\n");
+ ok( 0x1502 == get_columns_table_type(hdb, "Properties", 3 ), "_columns table wrong\n");
+ ok( 0x1502 == get_columns_table_type(hdb, "Properties", 4 ), "_columns table wrong\n");
+ ok( 0x1502 == get_columns_table_type(hdb, "Properties", 5 ), "_columns table wrong\n");
+ ok( 0x1104 == get_columns_table_type(hdb, "Properties", 6 ), "_columns table wrong\n");
+ ok( 0x1d00 == get_columns_table_type(hdb, "Properties", 7 ), "_columns table wrong\n");
/* now try the names */
rec = get_column_info( hdb, "select * from `Properties`", MSICOLINFO_NAMES );
@@ -1153,6 +1167,11 @@ static void test_viewgetcolumninfo(void)
ok( check_record( rec, 1, "Property"), "wrong record type\n");
ok( check_record( rec, 2, "Value"), "wrong record type\n");
+ ok( check_record( rec, 3, "Intvalue"), "wrong record type\n");
+ ok( check_record( rec, 4, "Integervalue"), "wrong record type\n");
+ ok( check_record( rec, 5, "Shortvalue"), "wrong record type\n");
+ ok( check_record( rec, 6, "Longvalue"), "wrong record type\n");
+ ok( check_record( rec, 7, "Longcharvalue"), "wrong record type\n");
MsiCloseHandle( rec );
@@ -1327,6 +1346,7 @@ static void test_longstrings(void)
r = MsiViewFetch(hview, &hrec);
ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
+ MsiViewClose(hview);
MsiCloseHandle(hview);
r = MsiRecordGetString(hrec, 2, NULL, &len);
@@ -1427,6 +1447,7 @@ static void test_streamtable(void)
ok( r == ERROR_SUCCESS, "Failed to execute view: %d\n", r);
MsiCloseHandle( rec );
+ MsiViewClose( view );
MsiCloseHandle( view );
r = MsiDatabaseOpenView( hdb,
@@ -1455,6 +1476,7 @@ static void test_streamtable(void)
r = MsiViewFetch( view, &rec );
ok( r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
+ MsiViewClose( view );
MsiCloseHandle( view );
MsiCloseHandle( hdb );
DeleteFile(msifile);
@@ -1716,6 +1738,7 @@ static void test_msiimport(void)
ok(i == -2147483640, "Expected -2147483640, got %d\n", i);
MsiCloseHandle(rec);
+ MsiViewClose(view);
MsiCloseHandle(view);
query = "SELECT * FROM `TwoPrimary`";
@@ -2044,6 +2067,7 @@ static void test_handle_limit(void)
for (i=0; i | D | C | A | E | B |
+ * --------------------- ---------------------
+ *
+ * set primary key `E`
+ * --------------------- ---------------------
+ * | D | C | A | E | B | -> | D | E | A | C | B |
+ * --------------------- ---------------------
+ */
+
+ query = "CREATE TABLE `T` ( `B` SHORT NOT NULL, `C` SHORT NOT NULL, "
+ "`A` CHAR(255), `E` INT, `D` CHAR(255) NOT NULL "
+ "PRIMARY KEY `D`, `E`)";
+ r = run_query(hdb, 0, query);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ query = "SELECT * FROM `T`";
+ r = MsiDatabaseOpenView(hdb, query, &view);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ r = MsiViewGetColumnInfo(view, MSICOLINFO_TYPES, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("s255", buf), "Expected \"s255\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 2, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("I2", buf), "Expected \"I2\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("S255", buf), "Expected \"S255\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 4, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("i2", buf), "Expected \"i2\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 5, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("i2", buf), "Expected \"i2\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewGetColumnInfo(view, MSICOLINFO_NAMES, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("D", buf), "Expected \"D\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 2, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("E", buf), "Expected \"E\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("A", buf), "Expected \"A\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 4, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("C", buf), "Expected \"C\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 5, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("B", buf), "Expected \"B\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+ MsiViewClose(view);
+ MsiCloseHandle(view);
+
+ query = "INSERT INTO `T` ( `B`, `C`, `A`, `E`, `D` ) "
+ "VALUES ( 1, 2, 'a', 3, 'bc' )";
+ r = run_query(hdb, 0, query);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ query = "SELECT * FROM `T`";
+ r = do_query(hdb, query, &rec);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("bc", buf), "Expected \"bc\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 2);
+ ok(r == 3, "Expected 3, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("a", buf), "Expected \"a\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 4);
+ ok(r == 2, "Expected 2, got %d\n", r);
+
+ r = MsiRecordGetInteger(rec, 5);
+ ok(r == 1, "Expected 1, got %d\n", r);
+
+ MsiCloseHandle(rec);
+
+ query = "SELECT * FROM `_Columns` WHERE `Table` = 'T'";
+ r = MsiDatabaseOpenView(hdb, query, &view);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ r = MsiViewExecute(view, 0);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("T", buf), "Expected \"T\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 2);
+ ok(r == 1, "Expected 1, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("D", buf), "Expected \"D\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("T", buf), "Expected \"T\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 2);
+ ok(r == 2, "Expected 2, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("E", buf), "Expected \"E\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("T", buf), "Expected \"T\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 2);
+ ok(r == 3, "Expected 3, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("A", buf), "Expected \"A\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("T", buf), "Expected \"T\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 2);
+ ok(r == 4, "Expected 4, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("C", buf), "Expected \"C\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("T", buf), "Expected \"T\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 2);
+ ok(r == 5, "Expected 5, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("B", buf), "Expected \"B\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
+
+ MsiViewClose(view);
+ MsiCloseHandle(view);
+
+ query = "CREATE TABLE `Z` ( `B` SHORT NOT NULL, `C` SHORT NOT NULL, "
+ "`A` CHAR(255), `E` INT, `D` CHAR(255) NOT NULL "
+ "PRIMARY KEY `C`, `A`, `D`)";
+ r = run_query(hdb, 0, query);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ query = "SELECT * FROM `Z`";
+ r = MsiDatabaseOpenView(hdb, query, &view);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ r = MsiViewGetColumnInfo(view, MSICOLINFO_TYPES, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("i2", buf), "Expected \"i2\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 2, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("S255", buf), "Expected \"S255\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("s255", buf), "Expected \"s255\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 4, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("I2", buf), "Expected \"I2\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 5, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("i2", buf), "Expected \"i2\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewGetColumnInfo(view, MSICOLINFO_NAMES, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("C", buf), "Expected \"C\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 2, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("A", buf), "Expected \"A\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("D", buf), "Expected \"D\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 4, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("E", buf), "Expected \"E\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 5, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("B", buf), "Expected \"B\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+ MsiViewClose(view);
+ MsiCloseHandle(view);
+
+ query = "INSERT INTO `Z` ( `B`, `C`, `A`, `E`, `D` ) "
+ "VALUES ( 1, 2, 'a', 3, 'bc' )";
+ r = run_query(hdb, 0, query);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ query = "SELECT * FROM `Z`";
+ r = do_query(hdb, query, &rec);
+
+ r = MsiRecordGetInteger(rec, 1);
+ ok(r == 2, "Expected 2, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 2, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("a", buf), "Expected \"a\", got \"%s\"\n", buf);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("bc", buf), "Expected \"bc\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 4);
+ ok(r == 3, "Expected 3, got %d\n", r);
+
+ r = MsiRecordGetInteger(rec, 5);
+ ok(r == 1, "Expected 1, got %d\n", r);
+
+ MsiCloseHandle(rec);
+
+ query = "SELECT * FROM `_Columns` WHERE `Table` = 'T'";
+ r = MsiDatabaseOpenView(hdb, query, &view);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ r = MsiViewExecute(view, 0);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("T", buf), "Expected \"T\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 2);
+ ok(r == 1, "Expected 1, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("D", buf), "Expected \"D\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("T", buf), "Expected \"T\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 2);
+ ok(r == 2, "Expected 2, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("E", buf), "Expected \"E\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("T", buf), "Expected \"T\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 2);
+ ok(r == 3, "Expected 3, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("A", buf), "Expected \"A\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("T", buf), "Expected \"T\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 2);
+ ok(r == 4, "Expected 4, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("C", buf), "Expected \"C\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("T", buf), "Expected \"T\", got \"%s\"\n", buf);
+
+ r = MsiRecordGetInteger(rec, 2);
+ ok(r == 5, "Expected 5, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "kiwi");
+ r = MsiRecordGetString(rec, 3, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA("B", buf), "Expected \"B\", got \"%s\"\n", buf);
+
+ MsiCloseHandle(rec);
+
+ r = MsiViewFetch(view, &rec);
+ ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
+
+ MsiViewClose(view);
+ MsiCloseHandle(view);
+
+ MsiCloseHandle(hdb);
+ DeleteFileA(msifile);
+}
+
START_TEST(db)
{
test_msidatabase();
@@ -6971,4 +7557,6 @@ START_TEST(db)
test_dbtopackage();
test_droptable();
test_dbmerge();
+ test_insertorder();
+ test_columnorder();
}
diff --git a/rostests/winetests/msi/format.c b/rostests/winetests/msi/format.c
index 316eed6b711..2b2661cfddb 100644
--- a/rostests/winetests/msi/format.c
+++ b/rostests/winetests/msi/format.c
@@ -2361,12 +2361,14 @@ static void test_formatrecord_tables(void)
/* component with INSTALLSTATE_SOURCE */
lstrcpy( expected, "1: " );
lstrcat( expected, curr_dir );
- lstrcat( expected, "\\ " );
+ if (strlen(curr_dir) > 3)
+ lstrcat( expected, "\\" );
+ lstrcat( expected, " " );
size = MAX_PATH;
MsiRecordSetString( hrec, 1, "[$parietal]" );
r = MsiFormatRecord( hpkg, hrec, buf, &size );
ok( r == ERROR_SUCCESS, "format record failed: %d\n", r);
- ok( !lstrcmp( buf, expected ), "Expected '%s', got %s\n", expected, buf);
+ ok( !lstrcmp( buf, expected ), "Expected '%s', got '%s'\n", expected, buf);
sprintf( buf, "%sI am a really long directory\\temporal.txt", root );
DeleteFile( buf );
diff --git a/rostests/winetests/msi/install.c b/rostests/winetests/msi/install.c
index 95dd03a29c4..35000070296 100644
--- a/rostests/winetests/msi/install.c
+++ b/rostests/winetests/msi/install.c
@@ -1721,6 +1721,21 @@ static void test_MsiInstallProduct(void)
return;
}
+ /* szPackagePath is NULL */
+ r = MsiInstallProductA(NULL, "INSTALL=ALL");
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+
+ /* both szPackagePath and szCommandLine are NULL */
+ r = MsiInstallProductA(NULL, NULL);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+
+ /* szPackagePath is empty */
+ r = MsiInstallProductA("", "INSTALL=ALL");
+ ok(r == ERROR_PATH_NOT_FOUND,
+ "Expected ERROR_PATH_NOT_FOUND, got %d\n", r);
+
create_test_files();
create_database(msifile, tables, sizeof(tables) / sizeof(msi_table));
@@ -1764,7 +1779,7 @@ static void test_MsiInstallProduct(void)
type = REG_SZ;
res = RegQueryValueExA(hkey, "OrderTestName", NULL, &type, (LPBYTE)path, &size);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
- ok(!lstrcmpA(path, "OrderTestValue"), "Expected imaname, got %s\n", path);
+ ok(!lstrcmpA(path, "OrderTestValue"), "Expected OrderTestValue, got %s\n", path);
check_service_is_installed();
@@ -2280,6 +2295,7 @@ static void test_setpropertyfolder(void)
{
UINT r;
CHAR path[MAX_PATH];
+ DWORD attr;
lstrcpyA(path, PROG_FILES_DIR);
lstrcatA(path, "\\msitest\\added");
@@ -2293,7 +2309,8 @@ static void test_setpropertyfolder(void)
r = MsiInstallProductA(msifile, NULL);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
- if (GetFileAttributesA(path) == FILE_ATTRIBUTE_DIRECTORY)
+ attr = GetFileAttributesA(path);
+ if (attr != INVALID_FILE_ATTRIBUTES && (attr & FILE_ATTRIBUTE_DIRECTORY))
{
ok(delete_pf("msitest\\added\\maximus", TRUE), "File not installed\n");
ok(delete_pf("msitest\\added", FALSE), "File not installed\n");
@@ -3213,7 +3230,7 @@ static void test_publish_processcomponents(void)
lstrcpyA(program_files_maximus,PROG_FILES_DIR);
lstrcatA(program_files_maximus,"\\msitest\\maximus");
- ok(!lstrcmpA(val, program_files_maximus),
+ ok(!lstrcmpiA(val, program_files_maximus),
"Expected \"%s\", got \"%s\"\n", program_files_maximus, val);
res = RegOpenKeyA(HKEY_LOCAL_MACHINE, compkey, &hkey);
@@ -3257,7 +3274,7 @@ static void test_publish_processcomponents(void)
res = RegQueryValueExA(comp, "84A88FD7F6998CE40A22FB59F6B9C2BB",
NULL, NULL, (LPBYTE)val, &size);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
- ok(!lstrcmpA(val, program_files_maximus),
+ ok(!lstrcmpiA(val, program_files_maximus),
"Expected \"%s\", got \"%s\"\n", program_files_maximus, val);
res = RegOpenKeyA(HKEY_LOCAL_MACHINE, compkey, &hkey);
@@ -4193,8 +4210,8 @@ static void test_transformprop(void)
static void test_currentworkingdir(void)
{
UINT r;
- CHAR path[MAX_PATH];
- LPSTR ptr, ptr2;
+ CHAR drive[MAX_PATH], path[MAX_PATH];
+ LPSTR ptr;
CreateDirectoryA("msitest", NULL);
create_file("msitest\\augustus", 500);
@@ -4221,18 +4238,17 @@ static void test_currentworkingdir(void)
ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
ok(delete_pf("msitest", FALSE), "File not installed\n");
- lstrcpyA(path, CURR_DIR);
+ lstrcpyA(drive, CURR_DIR);
+ drive[2] = '\\';
+ drive[3] = '\0';
+ SetCurrentDirectoryA(drive);
+
+ lstrcpy(path, CURR_DIR);
if (path[lstrlenA(path) - 1] != '\\')
lstrcatA(path, "\\");
- lstrcatA(path, "msitest.msi");
-
- ptr2 = strrchr(path, '\\');
- *ptr2 = '\0';
- ptr = strrchr(path, '\\');
- *ptr2 = '\\';
- *(ptr++) = '\0';
-
- SetCurrentDirectoryA(path);
+ lstrcatA(path, msifile);
+ ptr = strchr(path, ':');
+ ptr +=2;
r = MsiInstallProductA(ptr, NULL);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
@@ -4628,10 +4644,15 @@ static void test_missingcab(void)
create_pf_data("msitest\\caesar", "abcdefgh", TRUE);
r = MsiInstallProductA(msifile, NULL);
- ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
- ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
+ ok(r == ERROR_SUCCESS ||
+ broken(r == ERROR_INSTALL_FAILURE), /* win9x */
+ "Expected ERROR_SUCCESS, got %u\n", r);
+ if (r == ERROR_SUCCESS)
+ {
+ ok(delete_pf("msitest\\augustus", TRUE), "File not installed\n");
+ ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
+ }
ok(delete_pf("msitest\\caesar", TRUE), "File not installed\n");
- ok(delete_pf("msitest\\maximus", TRUE), "File not installed\n");
ok(!delete_pf("msitest\\gaius", TRUE), "File installed\n");
ok(delete_pf("msitest", FALSE), "File not installed\n");
diff --git a/rostests/winetests/msi/msi.c b/rostests/winetests/msi/msi.c
index fec9d89c76d..c3ef72b47fc 100644
--- a/rostests/winetests/msi/msi.c
+++ b/rostests/winetests/msi/msi.c
@@ -516,15 +516,19 @@ static void create_test_guid(LPSTR prodcode, LPSTR squashed)
static void get_user_sid(LPSTR *usersid)
{
HANDLE token;
- BYTE buf[1024];
DWORD size;
PTOKEN_USER user;
OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token);
- size = sizeof(buf);
- GetTokenInformation(token, TokenUser, buf, size, &size);
- user = (PTOKEN_USER)buf;
+
+ size = 0;
+ GetTokenInformation(token, TokenUser, NULL, size, &size);
+ user = HeapAlloc(GetProcessHeap(), 0, size);
+
+ GetTokenInformation(token, TokenUser, user, size, &size);
pConvertSidToStringSidA(user->User.Sid, usersid);
+
+ HeapFree(GetProcessHeap(), 0, user);
CloseHandle(token);
}
@@ -757,10 +761,8 @@ static const char table_enc85[] =
/*
* Encodes a base85 guid given a GUID pointer
* Caller should provide a 21 character buffer for the encoded string.
- *
- * returns TRUE if successful, FALSE if not
*/
-static BOOL encode_base85_guid( GUID *guid, LPWSTR str )
+static void encode_base85_guid( GUID *guid, LPWSTR str )
{
unsigned int x, *p, i;
@@ -779,8 +781,6 @@ static BOOL encode_base85_guid( GUID *guid, LPWSTR str )
*str++ = table_enc85[x%85];
}
*str = 0;
-
- return TRUE;
}
static void compose_base85_guid(LPSTR component, LPSTR comp_base85, LPSTR squashed)
@@ -807,12 +807,12 @@ static void compose_base85_guid(LPSTR component, LPSTR comp_base85, LPSTR squash
static void test_MsiQueryFeatureState(void)
{
- HKEY userkey, localkey, compkey;
+ HKEY userkey, localkey, compkey, compkey2;
CHAR prodcode[MAX_PATH];
CHAR prod_squashed[MAX_PATH];
CHAR component[MAX_PATH];
CHAR comp_base85[MAX_PATH];
- CHAR comp_squashed[MAX_PATH];
+ CHAR comp_squashed[MAX_PATH], comp_squashed2[MAX_PATH];
CHAR keypath[MAX_PATH*2];
INSTALLSTATE state;
LPSTR usersid;
@@ -820,6 +820,7 @@ static void test_MsiQueryFeatureState(void)
create_test_guid(prodcode, prod_squashed);
compose_base85_guid(component, comp_base85, comp_squashed);
+ compose_base85_guid(component, comp_base85 + 20, comp_squashed2);
get_user_sid(&usersid);
/* NULL prodcode */
@@ -908,7 +909,7 @@ static void test_MsiQueryFeatureState(void)
state = MsiQueryFeatureStateA(prodcode, "feature");
ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
- res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)comp_base85, 21);
+ res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)comp_base85, 41);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
state = MsiQueryFeatureStateA(prodcode, "feature");
@@ -922,6 +923,14 @@ static void test_MsiQueryFeatureState(void)
res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+ lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\");
+ lstrcatA(keypath, usersid);
+ lstrcatA(keypath, "\\Components\\");
+ lstrcatA(keypath, comp_squashed2);
+
+ res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey2);
+ ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+
state = MsiQueryFeatureStateA(prodcode, "feature");
ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
@@ -929,9 +938,15 @@ static void test_MsiQueryFeatureState(void)
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
state = MsiQueryFeatureStateA(prodcode, "feature");
- ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
- res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"apple", 1);
+ res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"apple", 6);
+ ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+
+ state = MsiQueryFeatureStateA(prodcode, "feature");
+ ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
+
+ res = RegSetValueExA(compkey2, prod_squashed, 0, REG_SZ, (const BYTE *)"orange", 7);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
/* INSTALLSTATE_LOCAL */
@@ -967,11 +982,14 @@ static void test_MsiQueryFeatureState(void)
ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
RegDeleteValueA(compkey, prod_squashed);
+ RegDeleteValueA(compkey2, prod_squashed);
RegDeleteKeyA(compkey, "");
+ RegDeleteKeyA(compkey2, "");
RegDeleteValueA(localkey, "feature");
RegDeleteValueA(userkey, "feature");
RegDeleteKeyA(userkey, "");
RegCloseKey(compkey);
+ RegCloseKey(compkey2);
RegCloseKey(localkey);
RegCloseKey(userkey);
@@ -989,7 +1007,7 @@ static void test_MsiQueryFeatureState(void)
state = MsiQueryFeatureStateA(prodcode, "feature");
ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
- res = RegSetValueExA(userkey, "feature", 0, REG_SZ, (const BYTE *)"", 2);
+ res = RegSetValueExA(userkey, "feature", 0, REG_SZ, (const BYTE *)"", 1);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
/* feature value exists */
@@ -1027,7 +1045,7 @@ static void test_MsiQueryFeatureState(void)
state = MsiQueryFeatureStateA(prodcode, "feature");
ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
- res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)comp_base85, 21);
+ res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)comp_base85, 41);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
state = MsiQueryFeatureStateA(prodcode, "feature");
@@ -1041,6 +1059,14 @@ static void test_MsiQueryFeatureState(void)
res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+ lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\");
+ lstrcatA(keypath, usersid);
+ lstrcatA(keypath, "\\Components\\");
+ lstrcatA(keypath, comp_squashed2);
+
+ res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey2);
+ ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+
state = MsiQueryFeatureStateA(prodcode, "feature");
ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
@@ -1048,20 +1074,29 @@ static void test_MsiQueryFeatureState(void)
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
state = MsiQueryFeatureStateA(prodcode, "feature");
- ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
- res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"apple", 1);
+ res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"apple", 6);
+ ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+
+ state = MsiQueryFeatureStateA(prodcode, "feature");
+ ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
+
+ res = RegSetValueExA(compkey2, prod_squashed, 0, REG_SZ, (const BYTE *)"orange", 7);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
state = MsiQueryFeatureStateA(prodcode, "feature");
ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
RegDeleteValueA(compkey, prod_squashed);
+ RegDeleteValueA(compkey2, prod_squashed);
RegDeleteKeyA(compkey, "");
+ RegDeleteKeyA(compkey2, "");
RegDeleteValueA(localkey, "feature");
RegDeleteValueA(userkey, "feature");
RegDeleteKeyA(userkey, "");
RegCloseKey(compkey);
+ RegCloseKey(compkey2);
RegCloseKey(localkey);
RegCloseKey(userkey);
@@ -1077,7 +1112,7 @@ static void test_MsiQueryFeatureState(void)
state = MsiQueryFeatureStateA(prodcode, "feature");
ok(state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
- res = RegSetValueExA(userkey, "feature", 0, REG_SZ, (const BYTE *)"", 2);
+ res = RegSetValueExA(userkey, "feature", 0, REG_SZ, (const BYTE *)"", 1);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
/* feature value exists */
@@ -1114,7 +1149,7 @@ static void test_MsiQueryFeatureState(void)
state = MsiQueryFeatureStateA(prodcode, "feature");
ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
- res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)comp_base85, 21);
+ res = RegSetValueExA(localkey, "feature", 0, REG_SZ, (const BYTE *)comp_base85, 41);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
state = MsiQueryFeatureStateA(prodcode, "feature");
@@ -1127,6 +1162,13 @@ static void test_MsiQueryFeatureState(void)
res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+ lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\");
+ lstrcatA(keypath, "S-1-5-18\\Components\\");
+ lstrcatA(keypath, comp_squashed2);
+
+ res = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath, &compkey2);
+ ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+
state = MsiQueryFeatureStateA(prodcode, "feature");
ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
@@ -1134,20 +1176,29 @@ static void test_MsiQueryFeatureState(void)
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
state = MsiQueryFeatureStateA(prodcode, "feature");
- ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
- res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"apple", 1);
+ res = RegSetValueExA(compkey, prod_squashed, 0, REG_SZ, (const BYTE *)"apple", 6);
+ ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+
+ state = MsiQueryFeatureStateA(prodcode, "feature");
+ ok(state == INSTALLSTATE_ADVERTISED, "Expected INSTALLSTATE_ADVERTISED, got %d\n", state);
+
+ res = RegSetValueExA(compkey2, prod_squashed, 0, REG_SZ, (const BYTE *)"orange", 7);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
state = MsiQueryFeatureStateA(prodcode, "feature");
ok(state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
RegDeleteValueA(compkey, prod_squashed);
+ RegDeleteValueA(compkey2, prod_squashed);
RegDeleteKeyA(compkey, "");
+ RegDeleteKeyA(compkey2, "");
RegDeleteValueA(localkey, "feature");
RegDeleteValueA(userkey, "feature");
RegDeleteKeyA(userkey, "");
RegCloseKey(compkey);
+ RegCloseKey(compkey2);
RegCloseKey(localkey);
RegCloseKey(userkey);
}
@@ -3649,12 +3700,31 @@ static void test_MsiGetProductInfo(void)
ok(!lstrcmpA(buf, "42"), "Expected \"42\", got \"%s\"\n", buf);
ok(sz == 2, "Expected 2, got %d\n", sz);
+ /* SourceList key does not exist */
+ sz = MAX_PATH;
+ lstrcpyA(buf, "apple");
+ r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGENAME, buf, &sz);
+ ok(r == ERROR_UNKNOWN_PRODUCT,
+ "Expected ERROR_UNKNOWN_PRODUCT, got %d\n", r);
+ ok(!lstrcmpA(buf, "apple"),
+ "Expected buf to be unchanged, got \"%s\"\n", buf);
+ ok(sz == MAX_PATH, "Expected sz to be unchanged, got %d\n", sz);
+
res = RegCreateKeyA(prodkey, "SourceList", &source);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+ /* SourceList key exists, but PackageName val does not exist */
+ sz = MAX_PATH;
+ lstrcpyA(buf, "apple");
+ r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGENAME, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf);
+ ok(sz == 0, "Expected 0, got %d\n", sz);
+
res = RegSetValueExA(source, "PackageName", 0, REG_SZ, (LPBYTE)"packname", 9);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
+ /* PackageName val exists */
sz = MAX_PATH;
lstrcpyA(buf, "apple");
r = MsiGetProductInfoA(prodcode, INSTALLPROPERTY_PACKAGENAME, buf, &sz);
@@ -7405,263 +7475,20 @@ static void test_MsiOpenProduct(void)
DeleteFileA(msifile);
}
-static void test_MsiEnumPatchesEx(void)
+static void test_MsiEnumPatchesEx_usermanaged(LPCSTR usersid, LPCSTR expectedsid)
{
+ MSIINSTALLCONTEXT context;
CHAR keypath[MAX_PATH], patch[MAX_PATH];
CHAR patch_squashed[MAX_PATH], patchcode[MAX_PATH];
CHAR targetsid[MAX_PATH], targetprod[MAX_PATH];
CHAR prodcode[MAX_PATH], prod_squashed[MAX_PATH];
- HKEY prodkey, patches, udprod, udpatch;
- HKEY userkey, hpatch;
- MSIINSTALLCONTEXT context;
+ HKEY prodkey, patches, udprod, udpatch, hpatch;
DWORD size, data;
- LPSTR usersid;
LONG res;
UINT r;
- if (!pMsiEnumPatchesExA)
- {
- win_skip("MsiEnumPatchesExA not implemented\n");
- return;
- }
-
create_test_guid(prodcode, prod_squashed);
create_test_guid(patch, patch_squashed);
- get_user_sid(&usersid);
-
- /* empty szProductCode */
- lstrcpyA(patchcode, "apple");
- lstrcpyA(targetprod, "banana");
- context = 0xdeadbeef;
- lstrcpyA(targetsid, "kiwi");
- size = MAX_PATH;
- r = pMsiEnumPatchesExA("", usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
- MSIPATCHSTATE_ALL, 0, patchcode, targetprod, &context,
- targetsid, &size);
- ok(r == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
- ok(!lstrcmpA(patchcode, "apple"),
- "Expected patchcode to be unchanged, got %s\n", patchcode);
- ok(!lstrcmpA(targetprod, "banana"),
- "Expected targetprod to be unchanged, got %s\n", targetprod);
- ok(context == 0xdeadbeef,
- "Expected context to be unchanged, got %d\n", context);
- ok(!lstrcmpA(targetsid, "kiwi"),
- "Expected targetsid to be unchanged, got %s\n", targetsid);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* garbage szProductCode */
- lstrcpyA(patchcode, "apple");
- lstrcpyA(targetprod, "banana");
- context = 0xdeadbeef;
- lstrcpyA(targetsid, "kiwi");
- size = MAX_PATH;
- r = pMsiEnumPatchesExA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
- MSIPATCHSTATE_ALL, 0, patchcode, targetprod, &context,
- targetsid, &size);
- ok(r == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
- ok(!lstrcmpA(patchcode, "apple"),
- "Expected patchcode to be unchanged, got %s\n", patchcode);
- ok(!lstrcmpA(targetprod, "banana"),
- "Expected targetprod to be unchanged, got %s\n", targetprod);
- ok(context == 0xdeadbeef,
- "Expected context to be unchanged, got %d\n", context);
- ok(!lstrcmpA(targetsid, "kiwi"),
- "Expected targetsid to be unchanged, got %s\n", targetsid);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* guid without brackets */
- lstrcpyA(patchcode, "apple");
- lstrcpyA(targetprod, "banana");
- context = 0xdeadbeef;
- lstrcpyA(targetsid, "kiwi");
- size = MAX_PATH;
- r = pMsiEnumPatchesExA("6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D", usersid,
- MSIINSTALLCONTEXT_USERUNMANAGED, MSIPATCHSTATE_ALL,
- 0, patchcode, targetprod, &context,
- targetsid, &size);
- ok(r == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
- ok(!lstrcmpA(patchcode, "apple"),
- "Expected patchcode to be unchanged, got %s\n", patchcode);
- ok(!lstrcmpA(targetprod, "banana"),
- "Expected targetprod to be unchanged, got %s\n", targetprod);
- ok(context == 0xdeadbeef,
- "Expected context to be unchanged, got %d\n", context);
- ok(!lstrcmpA(targetsid, "kiwi"),
- "Expected targetsid to be unchanged, got %s\n", targetsid);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* guid with brackets */
- lstrcpyA(patchcode, "apple");
- lstrcpyA(targetprod, "banana");
- context = 0xdeadbeef;
- lstrcpyA(targetsid, "kiwi");
- size = MAX_PATH;
- r = pMsiEnumPatchesExA("{6700E8CF-95AB-4D9C-BC2C-15840DDA7A5D}", usersid,
- MSIINSTALLCONTEXT_USERUNMANAGED, MSIPATCHSTATE_ALL,
- 0, patchcode, targetprod, &context,
- targetsid, &size);
- ok(r == ERROR_NO_MORE_ITEMS,
- "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
- ok(!lstrcmpA(patchcode, "apple"),
- "Expected patchcode to be unchanged, got %s\n", patchcode);
- ok(!lstrcmpA(targetprod, "banana"),
- "Expected targetprod to be unchanged, got %s\n", targetprod);
- ok(context == 0xdeadbeef,
- "Expected context to be unchanged, got %d\n", context);
- ok(!lstrcmpA(targetsid, "kiwi"),
- "Expected targetsid to be unchanged, got %s\n", targetsid);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* szUserSid is S-1-5-18 */
- lstrcpyA(patchcode, "apple");
- lstrcpyA(targetprod, "banana");
- context = 0xdeadbeef;
- lstrcpyA(targetsid, "kiwi");
- size = MAX_PATH;
- r = pMsiEnumPatchesExA(prodcode, "S-1-5-18",
- MSIINSTALLCONTEXT_USERUNMANAGED, MSIPATCHSTATE_ALL,
- 0, patchcode, targetprod, &context,
- targetsid, &size);
- ok(r == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
- ok(!lstrcmpA(patchcode, "apple"),
- "Expected patchcode to be unchanged, got %s\n", patchcode);
- ok(!lstrcmpA(targetprod, "banana"),
- "Expected targetprod to be unchanged, got %s\n", targetprod);
- ok(context == 0xdeadbeef,
- "Expected context to be unchanged, got %d\n", context);
- ok(!lstrcmpA(targetsid, "kiwi"),
- "Expected targetsid to be unchanged, got %s\n", targetsid);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* dwContext is MSIINSTALLCONTEXT_MACHINE, but szUserSid is non-NULL */
- lstrcpyA(patchcode, "apple");
- lstrcpyA(targetprod, "banana");
- context = 0xdeadbeef;
- lstrcpyA(targetsid, "kiwi");
- size = MAX_PATH;
- r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_MACHINE,
- MSIPATCHSTATE_ALL, 0, patchcode, targetprod,
- &context, targetsid, &size);
- ok(r == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
- ok(!lstrcmpA(patchcode, "apple"),
- "Expected patchcode to be unchanged, got %s\n", patchcode);
- ok(!lstrcmpA(targetprod, "banana"),
- "Expected targetprod to be unchanged, got %s\n", targetprod);
- ok(context == 0xdeadbeef,
- "Expected context to be unchanged, got %d\n", context);
- ok(!lstrcmpA(targetsid, "kiwi"),
- "Expected targetsid to be unchanged, got %s\n", targetsid);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* dwContext is out of bounds */
- lstrcpyA(patchcode, "apple");
- lstrcpyA(targetprod, "banana");
- context = 0xdeadbeef;
- lstrcpyA(targetsid, "kiwi");
- size = MAX_PATH;
- r = pMsiEnumPatchesExA(prodcode, usersid, 0,
- MSIPATCHSTATE_ALL, 0, patchcode, targetprod,
- &context, targetsid, &size);
- ok(r == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
- ok(!lstrcmpA(patchcode, "apple"),
- "Expected patchcode to be unchanged, got %s\n", patchcode);
- ok(!lstrcmpA(targetprod, "banana"),
- "Expected targetprod to be unchanged, got %s\n", targetprod);
- ok(context == 0xdeadbeef,
- "Expected context to be unchanged, got %d\n", context);
- ok(!lstrcmpA(targetsid, "kiwi"),
- "Expected targetsid to be unchanged, got %s\n", targetsid);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* dwContext is out of bounds */
- lstrcpyA(patchcode, "apple");
- lstrcpyA(targetprod, "banana");
- context = 0xdeadbeef;
- lstrcpyA(targetsid, "kiwi");
- size = MAX_PATH;
- r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_ALL + 1,
- MSIPATCHSTATE_ALL, 0, patchcode, targetprod,
- &context, targetsid, &size);
- ok(r == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
- ok(!lstrcmpA(patchcode, "apple"),
- "Expected patchcode to be unchanged, got %s\n", patchcode);
- ok(!lstrcmpA(targetprod, "banana"),
- "Expected targetprod to be unchanged, got %s\n", targetprod);
- ok(context == 0xdeadbeef,
- "Expected context to be unchanged, got %d\n", context);
- ok(!lstrcmpA(targetsid, "kiwi"),
- "Expected targetsid to be unchanged, got %s\n", targetsid);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* dwFilter is out of bounds */
- lstrcpyA(patchcode, "apple");
- lstrcpyA(targetprod, "banana");
- context = 0xdeadbeef;
- lstrcpyA(targetsid, "kiwi");
- size = MAX_PATH;
- r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
- MSIPATCHSTATE_INVALID, 0, patchcode, targetprod,
- &context, targetsid, &size);
- ok(r == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
- ok(!lstrcmpA(patchcode, "apple"),
- "Expected patchcode to be unchanged, got %s\n", patchcode);
- ok(!lstrcmpA(targetprod, "banana"),
- "Expected targetprod to be unchanged, got %s\n", targetprod);
- ok(context == 0xdeadbeef,
- "Expected context to be unchanged, got %d\n", context);
- ok(!lstrcmpA(targetsid, "kiwi"),
- "Expected targetsid to be unchanged, got %s\n", targetsid);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* dwFilter is out of bounds */
- lstrcpyA(patchcode, "apple");
- lstrcpyA(targetprod, "banana");
- context = 0xdeadbeef;
- lstrcpyA(targetsid, "kiwi");
- size = MAX_PATH;
- r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
- MSIPATCHSTATE_ALL + 1, 0, patchcode, targetprod,
- &context, targetsid, &size);
- ok(r == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
- ok(!lstrcmpA(patchcode, "apple"),
- "Expected patchcode to be unchanged, got %s\n", patchcode);
- ok(!lstrcmpA(targetprod, "banana"),
- "Expected targetprod to be unchanged, got %s\n", targetprod);
- ok(context == 0xdeadbeef,
- "Expected context to be unchanged, got %d\n", context);
- ok(!lstrcmpA(targetsid, "kiwi"),
- "Expected targetsid to be unchanged, got %s\n", targetsid);
- ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
-
- /* pcchTargetUserSid is NULL while szTargetUserSid is non-NULL */
- lstrcpyA(patchcode, "apple");
- lstrcpyA(targetprod, "banana");
- context = 0xdeadbeef;
- lstrcpyA(targetsid, "kiwi");
- r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
- MSIPATCHSTATE_ALL, 0, patchcode, targetprod,
- &context, targetsid, NULL);
- ok(r == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
- ok(!lstrcmpA(patchcode, "apple"),
- "Expected patchcode to be unchanged, got %s\n", patchcode);
- ok(!lstrcmpA(targetprod, "banana"),
- "Expected targetprod to be unchanged, got %s\n", targetprod);
- ok(context == 0xdeadbeef,
- "Expected context to be unchanged, got %d\n", context);
- ok(!lstrcmpA(targetsid, "kiwi"),
- "Expected targetsid to be unchanged, got %s\n", targetsid);
-
- /* MSIINSTALLCONTEXT_USERMANAGED */
/* MSIPATCHSTATE_APPLIED */
@@ -7685,7 +7512,7 @@ static void test_MsiEnumPatchesEx(void)
ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\");
- lstrcatA(keypath, usersid);
+ lstrcatA(keypath, expectedsid);
lstrcatA(keypath, "\\Installer\\Products\\");
lstrcatA(keypath, prod_squashed);
@@ -7771,7 +7598,7 @@ static void test_MsiEnumPatchesEx(void)
context = 0xdeadbeef;
lstrcpyA(targetsid, "kiwi");
size = MAX_PATH;
- r = pMsiEnumPatchesExA(prodcode, NULL, MSIINSTALLCONTEXT_USERMANAGED,
+ r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_USERMANAGED,
MSIPATCHSTATE_APPLIED, 0, patchcode, targetprod,
&context, targetsid, &size);
ok(r == ERROR_BAD_CONFIGURATION,
@@ -7832,10 +7659,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERMANAGED,
"Expected MSIINSTALLCONTEXT_USERMANAGED, got %d\n", context);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* increase the index */
lstrcpyA(patchcode, "apple");
@@ -7891,10 +7718,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERMANAGED,
"Expected MSIINSTALLCONTEXT_USERMANAGED, got %d\n", context);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* szTargetProductCode is NULL */
lstrcpyA(patchcode, "apple");
@@ -7909,10 +7736,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", patch, patchcode);
ok(context == MSIINSTALLCONTEXT_USERMANAGED,
"Expected MSIINSTALLCONTEXT_USERMANAGED, got %d\n", context);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* pdwTargetProductContext is NULL */
lstrcpyA(patchcode, "apple");
@@ -7927,10 +7754,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", patch, patchcode);
ok(!lstrcmpA(targetprod, prodcode),
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* szTargetUserSid is NULL */
lstrcpyA(patchcode, "apple");
@@ -7947,15 +7774,15 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERMANAGED,
"Expected MSIINSTALLCONTEXT_USERMANAGED, got %d\n", context);
- ok(size == lstrlenA(usersid) * sizeof(WCHAR),
- "Got %d\n", size);
+ ok(size == lstrlenA(expectedsid) * sizeof(WCHAR),
+ "Expected %d*sizeof(WCHAR), got %d\n", lstrlenA(expectedsid), size);
/* pcchTargetUserSid is exactly the length of szTargetUserSid */
lstrcpyA(patchcode, "apple");
lstrcpyA(targetprod, "banana");
context = 0xdeadbeef;
lstrcpyA(targetsid, "kiwi");
- size = lstrlenA(usersid);
+ size = lstrlenA(expectedsid);
r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_USERMANAGED,
MSIPATCHSTATE_APPLIED, 0, patchcode, targetprod,
&context, targetsid, &size);
@@ -7966,17 +7793,17 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERMANAGED,
"Expected MSIINSTALLCONTEXT_USERMANAGED, got %d\n", context);
- ok(!strncmp(targetsid, usersid, lstrlenA(usersid) - 1),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid) * sizeof(WCHAR),
- "Got %d\n", size);
+ ok(!strncmp(targetsid, expectedsid, lstrlenA(expectedsid) - 1),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid) * sizeof(WCHAR),
+ "Expected %d*sizeof(WCHAR), got %d\n", lstrlenA(expectedsid), size);
/* pcchTargetUserSid has enough room for NULL terminator */
lstrcpyA(patchcode, "apple");
lstrcpyA(targetprod, "banana");
context = 0xdeadbeef;
lstrcpyA(targetsid, "kiwi");
- size = lstrlenA(usersid) + 1;
+ size = lstrlenA(expectedsid) + 1;
r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_USERMANAGED,
MSIPATCHSTATE_APPLIED, 0, patchcode, targetprod,
&context, targetsid, &size);
@@ -7987,10 +7814,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERMANAGED,
"Expected MSIINSTALLCONTEXT_USERMANAGED, got %d\n", context);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* both szTargetuserSid and pcchTargetUserSid are NULL */
lstrcpyA(patchcode, "apple");
@@ -8029,7 +7856,7 @@ static void test_MsiEnumPatchesEx(void)
ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\");
- lstrcatA(keypath, usersid);
+ lstrcatA(keypath, expectedsid);
lstrcatA(keypath, "\\Products\\");
lstrcatA(keypath, prod_squashed);
@@ -8124,10 +7951,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERMANAGED,
"Expected MSIINSTALLCONTEXT_USERMANAGED, got %d\n", context);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* MSIPATCHSTATE_OBSOLETED */
@@ -8171,10 +7998,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERMANAGED,
"Expected MSIINSTALLCONTEXT_USERMANAGED, got %d\n", context);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* MSIPATCHSTATE_REGISTERED */
/* FIXME */
@@ -8197,10 +8024,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERMANAGED,
"Expected MSIINSTALLCONTEXT_USERMANAGED, got %d\n", context);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* same patch in multiple places, only one is enumerated */
lstrcpyA(patchcode, "apple");
@@ -8234,8 +8061,23 @@ static void test_MsiEnumPatchesEx(void)
RegCloseKey(patches);
RegDeleteKeyA(prodkey, "");
RegCloseKey(prodkey);
+}
- /* MSIINSTALLCONTEXT_USERUNMANAGED */
+static void test_MsiEnumPatchesEx_userunmanaged(LPCSTR usersid, LPCSTR expectedsid)
+{
+ MSIINSTALLCONTEXT context;
+ CHAR keypath[MAX_PATH], patch[MAX_PATH];
+ CHAR patch_squashed[MAX_PATH], patchcode[MAX_PATH];
+ CHAR targetsid[MAX_PATH], targetprod[MAX_PATH];
+ CHAR prodcode[MAX_PATH], prod_squashed[MAX_PATH];
+ HKEY prodkey, patches, udprod, udpatch;
+ HKEY userkey, hpatch;
+ DWORD size, data;
+ LONG res;
+ UINT r;
+
+ create_test_guid(prodcode, prod_squashed);
+ create_test_guid(patch, patch_squashed);
/* MSIPATCHSTATE_APPLIED */
@@ -8408,7 +8250,7 @@ static void test_MsiEnumPatchesEx(void)
ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\");
- lstrcatA(keypath, usersid);
+ lstrcatA(keypath, expectedsid);
lstrcatA(keypath, "\\Patches\\");
lstrcatA(keypath, patch_squashed);
@@ -8431,10 +8273,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERUNMANAGED,
"Expected MSIINSTALLCONTEXT_USERUNMANAGED, got %d\n", context);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* MSIPATCHSTATE_SUPERSEDED */
@@ -8458,7 +8300,7 @@ static void test_MsiEnumPatchesEx(void)
ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\");
- lstrcatA(keypath, usersid);
+ lstrcatA(keypath, expectedsid);
lstrcatA(keypath, "\\Products\\");
lstrcatA(keypath, prod_squashed);
@@ -8553,10 +8395,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERUNMANAGED,
"Expected MSIINSTALLCONTEXT_USERUNMANAGED, got %d\n", context);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* MSIPATCHSTATE_OBSOLETED */
@@ -8600,10 +8442,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERUNMANAGED,
"Expected MSIINSTALLCONTEXT_USERUNMANAGED, got %d\n", context);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* MSIPATCHSTATE_REGISTERED */
/* FIXME */
@@ -8626,10 +8468,10 @@ static void test_MsiEnumPatchesEx(void)
"Expected \"%s\", got \"%s\"\n", prodcode, targetprod);
ok(context == MSIINSTALLCONTEXT_USERUNMANAGED,
"Expected MSIINSTALLCONTEXT_USERUNMANAGED, got %d\n", context);
- ok(!lstrcmpA(targetsid, usersid),
- "Expected \"%s\", got \"%s\"\n", usersid, targetsid);
- ok(size == lstrlenA(usersid),
- "Expected %d, got %d\n", lstrlenA(usersid), size);
+ ok(!lstrcmpA(targetsid, expectedsid),
+ "Expected \"%s\", got \"%s\"\n", expectedsid, targetsid);
+ ok(size == lstrlenA(expectedsid),
+ "Expected %d, got %d\n", lstrlenA(expectedsid), size);
/* same patch in multiple places, only one is enumerated */
lstrcpyA(patchcode, "apple");
@@ -8656,6 +8498,8 @@ static void test_MsiEnumPatchesEx(void)
RegCloseKey(hpatch);
RegDeleteKeyA(udpatch, "");
RegCloseKey(udpatch);
+ RegDeleteKeyA(udprod, "");
+ RegCloseKey(udprod);
RegDeleteKeyA(userkey, "");
RegCloseKey(userkey);
RegDeleteValueA(patches, patch_squashed);
@@ -8664,8 +8508,23 @@ static void test_MsiEnumPatchesEx(void)
RegCloseKey(patches);
RegDeleteKeyA(prodkey, "");
RegCloseKey(prodkey);
+}
- /* MSIINSTALLCONTEXT_MACHINE */
+static void test_MsiEnumPatchesEx_machine()
+{
+ CHAR keypath[MAX_PATH], patch[MAX_PATH];
+ CHAR patch_squashed[MAX_PATH], patchcode[MAX_PATH];
+ CHAR targetsid[MAX_PATH], targetprod[MAX_PATH];
+ CHAR prodcode[MAX_PATH], prod_squashed[MAX_PATH];
+ HKEY prodkey, patches, udprod, udpatch;
+ HKEY hpatch;
+ MSIINSTALLCONTEXT context;
+ DWORD size, data;
+ LONG res;
+ UINT r;
+
+ create_test_guid(prodcode, prod_squashed);
+ create_test_guid(patch, patch_squashed);
/* MSIPATCHSTATE_APPLIED */
@@ -9084,12 +8943,273 @@ static void test_MsiEnumPatchesEx(void)
RegCloseKey(prodkey);
}
+static void test_MsiEnumPatchesEx(void)
+{
+ CHAR targetsid[MAX_PATH], targetprod[MAX_PATH];
+ CHAR prodcode[MAX_PATH], prod_squashed[MAX_PATH];
+ CHAR patchcode[MAX_PATH];
+ MSIINSTALLCONTEXT context;
+ LPSTR usersid;
+ DWORD size;
+ UINT r;
+
+ if (!pMsiEnumPatchesExA)
+ {
+ win_skip("MsiEnumPatchesExA not implemented\n");
+ return;
+ }
+
+ create_test_guid(prodcode, prod_squashed);
+ get_user_sid(&usersid);
+
+ /* empty szProductCode */
+ lstrcpyA(patchcode, "apple");
+ lstrcpyA(targetprod, "banana");
+ context = 0xdeadbeef;
+ lstrcpyA(targetsid, "kiwi");
+ size = MAX_PATH;
+ r = pMsiEnumPatchesExA("", usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
+ MSIPATCHSTATE_ALL, 0, patchcode, targetprod, &context,
+ targetsid, &size);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+ ok(!lstrcmpA(patchcode, "apple"),
+ "Expected patchcode to be unchanged, got %s\n", patchcode);
+ ok(!lstrcmpA(targetprod, "banana"),
+ "Expected targetprod to be unchanged, got %s\n", targetprod);
+ ok(context == 0xdeadbeef,
+ "Expected context to be unchanged, got %d\n", context);
+ ok(!lstrcmpA(targetsid, "kiwi"),
+ "Expected targetsid to be unchanged, got %s\n", targetsid);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* garbage szProductCode */
+ lstrcpyA(patchcode, "apple");
+ lstrcpyA(targetprod, "banana");
+ context = 0xdeadbeef;
+ lstrcpyA(targetsid, "kiwi");
+ size = MAX_PATH;
+ r = pMsiEnumPatchesExA("garbage", usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
+ MSIPATCHSTATE_ALL, 0, patchcode, targetprod, &context,
+ targetsid, &size);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+ ok(!lstrcmpA(patchcode, "apple"),
+ "Expected patchcode to be unchanged, got %s\n", patchcode);
+ ok(!lstrcmpA(targetprod, "banana"),
+ "Expected targetprod to be unchanged, got %s\n", targetprod);
+ ok(context == 0xdeadbeef,
+ "Expected context to be unchanged, got %d\n", context);
+ ok(!lstrcmpA(targetsid, "kiwi"),
+ "Expected targetsid to be unchanged, got %s\n", targetsid);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* guid without brackets */
+ lstrcpyA(patchcode, "apple");
+ lstrcpyA(targetprod, "banana");
+ context = 0xdeadbeef;
+ lstrcpyA(targetsid, "kiwi");
+ size = MAX_PATH;
+ r = pMsiEnumPatchesExA("6700E8CF-95AB-4D9C-BC2C-15840DEA7A5D", usersid,
+ MSIINSTALLCONTEXT_USERUNMANAGED, MSIPATCHSTATE_ALL,
+ 0, patchcode, targetprod, &context,
+ targetsid, &size);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+ ok(!lstrcmpA(patchcode, "apple"),
+ "Expected patchcode to be unchanged, got %s\n", patchcode);
+ ok(!lstrcmpA(targetprod, "banana"),
+ "Expected targetprod to be unchanged, got %s\n", targetprod);
+ ok(context == 0xdeadbeef,
+ "Expected context to be unchanged, got %d\n", context);
+ ok(!lstrcmpA(targetsid, "kiwi"),
+ "Expected targetsid to be unchanged, got %s\n", targetsid);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* guid with brackets */
+ lstrcpyA(patchcode, "apple");
+ lstrcpyA(targetprod, "banana");
+ context = 0xdeadbeef;
+ lstrcpyA(targetsid, "kiwi");
+ size = MAX_PATH;
+ r = pMsiEnumPatchesExA("{6700E8CF-95AB-4D9C-BC2C-15840DDA7A5D}", usersid,
+ MSIINSTALLCONTEXT_USERUNMANAGED, MSIPATCHSTATE_ALL,
+ 0, patchcode, targetprod, &context,
+ targetsid, &size);
+ ok(r == ERROR_NO_MORE_ITEMS,
+ "Expected ERROR_NO_MORE_ITEMS, got %d\n", r);
+ ok(!lstrcmpA(patchcode, "apple"),
+ "Expected patchcode to be unchanged, got %s\n", patchcode);
+ ok(!lstrcmpA(targetprod, "banana"),
+ "Expected targetprod to be unchanged, got %s\n", targetprod);
+ ok(context == 0xdeadbeef,
+ "Expected context to be unchanged, got %d\n", context);
+ ok(!lstrcmpA(targetsid, "kiwi"),
+ "Expected targetsid to be unchanged, got %s\n", targetsid);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* szUserSid is S-1-5-18 */
+ lstrcpyA(patchcode, "apple");
+ lstrcpyA(targetprod, "banana");
+ context = 0xdeadbeef;
+ lstrcpyA(targetsid, "kiwi");
+ size = MAX_PATH;
+ r = pMsiEnumPatchesExA(prodcode, "S-1-5-18",
+ MSIINSTALLCONTEXT_USERUNMANAGED, MSIPATCHSTATE_ALL,
+ 0, patchcode, targetprod, &context,
+ targetsid, &size);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+ ok(!lstrcmpA(patchcode, "apple"),
+ "Expected patchcode to be unchanged, got %s\n", patchcode);
+ ok(!lstrcmpA(targetprod, "banana"),
+ "Expected targetprod to be unchanged, got %s\n", targetprod);
+ ok(context == 0xdeadbeef,
+ "Expected context to be unchanged, got %d\n", context);
+ ok(!lstrcmpA(targetsid, "kiwi"),
+ "Expected targetsid to be unchanged, got %s\n", targetsid);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* dwContext is MSIINSTALLCONTEXT_MACHINE, but szUserSid is non-NULL */
+ lstrcpyA(patchcode, "apple");
+ lstrcpyA(targetprod, "banana");
+ context = 0xdeadbeef;
+ lstrcpyA(targetsid, "kiwi");
+ size = MAX_PATH;
+ r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_MACHINE,
+ MSIPATCHSTATE_ALL, 0, patchcode, targetprod,
+ &context, targetsid, &size);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+ ok(!lstrcmpA(patchcode, "apple"),
+ "Expected patchcode to be unchanged, got %s\n", patchcode);
+ ok(!lstrcmpA(targetprod, "banana"),
+ "Expected targetprod to be unchanged, got %s\n", targetprod);
+ ok(context == 0xdeadbeef,
+ "Expected context to be unchanged, got %d\n", context);
+ ok(!lstrcmpA(targetsid, "kiwi"),
+ "Expected targetsid to be unchanged, got %s\n", targetsid);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* dwContext is out of bounds */
+ lstrcpyA(patchcode, "apple");
+ lstrcpyA(targetprod, "banana");
+ context = 0xdeadbeef;
+ lstrcpyA(targetsid, "kiwi");
+ size = MAX_PATH;
+ r = pMsiEnumPatchesExA(prodcode, usersid, 0,
+ MSIPATCHSTATE_ALL, 0, patchcode, targetprod,
+ &context, targetsid, &size);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+ ok(!lstrcmpA(patchcode, "apple"),
+ "Expected patchcode to be unchanged, got %s\n", patchcode);
+ ok(!lstrcmpA(targetprod, "banana"),
+ "Expected targetprod to be unchanged, got %s\n", targetprod);
+ ok(context == 0xdeadbeef,
+ "Expected context to be unchanged, got %d\n", context);
+ ok(!lstrcmpA(targetsid, "kiwi"),
+ "Expected targetsid to be unchanged, got %s\n", targetsid);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* dwContext is out of bounds */
+ lstrcpyA(patchcode, "apple");
+ lstrcpyA(targetprod, "banana");
+ context = 0xdeadbeef;
+ lstrcpyA(targetsid, "kiwi");
+ size = MAX_PATH;
+ r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_ALL + 1,
+ MSIPATCHSTATE_ALL, 0, patchcode, targetprod,
+ &context, targetsid, &size);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+ ok(!lstrcmpA(patchcode, "apple"),
+ "Expected patchcode to be unchanged, got %s\n", patchcode);
+ ok(!lstrcmpA(targetprod, "banana"),
+ "Expected targetprod to be unchanged, got %s\n", targetprod);
+ ok(context == 0xdeadbeef,
+ "Expected context to be unchanged, got %d\n", context);
+ ok(!lstrcmpA(targetsid, "kiwi"),
+ "Expected targetsid to be unchanged, got %s\n", targetsid);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* dwFilter is out of bounds */
+ lstrcpyA(patchcode, "apple");
+ lstrcpyA(targetprod, "banana");
+ context = 0xdeadbeef;
+ lstrcpyA(targetsid, "kiwi");
+ size = MAX_PATH;
+ r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
+ MSIPATCHSTATE_INVALID, 0, patchcode, targetprod,
+ &context, targetsid, &size);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+ ok(!lstrcmpA(patchcode, "apple"),
+ "Expected patchcode to be unchanged, got %s\n", patchcode);
+ ok(!lstrcmpA(targetprod, "banana"),
+ "Expected targetprod to be unchanged, got %s\n", targetprod);
+ ok(context == 0xdeadbeef,
+ "Expected context to be unchanged, got %d\n", context);
+ ok(!lstrcmpA(targetsid, "kiwi"),
+ "Expected targetsid to be unchanged, got %s\n", targetsid);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* dwFilter is out of bounds */
+ lstrcpyA(patchcode, "apple");
+ lstrcpyA(targetprod, "banana");
+ context = 0xdeadbeef;
+ lstrcpyA(targetsid, "kiwi");
+ size = MAX_PATH;
+ r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
+ MSIPATCHSTATE_ALL + 1, 0, patchcode, targetprod,
+ &context, targetsid, &size);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+ ok(!lstrcmpA(patchcode, "apple"),
+ "Expected patchcode to be unchanged, got %s\n", patchcode);
+ ok(!lstrcmpA(targetprod, "banana"),
+ "Expected targetprod to be unchanged, got %s\n", targetprod);
+ ok(context == 0xdeadbeef,
+ "Expected context to be unchanged, got %d\n", context);
+ ok(!lstrcmpA(targetsid, "kiwi"),
+ "Expected targetsid to be unchanged, got %s\n", targetsid);
+ ok(size == MAX_PATH, "Expected size to be unchanged, got %d\n", size);
+
+ /* pcchTargetUserSid is NULL while szTargetUserSid is non-NULL */
+ lstrcpyA(patchcode, "apple");
+ lstrcpyA(targetprod, "banana");
+ context = 0xdeadbeef;
+ lstrcpyA(targetsid, "kiwi");
+ r = pMsiEnumPatchesExA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
+ MSIPATCHSTATE_ALL, 0, patchcode, targetprod,
+ &context, targetsid, NULL);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+ ok(!lstrcmpA(patchcode, "apple"),
+ "Expected patchcode to be unchanged, got %s\n", patchcode);
+ ok(!lstrcmpA(targetprod, "banana"),
+ "Expected targetprod to be unchanged, got %s\n", targetprod);
+ ok(context == 0xdeadbeef,
+ "Expected context to be unchanged, got %d\n", context);
+ ok(!lstrcmpA(targetsid, "kiwi"),
+ "Expected targetsid to be unchanged, got %s\n", targetsid);
+
+ test_MsiEnumPatchesEx_usermanaged(usersid, usersid);
+ test_MsiEnumPatchesEx_usermanaged(NULL, usersid);
+ test_MsiEnumPatchesEx_usermanaged("S-1-2-34", "S-1-2-34");
+ test_MsiEnumPatchesEx_userunmanaged(usersid, usersid);
+ test_MsiEnumPatchesEx_userunmanaged(NULL, usersid);
+ /* FIXME: Successfully test userunmanaged with a different user */
+ test_MsiEnumPatchesEx_machine();
+}
+
static void test_MsiEnumPatches(void)
{
CHAR keypath[MAX_PATH], patch[MAX_PATH];
CHAR patchcode[MAX_PATH], patch_squashed[MAX_PATH];
CHAR prodcode[MAX_PATH], prod_squashed[MAX_PATH];
CHAR transforms[MAX_PATH];
+ WCHAR patchW[MAX_PATH], prodcodeW[MAX_PATH], transformsW[MAX_PATH];
HKEY prodkey, patches, udprod;
HKEY userkey, hpatch, udpatch;
DWORD size, data;
@@ -9298,7 +9418,7 @@ static void test_MsiEnumPatches(void)
"Expected \"%s\", got \"%s\"\n", patchcode, patch);
ok(!lstrcmpA(transforms, "whatever"),
"Expected \"whatever\", got \"%s\"\n", transforms);
- ok(size == 8, "Expected 8, got %d\n", size);
+ ok(size == 8 || size == MAX_PATH, "Expected 8 or MAX_PATH, got %d\n", size);
/* lpPatchBuf is NULL */
size = MAX_PATH;
@@ -9341,7 +9461,7 @@ static void test_MsiEnumPatches(void)
"Expected \"%s\", got \"%s\"\n", patchcode, patch);
ok(!lstrcmpA(transforms, "whate"),
"Expected \"whate\", got \"%s\"\n", transforms);
- ok(size == 16, "Expected 16, got %d\n", size);
+ ok(size == 8 || size == 16, "Expected 8 or 16, got %d\n", size);
/* increase the index */
size = MAX_PATH;
@@ -9507,7 +9627,7 @@ static void test_MsiEnumPatches(void)
"Expected \"%s\", got \"%s\"\n", patchcode, patch);
ok(!lstrcmpA(transforms, "whatever"),
"Expected \"whatever\", got \"%s\"\n", transforms);
- ok(size == 8, "Expected 8, got %d\n", size);
+ ok(size == 8 || size == MAX_PATH, "Expected 8 or MAX_PATH, got %d\n", size);
RegDeleteKeyA(userkey, "");
RegCloseKey(userkey);
@@ -9632,7 +9752,7 @@ static void test_MsiEnumPatches(void)
"Expected \"%s\", got \"%s\"\n", patchcode, patch);
ok(!lstrcmpA(transforms, "whatever"),
"Expected \"whatever\", got \"%s\"\n", transforms);
- ok(size == 8, "Expected 8, got %d\n", size);
+ ok(size == 8 || size == MAX_PATH, "Expected 8 or MAX_PATH, got %d\n", size);
lstrcpyA(keypath, "Software\\Microsoft\\Windows\\CurrentVersion\\");
lstrcatA(keypath, "Installer\\UserData\\S-1-5-18\\Products\\");
@@ -9651,7 +9771,7 @@ static void test_MsiEnumPatches(void)
"Expected \"%s\", got \"%s\"\n", patchcode, patch);
ok(!lstrcmpA(transforms, "whatever"),
"Expected \"whatever\", got \"%s\"\n", transforms);
- ok(size == 8, "Expected 8, got %d\n", size);
+ ok(size == 8 || size == MAX_PATH, "Expected 8 or MAX_PATH, got %d\n", size);
res = RegCreateKeyA(udprod, "Patches", &udpatch);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
@@ -9666,7 +9786,7 @@ static void test_MsiEnumPatches(void)
"Expected \"%s\", got \"%s\"\n", patchcode, patch);
ok(!lstrcmpA(transforms, "whatever"),
"Expected \"whatever\", got \"%s\"\n", transforms);
- ok(size == 8, "Expected 8, got %d\n", size);
+ ok(size == 8 || size == MAX_PATH, "Expected 8 or MAX_PATH, got %d\n", size);
res = RegCreateKeyA(udpatch, patch_squashed, &hpatch);
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", res);
@@ -9698,8 +9818,39 @@ static void test_MsiEnumPatches(void)
"Expected \"%s\", got \"%s\"\n", patchcode, patch);
ok(!lstrcmpA(transforms, "whatever"),
"Expected \"whatever\", got \"%s\"\n", transforms);
+ ok(size == 8 || size == MAX_PATH, "Expected 8 or MAX_PATH, got %d\n", size);
+
+ /* now duplicate some of the tests for the W version */
+
+ /* pcchTransformsBuf is too small */
+ size = 6;
+ MultiByteToWideChar( CP_ACP, 0, prodcode, -1, prodcodeW, MAX_PATH );
+ MultiByteToWideChar( CP_ACP, 0, "apple", -1, patchW, MAX_PATH );
+ MultiByteToWideChar( CP_ACP, 0, "banana", -1, transformsW, MAX_PATH );
+ r = MsiEnumPatchesW(prodcodeW, 0, patchW, transformsW, &size);
+ ok(r == ERROR_MORE_DATA, "Expected ERROR_MORE_DATA, got %d\n", r);
+ WideCharToMultiByte( CP_ACP, 0, patchW, -1, patch, MAX_PATH, NULL, NULL );
+ WideCharToMultiByte( CP_ACP, 0, transformsW, -1, transforms, MAX_PATH, NULL, NULL );
+ ok(!lstrcmpA(patch, patchcode),
+ "Expected \"%s\", got \"%s\"\n", patchcode, patch);
+ ok(!lstrcmpA(transforms, "whate"),
+ "Expected \"whate\", got \"%s\"\n", transforms);
ok(size == 8, "Expected 8, got %d\n", size);
+ /* patch code value exists */
+ size = MAX_PATH;
+ MultiByteToWideChar( CP_ACP, 0, "apple", -1, patchW, MAX_PATH );
+ MultiByteToWideChar( CP_ACP, 0, "banana", -1, transformsW, MAX_PATH );
+ r = MsiEnumPatchesW(prodcodeW, 0, patchW, transformsW, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ WideCharToMultiByte( CP_ACP, 0, patchW, -1, patch, MAX_PATH, NULL, NULL );
+ WideCharToMultiByte( CP_ACP, 0, transformsW, -1, transforms, MAX_PATH, NULL, NULL );
+ ok(!lstrcmpA(patch, patchcode),
+ "Expected \"%s\", got \"%s\"\n", patchcode, patch);
+ ok(!lstrcmpA(transforms, "whatever"),
+ "Expected \"whatever\", got \"%s\"\n", transforms);
+ ok(size == 8 || size == MAX_PATH, "Expected 8 or MAX_PATH, got %d\n", size);
+
RegDeleteValueA(patches, patch_squashed);
RegDeleteValueA(patches, "Patches");
RegDeleteKeyA(patches, "");
@@ -10727,6 +10878,76 @@ static void test_MsiGetPatchInfoEx(void)
RegCloseKey(udprod);
}
+static void test_MsiEnumProducts(void)
+{
+ UINT r;
+ int found1, found2, found3;
+ DWORD index;
+ char product1[39], product2[39], product3[39], guid[39];
+ char product_squashed1[33], product_squashed2[33], product_squashed3[33];
+ char keypath1[MAX_PATH], keypath2[MAX_PATH], keypath3[MAX_PATH];
+ char *usersid;
+ HKEY key1, key2, key3;
+
+ create_test_guid(product1, product_squashed1);
+ create_test_guid(product2, product_squashed2);
+ create_test_guid(product3, product_squashed3);
+ get_user_sid(&usersid);
+
+ strcpy(keypath1, "Software\\Classes\\Installer\\Products\\");
+ strcat(keypath1, product_squashed1);
+
+ r = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath1, &key1);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ strcpy(keypath2, "Software\\Microsoft\\Windows\\CurrentVersion\\Installer\\Managed\\");
+ strcat(keypath2, usersid);
+ strcat(keypath2, "\\Installer\\Products\\");
+ strcat(keypath2, product_squashed2);
+
+ r = RegCreateKeyA(HKEY_LOCAL_MACHINE, keypath2, &key2);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ strcpy(keypath3, "Software\\Microsoft\\Installer\\Products\\");
+ strcat(keypath3, product_squashed3);
+
+ r = RegCreateKeyA(HKEY_CURRENT_USER, keypath3, &key3);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ index = 0;
+ r = MsiEnumProductsA(index, NULL);
+ ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u\n", r);
+
+ index = 2;
+ r = MsiEnumProductsA(index, guid);
+ ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u\n", r);
+
+ index = 0;
+ r = MsiEnumProductsA(index, guid);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
+
+ found1 = found2 = found3 = 0;
+ while ((r = MsiEnumProductsA(index, guid)) == ERROR_SUCCESS)
+ {
+ if (!strcmp(product1, guid)) found1 = 1;
+ if (!strcmp(product2, guid)) found2 = 1;
+ if (!strcmp(product3, guid)) found3 = 1;
+ index++;
+ }
+ ok(r == ERROR_NO_MORE_ITEMS, "Expected ERROR_NO_MORE_ITEMS, got %u\n", r);
+ ok(found1, "product1 not found\n");
+ ok(found2, "product2 not found\n");
+ ok(found3, "product3 not found\n");
+
+ RegDeleteKeyA(key1, "");
+ RegDeleteKeyA(key2, "");
+ RegDeleteKeyA(key3, "");
+ RegCloseKey(key1);
+ RegCloseKey(key2);
+ RegCloseKey(key3);
+ LocalFree(usersid);
+}
+
START_TEST(msi)
{
init_functionpointers();
@@ -10754,6 +10975,7 @@ START_TEST(msi)
test_MsiEnumPatchesEx();
test_MsiEnumPatches();
test_MsiGetPatchInfoEx();
+ test_MsiEnumProducts();
}
test_MsiGetFileVersion();
diff --git a/rostests/winetests/msi/package.c b/rostests/winetests/msi/package.c
index 04ad64c83e3..308a9ccd142 100644
--- a/rostests/winetests/msi/package.c
+++ b/rostests/winetests/msi/package.c
@@ -32,6 +32,8 @@
static const char msifile[] = "winetest.msi";
char CURR_DIR[MAX_PATH];
+static UINT (WINAPI *pMsiApplyMultiplePatchesA)(LPCSTR, LPCSTR, LPCSTR);
+
static void get_user_sid(LPSTR *usersid)
{
HANDLE token;
@@ -1072,6 +1074,15 @@ static void test_condition(void)
r = MsiEvaluateCondition(hpkg, "not LicView");
ok( r == MSICONDITION_TRUE, "wrong return val\n");
+ r = MsiEvaluateCondition(hpkg, "\"Testing\" ~<< \"Testing\"");
+ ok (r == MSICONDITION_TRUE, "wrong return val\n");
+
+ r = MsiEvaluateCondition(hpkg, "LicView ~<< \"Testing\"");
+ ok (r == MSICONDITION_FALSE, "wrong return val\n");
+
+ r = MsiEvaluateCondition(hpkg, "Not LicView ~<< \"Testing\"");
+ ok (r == MSICONDITION_TRUE, "wrong return val\n");
+
r = MsiEvaluateCondition(hpkg, "not \"A\"");
ok( r == MSICONDITION_FALSE, "wrong return val\n");
@@ -2252,6 +2263,7 @@ static void test_states(void)
static const CHAR msifile2[] = "winetest2.msi";
static const CHAR msifile3[] = "winetest3.msi";
+ static const CHAR msifile4[] = "winetest4.msi";
hdb = create_package_db();
ok ( hdb, "failed to create package database\n" );
@@ -2422,6 +2434,27 @@ static void test_states(void)
r = add_component_entry( hdb, "'sigma', '{5CE9DDA8-B67B-4736-9D93-99D61C5B93E7}', 'TARGETDIR', 8, '', 'sigma_file'" );
ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r );
+ /* msidbFeatureAttributesFavorLocal */
+ r = add_feature_entry( hdb, "'eight', '', '', '', 2, 1, '', 0" );
+ ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r );
+
+ r = add_component_entry( hdb, "'tau', '{07DEB510-677C-4A6F-A0A6-7CD8EFEA77ED}', 'TARGETDIR', 1, '', 'tau_file'" );
+ ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r );
+
+ /* msidbFeatureAttributesFavorSource */
+ r = add_feature_entry( hdb, "'nine', '', '', '', 2, 1, '', 1" );
+ ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r );
+
+ r = add_component_entry( hdb, "'phi', '{9F0594C5-35AD-43EA-94DD-8DF73FAA664D}', 'TARGETDIR', 1, '', 'phi_file'" );
+ ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r );
+
+ /* msidbFeatureAttributesFavorAdvertise */
+ r = add_feature_entry( hdb, "'ten', '', '', '', 2, 1, '', 4" );
+ ok( r == ERROR_SUCCESS, "cannot add feature: %d\n", r );
+
+ r = add_component_entry( hdb, "'chi', '{E6B539AB-5DA9-4236-A2D2-E341A50B4C38}', 'TARGETDIR', 1, '', 'chi_file'" );
+ ok( r == ERROR_SUCCESS, "cannot add component: %d\n", r );
+
r = create_feature_components_table( hdb );
ok( r == ERROR_SUCCESS, "cannot create FeatureComponents table: %d\n", r );
@@ -2482,6 +2515,15 @@ static void test_states(void)
r = add_feature_components_entry( hdb, "'seven', 'sigma'" );
ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r );
+ r = add_feature_components_entry( hdb, "'eight', 'tau'" );
+ ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r );
+
+ r = add_feature_components_entry( hdb, "'nine', 'phi'" );
+ ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r );
+
+ r = add_feature_components_entry( hdb, "'ten', 'chi'" );
+ ok( r == ERROR_SUCCESS, "cannot add feature components: %d\n", r );
+
r = create_file_table( hdb );
ok( r == ERROR_SUCCESS, "cannot create File table: %d\n", r );
@@ -2540,6 +2582,15 @@ static void test_states(void)
r = add_file_entry( hdb, "'sigma_file', 'sigma', 'sigma.txt', 100, '', '1033', 8192, 1" );
ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r);
+ r = add_file_entry( hdb, "'tau_file', 'tau', 'tau.txt', 100, '', '1033', 8192, 1" );
+ ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r);
+
+ r = add_file_entry( hdb, "'phi_file', 'phi', 'phi.txt', 100, '', '1033', 8192, 1" );
+ ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r);
+
+ r = add_file_entry( hdb, "'chi_file', 'chi', 'chi.txt', 100, '', '1033', 8192, 1" );
+ ok( r == ERROR_SUCCESS, "cannot add file: %d\n", r);
+
MsiDatabaseCommit(hdb);
/* these properties must not be in the saved msi file */
@@ -2552,6 +2603,12 @@ static void test_states(void)
r = add_property_entry( hdb, "'REMOVE', 'six,seven'");
ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
+ r = add_property_entry( hdb, "'REINSTALL', 'eight,nine,ten'");
+ ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
+
+ r = add_property_entry( hdb, "'REINSTALLMODE', 'omus'");
+ ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
+
hpkg = package_from_db( hdb );
ok( hpkg, "failed to create package\n");
@@ -2559,6 +2616,7 @@ static void test_states(void)
CopyFileA(msifile, msifile2, FALSE);
CopyFileA(msifile, msifile3, FALSE);
+ CopyFileA(msifile, msifile4, FALSE);
state = 0xdeadbee;
action = 0xdeadbee;
@@ -2609,6 +2667,27 @@ static void test_states(void)
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -2735,6 +2814,27 @@ static void test_states(void)
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostInitialize");
ok( r == ERROR_SUCCESS, "cost init failed\n");
@@ -2787,6 +2887,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -2913,6 +3034,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "FileCost");
ok( r == ERROR_SUCCESS, "file cost failed\n");
@@ -2965,6 +3107,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -3091,6 +3254,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostFinalize");
ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r);
@@ -3143,6 +3327,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -3269,10 +3474,31 @@ static void test_states(void)
ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
MsiCloseHandle( hpkg );
/* publish the features and components */
- r = MsiInstallProduct(msifile, "ADDLOCAL=one,four ADDSOURCE=two,three REMOVE=six,seven");
+ r = MsiInstallProduct(msifile, "ADDLOCAL=one,four ADDSOURCE=two,three REMOVE=six,seven REINSTALL=eight,nine,ten");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
r = MsiOpenDatabase(msifile, MSIDBOPEN_DIRECT, &hdb);
@@ -3288,6 +3514,9 @@ static void test_states(void)
r = add_property_entry( hdb, "'REMOVE', 'six,seven'");
ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
+ r = add_property_entry( hdb, "'REINSTALL', 'eight,nine,ten'");
+ ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
+
hpkg = package_from_db( hdb );
ok( hpkg, "failed to create package\n");
@@ -3342,6 +3571,27 @@ static void test_states(void)
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -3468,6 +3718,27 @@ static void test_states(void)
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostInitialize");
ok( r == ERROR_SUCCESS, "cost init failed\n");
@@ -3520,6 +3791,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -3646,6 +3938,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "FileCost");
ok( r == ERROR_SUCCESS, "file cost failed\n");
@@ -3698,6 +4011,20 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -3824,6 +4151,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostFinalize");
ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r);
@@ -3876,6 +4224,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -4002,6 +4371,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
MsiCloseHandle(hpkg);
/* uninstall the product */
@@ -4016,7 +4406,7 @@ static void test_states(void)
ok(r == ERROR_SUCCESS, "failed to open database: %d\n", r);
/* these properties must not be in the saved msi file */
- r = add_property_entry( hdb, "'ADDLOCAL', 'one,two,three,four,five,six,seven'");
+ r = add_property_entry( hdb, "'ADDLOCAL', 'one,two,three,four,five,six,seven,eight,nine,ten'");
ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
hpkg = package_from_db( hdb );
@@ -4071,6 +4461,27 @@ static void test_states(void)
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -4197,6 +4608,27 @@ static void test_states(void)
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostInitialize");
ok( r == ERROR_SUCCESS, "cost init failed\n");
@@ -4249,6 +4681,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -4375,6 +4828,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "FileCost");
ok( r == ERROR_SUCCESS, "file cost failed\n");
@@ -4427,6 +4901,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -4553,6 +5048,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostFinalize");
ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r);
@@ -4605,6 +5121,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ todo_wine ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ todo_wine ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ todo_wine ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -4731,6 +5268,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
MsiCloseHandle(hpkg);
/* uninstall the product */
@@ -4745,7 +5303,7 @@ static void test_states(void)
ok(r == ERROR_SUCCESS, "failed to open database: %d\n", r);
/* this property must not be in the saved msi file */
- r = add_property_entry( hdb, "'ADDSOURCE', 'one,two,three,four,five,six,seven'");
+ r = add_property_entry( hdb, "'ADDSOURCE', 'one,two,three,four,five,six,seven,eight,nine,ten'");
ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
hpkg = package_from_db( hdb );
@@ -4800,6 +5358,27 @@ static void test_states(void)
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -4926,6 +5505,27 @@ static void test_states(void)
ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostInitialize");
ok( r == ERROR_SUCCESS, "cost init failed\n");
@@ -4978,6 +5578,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -5104,6 +5725,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "FileCost");
ok( r == ERROR_SUCCESS, "file cost failed\n");
@@ -5156,6 +5798,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -5282,6 +5945,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
r = MsiDoAction( hpkg, "CostFinalize");
ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r);
@@ -5334,6 +6018,27 @@ static void test_states(void)
ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
state = 0xdeadbee;
action = 0xdeadbee;
r = MsiGetComponentState(hpkg, "alpha", &state, &action);
@@ -5460,15 +6165,930 @@ static void test_states(void)
ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ MsiCloseHandle(hpkg);
+
+ /* reinstall the product */
+ r = MsiInstallProduct(msifile3, "REINSTALL=ALL");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ r = MsiOpenDatabase(msifile4, MSIDBOPEN_DIRECT, &hdb);
+ ok(r == ERROR_SUCCESS, "failed to open database: %d\n", r);
+
+ /* this property must not be in the saved msi file */
+ r = add_property_entry( hdb, "'ADDSOURCE', 'one,two,three,four,five,six,seven,eight,nine,ten'");
+ ok( r == ERROR_SUCCESS, "cannot add property: %d\n", r );
+
+ hpkg = package_from_db( hdb );
+ ok( hpkg, "failed to create package\n");
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "one", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "two", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "three", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "four", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "five", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "six", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "seven", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_UNKNOWN_FEATURE, "Expected ERROR_UNKNOWN_FEATURE, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "alpha", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "beta", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "gamma", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "theta", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "delta", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "epsilon", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "zeta", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "iota", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "eta", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "kappa", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "lambda", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "mu", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "nu", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "xi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "omicron", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "pi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "rho", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "sigma", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_UNKNOWN_COMPONENT, "Expected ERROR_UNKNOWN_COMPONENT, got %d\n", r );
+ ok( state == 0xdeadbee, "Expected 0xdeadbee, got %d\n", state);
+ ok( action == 0xdeadbee, "Expected 0xdeadbee, got %d\n", action);
+
+ r = MsiDoAction( hpkg, "CostInitialize");
+ ok( r == ERROR_SUCCESS, "cost init failed\n");
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "one", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "two", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "three", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "four", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "five", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "six", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "seven", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "alpha", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "beta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "gamma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "theta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "delta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "epsilon", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "zeta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "iota", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "eta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "kappa", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "lambda", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "mu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "nu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "xi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "omicron", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "pi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "rho", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "sigma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ r = MsiDoAction( hpkg, "FileCost");
+ ok( r == ERROR_SUCCESS, "file cost failed\n");
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "one", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "two", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "three", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "four", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "five", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "six", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "seven", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "alpha", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "beta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "gamma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "theta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "delta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "epsilon", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "zeta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "iota", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "eta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "kappa", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "lambda", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "mu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "nu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "xi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "omicron", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "pi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "rho", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "sigma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ r = MsiDoAction( hpkg, "CostFinalize");
+ ok( r == ERROR_SUCCESS, "cost finalize failed: %d\n", r);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "one", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "two", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "three", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "four", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "five", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "six", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "seven", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "eight", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "nine", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetFeatureState(hpkg, "ten", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "alpha", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "beta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "gamma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "theta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "delta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "epsilon", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "zeta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "iota", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "eta", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( action == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "kappa", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_ABSENT, "Expected INSTALLSTATE_ABSENT, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "lambda", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "mu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "nu", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "xi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "omicron", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "pi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( action == INSTALLSTATE_UNKNOWN, "Expected INSTALLSTATE_UNKNOWN, got %d\n", action);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "rho", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "sigma", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+ ok( state == INSTALLSTATE_LOCAL, "Expected INSTALLSTATE_LOCAL, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "tau", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "phi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
+ state = 0xdeadbee;
+ action = 0xdeadbee;
+ r = MsiGetComponentState(hpkg, "chi", &state, &action);
+ ok( r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r );
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+ ok( state == INSTALLSTATE_SOURCE, "Expected INSTALLSTATE_SOURCE, got %d\n", state);
+
MsiCloseHandle(hpkg);
/* uninstall the product */
- r = MsiInstallProduct(msifile3, "REMOVE=ALL");
+ r = MsiInstallProduct(msifile4, "REMOVE=ALL");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
DeleteFileA(msifile);
DeleteFileA(msifile2);
DeleteFileA(msifile3);
+ DeleteFileA(msifile4);
}
static void test_getproperty(void)
@@ -6007,6 +7627,8 @@ static void test_appsearch_reglocator(void)
BOOL space, version;
HKEY hklm, classes;
HKEY hkcu, users;
+ LPSTR pathdata;
+ LPSTR pathvar;
LPCSTR str;
LPSTR ptr;
LONG res;
@@ -6449,12 +8071,28 @@ static void test_appsearch_reglocator(void)
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, "#-42"), "Expected \"#-42\", got \"%s\"\n", prop);
- ExpandEnvironmentStringsA("%PATH%", path, MAX_PATH);
+ size = ExpandEnvironmentStringsA("%PATH%", NULL, 0);
+ if (size == 0 && GetLastError() == ERROR_INVALID_PARAMETER)
+ {
+ /* Workaround for Win95 */
+ CHAR tempbuf[1];
+ size = ExpandEnvironmentStringsA("%PATH%", tempbuf, 0);
+ }
+ pathvar = HeapAlloc(GetProcessHeap(), 0, size);
+ ExpandEnvironmentStringsA("%PATH%", pathvar, size);
- size = MAX_PATH;
- r = MsiGetPropertyA(hpkg, "SIGPROP4", prop, &size);
+ size = 0;
+ r = MsiGetPropertyA(hpkg, "SIGPROP4", NULL, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
- ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
+
+ pathdata = HeapAlloc(GetProcessHeap(), 0, ++size);
+ r = MsiGetPropertyA(hpkg, "SIGPROP4", pathdata, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(pathdata, pathvar),
+ "Expected \"%s\", got \"%s\"\n", pathvar, pathdata);
+
+ HeapFree(GetProcessHeap(), 0, pathvar);
+ HeapFree(GetProcessHeap(), 0, pathdata);
size = MAX_PATH;
r = MsiGetPropertyA(hpkg, "SIGPROP5", prop, &size);
@@ -6919,6 +8557,42 @@ static void test_appsearch_inilocator(void)
DeleteFileA(msifile);
}
+/*
+ * MSI AppSearch action on DrLocator table always returns absolute paths.
+ * If a relative path was set, it returns the first absolute path that
+ * matches or an empty string if it didn't find anything.
+ * This helper function replicates this behaviour.
+ */
+static void search_absolute_directory(LPSTR absolute, LPCSTR relative)
+{
+ int i, size;
+ DWORD attr, drives;
+
+ size = lstrlenA(relative);
+ drives = GetLogicalDrives();
+ lstrcpyA(absolute, "A:\\");
+ for (i = 0; i < 26; absolute[0] = '\0', i++)
+ {
+ if (!(drives & (1 << i)))
+ continue;
+
+ absolute[0] = 'A' + i;
+ if (GetDriveType(absolute) != DRIVE_FIXED)
+ continue;
+
+ lstrcpynA(absolute + 3, relative, size + 1);
+ attr = GetFileAttributesA(absolute);
+ if (attr != INVALID_FILE_ATTRIBUTES &&
+ (attr & FILE_ATTRIBUTE_DIRECTORY))
+ {
+ if (absolute[3 + size - 1] != '\\')
+ lstrcatA(absolute, "\\");
+ break;
+ }
+ absolute[3] = '\0';
+ }
+}
+
static void test_appsearch_drlocator(void)
{
MSIHANDLE hpkg, hdb;
@@ -6981,6 +8655,9 @@ static void test_appsearch_drlocator(void)
r = add_appsearch_entry(hdb, "'SIGPROP10', 'NewSignature10'");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ r = add_appsearch_entry(hdb, "'SIGPROP11', 'NewSignature11'");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
r = create_drlocator_table(hdb);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
@@ -7034,6 +8711,11 @@ static void test_appsearch_drlocator(void)
r = add_drlocator_entry(hdb, path);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ /* no parent, relative empty path, depth 0, no signature */
+ sprintf(path, "'NewSignature11', '', '', 0");
+ r = add_drlocator_entry(hdb, path);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
r = create_signature_table(hdb);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
@@ -7088,7 +8770,7 @@ static void test_appsearch_drlocator(void)
ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
size = MAX_PATH;
- sprintf(path, "%s\\", CURR_DIR);
+ search_absolute_directory(path, CURR_DIR + 3);
r = MsiGetPropertyA(hpkg, "SIGPROP3", prop, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
@@ -7134,6 +8816,12 @@ static void test_appsearch_drlocator(void)
ok(!lstrcmpA(prop, ""), "Expected \"\", got \"%s\"\n", prop);
}
+ size = MAX_PATH;
+ search_absolute_directory(path, "");
+ r = MsiGetPropertyA(hpkg, "SIGPROP11", prop, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(prop, path), "Expected \"%s\", got \"%s\"\n", path, prop);
+
DeleteFileA("FileName1");
DeleteFileA("FileName3.dll");
DeleteFileA("FileName4.dll");
@@ -9738,8 +11426,201 @@ static void test_MsiGetProductProperty(void)
DeleteFileA(msifile);
}
+static void test_MsiSetProperty(void)
+{
+ MSIHANDLE hpkg, hdb, hrec;
+ CHAR buf[MAX_PATH];
+ LPCSTR query;
+ DWORD size;
+ UINT r;
+
+ hpkg = package_from_db(create_package_db());
+ ok(hpkg != 0, "Expected a valid package\n");
+
+ /* invalid hInstall */
+ r = MsiSetPropertyA(0, "Prop", "Val");
+ ok(r == ERROR_INVALID_HANDLE,
+ "Expected ERROR_INVALID_HANDLE, got %d\n", r);
+
+ /* invalid hInstall */
+ r = MsiSetPropertyA(0xdeadbeef, "Prop", "Val");
+ ok(r == ERROR_INVALID_HANDLE,
+ "Expected ERROR_INVALID_HANDLE, got %d\n", r);
+
+ /* szName is NULL */
+ r = MsiSetPropertyA(hpkg, NULL, "Val");
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+
+ /* both szName and szValue are NULL */
+ r = MsiSetPropertyA(hpkg, NULL, NULL);
+ ok(r == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", r);
+
+ /* szName is empty */
+ r = MsiSetPropertyA(hpkg, "", "Val");
+ ok(r == ERROR_FUNCTION_FAILED,
+ "Expected ERROR_FUNCTION_FAILED, got %d\n", r);
+
+ /* szName is empty and szValue is NULL */
+ r = MsiSetPropertyA(hpkg, "", NULL);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* set a property */
+ r = MsiSetPropertyA(hpkg, "Prop", "Val");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* get the property */
+ size = MAX_PATH;
+ r = MsiGetPropertyA(hpkg, "Prop", buf, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, "Val"), "Expected \"Val\", got \"%s\"\n", buf);
+ ok(size == 3, "Expected 3, got %d\n", size);
+
+ /* update the property */
+ r = MsiSetPropertyA(hpkg, "Prop", "Nuvo");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* get the property */
+ size = MAX_PATH;
+ r = MsiGetPropertyA(hpkg, "Prop", buf, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, "Nuvo"), "Expected \"Nuvo\", got \"%s\"\n", buf);
+ ok(size == 4, "Expected 4, got %d\n", size);
+
+ hdb = MsiGetActiveDatabase(hpkg);
+ ok(hdb != 0, "Expected a valid database handle\n");
+
+ /* set prop is not in the _Property table */
+ query = "SELECT * FROM `_Property` WHERE `Property` = 'Prop'";
+ r = do_query(hdb, query, &hrec);
+ ok(r == ERROR_BAD_QUERY_SYNTAX,
+ "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r);
+
+ /* set prop is not in the Property table */
+ query = "SELECT * FROM `Property` WHERE `Property` = 'Prop'";
+ r = do_query(hdb, query, &hrec);
+ ok(r == ERROR_BAD_QUERY_SYNTAX,
+ "Expected ERROR_BAD_QUERY_SYNTAX, got %d\n", r);
+
+ MsiCloseHandle(hdb);
+
+ /* szValue is an empty string */
+ r = MsiSetPropertyA(hpkg, "Prop", "");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* try to get the property */
+ size = MAX_PATH;
+ r = MsiGetPropertyA(hpkg, "Prop", buf, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf);
+ ok(size == 0, "Expected 0, got %d\n", size);
+
+ /* reset the property */
+ r = MsiSetPropertyA(hpkg, "Prop", "BlueTap");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* delete the property */
+ r = MsiSetPropertyA(hpkg, "Prop", NULL);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ /* try to get the property */
+ size = MAX_PATH;
+ r = MsiGetPropertyA(hpkg, "Prop", buf, &size);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf);
+ ok(size == 0, "Expected 0, got %d\n", size);
+
+ MsiCloseHandle(hpkg);
+ DeleteFileA(msifile);
+}
+
+static void test_MsiApplyMultiplePatches(void)
+{
+ UINT r, type = GetDriveType(NULL);
+
+ if (!pMsiApplyMultiplePatchesA) {
+ win_skip("MsiApplyMultiplePatchesA not found\n");
+ return;
+ }
+
+ r = pMsiApplyMultiplePatchesA(NULL, NULL, NULL);
+ ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u\n", r);
+
+ r = pMsiApplyMultiplePatchesA("", NULL, NULL);
+ ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u\n", r);
+
+ r = pMsiApplyMultiplePatchesA(";", NULL, NULL);
+ todo_wine
+ {
+ if (type == DRIVE_FIXED)
+ ok(r == ERROR_PATH_NOT_FOUND,
+ "Expected ERROR_PATH_NOT_FOUND, got %u\n", r);
+ else
+ ok(r == ERROR_INVALID_NAME,
+ "Expected ERROR_INVALID_NAME, got %u\n", r);
+ }
+
+ r = pMsiApplyMultiplePatchesA(" ;", NULL, NULL);
+ todo_wine
+ {
+ if (type == DRIVE_FIXED)
+ ok(r == ERROR_PATCH_PACKAGE_OPEN_FAILED,
+ "Expected ERROR_PATCH_PACKAGE_OPEN_FAILED, got %u\n", r);
+ else
+ ok(r == ERROR_INVALID_NAME,
+ "Expected ERROR_INVALID_NAME, got %u\n", r);
+ }
+
+ r = pMsiApplyMultiplePatchesA(";;", NULL, NULL);
+ todo_wine
+ {
+ if (type == DRIVE_FIXED)
+ ok(r == ERROR_PATH_NOT_FOUND,
+ "Expected ERROR_PATH_NOT_FOUND, got %u\n", r);
+ else
+ ok(r == ERROR_INVALID_NAME,
+ "Expected ERROR_INVALID_NAME, got %u\n", r);
+ }
+
+ r = pMsiApplyMultiplePatchesA("nosuchpatchpackage;", NULL, NULL);
+ todo_wine ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %u\n", r);
+
+ r = pMsiApplyMultiplePatchesA(";nosuchpatchpackage", NULL, NULL);
+ todo_wine
+ {
+ if (type == DRIVE_FIXED)
+ ok(r == ERROR_PATH_NOT_FOUND,
+ "Expected ERROR_PATH_NOT_FOUND, got %u\n", r);
+ else
+ ok(r == ERROR_INVALID_NAME,
+ "Expected ERROR_INVALID_NAME, got %u\n", r);
+ }
+
+ r = pMsiApplyMultiplePatchesA("nosuchpatchpackage;nosuchpatchpackage", NULL, NULL);
+ todo_wine ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %u\n", r);
+
+ r = pMsiApplyMultiplePatchesA(" nosuchpatchpackage ; nosuchpatchpackage ", NULL, NULL);
+ todo_wine ok(r == ERROR_FILE_NOT_FOUND, "Expected ERROR_FILE_NOT_FOUND, got %u\n", r);
+}
+
+static void test_MsiApplyPatch(void)
+{
+ UINT r;
+
+ r = MsiApplyPatch(NULL, NULL, INSTALLTYPE_DEFAULT, NULL);
+ ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u\n", r);
+
+ r = MsiApplyPatch("", NULL, INSTALLTYPE_DEFAULT, NULL);
+ ok(r == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %u\n", r);
+}
+
START_TEST(package)
{
+ HMODULE hmsi = GetModuleHandleA("msi.dll");
+
+ pMsiApplyMultiplePatchesA = (void *)GetProcAddress(hmsi, "MsiApplyMultiplePatchesA");
+
GetCurrentDirectoryA(MAX_PATH, CURR_DIR);
test_createpackage();
@@ -9770,4 +11651,7 @@ START_TEST(package)
test_access();
test_emptypackage();
test_MsiGetProductProperty();
+ test_MsiSetProperty();
+ test_MsiApplyMultiplePatches();
+ test_MsiApplyPatch();
}
diff --git a/rostests/winetests/msi/record.c b/rostests/winetests/msi/record.c
index 29a57a04f30..e8dd6f55596 100644
--- a/rostests/winetests/msi/record.c
+++ b/rostests/winetests/msi/record.c
@@ -24,6 +24,8 @@
#include "wine/test.h"
+static const char *msifile = "winetest.msi";
+
static BOOL create_temp_file(char *name)
{
UINT r;
@@ -120,15 +122,45 @@ static void test_msirecord(void)
r = MsiRecordGetInteger(h, 0);
ok(r == 1, "failed to get integer\n");
- /* same record, but add a string to it */
+ /* same record, but add a null or empty string to it */
r = MsiRecordSetString(h, 0, NULL);
ok(r == ERROR_SUCCESS, "Failed to set null string at 0\n");
r = MsiRecordIsNull(h, 0);
ok(r == TRUE, "null string not null field\n");
+ r = MsiRecordDataSize(h, 0);
+ ok(r == 0, "size of string record is strlen\n");
+ buf[0] = 0;
+ sz = sizeof buf;
+ r = MsiRecordGetStringA(h, 0, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Failed to get string at 0\n");
+ ok(buf[0] == 0, "MsiRecordGetStringA returned the wrong string\n");
+ ok(sz == 0, "MsiRecordGetStringA returned the wrong length\n");
+ bufW[0] = 0;
+ sz = sizeof bufW / sizeof bufW[0];
+ r = MsiRecordGetStringW(h, 0, bufW, &sz);
+ ok(r == ERROR_SUCCESS, "Failed to get string at 0\n");
+ ok(bufW[0] == 0, "MsiRecordGetStringW returned the wrong string\n");
+ ok(sz == 0, "MsiRecordGetStringW returned the wrong length\n");
r = MsiRecordSetString(h, 0, "");
ok(r == ERROR_SUCCESS, "Failed to set empty string at 0\n");
r = MsiRecordIsNull(h, 0);
ok(r == TRUE, "null string not null field\n");
+ r = MsiRecordDataSize(h, 0);
+ ok(r == 0, "size of string record is strlen\n");
+ buf[0] = 0;
+ sz = sizeof buf;
+ r = MsiRecordGetStringA(h, 0, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Failed to get string at 0\n");
+ ok(buf[0] == 0, "MsiRecordGetStringA returned the wrong string\n");
+ ok(sz == 0, "MsiRecordGetStringA returned the wrong length\n");
+ bufW[0] = 0;
+ sz = sizeof bufW / sizeof bufW[0];
+ r = MsiRecordGetStringW(h, 0, bufW, &sz);
+ ok(r == ERROR_SUCCESS, "Failed to get string at 0\n");
+ ok(bufW[0] == 0, "MsiRecordGetStringW returned the wrong string\n");
+ ok(sz == 0, "MsiRecordGetStringW returned the wrong length\n");
+
+ /* same record, but add a string to it */
r = MsiRecordSetString(h,0,str);
ok(r == ERROR_SUCCESS, "Failed to set string at 0\n");
r = MsiRecordGetInteger(h, 0);
@@ -443,9 +475,143 @@ static void test_MsiRecordGetInteger(void)
MsiCloseHandle(rec);
}
+static void test_fieldzero(void)
+{
+ MSIHANDLE hdb, hview, rec;
+ CHAR buf[MAX_PATH];
+ LPCSTR query;
+ DWORD sz;
+ UINT r;
+
+ rec = MsiCreateRecord(1);
+ ok(rec != 0, "Expected a valid handle\n");
+
+ r = MsiRecordGetInteger(rec, 0);
+ ok(r == MSI_NULL_INTEGER, "Expected MSI_NULL_INTEGER, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "apple");
+ r = MsiRecordGetString(rec, 0, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf);
+ ok(sz == 0, "Expectd 0, got %d\n", sz);
+
+ r = MsiRecordIsNull(rec, 0);
+ ok(r == TRUE, "Expected TRUE, got %d\n", r);
+
+ r = MsiRecordGetInteger(rec, 1);
+ ok(r == MSI_NULL_INTEGER, "Expected MSI_NULL_INTEGER, got %d\n", r);
+
+ r = MsiRecordSetInteger(rec, 1, 42);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ r = MsiRecordGetInteger(rec, 0);
+ ok(r == MSI_NULL_INTEGER, "Expected MSI_NULL_INTEGER, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "apple");
+ r = MsiRecordGetString(rec, 0, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf);
+ ok(sz == 0, "Expectd 0, got %d\n", sz);
+
+ r = MsiRecordIsNull(rec, 0);
+ ok(r == TRUE, "Expected TRUE, got %d\n", r);
+
+ r = MsiRecordGetInteger(rec, 1);
+ ok(r == 42, "Expected 42, got %d\n", r);
+
+ r = MsiRecordSetString(rec, 1, "bologna");
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ r = MsiRecordGetInteger(rec, 0);
+ ok(r == MSI_NULL_INTEGER, "Expected MSI_NULL_INTEGER, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "apple");
+ r = MsiRecordGetString(rec, 0, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, ""), "Expected \"\", got \"%s\"\n", buf);
+ ok(sz == 0, "Expectd 0, got %d\n", sz);
+
+ r = MsiRecordIsNull(rec, 0);
+ ok(r == TRUE, "Expected TRUE, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "apple");
+ r = MsiRecordGetString(rec, 1, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, "bologna"), "Expected \"bologna\", got \"%s\"\n", buf);
+ ok(sz == 7, "Expectd 7, got %d\n", sz);
+
+ MsiCloseHandle(rec);
+
+ r = MsiOpenDatabase(msifile, MSIDBOPEN_CREATE, &hdb);
+ ok(r == ERROR_SUCCESS, "MsiOpenDatabase failed\n");
+
+ query = "CREATE TABLE `drone` ( "
+ "`id` INT, `name` CHAR(32), `number` CHAR(32) "
+ "PRIMARY KEY `id`)";
+ r = MsiDatabaseOpenView(hdb, query, &hview);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ r = MsiViewExecute(hview, 0);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ r = MsiViewClose(hview);
+ ok(r == ERROR_SUCCESS, "MsiViewClose failed\n");
+ r = MsiCloseHandle(hview);
+ ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n");
+
+ query = "INSERT INTO `drone` ( `id`, `name`, `number` )"
+ "VALUES('1', 'Abe', '8675309')";
+ r = MsiDatabaseOpenView(hdb, query, &hview);
+ ok(r == ERROR_SUCCESS, "MsiDatabaseOpenView failed\n");
+ r = MsiViewExecute(hview, 0);
+ ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n");
+ r = MsiViewClose(hview);
+ ok(r == ERROR_SUCCESS, "MsiViewClose failed\n");
+ r = MsiCloseHandle(hview);
+ ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n");
+
+ r = MsiDatabaseGetPrimaryKeysA(hdb, "drone", &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ r = MsiRecordGetInteger(rec, 0);
+ ok(r == MSI_NULL_INTEGER, "Expected MSI_NULL_INTEGER, got %d\n", r);
+
+ sz = MAX_PATH;
+ lstrcpyA(buf, "apple");
+ r = MsiRecordGetString(rec, 0, buf, &sz);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ ok(!lstrcmpA(buf, "drone"), "Expected \"drone\", got \"%s\"\n", buf);
+ ok(sz == 5, "Expectd 5, got %d\n", sz);
+
+ r = MsiRecordIsNull(rec, 0);
+ ok(r == FALSE, "Expected FALSE, got %d\n", r);
+
+ MsiCloseHandle(rec);
+
+ query = "SELECT * FROM `drone` WHERE `id` = 1";
+ r = MsiDatabaseOpenView(hdb, query, &hview);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ r = MsiViewExecute(hview, 0);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+ r = MsiViewFetch(hview, &rec);
+ ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
+
+ r = MsiRecordGetInteger(rec, 0);
+ ok(r != MSI_NULL_INTEGER && r != 0, "Expected non-NULL value, got %d\n", r);
+
+ r = MsiRecordIsNull(rec, 0);
+ ok(r == FALSE, "Expected FALSE, got %d\n", r);
+
+ MsiCloseHandle(hdb);
+ DeleteFileA(msifile);
+}
+
START_TEST(record)
{
test_msirecord();
test_MsiRecordGetString();
test_MsiRecordGetInteger();
+ test_fieldzero();
}
diff --git a/rostests/winetests/msi/source.c b/rostests/winetests/msi/source.c
index b508a15a03b..2e9e3ff3e5d 100644
--- a/rostests/winetests/msi/source.c
+++ b/rostests/winetests/msi/source.c
@@ -27,10 +27,12 @@
#include
#include
#include
+#include
#include "wine/test.h"
static BOOL (WINAPI *pConvertSidToStringSidA)(PSID, LPSTR*);
+static BOOLEAN (WINAPI *pGetUserNameExA)(EXTENDED_NAME_FORMAT, LPSTR, PULONG);
static UINT (WINAPI *pMsiSourceListAddMediaDiskA)
(LPCSTR, LPCSTR, MSIINSTALLCONTEXT, DWORD, DWORD, LPCSTR, LPCSTR);
static UINT (WINAPI *pMsiSourceListAddSourceExA)
@@ -51,6 +53,7 @@ static void init_functionpointers(void)
{
HMODULE hmsi = GetModuleHandleA("msi.dll");
HMODULE hadvapi32 = GetModuleHandleA("advapi32.dll");
+ HMODULE hsecur32 = LoadLibraryA("secur32.dll");
#define GET_PROC(dll, func) \
p ## func = (void *)GetProcAddress(dll, #func); \
@@ -67,6 +70,8 @@ static void init_functionpointers(void)
GET_PROC(hadvapi32, ConvertSidToStringSidA)
+ GET_PROC(hsecur32, GetUserNameExA)
+
#undef GET_PROC
}
@@ -3139,11 +3144,17 @@ static void test_MsiSourceListAddSource(void)
/* MACHINENAME\username */
size = MAX_PATH;
- GetComputerNameA(username, &size);
- lstrcatA(username, "\\");
- ptr = username + lstrlenA(username);
- size = MAX_PATH;
- GetUserNameA(ptr, &size);
+ if (pGetUserNameExA != NULL)
+ pGetUserNameExA(NameSamCompatible, username, &size);
+ else
+ {
+ GetComputerNameA(username, &size);
+ lstrcatA(username, "\\");
+ ptr = username + lstrlenA(username);
+ size = MAX_PATH - (ptr - username);
+ GetUserNameA(ptr, &size);
+ }
+ trace("username: %s\n", username);
/* GetLastError is not set by the function */
diff --git a/rostests/winetests/msvcrt/data.c b/rostests/winetests/msvcrt/data.c
index a981c876cb9..40ff46b21d1 100644
--- a/rostests/winetests/msvcrt/data.c
+++ b/rostests/winetests/msvcrt/data.c
@@ -67,13 +67,51 @@ static void test_initterm(void)
initterm_test(&callbacks[0], &callbacks[3], 2);
}
+static void test_initvar( HMODULE hmsvcrt )
+{
+ OSVERSIONINFO osvi = { sizeof(OSVERSIONINFO) };
+ int* (*pp_winver)() = (int*(*)())GetProcAddress(hmsvcrt, "__p__winver");
+ int* (*pp_winmajor)() = (int*(*)())GetProcAddress(hmsvcrt, "__p__winmajor");
+ int* (*pp_winminor)() = (int*(*)())GetProcAddress(hmsvcrt, "__p__winminor");
+ int* (*pp_osver)() = (int*(*)())GetProcAddress(hmsvcrt, "__p__osver");
+ int winver, winmajor, winminor, osver;
+
+ if( !( pp_winmajor && pp_winminor && pp_winver)) {
+ win_skip("_winver variables are not available\n");
+ return;
+ }
+ winver = *pp_winver();
+ winminor = *pp_winminor();
+ winmajor = *pp_winmajor();
+ GetVersionEx( &osvi);
+ ok( winminor == osvi.dwMinorVersion, "Wrong value for _winminor %02x expected %02x\n",
+ winminor, osvi.dwMinorVersion);
+ ok( winmajor == osvi.dwMajorVersion, "Wrong value for _winmajor %02x expected %02x\n",
+ winmajor, osvi.dwMajorVersion);
+ ok( winver == ((osvi.dwMajorVersion << 8) | osvi.dwMinorVersion),
+ "Wrong value for _winver %02x expected %02x\n",
+ winver, ((osvi.dwMajorVersion << 8) | osvi.dwMinorVersion));
+ if( !pp_osver) {
+ win_skip("_osver variables are not available\n");
+ return;
+ }
+ osver = *pp_osver();
+ ok( osver == (osvi.dwBuildNumber & 0xffff) ||
+ ((osvi.dwBuildNumber >> 24) == osvi.dwMajorVersion &&
+ ((osvi.dwBuildNumber >> 16) & 0xff) == osvi.dwMinorVersion), /* 95/98/ME */
+ "Wrong value for _osver %04x expected %04x\n",
+ osver, osvi.dwBuildNumber);
+}
+
START_TEST(data)
{
HMODULE hmsvcrt;
+
hmsvcrt = GetModuleHandleA("msvcrt.dll");
if (!hmsvcrt)
hmsvcrt = GetModuleHandleA("msvcrtd.dll");
if (hmsvcrt)
p_initterm=(void*)GetProcAddress(hmsvcrt, "_initterm");
test_initterm();
+ test_initvar(hmsvcrt);
}
diff --git a/rostests/winetests/msvcrt/printf.c b/rostests/winetests/msvcrt/printf.c
index d25734e195e..66bab153f6b 100644
--- a/rostests/winetests/msvcrt/printf.c
+++ b/rostests/winetests/msvcrt/printf.c
@@ -698,6 +698,90 @@ static void test_fcvt(void)
ok( 0 == sign, "sign wrong\n");
}
+static struct {
+ double value;
+ int nrdigits;
+ const char *expstr_e;
+ const char *expstr_f;
+ int expdecpt_e;
+ int expdecpt_f;
+ int expsign;
+} test_cvt_testcases[] = {
+ { 45.0, 2, "45", "4500", 2, 2, 0 },
+ /* Numbers less than 1.0 with different precisions */
+ { 0.0001, 1, "1", "", -3, -3, 0 },
+ { 0.0001, -10, "", "", -3, -3, 0 },
+ { 0.0001, 10,"1000000000", "1000000", -3, -3, 0 },
+ /* Basic sign test */
+ { -111.0001, 5, "11100", "11100010", 3, 3, 1 },
+ { 111.0001, 5, "11100", "11100010", 3, 3, 0 },
+ /* big numbers with low precision */
+ { 3333.3, 2, "33", "333330", 4, 4, 0 },
+ {999999999999.9, 3, "100","999999999999900", 13, 12, 0 },
+ /* 0.0 with different precisions */
+ { 0.0, 5, "00000", "00000", 0, 0, 0 },
+ { 0.0, 0, "", "", 0, 0, 0 },
+ { 0.0, -1, "", "", 0, 0, 0 },
+ /* Numbers > 1.0 with 0 or -ve precision */
+ { -123.0001, 0, "", "123", 3, 3, 1 },
+ { -123.0001, -1, "", "12", 3, 3, 1 },
+ { -123.0001, -2, "", "1", 3, 3, 1 },
+ { -123.0001, -3, "", "", 3, 3, 1 },
+ /* Numbers > 1.0, but with rounding at the point of precision */
+ { 99.99, 1, "1", "1000", 3, 3, 0 },
+ /* Numbers < 1.0 where rounding occurs at the point of precision */
+ { 0.0063, 2, "63", "1", -2, -1, 0 },
+ { 0.0063, 3, "630", "6", -2, -2, 0 },
+ { 0.09999999996, 2, "10", "10", 0, 0, 0 },
+ { 0.6, 1, "6", "6", 0, 0, 0 },
+ { 0.6, 0, "", "1", 1, 1, 0 },
+ { 0.4, 0, "", "", 0, 0, 0 },
+ { 0.49, 0, "", "", 0, 0, 0 },
+ { 0.51, 0, "", "1", 1, 1, 0 },
+ /* ask ridiculous amunt of precision, ruin formatting this table */
+ { 1.0, 30, "100000000000000000000000000000",
+ "1000000000000000000000000000000", 1, 1, 0},
+ { 123456789012345678901.0, 30, "123456789012345680000000000000",
+ "123456789012345680000000000000000000000000000000000", 21, 21, 0},
+ /* end marker */
+ { 0, 0, "END"}
+};
+
+static void test_xcvt(void)
+{
+ char *str;
+ int i, decpt, sign;
+ for( i = 0; strcmp( test_cvt_testcases[i].expstr_e, "END"); i++){
+ decpt = sign = 100;
+ str = _ecvt( test_cvt_testcases[i].value,
+ test_cvt_testcases[i].nrdigits,
+ &decpt,
+ &sign);
+ ok( 0 == strncmp( str, test_cvt_testcases[i].expstr_e, 15),
+ "_ecvt() bad return, got \n'%s' expected \n'%s'\n", str,
+ test_cvt_testcases[i].expstr_e);
+ ok( decpt == test_cvt_testcases[i].expdecpt_e,
+ "_ecvt() decimal point wrong, got %d expected %d\n", decpt,
+ test_cvt_testcases[i].expdecpt_e);
+ }
+ for( i = 0; strcmp( test_cvt_testcases[i].expstr_e, "END"); i++){
+ decpt = sign = 100;
+ str = _fcvt( test_cvt_testcases[i].value,
+ test_cvt_testcases[i].nrdigits,
+ &decpt,
+ &sign);
+ ok( 0 == strncmp( str, test_cvt_testcases[i].expstr_f, 15),
+ "_fcvt() bad return, got \n'%s' expected \n'%s'\n", str,
+ test_cvt_testcases[i].expstr_f);
+ ok( decpt == test_cvt_testcases[i].expdecpt_f,
+ "_fcvt() decimal point wrong, got %d expected %d\n", decpt,
+ test_cvt_testcases[i].expdecpt_f);
+ ok( sign == test_cvt_testcases[i].expsign,
+ "_ecvt() sign wrong, got %d expected %d\n", sign,
+ test_cvt_testcases[i].expsign);
+ }
+}
+
static int _vsnwprintf_wrapper(wchar_t *str, size_t len, const wchar_t *format, ...)
{
int ret;
@@ -726,11 +810,60 @@ static void test_vsnwprintf(void)
ok( !strcmp(buf, "onetwothree"), "got %s expected 'onetwothree'\n", buf );
}
+static int (*p__vscprintf)(const char *format, __ms_va_list valist);
+static int (*p__vscwprintf)(const wchar_t *format, __ms_va_list valist);
+
+static int __cdecl _vscprintf_wrapper(const char *format, ...)
+{
+ int ret;
+ __ms_va_list valist;
+ __ms_va_start(valist, format);
+ ret = p__vscprintf(format, valist);
+ __ms_va_end(valist);
+ return ret;
+}
+
+static void test_vscprintf(void)
+{
+ int ret;
+
+ ret = _vscprintf_wrapper( "%s %d", "number", 1 );
+ ok( ret == 8, "got %d expected 8\n", ret );
+}
+
+static int __cdecl _vscwprintf_wrapper(const wchar_t *format, ...)
+{
+ int ret;
+ __ms_va_list valist;
+ __ms_va_start(valist, format);
+ ret = p__vscwprintf(format, valist);
+ __ms_va_end(valist);
+ return ret;
+}
+
+static void test_vscwprintf(void)
+{
+ const wchar_t format[] = {'%','s',' ','%','d',0};
+ const wchar_t number[] = {'n','u','m','b','e','r',0};
+
+ int ret;
+
+ ret = _vscwprintf_wrapper( format, number, 1 );
+ ok( ret == 8, "got %d expected 8\n", ret );
+}
+
START_TEST(printf)
{
test_sprintf();
test_swprintf();
test_snprintf();
test_fcvt();
+ test_xcvt();
test_vsnwprintf();
+
+ p__vscprintf = (void *)GetProcAddress(GetModuleHandle("msvcrt.dll"), "_vscprintf");
+ p__vscwprintf = (void *)GetProcAddress(GetModuleHandle("msvcrt.dll"), "_vscwprintf");
+
+ if (p__vscprintf) test_vscprintf();
+ if (p__vscwprintf) test_vscwprintf();
}
diff --git a/rostests/winetests/msvcrt/string.c b/rostests/winetests/msvcrt/string.c
index 45c40d5dc4b..3286e91bc71 100644
--- a/rostests/winetests/msvcrt/string.c
+++ b/rostests/winetests/msvcrt/string.c
@@ -619,6 +619,50 @@ static void test_mbcjisjms(void)
} while(jisjms[i++][0] != 0);
}
+static const struct {
+ const char* string;
+ const char* delimiter;
+ int exp_offsetret1; /* returned offset from string after first call to strtok()
+ -1 means NULL */
+ int exp_offsetret2; /* returned offset from string after second call to strtok()
+ -1 means NULL */
+ int exp_offsetret3; /* returned offset from string after third call to strtok()
+ -1 means NULL */
+} testcases_strtok[] = {
+ { "red cabernet", " ", 0, 4, -1 },
+ { "sparkling white riesling", " ", 0, 10, 16 },
+ { " pale cream sherry", "e ", 1, 6, 9 },
+ /* end mark */
+ { 0}
+};
+
+static void test_strtok(void)
+{
+ int i;
+ char *strret;
+ char teststr[100];
+ for( i = 0; testcases_strtok[i].string; i++){
+ strcpy( teststr, testcases_strtok[i].string);
+ strret = strtok( teststr, testcases_strtok[i].delimiter);
+ ok( (int)(strret - teststr) == testcases_strtok[i].exp_offsetret1 ||
+ (!strret && testcases_strtok[i].exp_offsetret1 == -1),
+ "string (%p) \'%s\' return %p\n",
+ teststr, testcases_strtok[i].string, strret);
+ if( !strret) continue;
+ strret = strtok( NULL, testcases_strtok[i].delimiter);
+ ok( (int)(strret - teststr) == testcases_strtok[i].exp_offsetret2 ||
+ (!strret && testcases_strtok[i].exp_offsetret2 == -1),
+ "second call string (%p) \'%s\' return %p\n",
+ teststr, testcases_strtok[i].string, strret);
+ if( !strret) continue;
+ strret = strtok( NULL, testcases_strtok[i].delimiter);
+ ok( (int)(strret - teststr) == testcases_strtok[i].exp_offsetret3 ||
+ (!strret && testcases_strtok[i].exp_offsetret3 == -1),
+ "third call string (%p) \'%s\' return %p\n",
+ teststr, testcases_strtok[i].string, strret);
+ }
+}
+
START_TEST(string)
{
char mem[100];
@@ -660,6 +704,6 @@ START_TEST(string)
test_strcat_s();
test__mbsnbcpy_s();
test_mbcjisjms();
-
+ test_strtok();
test_wcscpy_s();
}
diff --git a/rostests/winetests/msvfw32/msvfw.c b/rostests/winetests/msvfw32/msvfw.c
index 537c230ffeb..b0d820815a1 100644
--- a/rostests/winetests/msvfw32/msvfw.c
+++ b/rostests/winetests/msvfw32/msvfw.c
@@ -42,12 +42,22 @@ static void test_OpenCase(void)
ok(ICClose(h)==ICERR_OK,"ICClose failed\n");
}
h = ICOpen(mmioFOURCC('V','I','D','C'),mmioFOURCC('m','s','v','c'),ICMODE_DECOMPRESS);
- todo_wine ok(0!=h,"ICOpen(VIDC.msvc) failed\n");
+ ok(0!=h,"ICOpen(VIDC.msvc) failed\n");
if (h) {
ok(ICClose(h)==ICERR_OK,"ICClose failed\n");
}
h = ICOpen(mmioFOURCC('V','I','D','C'),mmioFOURCC('M','S','V','C'),ICMODE_DECOMPRESS);
- todo_wine ok(0!=h,"ICOpen(VIDC.MSVC) failed\n");
+ ok(0!=h,"ICOpen(VIDC.MSVC) failed\n");
+ if (h) {
+ ok(ICClose(h)==ICERR_OK,"ICClose failed\n");
+ }
+ h = ICOpen(mmioFOURCC('v','i','d','c'),mmioFOURCC('m','S','v','C'),ICMODE_DECOMPRESS);
+ ok(0!=h,"ICOpen(vidc.mSvC) failed\n");
+ if (h) {
+ ok(ICClose(h)==ICERR_OK,"ICClose failed\n");
+ }
+ h = ICOpen(mmioFOURCC('v','I','d','C'),mmioFOURCC('m','s','v','c'),ICMODE_DECOMPRESS);
+ ok(0!=h,"ICOpen(vIdC.msvc) failed\n");
if (h) {
ok(ICClose(h)==ICERR_OK,"ICClose failed\n");
}
diff --git a/rostests/winetests/msxml3/domdoc.c b/rostests/winetests/msxml3/domdoc.c
index c70e6edb3e2..18b9576cbbc 100644
--- a/rostests/winetests/msxml3/domdoc.c
+++ b/rostests/winetests/msxml3/domdoc.c
@@ -376,7 +376,7 @@ static char *list_to_string(IXMLDOMNodeList *list)
{
static char buf[4096];
char *pos = buf;
- long len = 0;
+ LONG len = 0;
int i;
if (list == NULL)
@@ -418,8 +418,8 @@ static void test_domdoc( void )
VARIANT_BOOL b;
VARIANT var;
BSTR str;
- long code;
- long nLength = 0;
+ LONG code;
+ LONG nLength = 0;
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&doc );
@@ -571,7 +571,7 @@ static void test_domdoc( void )
r = IXMLDOMParseError_get_errorCode( error, &code );
ok( r == S_FALSE, "returns %08x\n", r );
- ok( code == 0, "code %ld\n", code );
+ ok( code == 0, "code %d\n", code );
IXMLDOMParseError_Release( error );
/* test createTextNode */
@@ -618,7 +618,7 @@ static void test_domdoc( void )
r = IXMLDOMText_get_length(nodetext, &nLength);
ok(r == S_OK, "ret %08x\n", r );
- ok(nLength == 4, "expected 4 got %ld\n", nLength);
+ ok(nLength == 4, "expected 4 got %d\n", nLength);
/* test nodeTypeString */
r = IXMLDOMText_get_nodeTypeString(nodetext, &str);
@@ -909,7 +909,7 @@ static void test_domnode( void )
VARIANT_BOOL b;
BSTR str;
VARIANT var;
- long count;
+ LONG count;
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&doc );
@@ -1244,7 +1244,7 @@ todo_wine
r = IXMLDOMNodeList_get_length( list, &count );
ok( r == S_OK, "get_length returns %08x\n", r );
- ok( count == 4, "get_length got %ld\n", count );
+ ok( count == 4, "get_length got %d\n", count );
r = IXMLDOMNodeList_nextNode(list, NULL);
ok(r == E_INVALIDARG, "Exected E_INVALIDARG got %08x\n", r);
@@ -1439,7 +1439,7 @@ static void test_create(void)
IXMLDOMNamedNodeMap *attr_map;
IUnknown *unk;
LONG ref;
- long num;
+ LONG num;
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&doc );
@@ -1536,7 +1536,7 @@ static void test_create(void)
ok( r == S_OK, "returns %08x\n", r );
r = IXMLDOMNamedNodeMap_get_length( attr_map, &num );
ok( r == S_OK, "returns %08x\n", r );
- ok( num == 0, "num %ld\n", num );
+ ok( num == 0, "num %d\n", num );
IXMLDOMNamedNodeMap_Release( attr_map );
V_VT(&var) = VT_BSTR;
@@ -1548,7 +1548,7 @@ static void test_create(void)
ok( r == S_OK, "returns %08x\n", r );
r = IXMLDOMNamedNodeMap_get_length( attr_map, &num );
ok( r == S_OK, "returns %08x\n", r );
- ok( num == 1, "num %ld\n", num );
+ ok( num == 1, "num %d\n", num );
IXMLDOMNamedNodeMap_Release( attr_map );
VariantClear(&var);
@@ -1560,7 +1560,7 @@ static void test_create(void)
ok( r == S_OK, "returns %08x\n", r );
r = IXMLDOMNamedNodeMap_get_length( attr_map, &num );
ok( r == S_OK, "returns %08x\n", r );
- ok( num == 1, "num %ld\n", num );
+ ok( num == 1, "num %d\n", num );
IXMLDOMNamedNodeMap_Release( attr_map );
VariantClear(&var);
r = IXMLDOMElement_getAttribute( element, name, &var );
@@ -1578,7 +1578,7 @@ static void test_create(void)
ok( r == S_OK, "returns %08x\n", r );
r = IXMLDOMNamedNodeMap_get_length( attr_map, &num );
ok( r == S_OK, "returns %08x\n", r );
- ok( num == 2, "num %ld\n", num );
+ ok( num == 2, "num %d\n", num );
IXMLDOMNamedNodeMap_Release( attr_map );
VariantClear(&var);
SysFreeString(name);
@@ -1626,7 +1626,7 @@ static void test_getElementsByTagName(void)
IXMLDOMDocument *doc;
IXMLDOMNodeList *node_list;
IDispatchEx *dispex;
- long len;
+ LONG len;
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&doc );
@@ -1644,7 +1644,7 @@ static void test_getElementsByTagName(void)
ok( r == S_OK, "ret %08x\n", r );
r = IXMLDOMNodeList_get_length( node_list, &len );
ok( r == S_OK, "ret %08x\n", r );
- ok( len == 6, "len %ld\n", len );
+ ok( len == 6, "len %d\n", len );
r = IXMLDOMNodeList_QueryInterface( node_list, &IID_IDispatchEx, (void**)&dispex );
ok( r == S_OK, "rets %08x\n", r);
@@ -1692,7 +1692,7 @@ static void test_getElementsByTagName(void)
ok( r == S_OK, "ret %08x\n", r );
r = IXMLDOMNodeList_get_length( node_list, &len );
ok( r == S_OK, "ret %08x\n", r );
- ok( len == 1, "len %ld\n", len );
+ ok( len == 1, "len %d\n", len );
IXMLDOMNodeList_Release( node_list );
SysFreeString( str );
@@ -1701,7 +1701,7 @@ static void test_getElementsByTagName(void)
ok( r == S_OK, "ret %08x\n", r );
r = IXMLDOMNodeList_get_length( node_list, &len );
ok( r == S_OK, "ret %08x\n", r );
- ok( len == 0, "len %ld\n", len );
+ ok( len == 0, "len %d\n", len );
IXMLDOMNodeList_Release( node_list );
SysFreeString( str );
@@ -1710,7 +1710,7 @@ static void test_getElementsByTagName(void)
ok( r == S_OK, "ret %08x\n", r );
r = IXMLDOMNodeList_get_length( node_list, &len );
ok( r == S_OK, "ret %08x\n", r );
- ok( len == 0, "len %ld\n", len );
+ ok( len == 0, "len %d\n", len );
IXMLDOMNodeList_Release( node_list );
SysFreeString( str );
@@ -1727,7 +1727,7 @@ static void test_get_text(void)
IXMLDOMNode *nodeRoot;
IXMLDOMNodeList *node_list;
IXMLDOMNamedNodeMap *node_map;
- long len;
+ LONG len;
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&doc );
@@ -1769,7 +1769,7 @@ static void test_get_text(void)
r = IXMLDOMNodeList_get_length( node_list, &len );
ok( r == S_OK, "ret %08x\n", r );
- ok( len == 1, "expect 1 got %ld\n", len );
+ ok( len == 1, "expect 1 got %d\n", len );
r = IXMLDOMNodeList_get_item( node_list, 0, NULL );
ok( r == E_INVALIDARG, "ret %08x\n", r );
@@ -1828,7 +1828,7 @@ static void test_get_childNodes(void)
IXMLDOMElement *element;
IXMLDOMNode *node, *node2;
IXMLDOMNodeList *node_list, *node_list2;
- long len;
+ LONG len;
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&doc );
@@ -1849,7 +1849,7 @@ static void test_get_childNodes(void)
r = IXMLDOMNodeList_get_length( node_list, &len );
ok( r == S_OK, "ret %08x\n", r);
- ok( len == 4, "len %ld\n", len);
+ ok( len == 4, "len %d\n", len);
r = IXMLDOMNodeList_get_item( node_list, 2, &node );
ok( r == S_OK, "ret %08x\n", r);
@@ -1859,7 +1859,7 @@ static void test_get_childNodes(void)
r = IXMLDOMNodeList_get_length( node_list2, &len );
ok( r == S_OK, "ret %08x\n", r);
- ok( len == 0, "len %ld\n", len);
+ ok( len == 0, "len %d\n", len);
r = IXMLDOMNodeList_get_item( node_list2, 0, &node2);
ok( r == S_FALSE, "ret %08x\n", r);
@@ -1968,7 +1968,7 @@ static void test_replaceChild(void)
IXMLDOMNode *fo_node, *ba_node, *lc_node, *removed_node, *temp_node;
IXMLDOMNodeList *root_list, *fo_list;
IUnknown * unk1, *unk2;
- long len;
+ LONG len;
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument, (LPVOID*)&doc );
@@ -2056,7 +2056,7 @@ static void test_replaceChild(void)
r = IXMLDOMNodeList_get_length( fo_list, &len);
ok( r == S_OK, "ret %08x\n", r );
- ok( len == 0, "len %ld\n", len);
+ ok( len == 0, "len %d\n", len);
IXMLDOMNodeList_Release( fo_list );
@@ -2077,7 +2077,7 @@ static void test_removeNamedItem(void)
IXMLDOMNamedNodeMap * pr_attrs;
VARIANT_BOOL b;
BSTR str;
- long len;
+ LONG len;
HRESULT r;
r = CoCreateInstance( &CLSID_DOMDocument, NULL,
@@ -2105,7 +2105,7 @@ static void test_removeNamedItem(void)
r = IXMLDOMNamedNodeMap_get_length( pr_attrs, &len );
ok( r == S_OK, "ret %08x\n", r);
- ok( len == 3, "length %ld\n", len);
+ ok( len == 3, "length %d\n", len);
removed_node = (void*)0xdeadbeef;
r = IXMLDOMNamedNodeMap_removeNamedItem( pr_attrs, NULL, &removed_node);
@@ -2124,7 +2124,7 @@ static void test_removeNamedItem(void)
r = IXMLDOMNamedNodeMap_get_length( pr_attrs, &len );
ok( r == S_OK, "ret %08x\n", r);
- ok( len == 2, "length %ld\n", len);
+ ok( len == 2, "length %d\n", len);
r = IXMLDOMNamedNodeMap_setNamedItem( pr_attrs, removed_node, NULL);
ok ( r == S_OK, "ret %08x\n", r);
@@ -2132,14 +2132,14 @@ static void test_removeNamedItem(void)
r = IXMLDOMNamedNodeMap_get_length( pr_attrs, &len );
ok( r == S_OK, "ret %08x\n", r);
- ok( len == 3, "length %ld\n", len);
+ ok( len == 3, "length %d\n", len);
r = IXMLDOMNamedNodeMap_removeNamedItem( pr_attrs, str, NULL);
ok ( r == S_OK, "ret %08x\n", r);
r = IXMLDOMNamedNodeMap_get_length( pr_attrs, &len );
ok( r == S_OK, "ret %08x\n", r);
- ok( len == 2, "length %ld\n", len);
+ ok( len == 2, "length %d\n", len);
r = IXMLDOMNamedNodeMap_removeNamedItem( pr_attrs, str, NULL);
ok ( r == S_FALSE, "ret %08x\n", r);
@@ -2400,8 +2400,8 @@ static void test_cloneNode(void )
VARIANT_BOOL b;
IXMLDOMNodeList *pList;
IXMLDOMNamedNodeMap *mapAttr;
- long nLength = 0, nLength1 = 0;
- long nAttrCnt = 0, nAttrCnt1 = 0;
+ LONG nLength = 0, nLength1 = 0;
+ LONG nAttrCnt = 0, nAttrCnt1 = 0;
IXMLDOMNode *node;
IXMLDOMNode *node_clone;
IXMLDOMNode *node_first;
@@ -2495,8 +2495,8 @@ static void test_cloneNode(void )
IXMLDOMNamedNodeMap_Release(mapAttr);
}
- ok(nLength == nLength1, "wrong Child count (%ld, %ld)\n", nLength, nLength1);
- ok(nAttrCnt == nAttrCnt1, "wrong Attribute count (%ld, %ld)\n", nAttrCnt, nAttrCnt1);
+ ok(nLength == nLength1, "wrong Child count (%d, %d)\n", nLength, nLength1);
+ ok(nAttrCnt == nAttrCnt1, "wrong Attribute count (%d, %d)\n", nAttrCnt, nAttrCnt1);
IXMLDOMNode_Release(node_clone);
/* No Children */
@@ -2530,7 +2530,7 @@ static void test_cloneNode(void )
if (pList)
{
IXMLDOMNodeList_get_length(pList, &nLength1);
- ok( nLength1 == 0, "Length should be 0 (%ld)\n", nLength1);
+ ok( nLength1 == 0, "Length should be 0 (%d)\n", nLength1);
IXMLDOMNodeList_Release(pList);
}
@@ -2539,12 +2539,12 @@ static void test_cloneNode(void )
if(mapAttr)
{
IXMLDOMNamedNodeMap_get_length(mapAttr, &nAttrCnt1);
- ok( nAttrCnt1 == 3, "Attribute count should be 3 (%ld)\n", nAttrCnt1);
+ ok( nAttrCnt1 == 3, "Attribute count should be 3 (%d)\n", nAttrCnt1);
IXMLDOMNamedNodeMap_Release(mapAttr);
}
- ok(nLength != nLength1, "wrong Child count (%ld, %ld)\n", nLength, nLength1);
- ok(nAttrCnt == nAttrCnt1, "wrong Attribute count (%ld, %ld)\n", nAttrCnt, nAttrCnt1);
+ ok(nLength != nLength1, "wrong Child count (%d, %d)\n", nLength, nLength1);
+ ok(nAttrCnt == nAttrCnt1, "wrong Attribute count (%d, %d)\n", nAttrCnt, nAttrCnt1);
IXMLDOMNode_Release(node_clone);
@@ -2568,7 +2568,7 @@ static void test_xmlTypes(void)
BSTR str;
IXMLDOMNode *pNextChild = (IXMLDOMNode *)0x1; /* Used for testing Siblings */
VARIANT v;
- long len = 0;
+ LONG len = 0;
hr = CoCreateInstance( &CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, &IID_IXMLDOMDocument2, (LPVOID*)&doc );
if( hr != S_OK )
@@ -2744,7 +2744,7 @@ static void test_xmlTypes(void)
/* test length property */
hr = IXMLDOMComment_get_length(pComment, &len);
ok(hr == S_OK, "ret %08x\n", hr );
- ok(len == 21, "expected 21 got %ld\n", len);
+ ok(len == 21, "expected 21 got %d\n", len);
/* test substringData */
hr = IXMLDOMComment_substringData(pComment, 0, 4, NULL);
@@ -3072,7 +3072,7 @@ static void test_xmlTypes(void)
/* test length property */
hr = IXMLDOMCDATASection_get_length(pCDataSec, &len);
ok(hr == S_OK, "ret %08x\n", hr );
- ok(len == 21, "expected 21 got %ld\n", len);
+ ok(len == 21, "expected 21 got %d\n", len);
/* test get nodeValue */
hr = IXMLDOMCDATASection_get_nodeValue(pCDataSec, &var);
diff --git a/rostests/winetests/msxml3/xmldoc.c b/rostests/winetests/msxml3/xmldoc.c
index 5c1c4f87f5b..d2d99fc23f1 100644
--- a/rostests/winetests/msxml3/xmldoc.c
+++ b/rostests/winetests/msxml3/xmldoc.c
@@ -61,7 +61,7 @@ static void test_xmldoc(void)
LPVOID ptr;
DWORD file_size, read;
CHAR path[MAX_PATH];
- long type, num_child;
+ LONG type, num_child;
VARIANT vIndex, vName;
BSTR name = NULL;
@@ -121,7 +121,7 @@ static void test_xmldoc(void)
hr = IXMLElement_get_type(element, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %d\n", type);
hr = IXMLElement_get_tagName(element, &name);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -134,7 +134,7 @@ static void test_xmldoc(void)
hr = IXMLElementCollection_get_length(collection, &num_child);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(num_child == 2, "Expected 2, got %ld\n", num_child);
+ ok(num_child == 2, "Expected 2, got %d\n", num_child);
V_VT(&vIndex) = VT_I4;
V_I4(&vIndex) = 0;
@@ -146,7 +146,7 @@ static void test_xmldoc(void)
hr = IXMLElement_get_type(child, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %d\n", type);
hr = IXMLElement_get_tagName(child, &name);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -159,7 +159,7 @@ static void test_xmldoc(void)
hr = IXMLElementCollection_get_length(inner, &num_child);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(num_child == 1, "Expected 1, got %ld\n", num_child);
+ ok(num_child == 1, "Expected 1, got %d\n", num_child);
hr = IXMLElementCollection_item(inner, vIndex, vName, (IDispatch **)&value);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -167,7 +167,7 @@ static void test_xmldoc(void)
hr = IXMLElement_get_type(value, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_TEXT, "Expected XMLELEMTYPE_TEXT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_TEXT, "Expected XMLELEMTYPE_TEXT, got %d\n", type);
hr = IXMLElement_get_text(value, &name);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -193,7 +193,7 @@ static void test_xmldoc(void)
hr = IXMLElement_get_type(child, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %d\n", type);
hr = IXMLElement_get_tagName(child, &name);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -206,7 +206,7 @@ static void test_xmldoc(void)
hr = IXMLElementCollection_get_length(inner, &num_child);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(num_child == 1, "Expected 1, got %ld\n", num_child);
+ ok(num_child == 1, "Expected 1, got %d\n", num_child);
V_I4(&vIndex) = 0;
hr = IXMLElementCollection_item(inner, vIndex, vName, (IDispatch **)&value);
@@ -215,7 +215,7 @@ static void test_xmldoc(void)
hr = IXMLElement_get_type(value, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_TEXT, "Expected XMLELEMTYPE_TEXT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_TEXT, "Expected XMLELEMTYPE_TEXT, got %d\n", type);
hr = IXMLElement_get_text(value, &name);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -247,7 +247,7 @@ static void test_createElement(void)
IXMLDocument *doc = NULL;
IXMLElement *element = NULL, *root = NULL;
VARIANT vType, vName;
- long type;
+ LONG type;
hr = CoCreateInstance(&CLSID_XMLDocument, NULL, CLSCTX_INPROC_SERVER,
&IID_IXMLDocument, (LPVOID*)&doc);
@@ -280,7 +280,7 @@ static void test_createElement(void)
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
/* SP7 returns an XMLELEMTYPE_ELEMENT */
ok(type == XMLELEMTYPE_OTHER || type == XMLELEMTYPE_ELEMENT,
- "Expected XMLELEMTYPE_OTHER || XMLELEMTYPE_ELEMENT, got %ld\n", type);
+ "Expected XMLELEMTYPE_OTHER || XMLELEMTYPE_ELEMENT, got %d\n", type);
IXMLElement_Release(element);
}
@@ -301,7 +301,7 @@ static void test_createElement(void)
hr = IXMLElement_get_type(element, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %d\n", type);
IXMLElement_Release(element);
diff --git a/rostests/winetests/msxml3/xmlelem.c b/rostests/winetests/msxml3/xmlelem.c
index f0b195da485..1738b2ce50b 100644
--- a/rostests/winetests/msxml3/xmlelem.c
+++ b/rostests/winetests/msxml3/xmlelem.c
@@ -42,7 +42,7 @@ static void test_xmlelem(void)
VARIANT vType, vName;
VARIANT vIndex, vValue;
BSTR str, val;
- long type, num_child;
+ LONG type, num_child;
static const WCHAR propName[] = {'p','r','o','p',0};
static const WCHAR propVal[] = {'v','a','l',0};
@@ -136,7 +136,7 @@ static void test_xmlelem(void)
hr = IXMLElement_get_type(element, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %d\n", type);
hr = IXMLElement_get_text(element, &str);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -171,7 +171,7 @@ static void test_xmlelem(void)
hr = IXMLElement_get_type(parent, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %d\n", type);
children = (IXMLElementCollection *)0xdeadbeef;
hr = IXMLElement_get_children(element, &children);
@@ -180,7 +180,7 @@ static void test_xmlelem(void)
hr = IXMLElementCollection_get_length(children, &num_child);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(num_child == 1, "Expected 1, got %ld\n", num_child);
+ ok(num_child == 1, "Expected 1, got %d\n", num_child);
V_VT(&vIndex) = VT_I4;
V_I4(&vIndex) = 0;
@@ -192,7 +192,7 @@ static void test_xmlelem(void)
hr = IXMLElement_get_type(child2, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_TEXT, "Expected XMLELEMTYPE_TEXT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_TEXT, "Expected XMLELEMTYPE_TEXT, got %d\n", type);
hr = IXMLElement_get_text(element, &str);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -255,7 +255,7 @@ static void test_xmlelem_collection(void)
IEnumVARIANT *enumVar = NULL;
CHAR pathA[MAX_PATH];
WCHAR path[MAX_PATH];
- long length, type;
+ LONG length, type;
ULONG num_vars;
VARIANT var, vIndex, vName;
BSTR url, str;
@@ -296,7 +296,7 @@ static void test_xmlelem_collection(void)
hr = IXMLElementCollection_get_length(collection, &length);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(length == 2, "Expected 2, got %ld\n", length);
+ ok(length == 2, "Expected 2, got %d\n", length);
/* IXMLElementCollection:put_length does nothing */
hr = IXMLElementCollection_put_length(collection, -1);
@@ -320,7 +320,7 @@ static void test_xmlelem_collection(void)
/* make sure the length hasn't changed */
hr = IXMLElementCollection_get_length(collection, &length);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(length == 2, "Expected 2, got %ld\n", length);
+ ok(length == 2, "Expected 2, got %d\n", length);
/* IXMLElementCollection implements IEnumVARIANT */
hr = IXMLElementCollection_QueryInterface(collection, &IID_IEnumVARIANT, (LPVOID *)&enumVar);
@@ -351,7 +351,7 @@ static void test_xmlelem_collection(void)
hr = IXMLElement_get_type(child, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %d\n", type);
hr = IXMLElement_get_tagName(child, &str);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -373,7 +373,7 @@ static void test_xmlelem_collection(void)
hr = IXMLElement_get_type(child, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %d\n", type);
hr = IXMLElement_get_tagName(child, &str);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -392,7 +392,7 @@ static void test_xmlelem_collection(void)
hr = IXMLElement_get_type(child, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %d\n", type);
hr = IXMLElement_get_tagName(child, &str);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
@@ -411,7 +411,7 @@ static void test_xmlelem_collection(void)
hr = IXMLElement_get_type(child, &type);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %ld\n", type);
+ ok(type == XMLELEMTYPE_ELEMENT, "Expected XMLELEMTYPE_ELEMENT, got %d\n", type);
hr = IXMLElement_get_tagName(child, &str);
ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
diff --git a/rostests/winetests/netapi32/apibuf.c b/rostests/winetests/netapi32/apibuf.c
index 2438ecd7e44..0972e76569a 100644
--- a/rostests/winetests/netapi32/apibuf.c
+++ b/rostests/winetests/netapi32/apibuf.c
@@ -42,12 +42,12 @@ static void run_apibuf_tests(void)
NET_API_STATUS res;
/* test normal logic */
- ok(pNetApiBufferAllocate(1024, (LPVOID *)&p) == NERR_Success,
+ ok(pNetApiBufferAllocate(1024, &p) == NERR_Success,
"Reserved memory\n");
ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size\n");
ok(dwSize >= 1024, "The size is correct\n");
- ok(pNetApiBufferReallocate(p, 1500, (LPVOID *) &p) == NERR_Success,
+ ok(pNetApiBufferReallocate(p, 1500, &p) == NERR_Success,
"Reallocated\n");
ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size\n");
ok(dwSize >= 1500, "The size is correct\n");
@@ -58,14 +58,14 @@ static void run_apibuf_tests(void)
ok(pNetApiBufferSize(NULL, &dwSize) == ERROR_INVALID_PARAMETER, "Error for NULL pointer\n");
/* border reallocate cases */
- ok(pNetApiBufferReallocate(0, 1500, (LPVOID *) &p) == NERR_Success, "Reallocate with OldBuffer = NULL failed\n");
+ ok(pNetApiBufferReallocate(0, 1500, &p) == NERR_Success, "Reallocate with OldBuffer = NULL failed\n");
ok(p != NULL, "No memory got allocated\n");
- ok(pNetApiBufferAllocate(1024, (LPVOID *)&p) == NERR_Success, "Memory not reserved\n");
- ok(pNetApiBufferReallocate(p, 0, (LPVOID *) &p) == NERR_Success, "Not freed\n");
+ ok(pNetApiBufferAllocate(1024, &p) == NERR_Success, "Memory not reserved\n");
+ ok(pNetApiBufferReallocate(p, 0, &p) == NERR_Success, "Not freed\n");
ok(p == NULL, "Pointer not cleared\n");
-
+
/* 0-length buffer */
- ok(pNetApiBufferAllocate(0, (LPVOID *)&p) == NERR_Success,
+ ok(pNetApiBufferAllocate(0, &p) == NERR_Success,
"Reserved memory\n");
ok(pNetApiBufferSize(p, &dwSize) == NERR_Success, "Got size\n");
ok(dwSize < 0xFFFFFFFF, "The size of the 0-length buffer\n");
diff --git a/rostests/winetests/ntdll/atom.c b/rostests/winetests/ntdll/atom.c
index 7526654fcb8..220ea40482f 100755
--- a/rostests/winetests/ntdll/atom.c
+++ b/rostests/winetests/ntdll/atom.c
@@ -295,7 +295,7 @@ static void test_NtIntAtom(void)
RTL_ATOM_TABLE AtomTable;
RTL_ATOM testAtom;
ULONG RefCount = 0, PinCount = 0;
- int i;
+ INT_PTR i;
WCHAR Name[64];
ULONG Len;
@@ -311,25 +311,25 @@ static void test_NtIntAtom(void)
ok(res == STATUS_INVALID_PARAMETER, "Didn't get expected result from adding 0 int atom, retval: %x\n", res);
for (i = 1; i <= 0xbfff; i++)
{
- res = pRtlAddAtomToAtomTable(AtomTable, (PWSTR)i, &testAtom);
- ok(!res, "Unable to add valid integer atom %i, retval: %x\n", i, res);
+ res = pRtlAddAtomToAtomTable(AtomTable, (LPWSTR)i, &testAtom);
+ ok(!res, "Unable to add valid integer atom %li, retval: %x\n", i, res);
}
for (i = 1; i <= 0xbfff; i++)
{
- res = pRtlLookupAtomInAtomTable(AtomTable, (PWSTR)i, &testAtom);
- ok(!res, "Unable to find int atom %i, retval: %x\n", i, res);
+ res = pRtlLookupAtomInAtomTable(AtomTable, (LPWSTR)i, &testAtom);
+ ok(!res, "Unable to find int atom %li, retval: %x\n", i, res);
if (!res)
{
res = pRtlPinAtomInAtomTable(AtomTable, testAtom);
- ok(!res, "Unable to pin int atom %i, retval: %x\n", i, res);
+ ok(!res, "Unable to pin int atom %li, retval: %x\n", i, res);
}
}
for (i = 0xc000; i <= 0xffff; i++)
{
- res = pRtlAddAtomToAtomTable(AtomTable, (PWSTR)i, &testAtom);
- ok(res, "Able to illeageal integer atom %i, retval: %x\n", i, res);
+ res = pRtlAddAtomToAtomTable(AtomTable, (LPWSTR)i, &testAtom);
+ ok(res, "Able to illeageal integer atom %li, retval: %x\n", i, res);
}
res = pRtlDestroyAtomTable(AtomTable);
diff --git a/rostests/winetests/ntdll/change.c b/rostests/winetests/ntdll/change.c
index d3ba58fc1c1..f395962ec23 100644
--- a/rostests/winetests/ntdll/change.c
+++ b/rostests/winetests/ntdll/change.c
@@ -318,7 +318,7 @@ START_TEST(change)
HMODULE hntdll = GetModuleHandle("ntdll");
if (!hntdll)
{
- skip("not running on NT, skipping test\n");
+ win_skip("not running on NT, skipping test\n");
return;
}
@@ -329,7 +329,7 @@ START_TEST(change)
if (!pNtNotifyChangeDirectoryFile || !pNtCancelIoFile)
{
- skip("missing functions, skipping test\n");
+ win_skip("missing functions, skipping test\n");
return;
}
diff --git a/rostests/winetests/ntdll/env.c b/rostests/winetests/ntdll/env.c
index 92f654e7674..82898412643 100755
--- a/rostests/winetests/ntdll/env.c
+++ b/rostests/winetests/ntdll/env.c
@@ -86,11 +86,12 @@ static void testQuery(void)
WCHAR bv[257];
UNICODE_STRING name;
UNICODE_STRING value;
- const struct test* test;
NTSTATUS nts;
+ unsigned int i;
- for (test = tests; test->var; test++)
+ for (i = 0; tests[i].var; i++)
{
+ const struct test *test = &tests[i];
name.Length = strlen(test->var) * 2;
name.MaximumLength = name.Length + 2;
name.Buffer = bn;
@@ -103,7 +104,7 @@ static void testQuery(void)
nts = pRtlQueryEnvironmentVariable_U(small_env, &name, &value);
ok( nts == test->status || (test->alt && nts == test->alt),
"[%d]: Wrong status for '%s', expecting %x got %x\n",
- test - tests, test->var, test->status, nts );
+ i, test->var, test->status, nts );
if (nts == test->status) switch (nts)
{
case STATUS_SUCCESS:
diff --git a/rostests/winetests/ntdll/exception.c b/rostests/winetests/ntdll/exception.c
index e5c2bd43709..6ed641c6dad 100644
--- a/rostests/winetests/ntdll/exception.c
+++ b/rostests/winetests/ntdll/exception.c
@@ -206,14 +206,12 @@ static LONG CALLBACK rtlraiseexception_vectored_handler(EXCEPTION_POINTERS *Exce
trace("vect. handler %08x addr:%p context.Eip:%x\n", rec->ExceptionCode,
rec->ExceptionAddress, context->Eip);
- todo_wine {
ok(rec->ExceptionAddress == (char *)code_mem + 0xb, "ExceptionAddress at %p instead of %p\n",
rec->ExceptionAddress, (char *)code_mem + 0xb);
if (pNtCurrentTeb()->Peb->BeingDebugged)
ok((void *)context->Eax == pRtlRaiseException, "debugger managed to modify Eax to %x should be %p\n",
context->Eax, pRtlRaiseException);
- }
/* check that context.Eip is fixed up only for EXCEPTION_BREAKPOINT
* even if raised by RtlRaiseException
@@ -242,10 +240,8 @@ static DWORD rtlraiseexception_handler( EXCEPTION_RECORD *rec, EXCEPTION_REGISTR
trace( "exception: %08x flags:%x addr:%p context: Eip:%x\n",
rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress, context->Eip );
- todo_wine {
ok(rec->ExceptionAddress == (char *)code_mem + 0xb, "ExceptionAddress at %p instead of %p\n",
rec->ExceptionAddress, (char *)code_mem + 0xb);
- }
/* check that context.Eip is fixed up only for EXCEPTION_BREAKPOINT
* even if raised by RtlRaiseException
@@ -320,6 +316,8 @@ static void run_rtlraiseexception_test(DWORD exceptioncode)
}
func(pRtlRaiseException, &record);
+ ok( record.ExceptionAddress == (char *)code_mem + 0x0b,
+ "address set to %p instead of %p\n", record.ExceptionAddress, (char *)code_mem + 0x0b );
if (have_vectored_api)
pRtlRemoveVectoredExceptionHandler(vectored_handler);
@@ -841,6 +839,82 @@ static void test_simd_exceptions(void)
ok( got_exception == 1, "got exception: %i, should be 1\n", got_exception);
}
+struct fpu_exception_info
+{
+ DWORD exception_code;
+ DWORD exception_offset;
+ DWORD eip_offset;
+};
+
+static DWORD fpu_exception_handler(EXCEPTION_RECORD *rec, EXCEPTION_REGISTRATION_RECORD *frame,
+ CONTEXT *context, EXCEPTION_REGISTRATION_RECORD **dispatcher)
+{
+ struct fpu_exception_info *info = *(struct fpu_exception_info **)(frame + 1);
+
+ info->exception_code = rec->ExceptionCode;
+ info->exception_offset = (BYTE *)rec->ExceptionAddress - (BYTE *)code_mem;
+ info->eip_offset = context->Eip - (DWORD)code_mem;
+
+ ++context->Eip;
+ return ExceptionContinueExecution;
+}
+
+static void test_fpu_exceptions(void)
+{
+ static const BYTE fpu_exception_test_ie[] =
+ {
+ 0x83, 0xec, 0x04, /* sub $0x4,%esp */
+ 0x66, 0xc7, 0x04, 0x24, 0xfe, 0x03, /* movw $0x3fe,(%esp) */
+ 0x9b, 0xd9, 0x7c, 0x24, 0x02, /* fstcw 0x2(%esp) */
+ 0xd9, 0x2c, 0x24, /* fldcw (%esp) */
+ 0xd9, 0xee, /* fldz */
+ 0xd9, 0xe8, /* fld1 */
+ 0xde, 0xf1, /* fdivp */
+ 0xdd, 0xd8, /* fstp %st(0) */
+ 0xdd, 0xd8, /* fstp %st(0) */
+ 0x9b, /* fwait */
+ 0xdb, 0xe2, /* fnclex */
+ 0xd9, 0x6c, 0x24, 0x02, /* fldcw 0x2(%esp) */
+ 0x83, 0xc4, 0x04, /* add $0x4,%esp */
+ 0xc3, /* ret */
+ };
+
+ static const BYTE fpu_exception_test_de[] =
+ {
+ 0x83, 0xec, 0x04, /* sub $0x4,%esp */
+ 0x66, 0xc7, 0x04, 0x24, 0xfb, 0x03, /* movw $0x3fb,(%esp) */
+ 0x9b, 0xd9, 0x7c, 0x24, 0x02, /* fstcw 0x2(%esp) */
+ 0xd9, 0x2c, 0x24, /* fldcw (%esp) */
+ 0xdd, 0xd8, /* fstp %st(0) */
+ 0xd9, 0xee, /* fldz */
+ 0xd9, 0xe8, /* fld1 */
+ 0xde, 0xf1, /* fdivp */
+ 0x9b, /* fwait */
+ 0xdb, 0xe2, /* fnclex */
+ 0xdd, 0xd8, /* fstp %st(0) */
+ 0xdd, 0xd8, /* fstp %st(0) */
+ 0xd9, 0x6c, 0x24, 0x02, /* fldcw 0x2(%esp) */
+ 0x83, 0xc4, 0x04, /* add $0x4,%esp */
+ 0xc3, /* ret */
+ };
+
+ struct fpu_exception_info info;
+
+ memset(&info, 0, sizeof(info));
+ run_exception_test(fpu_exception_handler, &info, fpu_exception_test_ie, sizeof(fpu_exception_test_ie));
+ ok(info.exception_code == EXCEPTION_FLT_STACK_CHECK,
+ "Got exception code %#x, expected EXCEPTION_FLT_STACK_CHECK\n", info.exception_code);
+ ok(info.exception_offset == 0x19, "Got exception offset %#x, expected 0x19\n", info.exception_offset);
+ ok(info.eip_offset == 0x1b, "Got EIP offset %#x, expected 0x1b\n", info.eip_offset);
+
+ memset(&info, 0, sizeof(info));
+ run_exception_test(fpu_exception_handler, &info, fpu_exception_test_de, sizeof(fpu_exception_test_de));
+ ok(info.exception_code == EXCEPTION_FLT_DIVIDE_BY_ZERO,
+ "Got exception code %#x, expected EXCEPTION_FLT_DIVIDE_BY_ZERO\n", info.exception_code);
+ ok(info.exception_offset == 0x17, "Got exception offset %#x, expected 0x17\n", info.exception_offset);
+ ok(info.eip_offset == 0x19, "Got EIP offset %#x, expected 0x19\n", info.eip_offset);
+}
+
#endif /* __i386__ */
START_TEST(exception)
@@ -918,6 +992,7 @@ START_TEST(exception)
test_rtlraiseexception();
test_debugger();
test_simd_exceptions();
+ test_fpu_exceptions();
VirtualFree(code_mem, 1024, MEM_RELEASE);
#endif
diff --git a/rostests/winetests/ntdll/file.c b/rostests/winetests/ntdll/file.c
index e4f1d0a5f1f..164c2da2430 100644
--- a/rostests/winetests/ntdll/file.c
+++ b/rostests/winetests/ntdll/file.c
@@ -108,7 +108,7 @@ static long get_pending_msgs(HANDLE h)
NTSTATUS res;
ULONG a, req;
- res = pNtQueryIoCompletion( h, IoCompletionBasicInformation, (PVOID)&a, sizeof(a), &req );
+ res = pNtQueryIoCompletion( h, IoCompletionBasicInformation, &a, sizeof(a), &req );
ok( res == STATUS_SUCCESS, "NtQueryIoCompletion failed: %x\n", res );
if (res != STATUS_SUCCESS) return -1;
ok( req == sizeof(a), "Unexpected response size: %x\n", req );
diff --git a/rostests/winetests/ntdll/generated.c b/rostests/winetests/ntdll/generated.c
index 4818c9e50eb..b7bfa6dd14a 100755
--- a/rostests/winetests/ntdll/generated.c
+++ b/rostests/winetests/ntdll/generated.c
@@ -1,4 +1,4 @@
-/* File generated automatically from tools/winapi/test.dat; do not edit! */
+/* File generated automatically from tools/winapi/tests.dat; do not edit! */
/* This file can be copied, modified and distributed without restriction. */
/*
@@ -27,22 +27,14 @@
* Windows API extension
*/
-#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
-# define FIELD_ALIGNMENT(type, field) __alignof(((type*)0)->field)
-#elif defined(__GNUC__)
-# define FIELD_ALIGNMENT(type, field) __alignof__(((type*)0)->field)
-#else
-/* FIXME: Not sure if is possible to do without compiler extension */
-#endif
-
#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
# define _TYPE_ALIGNMENT(type) __alignof(type)
#elif defined(__GNUC__)
# define _TYPE_ALIGNMENT(type) __alignof__(type)
#else
/*
- * FIXME: Not sure if is possible to do without compiler extension
- * (if type is not just a name that is, if so the normal)
+ * FIXME: May not be possible without a compiler extension
+ * (if type is not just a name that is, otherwise the normal
* TYPE_ALIGNMENT can be used)
*/
#endif
@@ -59,392 +51,517 @@
* Test helper macros
*/
-#ifdef FIELD_ALIGNMENT
-# define TEST_FIELD_ALIGNMENT(type, field, align) \
- ok(FIELD_ALIGNMENT(type, field) == align, \
- "FIELD_ALIGNMENT(" #type ", " #field ") == %d (expected " #align ")\n", \
- (int)FIELD_ALIGNMENT(type, field))
+#ifdef _WIN64
+
+# define TEST_TYPE_SIZE(type, size)
+# define TEST_TYPE_ALIGN(type, align)
+# define TEST_TARGET_ALIGN(type, align)
+# define TEST_FIELD_ALIGN(type, field, align)
+# define TEST_FIELD_OFFSET(type, field, offset)
+
#else
-# define TEST_FIELD_ALIGNMENT(type, field, align) do { } while (0)
+
+# define TEST_TYPE_SIZE(type, size) C_ASSERT(sizeof(type) == size);
+
+# ifdef TYPE_ALIGNMENT
+# define TEST_TYPE_ALIGN(type, align) C_ASSERT(TYPE_ALIGNMENT(type) == align);
+# else
+# define TEST_TYPE_ALIGN(type, align)
+# endif
+
+# ifdef _TYPE_ALIGNMENT
+# define TEST_TARGET_ALIGN(type, align) C_ASSERT(_TYPE_ALIGNMENT(*(type)0) == align);
+# define TEST_FIELD_ALIGN(type, field, align) C_ASSERT(_TYPE_ALIGNMENT(((type*)0)->field) == align);
+# else
+# define TEST_TARGET_ALIGN(type, align)
+# define TEST_FIELD_ALIGN(type, field, align)
+# endif
+
+# define TEST_FIELD_OFFSET(type, field, offset) C_ASSERT(FIELD_OFFSET(type, field) == offset);
+
#endif
-#define TEST_FIELD_OFFSET(type, field, offset) \
- ok(FIELD_OFFSET(type, field) == offset, \
- "FIELD_OFFSET(" #type ", " #field ") == %ld (expected " #offset ")\n", \
- (long int)FIELD_OFFSET(type, field))
+#define TEST_TARGET_SIZE(type, size) TEST_TYPE_SIZE(*(type)0, size)
+#define TEST_FIELD_SIZE(type, field, size) TEST_TYPE_SIZE((((type*)0)->field), size)
+#define TEST_TYPE_SIGNED(type) C_ASSERT((type) -1 < 0);
+#define TEST_TYPE_UNSIGNED(type) C_ASSERT((type) -1 > 0);
-#ifdef _TYPE_ALIGNMENT
-#define TEST__TYPE_ALIGNMENT(type, align) \
- ok(_TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)_TYPE_ALIGNMENT(type))
-#else
-# define TEST__TYPE_ALIGNMENT(type, align) do { } while (0)
-#endif
-
-#ifdef TYPE_ALIGNMENT
-#define TEST_TYPE_ALIGNMENT(type, align) \
- ok(TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", (int)TYPE_ALIGNMENT(type))
-#else
-# define TEST_TYPE_ALIGNMENT(type, align) do { } while (0)
-#endif
-
-#define TEST_TYPE_SIZE(type, size) \
- ok(sizeof(type) == size, "sizeof(" #type ") == %d (expected " #size ")\n", ((int) sizeof(type)))
-
-/***********************************************************************
- * Test macros
- */
-
-#define TEST_FIELD(type, field_type, field_name, field_offset, field_size, field_align) \
- TEST_TYPE_SIZE(field_type, field_size); \
- TEST_FIELD_ALIGNMENT(type, field_name, field_align); \
- TEST_FIELD_OFFSET(type, field_name, field_offset); \
-
-#define TEST_TYPE(type, size, align) \
- TEST_TYPE_ALIGNMENT(type, align); \
- TEST_TYPE_SIZE(type, size)
-
-#define TEST_TYPE_POINTER(type, size, align) \
- TEST__TYPE_ALIGNMENT(*(type)0, align); \
- TEST_TYPE_SIZE(*(type)0, size)
-
-#define TEST_TYPE_SIGNED(type) \
- ok((type) -1 < 0, "(" #type ") -1 < 0\n");
-
-#define TEST_TYPE_UNSIGNED(type) \
- ok((type) -1 > 0, "(" #type ") -1 > 0\n");
static void test_pack_DWORD32(void)
{
/* DWORD32 */
- TEST_TYPE(DWORD32, 4, 4);
- TEST_TYPE_UNSIGNED(DWORD32);
+ TEST_TYPE_SIZE (DWORD32, 4)
+ TEST_TYPE_ALIGN (DWORD32, 4)
+ TEST_TYPE_UNSIGNED(DWORD32)
}
static void test_pack_DWORD64(void)
{
/* DWORD64 */
- TEST_TYPE(DWORD64, 8, 8);
- TEST_TYPE_UNSIGNED(DWORD64);
+ TEST_TYPE_SIZE (DWORD64, 8)
+ TEST_TYPE_ALIGN (DWORD64, 8)
+ TEST_TYPE_UNSIGNED(DWORD64)
}
static void test_pack_DWORD_PTR(void)
{
/* DWORD_PTR */
- TEST_TYPE(DWORD_PTR, 4, 4);
+ TEST_TYPE_SIZE (DWORD_PTR, 4)
+ TEST_TYPE_ALIGN (DWORD_PTR, 4)
}
static void test_pack_HALF_PTR(void)
{
/* HALF_PTR */
- TEST_TYPE(HALF_PTR, 2, 2);
- TEST_TYPE_SIGNED(HALF_PTR);
+ TEST_TYPE_SIZE (HALF_PTR, 2)
+ TEST_TYPE_ALIGN (HALF_PTR, 2)
+ TEST_TYPE_SIGNED(HALF_PTR)
}
static void test_pack_INT16(void)
{
/* INT16 */
- TEST_TYPE(INT16, 2, 2);
- TEST_TYPE_SIGNED(INT16);
+ TEST_TYPE_SIZE (INT16, 2)
+ TEST_TYPE_ALIGN (INT16, 2)
+ TEST_TYPE_SIGNED(INT16)
}
static void test_pack_INT32(void)
{
/* INT32 */
- TEST_TYPE(INT32, 4, 4);
- TEST_TYPE_SIGNED(INT32);
+ TEST_TYPE_SIZE (INT32, 4)
+ TEST_TYPE_ALIGN (INT32, 4)
+ TEST_TYPE_SIGNED(INT32)
}
static void test_pack_INT64(void)
{
/* INT64 */
- TEST_TYPE(INT64, 8, 8);
- TEST_TYPE_SIGNED(INT64);
+ TEST_TYPE_SIZE (INT64, 8)
+ TEST_TYPE_ALIGN (INT64, 8)
+ TEST_TYPE_SIGNED(INT64)
}
static void test_pack_INT8(void)
{
/* INT8 */
- TEST_TYPE(INT8, 1, 1);
- TEST_TYPE_SIGNED(INT8);
+ TEST_TYPE_SIZE (INT8, 1)
+ TEST_TYPE_ALIGN (INT8, 1)
+ TEST_TYPE_SIGNED(INT8)
}
static void test_pack_INT_PTR(void)
{
/* INT_PTR */
- TEST_TYPE(INT_PTR, 4, 4);
- TEST_TYPE_SIGNED(INT_PTR);
+ TEST_TYPE_SIZE (INT_PTR, 4)
+ TEST_TYPE_ALIGN (INT_PTR, 4)
+ TEST_TYPE_SIGNED(INT_PTR)
}
static void test_pack_LONG32(void)
{
/* LONG32 */
- TEST_TYPE(LONG32, 4, 4);
- TEST_TYPE_SIGNED(LONG32);
+ TEST_TYPE_SIZE (LONG32, 4)
+ TEST_TYPE_ALIGN (LONG32, 4)
+ TEST_TYPE_SIGNED(LONG32)
}
static void test_pack_LONG64(void)
{
/* LONG64 */
- TEST_TYPE(LONG64, 8, 8);
- TEST_TYPE_SIGNED(LONG64);
+ TEST_TYPE_SIZE (LONG64, 8)
+ TEST_TYPE_ALIGN (LONG64, 8)
+ TEST_TYPE_SIGNED(LONG64)
}
static void test_pack_LONG_PTR(void)
{
/* LONG_PTR */
- TEST_TYPE(LONG_PTR, 4, 4);
- TEST_TYPE_SIGNED(LONG_PTR);
+ TEST_TYPE_SIZE (LONG_PTR, 4)
+ TEST_TYPE_ALIGN (LONG_PTR, 4)
+ TEST_TYPE_SIGNED(LONG_PTR)
}
static void test_pack_SIZE_T(void)
{
/* SIZE_T */
- TEST_TYPE(SIZE_T, 4, 4);
+ TEST_TYPE_SIZE (SIZE_T, 4)
+ TEST_TYPE_ALIGN (SIZE_T, 4)
}
static void test_pack_SSIZE_T(void)
{
/* SSIZE_T */
- TEST_TYPE(SSIZE_T, 4, 4);
+ TEST_TYPE_SIZE (SSIZE_T, 4)
+ TEST_TYPE_ALIGN (SSIZE_T, 4)
}
static void test_pack_UHALF_PTR(void)
{
/* UHALF_PTR */
- TEST_TYPE(UHALF_PTR, 2, 2);
- TEST_TYPE_UNSIGNED(UHALF_PTR);
+ TEST_TYPE_SIZE (UHALF_PTR, 2)
+ TEST_TYPE_ALIGN (UHALF_PTR, 2)
+ TEST_TYPE_UNSIGNED(UHALF_PTR)
}
static void test_pack_UINT16(void)
{
/* UINT16 */
- TEST_TYPE(UINT16, 2, 2);
- TEST_TYPE_UNSIGNED(UINT16);
+ TEST_TYPE_SIZE (UINT16, 2)
+ TEST_TYPE_ALIGN (UINT16, 2)
+ TEST_TYPE_UNSIGNED(UINT16)
}
static void test_pack_UINT32(void)
{
/* UINT32 */
- TEST_TYPE(UINT32, 4, 4);
- TEST_TYPE_UNSIGNED(UINT32);
+ TEST_TYPE_SIZE (UINT32, 4)
+ TEST_TYPE_ALIGN (UINT32, 4)
+ TEST_TYPE_UNSIGNED(UINT32)
}
static void test_pack_UINT64(void)
{
/* UINT64 */
- TEST_TYPE(UINT64, 8, 8);
- TEST_TYPE_UNSIGNED(UINT64);
+ TEST_TYPE_SIZE (UINT64, 8)
+ TEST_TYPE_ALIGN (UINT64, 8)
+ TEST_TYPE_UNSIGNED(UINT64)
}
static void test_pack_UINT8(void)
{
/* UINT8 */
- TEST_TYPE(UINT8, 1, 1);
- TEST_TYPE_UNSIGNED(UINT8);
+ TEST_TYPE_SIZE (UINT8, 1)
+ TEST_TYPE_ALIGN (UINT8, 1)
+ TEST_TYPE_UNSIGNED(UINT8)
}
static void test_pack_UINT_PTR(void)
{
/* UINT_PTR */
- TEST_TYPE(UINT_PTR, 4, 4);
- TEST_TYPE_UNSIGNED(UINT_PTR);
+ TEST_TYPE_SIZE (UINT_PTR, 4)
+ TEST_TYPE_ALIGN (UINT_PTR, 4)
+ TEST_TYPE_UNSIGNED(UINT_PTR)
}
static void test_pack_ULONG32(void)
{
/* ULONG32 */
- TEST_TYPE(ULONG32, 4, 4);
- TEST_TYPE_UNSIGNED(ULONG32);
+ TEST_TYPE_SIZE (ULONG32, 4)
+ TEST_TYPE_ALIGN (ULONG32, 4)
+ TEST_TYPE_UNSIGNED(ULONG32)
}
static void test_pack_ULONG64(void)
{
/* ULONG64 */
- TEST_TYPE(ULONG64, 8, 8);
- TEST_TYPE_UNSIGNED(ULONG64);
+ TEST_TYPE_SIZE (ULONG64, 8)
+ TEST_TYPE_ALIGN (ULONG64, 8)
+ TEST_TYPE_UNSIGNED(ULONG64)
}
static void test_pack_ULONG_PTR(void)
{
/* ULONG_PTR */
- TEST_TYPE(ULONG_PTR, 4, 4);
- TEST_TYPE_UNSIGNED(ULONG_PTR);
+ TEST_TYPE_SIZE (ULONG_PTR, 4)
+ TEST_TYPE_ALIGN (ULONG_PTR, 4)
+ TEST_TYPE_UNSIGNED(ULONG_PTR)
}
static void test_pack_ACCESS_ALLOWED_ACE(void)
{
/* ACCESS_ALLOWED_ACE (pack 4) */
- TEST_TYPE(ACCESS_ALLOWED_ACE, 12, 4);
- TEST_FIELD(ACCESS_ALLOWED_ACE, ACE_HEADER, Header, 0, 4, 2);
- TEST_FIELD(ACCESS_ALLOWED_ACE, DWORD, Mask, 4, 4, 4);
- TEST_FIELD(ACCESS_ALLOWED_ACE, DWORD, SidStart, 8, 4, 4);
+ TEST_TYPE_SIZE (ACCESS_ALLOWED_ACE, 12)
+ TEST_TYPE_ALIGN (ACCESS_ALLOWED_ACE, 4)
+ TEST_FIELD_SIZE (ACCESS_ALLOWED_ACE, Header, 4)
+ TEST_FIELD_ALIGN (ACCESS_ALLOWED_ACE, Header, 2)
+ TEST_FIELD_OFFSET(ACCESS_ALLOWED_ACE, Header, 0)
+ TEST_FIELD_SIZE (ACCESS_ALLOWED_ACE, Mask, 4)
+ TEST_FIELD_ALIGN (ACCESS_ALLOWED_ACE, Mask, 4)
+ TEST_FIELD_OFFSET(ACCESS_ALLOWED_ACE, Mask, 4)
+ TEST_FIELD_SIZE (ACCESS_ALLOWED_ACE, SidStart, 4)
+ TEST_FIELD_ALIGN (ACCESS_ALLOWED_ACE, SidStart, 4)
+ TEST_FIELD_OFFSET(ACCESS_ALLOWED_ACE, SidStart, 8)
}
static void test_pack_ACCESS_DENIED_ACE(void)
{
/* ACCESS_DENIED_ACE (pack 4) */
- TEST_TYPE(ACCESS_DENIED_ACE, 12, 4);
- TEST_FIELD(ACCESS_DENIED_ACE, ACE_HEADER, Header, 0, 4, 2);
- TEST_FIELD(ACCESS_DENIED_ACE, DWORD, Mask, 4, 4, 4);
- TEST_FIELD(ACCESS_DENIED_ACE, DWORD, SidStart, 8, 4, 4);
+ TEST_TYPE_SIZE (ACCESS_DENIED_ACE, 12)
+ TEST_TYPE_ALIGN (ACCESS_DENIED_ACE, 4)
+ TEST_FIELD_SIZE (ACCESS_DENIED_ACE, Header, 4)
+ TEST_FIELD_ALIGN (ACCESS_DENIED_ACE, Header, 2)
+ TEST_FIELD_OFFSET(ACCESS_DENIED_ACE, Header, 0)
+ TEST_FIELD_SIZE (ACCESS_DENIED_ACE, Mask, 4)
+ TEST_FIELD_ALIGN (ACCESS_DENIED_ACE, Mask, 4)
+ TEST_FIELD_OFFSET(ACCESS_DENIED_ACE, Mask, 4)
+ TEST_FIELD_SIZE (ACCESS_DENIED_ACE, SidStart, 4)
+ TEST_FIELD_ALIGN (ACCESS_DENIED_ACE, SidStart, 4)
+ TEST_FIELD_OFFSET(ACCESS_DENIED_ACE, SidStart, 8)
}
static void test_pack_ACCESS_MASK(void)
{
/* ACCESS_MASK */
- TEST_TYPE(ACCESS_MASK, 4, 4);
- TEST_TYPE_UNSIGNED(ACCESS_MASK);
+ TEST_TYPE_SIZE (ACCESS_MASK, 4)
+ TEST_TYPE_ALIGN (ACCESS_MASK, 4)
+ TEST_TYPE_UNSIGNED(ACCESS_MASK)
}
static void test_pack_ACE_HEADER(void)
{
/* ACE_HEADER (pack 4) */
- TEST_TYPE(ACE_HEADER, 4, 2);
- TEST_FIELD(ACE_HEADER, BYTE, AceType, 0, 1, 1);
- TEST_FIELD(ACE_HEADER, BYTE, AceFlags, 1, 1, 1);
- TEST_FIELD(ACE_HEADER, WORD, AceSize, 2, 2, 2);
+ TEST_TYPE_SIZE (ACE_HEADER, 4)
+ TEST_TYPE_ALIGN (ACE_HEADER, 2)
+ TEST_FIELD_SIZE (ACE_HEADER, AceType, 1)
+ TEST_FIELD_ALIGN (ACE_HEADER, AceType, 1)
+ TEST_FIELD_OFFSET(ACE_HEADER, AceType, 0)
+ TEST_FIELD_SIZE (ACE_HEADER, AceFlags, 1)
+ TEST_FIELD_ALIGN (ACE_HEADER, AceFlags, 1)
+ TEST_FIELD_OFFSET(ACE_HEADER, AceFlags, 1)
+ TEST_FIELD_SIZE (ACE_HEADER, AceSize, 2)
+ TEST_FIELD_ALIGN (ACE_HEADER, AceSize, 2)
+ TEST_FIELD_OFFSET(ACE_HEADER, AceSize, 2)
}
static void test_pack_ACL(void)
{
/* ACL (pack 4) */
- TEST_TYPE(ACL, 8, 2);
- TEST_FIELD(ACL, BYTE, AclRevision, 0, 1, 1);
- TEST_FIELD(ACL, BYTE, Sbz1, 1, 1, 1);
- TEST_FIELD(ACL, WORD, AclSize, 2, 2, 2);
- TEST_FIELD(ACL, WORD, AceCount, 4, 2, 2);
- TEST_FIELD(ACL, WORD, Sbz2, 6, 2, 2);
+ TEST_TYPE_SIZE (ACL, 8)
+ TEST_TYPE_ALIGN (ACL, 2)
+ TEST_FIELD_SIZE (ACL, AclRevision, 1)
+ TEST_FIELD_ALIGN (ACL, AclRevision, 1)
+ TEST_FIELD_OFFSET(ACL, AclRevision, 0)
+ TEST_FIELD_SIZE (ACL, Sbz1, 1)
+ TEST_FIELD_ALIGN (ACL, Sbz1, 1)
+ TEST_FIELD_OFFSET(ACL, Sbz1, 1)
+ TEST_FIELD_SIZE (ACL, AclSize, 2)
+ TEST_FIELD_ALIGN (ACL, AclSize, 2)
+ TEST_FIELD_OFFSET(ACL, AclSize, 2)
+ TEST_FIELD_SIZE (ACL, AceCount, 2)
+ TEST_FIELD_ALIGN (ACL, AceCount, 2)
+ TEST_FIELD_OFFSET(ACL, AceCount, 4)
+ TEST_FIELD_SIZE (ACL, Sbz2, 2)
+ TEST_FIELD_ALIGN (ACL, Sbz2, 2)
+ TEST_FIELD_OFFSET(ACL, Sbz2, 6)
}
static void test_pack_ACL_REVISION_INFORMATION(void)
{
/* ACL_REVISION_INFORMATION (pack 4) */
- TEST_TYPE(ACL_REVISION_INFORMATION, 4, 4);
- TEST_FIELD(ACL_REVISION_INFORMATION, DWORD, AclRevision, 0, 4, 4);
+ TEST_TYPE_SIZE (ACL_REVISION_INFORMATION, 4)
+ TEST_TYPE_ALIGN (ACL_REVISION_INFORMATION, 4)
+ TEST_FIELD_SIZE (ACL_REVISION_INFORMATION, AclRevision, 4)
+ TEST_FIELD_ALIGN (ACL_REVISION_INFORMATION, AclRevision, 4)
+ TEST_FIELD_OFFSET(ACL_REVISION_INFORMATION, AclRevision, 0)
}
static void test_pack_ACL_SIZE_INFORMATION(void)
{
/* ACL_SIZE_INFORMATION (pack 4) */
- TEST_TYPE(ACL_SIZE_INFORMATION, 12, 4);
- TEST_FIELD(ACL_SIZE_INFORMATION, DWORD, AceCount, 0, 4, 4);
- TEST_FIELD(ACL_SIZE_INFORMATION, DWORD, AclBytesInUse, 4, 4, 4);
- TEST_FIELD(ACL_SIZE_INFORMATION, DWORD, AclBytesFree, 8, 4, 4);
+ TEST_TYPE_SIZE (ACL_SIZE_INFORMATION, 12)
+ TEST_TYPE_ALIGN (ACL_SIZE_INFORMATION, 4)
+ TEST_FIELD_SIZE (ACL_SIZE_INFORMATION, AceCount, 4)
+ TEST_FIELD_ALIGN (ACL_SIZE_INFORMATION, AceCount, 4)
+ TEST_FIELD_OFFSET(ACL_SIZE_INFORMATION, AceCount, 0)
+ TEST_FIELD_SIZE (ACL_SIZE_INFORMATION, AclBytesInUse, 4)
+ TEST_FIELD_ALIGN (ACL_SIZE_INFORMATION, AclBytesInUse, 4)
+ TEST_FIELD_OFFSET(ACL_SIZE_INFORMATION, AclBytesInUse, 4)
+ TEST_FIELD_SIZE (ACL_SIZE_INFORMATION, AclBytesFree, 4)
+ TEST_FIELD_ALIGN (ACL_SIZE_INFORMATION, AclBytesFree, 4)
+ TEST_FIELD_OFFSET(ACL_SIZE_INFORMATION, AclBytesFree, 8)
}
static void test_pack_BOOLEAN(void)
{
/* BOOLEAN */
- TEST_TYPE(BOOLEAN, 1, 1);
- TEST_TYPE_UNSIGNED(BOOLEAN);
+ TEST_TYPE_SIZE (BOOLEAN, 1)
+ TEST_TYPE_ALIGN (BOOLEAN, 1)
+ TEST_TYPE_UNSIGNED(BOOLEAN)
}
static void test_pack_CCHAR(void)
{
/* CCHAR */
- TEST_TYPE(CCHAR, 1, 1);
- TEST_TYPE_SIGNED(CCHAR);
+ TEST_TYPE_SIZE (CCHAR, 1)
+ TEST_TYPE_ALIGN (CCHAR, 1)
+ TEST_TYPE_SIGNED(CCHAR)
}
static void test_pack_CHAR(void)
{
/* CHAR */
- TEST_TYPE(CHAR, 1, 1);
- TEST_TYPE_SIGNED(CHAR);
+ TEST_TYPE_SIZE (CHAR, 1)
+ TEST_TYPE_ALIGN (CHAR, 1)
+ TEST_TYPE_SIGNED(CHAR)
}
static void test_pack_DWORDLONG(void)
{
/* DWORDLONG */
- TEST_TYPE(DWORDLONG, 8, 8);
- TEST_TYPE_UNSIGNED(DWORDLONG);
+ TEST_TYPE_SIZE (DWORDLONG, 8)
+ TEST_TYPE_ALIGN (DWORDLONG, 8)
+ TEST_TYPE_UNSIGNED(DWORDLONG)
}
static void test_pack_EXCEPTION_POINTERS(void)
{
/* EXCEPTION_POINTERS (pack 4) */
- TEST_TYPE(EXCEPTION_POINTERS, 8, 4);
- TEST_FIELD(EXCEPTION_POINTERS, PEXCEPTION_RECORD, ExceptionRecord, 0, 4, 4);
- TEST_FIELD(EXCEPTION_POINTERS, PCONTEXT, ContextRecord, 4, 4, 4);
+ TEST_TYPE_SIZE (EXCEPTION_POINTERS, 8)
+ TEST_TYPE_ALIGN (EXCEPTION_POINTERS, 4)
+ TEST_FIELD_SIZE (EXCEPTION_POINTERS, ExceptionRecord, 4)
+ TEST_FIELD_ALIGN (EXCEPTION_POINTERS, ExceptionRecord, 4)
+ TEST_FIELD_OFFSET(EXCEPTION_POINTERS, ExceptionRecord, 0)
+ TEST_FIELD_SIZE (EXCEPTION_POINTERS, ContextRecord, 4)
+ TEST_FIELD_ALIGN (EXCEPTION_POINTERS, ContextRecord, 4)
+ TEST_FIELD_OFFSET(EXCEPTION_POINTERS, ContextRecord, 4)
}
static void test_pack_EXCEPTION_RECORD(void)
{
/* EXCEPTION_RECORD (pack 4) */
- TEST_TYPE(EXCEPTION_RECORD, 80, 4);
- TEST_FIELD(EXCEPTION_RECORD, DWORD, ExceptionCode, 0, 4, 4);
- TEST_FIELD(EXCEPTION_RECORD, DWORD, ExceptionFlags, 4, 4, 4);
- TEST_FIELD(EXCEPTION_RECORD, struct _EXCEPTION_RECORD *, ExceptionRecord, 8, 4, 4);
- TEST_FIELD(EXCEPTION_RECORD, PVOID, ExceptionAddress, 12, 4, 4);
- TEST_FIELD(EXCEPTION_RECORD, DWORD, NumberParameters, 16, 4, 4);
- TEST_FIELD(EXCEPTION_RECORD, ULONG_PTR[EXCEPTION_MAXIMUM_PARAMETERS], ExceptionInformation, 20, 60, 4);
+ TEST_TYPE_SIZE (EXCEPTION_RECORD, 80)
+ TEST_TYPE_ALIGN (EXCEPTION_RECORD, 4)
+ TEST_FIELD_SIZE (EXCEPTION_RECORD, ExceptionCode, 4)
+ TEST_FIELD_ALIGN (EXCEPTION_RECORD, ExceptionCode, 4)
+ TEST_FIELD_OFFSET(EXCEPTION_RECORD, ExceptionCode, 0)
+ TEST_FIELD_SIZE (EXCEPTION_RECORD, ExceptionFlags, 4)
+ TEST_FIELD_ALIGN (EXCEPTION_RECORD, ExceptionFlags, 4)
+ TEST_FIELD_OFFSET(EXCEPTION_RECORD, ExceptionFlags, 4)
+ TEST_FIELD_SIZE (EXCEPTION_RECORD, ExceptionRecord, 4)
+ TEST_FIELD_ALIGN (EXCEPTION_RECORD, ExceptionRecord, 4)
+ TEST_FIELD_OFFSET(EXCEPTION_RECORD, ExceptionRecord, 8)
+ TEST_FIELD_SIZE (EXCEPTION_RECORD, ExceptionAddress, 4)
+ TEST_FIELD_ALIGN (EXCEPTION_RECORD, ExceptionAddress, 4)
+ TEST_FIELD_OFFSET(EXCEPTION_RECORD, ExceptionAddress, 12)
+ TEST_FIELD_SIZE (EXCEPTION_RECORD, NumberParameters, 4)
+ TEST_FIELD_ALIGN (EXCEPTION_RECORD, NumberParameters, 4)
+ TEST_FIELD_OFFSET(EXCEPTION_RECORD, NumberParameters, 16)
+ TEST_FIELD_SIZE (EXCEPTION_RECORD, ExceptionInformation, 60)
+ TEST_FIELD_ALIGN (EXCEPTION_RECORD, ExceptionInformation, 4)
+ TEST_FIELD_OFFSET(EXCEPTION_RECORD, ExceptionInformation, 20)
}
static void test_pack_EXECUTION_STATE(void)
{
/* EXECUTION_STATE */
- TEST_TYPE(EXECUTION_STATE, 4, 4);
- TEST_TYPE_UNSIGNED(EXECUTION_STATE);
+ TEST_TYPE_SIZE (EXECUTION_STATE, 4)
+ TEST_TYPE_ALIGN (EXECUTION_STATE, 4)
+ TEST_TYPE_UNSIGNED(EXECUTION_STATE)
}
static void test_pack_FLOATING_SAVE_AREA(void)
{
/* FLOATING_SAVE_AREA (pack 4) */
- TEST_TYPE(FLOATING_SAVE_AREA, 112, 4);
- TEST_FIELD(FLOATING_SAVE_AREA, DWORD, ControlWord, 0, 4, 4);
- TEST_FIELD(FLOATING_SAVE_AREA, DWORD, StatusWord, 4, 4, 4);
- TEST_FIELD(FLOATING_SAVE_AREA, DWORD, TagWord, 8, 4, 4);
- TEST_FIELD(FLOATING_SAVE_AREA, DWORD, ErrorOffset, 12, 4, 4);
- TEST_FIELD(FLOATING_SAVE_AREA, DWORD, ErrorSelector, 16, 4, 4);
- TEST_FIELD(FLOATING_SAVE_AREA, DWORD, DataOffset, 20, 4, 4);
- TEST_FIELD(FLOATING_SAVE_AREA, DWORD, DataSelector, 24, 4, 4);
- TEST_FIELD(FLOATING_SAVE_AREA, BYTE[SIZE_OF_80387_REGISTERS], RegisterArea, 28, 80, 1);
- TEST_FIELD(FLOATING_SAVE_AREA, DWORD, Cr0NpxState, 108, 4, 4);
+ TEST_TYPE_SIZE (FLOATING_SAVE_AREA, 112)
+ TEST_TYPE_ALIGN (FLOATING_SAVE_AREA, 4)
+ TEST_FIELD_SIZE (FLOATING_SAVE_AREA, ControlWord, 4)
+ TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, ControlWord, 4)
+ TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, ControlWord, 0)
+ TEST_FIELD_SIZE (FLOATING_SAVE_AREA, StatusWord, 4)
+ TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, StatusWord, 4)
+ TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, StatusWord, 4)
+ TEST_FIELD_SIZE (FLOATING_SAVE_AREA, TagWord, 4)
+ TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, TagWord, 4)
+ TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, TagWord, 8)
+ TEST_FIELD_SIZE (FLOATING_SAVE_AREA, ErrorOffset, 4)
+ TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, ErrorOffset, 4)
+ TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, ErrorOffset, 12)
+ TEST_FIELD_SIZE (FLOATING_SAVE_AREA, ErrorSelector, 4)
+ TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, ErrorSelector, 4)
+ TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, ErrorSelector, 16)
+ TEST_FIELD_SIZE (FLOATING_SAVE_AREA, DataOffset, 4)
+ TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, DataOffset, 4)
+ TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, DataOffset, 20)
+ TEST_FIELD_SIZE (FLOATING_SAVE_AREA, DataSelector, 4)
+ TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, DataSelector, 4)
+ TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, DataSelector, 24)
+ TEST_FIELD_SIZE (FLOATING_SAVE_AREA, RegisterArea, 80)
+ TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, RegisterArea, 1)
+ TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, RegisterArea, 28)
+ TEST_FIELD_SIZE (FLOATING_SAVE_AREA, Cr0NpxState, 4)
+ TEST_FIELD_ALIGN (FLOATING_SAVE_AREA, Cr0NpxState, 4)
+ TEST_FIELD_OFFSET(FLOATING_SAVE_AREA, Cr0NpxState, 108)
}
static void test_pack_FPO_DATA(void)
{
/* FPO_DATA (pack 4) */
- TEST_TYPE(FPO_DATA, 16, 4);
- TEST_FIELD(FPO_DATA, DWORD, ulOffStart, 0, 4, 4);
- TEST_FIELD(FPO_DATA, DWORD, cbProcSize, 4, 4, 4);
- TEST_FIELD(FPO_DATA, DWORD, cdwLocals, 8, 4, 4);
- TEST_FIELD(FPO_DATA, WORD, cdwParams, 12, 2, 2);
+ TEST_TYPE_SIZE (FPO_DATA, 16)
+ TEST_TYPE_ALIGN (FPO_DATA, 4)
+ TEST_FIELD_SIZE (FPO_DATA, ulOffStart, 4)
+ TEST_FIELD_ALIGN (FPO_DATA, ulOffStart, 4)
+ TEST_FIELD_OFFSET(FPO_DATA, ulOffStart, 0)
+ TEST_FIELD_SIZE (FPO_DATA, cbProcSize, 4)
+ TEST_FIELD_ALIGN (FPO_DATA, cbProcSize, 4)
+ TEST_FIELD_OFFSET(FPO_DATA, cbProcSize, 4)
+ TEST_FIELD_SIZE (FPO_DATA, cdwLocals, 4)
+ TEST_FIELD_ALIGN (FPO_DATA, cdwLocals, 4)
+ TEST_FIELD_OFFSET(FPO_DATA, cdwLocals, 8)
+ TEST_FIELD_SIZE (FPO_DATA, cdwParams, 2)
+ TEST_FIELD_ALIGN (FPO_DATA, cdwParams, 2)
+ TEST_FIELD_OFFSET(FPO_DATA, cdwParams, 12)
}
static void test_pack_GENERIC_MAPPING(void)
{
/* GENERIC_MAPPING (pack 4) */
- TEST_TYPE(GENERIC_MAPPING, 16, 4);
- TEST_FIELD(GENERIC_MAPPING, ACCESS_MASK, GenericRead, 0, 4, 4);
- TEST_FIELD(GENERIC_MAPPING, ACCESS_MASK, GenericWrite, 4, 4, 4);
- TEST_FIELD(GENERIC_MAPPING, ACCESS_MASK, GenericExecute, 8, 4, 4);
- TEST_FIELD(GENERIC_MAPPING, ACCESS_MASK, GenericAll, 12, 4, 4);
+ TEST_TYPE_SIZE (GENERIC_MAPPING, 16)
+ TEST_TYPE_ALIGN (GENERIC_MAPPING, 4)
+ TEST_FIELD_SIZE (GENERIC_MAPPING, GenericRead, 4)
+ TEST_FIELD_ALIGN (GENERIC_MAPPING, GenericRead, 4)
+ TEST_FIELD_OFFSET(GENERIC_MAPPING, GenericRead, 0)
+ TEST_FIELD_SIZE (GENERIC_MAPPING, GenericWrite, 4)
+ TEST_FIELD_ALIGN (GENERIC_MAPPING, GenericWrite, 4)
+ TEST_FIELD_OFFSET(GENERIC_MAPPING, GenericWrite, 4)
+ TEST_FIELD_SIZE (GENERIC_MAPPING, GenericExecute, 4)
+ TEST_FIELD_ALIGN (GENERIC_MAPPING, GenericExecute, 4)
+ TEST_FIELD_OFFSET(GENERIC_MAPPING, GenericExecute, 8)
+ TEST_FIELD_SIZE (GENERIC_MAPPING, GenericAll, 4)
+ TEST_FIELD_ALIGN (GENERIC_MAPPING, GenericAll, 4)
+ TEST_FIELD_OFFSET(GENERIC_MAPPING, GenericAll, 12)
}
static void test_pack_HANDLE(void)
{
/* HANDLE */
- TEST_TYPE(HANDLE, 4, 4);
+ TEST_TYPE_SIZE (HANDLE, 4)
+ TEST_TYPE_ALIGN (HANDLE, 4)
}
static void test_pack_HRESULT(void)
{
/* HRESULT */
- TEST_TYPE(HRESULT, 4, 4);
+ TEST_TYPE_SIZE (HRESULT, 4)
+ TEST_TYPE_ALIGN (HRESULT, 4)
}
static void test_pack_IMAGE_ARCHIVE_MEMBER_HEADER(void)
{
/* IMAGE_ARCHIVE_MEMBER_HEADER (pack 4) */
- TEST_TYPE(IMAGE_ARCHIVE_MEMBER_HEADER, 60, 1);
- TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[16], Name, 0, 16, 1);
- TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[12], Date, 16, 12, 1);
- TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[6], UserID, 28, 6, 1);
- TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[6], GroupID, 34, 6, 1);
- TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[8], Mode, 40, 8, 1);
- TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[10], Size, 48, 10, 1);
- TEST_FIELD(IMAGE_ARCHIVE_MEMBER_HEADER, BYTE[2], EndHeader, 58, 2, 1);
+ TEST_TYPE_SIZE (IMAGE_ARCHIVE_MEMBER_HEADER, 60)
+ TEST_TYPE_ALIGN (IMAGE_ARCHIVE_MEMBER_HEADER, 1)
+ TEST_FIELD_SIZE (IMAGE_ARCHIVE_MEMBER_HEADER, Name, 16)
+ TEST_FIELD_ALIGN (IMAGE_ARCHIVE_MEMBER_HEADER, Name, 1)
+ TEST_FIELD_OFFSET(IMAGE_ARCHIVE_MEMBER_HEADER, Name, 0)
+ TEST_FIELD_SIZE (IMAGE_ARCHIVE_MEMBER_HEADER, Date, 12)
+ TEST_FIELD_ALIGN (IMAGE_ARCHIVE_MEMBER_HEADER, Date, 1)
+ TEST_FIELD_OFFSET(IMAGE_ARCHIVE_MEMBER_HEADER, Date, 16)
+ TEST_FIELD_SIZE (IMAGE_ARCHIVE_MEMBER_HEADER, UserID, 6)
+ TEST_FIELD_ALIGN (IMAGE_ARCHIVE_MEMBER_HEADER, UserID, 1)
+ TEST_FIELD_OFFSET(IMAGE_ARCHIVE_MEMBER_HEADER, UserID, 28)
+ TEST_FIELD_SIZE (IMAGE_ARCHIVE_MEMBER_HEADER, GroupID, 6)
+ TEST_FIELD_ALIGN (IMAGE_ARCHIVE_MEMBER_HEADER, GroupID, 1)
+ TEST_FIELD_OFFSET(IMAGE_ARCHIVE_MEMBER_HEADER, GroupID, 34)
+ TEST_FIELD_SIZE (IMAGE_ARCHIVE_MEMBER_HEADER, Mode, 8)
+ TEST_FIELD_ALIGN (IMAGE_ARCHIVE_MEMBER_HEADER, Mode, 1)
+ TEST_FIELD_OFFSET(IMAGE_ARCHIVE_MEMBER_HEADER, Mode, 40)
+ TEST_FIELD_SIZE (IMAGE_ARCHIVE_MEMBER_HEADER, Size, 10)
+ TEST_FIELD_ALIGN (IMAGE_ARCHIVE_MEMBER_HEADER, Size, 1)
+ TEST_FIELD_OFFSET(IMAGE_ARCHIVE_MEMBER_HEADER, Size, 48)
+ TEST_FIELD_SIZE (IMAGE_ARCHIVE_MEMBER_HEADER, EndHeader, 2)
+ TEST_FIELD_ALIGN (IMAGE_ARCHIVE_MEMBER_HEADER, EndHeader, 1)
+ TEST_FIELD_OFFSET(IMAGE_ARCHIVE_MEMBER_HEADER, EndHeader, 58)
}
static void test_pack_IMAGE_AUX_SYMBOL(void)
@@ -455,146 +572,304 @@ static void test_pack_IMAGE_AUX_SYMBOL(void)
static void test_pack_IMAGE_BASE_RELOCATION(void)
{
/* IMAGE_BASE_RELOCATION (pack 4) */
- TEST_TYPE(IMAGE_BASE_RELOCATION, 8, 4);
- TEST_FIELD(IMAGE_BASE_RELOCATION, DWORD, VirtualAddress, 0, 4, 4);
- TEST_FIELD(IMAGE_BASE_RELOCATION, DWORD, SizeOfBlock, 4, 4, 4);
+ TEST_TYPE_SIZE (IMAGE_BASE_RELOCATION, 8)
+ TEST_TYPE_ALIGN (IMAGE_BASE_RELOCATION, 4)
+ TEST_FIELD_SIZE (IMAGE_BASE_RELOCATION, VirtualAddress, 4)
+ TEST_FIELD_ALIGN (IMAGE_BASE_RELOCATION, VirtualAddress, 4)
+ TEST_FIELD_OFFSET(IMAGE_BASE_RELOCATION, VirtualAddress, 0)
+ TEST_FIELD_SIZE (IMAGE_BASE_RELOCATION, SizeOfBlock, 4)
+ TEST_FIELD_ALIGN (IMAGE_BASE_RELOCATION, SizeOfBlock, 4)
+ TEST_FIELD_OFFSET(IMAGE_BASE_RELOCATION, SizeOfBlock, 4)
}
static void test_pack_IMAGE_BOUND_FORWARDER_REF(void)
{
/* IMAGE_BOUND_FORWARDER_REF (pack 4) */
- TEST_TYPE(IMAGE_BOUND_FORWARDER_REF, 8, 4);
- TEST_FIELD(IMAGE_BOUND_FORWARDER_REF, DWORD, TimeDateStamp, 0, 4, 4);
- TEST_FIELD(IMAGE_BOUND_FORWARDER_REF, WORD, OffsetModuleName, 4, 2, 2);
- TEST_FIELD(IMAGE_BOUND_FORWARDER_REF, WORD, Reserved, 6, 2, 2);
+ TEST_TYPE_SIZE (IMAGE_BOUND_FORWARDER_REF, 8)
+ TEST_TYPE_ALIGN (IMAGE_BOUND_FORWARDER_REF, 4)
+ TEST_FIELD_SIZE (IMAGE_BOUND_FORWARDER_REF, TimeDateStamp, 4)
+ TEST_FIELD_ALIGN (IMAGE_BOUND_FORWARDER_REF, TimeDateStamp, 4)
+ TEST_FIELD_OFFSET(IMAGE_BOUND_FORWARDER_REF, TimeDateStamp, 0)
+ TEST_FIELD_SIZE (IMAGE_BOUND_FORWARDER_REF, OffsetModuleName, 2)
+ TEST_FIELD_ALIGN (IMAGE_BOUND_FORWARDER_REF, OffsetModuleName, 2)
+ TEST_FIELD_OFFSET(IMAGE_BOUND_FORWARDER_REF, OffsetModuleName, 4)
+ TEST_FIELD_SIZE (IMAGE_BOUND_FORWARDER_REF, Reserved, 2)
+ TEST_FIELD_ALIGN (IMAGE_BOUND_FORWARDER_REF, Reserved, 2)
+ TEST_FIELD_OFFSET(IMAGE_BOUND_FORWARDER_REF, Reserved, 6)
}
static void test_pack_IMAGE_BOUND_IMPORT_DESCRIPTOR(void)
{
/* IMAGE_BOUND_IMPORT_DESCRIPTOR (pack 4) */
- TEST_TYPE(IMAGE_BOUND_IMPORT_DESCRIPTOR, 8, 4);
- TEST_FIELD(IMAGE_BOUND_IMPORT_DESCRIPTOR, DWORD, TimeDateStamp, 0, 4, 4);
- TEST_FIELD(IMAGE_BOUND_IMPORT_DESCRIPTOR, WORD, OffsetModuleName, 4, 2, 2);
- TEST_FIELD(IMAGE_BOUND_IMPORT_DESCRIPTOR, WORD, NumberOfModuleForwarderRefs, 6, 2, 2);
+ TEST_TYPE_SIZE (IMAGE_BOUND_IMPORT_DESCRIPTOR, 8)
+ TEST_TYPE_ALIGN (IMAGE_BOUND_IMPORT_DESCRIPTOR, 4)
+ TEST_FIELD_SIZE (IMAGE_BOUND_IMPORT_DESCRIPTOR, TimeDateStamp, 4)
+ TEST_FIELD_ALIGN (IMAGE_BOUND_IMPORT_DESCRIPTOR, TimeDateStamp, 4)
+ TEST_FIELD_OFFSET(IMAGE_BOUND_IMPORT_DESCRIPTOR, TimeDateStamp, 0)
+ TEST_FIELD_SIZE (IMAGE_BOUND_IMPORT_DESCRIPTOR, OffsetModuleName, 2)
+ TEST_FIELD_ALIGN (IMAGE_BOUND_IMPORT_DESCRIPTOR, OffsetModuleName, 2)
+ TEST_FIELD_OFFSET(IMAGE_BOUND_IMPORT_DESCRIPTOR, OffsetModuleName, 4)
+ TEST_FIELD_SIZE (IMAGE_BOUND_IMPORT_DESCRIPTOR, NumberOfModuleForwarderRefs, 2)
+ TEST_FIELD_ALIGN (IMAGE_BOUND_IMPORT_DESCRIPTOR, NumberOfModuleForwarderRefs, 2)
+ TEST_FIELD_OFFSET(IMAGE_BOUND_IMPORT_DESCRIPTOR, NumberOfModuleForwarderRefs, 6)
}
static void test_pack_IMAGE_COFF_SYMBOLS_HEADER(void)
{
/* IMAGE_COFF_SYMBOLS_HEADER (pack 4) */
- TEST_TYPE(IMAGE_COFF_SYMBOLS_HEADER, 32, 4);
- TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, NumberOfSymbols, 0, 4, 4);
- TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, LvaToFirstSymbol, 4, 4, 4);
- TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, NumberOfLinenumbers, 8, 4, 4);
- TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, LvaToFirstLinenumber, 12, 4, 4);
- TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, RvaToFirstByteOfCode, 16, 4, 4);
- TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, RvaToLastByteOfCode, 20, 4, 4);
- TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, RvaToFirstByteOfData, 24, 4, 4);
- TEST_FIELD(IMAGE_COFF_SYMBOLS_HEADER, DWORD, RvaToLastByteOfData, 28, 4, 4);
+ TEST_TYPE_SIZE (IMAGE_COFF_SYMBOLS_HEADER, 32)
+ TEST_TYPE_ALIGN (IMAGE_COFF_SYMBOLS_HEADER, 4)
+ TEST_FIELD_SIZE (IMAGE_COFF_SYMBOLS_HEADER, NumberOfSymbols, 4)
+ TEST_FIELD_ALIGN (IMAGE_COFF_SYMBOLS_HEADER, NumberOfSymbols, 4)
+ TEST_FIELD_OFFSET(IMAGE_COFF_SYMBOLS_HEADER, NumberOfSymbols, 0)
+ TEST_FIELD_SIZE (IMAGE_COFF_SYMBOLS_HEADER, LvaToFirstSymbol, 4)
+ TEST_FIELD_ALIGN (IMAGE_COFF_SYMBOLS_HEADER, LvaToFirstSymbol, 4)
+ TEST_FIELD_OFFSET(IMAGE_COFF_SYMBOLS_HEADER, LvaToFirstSymbol, 4)
+ TEST_FIELD_SIZE (IMAGE_COFF_SYMBOLS_HEADER, NumberOfLinenumbers, 4)
+ TEST_FIELD_ALIGN (IMAGE_COFF_SYMBOLS_HEADER, NumberOfLinenumbers, 4)
+ TEST_FIELD_OFFSET(IMAGE_COFF_SYMBOLS_HEADER, NumberOfLinenumbers, 8)
+ TEST_FIELD_SIZE (IMAGE_COFF_SYMBOLS_HEADER, LvaToFirstLinenumber, 4)
+ TEST_FIELD_ALIGN (IMAGE_COFF_SYMBOLS_HEADER, LvaToFirstLinenumber, 4)
+ TEST_FIELD_OFFSET(IMAGE_COFF_SYMBOLS_HEADER, LvaToFirstLinenumber, 12)
+ TEST_FIELD_SIZE (IMAGE_COFF_SYMBOLS_HEADER, RvaToFirstByteOfCode, 4)
+ TEST_FIELD_ALIGN (IMAGE_COFF_SYMBOLS_HEADER, RvaToFirstByteOfCode, 4)
+ TEST_FIELD_OFFSET(IMAGE_COFF_SYMBOLS_HEADER, RvaToFirstByteOfCode, 16)
+ TEST_FIELD_SIZE (IMAGE_COFF_SYMBOLS_HEADER, RvaToLastByteOfCode, 4)
+ TEST_FIELD_ALIGN (IMAGE_COFF_SYMBOLS_HEADER, RvaToLastByteOfCode, 4)
+ TEST_FIELD_OFFSET(IMAGE_COFF_SYMBOLS_HEADER, RvaToLastByteOfCode, 20)
+ TEST_FIELD_SIZE (IMAGE_COFF_SYMBOLS_HEADER, RvaToFirstByteOfData, 4)
+ TEST_FIELD_ALIGN (IMAGE_COFF_SYMBOLS_HEADER, RvaToFirstByteOfData, 4)
+ TEST_FIELD_OFFSET(IMAGE_COFF_SYMBOLS_HEADER, RvaToFirstByteOfData, 24)
+ TEST_FIELD_SIZE (IMAGE_COFF_SYMBOLS_HEADER, RvaToLastByteOfData, 4)
+ TEST_FIELD_ALIGN (IMAGE_COFF_SYMBOLS_HEADER, RvaToLastByteOfData, 4)
+ TEST_FIELD_OFFSET(IMAGE_COFF_SYMBOLS_HEADER, RvaToLastByteOfData, 28)
}
static void test_pack_IMAGE_DATA_DIRECTORY(void)
{
/* IMAGE_DATA_DIRECTORY (pack 4) */
- TEST_TYPE(IMAGE_DATA_DIRECTORY, 8, 4);
- TEST_FIELD(IMAGE_DATA_DIRECTORY, DWORD, VirtualAddress, 0, 4, 4);
- TEST_FIELD(IMAGE_DATA_DIRECTORY, DWORD, Size, 4, 4, 4);
+ TEST_TYPE_SIZE (IMAGE_DATA_DIRECTORY, 8)
+ TEST_TYPE_ALIGN (IMAGE_DATA_DIRECTORY, 4)
+ TEST_FIELD_SIZE (IMAGE_DATA_DIRECTORY, VirtualAddress, 4)
+ TEST_FIELD_ALIGN (IMAGE_DATA_DIRECTORY, VirtualAddress, 4)
+ TEST_FIELD_OFFSET(IMAGE_DATA_DIRECTORY, VirtualAddress, 0)
+ TEST_FIELD_SIZE (IMAGE_DATA_DIRECTORY, Size, 4)
+ TEST_FIELD_ALIGN (IMAGE_DATA_DIRECTORY, Size, 4)
+ TEST_FIELD_OFFSET(IMAGE_DATA_DIRECTORY, Size, 4)
}
static void test_pack_IMAGE_DEBUG_DIRECTORY(void)
{
/* IMAGE_DEBUG_DIRECTORY (pack 4) */
- TEST_TYPE(IMAGE_DEBUG_DIRECTORY, 28, 4);
- TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, Characteristics, 0, 4, 4);
- TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, TimeDateStamp, 4, 4, 4);
- TEST_FIELD(IMAGE_DEBUG_DIRECTORY, WORD, MajorVersion, 8, 2, 2);
- TEST_FIELD(IMAGE_DEBUG_DIRECTORY, WORD, MinorVersion, 10, 2, 2);
- TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, Type, 12, 4, 4);
- TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, SizeOfData, 16, 4, 4);
- TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, AddressOfRawData, 20, 4, 4);
- TEST_FIELD(IMAGE_DEBUG_DIRECTORY, DWORD, PointerToRawData, 24, 4, 4);
+ TEST_TYPE_SIZE (IMAGE_DEBUG_DIRECTORY, 28)
+ TEST_TYPE_ALIGN (IMAGE_DEBUG_DIRECTORY, 4)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_DIRECTORY, Characteristics, 4)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_DIRECTORY, Characteristics, 4)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_DIRECTORY, Characteristics, 0)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_DIRECTORY, MajorVersion, 2)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_DIRECTORY, MajorVersion, 2)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_DIRECTORY, MajorVersion, 8)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_DIRECTORY, MinorVersion, 2)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_DIRECTORY, MinorVersion, 2)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_DIRECTORY, MinorVersion, 10)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_DIRECTORY, Type, 4)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_DIRECTORY, Type, 4)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_DIRECTORY, Type, 12)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_DIRECTORY, SizeOfData, 4)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_DIRECTORY, SizeOfData, 4)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_DIRECTORY, SizeOfData, 16)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_DIRECTORY, AddressOfRawData, 4)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_DIRECTORY, AddressOfRawData, 4)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_DIRECTORY, AddressOfRawData, 20)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_DIRECTORY, PointerToRawData, 4)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_DIRECTORY, PointerToRawData, 4)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_DIRECTORY, PointerToRawData, 24)
}
static void test_pack_IMAGE_DEBUG_MISC(void)
{
/* IMAGE_DEBUG_MISC (pack 4) */
- TEST_TYPE(IMAGE_DEBUG_MISC, 16, 4);
- TEST_FIELD(IMAGE_DEBUG_MISC, DWORD, DataType, 0, 4, 4);
- TEST_FIELD(IMAGE_DEBUG_MISC, DWORD, Length, 4, 4, 4);
- TEST_FIELD(IMAGE_DEBUG_MISC, BYTE, Unicode, 8, 1, 1);
- TEST_FIELD(IMAGE_DEBUG_MISC, BYTE[ 3 ], Reserved, 9, 3, 1);
- TEST_FIELD(IMAGE_DEBUG_MISC, BYTE[ 1 ], Data, 12, 1, 1);
+ TEST_TYPE_SIZE (IMAGE_DEBUG_MISC, 16)
+ TEST_TYPE_ALIGN (IMAGE_DEBUG_MISC, 4)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_MISC, DataType, 4)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_MISC, DataType, 4)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_MISC, DataType, 0)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_MISC, Length, 4)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_MISC, Length, 4)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_MISC, Length, 4)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_MISC, Unicode, 1)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_MISC, Unicode, 1)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_MISC, Unicode, 8)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_MISC, Reserved, 3)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_MISC, Reserved, 1)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_MISC, Reserved, 9)
+ TEST_FIELD_SIZE (IMAGE_DEBUG_MISC, Data, 1)
+ TEST_FIELD_ALIGN (IMAGE_DEBUG_MISC, Data, 1)
+ TEST_FIELD_OFFSET(IMAGE_DEBUG_MISC, Data, 12)
}
static void test_pack_IMAGE_DOS_HEADER(void)
{
/* IMAGE_DOS_HEADER (pack 2) */
- TEST_TYPE(IMAGE_DOS_HEADER, 64, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_magic, 0, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_cblp, 2, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_cp, 4, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_crlc, 6, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_cparhdr, 8, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_minalloc, 10, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_maxalloc, 12, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_ss, 14, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_sp, 16, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_csum, 18, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_ip, 20, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_cs, 22, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_lfarlc, 24, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_ovno, 26, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD[4], e_res, 28, 8, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_oemid, 36, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD, e_oeminfo, 38, 2, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, WORD[10], e_res2, 40, 20, 2);
- TEST_FIELD(IMAGE_DOS_HEADER, DWORD, e_lfanew, 60, 4, 2);
+ TEST_TYPE_SIZE (IMAGE_DOS_HEADER, 64)
+ TEST_TYPE_ALIGN (IMAGE_DOS_HEADER, 2)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_magic, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_magic, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_magic, 0)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_cblp, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_cblp, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_cblp, 2)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_cp, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_cp, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_cp, 4)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_crlc, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_crlc, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_crlc, 6)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_cparhdr, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_cparhdr, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_cparhdr, 8)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_minalloc, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_minalloc, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_minalloc, 10)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_maxalloc, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_maxalloc, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_maxalloc, 12)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_ss, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_ss, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_ss, 14)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_sp, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_sp, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_sp, 16)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_csum, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_csum, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_csum, 18)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_ip, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_ip, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_ip, 20)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_cs, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_cs, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_cs, 22)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_lfarlc, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_lfarlc, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_lfarlc, 24)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_ovno, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_ovno, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_ovno, 26)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_res, 8)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_res, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_res, 28)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_oemid, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_oemid, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_oemid, 36)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_oeminfo, 2)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_oeminfo, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_oeminfo, 38)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_res2, 20)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_res2, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_res2, 40)
+ TEST_FIELD_SIZE (IMAGE_DOS_HEADER, e_lfanew, 4)
+ TEST_FIELD_ALIGN (IMAGE_DOS_HEADER, e_lfanew, 2)
+ TEST_FIELD_OFFSET(IMAGE_DOS_HEADER, e_lfanew, 60)
}
static void test_pack_IMAGE_EXPORT_DIRECTORY(void)
{
/* IMAGE_EXPORT_DIRECTORY (pack 4) */
- TEST_TYPE(IMAGE_EXPORT_DIRECTORY, 40, 4);
- TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, Characteristics, 0, 4, 4);
- TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, TimeDateStamp, 4, 4, 4);
- TEST_FIELD(IMAGE_EXPORT_DIRECTORY, WORD, MajorVersion, 8, 2, 2);
- TEST_FIELD(IMAGE_EXPORT_DIRECTORY, WORD, MinorVersion, 10, 2, 2);
- TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, Name, 12, 4, 4);
- TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, Base, 16, 4, 4);
- TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, NumberOfFunctions, 20, 4, 4);
- TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, NumberOfNames, 24, 4, 4);
- TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, AddressOfFunctions, 28, 4, 4);
- TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, AddressOfNames, 32, 4, 4);
- TEST_FIELD(IMAGE_EXPORT_DIRECTORY, DWORD, AddressOfNameOrdinals, 36, 4, 4);
+ TEST_TYPE_SIZE (IMAGE_EXPORT_DIRECTORY, 40)
+ TEST_TYPE_ALIGN (IMAGE_EXPORT_DIRECTORY, 4)
+ TEST_FIELD_SIZE (IMAGE_EXPORT_DIRECTORY, Characteristics, 4)
+ TEST_FIELD_ALIGN (IMAGE_EXPORT_DIRECTORY, Characteristics, 4)
+ TEST_FIELD_OFFSET(IMAGE_EXPORT_DIRECTORY, Characteristics, 0)
+ TEST_FIELD_SIZE (IMAGE_EXPORT_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_ALIGN (IMAGE_EXPORT_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_OFFSET(IMAGE_EXPORT_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_SIZE (IMAGE_EXPORT_DIRECTORY, MajorVersion, 2)
+ TEST_FIELD_ALIGN (IMAGE_EXPORT_DIRECTORY, MajorVersion, 2)
+ TEST_FIELD_OFFSET(IMAGE_EXPORT_DIRECTORY, MajorVersion, 8)
+ TEST_FIELD_SIZE (IMAGE_EXPORT_DIRECTORY, MinorVersion, 2)
+ TEST_FIELD_ALIGN (IMAGE_EXPORT_DIRECTORY, MinorVersion, 2)
+ TEST_FIELD_OFFSET(IMAGE_EXPORT_DIRECTORY, MinorVersion, 10)
+ TEST_FIELD_SIZE (IMAGE_EXPORT_DIRECTORY, Name, 4)
+ TEST_FIELD_ALIGN (IMAGE_EXPORT_DIRECTORY, Name, 4)
+ TEST_FIELD_OFFSET(IMAGE_EXPORT_DIRECTORY, Name, 12)
+ TEST_FIELD_SIZE (IMAGE_EXPORT_DIRECTORY, Base, 4)
+ TEST_FIELD_ALIGN (IMAGE_EXPORT_DIRECTORY, Base, 4)
+ TEST_FIELD_OFFSET(IMAGE_EXPORT_DIRECTORY, Base, 16)
+ TEST_FIELD_SIZE (IMAGE_EXPORT_DIRECTORY, NumberOfFunctions, 4)
+ TEST_FIELD_ALIGN (IMAGE_EXPORT_DIRECTORY, NumberOfFunctions, 4)
+ TEST_FIELD_OFFSET(IMAGE_EXPORT_DIRECTORY, NumberOfFunctions, 20)
+ TEST_FIELD_SIZE (IMAGE_EXPORT_DIRECTORY, NumberOfNames, 4)
+ TEST_FIELD_ALIGN (IMAGE_EXPORT_DIRECTORY, NumberOfNames, 4)
+ TEST_FIELD_OFFSET(IMAGE_EXPORT_DIRECTORY, NumberOfNames, 24)
+ TEST_FIELD_SIZE (IMAGE_EXPORT_DIRECTORY, AddressOfFunctions, 4)
+ TEST_FIELD_ALIGN (IMAGE_EXPORT_DIRECTORY, AddressOfFunctions, 4)
+ TEST_FIELD_OFFSET(IMAGE_EXPORT_DIRECTORY, AddressOfFunctions, 28)
+ TEST_FIELD_SIZE (IMAGE_EXPORT_DIRECTORY, AddressOfNames, 4)
+ TEST_FIELD_ALIGN (IMAGE_EXPORT_DIRECTORY, AddressOfNames, 4)
+ TEST_FIELD_OFFSET(IMAGE_EXPORT_DIRECTORY, AddressOfNames, 32)
+ TEST_FIELD_SIZE (IMAGE_EXPORT_DIRECTORY, AddressOfNameOrdinals, 4)
+ TEST_FIELD_ALIGN (IMAGE_EXPORT_DIRECTORY, AddressOfNameOrdinals, 4)
+ TEST_FIELD_OFFSET(IMAGE_EXPORT_DIRECTORY, AddressOfNameOrdinals, 36)
}
static void test_pack_IMAGE_FILE_HEADER(void)
{
/* IMAGE_FILE_HEADER (pack 4) */
- TEST_TYPE(IMAGE_FILE_HEADER, 20, 4);
- TEST_FIELD(IMAGE_FILE_HEADER, WORD, Machine, 0, 2, 2);
- TEST_FIELD(IMAGE_FILE_HEADER, WORD, NumberOfSections, 2, 2, 2);
- TEST_FIELD(IMAGE_FILE_HEADER, DWORD, TimeDateStamp, 4, 4, 4);
- TEST_FIELD(IMAGE_FILE_HEADER, DWORD, PointerToSymbolTable, 8, 4, 4);
- TEST_FIELD(IMAGE_FILE_HEADER, DWORD, NumberOfSymbols, 12, 4, 4);
- TEST_FIELD(IMAGE_FILE_HEADER, WORD, SizeOfOptionalHeader, 16, 2, 2);
- TEST_FIELD(IMAGE_FILE_HEADER, WORD, Characteristics, 18, 2, 2);
+ TEST_TYPE_SIZE (IMAGE_FILE_HEADER, 20)
+ TEST_TYPE_ALIGN (IMAGE_FILE_HEADER, 4)
+ TEST_FIELD_SIZE (IMAGE_FILE_HEADER, Machine, 2)
+ TEST_FIELD_ALIGN (IMAGE_FILE_HEADER, Machine, 2)
+ TEST_FIELD_OFFSET(IMAGE_FILE_HEADER, Machine, 0)
+ TEST_FIELD_SIZE (IMAGE_FILE_HEADER, NumberOfSections, 2)
+ TEST_FIELD_ALIGN (IMAGE_FILE_HEADER, NumberOfSections, 2)
+ TEST_FIELD_OFFSET(IMAGE_FILE_HEADER, NumberOfSections, 2)
+ TEST_FIELD_SIZE (IMAGE_FILE_HEADER, TimeDateStamp, 4)
+ TEST_FIELD_ALIGN (IMAGE_FILE_HEADER, TimeDateStamp, 4)
+ TEST_FIELD_OFFSET(IMAGE_FILE_HEADER, TimeDateStamp, 4)
+ TEST_FIELD_SIZE (IMAGE_FILE_HEADER, PointerToSymbolTable, 4)
+ TEST_FIELD_ALIGN (IMAGE_FILE_HEADER, PointerToSymbolTable, 4)
+ TEST_FIELD_OFFSET(IMAGE_FILE_HEADER, PointerToSymbolTable, 8)
+ TEST_FIELD_SIZE (IMAGE_FILE_HEADER, NumberOfSymbols, 4)
+ TEST_FIELD_ALIGN (IMAGE_FILE_HEADER, NumberOfSymbols, 4)
+ TEST_FIELD_OFFSET(IMAGE_FILE_HEADER, NumberOfSymbols, 12)
+ TEST_FIELD_SIZE (IMAGE_FILE_HEADER, SizeOfOptionalHeader, 2)
+ TEST_FIELD_ALIGN (IMAGE_FILE_HEADER, SizeOfOptionalHeader, 2)
+ TEST_FIELD_OFFSET(IMAGE_FILE_HEADER, SizeOfOptionalHeader, 16)
+ TEST_FIELD_SIZE (IMAGE_FILE_HEADER, Characteristics, 2)
+ TEST_FIELD_ALIGN (IMAGE_FILE_HEADER, Characteristics, 2)
+ TEST_FIELD_OFFSET(IMAGE_FILE_HEADER, Characteristics, 18)
}
static void test_pack_IMAGE_FUNCTION_ENTRY(void)
{
/* IMAGE_FUNCTION_ENTRY (pack 4) */
- TEST_TYPE(IMAGE_FUNCTION_ENTRY, 12, 4);
- TEST_FIELD(IMAGE_FUNCTION_ENTRY, DWORD, StartingAddress, 0, 4, 4);
- TEST_FIELD(IMAGE_FUNCTION_ENTRY, DWORD, EndingAddress, 4, 4, 4);
- TEST_FIELD(IMAGE_FUNCTION_ENTRY, DWORD, EndOfPrologue, 8, 4, 4);
+ TEST_TYPE_SIZE (IMAGE_FUNCTION_ENTRY, 12)
+ TEST_TYPE_ALIGN (IMAGE_FUNCTION_ENTRY, 4)
+ TEST_FIELD_SIZE (IMAGE_FUNCTION_ENTRY, StartingAddress, 4)
+ TEST_FIELD_ALIGN (IMAGE_FUNCTION_ENTRY, StartingAddress, 4)
+ TEST_FIELD_OFFSET(IMAGE_FUNCTION_ENTRY, StartingAddress, 0)
+ TEST_FIELD_SIZE (IMAGE_FUNCTION_ENTRY, EndingAddress, 4)
+ TEST_FIELD_ALIGN (IMAGE_FUNCTION_ENTRY, EndingAddress, 4)
+ TEST_FIELD_OFFSET(IMAGE_FUNCTION_ENTRY, EndingAddress, 4)
+ TEST_FIELD_SIZE (IMAGE_FUNCTION_ENTRY, EndOfPrologue, 4)
+ TEST_FIELD_ALIGN (IMAGE_FUNCTION_ENTRY, EndOfPrologue, 4)
+ TEST_FIELD_OFFSET(IMAGE_FUNCTION_ENTRY, EndOfPrologue, 8)
}
static void test_pack_IMAGE_IMPORT_BY_NAME(void)
{
/* IMAGE_IMPORT_BY_NAME (pack 4) */
- TEST_TYPE(IMAGE_IMPORT_BY_NAME, 4, 2);
- TEST_FIELD(IMAGE_IMPORT_BY_NAME, WORD, Hint, 0, 2, 2);
- TEST_FIELD(IMAGE_IMPORT_BY_NAME, BYTE[1], Name, 2, 1, 1);
+ TEST_TYPE_SIZE (IMAGE_IMPORT_BY_NAME, 4)
+ TEST_TYPE_ALIGN (IMAGE_IMPORT_BY_NAME, 2)
+ TEST_FIELD_SIZE (IMAGE_IMPORT_BY_NAME, Hint, 2)
+ TEST_FIELD_ALIGN (IMAGE_IMPORT_BY_NAME, Hint, 2)
+ TEST_FIELD_OFFSET(IMAGE_IMPORT_BY_NAME, Hint, 0)
+ TEST_FIELD_SIZE (IMAGE_IMPORT_BY_NAME, Name, 1)
+ TEST_FIELD_ALIGN (IMAGE_IMPORT_BY_NAME, Name, 1)
+ TEST_FIELD_OFFSET(IMAGE_IMPORT_BY_NAME, Name, 2)
}
static void test_pack_IMAGE_IMPORT_DESCRIPTOR(void)
@@ -610,69 +885,172 @@ static void test_pack_IMAGE_LINENUMBER(void)
static void test_pack_IMAGE_LOAD_CONFIG_DIRECTORY(void)
{
/* IMAGE_LOAD_CONFIG_DIRECTORY (pack 4) */
- TEST_TYPE(IMAGE_LOAD_CONFIG_DIRECTORY, 72, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, Size, 0, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, TimeDateStamp, 4, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, WORD, MajorVersion, 8, 2, 2);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, WORD, MinorVersion, 10, 2, 2);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, GlobalFlagsClear, 12, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, GlobalFlagsSet, 16, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, CriticalSectionDefaultTimeout, 20, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, DeCommitFreeBlockThreshold, 24, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, DeCommitTotalFreeThreshold, 28, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, PVOID, LockPrefixTable, 32, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, MaximumAllocationSize, 36, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, VirtualMemoryThreshold, 40, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, ProcessHeapFlags, 44, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, ProcessAffinityMask, 48, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, WORD, CSDVersion, 52, 2, 2);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, WORD, Reserved1, 54, 2, 2);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, PVOID, EditList, 56, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, SecurityCookie, 60, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, SEHandlerTable, 64, 4, 4);
- TEST_FIELD(IMAGE_LOAD_CONFIG_DIRECTORY, DWORD, SEHandlerCount, 68, 4, 4);
+ TEST_TYPE_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, 72)
+ TEST_TYPE_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, 4)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, Size, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, Size, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, Size, 0)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, MajorVersion, 2)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, MajorVersion, 2)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, MajorVersion, 8)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, MinorVersion, 2)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, MinorVersion, 2)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, MinorVersion, 10)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsClear, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsClear, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsClear, 12)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsSet, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsSet, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, GlobalFlagsSet, 16)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, CriticalSectionDefaultTimeout, 20)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitFreeBlockThreshold, 24)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitTotalFreeThreshold, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitTotalFreeThreshold, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, DeCommitTotalFreeThreshold, 28)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, LockPrefixTable, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, LockPrefixTable, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, LockPrefixTable, 32)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, MaximumAllocationSize, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, MaximumAllocationSize, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, MaximumAllocationSize, 36)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, VirtualMemoryThreshold, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, VirtualMemoryThreshold, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, VirtualMemoryThreshold, 40)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessHeapFlags, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessHeapFlags, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, ProcessHeapFlags, 44)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessAffinityMask, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, ProcessAffinityMask, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, ProcessAffinityMask, 48)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, CSDVersion, 2)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, CSDVersion, 2)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, CSDVersion, 52)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, Reserved1, 2)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, Reserved1, 2)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, Reserved1, 54)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, EditList, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, EditList, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, EditList, 56)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, SecurityCookie, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, SecurityCookie, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, SecurityCookie, 60)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerTable, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerTable, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerTable, 64)
+ TEST_FIELD_SIZE (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerCount, 4)
+ TEST_FIELD_ALIGN (IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerCount, 4)
+ TEST_FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, SEHandlerCount, 68)
}
static void test_pack_IMAGE_NT_HEADERS(void)
{
/* IMAGE_NT_HEADERS */
- TEST_TYPE(IMAGE_NT_HEADERS, 248, 4);
+ TEST_TYPE_SIZE (IMAGE_NT_HEADERS, 248)
+ TEST_TYPE_ALIGN (IMAGE_NT_HEADERS, 4)
}
static void test_pack_IMAGE_OS2_HEADER(void)
{
/* IMAGE_OS2_HEADER (pack 2) */
- TEST_TYPE(IMAGE_OS2_HEADER, 64, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_magic, 0, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, BYTE, ne_ver, 2, 1, 1);
- TEST_FIELD(IMAGE_OS2_HEADER, BYTE, ne_rev, 3, 1, 1);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_enttab, 4, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cbenttab, 6, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, LONG, ne_crc, 8, 4, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_flags, 12, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_autodata, 14, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_heap, 16, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_stack, 18, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, DWORD, ne_csip, 20, 4, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, DWORD, ne_sssp, 24, 4, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cseg, 28, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cmod, 30, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cbnrestab, 32, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_segtab, 34, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_rsrctab, 36, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_restab, 38, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_modtab, 40, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_imptab, 42, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, DWORD, ne_nrestab, 44, 4, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cmovent, 48, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_align, 50, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_cres, 52, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, BYTE, ne_exetyp, 54, 1, 1);
- TEST_FIELD(IMAGE_OS2_HEADER, BYTE, ne_flagsothers, 55, 1, 1);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_pretthunks, 56, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_psegrefbytes, 58, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_swaparea, 60, 2, 2);
- TEST_FIELD(IMAGE_OS2_HEADER, WORD, ne_expver, 62, 2, 2);
+ TEST_TYPE_SIZE (IMAGE_OS2_HEADER, 64)
+ TEST_TYPE_ALIGN (IMAGE_OS2_HEADER, 2)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_magic, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_magic, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_magic, 0)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_ver, 1)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_ver, 1)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_ver, 2)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_rev, 1)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_rev, 1)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_rev, 3)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_enttab, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_enttab, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_enttab, 4)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_cbenttab, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_cbenttab, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_cbenttab, 6)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_crc, 4)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_crc, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_crc, 8)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_flags, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_flags, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_flags, 12)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_autodata, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_autodata, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_autodata, 14)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_heap, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_heap, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_heap, 16)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_stack, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_stack, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_stack, 18)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_csip, 4)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_csip, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_csip, 20)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_sssp, 4)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_sssp, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_sssp, 24)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_cseg, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_cseg, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_cseg, 28)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_cmod, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_cmod, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_cmod, 30)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_cbnrestab, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_cbnrestab, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_cbnrestab, 32)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_segtab, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_segtab, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_segtab, 34)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_rsrctab, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_rsrctab, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_rsrctab, 36)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_restab, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_restab, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_restab, 38)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_modtab, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_modtab, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_modtab, 40)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_imptab, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_imptab, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_imptab, 42)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_nrestab, 4)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_nrestab, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_nrestab, 44)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_cmovent, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_cmovent, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_cmovent, 48)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_align, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_align, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_align, 50)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_cres, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_cres, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_cres, 52)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_exetyp, 1)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_exetyp, 1)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_exetyp, 54)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_flagsothers, 1)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_flagsothers, 1)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_flagsothers, 55)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_pretthunks, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_pretthunks, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_pretthunks, 56)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_psegrefbytes, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_psegrefbytes, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_psegrefbytes, 58)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_swaparea, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_swaparea, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_swaparea, 60)
+ TEST_FIELD_SIZE (IMAGE_OS2_HEADER, ne_expver, 2)
+ TEST_FIELD_ALIGN (IMAGE_OS2_HEADER, ne_expver, 2)
+ TEST_FIELD_OFFSET(IMAGE_OS2_HEADER, ne_expver, 62)
}
static void test_pack_IMAGE_RELOCATION(void)
@@ -683,23 +1061,45 @@ static void test_pack_IMAGE_RELOCATION(void)
static void test_pack_IMAGE_RESOURCE_DATA_ENTRY(void)
{
/* IMAGE_RESOURCE_DATA_ENTRY (pack 4) */
- TEST_TYPE(IMAGE_RESOURCE_DATA_ENTRY, 16, 4);
- TEST_FIELD(IMAGE_RESOURCE_DATA_ENTRY, DWORD, OffsetToData, 0, 4, 4);
- TEST_FIELD(IMAGE_RESOURCE_DATA_ENTRY, DWORD, Size, 4, 4, 4);
- TEST_FIELD(IMAGE_RESOURCE_DATA_ENTRY, DWORD, CodePage, 8, 4, 4);
- TEST_FIELD(IMAGE_RESOURCE_DATA_ENTRY, DWORD, Reserved, 12, 4, 4);
+ TEST_TYPE_SIZE (IMAGE_RESOURCE_DATA_ENTRY, 16)
+ TEST_TYPE_ALIGN (IMAGE_RESOURCE_DATA_ENTRY, 4)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DATA_ENTRY, OffsetToData, 4)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DATA_ENTRY, OffsetToData, 4)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DATA_ENTRY, OffsetToData, 0)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DATA_ENTRY, Size, 4)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DATA_ENTRY, Size, 4)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DATA_ENTRY, Size, 4)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DATA_ENTRY, CodePage, 4)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DATA_ENTRY, CodePage, 4)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DATA_ENTRY, CodePage, 8)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DATA_ENTRY, Reserved, 4)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DATA_ENTRY, Reserved, 4)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DATA_ENTRY, Reserved, 12)
}
static void test_pack_IMAGE_RESOURCE_DIRECTORY(void)
{
/* IMAGE_RESOURCE_DIRECTORY (pack 4) */
- TEST_TYPE(IMAGE_RESOURCE_DIRECTORY, 16, 4);
- TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, DWORD, Characteristics, 0, 4, 4);
- TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, DWORD, TimeDateStamp, 4, 4, 4);
- TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, WORD, MajorVersion, 8, 2, 2);
- TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, WORD, MinorVersion, 10, 2, 2);
- TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, WORD, NumberOfNamedEntries, 12, 2, 2);
- TEST_FIELD(IMAGE_RESOURCE_DIRECTORY, WORD, NumberOfIdEntries, 14, 2, 2);
+ TEST_TYPE_SIZE (IMAGE_RESOURCE_DIRECTORY, 16)
+ TEST_TYPE_ALIGN (IMAGE_RESOURCE_DIRECTORY, 4)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DIRECTORY, Characteristics, 4)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DIRECTORY, Characteristics, 4)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DIRECTORY, Characteristics, 0)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DIRECTORY, TimeDateStamp, 4)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DIRECTORY, MajorVersion, 2)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DIRECTORY, MajorVersion, 2)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DIRECTORY, MajorVersion, 8)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DIRECTORY, MinorVersion, 2)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DIRECTORY, MinorVersion, 2)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DIRECTORY, MinorVersion, 10)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DIRECTORY, NumberOfNamedEntries, 2)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DIRECTORY, NumberOfNamedEntries, 2)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DIRECTORY, NumberOfNamedEntries, 12)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DIRECTORY, NumberOfIdEntries, 2)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DIRECTORY, NumberOfIdEntries, 2)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DIRECTORY, NumberOfIdEntries, 14)
}
static void test_pack_IMAGE_RESOURCE_DIRECTORY_ENTRY(void)
@@ -710,42 +1110,81 @@ static void test_pack_IMAGE_RESOURCE_DIRECTORY_ENTRY(void)
static void test_pack_IMAGE_RESOURCE_DIRECTORY_STRING(void)
{
/* IMAGE_RESOURCE_DIRECTORY_STRING (pack 4) */
- TEST_TYPE(IMAGE_RESOURCE_DIRECTORY_STRING, 4, 2);
- TEST_FIELD(IMAGE_RESOURCE_DIRECTORY_STRING, WORD, Length, 0, 2, 2);
- TEST_FIELD(IMAGE_RESOURCE_DIRECTORY_STRING, CHAR[ 1 ], NameString, 2, 1, 1);
+ TEST_TYPE_SIZE (IMAGE_RESOURCE_DIRECTORY_STRING, 4)
+ TEST_TYPE_ALIGN (IMAGE_RESOURCE_DIRECTORY_STRING, 2)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DIRECTORY_STRING, Length, 2)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DIRECTORY_STRING, Length, 2)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DIRECTORY_STRING, Length, 0)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DIRECTORY_STRING, NameString, 1)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DIRECTORY_STRING, NameString, 1)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DIRECTORY_STRING, NameString, 2)
}
static void test_pack_IMAGE_RESOURCE_DIR_STRING_U(void)
{
/* IMAGE_RESOURCE_DIR_STRING_U (pack 4) */
- TEST_TYPE(IMAGE_RESOURCE_DIR_STRING_U, 4, 2);
- TEST_FIELD(IMAGE_RESOURCE_DIR_STRING_U, WORD, Length, 0, 2, 2);
- TEST_FIELD(IMAGE_RESOURCE_DIR_STRING_U, WCHAR[ 1 ], NameString, 2, 2, 2);
+ TEST_TYPE_SIZE (IMAGE_RESOURCE_DIR_STRING_U, 4)
+ TEST_TYPE_ALIGN (IMAGE_RESOURCE_DIR_STRING_U, 2)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DIR_STRING_U, Length, 2)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DIR_STRING_U, Length, 2)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DIR_STRING_U, Length, 0)
+ TEST_FIELD_SIZE (IMAGE_RESOURCE_DIR_STRING_U, NameString, 2)
+ TEST_FIELD_ALIGN (IMAGE_RESOURCE_DIR_STRING_U, NameString, 2)
+ TEST_FIELD_OFFSET(IMAGE_RESOURCE_DIR_STRING_U, NameString, 2)
}
static void test_pack_IMAGE_SECTION_HEADER(void)
{
/* IMAGE_SECTION_HEADER (pack 4) */
- TEST_FIELD(IMAGE_SECTION_HEADER, BYTE[IMAGE_SIZEOF_SHORT_NAME], Name, 0, 8, 1);
+ TEST_FIELD_SIZE (IMAGE_SECTION_HEADER, Name, 8)
+ TEST_FIELD_ALIGN (IMAGE_SECTION_HEADER, Name, 1)
+ TEST_FIELD_OFFSET(IMAGE_SECTION_HEADER, Name, 0)
}
static void test_pack_IMAGE_SEPARATE_DEBUG_HEADER(void)
{
/* IMAGE_SEPARATE_DEBUG_HEADER (pack 4) */
- TEST_TYPE(IMAGE_SEPARATE_DEBUG_HEADER, 48, 4);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, WORD, Signature, 0, 2, 2);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, WORD, Flags, 2, 2, 2);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, WORD, Machine, 4, 2, 2);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, WORD, Characteristics, 6, 2, 2);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, TimeDateStamp, 8, 4, 4);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, CheckSum, 12, 4, 4);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, ImageBase, 16, 4, 4);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, SizeOfImage, 20, 4, 4);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, NumberOfSections, 24, 4, 4);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, ExportedNamesSize, 28, 4, 4);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, DebugDirectorySize, 32, 4, 4);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD, SectionAlignment, 36, 4, 4);
- TEST_FIELD(IMAGE_SEPARATE_DEBUG_HEADER, DWORD[ 2 ], Reserved, 40, 8, 4);
+ TEST_TYPE_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, 48)
+ TEST_TYPE_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, 4)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, Signature, 2)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, Signature, 2)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, Signature, 0)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, Flags, 2)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, Flags, 2)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, Flags, 2)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, Machine, 2)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, Machine, 2)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, Machine, 4)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, Characteristics, 2)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, Characteristics, 2)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, Characteristics, 6)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, TimeDateStamp, 4)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, TimeDateStamp, 4)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, TimeDateStamp, 8)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, CheckSum, 4)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, CheckSum, 4)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, CheckSum, 12)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, ImageBase, 4)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, ImageBase, 4)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, ImageBase, 16)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, SizeOfImage, 4)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, SizeOfImage, 4)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, SizeOfImage, 20)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, NumberOfSections, 4)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, NumberOfSections, 4)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, NumberOfSections, 24)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, ExportedNamesSize, 4)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, ExportedNamesSize, 4)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, ExportedNamesSize, 28)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, DebugDirectorySize, 4)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, DebugDirectorySize, 4)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, DebugDirectorySize, 32)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, SectionAlignment, 4)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, SectionAlignment, 4)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, SectionAlignment, 36)
+ TEST_FIELD_SIZE (IMAGE_SEPARATE_DEBUG_HEADER, Reserved, 8)
+ TEST_FIELD_ALIGN (IMAGE_SEPARATE_DEBUG_HEADER, Reserved, 4)
+ TEST_FIELD_OFFSET(IMAGE_SEPARATE_DEBUG_HEADER, Reserved, 40)
}
static void test_pack_IMAGE_SYMBOL(void)
@@ -761,83 +1200,201 @@ static void test_pack_IMAGE_THUNK_DATA(void)
static void test_pack_IMAGE_TLS_DIRECTORY(void)
{
/* IMAGE_TLS_DIRECTORY */
- TEST_TYPE(IMAGE_TLS_DIRECTORY, 24, 4);
+ TEST_TYPE_SIZE (IMAGE_TLS_DIRECTORY, 24)
+ TEST_TYPE_ALIGN (IMAGE_TLS_DIRECTORY, 4)
}
static void test_pack_IMAGE_VXD_HEADER(void)
{
/* IMAGE_VXD_HEADER (pack 2) */
- TEST_TYPE(IMAGE_VXD_HEADER, 196, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, WORD, e32_magic, 0, 2, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, BYTE, e32_border, 2, 1, 1);
- TEST_FIELD(IMAGE_VXD_HEADER, BYTE, e32_worder, 3, 1, 1);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_level, 4, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, WORD, e32_cpu, 8, 2, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, WORD, e32_os, 10, 2, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_ver, 12, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_mflags, 16, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_mpages, 20, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_startobj, 24, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_eip, 28, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_stackobj, 32, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_esp, 36, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_pagesize, 40, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_lastpagesize, 44, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_fixupsize, 48, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_fixupsum, 52, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_ldrsize, 56, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_ldrsum, 60, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_objtab, 64, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_objcnt, 68, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_objmap, 72, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_itermap, 76, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_rsrctab, 80, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_rsrccnt, 84, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_restab, 88, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_enttab, 92, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_dirtab, 96, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_dircnt, 100, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_fpagetab, 104, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_frectab, 108, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_impmod, 112, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_impmodcnt, 116, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_impproc, 120, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_pagesum, 124, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_datapage, 128, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_preload, 132, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_nrestab, 136, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_cbnrestab, 140, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_nressum, 144, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_autodata, 148, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_debuginfo, 152, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_debuglen, 156, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_instpreload, 160, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_instdemand, 164, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_heapsize, 168, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, BYTE[12], e32_res3, 172, 12, 1);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_winresoff, 184, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, DWORD, e32_winreslen, 188, 4, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, WORD, e32_devid, 192, 2, 2);
- TEST_FIELD(IMAGE_VXD_HEADER, WORD, e32_ddkver, 194, 2, 2);
+ TEST_TYPE_SIZE (IMAGE_VXD_HEADER, 196)
+ TEST_TYPE_ALIGN (IMAGE_VXD_HEADER, 2)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_magic, 2)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_magic, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_magic, 0)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_border, 1)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_border, 1)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_border, 2)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_worder, 1)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_worder, 1)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_worder, 3)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_level, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_level, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_level, 4)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_cpu, 2)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_cpu, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_cpu, 8)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_os, 2)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_os, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_os, 10)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_ver, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_ver, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_ver, 12)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_mflags, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_mflags, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_mflags, 16)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_mpages, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_mpages, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_mpages, 20)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_startobj, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_startobj, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_startobj, 24)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_eip, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_eip, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_eip, 28)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_stackobj, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_stackobj, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_stackobj, 32)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_esp, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_esp, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_esp, 36)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_pagesize, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_pagesize, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_pagesize, 40)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_lastpagesize, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_lastpagesize, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_lastpagesize, 44)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_fixupsize, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_fixupsize, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_fixupsize, 48)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_fixupsum, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_fixupsum, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_fixupsum, 52)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_ldrsize, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_ldrsize, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_ldrsize, 56)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_ldrsum, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_ldrsum, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_ldrsum, 60)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_objtab, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_objtab, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_objtab, 64)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_objcnt, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_objcnt, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_objcnt, 68)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_objmap, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_objmap, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_objmap, 72)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_itermap, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_itermap, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_itermap, 76)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_rsrctab, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_rsrctab, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_rsrctab, 80)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_rsrccnt, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_rsrccnt, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_rsrccnt, 84)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_restab, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_restab, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_restab, 88)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_enttab, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_enttab, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_enttab, 92)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_dirtab, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_dirtab, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_dirtab, 96)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_dircnt, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_dircnt, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_dircnt, 100)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_fpagetab, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_fpagetab, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_fpagetab, 104)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_frectab, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_frectab, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_frectab, 108)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_impmod, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_impmod, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_impmod, 112)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_impmodcnt, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_impmodcnt, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_impmodcnt, 116)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_impproc, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_impproc, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_impproc, 120)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_pagesum, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_pagesum, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_pagesum, 124)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_datapage, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_datapage, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_datapage, 128)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_preload, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_preload, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_preload, 132)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_nrestab, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_nrestab, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_nrestab, 136)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_cbnrestab, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_cbnrestab, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_cbnrestab, 140)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_nressum, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_nressum, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_nressum, 144)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_autodata, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_autodata, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_autodata, 148)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_debuginfo, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_debuginfo, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_debuginfo, 152)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_debuglen, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_debuglen, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_debuglen, 156)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_instpreload, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_instpreload, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_instpreload, 160)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_instdemand, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_instdemand, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_instdemand, 164)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_heapsize, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_heapsize, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_heapsize, 168)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_res3, 12)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_res3, 1)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_res3, 172)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_winresoff, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_winresoff, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_winresoff, 184)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_winreslen, 4)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_winreslen, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_winreslen, 188)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_devid, 2)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_devid, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_devid, 192)
+ TEST_FIELD_SIZE (IMAGE_VXD_HEADER, e32_ddkver, 2)
+ TEST_FIELD_ALIGN (IMAGE_VXD_HEADER, e32_ddkver, 2)
+ TEST_FIELD_OFFSET(IMAGE_VXD_HEADER, e32_ddkver, 194)
}
static void test_pack_IO_COUNTERS(void)
{
/* IO_COUNTERS (pack 8) */
- TEST_TYPE(IO_COUNTERS, 48, 8);
- TEST_FIELD(IO_COUNTERS, ULONGLONG, ReadOperationCount, 0, 8, 8);
- TEST_FIELD(IO_COUNTERS, ULONGLONG, WriteOperationCount, 8, 8, 8);
- TEST_FIELD(IO_COUNTERS, ULONGLONG, OtherOperationCount, 16, 8, 8);
- TEST_FIELD(IO_COUNTERS, ULONGLONG, ReadTransferCount, 24, 8, 8);
- TEST_FIELD(IO_COUNTERS, ULONGLONG, WriteTransferCount, 32, 8, 8);
- TEST_FIELD(IO_COUNTERS, ULONGLONG, OtherTransferCount, 40, 8, 8);
+ TEST_TYPE_SIZE (IO_COUNTERS, 48)
+ TEST_TYPE_ALIGN (IO_COUNTERS, 8)
+ TEST_FIELD_SIZE (IO_COUNTERS, ReadOperationCount, 8)
+ TEST_FIELD_ALIGN (IO_COUNTERS, ReadOperationCount, 8)
+ TEST_FIELD_OFFSET(IO_COUNTERS, ReadOperationCount, 0)
+ TEST_FIELD_SIZE (IO_COUNTERS, WriteOperationCount, 8)
+ TEST_FIELD_ALIGN (IO_COUNTERS, WriteOperationCount, 8)
+ TEST_FIELD_OFFSET(IO_COUNTERS, WriteOperationCount, 8)
+ TEST_FIELD_SIZE (IO_COUNTERS, OtherOperationCount, 8)
+ TEST_FIELD_ALIGN (IO_COUNTERS, OtherOperationCount, 8)
+ TEST_FIELD_OFFSET(IO_COUNTERS, OtherOperationCount, 16)
+ TEST_FIELD_SIZE (IO_COUNTERS, ReadTransferCount, 8)
+ TEST_FIELD_ALIGN (IO_COUNTERS, ReadTransferCount, 8)
+ TEST_FIELD_OFFSET(IO_COUNTERS, ReadTransferCount, 24)
+ TEST_FIELD_SIZE (IO_COUNTERS, WriteTransferCount, 8)
+ TEST_FIELD_ALIGN (IO_COUNTERS, WriteTransferCount, 8)
+ TEST_FIELD_OFFSET(IO_COUNTERS, WriteTransferCount, 32)
+ TEST_FIELD_SIZE (IO_COUNTERS, OtherTransferCount, 8)
+ TEST_FIELD_ALIGN (IO_COUNTERS, OtherTransferCount, 8)
+ TEST_FIELD_OFFSET(IO_COUNTERS, OtherTransferCount, 40)
}
static void test_pack_LANGID(void)
{
/* LANGID */
- TEST_TYPE(LANGID, 2, 2);
- TEST_TYPE_UNSIGNED(LANGID);
+ TEST_TYPE_SIZE (LANGID, 2)
+ TEST_TYPE_ALIGN (LANGID, 2)
+ TEST_TYPE_UNSIGNED(LANGID)
}
static void test_pack_LARGE_INTEGER(void)
@@ -848,955 +1405,1361 @@ static void test_pack_LARGE_INTEGER(void)
static void test_pack_LCID(void)
{
/* LCID */
- TEST_TYPE(LCID, 4, 4);
- TEST_TYPE_UNSIGNED(LCID);
+ TEST_TYPE_SIZE (LCID, 4)
+ TEST_TYPE_ALIGN (LCID, 4)
+ TEST_TYPE_UNSIGNED(LCID)
}
static void test_pack_LIST_ENTRY(void)
{
/* LIST_ENTRY (pack 4) */
- TEST_TYPE(LIST_ENTRY, 8, 4);
- TEST_FIELD(LIST_ENTRY, struct _LIST_ENTRY *, Flink, 0, 4, 4);
- TEST_FIELD(LIST_ENTRY, struct _LIST_ENTRY *, Blink, 4, 4, 4);
+ TEST_TYPE_SIZE (LIST_ENTRY, 8)
+ TEST_TYPE_ALIGN (LIST_ENTRY, 4)
+ TEST_FIELD_SIZE (LIST_ENTRY, Flink, 4)
+ TEST_FIELD_ALIGN (LIST_ENTRY, Flink, 4)
+ TEST_FIELD_OFFSET(LIST_ENTRY, Flink, 0)
+ TEST_FIELD_SIZE (LIST_ENTRY, Blink, 4)
+ TEST_FIELD_ALIGN (LIST_ENTRY, Blink, 4)
+ TEST_FIELD_OFFSET(LIST_ENTRY, Blink, 4)
}
static void test_pack_LONG(void)
{
/* LONG */
- TEST_TYPE(LONG, 4, 4);
- TEST_TYPE_SIGNED(LONG);
+ TEST_TYPE_SIZE (LONG, 4)
+ TEST_TYPE_ALIGN (LONG, 4)
+ TEST_TYPE_SIGNED(LONG)
}
static void test_pack_LONGLONG(void)
{
/* LONGLONG */
- TEST_TYPE(LONGLONG, 8, 8);
- TEST_TYPE_SIGNED(LONGLONG);
+ TEST_TYPE_SIZE (LONGLONG, 8)
+ TEST_TYPE_ALIGN (LONGLONG, 8)
+ TEST_TYPE_SIGNED(LONGLONG)
}
static void test_pack_LUID(void)
{
/* LUID (pack 4) */
- TEST_TYPE(LUID, 8, 4);
- TEST_FIELD(LUID, DWORD, LowPart, 0, 4, 4);
- TEST_FIELD(LUID, LONG, HighPart, 4, 4, 4);
+ TEST_TYPE_SIZE (LUID, 8)
+ TEST_TYPE_ALIGN (LUID, 4)
+ TEST_FIELD_SIZE (LUID, LowPart, 4)
+ TEST_FIELD_ALIGN (LUID, LowPart, 4)
+ TEST_FIELD_OFFSET(LUID, LowPart, 0)
+ TEST_FIELD_SIZE (LUID, HighPart, 4)
+ TEST_FIELD_ALIGN (LUID, HighPart, 4)
+ TEST_FIELD_OFFSET(LUID, HighPart, 4)
}
static void test_pack_LUID_AND_ATTRIBUTES(void)
{
/* LUID_AND_ATTRIBUTES (pack 4) */
- TEST_TYPE(LUID_AND_ATTRIBUTES, 12, 4);
- TEST_FIELD(LUID_AND_ATTRIBUTES, LUID, Luid, 0, 8, 4);
- TEST_FIELD(LUID_AND_ATTRIBUTES, DWORD, Attributes, 8, 4, 4);
+ TEST_TYPE_SIZE (LUID_AND_ATTRIBUTES, 12)
+ TEST_TYPE_ALIGN (LUID_AND_ATTRIBUTES, 4)
+ TEST_FIELD_SIZE (LUID_AND_ATTRIBUTES, Luid, 8)
+ TEST_FIELD_ALIGN (LUID_AND_ATTRIBUTES, Luid, 4)
+ TEST_FIELD_OFFSET(LUID_AND_ATTRIBUTES, Luid, 0)
+ TEST_FIELD_SIZE (LUID_AND_ATTRIBUTES, Attributes, 4)
+ TEST_FIELD_ALIGN (LUID_AND_ATTRIBUTES, Attributes, 4)
+ TEST_FIELD_OFFSET(LUID_AND_ATTRIBUTES, Attributes, 8)
}
static void test_pack_MEMORY_BASIC_INFORMATION(void)
{
/* MEMORY_BASIC_INFORMATION (pack 4) */
- TEST_TYPE(MEMORY_BASIC_INFORMATION, 28, 4);
- TEST_FIELD(MEMORY_BASIC_INFORMATION, LPVOID, BaseAddress, 0, 4, 4);
- TEST_FIELD(MEMORY_BASIC_INFORMATION, LPVOID, AllocationBase, 4, 4, 4);
- TEST_FIELD(MEMORY_BASIC_INFORMATION, DWORD, AllocationProtect, 8, 4, 4);
- TEST_FIELD(MEMORY_BASIC_INFORMATION, SIZE_T, RegionSize, 12, 4, 4);
- TEST_FIELD(MEMORY_BASIC_INFORMATION, DWORD, State, 16, 4, 4);
- TEST_FIELD(MEMORY_BASIC_INFORMATION, DWORD, Protect, 20, 4, 4);
- TEST_FIELD(MEMORY_BASIC_INFORMATION, DWORD, Type, 24, 4, 4);
+ TEST_TYPE_SIZE (MEMORY_BASIC_INFORMATION, 28)
+ TEST_TYPE_ALIGN (MEMORY_BASIC_INFORMATION, 4)
+ TEST_FIELD_SIZE (MEMORY_BASIC_INFORMATION, BaseAddress, 4)
+ TEST_FIELD_ALIGN (MEMORY_BASIC_INFORMATION, BaseAddress, 4)
+ TEST_FIELD_OFFSET(MEMORY_BASIC_INFORMATION, BaseAddress, 0)
+ TEST_FIELD_SIZE (MEMORY_BASIC_INFORMATION, AllocationBase, 4)
+ TEST_FIELD_ALIGN (MEMORY_BASIC_INFORMATION, AllocationBase, 4)
+ TEST_FIELD_OFFSET(MEMORY_BASIC_INFORMATION, AllocationBase, 4)
+ TEST_FIELD_SIZE (MEMORY_BASIC_INFORMATION, AllocationProtect, 4)
+ TEST_FIELD_ALIGN (MEMORY_BASIC_INFORMATION, AllocationProtect, 4)
+ TEST_FIELD_OFFSET(MEMORY_BASIC_INFORMATION, AllocationProtect, 8)
+ TEST_FIELD_SIZE (MEMORY_BASIC_INFORMATION, RegionSize, 4)
+ TEST_FIELD_ALIGN (MEMORY_BASIC_INFORMATION, RegionSize, 4)
+ TEST_FIELD_OFFSET(MEMORY_BASIC_INFORMATION, RegionSize, 12)
+ TEST_FIELD_SIZE (MEMORY_BASIC_INFORMATION, State, 4)
+ TEST_FIELD_ALIGN (MEMORY_BASIC_INFORMATION, State, 4)
+ TEST_FIELD_OFFSET(MEMORY_BASIC_INFORMATION, State, 16)
+ TEST_FIELD_SIZE (MEMORY_BASIC_INFORMATION, Protect, 4)
+ TEST_FIELD_ALIGN (MEMORY_BASIC_INFORMATION, Protect, 4)
+ TEST_FIELD_OFFSET(MEMORY_BASIC_INFORMATION, Protect, 20)
+ TEST_FIELD_SIZE (MEMORY_BASIC_INFORMATION, Type, 4)
+ TEST_FIELD_ALIGN (MEMORY_BASIC_INFORMATION, Type, 4)
+ TEST_FIELD_OFFSET(MEMORY_BASIC_INFORMATION, Type, 24)
}
static void test_pack_MESSAGE_RESOURCE_BLOCK(void)
{
/* MESSAGE_RESOURCE_BLOCK (pack 4) */
- TEST_TYPE(MESSAGE_RESOURCE_BLOCK, 12, 4);
- TEST_FIELD(MESSAGE_RESOURCE_BLOCK, DWORD, LowId, 0, 4, 4);
- TEST_FIELD(MESSAGE_RESOURCE_BLOCK, DWORD, HighId, 4, 4, 4);
- TEST_FIELD(MESSAGE_RESOURCE_BLOCK, DWORD, OffsetToEntries, 8, 4, 4);
+ TEST_TYPE_SIZE (MESSAGE_RESOURCE_BLOCK, 12)
+ TEST_TYPE_ALIGN (MESSAGE_RESOURCE_BLOCK, 4)
+ TEST_FIELD_SIZE (MESSAGE_RESOURCE_BLOCK, LowId, 4)
+ TEST_FIELD_ALIGN (MESSAGE_RESOURCE_BLOCK, LowId, 4)
+ TEST_FIELD_OFFSET(MESSAGE_RESOURCE_BLOCK, LowId, 0)
+ TEST_FIELD_SIZE (MESSAGE_RESOURCE_BLOCK, HighId, 4)
+ TEST_FIELD_ALIGN (MESSAGE_RESOURCE_BLOCK, HighId, 4)
+ TEST_FIELD_OFFSET(MESSAGE_RESOURCE_BLOCK, HighId, 4)
+ TEST_FIELD_SIZE (MESSAGE_RESOURCE_BLOCK, OffsetToEntries, 4)
+ TEST_FIELD_ALIGN (MESSAGE_RESOURCE_BLOCK, OffsetToEntries, 4)
+ TEST_FIELD_OFFSET(MESSAGE_RESOURCE_BLOCK, OffsetToEntries, 8)
}
static void test_pack_MESSAGE_RESOURCE_DATA(void)
{
/* MESSAGE_RESOURCE_DATA (pack 4) */
- TEST_TYPE(MESSAGE_RESOURCE_DATA, 16, 4);
- TEST_FIELD(MESSAGE_RESOURCE_DATA, DWORD, NumberOfBlocks, 0, 4, 4);
- TEST_FIELD(MESSAGE_RESOURCE_DATA, MESSAGE_RESOURCE_BLOCK[ 1 ], Blocks, 4, 12, 4);
+ TEST_TYPE_SIZE (MESSAGE_RESOURCE_DATA, 16)
+ TEST_TYPE_ALIGN (MESSAGE_RESOURCE_DATA, 4)
+ TEST_FIELD_SIZE (MESSAGE_RESOURCE_DATA, NumberOfBlocks, 4)
+ TEST_FIELD_ALIGN (MESSAGE_RESOURCE_DATA, NumberOfBlocks, 4)
+ TEST_FIELD_OFFSET(MESSAGE_RESOURCE_DATA, NumberOfBlocks, 0)
+ TEST_FIELD_SIZE (MESSAGE_RESOURCE_DATA, Blocks, 12)
+ TEST_FIELD_ALIGN (MESSAGE_RESOURCE_DATA, Blocks, 4)
+ TEST_FIELD_OFFSET(MESSAGE_RESOURCE_DATA, Blocks, 4)
}
static void test_pack_MESSAGE_RESOURCE_ENTRY(void)
{
/* MESSAGE_RESOURCE_ENTRY (pack 4) */
- TEST_TYPE(MESSAGE_RESOURCE_ENTRY, 6, 2);
- TEST_FIELD(MESSAGE_RESOURCE_ENTRY, WORD, Length, 0, 2, 2);
- TEST_FIELD(MESSAGE_RESOURCE_ENTRY, WORD, Flags, 2, 2, 2);
- TEST_FIELD(MESSAGE_RESOURCE_ENTRY, BYTE[1], Text, 4, 1, 1);
+ TEST_TYPE_SIZE (MESSAGE_RESOURCE_ENTRY, 6)
+ TEST_TYPE_ALIGN (MESSAGE_RESOURCE_ENTRY, 2)
+ TEST_FIELD_SIZE (MESSAGE_RESOURCE_ENTRY, Length, 2)
+ TEST_FIELD_ALIGN (MESSAGE_RESOURCE_ENTRY, Length, 2)
+ TEST_FIELD_OFFSET(MESSAGE_RESOURCE_ENTRY, Length, 0)
+ TEST_FIELD_SIZE (MESSAGE_RESOURCE_ENTRY, Flags, 2)
+ TEST_FIELD_ALIGN (MESSAGE_RESOURCE_ENTRY, Flags, 2)
+ TEST_FIELD_OFFSET(MESSAGE_RESOURCE_ENTRY, Flags, 2)
+ TEST_FIELD_SIZE (MESSAGE_RESOURCE_ENTRY, Text, 1)
+ TEST_FIELD_ALIGN (MESSAGE_RESOURCE_ENTRY, Text, 1)
+ TEST_FIELD_OFFSET(MESSAGE_RESOURCE_ENTRY, Text, 4)
}
static void test_pack_NT_TIB(void)
{
/* NT_TIB (pack 4) */
- TEST_FIELD(NT_TIB, struct _EXCEPTION_REGISTRATION_RECORD *, ExceptionList, 0, 4, 4);
- TEST_FIELD(NT_TIB, PVOID, StackBase, 4, 4, 4);
- TEST_FIELD(NT_TIB, PVOID, StackLimit, 8, 4, 4);
- TEST_FIELD(NT_TIB, PVOID, SubSystemTib, 12, 4, 4);
+ TEST_FIELD_SIZE (NT_TIB, ExceptionList, 4)
+ TEST_FIELD_ALIGN (NT_TIB, ExceptionList, 4)
+ TEST_FIELD_OFFSET(NT_TIB, ExceptionList, 0)
+ TEST_FIELD_SIZE (NT_TIB, StackBase, 4)
+ TEST_FIELD_ALIGN (NT_TIB, StackBase, 4)
+ TEST_FIELD_OFFSET(NT_TIB, StackBase, 4)
+ TEST_FIELD_SIZE (NT_TIB, StackLimit, 4)
+ TEST_FIELD_ALIGN (NT_TIB, StackLimit, 4)
+ TEST_FIELD_OFFSET(NT_TIB, StackLimit, 8)
+ TEST_FIELD_SIZE (NT_TIB, SubSystemTib, 4)
+ TEST_FIELD_ALIGN (NT_TIB, SubSystemTib, 4)
+ TEST_FIELD_OFFSET(NT_TIB, SubSystemTib, 12)
}
static void test_pack_OBJECT_TYPE_LIST(void)
{
/* OBJECT_TYPE_LIST (pack 4) */
- TEST_TYPE(OBJECT_TYPE_LIST, 8, 4);
- TEST_FIELD(OBJECT_TYPE_LIST, WORD, Level, 0, 2, 2);
- TEST_FIELD(OBJECT_TYPE_LIST, WORD, Sbz, 2, 2, 2);
- TEST_FIELD(OBJECT_TYPE_LIST, GUID *, ObjectType, 4, 4, 4);
+ TEST_TYPE_SIZE (OBJECT_TYPE_LIST, 8)
+ TEST_TYPE_ALIGN (OBJECT_TYPE_LIST, 4)
+ TEST_FIELD_SIZE (OBJECT_TYPE_LIST, Level, 2)
+ TEST_FIELD_ALIGN (OBJECT_TYPE_LIST, Level, 2)
+ TEST_FIELD_OFFSET(OBJECT_TYPE_LIST, Level, 0)
+ TEST_FIELD_SIZE (OBJECT_TYPE_LIST, Sbz, 2)
+ TEST_FIELD_ALIGN (OBJECT_TYPE_LIST, Sbz, 2)
+ TEST_FIELD_OFFSET(OBJECT_TYPE_LIST, Sbz, 2)
+ TEST_FIELD_SIZE (OBJECT_TYPE_LIST, ObjectType, 4)
+ TEST_FIELD_ALIGN (OBJECT_TYPE_LIST, ObjectType, 4)
+ TEST_FIELD_OFFSET(OBJECT_TYPE_LIST, ObjectType, 4)
}
static void test_pack_PACCESS_ALLOWED_ACE(void)
{
/* PACCESS_ALLOWED_ACE */
- TEST_TYPE(PACCESS_ALLOWED_ACE, 4, 4);
- TEST_TYPE_POINTER(PACCESS_ALLOWED_ACE, 12, 4);
+ TEST_TYPE_SIZE (PACCESS_ALLOWED_ACE, 4)
+ TEST_TYPE_ALIGN (PACCESS_ALLOWED_ACE, 4)
+ TEST_TARGET_SIZE (PACCESS_ALLOWED_ACE, 12)
+ TEST_TARGET_ALIGN(PACCESS_ALLOWED_ACE, 4)
}
static void test_pack_PACCESS_DENIED_ACE(void)
{
/* PACCESS_DENIED_ACE */
- TEST_TYPE(PACCESS_DENIED_ACE, 4, 4);
- TEST_TYPE_POINTER(PACCESS_DENIED_ACE, 12, 4);
+ TEST_TYPE_SIZE (PACCESS_DENIED_ACE, 4)
+ TEST_TYPE_ALIGN (PACCESS_DENIED_ACE, 4)
+ TEST_TARGET_SIZE (PACCESS_DENIED_ACE, 12)
+ TEST_TARGET_ALIGN(PACCESS_DENIED_ACE, 4)
}
static void test_pack_PACCESS_TOKEN(void)
{
/* PACCESS_TOKEN */
- TEST_TYPE(PACCESS_TOKEN, 4, 4);
+ TEST_TYPE_SIZE (PACCESS_TOKEN, 4)
+ TEST_TYPE_ALIGN (PACCESS_TOKEN, 4)
}
static void test_pack_PACE_HEADER(void)
{
/* PACE_HEADER */
- TEST_TYPE(PACE_HEADER, 4, 4);
- TEST_TYPE_POINTER(PACE_HEADER, 4, 2);
+ TEST_TYPE_SIZE (PACE_HEADER, 4)
+ TEST_TYPE_ALIGN (PACE_HEADER, 4)
+ TEST_TARGET_SIZE (PACE_HEADER, 4)
+ TEST_TARGET_ALIGN(PACE_HEADER, 2)
}
static void test_pack_PACL(void)
{
/* PACL */
- TEST_TYPE(PACL, 4, 4);
- TEST_TYPE_POINTER(PACL, 8, 2);
+ TEST_TYPE_SIZE (PACL, 4)
+ TEST_TYPE_ALIGN (PACL, 4)
+ TEST_TARGET_SIZE (PACL, 8)
+ TEST_TARGET_ALIGN(PACL, 2)
}
static void test_pack_PACL_REVISION_INFORMATION(void)
{
/* PACL_REVISION_INFORMATION */
- TEST_TYPE(PACL_REVISION_INFORMATION, 4, 4);
- TEST_TYPE_POINTER(PACL_REVISION_INFORMATION, 4, 4);
+ TEST_TYPE_SIZE (PACL_REVISION_INFORMATION, 4)
+ TEST_TYPE_ALIGN (PACL_REVISION_INFORMATION, 4)
+ TEST_TARGET_SIZE (PACL_REVISION_INFORMATION, 4)
+ TEST_TARGET_ALIGN(PACL_REVISION_INFORMATION, 4)
}
static void test_pack_PACL_SIZE_INFORMATION(void)
{
/* PACL_SIZE_INFORMATION */
- TEST_TYPE(PACL_SIZE_INFORMATION, 4, 4);
- TEST_TYPE_POINTER(PACL_SIZE_INFORMATION, 12, 4);
+ TEST_TYPE_SIZE (PACL_SIZE_INFORMATION, 4)
+ TEST_TYPE_ALIGN (PACL_SIZE_INFORMATION, 4)
+ TEST_TARGET_SIZE (PACL_SIZE_INFORMATION, 12)
+ TEST_TARGET_ALIGN(PACL_SIZE_INFORMATION, 4)
}
static void test_pack_PCCH(void)
{
/* PCCH */
- TEST_TYPE(PCCH, 4, 4);
- TEST_TYPE_POINTER(PCCH, 1, 1);
+ TEST_TYPE_SIZE (PCCH, 4)
+ TEST_TYPE_ALIGN (PCCH, 4)
+ TEST_TARGET_SIZE (PCCH, 1)
+ TEST_TARGET_ALIGN(PCCH, 1)
}
static void test_pack_PCH(void)
{
/* PCH */
- TEST_TYPE(PCH, 4, 4);
- TEST_TYPE_POINTER(PCH, 1, 1);
+ TEST_TYPE_SIZE (PCH, 4)
+ TEST_TYPE_ALIGN (PCH, 4)
+ TEST_TARGET_SIZE (PCH, 1)
+ TEST_TARGET_ALIGN(PCH, 1)
}
static void test_pack_PCSTR(void)
{
/* PCSTR */
- TEST_TYPE(PCSTR, 4, 4);
- TEST_TYPE_POINTER(PCSTR, 1, 1);
+ TEST_TYPE_SIZE (PCSTR, 4)
+ TEST_TYPE_ALIGN (PCSTR, 4)
+ TEST_TARGET_SIZE (PCSTR, 1)
+ TEST_TARGET_ALIGN(PCSTR, 1)
}
static void test_pack_PCTSTR(void)
{
/* PCTSTR */
- TEST_TYPE(PCTSTR, 4, 4);
+ TEST_TYPE_SIZE (PCTSTR, 4)
+ TEST_TYPE_ALIGN (PCTSTR, 4)
}
static void test_pack_PCWCH(void)
{
/* PCWCH */
- TEST_TYPE(PCWCH, 4, 4);
- TEST_TYPE_POINTER(PCWCH, 2, 2);
+ TEST_TYPE_SIZE (PCWCH, 4)
+ TEST_TYPE_ALIGN (PCWCH, 4)
+ TEST_TARGET_SIZE (PCWCH, 2)
+ TEST_TARGET_ALIGN(PCWCH, 2)
}
static void test_pack_PCWSTR(void)
{
/* PCWSTR */
- TEST_TYPE(PCWSTR, 4, 4);
- TEST_TYPE_POINTER(PCWSTR, 2, 2);
+ TEST_TYPE_SIZE (PCWSTR, 4)
+ TEST_TYPE_ALIGN (PCWSTR, 4)
+ TEST_TARGET_SIZE (PCWSTR, 2)
+ TEST_TARGET_ALIGN(PCWSTR, 2)
}
static void test_pack_PEXCEPTION_POINTERS(void)
{
/* PEXCEPTION_POINTERS */
- TEST_TYPE(PEXCEPTION_POINTERS, 4, 4);
- TEST_TYPE_POINTER(PEXCEPTION_POINTERS, 8, 4);
+ TEST_TYPE_SIZE (PEXCEPTION_POINTERS, 4)
+ TEST_TYPE_ALIGN (PEXCEPTION_POINTERS, 4)
+ TEST_TARGET_SIZE (PEXCEPTION_POINTERS, 8)
+ TEST_TARGET_ALIGN(PEXCEPTION_POINTERS, 4)
}
static void test_pack_PEXCEPTION_RECORD(void)
{
/* PEXCEPTION_RECORD */
- TEST_TYPE(PEXCEPTION_RECORD, 4, 4);
- TEST_TYPE_POINTER(PEXCEPTION_RECORD, 80, 4);
+ TEST_TYPE_SIZE (PEXCEPTION_RECORD, 4)
+ TEST_TYPE_ALIGN (PEXCEPTION_RECORD, 4)
+ TEST_TARGET_SIZE (PEXCEPTION_RECORD, 80)
+ TEST_TARGET_ALIGN(PEXCEPTION_RECORD, 4)
}
static void test_pack_PFLOATING_SAVE_AREA(void)
{
/* PFLOATING_SAVE_AREA */
- TEST_TYPE(PFLOATING_SAVE_AREA, 4, 4);
- TEST_TYPE_POINTER(PFLOATING_SAVE_AREA, 112, 4);
+ TEST_TYPE_SIZE (PFLOATING_SAVE_AREA, 4)
+ TEST_TYPE_ALIGN (PFLOATING_SAVE_AREA, 4)
+ TEST_TARGET_SIZE (PFLOATING_SAVE_AREA, 112)
+ TEST_TARGET_ALIGN(PFLOATING_SAVE_AREA, 4)
}
static void test_pack_PFPO_DATA(void)
{
/* PFPO_DATA */
- TEST_TYPE(PFPO_DATA, 4, 4);
- TEST_TYPE_POINTER(PFPO_DATA, 16, 4);
+ TEST_TYPE_SIZE (PFPO_DATA, 4)
+ TEST_TYPE_ALIGN (PFPO_DATA, 4)
+ TEST_TARGET_SIZE (PFPO_DATA, 16)
+ TEST_TARGET_ALIGN(PFPO_DATA, 4)
}
static void test_pack_PGENERIC_MAPPING(void)
{
/* PGENERIC_MAPPING */
- TEST_TYPE(PGENERIC_MAPPING, 4, 4);
- TEST_TYPE_POINTER(PGENERIC_MAPPING, 16, 4);
+ TEST_TYPE_SIZE (PGENERIC_MAPPING, 4)
+ TEST_TYPE_ALIGN (PGENERIC_MAPPING, 4)
+ TEST_TARGET_SIZE (PGENERIC_MAPPING, 16)
+ TEST_TARGET_ALIGN(PGENERIC_MAPPING, 4)
}
static void test_pack_PHANDLE(void)
{
/* PHANDLE */
- TEST_TYPE(PHANDLE, 4, 4);
- TEST_TYPE_POINTER(PHANDLE, 4, 4);
+ TEST_TYPE_SIZE (PHANDLE, 4)
+ TEST_TYPE_ALIGN (PHANDLE, 4)
+ TEST_TARGET_SIZE (PHANDLE, 4)
+ TEST_TARGET_ALIGN(PHANDLE, 4)
}
static void test_pack_PIMAGE_ARCHIVE_MEMBER_HEADER(void)
{
/* PIMAGE_ARCHIVE_MEMBER_HEADER */
- TEST_TYPE(PIMAGE_ARCHIVE_MEMBER_HEADER, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_ARCHIVE_MEMBER_HEADER, 60, 1);
+ TEST_TYPE_SIZE (PIMAGE_ARCHIVE_MEMBER_HEADER, 4)
+ TEST_TYPE_ALIGN (PIMAGE_ARCHIVE_MEMBER_HEADER, 4)
+ TEST_TARGET_SIZE (PIMAGE_ARCHIVE_MEMBER_HEADER, 60)
+ TEST_TARGET_ALIGN(PIMAGE_ARCHIVE_MEMBER_HEADER, 1)
}
static void test_pack_PIMAGE_AUX_SYMBOL(void)
{
/* PIMAGE_AUX_SYMBOL */
- TEST_TYPE(PIMAGE_AUX_SYMBOL, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_AUX_SYMBOL, 4)
+ TEST_TYPE_ALIGN (PIMAGE_AUX_SYMBOL, 4)
}
static void test_pack_PIMAGE_BASE_RELOCATION(void)
{
/* PIMAGE_BASE_RELOCATION */
- TEST_TYPE(PIMAGE_BASE_RELOCATION, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_BASE_RELOCATION, 8, 4);
+ TEST_TYPE_SIZE (PIMAGE_BASE_RELOCATION, 4)
+ TEST_TYPE_ALIGN (PIMAGE_BASE_RELOCATION, 4)
+ TEST_TARGET_SIZE (PIMAGE_BASE_RELOCATION, 8)
+ TEST_TARGET_ALIGN(PIMAGE_BASE_RELOCATION, 4)
}
static void test_pack_PIMAGE_BOUND_FORWARDER_REF(void)
{
/* PIMAGE_BOUND_FORWARDER_REF */
- TEST_TYPE(PIMAGE_BOUND_FORWARDER_REF, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_BOUND_FORWARDER_REF, 8, 4);
+ TEST_TYPE_SIZE (PIMAGE_BOUND_FORWARDER_REF, 4)
+ TEST_TYPE_ALIGN (PIMAGE_BOUND_FORWARDER_REF, 4)
+ TEST_TARGET_SIZE (PIMAGE_BOUND_FORWARDER_REF, 8)
+ TEST_TARGET_ALIGN(PIMAGE_BOUND_FORWARDER_REF, 4)
}
static void test_pack_PIMAGE_BOUND_IMPORT_DESCRIPTOR(void)
{
/* PIMAGE_BOUND_IMPORT_DESCRIPTOR */
- TEST_TYPE(PIMAGE_BOUND_IMPORT_DESCRIPTOR, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_BOUND_IMPORT_DESCRIPTOR, 8, 4);
+ TEST_TYPE_SIZE (PIMAGE_BOUND_IMPORT_DESCRIPTOR, 4)
+ TEST_TYPE_ALIGN (PIMAGE_BOUND_IMPORT_DESCRIPTOR, 4)
+ TEST_TARGET_SIZE (PIMAGE_BOUND_IMPORT_DESCRIPTOR, 8)
+ TEST_TARGET_ALIGN(PIMAGE_BOUND_IMPORT_DESCRIPTOR, 4)
}
static void test_pack_PIMAGE_COFF_SYMBOLS_HEADER(void)
{
/* PIMAGE_COFF_SYMBOLS_HEADER */
- TEST_TYPE(PIMAGE_COFF_SYMBOLS_HEADER, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_COFF_SYMBOLS_HEADER, 32, 4);
+ TEST_TYPE_SIZE (PIMAGE_COFF_SYMBOLS_HEADER, 4)
+ TEST_TYPE_ALIGN (PIMAGE_COFF_SYMBOLS_HEADER, 4)
+ TEST_TARGET_SIZE (PIMAGE_COFF_SYMBOLS_HEADER, 32)
+ TEST_TARGET_ALIGN(PIMAGE_COFF_SYMBOLS_HEADER, 4)
}
static void test_pack_PIMAGE_DATA_DIRECTORY(void)
{
/* PIMAGE_DATA_DIRECTORY */
- TEST_TYPE(PIMAGE_DATA_DIRECTORY, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_DATA_DIRECTORY, 8, 4);
+ TEST_TYPE_SIZE (PIMAGE_DATA_DIRECTORY, 4)
+ TEST_TYPE_ALIGN (PIMAGE_DATA_DIRECTORY, 4)
+ TEST_TARGET_SIZE (PIMAGE_DATA_DIRECTORY, 8)
+ TEST_TARGET_ALIGN(PIMAGE_DATA_DIRECTORY, 4)
}
static void test_pack_PIMAGE_DEBUG_DIRECTORY(void)
{
/* PIMAGE_DEBUG_DIRECTORY */
- TEST_TYPE(PIMAGE_DEBUG_DIRECTORY, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_DEBUG_DIRECTORY, 28, 4);
+ TEST_TYPE_SIZE (PIMAGE_DEBUG_DIRECTORY, 4)
+ TEST_TYPE_ALIGN (PIMAGE_DEBUG_DIRECTORY, 4)
+ TEST_TARGET_SIZE (PIMAGE_DEBUG_DIRECTORY, 28)
+ TEST_TARGET_ALIGN(PIMAGE_DEBUG_DIRECTORY, 4)
}
static void test_pack_PIMAGE_DEBUG_MISC(void)
{
/* PIMAGE_DEBUG_MISC */
- TEST_TYPE(PIMAGE_DEBUG_MISC, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_DEBUG_MISC, 16, 4);
+ TEST_TYPE_SIZE (PIMAGE_DEBUG_MISC, 4)
+ TEST_TYPE_ALIGN (PIMAGE_DEBUG_MISC, 4)
+ TEST_TARGET_SIZE (PIMAGE_DEBUG_MISC, 16)
+ TEST_TARGET_ALIGN(PIMAGE_DEBUG_MISC, 4)
}
static void test_pack_PIMAGE_DOS_HEADER(void)
{
/* PIMAGE_DOS_HEADER */
- TEST_TYPE(PIMAGE_DOS_HEADER, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_DOS_HEADER, 64, 2);
+ TEST_TYPE_SIZE (PIMAGE_DOS_HEADER, 4)
+ TEST_TYPE_ALIGN (PIMAGE_DOS_HEADER, 4)
+ TEST_TARGET_SIZE (PIMAGE_DOS_HEADER, 64)
+ TEST_TARGET_ALIGN(PIMAGE_DOS_HEADER, 2)
}
static void test_pack_PIMAGE_EXPORT_DIRECTORY(void)
{
/* PIMAGE_EXPORT_DIRECTORY */
- TEST_TYPE(PIMAGE_EXPORT_DIRECTORY, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_EXPORT_DIRECTORY, 40, 4);
+ TEST_TYPE_SIZE (PIMAGE_EXPORT_DIRECTORY, 4)
+ TEST_TYPE_ALIGN (PIMAGE_EXPORT_DIRECTORY, 4)
+ TEST_TARGET_SIZE (PIMAGE_EXPORT_DIRECTORY, 40)
+ TEST_TARGET_ALIGN(PIMAGE_EXPORT_DIRECTORY, 4)
}
static void test_pack_PIMAGE_FILE_HEADER(void)
{
/* PIMAGE_FILE_HEADER */
- TEST_TYPE(PIMAGE_FILE_HEADER, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_FILE_HEADER, 20, 4);
+ TEST_TYPE_SIZE (PIMAGE_FILE_HEADER, 4)
+ TEST_TYPE_ALIGN (PIMAGE_FILE_HEADER, 4)
+ TEST_TARGET_SIZE (PIMAGE_FILE_HEADER, 20)
+ TEST_TARGET_ALIGN(PIMAGE_FILE_HEADER, 4)
}
static void test_pack_PIMAGE_FUNCTION_ENTRY(void)
{
/* PIMAGE_FUNCTION_ENTRY */
- TEST_TYPE(PIMAGE_FUNCTION_ENTRY, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_FUNCTION_ENTRY, 12, 4);
+ TEST_TYPE_SIZE (PIMAGE_FUNCTION_ENTRY, 4)
+ TEST_TYPE_ALIGN (PIMAGE_FUNCTION_ENTRY, 4)
+ TEST_TARGET_SIZE (PIMAGE_FUNCTION_ENTRY, 12)
+ TEST_TARGET_ALIGN(PIMAGE_FUNCTION_ENTRY, 4)
}
static void test_pack_PIMAGE_IMPORT_BY_NAME(void)
{
/* PIMAGE_IMPORT_BY_NAME */
- TEST_TYPE(PIMAGE_IMPORT_BY_NAME, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_IMPORT_BY_NAME, 4, 2);
+ TEST_TYPE_SIZE (PIMAGE_IMPORT_BY_NAME, 4)
+ TEST_TYPE_ALIGN (PIMAGE_IMPORT_BY_NAME, 4)
+ TEST_TARGET_SIZE (PIMAGE_IMPORT_BY_NAME, 4)
+ TEST_TARGET_ALIGN(PIMAGE_IMPORT_BY_NAME, 2)
}
static void test_pack_PIMAGE_IMPORT_DESCRIPTOR(void)
{
/* PIMAGE_IMPORT_DESCRIPTOR */
- TEST_TYPE(PIMAGE_IMPORT_DESCRIPTOR, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_IMPORT_DESCRIPTOR, 4)
+ TEST_TYPE_ALIGN (PIMAGE_IMPORT_DESCRIPTOR, 4)
}
static void test_pack_PIMAGE_LINENUMBER(void)
{
/* PIMAGE_LINENUMBER */
- TEST_TYPE(PIMAGE_LINENUMBER, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_LINENUMBER, 4)
+ TEST_TYPE_ALIGN (PIMAGE_LINENUMBER, 4)
}
static void test_pack_PIMAGE_LOAD_CONFIG_DIRECTORY(void)
{
/* PIMAGE_LOAD_CONFIG_DIRECTORY */
- TEST_TYPE(PIMAGE_LOAD_CONFIG_DIRECTORY, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_LOAD_CONFIG_DIRECTORY, 72, 4);
+ TEST_TYPE_SIZE (PIMAGE_LOAD_CONFIG_DIRECTORY, 4)
+ TEST_TYPE_ALIGN (PIMAGE_LOAD_CONFIG_DIRECTORY, 4)
+ TEST_TARGET_SIZE (PIMAGE_LOAD_CONFIG_DIRECTORY, 72)
+ TEST_TARGET_ALIGN(PIMAGE_LOAD_CONFIG_DIRECTORY, 4)
}
static void test_pack_PIMAGE_NT_HEADERS(void)
{
/* PIMAGE_NT_HEADERS */
- TEST_TYPE(PIMAGE_NT_HEADERS, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_NT_HEADERS, 4)
+ TEST_TYPE_ALIGN (PIMAGE_NT_HEADERS, 4)
}
static void test_pack_PIMAGE_OPTIONAL_HEADER(void)
{
/* PIMAGE_OPTIONAL_HEADER */
- TEST_TYPE(PIMAGE_OPTIONAL_HEADER, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_OPTIONAL_HEADER, 4)
+ TEST_TYPE_ALIGN (PIMAGE_OPTIONAL_HEADER, 4)
}
static void test_pack_PIMAGE_OS2_HEADER(void)
{
/* PIMAGE_OS2_HEADER */
- TEST_TYPE(PIMAGE_OS2_HEADER, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_OS2_HEADER, 64, 2);
+ TEST_TYPE_SIZE (PIMAGE_OS2_HEADER, 4)
+ TEST_TYPE_ALIGN (PIMAGE_OS2_HEADER, 4)
+ TEST_TARGET_SIZE (PIMAGE_OS2_HEADER, 64)
+ TEST_TARGET_ALIGN(PIMAGE_OS2_HEADER, 2)
}
static void test_pack_PIMAGE_RELOCATION(void)
{
/* PIMAGE_RELOCATION */
- TEST_TYPE(PIMAGE_RELOCATION, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_RELOCATION, 4)
+ TEST_TYPE_ALIGN (PIMAGE_RELOCATION, 4)
}
static void test_pack_PIMAGE_RESOURCE_DATA_ENTRY(void)
{
/* PIMAGE_RESOURCE_DATA_ENTRY */
- TEST_TYPE(PIMAGE_RESOURCE_DATA_ENTRY, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_RESOURCE_DATA_ENTRY, 16, 4);
+ TEST_TYPE_SIZE (PIMAGE_RESOURCE_DATA_ENTRY, 4)
+ TEST_TYPE_ALIGN (PIMAGE_RESOURCE_DATA_ENTRY, 4)
+ TEST_TARGET_SIZE (PIMAGE_RESOURCE_DATA_ENTRY, 16)
+ TEST_TARGET_ALIGN(PIMAGE_RESOURCE_DATA_ENTRY, 4)
}
static void test_pack_PIMAGE_RESOURCE_DIRECTORY(void)
{
/* PIMAGE_RESOURCE_DIRECTORY */
- TEST_TYPE(PIMAGE_RESOURCE_DIRECTORY, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_RESOURCE_DIRECTORY, 16, 4);
+ TEST_TYPE_SIZE (PIMAGE_RESOURCE_DIRECTORY, 4)
+ TEST_TYPE_ALIGN (PIMAGE_RESOURCE_DIRECTORY, 4)
+ TEST_TARGET_SIZE (PIMAGE_RESOURCE_DIRECTORY, 16)
+ TEST_TARGET_ALIGN(PIMAGE_RESOURCE_DIRECTORY, 4)
}
static void test_pack_PIMAGE_RESOURCE_DIRECTORY_ENTRY(void)
{
/* PIMAGE_RESOURCE_DIRECTORY_ENTRY */
- TEST_TYPE(PIMAGE_RESOURCE_DIRECTORY_ENTRY, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_RESOURCE_DIRECTORY_ENTRY, 4)
+ TEST_TYPE_ALIGN (PIMAGE_RESOURCE_DIRECTORY_ENTRY, 4)
}
static void test_pack_PIMAGE_RESOURCE_DIRECTORY_STRING(void)
{
/* PIMAGE_RESOURCE_DIRECTORY_STRING */
- TEST_TYPE(PIMAGE_RESOURCE_DIRECTORY_STRING, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_RESOURCE_DIRECTORY_STRING, 4, 2);
+ TEST_TYPE_SIZE (PIMAGE_RESOURCE_DIRECTORY_STRING, 4)
+ TEST_TYPE_ALIGN (PIMAGE_RESOURCE_DIRECTORY_STRING, 4)
+ TEST_TARGET_SIZE (PIMAGE_RESOURCE_DIRECTORY_STRING, 4)
+ TEST_TARGET_ALIGN(PIMAGE_RESOURCE_DIRECTORY_STRING, 2)
}
static void test_pack_PIMAGE_RESOURCE_DIR_STRING_U(void)
{
/* PIMAGE_RESOURCE_DIR_STRING_U */
- TEST_TYPE(PIMAGE_RESOURCE_DIR_STRING_U, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_RESOURCE_DIR_STRING_U, 4, 2);
+ TEST_TYPE_SIZE (PIMAGE_RESOURCE_DIR_STRING_U, 4)
+ TEST_TYPE_ALIGN (PIMAGE_RESOURCE_DIR_STRING_U, 4)
+ TEST_TARGET_SIZE (PIMAGE_RESOURCE_DIR_STRING_U, 4)
+ TEST_TARGET_ALIGN(PIMAGE_RESOURCE_DIR_STRING_U, 2)
}
static void test_pack_PIMAGE_SECTION_HEADER(void)
{
/* PIMAGE_SECTION_HEADER */
- TEST_TYPE(PIMAGE_SECTION_HEADER, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_SECTION_HEADER, 4)
+ TEST_TYPE_ALIGN (PIMAGE_SECTION_HEADER, 4)
}
static void test_pack_PIMAGE_SEPARATE_DEBUG_HEADER(void)
{
/* PIMAGE_SEPARATE_DEBUG_HEADER */
- TEST_TYPE(PIMAGE_SEPARATE_DEBUG_HEADER, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_SEPARATE_DEBUG_HEADER, 48, 4);
+ TEST_TYPE_SIZE (PIMAGE_SEPARATE_DEBUG_HEADER, 4)
+ TEST_TYPE_ALIGN (PIMAGE_SEPARATE_DEBUG_HEADER, 4)
+ TEST_TARGET_SIZE (PIMAGE_SEPARATE_DEBUG_HEADER, 48)
+ TEST_TARGET_ALIGN(PIMAGE_SEPARATE_DEBUG_HEADER, 4)
}
static void test_pack_PIMAGE_SYMBOL(void)
{
/* PIMAGE_SYMBOL */
- TEST_TYPE(PIMAGE_SYMBOL, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_SYMBOL, 4)
+ TEST_TYPE_ALIGN (PIMAGE_SYMBOL, 4)
}
static void test_pack_PIMAGE_THUNK_DATA(void)
{
/* PIMAGE_THUNK_DATA */
- TEST_TYPE(PIMAGE_THUNK_DATA, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_THUNK_DATA, 4)
+ TEST_TYPE_ALIGN (PIMAGE_THUNK_DATA, 4)
}
static void test_pack_PIMAGE_TLS_CALLBACK(void)
{
/* PIMAGE_TLS_CALLBACK */
- TEST_TYPE(PIMAGE_TLS_CALLBACK, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_TLS_CALLBACK, 4)
+ TEST_TYPE_ALIGN (PIMAGE_TLS_CALLBACK, 4)
}
static void test_pack_PIMAGE_TLS_DIRECTORY(void)
{
/* PIMAGE_TLS_DIRECTORY */
- TEST_TYPE(PIMAGE_TLS_DIRECTORY, 4, 4);
+ TEST_TYPE_SIZE (PIMAGE_TLS_DIRECTORY, 4)
+ TEST_TYPE_ALIGN (PIMAGE_TLS_DIRECTORY, 4)
}
static void test_pack_PIMAGE_VXD_HEADER(void)
{
/* PIMAGE_VXD_HEADER */
- TEST_TYPE(PIMAGE_VXD_HEADER, 4, 4);
- TEST_TYPE_POINTER(PIMAGE_VXD_HEADER, 196, 2);
+ TEST_TYPE_SIZE (PIMAGE_VXD_HEADER, 4)
+ TEST_TYPE_ALIGN (PIMAGE_VXD_HEADER, 4)
+ TEST_TARGET_SIZE (PIMAGE_VXD_HEADER, 196)
+ TEST_TARGET_ALIGN(PIMAGE_VXD_HEADER, 2)
}
static void test_pack_PIO_COUNTERS(void)
{
/* PIO_COUNTERS */
- TEST_TYPE(PIO_COUNTERS, 4, 4);
- TEST_TYPE_POINTER(PIO_COUNTERS, 48, 8);
+ TEST_TYPE_SIZE (PIO_COUNTERS, 4)
+ TEST_TYPE_ALIGN (PIO_COUNTERS, 4)
+ TEST_TARGET_SIZE (PIO_COUNTERS, 48)
+ TEST_TARGET_ALIGN(PIO_COUNTERS, 8)
}
static void test_pack_PISECURITY_DESCRIPTOR(void)
{
/* PISECURITY_DESCRIPTOR */
- TEST_TYPE(PISECURITY_DESCRIPTOR, 4, 4);
- TEST_TYPE_POINTER(PISECURITY_DESCRIPTOR, 20, 4);
+ TEST_TYPE_SIZE (PISECURITY_DESCRIPTOR, 4)
+ TEST_TYPE_ALIGN (PISECURITY_DESCRIPTOR, 4)
+ TEST_TARGET_SIZE (PISECURITY_DESCRIPTOR, 20)
+ TEST_TARGET_ALIGN(PISECURITY_DESCRIPTOR, 4)
}
static void test_pack_PISECURITY_DESCRIPTOR_RELATIVE(void)
{
/* PISECURITY_DESCRIPTOR_RELATIVE */
- TEST_TYPE(PISECURITY_DESCRIPTOR_RELATIVE, 4, 4);
- TEST_TYPE_POINTER(PISECURITY_DESCRIPTOR_RELATIVE, 20, 4);
+ TEST_TYPE_SIZE (PISECURITY_DESCRIPTOR_RELATIVE, 4)
+ TEST_TYPE_ALIGN (PISECURITY_DESCRIPTOR_RELATIVE, 4)
+ TEST_TARGET_SIZE (PISECURITY_DESCRIPTOR_RELATIVE, 20)
+ TEST_TARGET_ALIGN(PISECURITY_DESCRIPTOR_RELATIVE, 4)
}
static void test_pack_PISID(void)
{
/* PISID */
- TEST_TYPE(PISID, 4, 4);
- TEST_TYPE_POINTER(PISID, 12, 4);
+ TEST_TYPE_SIZE (PISID, 4)
+ TEST_TYPE_ALIGN (PISID, 4)
+ TEST_TARGET_SIZE (PISID, 12)
+ TEST_TARGET_ALIGN(PISID, 4)
}
static void test_pack_PLARGE_INTEGER(void)
{
/* PLARGE_INTEGER */
- TEST_TYPE(PLARGE_INTEGER, 4, 4);
+ TEST_TYPE_SIZE (PLARGE_INTEGER, 4)
+ TEST_TYPE_ALIGN (PLARGE_INTEGER, 4)
}
static void test_pack_PLIST_ENTRY(void)
{
/* PLIST_ENTRY */
- TEST_TYPE(PLIST_ENTRY, 4, 4);
- TEST_TYPE_POINTER(PLIST_ENTRY, 8, 4);
+ TEST_TYPE_SIZE (PLIST_ENTRY, 4)
+ TEST_TYPE_ALIGN (PLIST_ENTRY, 4)
+ TEST_TARGET_SIZE (PLIST_ENTRY, 8)
+ TEST_TARGET_ALIGN(PLIST_ENTRY, 4)
}
static void test_pack_PLUID(void)
{
/* PLUID */
- TEST_TYPE(PLUID, 4, 4);
- TEST_TYPE_POINTER(PLUID, 8, 4);
+ TEST_TYPE_SIZE (PLUID, 4)
+ TEST_TYPE_ALIGN (PLUID, 4)
+ TEST_TARGET_SIZE (PLUID, 8)
+ TEST_TARGET_ALIGN(PLUID, 4)
}
static void test_pack_PLUID_AND_ATTRIBUTES(void)
{
/* PLUID_AND_ATTRIBUTES */
- TEST_TYPE(PLUID_AND_ATTRIBUTES, 4, 4);
- TEST_TYPE_POINTER(PLUID_AND_ATTRIBUTES, 12, 4);
+ TEST_TYPE_SIZE (PLUID_AND_ATTRIBUTES, 4)
+ TEST_TYPE_ALIGN (PLUID_AND_ATTRIBUTES, 4)
+ TEST_TARGET_SIZE (PLUID_AND_ATTRIBUTES, 12)
+ TEST_TARGET_ALIGN(PLUID_AND_ATTRIBUTES, 4)
}
static void test_pack_PMEMORY_BASIC_INFORMATION(void)
{
/* PMEMORY_BASIC_INFORMATION */
- TEST_TYPE(PMEMORY_BASIC_INFORMATION, 4, 4);
- TEST_TYPE_POINTER(PMEMORY_BASIC_INFORMATION, 28, 4);
+ TEST_TYPE_SIZE (PMEMORY_BASIC_INFORMATION, 4)
+ TEST_TYPE_ALIGN (PMEMORY_BASIC_INFORMATION, 4)
+ TEST_TARGET_SIZE (PMEMORY_BASIC_INFORMATION, 28)
+ TEST_TARGET_ALIGN(PMEMORY_BASIC_INFORMATION, 4)
}
static void test_pack_PMESSAGE_RESOURCE_BLOCK(void)
{
/* PMESSAGE_RESOURCE_BLOCK */
- TEST_TYPE(PMESSAGE_RESOURCE_BLOCK, 4, 4);
- TEST_TYPE_POINTER(PMESSAGE_RESOURCE_BLOCK, 12, 4);
+ TEST_TYPE_SIZE (PMESSAGE_RESOURCE_BLOCK, 4)
+ TEST_TYPE_ALIGN (PMESSAGE_RESOURCE_BLOCK, 4)
+ TEST_TARGET_SIZE (PMESSAGE_RESOURCE_BLOCK, 12)
+ TEST_TARGET_ALIGN(PMESSAGE_RESOURCE_BLOCK, 4)
}
static void test_pack_PMESSAGE_RESOURCE_DATA(void)
{
/* PMESSAGE_RESOURCE_DATA */
- TEST_TYPE(PMESSAGE_RESOURCE_DATA, 4, 4);
- TEST_TYPE_POINTER(PMESSAGE_RESOURCE_DATA, 16, 4);
+ TEST_TYPE_SIZE (PMESSAGE_RESOURCE_DATA, 4)
+ TEST_TYPE_ALIGN (PMESSAGE_RESOURCE_DATA, 4)
+ TEST_TARGET_SIZE (PMESSAGE_RESOURCE_DATA, 16)
+ TEST_TARGET_ALIGN(PMESSAGE_RESOURCE_DATA, 4)
}
static void test_pack_PMESSAGE_RESOURCE_ENTRY(void)
{
/* PMESSAGE_RESOURCE_ENTRY */
- TEST_TYPE(PMESSAGE_RESOURCE_ENTRY, 4, 4);
- TEST_TYPE_POINTER(PMESSAGE_RESOURCE_ENTRY, 6, 2);
+ TEST_TYPE_SIZE (PMESSAGE_RESOURCE_ENTRY, 4)
+ TEST_TYPE_ALIGN (PMESSAGE_RESOURCE_ENTRY, 4)
+ TEST_TARGET_SIZE (PMESSAGE_RESOURCE_ENTRY, 6)
+ TEST_TARGET_ALIGN(PMESSAGE_RESOURCE_ENTRY, 2)
}
static void test_pack_PNT_TIB(void)
{
/* PNT_TIB */
- TEST_TYPE(PNT_TIB, 4, 4);
+ TEST_TYPE_SIZE (PNT_TIB, 4)
+ TEST_TYPE_ALIGN (PNT_TIB, 4)
}
static void test_pack_POBJECT_TYPE_LIST(void)
{
/* POBJECT_TYPE_LIST */
- TEST_TYPE(POBJECT_TYPE_LIST, 4, 4);
- TEST_TYPE_POINTER(POBJECT_TYPE_LIST, 8, 4);
+ TEST_TYPE_SIZE (POBJECT_TYPE_LIST, 4)
+ TEST_TYPE_ALIGN (POBJECT_TYPE_LIST, 4)
+ TEST_TARGET_SIZE (POBJECT_TYPE_LIST, 8)
+ TEST_TARGET_ALIGN(POBJECT_TYPE_LIST, 4)
}
static void test_pack_PPRIVILEGE_SET(void)
{
/* PPRIVILEGE_SET */
- TEST_TYPE(PPRIVILEGE_SET, 4, 4);
- TEST_TYPE_POINTER(PPRIVILEGE_SET, 20, 4);
+ TEST_TYPE_SIZE (PPRIVILEGE_SET, 4)
+ TEST_TYPE_ALIGN (PPRIVILEGE_SET, 4)
+ TEST_TARGET_SIZE (PPRIVILEGE_SET, 20)
+ TEST_TARGET_ALIGN(PPRIVILEGE_SET, 4)
}
static void test_pack_PRIVILEGE_SET(void)
{
/* PRIVILEGE_SET (pack 4) */
- TEST_TYPE(PRIVILEGE_SET, 20, 4);
- TEST_FIELD(PRIVILEGE_SET, DWORD, PrivilegeCount, 0, 4, 4);
- TEST_FIELD(PRIVILEGE_SET, DWORD, Control, 4, 4, 4);
- TEST_FIELD(PRIVILEGE_SET, LUID_AND_ATTRIBUTES[ANYSIZE_ARRAY], Privilege, 8, 12, 4);
+ TEST_TYPE_SIZE (PRIVILEGE_SET, 20)
+ TEST_TYPE_ALIGN (PRIVILEGE_SET, 4)
+ TEST_FIELD_SIZE (PRIVILEGE_SET, PrivilegeCount, 4)
+ TEST_FIELD_ALIGN (PRIVILEGE_SET, PrivilegeCount, 4)
+ TEST_FIELD_OFFSET(PRIVILEGE_SET, PrivilegeCount, 0)
+ TEST_FIELD_SIZE (PRIVILEGE_SET, Control, 4)
+ TEST_FIELD_ALIGN (PRIVILEGE_SET, Control, 4)
+ TEST_FIELD_OFFSET(PRIVILEGE_SET, Control, 4)
+ TEST_FIELD_SIZE (PRIVILEGE_SET, Privilege, 12)
+ TEST_FIELD_ALIGN (PRIVILEGE_SET, Privilege, 4)
+ TEST_FIELD_OFFSET(PRIVILEGE_SET, Privilege, 8)
}
static void test_pack_PRLIST_ENTRY(void)
{
/* PRLIST_ENTRY */
- TEST_TYPE(PRLIST_ENTRY, 4, 4);
- TEST_TYPE_POINTER(PRLIST_ENTRY, 8, 4);
+ TEST_TYPE_SIZE (PRLIST_ENTRY, 4)
+ TEST_TYPE_ALIGN (PRLIST_ENTRY, 4)
+ TEST_TARGET_SIZE (PRLIST_ENTRY, 8)
+ TEST_TARGET_ALIGN(PRLIST_ENTRY, 4)
}
static void test_pack_PRTL_CRITICAL_SECTION(void)
{
/* PRTL_CRITICAL_SECTION */
- TEST_TYPE(PRTL_CRITICAL_SECTION, 4, 4);
- TEST_TYPE_POINTER(PRTL_CRITICAL_SECTION, 24, 4);
+ TEST_TYPE_SIZE (PRTL_CRITICAL_SECTION, 4)
+ TEST_TYPE_ALIGN (PRTL_CRITICAL_SECTION, 4)
+ TEST_TARGET_SIZE (PRTL_CRITICAL_SECTION, 24)
+ TEST_TARGET_ALIGN(PRTL_CRITICAL_SECTION, 4)
}
static void test_pack_PRTL_CRITICAL_SECTION_DEBUG(void)
{
/* PRTL_CRITICAL_SECTION_DEBUG */
- TEST_TYPE(PRTL_CRITICAL_SECTION_DEBUG, 4, 4);
+ TEST_TYPE_SIZE (PRTL_CRITICAL_SECTION_DEBUG, 4)
+ TEST_TYPE_ALIGN (PRTL_CRITICAL_SECTION_DEBUG, 4)
}
static void test_pack_PRTL_OSVERSIONINFOEXW(void)
{
/* PRTL_OSVERSIONINFOEXW */
- TEST_TYPE(PRTL_OSVERSIONINFOEXW, 4, 4);
- TEST_TYPE_POINTER(PRTL_OSVERSIONINFOEXW, 284, 4);
+ TEST_TYPE_SIZE (PRTL_OSVERSIONINFOEXW, 4)
+ TEST_TYPE_ALIGN (PRTL_OSVERSIONINFOEXW, 4)
+ TEST_TARGET_SIZE (PRTL_OSVERSIONINFOEXW, 284)
+ TEST_TARGET_ALIGN(PRTL_OSVERSIONINFOEXW, 4)
}
static void test_pack_PRTL_OSVERSIONINFOW(void)
{
/* PRTL_OSVERSIONINFOW */
- TEST_TYPE(PRTL_OSVERSIONINFOW, 4, 4);
- TEST_TYPE_POINTER(PRTL_OSVERSIONINFOW, 276, 4);
+ TEST_TYPE_SIZE (PRTL_OSVERSIONINFOW, 4)
+ TEST_TYPE_ALIGN (PRTL_OSVERSIONINFOW, 4)
+ TEST_TARGET_SIZE (PRTL_OSVERSIONINFOW, 276)
+ TEST_TARGET_ALIGN(PRTL_OSVERSIONINFOW, 4)
}
static void test_pack_PRTL_RESOURCE_DEBUG(void)
{
/* PRTL_RESOURCE_DEBUG */
- TEST_TYPE(PRTL_RESOURCE_DEBUG, 4, 4);
+ TEST_TYPE_SIZE (PRTL_RESOURCE_DEBUG, 4)
+ TEST_TYPE_ALIGN (PRTL_RESOURCE_DEBUG, 4)
}
static void test_pack_PSECURITY_DESCRIPTOR(void)
{
/* PSECURITY_DESCRIPTOR */
- TEST_TYPE(PSECURITY_DESCRIPTOR, 4, 4);
+ TEST_TYPE_SIZE (PSECURITY_DESCRIPTOR, 4)
+ TEST_TYPE_ALIGN (PSECURITY_DESCRIPTOR, 4)
}
static void test_pack_PSECURITY_QUALITY_OF_SERVICE(void)
{
/* PSECURITY_QUALITY_OF_SERVICE */
- TEST_TYPE(PSECURITY_QUALITY_OF_SERVICE, 4, 4);
+ TEST_TYPE_SIZE (PSECURITY_QUALITY_OF_SERVICE, 4)
+ TEST_TYPE_ALIGN (PSECURITY_QUALITY_OF_SERVICE, 4)
}
static void test_pack_PSID(void)
{
/* PSID */
- TEST_TYPE(PSID, 4, 4);
+ TEST_TYPE_SIZE (PSID, 4)
+ TEST_TYPE_ALIGN (PSID, 4)
}
static void test_pack_PSID_IDENTIFIER_AUTHORITY(void)
{
/* PSID_IDENTIFIER_AUTHORITY */
- TEST_TYPE(PSID_IDENTIFIER_AUTHORITY, 4, 4);
- TEST_TYPE_POINTER(PSID_IDENTIFIER_AUTHORITY, 6, 1);
+ TEST_TYPE_SIZE (PSID_IDENTIFIER_AUTHORITY, 4)
+ TEST_TYPE_ALIGN (PSID_IDENTIFIER_AUTHORITY, 4)
+ TEST_TARGET_SIZE (PSID_IDENTIFIER_AUTHORITY, 6)
+ TEST_TARGET_ALIGN(PSID_IDENTIFIER_AUTHORITY, 1)
}
static void test_pack_PSINGLE_LIST_ENTRY(void)
{
/* PSINGLE_LIST_ENTRY */
- TEST_TYPE(PSINGLE_LIST_ENTRY, 4, 4);
- TEST_TYPE_POINTER(PSINGLE_LIST_ENTRY, 4, 4);
+ TEST_TYPE_SIZE (PSINGLE_LIST_ENTRY, 4)
+ TEST_TYPE_ALIGN (PSINGLE_LIST_ENTRY, 4)
+ TEST_TARGET_SIZE (PSINGLE_LIST_ENTRY, 4)
+ TEST_TARGET_ALIGN(PSINGLE_LIST_ENTRY, 4)
}
static void test_pack_PSTR(void)
{
/* PSTR */
- TEST_TYPE(PSTR, 4, 4);
- TEST_TYPE_POINTER(PSTR, 1, 1);
+ TEST_TYPE_SIZE (PSTR, 4)
+ TEST_TYPE_ALIGN (PSTR, 4)
+ TEST_TARGET_SIZE (PSTR, 1)
+ TEST_TARGET_ALIGN(PSTR, 1)
}
static void test_pack_PSYSTEM_ALARM_ACE(void)
{
/* PSYSTEM_ALARM_ACE */
- TEST_TYPE(PSYSTEM_ALARM_ACE, 4, 4);
- TEST_TYPE_POINTER(PSYSTEM_ALARM_ACE, 12, 4);
+ TEST_TYPE_SIZE (PSYSTEM_ALARM_ACE, 4)
+ TEST_TYPE_ALIGN (PSYSTEM_ALARM_ACE, 4)
+ TEST_TARGET_SIZE (PSYSTEM_ALARM_ACE, 12)
+ TEST_TARGET_ALIGN(PSYSTEM_ALARM_ACE, 4)
}
static void test_pack_PSYSTEM_AUDIT_ACE(void)
{
/* PSYSTEM_AUDIT_ACE */
- TEST_TYPE(PSYSTEM_AUDIT_ACE, 4, 4);
- TEST_TYPE_POINTER(PSYSTEM_AUDIT_ACE, 12, 4);
+ TEST_TYPE_SIZE (PSYSTEM_AUDIT_ACE, 4)
+ TEST_TYPE_ALIGN (PSYSTEM_AUDIT_ACE, 4)
+ TEST_TARGET_SIZE (PSYSTEM_AUDIT_ACE, 12)
+ TEST_TARGET_ALIGN(PSYSTEM_AUDIT_ACE, 4)
}
static void test_pack_PTOKEN_GROUPS(void)
{
/* PTOKEN_GROUPS */
- TEST_TYPE(PTOKEN_GROUPS, 4, 4);
- TEST_TYPE_POINTER(PTOKEN_GROUPS, 12, 4);
+ TEST_TYPE_SIZE (PTOKEN_GROUPS, 4)
+ TEST_TYPE_ALIGN (PTOKEN_GROUPS, 4)
+ TEST_TARGET_SIZE (PTOKEN_GROUPS, 12)
+ TEST_TARGET_ALIGN(PTOKEN_GROUPS, 4)
}
static void test_pack_PTOKEN_PRIVILEGES(void)
{
/* PTOKEN_PRIVILEGES */
- TEST_TYPE(PTOKEN_PRIVILEGES, 4, 4);
- TEST_TYPE_POINTER(PTOKEN_PRIVILEGES, 16, 4);
+ TEST_TYPE_SIZE (PTOKEN_PRIVILEGES, 4)
+ TEST_TYPE_ALIGN (PTOKEN_PRIVILEGES, 4)
+ TEST_TARGET_SIZE (PTOKEN_PRIVILEGES, 16)
+ TEST_TARGET_ALIGN(PTOKEN_PRIVILEGES, 4)
}
static void test_pack_PTOKEN_USER(void)
{
/* PTOKEN_USER */
- TEST_TYPE(PTOKEN_USER, 4, 4);
- TEST_TYPE_POINTER(PTOKEN_USER, 8, 4);
+ TEST_TYPE_SIZE (PTOKEN_USER, 4)
+ TEST_TYPE_ALIGN (PTOKEN_USER, 4)
+ TEST_TARGET_SIZE (PTOKEN_USER, 8)
+ TEST_TARGET_ALIGN(PTOKEN_USER, 4)
}
static void test_pack_PTSTR(void)
{
/* PTSTR */
- TEST_TYPE(PTSTR, 4, 4);
+ TEST_TYPE_SIZE (PTSTR, 4)
+ TEST_TYPE_ALIGN (PTSTR, 4)
}
static void test_pack_PULARGE_INTEGER(void)
{
/* PULARGE_INTEGER */
- TEST_TYPE(PULARGE_INTEGER, 4, 4);
+ TEST_TYPE_SIZE (PULARGE_INTEGER, 4)
+ TEST_TYPE_ALIGN (PULARGE_INTEGER, 4)
}
static void test_pack_PVECTORED_EXCEPTION_HANDLER(void)
{
/* PVECTORED_EXCEPTION_HANDLER */
- TEST_TYPE(PVECTORED_EXCEPTION_HANDLER, 4, 4);
+ TEST_TYPE_SIZE (PVECTORED_EXCEPTION_HANDLER, 4)
+ TEST_TYPE_ALIGN (PVECTORED_EXCEPTION_HANDLER, 4)
}
static void test_pack_PVOID(void)
{
/* PVOID */
- TEST_TYPE(PVOID, 4, 4);
+ TEST_TYPE_SIZE (PVOID, 4)
+ TEST_TYPE_ALIGN (PVOID, 4)
}
static void test_pack_PWCH(void)
{
/* PWCH */
- TEST_TYPE(PWCH, 4, 4);
- TEST_TYPE_POINTER(PWCH, 2, 2);
+ TEST_TYPE_SIZE (PWCH, 4)
+ TEST_TYPE_ALIGN (PWCH, 4)
+ TEST_TARGET_SIZE (PWCH, 2)
+ TEST_TARGET_ALIGN(PWCH, 2)
}
static void test_pack_PWSTR(void)
{
/* PWSTR */
- TEST_TYPE(PWSTR, 4, 4);
- TEST_TYPE_POINTER(PWSTR, 2, 2);
+ TEST_TYPE_SIZE (PWSTR, 4)
+ TEST_TYPE_ALIGN (PWSTR, 4)
+ TEST_TARGET_SIZE (PWSTR, 2)
+ TEST_TARGET_ALIGN(PWSTR, 2)
}
static void test_pack_RTL_CRITICAL_SECTION(void)
{
/* RTL_CRITICAL_SECTION (pack 4) */
- TEST_TYPE(RTL_CRITICAL_SECTION, 24, 4);
- TEST_FIELD(RTL_CRITICAL_SECTION, PRTL_CRITICAL_SECTION_DEBUG, DebugInfo, 0, 4, 4);
- TEST_FIELD(RTL_CRITICAL_SECTION, LONG, LockCount, 4, 4, 4);
- TEST_FIELD(RTL_CRITICAL_SECTION, LONG, RecursionCount, 8, 4, 4);
- TEST_FIELD(RTL_CRITICAL_SECTION, HANDLE, OwningThread, 12, 4, 4);
- TEST_FIELD(RTL_CRITICAL_SECTION, HANDLE, LockSemaphore, 16, 4, 4);
- TEST_FIELD(RTL_CRITICAL_SECTION, ULONG_PTR, SpinCount, 20, 4, 4);
+ TEST_TYPE_SIZE (RTL_CRITICAL_SECTION, 24)
+ TEST_TYPE_ALIGN (RTL_CRITICAL_SECTION, 4)
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION, DebugInfo, 4)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION, DebugInfo, 4)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION, DebugInfo, 0)
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION, LockCount, 4)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION, LockCount, 4)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION, LockCount, 4)
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION, RecursionCount, 4)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION, RecursionCount, 4)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION, RecursionCount, 8)
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION, OwningThread, 4)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION, OwningThread, 4)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION, OwningThread, 12)
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION, LockSemaphore, 4)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION, LockSemaphore, 4)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION, LockSemaphore, 16)
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION, SpinCount, 4)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION, SpinCount, 4)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION, SpinCount, 20)
}
static void test_pack_RTL_CRITICAL_SECTION_DEBUG(void)
{
/* RTL_CRITICAL_SECTION_DEBUG (pack 4) */
- TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, WORD, Type, 0, 2, 2);
- TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, WORD, CreatorBackTraceIndex, 2, 2, 2);
- TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, struct _RTL_CRITICAL_SECTION *, CriticalSection, 4, 4, 4);
- TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, LIST_ENTRY, ProcessLocksList, 8, 8, 4);
- TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, DWORD, EntryCount, 16, 4, 4);
- TEST_FIELD(RTL_CRITICAL_SECTION_DEBUG, DWORD, ContentionCount, 20, 4, 4);
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION_DEBUG, Type, 2)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION_DEBUG, Type, 2)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION_DEBUG, Type, 0)
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION_DEBUG, CreatorBackTraceIndex, 2)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION_DEBUG, CreatorBackTraceIndex, 2)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION_DEBUG, CreatorBackTraceIndex, 2)
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION_DEBUG, CriticalSection, 4)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION_DEBUG, CriticalSection, 4)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION_DEBUG, CriticalSection, 4)
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION_DEBUG, ProcessLocksList, 8)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION_DEBUG, ProcessLocksList, 4)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION_DEBUG, ProcessLocksList, 8)
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION_DEBUG, EntryCount, 4)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION_DEBUG, EntryCount, 4)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION_DEBUG, EntryCount, 16)
+ TEST_FIELD_SIZE (RTL_CRITICAL_SECTION_DEBUG, ContentionCount, 4)
+ TEST_FIELD_ALIGN (RTL_CRITICAL_SECTION_DEBUG, ContentionCount, 4)
+ TEST_FIELD_OFFSET(RTL_CRITICAL_SECTION_DEBUG, ContentionCount, 20)
}
static void test_pack_RTL_OSVERSIONINFOEXW(void)
{
/* RTL_OSVERSIONINFOEXW (pack 4) */
- TEST_TYPE(RTL_OSVERSIONINFOEXW, 284, 4);
- TEST_FIELD(RTL_OSVERSIONINFOEXW, DWORD, dwOSVersionInfoSize, 0, 4, 4);
- TEST_FIELD(RTL_OSVERSIONINFOEXW, DWORD, dwMajorVersion, 4, 4, 4);
- TEST_FIELD(RTL_OSVERSIONINFOEXW, DWORD, dwMinorVersion, 8, 4, 4);
- TEST_FIELD(RTL_OSVERSIONINFOEXW, DWORD, dwBuildNumber, 12, 4, 4);
- TEST_FIELD(RTL_OSVERSIONINFOEXW, DWORD, dwPlatformId, 16, 4, 4);
- TEST_FIELD(RTL_OSVERSIONINFOEXW, WCHAR[128], szCSDVersion, 20, 256, 2);
- TEST_FIELD(RTL_OSVERSIONINFOEXW, WORD, wServicePackMajor, 276, 2, 2);
- TEST_FIELD(RTL_OSVERSIONINFOEXW, WORD, wServicePackMinor, 278, 2, 2);
- TEST_FIELD(RTL_OSVERSIONINFOEXW, WORD, wSuiteMask, 280, 2, 2);
- TEST_FIELD(RTL_OSVERSIONINFOEXW, BYTE, wProductType, 282, 1, 1);
- TEST_FIELD(RTL_OSVERSIONINFOEXW, BYTE, wReserved, 283, 1, 1);
+ TEST_TYPE_SIZE (RTL_OSVERSIONINFOEXW, 284)
+ TEST_TYPE_ALIGN (RTL_OSVERSIONINFOEXW, 4)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOEXW, dwOSVersionInfoSize, 4)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOEXW, dwOSVersionInfoSize, 4)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOEXW, dwOSVersionInfoSize, 0)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOEXW, dwMajorVersion, 4)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOEXW, dwMajorVersion, 4)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOEXW, dwMajorVersion, 4)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOEXW, dwMinorVersion, 4)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOEXW, dwMinorVersion, 4)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOEXW, dwMinorVersion, 8)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOEXW, dwBuildNumber, 4)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOEXW, dwBuildNumber, 4)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOEXW, dwBuildNumber, 12)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOEXW, dwPlatformId, 4)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOEXW, dwPlatformId, 4)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOEXW, dwPlatformId, 16)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOEXW, szCSDVersion, 256)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOEXW, szCSDVersion, 2)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOEXW, szCSDVersion, 20)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOEXW, wServicePackMajor, 2)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOEXW, wServicePackMajor, 2)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOEXW, wServicePackMajor, 276)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOEXW, wServicePackMinor, 2)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOEXW, wServicePackMinor, 2)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOEXW, wServicePackMinor, 278)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOEXW, wSuiteMask, 2)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOEXW, wSuiteMask, 2)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOEXW, wSuiteMask, 280)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOEXW, wProductType, 1)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOEXW, wProductType, 1)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOEXW, wProductType, 282)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOEXW, wReserved, 1)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOEXW, wReserved, 1)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOEXW, wReserved, 283)
}
static void test_pack_RTL_OSVERSIONINFOW(void)
{
/* RTL_OSVERSIONINFOW (pack 4) */
- TEST_TYPE(RTL_OSVERSIONINFOW, 276, 4);
- TEST_FIELD(RTL_OSVERSIONINFOW, DWORD, dwOSVersionInfoSize, 0, 4, 4);
- TEST_FIELD(RTL_OSVERSIONINFOW, DWORD, dwMajorVersion, 4, 4, 4);
- TEST_FIELD(RTL_OSVERSIONINFOW, DWORD, dwMinorVersion, 8, 4, 4);
- TEST_FIELD(RTL_OSVERSIONINFOW, DWORD, dwBuildNumber, 12, 4, 4);
- TEST_FIELD(RTL_OSVERSIONINFOW, DWORD, dwPlatformId, 16, 4, 4);
- TEST_FIELD(RTL_OSVERSIONINFOW, WCHAR[128], szCSDVersion, 20, 256, 2);
+ TEST_TYPE_SIZE (RTL_OSVERSIONINFOW, 276)
+ TEST_TYPE_ALIGN (RTL_OSVERSIONINFOW, 4)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOW, dwOSVersionInfoSize, 4)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOW, dwOSVersionInfoSize, 4)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOW, dwOSVersionInfoSize, 0)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOW, dwMajorVersion, 4)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOW, dwMajorVersion, 4)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOW, dwMajorVersion, 4)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOW, dwMinorVersion, 4)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOW, dwMinorVersion, 4)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOW, dwMinorVersion, 8)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOW, dwBuildNumber, 4)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOW, dwBuildNumber, 4)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOW, dwBuildNumber, 12)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOW, dwPlatformId, 4)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOW, dwPlatformId, 4)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOW, dwPlatformId, 16)
+ TEST_FIELD_SIZE (RTL_OSVERSIONINFOW, szCSDVersion, 256)
+ TEST_FIELD_ALIGN (RTL_OSVERSIONINFOW, szCSDVersion, 2)
+ TEST_FIELD_OFFSET(RTL_OSVERSIONINFOW, szCSDVersion, 20)
}
static void test_pack_RTL_RESOURCE_DEBUG(void)
{
/* RTL_RESOURCE_DEBUG (pack 4) */
- TEST_FIELD(RTL_RESOURCE_DEBUG, WORD, Type, 0, 2, 2);
- TEST_FIELD(RTL_RESOURCE_DEBUG, WORD, CreatorBackTraceIndex, 2, 2, 2);
- TEST_FIELD(RTL_RESOURCE_DEBUG, struct _RTL_CRITICAL_SECTION *, CriticalSection, 4, 4, 4);
- TEST_FIELD(RTL_RESOURCE_DEBUG, LIST_ENTRY, ProcessLocksList, 8, 8, 4);
- TEST_FIELD(RTL_RESOURCE_DEBUG, DWORD, EntryCount, 16, 4, 4);
- TEST_FIELD(RTL_RESOURCE_DEBUG, DWORD, ContentionCount, 20, 4, 4);
+ TEST_FIELD_SIZE (RTL_RESOURCE_DEBUG, Type, 2)
+ TEST_FIELD_ALIGN (RTL_RESOURCE_DEBUG, Type, 2)
+ TEST_FIELD_OFFSET(RTL_RESOURCE_DEBUG, Type, 0)
+ TEST_FIELD_SIZE (RTL_RESOURCE_DEBUG, CreatorBackTraceIndex, 2)
+ TEST_FIELD_ALIGN (RTL_RESOURCE_DEBUG, CreatorBackTraceIndex, 2)
+ TEST_FIELD_OFFSET(RTL_RESOURCE_DEBUG, CreatorBackTraceIndex, 2)
+ TEST_FIELD_SIZE (RTL_RESOURCE_DEBUG, CriticalSection, 4)
+ TEST_FIELD_ALIGN (RTL_RESOURCE_DEBUG, CriticalSection, 4)
+ TEST_FIELD_OFFSET(RTL_RESOURCE_DEBUG, CriticalSection, 4)
+ TEST_FIELD_SIZE (RTL_RESOURCE_DEBUG, ProcessLocksList, 8)
+ TEST_FIELD_ALIGN (RTL_RESOURCE_DEBUG, ProcessLocksList, 4)
+ TEST_FIELD_OFFSET(RTL_RESOURCE_DEBUG, ProcessLocksList, 8)
+ TEST_FIELD_SIZE (RTL_RESOURCE_DEBUG, EntryCount, 4)
+ TEST_FIELD_ALIGN (RTL_RESOURCE_DEBUG, EntryCount, 4)
+ TEST_FIELD_OFFSET(RTL_RESOURCE_DEBUG, EntryCount, 16)
+ TEST_FIELD_SIZE (RTL_RESOURCE_DEBUG, ContentionCount, 4)
+ TEST_FIELD_ALIGN (RTL_RESOURCE_DEBUG, ContentionCount, 4)
+ TEST_FIELD_OFFSET(RTL_RESOURCE_DEBUG, ContentionCount, 20)
}
static void test_pack_SECURITY_CONTEXT_TRACKING_MODE(void)
{
/* SECURITY_CONTEXT_TRACKING_MODE */
- TEST_TYPE(SECURITY_CONTEXT_TRACKING_MODE, 1, 1);
+ TEST_TYPE_SIZE (SECURITY_CONTEXT_TRACKING_MODE, 1)
+ TEST_TYPE_ALIGN (SECURITY_CONTEXT_TRACKING_MODE, 1)
}
static void test_pack_SECURITY_DESCRIPTOR(void)
{
/* SECURITY_DESCRIPTOR (pack 4) */
- TEST_TYPE(SECURITY_DESCRIPTOR, 20, 4);
- TEST_FIELD(SECURITY_DESCRIPTOR, BYTE, Revision, 0, 1, 1);
- TEST_FIELD(SECURITY_DESCRIPTOR, BYTE, Sbz1, 1, 1, 1);
- TEST_FIELD(SECURITY_DESCRIPTOR, SECURITY_DESCRIPTOR_CONTROL, Control, 2, 2, 2);
- TEST_FIELD(SECURITY_DESCRIPTOR, PSID, Owner, 4, 4, 4);
- TEST_FIELD(SECURITY_DESCRIPTOR, PSID, Group, 8, 4, 4);
- TEST_FIELD(SECURITY_DESCRIPTOR, PACL, Sacl, 12, 4, 4);
- TEST_FIELD(SECURITY_DESCRIPTOR, PACL, Dacl, 16, 4, 4);
+ TEST_TYPE_SIZE (SECURITY_DESCRIPTOR, 20)
+ TEST_TYPE_ALIGN (SECURITY_DESCRIPTOR, 4)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR, Revision, 1)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR, Revision, 1)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR, Revision, 0)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR, Sbz1, 1)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR, Sbz1, 1)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR, Sbz1, 1)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR, Control, 2)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR, Control, 2)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR, Control, 2)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR, Owner, 4)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR, Owner, 4)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR, Owner, 4)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR, Group, 4)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR, Group, 4)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR, Group, 8)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR, Sacl, 4)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR, Sacl, 4)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR, Sacl, 12)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR, Dacl, 4)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR, Dacl, 4)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR, Dacl, 16)
}
static void test_pack_SECURITY_DESCRIPTOR_CONTROL(void)
{
/* SECURITY_DESCRIPTOR_CONTROL */
- TEST_TYPE(SECURITY_DESCRIPTOR_CONTROL, 2, 2);
- TEST_TYPE_UNSIGNED(SECURITY_DESCRIPTOR_CONTROL);
+ TEST_TYPE_SIZE (SECURITY_DESCRIPTOR_CONTROL, 2)
+ TEST_TYPE_ALIGN (SECURITY_DESCRIPTOR_CONTROL, 2)
+ TEST_TYPE_UNSIGNED(SECURITY_DESCRIPTOR_CONTROL)
}
static void test_pack_SECURITY_DESCRIPTOR_RELATIVE(void)
{
/* SECURITY_DESCRIPTOR_RELATIVE (pack 4) */
- TEST_TYPE(SECURITY_DESCRIPTOR_RELATIVE, 20, 4);
- TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, BYTE, Revision, 0, 1, 1);
- TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, BYTE, Sbz1, 1, 1, 1);
- TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, SECURITY_DESCRIPTOR_CONTROL, Control, 2, 2, 2);
- TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, DWORD, Owner, 4, 4, 4);
- TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, DWORD, Group, 8, 4, 4);
- TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, DWORD, Sacl, 12, 4, 4);
- TEST_FIELD(SECURITY_DESCRIPTOR_RELATIVE, DWORD, Dacl, 16, 4, 4);
+ TEST_TYPE_SIZE (SECURITY_DESCRIPTOR_RELATIVE, 20)
+ TEST_TYPE_ALIGN (SECURITY_DESCRIPTOR_RELATIVE, 4)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR_RELATIVE, Revision, 1)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR_RELATIVE, Revision, 1)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR_RELATIVE, Revision, 0)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR_RELATIVE, Sbz1, 1)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR_RELATIVE, Sbz1, 1)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR_RELATIVE, Sbz1, 1)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR_RELATIVE, Control, 2)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR_RELATIVE, Control, 2)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR_RELATIVE, Control, 2)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR_RELATIVE, Owner, 4)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR_RELATIVE, Owner, 4)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR_RELATIVE, Owner, 4)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR_RELATIVE, Group, 4)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR_RELATIVE, Group, 4)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR_RELATIVE, Group, 8)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR_RELATIVE, Sacl, 4)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR_RELATIVE, Sacl, 4)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR_RELATIVE, Sacl, 12)
+ TEST_FIELD_SIZE (SECURITY_DESCRIPTOR_RELATIVE, Dacl, 4)
+ TEST_FIELD_ALIGN (SECURITY_DESCRIPTOR_RELATIVE, Dacl, 4)
+ TEST_FIELD_OFFSET(SECURITY_DESCRIPTOR_RELATIVE, Dacl, 16)
}
static void test_pack_SECURITY_INFORMATION(void)
{
/* SECURITY_INFORMATION */
- TEST_TYPE(SECURITY_INFORMATION, 4, 4);
- TEST_TYPE_UNSIGNED(SECURITY_INFORMATION);
+ TEST_TYPE_SIZE (SECURITY_INFORMATION, 4)
+ TEST_TYPE_ALIGN (SECURITY_INFORMATION, 4)
+ TEST_TYPE_UNSIGNED(SECURITY_INFORMATION)
}
static void test_pack_SECURITY_QUALITY_OF_SERVICE(void)
{
/* SECURITY_QUALITY_OF_SERVICE (pack 4) */
- TEST_FIELD(SECURITY_QUALITY_OF_SERVICE, DWORD, Length, 0, 4, 4);
+ TEST_FIELD_SIZE (SECURITY_QUALITY_OF_SERVICE, Length, 4)
+ TEST_FIELD_ALIGN (SECURITY_QUALITY_OF_SERVICE, Length, 4)
+ TEST_FIELD_OFFSET(SECURITY_QUALITY_OF_SERVICE, Length, 0)
}
static void test_pack_SHORT(void)
{
/* SHORT */
- TEST_TYPE(SHORT, 2, 2);
- TEST_TYPE_SIGNED(SHORT);
+ TEST_TYPE_SIZE (SHORT, 2)
+ TEST_TYPE_ALIGN (SHORT, 2)
+ TEST_TYPE_SIGNED(SHORT)
}
static void test_pack_SID(void)
{
/* SID (pack 4) */
- TEST_TYPE(SID, 12, 4);
- TEST_FIELD(SID, BYTE, Revision, 0, 1, 1);
- TEST_FIELD(SID, BYTE, SubAuthorityCount, 1, 1, 1);
- TEST_FIELD(SID, SID_IDENTIFIER_AUTHORITY, IdentifierAuthority, 2, 6, 1);
- TEST_FIELD(SID, DWORD[1], SubAuthority, 8, 4, 4);
+ TEST_TYPE_SIZE (SID, 12)
+ TEST_TYPE_ALIGN (SID, 4)
+ TEST_FIELD_SIZE (SID, Revision, 1)
+ TEST_FIELD_ALIGN (SID, Revision, 1)
+ TEST_FIELD_OFFSET(SID, Revision, 0)
+ TEST_FIELD_SIZE (SID, SubAuthorityCount, 1)
+ TEST_FIELD_ALIGN (SID, SubAuthorityCount, 1)
+ TEST_FIELD_OFFSET(SID, SubAuthorityCount, 1)
+ TEST_FIELD_SIZE (SID, IdentifierAuthority, 6)
+ TEST_FIELD_ALIGN (SID, IdentifierAuthority, 1)
+ TEST_FIELD_OFFSET(SID, IdentifierAuthority, 2)
+ TEST_FIELD_SIZE (SID, SubAuthority, 4)
+ TEST_FIELD_ALIGN (SID, SubAuthority, 4)
+ TEST_FIELD_OFFSET(SID, SubAuthority, 8)
}
static void test_pack_SID_AND_ATTRIBUTES(void)
{
/* SID_AND_ATTRIBUTES (pack 4) */
- TEST_TYPE(SID_AND_ATTRIBUTES, 8, 4);
- TEST_FIELD(SID_AND_ATTRIBUTES, PSID, Sid, 0, 4, 4);
- TEST_FIELD(SID_AND_ATTRIBUTES, DWORD, Attributes, 4, 4, 4);
+ TEST_TYPE_SIZE (SID_AND_ATTRIBUTES, 8)
+ TEST_TYPE_ALIGN (SID_AND_ATTRIBUTES, 4)
+ TEST_FIELD_SIZE (SID_AND_ATTRIBUTES, Sid, 4)
+ TEST_FIELD_ALIGN (SID_AND_ATTRIBUTES, Sid, 4)
+ TEST_FIELD_OFFSET(SID_AND_ATTRIBUTES, Sid, 0)
+ TEST_FIELD_SIZE (SID_AND_ATTRIBUTES, Attributes, 4)
+ TEST_FIELD_ALIGN (SID_AND_ATTRIBUTES, Attributes, 4)
+ TEST_FIELD_OFFSET(SID_AND_ATTRIBUTES, Attributes, 4)
}
static void test_pack_SID_IDENTIFIER_AUTHORITY(void)
{
/* SID_IDENTIFIER_AUTHORITY (pack 4) */
- TEST_TYPE(SID_IDENTIFIER_AUTHORITY, 6, 1);
- TEST_FIELD(SID_IDENTIFIER_AUTHORITY, BYTE[6], Value, 0, 6, 1);
+ TEST_TYPE_SIZE (SID_IDENTIFIER_AUTHORITY, 6)
+ TEST_TYPE_ALIGN (SID_IDENTIFIER_AUTHORITY, 1)
+ TEST_FIELD_SIZE (SID_IDENTIFIER_AUTHORITY, Value, 6)
+ TEST_FIELD_ALIGN (SID_IDENTIFIER_AUTHORITY, Value, 1)
+ TEST_FIELD_OFFSET(SID_IDENTIFIER_AUTHORITY, Value, 0)
}
static void test_pack_SINGLE_LIST_ENTRY(void)
{
/* SINGLE_LIST_ENTRY (pack 4) */
- TEST_TYPE(SINGLE_LIST_ENTRY, 4, 4);
- TEST_FIELD(SINGLE_LIST_ENTRY, struct _SINGLE_LIST_ENTRY *, Next, 0, 4, 4);
+ TEST_TYPE_SIZE (SINGLE_LIST_ENTRY, 4)
+ TEST_TYPE_ALIGN (SINGLE_LIST_ENTRY, 4)
+ TEST_FIELD_SIZE (SINGLE_LIST_ENTRY, Next, 4)
+ TEST_FIELD_ALIGN (SINGLE_LIST_ENTRY, Next, 4)
+ TEST_FIELD_OFFSET(SINGLE_LIST_ENTRY, Next, 0)
}
static void test_pack_SYSTEM_ALARM_ACE(void)
{
/* SYSTEM_ALARM_ACE (pack 4) */
- TEST_TYPE(SYSTEM_ALARM_ACE, 12, 4);
- TEST_FIELD(SYSTEM_ALARM_ACE, ACE_HEADER, Header, 0, 4, 2);
- TEST_FIELD(SYSTEM_ALARM_ACE, DWORD, Mask, 4, 4, 4);
- TEST_FIELD(SYSTEM_ALARM_ACE, DWORD, SidStart, 8, 4, 4);
+ TEST_TYPE_SIZE (SYSTEM_ALARM_ACE, 12)
+ TEST_TYPE_ALIGN (SYSTEM_ALARM_ACE, 4)
+ TEST_FIELD_SIZE (SYSTEM_ALARM_ACE, Header, 4)
+ TEST_FIELD_ALIGN (SYSTEM_ALARM_ACE, Header, 2)
+ TEST_FIELD_OFFSET(SYSTEM_ALARM_ACE, Header, 0)
+ TEST_FIELD_SIZE (SYSTEM_ALARM_ACE, Mask, 4)
+ TEST_FIELD_ALIGN (SYSTEM_ALARM_ACE, Mask, 4)
+ TEST_FIELD_OFFSET(SYSTEM_ALARM_ACE, Mask, 4)
+ TEST_FIELD_SIZE (SYSTEM_ALARM_ACE, SidStart, 4)
+ TEST_FIELD_ALIGN (SYSTEM_ALARM_ACE, SidStart, 4)
+ TEST_FIELD_OFFSET(SYSTEM_ALARM_ACE, SidStart, 8)
}
static void test_pack_SYSTEM_AUDIT_ACE(void)
{
/* SYSTEM_AUDIT_ACE (pack 4) */
- TEST_TYPE(SYSTEM_AUDIT_ACE, 12, 4);
- TEST_FIELD(SYSTEM_AUDIT_ACE, ACE_HEADER, Header, 0, 4, 2);
- TEST_FIELD(SYSTEM_AUDIT_ACE, DWORD, Mask, 4, 4, 4);
- TEST_FIELD(SYSTEM_AUDIT_ACE, DWORD, SidStart, 8, 4, 4);
+ TEST_TYPE_SIZE (SYSTEM_AUDIT_ACE, 12)
+ TEST_TYPE_ALIGN (SYSTEM_AUDIT_ACE, 4)
+ TEST_FIELD_SIZE (SYSTEM_AUDIT_ACE, Header, 4)
+ TEST_FIELD_ALIGN (SYSTEM_AUDIT_ACE, Header, 2)
+ TEST_FIELD_OFFSET(SYSTEM_AUDIT_ACE, Header, 0)
+ TEST_FIELD_SIZE (SYSTEM_AUDIT_ACE, Mask, 4)
+ TEST_FIELD_ALIGN (SYSTEM_AUDIT_ACE, Mask, 4)
+ TEST_FIELD_OFFSET(SYSTEM_AUDIT_ACE, Mask, 4)
+ TEST_FIELD_SIZE (SYSTEM_AUDIT_ACE, SidStart, 4)
+ TEST_FIELD_ALIGN (SYSTEM_AUDIT_ACE, SidStart, 4)
+ TEST_FIELD_OFFSET(SYSTEM_AUDIT_ACE, SidStart, 8)
}
static void test_pack_TCHAR(void)
{
/* TCHAR */
- TEST_TYPE(TCHAR, 1, 1);
+ TEST_TYPE_SIZE (TCHAR, 1)
+ TEST_TYPE_ALIGN (TCHAR, 1)
}
static void test_pack_TOKEN_DEFAULT_DACL(void)
{
/* TOKEN_DEFAULT_DACL (pack 4) */
- TEST_TYPE(TOKEN_DEFAULT_DACL, 4, 4);
- TEST_FIELD(TOKEN_DEFAULT_DACL, PACL, DefaultDacl, 0, 4, 4);
+ TEST_TYPE_SIZE (TOKEN_DEFAULT_DACL, 4)
+ TEST_TYPE_ALIGN (TOKEN_DEFAULT_DACL, 4)
+ TEST_FIELD_SIZE (TOKEN_DEFAULT_DACL, DefaultDacl, 4)
+ TEST_FIELD_ALIGN (TOKEN_DEFAULT_DACL, DefaultDacl, 4)
+ TEST_FIELD_OFFSET(TOKEN_DEFAULT_DACL, DefaultDacl, 0)
}
static void test_pack_TOKEN_GROUPS(void)
{
/* TOKEN_GROUPS (pack 4) */
- TEST_TYPE(TOKEN_GROUPS, 12, 4);
- TEST_FIELD(TOKEN_GROUPS, DWORD, GroupCount, 0, 4, 4);
- TEST_FIELD(TOKEN_GROUPS, SID_AND_ATTRIBUTES[ANYSIZE_ARRAY], Groups, 4, 8, 4);
+ TEST_TYPE_SIZE (TOKEN_GROUPS, 12)
+ TEST_TYPE_ALIGN (TOKEN_GROUPS, 4)
+ TEST_FIELD_SIZE (TOKEN_GROUPS, GroupCount, 4)
+ TEST_FIELD_ALIGN (TOKEN_GROUPS, GroupCount, 4)
+ TEST_FIELD_OFFSET(TOKEN_GROUPS, GroupCount, 0)
+ TEST_FIELD_SIZE (TOKEN_GROUPS, Groups, 8)
+ TEST_FIELD_ALIGN (TOKEN_GROUPS, Groups, 4)
+ TEST_FIELD_OFFSET(TOKEN_GROUPS, Groups, 4)
}
static void test_pack_TOKEN_OWNER(void)
{
/* TOKEN_OWNER (pack 4) */
- TEST_TYPE(TOKEN_OWNER, 4, 4);
- TEST_FIELD(TOKEN_OWNER, PSID, Owner, 0, 4, 4);
+ TEST_TYPE_SIZE (TOKEN_OWNER, 4)
+ TEST_TYPE_ALIGN (TOKEN_OWNER, 4)
+ TEST_FIELD_SIZE (TOKEN_OWNER, Owner, 4)
+ TEST_FIELD_ALIGN (TOKEN_OWNER, Owner, 4)
+ TEST_FIELD_OFFSET(TOKEN_OWNER, Owner, 0)
}
static void test_pack_TOKEN_PRIMARY_GROUP(void)
{
/* TOKEN_PRIMARY_GROUP (pack 4) */
- TEST_TYPE(TOKEN_PRIMARY_GROUP, 4, 4);
- TEST_FIELD(TOKEN_PRIMARY_GROUP, PSID, PrimaryGroup, 0, 4, 4);
+ TEST_TYPE_SIZE (TOKEN_PRIMARY_GROUP, 4)
+ TEST_TYPE_ALIGN (TOKEN_PRIMARY_GROUP, 4)
+ TEST_FIELD_SIZE (TOKEN_PRIMARY_GROUP, PrimaryGroup, 4)
+ TEST_FIELD_ALIGN (TOKEN_PRIMARY_GROUP, PrimaryGroup, 4)
+ TEST_FIELD_OFFSET(TOKEN_PRIMARY_GROUP, PrimaryGroup, 0)
}
static void test_pack_TOKEN_PRIVILEGES(void)
{
/* TOKEN_PRIVILEGES (pack 4) */
- TEST_TYPE(TOKEN_PRIVILEGES, 16, 4);
- TEST_FIELD(TOKEN_PRIVILEGES, DWORD, PrivilegeCount, 0, 4, 4);
- TEST_FIELD(TOKEN_PRIVILEGES, LUID_AND_ATTRIBUTES[ANYSIZE_ARRAY], Privileges, 4, 12, 4);
+ TEST_TYPE_SIZE (TOKEN_PRIVILEGES, 16)
+ TEST_TYPE_ALIGN (TOKEN_PRIVILEGES, 4)
+ TEST_FIELD_SIZE (TOKEN_PRIVILEGES, PrivilegeCount, 4)
+ TEST_FIELD_ALIGN (TOKEN_PRIVILEGES, PrivilegeCount, 4)
+ TEST_FIELD_OFFSET(TOKEN_PRIVILEGES, PrivilegeCount, 0)
+ TEST_FIELD_SIZE (TOKEN_PRIVILEGES, Privileges, 12)
+ TEST_FIELD_ALIGN (TOKEN_PRIVILEGES, Privileges, 4)
+ TEST_FIELD_OFFSET(TOKEN_PRIVILEGES, Privileges, 4)
}
static void test_pack_TOKEN_SOURCE(void)
{
/* TOKEN_SOURCE (pack 4) */
- TEST_TYPE(TOKEN_SOURCE, 16, 4);
- TEST_FIELD(TOKEN_SOURCE, char[TOKEN_SOURCE_LENGTH], SourceName, 0, 8, 1);
- TEST_FIELD(TOKEN_SOURCE, LUID, SourceIdentifier, 8, 8, 4);
+ TEST_TYPE_SIZE (TOKEN_SOURCE, 16)
+ TEST_TYPE_ALIGN (TOKEN_SOURCE, 4)
+ TEST_FIELD_SIZE (TOKEN_SOURCE, SourceName, 8)
+ TEST_FIELD_ALIGN (TOKEN_SOURCE, SourceName, 1)
+ TEST_FIELD_OFFSET(TOKEN_SOURCE, SourceName, 0)
+ TEST_FIELD_SIZE (TOKEN_SOURCE, SourceIdentifier, 8)
+ TEST_FIELD_ALIGN (TOKEN_SOURCE, SourceIdentifier, 4)
+ TEST_FIELD_OFFSET(TOKEN_SOURCE, SourceIdentifier, 8)
}
static void test_pack_TOKEN_STATISTICS(void)
{
/* TOKEN_STATISTICS (pack 4) */
- TEST_FIELD(TOKEN_STATISTICS, LUID, TokenId, 0, 8, 4);
- TEST_FIELD(TOKEN_STATISTICS, LUID, AuthenticationId, 8, 8, 4);
- TEST_FIELD(TOKEN_STATISTICS, LARGE_INTEGER, ExpirationTime, 16, 8, 4);
+ TEST_FIELD_SIZE (TOKEN_STATISTICS, TokenId, 8)
+ TEST_FIELD_ALIGN (TOKEN_STATISTICS, TokenId, 4)
+ TEST_FIELD_OFFSET(TOKEN_STATISTICS, TokenId, 0)
+ TEST_FIELD_SIZE (TOKEN_STATISTICS, AuthenticationId, 8)
+ TEST_FIELD_ALIGN (TOKEN_STATISTICS, AuthenticationId, 4)
+ TEST_FIELD_OFFSET(TOKEN_STATISTICS, AuthenticationId, 8)
+ TEST_FIELD_SIZE (TOKEN_STATISTICS, ExpirationTime, 8)
+ TEST_FIELD_ALIGN (TOKEN_STATISTICS, ExpirationTime, 4)
+ TEST_FIELD_OFFSET(TOKEN_STATISTICS, ExpirationTime, 16)
}
static void test_pack_TOKEN_USER(void)
{
/* TOKEN_USER (pack 4) */
- TEST_TYPE(TOKEN_USER, 8, 4);
- TEST_FIELD(TOKEN_USER, SID_AND_ATTRIBUTES, User, 0, 8, 4);
+ TEST_TYPE_SIZE (TOKEN_USER, 8)
+ TEST_TYPE_ALIGN (TOKEN_USER, 4)
+ TEST_FIELD_SIZE (TOKEN_USER, User, 8)
+ TEST_FIELD_ALIGN (TOKEN_USER, User, 4)
+ TEST_FIELD_OFFSET(TOKEN_USER, User, 0)
}
static void test_pack_ULARGE_INTEGER(void)
@@ -1807,324 +2770,408 @@ static void test_pack_ULARGE_INTEGER(void)
static void test_pack_ULONGLONG(void)
{
/* ULONGLONG */
- TEST_TYPE(ULONGLONG, 8, 8);
- TEST_TYPE_UNSIGNED(ULONGLONG);
+ TEST_TYPE_SIZE (ULONGLONG, 8)
+ TEST_TYPE_ALIGN (ULONGLONG, 8)
+ TEST_TYPE_UNSIGNED(ULONGLONG)
}
static void test_pack_WAITORTIMERCALLBACKFUNC(void)
{
/* WAITORTIMERCALLBACKFUNC */
- TEST_TYPE(WAITORTIMERCALLBACKFUNC, 4, 4);
+ TEST_TYPE_SIZE (WAITORTIMERCALLBACKFUNC, 4)
+ TEST_TYPE_ALIGN (WAITORTIMERCALLBACKFUNC, 4)
}
static void test_pack_WCHAR(void)
{
/* WCHAR */
- TEST_TYPE(WCHAR, 2, 2);
- TEST_TYPE_UNSIGNED(WCHAR);
+ TEST_TYPE_SIZE (WCHAR, 2)
+ TEST_TYPE_ALIGN (WCHAR, 2)
+ TEST_TYPE_UNSIGNED(WCHAR)
}
static void test_pack_ATOM(void)
{
/* ATOM */
- TEST_TYPE(ATOM, 2, 2);
- TEST_TYPE_UNSIGNED(ATOM);
+ TEST_TYPE_SIZE (ATOM, 2)
+ TEST_TYPE_ALIGN (ATOM, 2)
+ TEST_TYPE_UNSIGNED(ATOM)
}
static void test_pack_BOOL(void)
{
/* BOOL */
- TEST_TYPE(BOOL, 4, 4);
- TEST_TYPE_SIGNED(BOOL);
+ TEST_TYPE_SIZE (BOOL, 4)
+ TEST_TYPE_ALIGN (BOOL, 4)
+ TEST_TYPE_SIGNED(BOOL)
}
static void test_pack_BYTE(void)
{
/* BYTE */
- TEST_TYPE(BYTE, 1, 1);
- TEST_TYPE_UNSIGNED(BYTE);
+ TEST_TYPE_SIZE (BYTE, 1)
+ TEST_TYPE_ALIGN (BYTE, 1)
+ TEST_TYPE_UNSIGNED(BYTE)
}
static void test_pack_COLORREF(void)
{
/* COLORREF */
- TEST_TYPE(COLORREF, 4, 4);
- TEST_TYPE_UNSIGNED(COLORREF);
+ TEST_TYPE_SIZE (COLORREF, 4)
+ TEST_TYPE_ALIGN (COLORREF, 4)
+ TEST_TYPE_UNSIGNED(COLORREF)
}
static void test_pack_DWORD(void)
{
/* DWORD */
- TEST_TYPE(DWORD, 4, 4);
- TEST_TYPE_UNSIGNED(DWORD);
+ TEST_TYPE_SIZE (DWORD, 4)
+ TEST_TYPE_ALIGN (DWORD, 4)
+ TEST_TYPE_UNSIGNED(DWORD)
}
static void test_pack_FARPROC(void)
{
/* FARPROC */
- TEST_TYPE(FARPROC, 4, 4);
+ TEST_TYPE_SIZE (FARPROC, 4)
+ TEST_TYPE_ALIGN (FARPROC, 4)
}
static void test_pack_FLOAT(void)
{
/* FLOAT */
- TEST_TYPE(FLOAT, 4, 4);
+ TEST_TYPE_SIZE (FLOAT, 4)
+ TEST_TYPE_ALIGN (FLOAT, 4)
}
static void test_pack_GLOBALHANDLE(void)
{
/* GLOBALHANDLE */
- TEST_TYPE(GLOBALHANDLE, 4, 4);
+ TEST_TYPE_SIZE (GLOBALHANDLE, 4)
+ TEST_TYPE_ALIGN (GLOBALHANDLE, 4)
}
static void test_pack_HCURSOR(void)
{
/* HCURSOR */
- TEST_TYPE(HCURSOR, 4, 4);
- TEST_TYPE_UNSIGNED(HCURSOR);
+ TEST_TYPE_SIZE (HCURSOR, 4)
+ TEST_TYPE_ALIGN (HCURSOR, 4)
}
static void test_pack_HFILE(void)
{
/* HFILE */
- TEST_TYPE(HFILE, 4, 4);
- TEST_TYPE_SIGNED(HFILE);
+ TEST_TYPE_SIZE (HFILE, 4)
+ TEST_TYPE_ALIGN (HFILE, 4)
+ TEST_TYPE_SIGNED(HFILE)
}
static void test_pack_HGDIOBJ(void)
{
/* HGDIOBJ */
- TEST_TYPE(HGDIOBJ, 4, 4);
+ TEST_TYPE_SIZE (HGDIOBJ, 4)
+ TEST_TYPE_ALIGN (HGDIOBJ, 4)
}
static void test_pack_HGLOBAL(void)
{
/* HGLOBAL */
- TEST_TYPE(HGLOBAL, 4, 4);
+ TEST_TYPE_SIZE (HGLOBAL, 4)
+ TEST_TYPE_ALIGN (HGLOBAL, 4)
}
static void test_pack_HLOCAL(void)
{
/* HLOCAL */
- TEST_TYPE(HLOCAL, 4, 4);
+ TEST_TYPE_SIZE (HLOCAL, 4)
+ TEST_TYPE_ALIGN (HLOCAL, 4)
}
static void test_pack_HMODULE(void)
{
/* HMODULE */
- TEST_TYPE(HMODULE, 4, 4);
- TEST_TYPE_UNSIGNED(HMODULE);
+ TEST_TYPE_SIZE (HMODULE, 4)
+ TEST_TYPE_ALIGN (HMODULE, 4)
}
static void test_pack_INT(void)
{
/* INT */
- TEST_TYPE(INT, 4, 4);
- TEST_TYPE_SIGNED(INT);
+ TEST_TYPE_SIZE (INT, 4)
+ TEST_TYPE_ALIGN (INT, 4)
+ TEST_TYPE_SIGNED(INT)
}
static void test_pack_LOCALHANDLE(void)
{
/* LOCALHANDLE */
- TEST_TYPE(LOCALHANDLE, 4, 4);
+ TEST_TYPE_SIZE (LOCALHANDLE, 4)
+ TEST_TYPE_ALIGN (LOCALHANDLE, 4)
}
static void test_pack_LPARAM(void)
{
/* LPARAM */
- TEST_TYPE(LPARAM, 4, 4);
+ TEST_TYPE_SIZE (LPARAM, 4)
+ TEST_TYPE_ALIGN (LPARAM, 4)
}
static void test_pack_LPCRECT(void)
{
/* LPCRECT */
- TEST_TYPE(LPCRECT, 4, 4);
- TEST_TYPE_POINTER(LPCRECT, 16, 4);
+ TEST_TYPE_SIZE (LPCRECT, 4)
+ TEST_TYPE_ALIGN (LPCRECT, 4)
+ TEST_TARGET_SIZE (LPCRECT, 16)
+ TEST_TARGET_ALIGN(LPCRECT, 4)
}
static void test_pack_LPCRECTL(void)
{
/* LPCRECTL */
- TEST_TYPE(LPCRECTL, 4, 4);
- TEST_TYPE_POINTER(LPCRECTL, 16, 4);
+ TEST_TYPE_SIZE (LPCRECTL, 4)
+ TEST_TYPE_ALIGN (LPCRECTL, 4)
+ TEST_TARGET_SIZE (LPCRECTL, 16)
+ TEST_TARGET_ALIGN(LPCRECTL, 4)
}
static void test_pack_LPCVOID(void)
{
/* LPCVOID */
- TEST_TYPE(LPCVOID, 4, 4);
+ TEST_TYPE_SIZE (LPCVOID, 4)
+ TEST_TYPE_ALIGN (LPCVOID, 4)
}
static void test_pack_LPPOINT(void)
{
/* LPPOINT */
- TEST_TYPE(LPPOINT, 4, 4);
- TEST_TYPE_POINTER(LPPOINT, 8, 4);
+ TEST_TYPE_SIZE (LPPOINT, 4)
+ TEST_TYPE_ALIGN (LPPOINT, 4)
+ TEST_TARGET_SIZE (LPPOINT, 8)
+ TEST_TARGET_ALIGN(LPPOINT, 4)
}
static void test_pack_LPRECT(void)
{
/* LPRECT */
- TEST_TYPE(LPRECT, 4, 4);
- TEST_TYPE_POINTER(LPRECT, 16, 4);
+ TEST_TYPE_SIZE (LPRECT, 4)
+ TEST_TYPE_ALIGN (LPRECT, 4)
+ TEST_TARGET_SIZE (LPRECT, 16)
+ TEST_TARGET_ALIGN(LPRECT, 4)
}
static void test_pack_LPRECTL(void)
{
/* LPRECTL */
- TEST_TYPE(LPRECTL, 4, 4);
- TEST_TYPE_POINTER(LPRECTL, 16, 4);
+ TEST_TYPE_SIZE (LPRECTL, 4)
+ TEST_TYPE_ALIGN (LPRECTL, 4)
+ TEST_TARGET_SIZE (LPRECTL, 16)
+ TEST_TARGET_ALIGN(LPRECTL, 4)
}
static void test_pack_LPSIZE(void)
{
/* LPSIZE */
- TEST_TYPE(LPSIZE, 4, 4);
- TEST_TYPE_POINTER(LPSIZE, 8, 4);
+ TEST_TYPE_SIZE (LPSIZE, 4)
+ TEST_TYPE_ALIGN (LPSIZE, 4)
+ TEST_TARGET_SIZE (LPSIZE, 8)
+ TEST_TARGET_ALIGN(LPSIZE, 4)
}
static void test_pack_LRESULT(void)
{
/* LRESULT */
- TEST_TYPE(LRESULT, 4, 4);
+ TEST_TYPE_SIZE (LRESULT, 4)
+ TEST_TYPE_ALIGN (LRESULT, 4)
}
static void test_pack_POINT(void)
{
/* POINT (pack 4) */
- TEST_TYPE(POINT, 8, 4);
- TEST_FIELD(POINT, LONG, x, 0, 4, 4);
- TEST_FIELD(POINT, LONG, y, 4, 4, 4);
+ TEST_TYPE_SIZE (POINT, 8)
+ TEST_TYPE_ALIGN (POINT, 4)
+ TEST_FIELD_SIZE (POINT, x, 4)
+ TEST_FIELD_ALIGN (POINT, x, 4)
+ TEST_FIELD_OFFSET(POINT, x, 0)
+ TEST_FIELD_SIZE (POINT, y, 4)
+ TEST_FIELD_ALIGN (POINT, y, 4)
+ TEST_FIELD_OFFSET(POINT, y, 4)
}
static void test_pack_POINTL(void)
{
/* POINTL (pack 4) */
- TEST_TYPE(POINTL, 8, 4);
- TEST_FIELD(POINTL, LONG, x, 0, 4, 4);
- TEST_FIELD(POINTL, LONG, y, 4, 4, 4);
+ TEST_TYPE_SIZE (POINTL, 8)
+ TEST_TYPE_ALIGN (POINTL, 4)
+ TEST_FIELD_SIZE (POINTL, x, 4)
+ TEST_FIELD_ALIGN (POINTL, x, 4)
+ TEST_FIELD_OFFSET(POINTL, x, 0)
+ TEST_FIELD_SIZE (POINTL, y, 4)
+ TEST_FIELD_ALIGN (POINTL, y, 4)
+ TEST_FIELD_OFFSET(POINTL, y, 4)
}
static void test_pack_PPOINT(void)
{
/* PPOINT */
- TEST_TYPE(PPOINT, 4, 4);
- TEST_TYPE_POINTER(PPOINT, 8, 4);
+ TEST_TYPE_SIZE (PPOINT, 4)
+ TEST_TYPE_ALIGN (PPOINT, 4)
+ TEST_TARGET_SIZE (PPOINT, 8)
+ TEST_TARGET_ALIGN(PPOINT, 4)
}
static void test_pack_PPOINTL(void)
{
/* PPOINTL */
- TEST_TYPE(PPOINTL, 4, 4);
- TEST_TYPE_POINTER(PPOINTL, 8, 4);
+ TEST_TYPE_SIZE (PPOINTL, 4)
+ TEST_TYPE_ALIGN (PPOINTL, 4)
+ TEST_TARGET_SIZE (PPOINTL, 8)
+ TEST_TARGET_ALIGN(PPOINTL, 4)
}
static void test_pack_PRECT(void)
{
/* PRECT */
- TEST_TYPE(PRECT, 4, 4);
- TEST_TYPE_POINTER(PRECT, 16, 4);
+ TEST_TYPE_SIZE (PRECT, 4)
+ TEST_TYPE_ALIGN (PRECT, 4)
+ TEST_TARGET_SIZE (PRECT, 16)
+ TEST_TARGET_ALIGN(PRECT, 4)
}
static void test_pack_PRECTL(void)
{
/* PRECTL */
- TEST_TYPE(PRECTL, 4, 4);
- TEST_TYPE_POINTER(PRECTL, 16, 4);
+ TEST_TYPE_SIZE (PRECTL, 4)
+ TEST_TYPE_ALIGN (PRECTL, 4)
+ TEST_TARGET_SIZE (PRECTL, 16)
+ TEST_TARGET_ALIGN(PRECTL, 4)
}
static void test_pack_PROC(void)
{
/* PROC */
- TEST_TYPE(PROC, 4, 4);
+ TEST_TYPE_SIZE (PROC, 4)
+ TEST_TYPE_ALIGN (PROC, 4)
}
static void test_pack_PSIZE(void)
{
/* PSIZE */
- TEST_TYPE(PSIZE, 4, 4);
- TEST_TYPE_POINTER(PSIZE, 8, 4);
+ TEST_TYPE_SIZE (PSIZE, 4)
+ TEST_TYPE_ALIGN (PSIZE, 4)
+ TEST_TARGET_SIZE (PSIZE, 8)
+ TEST_TARGET_ALIGN(PSIZE, 4)
}
static void test_pack_PSZ(void)
{
/* PSZ */
- TEST_TYPE(PSZ, 4, 4);
+ TEST_TYPE_SIZE (PSZ, 4)
+ TEST_TYPE_ALIGN (PSZ, 4)
}
static void test_pack_RECT(void)
{
/* RECT (pack 4) */
- TEST_TYPE(RECT, 16, 4);
- TEST_FIELD(RECT, LONG, left, 0, 4, 4);
- TEST_FIELD(RECT, LONG, top, 4, 4, 4);
- TEST_FIELD(RECT, LONG, right, 8, 4, 4);
- TEST_FIELD(RECT, LONG, bottom, 12, 4, 4);
+ TEST_TYPE_SIZE (RECT, 16)
+ TEST_TYPE_ALIGN (RECT, 4)
+ TEST_FIELD_SIZE (RECT, left, 4)
+ TEST_FIELD_ALIGN (RECT, left, 4)
+ TEST_FIELD_OFFSET(RECT, left, 0)
+ TEST_FIELD_SIZE (RECT, top, 4)
+ TEST_FIELD_ALIGN (RECT, top, 4)
+ TEST_FIELD_OFFSET(RECT, top, 4)
+ TEST_FIELD_SIZE (RECT, right, 4)
+ TEST_FIELD_ALIGN (RECT, right, 4)
+ TEST_FIELD_OFFSET(RECT, right, 8)
+ TEST_FIELD_SIZE (RECT, bottom, 4)
+ TEST_FIELD_ALIGN (RECT, bottom, 4)
+ TEST_FIELD_OFFSET(RECT, bottom, 12)
}
static void test_pack_RECTL(void)
{
/* RECTL (pack 4) */
- TEST_TYPE(RECTL, 16, 4);
- TEST_FIELD(RECTL, LONG, left, 0, 4, 4);
- TEST_FIELD(RECTL, LONG, top, 4, 4, 4);
- TEST_FIELD(RECTL, LONG, right, 8, 4, 4);
- TEST_FIELD(RECTL, LONG, bottom, 12, 4, 4);
+ TEST_TYPE_SIZE (RECTL, 16)
+ TEST_TYPE_ALIGN (RECTL, 4)
+ TEST_FIELD_SIZE (RECTL, left, 4)
+ TEST_FIELD_ALIGN (RECTL, left, 4)
+ TEST_FIELD_OFFSET(RECTL, left, 0)
+ TEST_FIELD_SIZE (RECTL, top, 4)
+ TEST_FIELD_ALIGN (RECTL, top, 4)
+ TEST_FIELD_OFFSET(RECTL, top, 4)
+ TEST_FIELD_SIZE (RECTL, right, 4)
+ TEST_FIELD_ALIGN (RECTL, right, 4)
+ TEST_FIELD_OFFSET(RECTL, right, 8)
+ TEST_FIELD_SIZE (RECTL, bottom, 4)
+ TEST_FIELD_ALIGN (RECTL, bottom, 4)
+ TEST_FIELD_OFFSET(RECTL, bottom, 12)
}
static void test_pack_SIZE(void)
{
/* SIZE (pack 4) */
- TEST_TYPE(SIZE, 8, 4);
- TEST_FIELD(SIZE, LONG, cx, 0, 4, 4);
- TEST_FIELD(SIZE, LONG, cy, 4, 4, 4);
+ TEST_TYPE_SIZE (SIZE, 8)
+ TEST_TYPE_ALIGN (SIZE, 4)
+ TEST_FIELD_SIZE (SIZE, cx, 4)
+ TEST_FIELD_ALIGN (SIZE, cx, 4)
+ TEST_FIELD_OFFSET(SIZE, cx, 0)
+ TEST_FIELD_SIZE (SIZE, cy, 4)
+ TEST_FIELD_ALIGN (SIZE, cy, 4)
+ TEST_FIELD_OFFSET(SIZE, cy, 4)
}
static void test_pack_SIZEL(void)
{
/* SIZEL */
- TEST_TYPE(SIZEL, 8, 4);
+ TEST_TYPE_SIZE (SIZEL, 8)
+ TEST_TYPE_ALIGN (SIZEL, 4)
}
static void test_pack_UCHAR(void)
{
/* UCHAR */
- TEST_TYPE(UCHAR, 1, 1);
- TEST_TYPE_UNSIGNED(UCHAR);
+ TEST_TYPE_SIZE (UCHAR, 1)
+ TEST_TYPE_ALIGN (UCHAR, 1)
+ TEST_TYPE_UNSIGNED(UCHAR)
}
static void test_pack_UINT(void)
{
/* UINT */
- TEST_TYPE(UINT, 4, 4);
- TEST_TYPE_UNSIGNED(UINT);
+ TEST_TYPE_SIZE (UINT, 4)
+ TEST_TYPE_ALIGN (UINT, 4)
+ TEST_TYPE_UNSIGNED(UINT)
}
static void test_pack_ULONG(void)
{
/* ULONG */
- TEST_TYPE(ULONG, 4, 4);
- TEST_TYPE_UNSIGNED(ULONG);
+ TEST_TYPE_SIZE (ULONG, 4)
+ TEST_TYPE_ALIGN (ULONG, 4)
+ TEST_TYPE_UNSIGNED(ULONG)
}
static void test_pack_USHORT(void)
{
/* USHORT */
- TEST_TYPE(USHORT, 2, 2);
- TEST_TYPE_UNSIGNED(USHORT);
+ TEST_TYPE_SIZE (USHORT, 2)
+ TEST_TYPE_ALIGN (USHORT, 2)
+ TEST_TYPE_UNSIGNED(USHORT)
}
static void test_pack_WORD(void)
{
/* WORD */
- TEST_TYPE(WORD, 2, 2);
- TEST_TYPE_UNSIGNED(WORD);
+ TEST_TYPE_SIZE (WORD, 2)
+ TEST_TYPE_ALIGN (WORD, 2)
+ TEST_TYPE_UNSIGNED(WORD)
}
static void test_pack_WPARAM(void)
{
/* WPARAM */
- TEST_TYPE(WPARAM, 4, 4);
+ TEST_TYPE_SIZE (WPARAM, 4)
+ TEST_TYPE_ALIGN (WPARAM, 4)
}
static void test_pack(void)
@@ -2387,5 +3434,9 @@ static void test_pack(void)
START_TEST(generated)
{
+#ifdef _WIN64
+ ok(0, "The type size / alignment tests don't support Win64 yet\n");
+#else
test_pack();
+#endif
}
diff --git a/rostests/winetests/ntdll/large_int.c b/rostests/winetests/ntdll/large_int.c
index bec8ad9bf8f..69de5b78947 100755
--- a/rostests/winetests/ntdll/large_int.c
+++ b/rostests/winetests/ntdll/large_int.c
@@ -286,6 +286,14 @@ static void one_RtlInt64ToUnicodeString_test(int test_num, const largeint2str_t
STRING ansi_str;
NTSTATUS result;
+#ifdef _WIN64
+ if (largeint2str->value >> 32 == 0xffffffff) /* this crashes on 64-bit Vista */
+ {
+ skip( "Value ffffffff%08x broken on 64-bit windows\n", (DWORD)largeint2str->value );
+ return;
+ }
+#endif
+
for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) {
expected_str_Buffer[pos] = largeint2str->Buffer[pos];
} /* for */
@@ -367,6 +375,14 @@ static void one_RtlLargeIntegerToChar_test(int test_num, const largeint2str_t *l
char dest_str[LARGE_STRI_BUFFER_LENGTH + 1];
ULONGLONG value;
+#ifdef _WIN64
+ if (largeint2str->value >> 32 == 0xffffffff) /* this crashes on 64-bit Vista */
+ {
+ skip( "Value ffffffff%08x broken on 64-bit windows\n", (DWORD)largeint2str->value );
+ return;
+ }
+#endif
+
memset(dest_str, '-', LARGE_STRI_BUFFER_LENGTH);
dest_str[LARGE_STRI_BUFFER_LENGTH] = '\0';
value = largeint2str->value;
diff --git a/rostests/winetests/ntdll/om.c b/rostests/winetests/ntdll/om.c
index bde6032fdfb..ed3eb46e85e 100644
--- a/rostests/winetests/ntdll/om.c
+++ b/rostests/winetests/ntdll/om.c
@@ -536,6 +536,7 @@ static void test_symboliclink(void)
IO_STATUS_BLOCK iosb;
/* No name and/or no attributes */
+ InitializeObjectAttributes(&attr, NULL, 0, 0, NULL);
SYMLNK_TEST_CREATE_OPEN_FAILURE2(NULL, "", "", STATUS_ACCESS_VIOLATION, STATUS_INVALID_PARAMETER)
status = pNtCreateSymbolicLinkObject(&h, SYMBOLIC_LINK_QUERY, NULL, NULL);
diff --git a/rostests/winetests/ntdll/port.c b/rostests/winetests/ntdll/port.c
index c63820a37fd..0795b4ce307 100644
--- a/rostests/winetests/ntdll/port.c
+++ b/rostests/winetests/ntdll/port.c
@@ -62,8 +62,8 @@ typedef struct _LPC_MESSAGE
USHORT MessageType;
USHORT VirtualRangesOffset;
CLIENT_ID ClientId;
- ULONG MessageId;
- ULONG SectionSize;
+ ULONG_PTR MessageId;
+ ULONG_PTR SectionSize;
UCHAR Data[ANYSIZE_ARRAY];
} LPC_MESSAGE, *PLPC_MESSAGE;
@@ -90,10 +90,7 @@ static const WCHAR PORTNAME[] = {'\\','M','y','P','o','r','t',0};
#define MAX_MESSAGE_LEN 30
-UNICODE_STRING port;
-static char selfname[MAX_PATH];
-static int myARGC;
-static char** myARGV;
+static UNICODE_STRING port;
/* Function pointers for ntdll calls */
static HMODULE hntdll = 0;
@@ -155,10 +152,10 @@ static void ProcessConnectionRequest(PLPC_MESSAGE LpcMessage, PHANDLE pAcceptPor
ok(!*LpcMessage->Data, "Expected empty string!\n");
status = pNtAcceptConnectPort(pAcceptPortHandle, 0, LpcMessage, 1, 0, NULL);
- ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status);
+ ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %x\n", status);
status = pNtCompleteConnectPort(*pAcceptPortHandle);
- ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status);
+ ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %x\n", status);
}
static void ProcessLpcRequest(HANDLE PortHandle, PLPC_MESSAGE LpcMessage)
@@ -173,7 +170,7 @@ static void ProcessLpcRequest(HANDLE PortHandle, PLPC_MESSAGE LpcMessage)
lstrcpy((LPSTR)LpcMessage->Data, REPLY);
status = pNtReplyPort(PortHandle, LpcMessage);
- ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status);
+ ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %x\n", status);
ok(LpcMessage->MessageType == LPC_REQUEST,
"Expected LPC_REQUEST, got %d\n", LpcMessage->MessageType);
ok(!lstrcmp((LPSTR)LpcMessage->Data, REPLY),
@@ -194,11 +191,11 @@ static DWORD WINAPI test_ports_client(LPVOID arg)
sqos.EffectiveOnly = TRUE;
status = pNtConnectPort(&PortHandle, &port, &sqos, 0, 0, &len, NULL, NULL);
- todo_wine ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status);
+ todo_wine ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %x\n", status);
if (status != STATUS_SUCCESS) return 1;
status = pNtRegisterThreadTerminatePort(PortHandle);
- ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status);
+ ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %x\n", status);
size = FIELD_OFFSET(LPC_MESSAGE, Data) + MAX_MESSAGE_LEN;
LpcMessage = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
@@ -209,7 +206,7 @@ static DWORD WINAPI test_ports_client(LPVOID arg)
lstrcpy((LPSTR)LpcMessage->Data, REQUEST1);
status = pNtRequestPort(PortHandle, LpcMessage);
- ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status);
+ ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %x\n", status);
ok(LpcMessage->MessageType == 0, "Expected 0, got %d\n", LpcMessage->MessageType);
ok(!lstrcmp((LPSTR)LpcMessage->Data, REQUEST1),
"Expected %s, got %s\n", REQUEST1, LpcMessage->Data);
@@ -222,7 +219,7 @@ static DWORD WINAPI test_ports_client(LPVOID arg)
/* Send the message and wait for the reply */
status = pNtRequestWaitReplyPort(PortHandle, LpcMessage, out);
- ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status);
+ ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %x\n", status);
ok(!lstrcmp((LPSTR)out->Data, REPLY), "Expected %s, got %s\n", REPLY, out->Data);
ok(out->MessageType == LPC_REPLY, "Expected LPC_REPLY, got %d\n", out->MessageType);
@@ -232,34 +229,14 @@ static DWORD WINAPI test_ports_client(LPVOID arg)
return 0;
}
-static void test_ports_server(void)
+static void test_ports_server( HANDLE PortHandle )
{
- OBJECT_ATTRIBUTES obj;
- HANDLE PortHandle;
HANDLE AcceptPortHandle;
PLPC_MESSAGE LpcMessage;
ULONG size;
NTSTATUS status;
BOOL done = FALSE;
- pRtlInitUnicodeString(&port, PORTNAME);
-
- memset(&obj, 0, sizeof(OBJECT_ATTRIBUTES));
- obj.Length = sizeof(OBJECT_ATTRIBUTES);
- obj.ObjectName = &port;
-
- status = pNtCreatePort(&PortHandle, &obj, 100, 100, 0);
- if (status == STATUS_ACCESS_DENIED)
- {
- skip("Not enough rights\n");
- return;
- }
- todo_wine
- {
- ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status);
- }
- if (status != STATUS_SUCCESS) return;
-
size = FIELD_OFFSET(LPC_MESSAGE, Data) + MAX_MESSAGE_LEN;
LpcMessage = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
@@ -308,20 +285,32 @@ static void test_ports_server(void)
START_TEST(port)
{
- HANDLE thread;
- DWORD id;
+ OBJECT_ATTRIBUTES obj;
+ HANDLE port_handle;
+ NTSTATUS status;
if (!init_function_ptrs())
return;
- myARGC = winetest_get_mainargs(&myARGV);
- strcpy(selfname, myARGV[0]);
+ pRtlInitUnicodeString(&port, PORTNAME);
- thread = CreateThread(NULL, 0, test_ports_client, NULL, 0, &id);
- ok(thread != NULL, "Expected non-NULL thread handle!\n");
+ memset(&obj, 0, sizeof(OBJECT_ATTRIBUTES));
+ obj.Length = sizeof(OBJECT_ATTRIBUTES);
+ obj.ObjectName = &port;
- test_ports_server();
- CloseHandle(thread);
+ status = pNtCreatePort(&port_handle, &obj, 100, 100, 0);
+ if (status == STATUS_ACCESS_DENIED) skip("Not enough rights\n");
+ else todo_wine ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %d\n", status);
+ if (status == STATUS_SUCCESS)
+ {
+ DWORD id;
+ HANDLE thread = CreateThread(NULL, 0, test_ports_client, NULL, 0, &id);
+ ok(thread != NULL, "Expected non-NULL thread handle!\n");
+
+ test_ports_server( port_handle );
+ ok( WaitForSingleObject( thread, 10000 ) == 0, "thread didn't exit\n" );
+ CloseHandle(thread);
+ }
FreeLibrary(hntdll);
}
diff --git a/rostests/winetests/ntdll/reg.c b/rostests/winetests/ntdll/reg.c
index 0e25c0639ec..730f818e88d 100755
--- a/rostests/winetests/ntdll/reg.c
+++ b/rostests/winetests/ntdll/reg.c
@@ -373,7 +373,8 @@ static void test_NtCreateKey(void)
/* All NULL */
status = pNtCreateKey(NULL, 0, NULL, 0, 0, 0, 0);
- ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got: 0x%08x\n", status);
+ ok(status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_PARAMETER,
+ "Expected STATUS_ACCESS_VIOLATION or STATUS_INVALID_PARAMETER, got: 0x%08x\n", status);
/* Only the key */
status = pNtCreateKey(&key, 0, NULL, 0, 0, 0, 0);
@@ -382,7 +383,8 @@ static void test_NtCreateKey(void)
/* Only accessmask */
status = pNtCreateKey(NULL, am, NULL, 0, 0, 0, 0);
- ok(status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got: 0x%08x\n", status);
+ ok(status == STATUS_ACCESS_VIOLATION || status == STATUS_INVALID_PARAMETER,
+ "Expected STATUS_ACCESS_VIOLATION or STATUS_INVALID_PARAMETER, got: 0x%08x\n", status);
/* Key and accessmask */
status = pNtCreateKey(&key, am, NULL, 0, 0, 0, 0);
@@ -556,7 +558,7 @@ static void test_NtQueryValueKey(void)
status = pNtQueryValueKey(key, &ValName, KeyValuePartialInformation, NULL, 0, &len);
todo_wine ok(status == STATUS_BUFFER_TOO_SMALL, "NtQueryValueKey should have returned STATUS_BUFFER_TOO_SMALL instead of 0x%08x\n", status);
partial_info = HeapAlloc(GetProcessHeap(), 0, len+1);
- memset((BYTE*)partial_info, 0xbd, len+1);
+ memset(partial_info, 0xbd, len+1);
status = pNtQueryValueKey(key, &ValName, KeyValuePartialInformation, partial_info, len, &len);
ok(status == STATUS_SUCCESS, "NtQueryValueKey should have returned STATUS_SUCCESS instead of 0x%08x\n", status);
ok(partial_info->TitleIndex == 0, "NtQueryValueKey returned wrong TitleIndex %d\n", partial_info->TitleIndex);
diff --git a/rostests/winetests/ntdll/rtl.c b/rostests/winetests/ntdll/rtl.c
index bcf63b4db48..7beef6d9865 100755
--- a/rostests/winetests/ntdll/rtl.c
+++ b/rostests/winetests/ntdll/rtl.c
@@ -571,7 +571,7 @@ static void test_RtlUniform(void)
}
-static ULONG WINAPI my_RtlRandom(PULONG seed)
+static ULONG my_RtlRandom(PULONG seed)
{
static ULONG saved_value[128] =
{ /* 0 */ 0x4c8bc0aa, 0x4c022957, 0x2232827a, 0x2f1e7626, 0x7f8bdafb, 0x5c37d02a, 0x0ab48f72, 0x2f0c4ffa,
diff --git a/rostests/winetests/ntdll/rtlstr.c b/rostests/winetests/ntdll/rtlstr.c
index f4442730221..e1d4be7ea83 100755
--- a/rostests/winetests/ntdll/rtlstr.c
+++ b/rostests/winetests/ntdll/rtlstr.c
@@ -191,7 +191,7 @@ static void test_RtlInitUnicodeStringEx(void)
UNICODE_STRING uni;
NTSTATUS result;
- teststring2 = (WCHAR *) malloc((TESTSTRING2_LEN + 1) * sizeof(WCHAR));
+ teststring2 = malloc((TESTSTRING2_LEN + 1) * sizeof(WCHAR));
memset(teststring2, 'X', TESTSTRING2_LEN * sizeof(WCHAR));
teststring2[TESTSTRING2_LEN] = '\0';
diff --git a/rostests/winetests/ntdll/string.c b/rostests/winetests/ntdll/string.c
index 205a880d670..16c11926016 100755
--- a/rostests/winetests/ntdll/string.c
+++ b/rostests/winetests/ntdll/string.c
@@ -591,20 +591,23 @@ static void one_i64toa_test(int test_num, const ulonglong2str_t *ulonglong2str)
dest_str[LARGE_STRI_BUFFER_LENGTH] = '\0';
result = p_i64toa(ulonglong2str->value, dest_str, ulonglong2str->base);
ok(result == dest_str,
- "(test %d): _i64toa(%Lu, [out], %d) has result %p, expected: %p\n",
- test_num, ulonglong2str->value, ulonglong2str->base, result, dest_str);
+ "(test %d): _i64toa(%08x%08x, [out], %d) has result %p, expected: %p\n",
+ test_num, (DWORD)(ulonglong2str->value >> 32), (DWORD)ulonglong2str->value,
+ ulonglong2str->base, result, dest_str);
if (ulonglong2str->mask & 0x04) {
if (memcmp(dest_str, ulonglong2str->Buffer, LARGE_STRI_BUFFER_LENGTH) != 0) {
if (memcmp(dest_str, ulonglong2str[1].Buffer, LARGE_STRI_BUFFER_LENGTH) != 0) {
ok(memcmp(dest_str, ulonglong2str->Buffer, LARGE_STRI_BUFFER_LENGTH) == 0,
- "(test %d): _i64toa(%Lu, [out], %d) assigns string \"%s\", expected: \"%s\"\n",
- test_num, ulonglong2str->value, ulonglong2str->base, dest_str, ulonglong2str->Buffer);
+ "(test %d): _i64toa(%08x%08x, [out], %d) assigns string \"%s\", expected: \"%s\"\n",
+ test_num, (DWORD)(ulonglong2str->value >> 32), (DWORD)ulonglong2str->value,
+ ulonglong2str->base, dest_str, ulonglong2str->Buffer);
} /* if */
} /* if */
} else {
ok(memcmp(dest_str, ulonglong2str->Buffer, LARGE_STRI_BUFFER_LENGTH) == 0,
- "(test %d): _i64toa(%Lu, [out], %d) assigns string \"%s\", expected: \"%s\"\n",
- test_num, ulonglong2str->value, ulonglong2str->base, dest_str, ulonglong2str->Buffer);
+ "(test %d): _i64toa(%08x%08x, [out], %d) assigns string \"%s\", expected: \"%s\"\n",
+ test_num, (DWORD)(ulonglong2str->value >> 32), (DWORD)ulonglong2str->value,
+ ulonglong2str->base, dest_str, ulonglong2str->Buffer);
} /* if */
}
@@ -618,11 +621,13 @@ static void one_ui64toa_test(int test_num, const ulonglong2str_t *ulonglong2str)
dest_str[LARGE_STRI_BUFFER_LENGTH] = '\0';
result = p_ui64toa(ulonglong2str->value, dest_str, ulonglong2str->base);
ok(result == dest_str,
- "(test %d): _ui64toa(%Lu, [out], %d) has result %p, expected: %p\n",
- test_num, ulonglong2str->value, ulonglong2str->base, result, dest_str);
+ "(test %d): _ui64toa(%08x%08x, [out], %d) has result %p, expected: %p\n",
+ test_num, (DWORD)(ulonglong2str->value >> 32), (DWORD)ulonglong2str->value,
+ ulonglong2str->base, result, dest_str);
ok(memcmp(dest_str, ulonglong2str->Buffer, LARGE_STRI_BUFFER_LENGTH) == 0,
- "(test %d): _ui64toa(%Lu, [out], %d) assigns string \"%s\", expected: \"%s\"\n",
- test_num, ulonglong2str->value, ulonglong2str->base, dest_str, ulonglong2str->Buffer);
+ "(test %d): _ui64toa(%08x%08x, [out], %d) assigns string \"%s\", expected: \"%s\"\n",
+ test_num, (DWORD)(ulonglong2str->value >> 32), (DWORD)ulonglong2str->value,
+ ulonglong2str->base, dest_str, ulonglong2str->Buffer);
}
diff --git a/rostests/winetests/odbccp32/misc.c b/rostests/winetests/odbccp32/misc.c
index ba8e5f45f87..044846cc7d4 100644
--- a/rostests/winetests/odbccp32/misc.c
+++ b/rostests/winetests/odbccp32/misc.c
@@ -112,14 +112,24 @@ static void test_SQLInstallDriverManager(void)
/* Length OK */
bool_ret = SQLInstallDriverManager(target_path, MAX_PATH, NULL);
sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
- ok(bool_ret, "SQLInstallDriverManager unexpectedly failed\n");
- ok(sql_ret == SQL_NO_DATA, "Expected SQL_NO_DATA, got %d\n", sql_ret);
+ ok(bool_ret, "SQLInstallDriverManager unexpectedly failed: %d\n",
+ error_code);
+ if (bool_ret)
+ ok(sql_ret == SQL_NO_DATA, "Expected SQL_NO_DATA, got %d\n", sql_ret);
+ else
+ ok(sql_ret == SQL_SUCCESS_WITH_INFO,
+ "Expected SQL_SUCCESS_WITH_INFO, got %d\n", sql_ret);
path_out = 0xcafe;
bool_ret = SQLInstallDriverManager(target_path, MAX_PATH, &path_out);
sql_ret = SQLInstallerErrorW(1, &error_code, NULL, 0, NULL);
- ok(bool_ret, "SQLInstallDriverManager unexpectedly failed\n");
- ok(sql_ret == SQL_NO_DATA, "Expected SQL_NO_DATA, got %d\n", sql_ret);
+ ok(bool_ret, "SQLInstallDriverManager unexpectedly failed: %d\n",
+ error_code);
+ if (bool_ret)
+ ok(sql_ret == SQL_NO_DATA, "Expected SQL_NO_DATA, got %d\n", sql_ret);
+ else
+ ok(sql_ret == SQL_SUCCESS_WITH_INFO,
+ "Expected SQL_SUCCESS_WITH_INFO, got %d\n", sql_ret);
/* path_out should in practice be less than 0xcafe */
ok(path_out != 0xcafe, "Expected path_out to show the correct amount of bytes\n");
}
diff --git a/rostests/winetests/ole32/clipboard.c b/rostests/winetests/ole32/clipboard.c
index a4f8a62d6cb..f06a4823ac0 100644
--- a/rostests/winetests/ole32/clipboard.c
+++ b/rostests/winetests/ole32/clipboard.c
@@ -19,8 +19,10 @@
*/
#define COBJMACROS
+#define NONAMELESSUNION
#include
+#include
#include "windef.h"
#include "winbase.h"
@@ -37,6 +39,15 @@
(fe).lindex=-1;\
};
+static inline char *dump_fmtetc(FORMATETC *fmt)
+{
+ static char buf[100];
+
+ snprintf(buf, sizeof(buf), "cf %04x ptd %p aspect %x lindex %d tymed %x",
+ fmt->cfFormat, fmt->ptd, fmt->dwAspect, fmt->lindex, fmt->tymed);
+ return buf;
+}
+
typedef struct DataObjectImpl {
const IDataObjectVtbl *lpVtbl;
LONG ref;
@@ -45,6 +56,8 @@ typedef struct DataObjectImpl {
UINT fmtetc_cnt;
HANDLE text;
+ IStream *stm;
+ IStorage *stg;
} DataObjectImpl;
typedef struct EnumFormatImpl {
@@ -59,6 +72,10 @@ typedef struct EnumFormatImpl {
static BOOL expect_DataObjectImpl_QueryGetData = TRUE;
static ULONG DataObjectImpl_GetData_calls = 0;
+static ULONG DataObjectImpl_GetDataHere_calls = 0;
+static ULONG DataObjectImpl_EnumFormatEtc_calls = 0;
+
+static UINT cf_stream, cf_storage, cf_global, cf_another, cf_onemore;
static HRESULT EnumFormatImpl_Create(FORMATETC *fmtetc, UINT size, LPENUMFORMATETC *lplpformatetc);
@@ -99,15 +116,23 @@ static HRESULT WINAPI EnumFormatImpl_Next(IEnumFORMATETC *iface, ULONG celt,
FORMATETC *rgelt, ULONG *pceltFetched)
{
EnumFormatImpl *This = (EnumFormatImpl*)iface;
- ULONG count = 0;
+ ULONG count, i;
+
+ trace("next: count %d cur %d\n", celt, This->cur);
if(!rgelt)
return E_INVALIDARG;
- count = min(celt, This->fmtetc_cnt-This->cur);
- if(count > 0) {
- memcpy(rgelt, This->fmtetc+This->cur, count*sizeof(FORMATETC));
- This->cur += count;
+ count = min(celt, This->fmtetc_cnt - This->cur);
+ for(i = 0; i < count; i++, This->cur++, rgelt++)
+ {
+ *rgelt = This->fmtetc[This->cur];
+ if(rgelt->ptd)
+ {
+ DWORD size = This->fmtetc[This->cur].ptd->tdSize;
+ rgelt->ptd = CoTaskMemAlloc(size);
+ memcpy(rgelt->ptd, This->fmtetc[This->cur].ptd, size);
+ }
}
if(pceltFetched)
*pceltFetched = count;
@@ -184,9 +209,15 @@ static ULONG WINAPI DataObjectImpl_Release(IDataObject* iface)
DataObjectImpl *This = (DataObjectImpl*)iface;
ULONG ref = InterlockedDecrement(&This->ref);
- if(!ref) {
+ if(!ref)
+ {
+ int i;
if(This->text) GlobalFree(This->text);
- if(This->fmtetc) GlobalFree(This->fmtetc);
+ for(i = 0; i < This->fmtetc_cnt; i++)
+ HeapFree(GetProcessHeap(), 0, This->fmtetc[i].ptd);
+ HeapFree(GetProcessHeap(), 0, This->fmtetc);
+ if(This->stm) IStream_Release(This->stm);
+ if(This->stg) IStorage_Release(This->stg);
HeapFree(GetProcessHeap(), 0, This);
}
@@ -196,29 +227,56 @@ static ULONG WINAPI DataObjectImpl_Release(IDataObject* iface)
static HRESULT WINAPI DataObjectImpl_GetData(IDataObject* iface, FORMATETC *pformatetc, STGMEDIUM *pmedium)
{
DataObjectImpl *This = (DataObjectImpl*)iface;
+ UINT i;
+ BOOL foundFormat = FALSE;
+
+ trace("getdata: %s\n", dump_fmtetc(pformatetc));
DataObjectImpl_GetData_calls++;
if(pformatetc->lindex != -1)
return DV_E_FORMATETC;
- if(!(pformatetc->tymed & TYMED_HGLOBAL))
- return DV_E_TYMED;
+ for(i = 0; i < This->fmtetc_cnt; i++)
+ {
+ if(This->fmtetc[i].cfFormat == pformatetc->cfFormat)
+ {
+ foundFormat = TRUE;
+ if(This->fmtetc[i].tymed & pformatetc->tymed)
+ {
+ pmedium->pUnkForRelease = (LPUNKNOWN)iface;
+ IUnknown_AddRef(pmedium->pUnkForRelease);
- if(This->text && pformatetc->cfFormat == CF_TEXT)
- U(*pmedium).hGlobal = This->text;
- else
- return DV_E_FORMATETC;
+ if(pformatetc->cfFormat == CF_TEXT || pformatetc->cfFormat == cf_global)
+ {
+ pmedium->tymed = TYMED_HGLOBAL;
+ U(*pmedium).hGlobal = This->text;
+ }
+ else if(pformatetc->cfFormat == cf_stream)
+ {
+ pmedium->tymed = TYMED_ISTREAM;
+ IStream_AddRef(This->stm);
+ U(*pmedium).pstm = This->stm;
+ }
+ else if(pformatetc->cfFormat == cf_storage || pformatetc->cfFormat == cf_another)
+ {
+ pmedium->tymed = TYMED_ISTORAGE;
+ IStorage_AddRef(This->stg);
+ U(*pmedium).pstg = This->stg;
+ }
+ return S_OK;
+ }
+ }
+ }
- pmedium->tymed = TYMED_HGLOBAL;
- pmedium->pUnkForRelease = (LPUNKNOWN)iface;
- IUnknown_AddRef(pmedium->pUnkForRelease);
- return S_OK;
+ return foundFormat ? DV_E_TYMED : DV_E_FORMATETC;
}
static HRESULT WINAPI DataObjectImpl_GetDataHere(IDataObject* iface, FORMATETC *pformatetc, STGMEDIUM *pmedium)
{
- ok(0, "unexpected call\n");
+ trace("getdatahere: %s\n", dump_fmtetc(pformatetc));
+ DataObjectImpl_GetDataHere_calls++;
+
return E_NOTIMPL;
}
@@ -228,6 +286,7 @@ static HRESULT WINAPI DataObjectImpl_QueryGetData(IDataObject* iface, FORMATETC
UINT i;
BOOL foundFormat = FALSE;
+ trace("querygetdata: %s\n", dump_fmtetc(pformatetc));
if (!expect_DataObjectImpl_QueryGetData)
ok(0, "unexpected call to DataObjectImpl_QueryGetData\n");
@@ -263,6 +322,8 @@ static HRESULT WINAPI DataObjectImpl_EnumFormatEtc(IDataObject* iface, DWORD dwD
{
DataObjectImpl *This = (DataObjectImpl*)iface;
+ DataObjectImpl_EnumFormatEtc_calls++;
+
if(dwDirection != DATADIR_GET) {
ok(0, "unexpected direction %d\n", dwDirection);
return E_NOTIMPL;
@@ -315,6 +376,8 @@ static HRESULT DataObjectImpl_CreateText(LPCSTR text, LPDATAOBJECT *lplpdataobj)
obj->text = GlobalAlloc(GMEM_MOVEABLE, strlen(text) + 1);
strcpy(GlobalLock(obj->text), text);
GlobalUnlock(obj->text);
+ obj->stm = NULL;
+ obj->stg = NULL;
obj->fmtetc_cnt = 1;
obj->fmtetc = HeapAlloc(GetProcessHeap(), 0, obj->fmtetc_cnt*sizeof(FORMATETC));
@@ -324,6 +387,59 @@ static HRESULT DataObjectImpl_CreateText(LPCSTR text, LPDATAOBJECT *lplpdataobj)
return S_OK;
}
+const char *cmpl_stm_data = "complex stream";
+const char *cmpl_text_data = "complex text";
+const WCHAR device_name[] = {'m','y','d','e','v',0};
+
+static HRESULT DataObjectImpl_CreateComplex(LPDATAOBJECT *lplpdataobj)
+{
+ DataObjectImpl *obj;
+ ILockBytes *lbs;
+ DEVMODEW dm;
+
+ obj = HeapAlloc(GetProcessHeap(), 0, sizeof(DataObjectImpl));
+ obj->lpVtbl = &VT_DataObjectImpl;
+ obj->ref = 1;
+ obj->text = GlobalAlloc(GMEM_MOVEABLE, strlen(cmpl_text_data) + 1);
+ strcpy(GlobalLock(obj->text), cmpl_text_data);
+ GlobalUnlock(obj->text);
+ CreateStreamOnHGlobal(NULL, TRUE, &obj->stm);
+ IStream_Write(obj->stm, cmpl_stm_data, strlen(cmpl_stm_data), NULL);
+
+ CreateILockBytesOnHGlobal(NULL, TRUE, &lbs);
+ StgCreateDocfileOnILockBytes(lbs, STGM_CREATE|STGM_SHARE_EXCLUSIVE|STGM_READWRITE, 0, &obj->stg);
+ ILockBytes_Release(lbs);
+
+ obj->fmtetc_cnt = 8;
+ /* zeroing here since FORMATETC has a hole in it, and it's confusing to have this uninitialised. */
+ obj->fmtetc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, obj->fmtetc_cnt*sizeof(FORMATETC));
+ InitFormatEtc(obj->fmtetc[0], CF_TEXT, TYMED_HGLOBAL);
+ InitFormatEtc(obj->fmtetc[1], cf_stream, TYMED_ISTREAM);
+ InitFormatEtc(obj->fmtetc[2], cf_storage, TYMED_ISTORAGE);
+ InitFormatEtc(obj->fmtetc[3], cf_another, TYMED_ISTORAGE|TYMED_ISTREAM|TYMED_HGLOBAL);
+ memset(&dm, 0, sizeof(dm));
+ dm.dmSize = sizeof(dm);
+ dm.dmDriverExtra = 0;
+ lstrcpyW(dm.dmDeviceName, device_name);
+ obj->fmtetc[3].ptd = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(DVTARGETDEVICE, tdData) + sizeof(device_name) + dm.dmSize + dm.dmDriverExtra);
+ obj->fmtetc[3].ptd->tdSize = FIELD_OFFSET(DVTARGETDEVICE, tdData) + sizeof(device_name) + dm.dmSize + dm.dmDriverExtra;
+ obj->fmtetc[3].ptd->tdDriverNameOffset = FIELD_OFFSET(DVTARGETDEVICE, tdData);
+ obj->fmtetc[3].ptd->tdDeviceNameOffset = 0;
+ obj->fmtetc[3].ptd->tdPortNameOffset = 0;
+ obj->fmtetc[3].ptd->tdExtDevmodeOffset = obj->fmtetc[3].ptd->tdDriverNameOffset + sizeof(device_name);
+ lstrcpyW((WCHAR*)obj->fmtetc[3].ptd->tdData, device_name);
+ memcpy(obj->fmtetc[3].ptd->tdData + sizeof(device_name), &dm, dm.dmSize + dm.dmDriverExtra);
+
+ InitFormatEtc(obj->fmtetc[4], cf_global, TYMED_HGLOBAL);
+ InitFormatEtc(obj->fmtetc[5], cf_another, TYMED_HGLOBAL);
+ InitFormatEtc(obj->fmtetc[6], cf_another, 0xfffff);
+ InitFormatEtc(obj->fmtetc[7], cf_another, 0xfffff);
+ obj->fmtetc[7].dwAspect = DVASPECT_ICON;
+
+ *lplpdataobj = (LPDATAOBJECT)obj;
+ return S_OK;
+}
+
static void test_get_clipboard(void)
{
HRESULT hr;
@@ -423,17 +539,288 @@ static void test_get_clipboard(void)
IDataObject_Release(data_obj);
}
+static void test_enum_fmtetc(IDataObject *src)
+{
+ HRESULT hr;
+ IDataObject *data;
+ IEnumFORMATETC *enum_fmt, *src_enum;
+ FORMATETC fmt, src_fmt;
+ DWORD count = 0;
+
+ hr = OleGetClipboard(&data);
+ ok(hr == S_OK, "OleGetClipboard failed with error 0x%08x\n", hr);
+
+ hr = IDataObject_EnumFormatEtc(data, DATADIR_SET, &enum_fmt);
+ ok(hr == E_NOTIMPL ||
+ broken(hr == E_INVALIDARG), /* win98 (not win98SE) */
+ "got %08x\n", hr);
+
+ DataObjectImpl_EnumFormatEtc_calls = 0;
+ hr = IDataObject_EnumFormatEtc(data, DATADIR_GET, &enum_fmt);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(DataObjectImpl_EnumFormatEtc_calls == 0, "EnumFormatEtc was called\n");
+
+ if(src) IDataObject_EnumFormatEtc(src, DATADIR_GET, &src_enum);
+
+ while((hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL)) == S_OK)
+ {
+ ok(src != NULL, "shouldn't be here\n");
+ hr = IEnumFORMATETC_Next(src_enum, 1, &src_fmt, NULL);
+ ok(hr == S_OK, "%d: got %08x\n", count, hr);
+ trace("%d: %s\n", count, dump_fmtetc(&fmt));
+ ok(fmt.cfFormat == src_fmt.cfFormat, "%d: %04x %04x\n", count, fmt.cfFormat, src_fmt.cfFormat);
+ ok(fmt.dwAspect == src_fmt.dwAspect, "%d: %08x %08x\n", count, fmt.dwAspect, src_fmt.dwAspect);
+ ok(fmt.lindex == src_fmt.lindex, "%d: %08x %08x\n", count, fmt.lindex, src_fmt.lindex);
+ ok(fmt.tymed == src_fmt.tymed, "%d: %08x %08x\n", count, fmt.tymed, src_fmt.tymed);
+ if(fmt.ptd)
+ {
+ ok(src_fmt.ptd != NULL, "%d: expected non-NULL\n", count);
+ CoTaskMemFree(fmt.ptd);
+ CoTaskMemFree(src_fmt.ptd);
+ }
+ count++;
+ }
+
+ ok(hr == S_FALSE, "%d: got %08x\n", count, hr);
+
+ if(src)
+ {
+ hr = IEnumFORMATETC_Next(src_enum, 1, &src_fmt, NULL);
+ ok(hr == S_FALSE ||
+ broken(hr == S_OK && count == 5), /* win9x and winme don't enumerate duplicated cf's */
+ "%d: got %08x\n", count, hr);
+ IEnumFORMATETC_Release(src_enum);
+ }
+
+ hr = IEnumFORMATETC_Reset(enum_fmt);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ if(src) /* Exercise the enumerator a bit */
+ {
+ IEnumFORMATETC *clone;
+ FORMATETC third_fmt;
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &third_fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &third_fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &third_fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = IEnumFORMATETC_Reset(enum_fmt);
+ ok(hr == S_OK, "got %08x\n", hr);
+ hr = IEnumFORMATETC_Skip(enum_fmt, 2);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = IEnumFORMATETC_Clone(enum_fmt, &clone);
+ ok(hr == S_OK, "got %08x\n", hr);
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(fmt.cfFormat == third_fmt.cfFormat, "formats don't match\n");
+ hr = IEnumFORMATETC_Next(clone, 1, &fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(fmt.cfFormat == third_fmt.cfFormat, "formats don't match\n");
+ IEnumFORMATETC_Release(clone);
+ }
+
+ IEnumFORMATETC_Release(enum_fmt);
+ IDataObject_Release(data);
+}
+
+static void test_no_cf_dataobject(void)
+{
+ UINT cf_dataobject = RegisterClipboardFormatA("DataObject");
+ UINT cf_ole_priv_data = RegisterClipboardFormatA("Ole Private Data");
+ HANDLE h;
+ OpenClipboard(NULL);
+
+ h = GetClipboardData(cf_dataobject);
+ ok(!h, "got %p\n", h);
+ h = GetClipboardData(cf_ole_priv_data);
+ ok(!h, "got %p\n", h);
+
+ CloseClipboard();
+}
+
+static void test_cf_dataobject(IDataObject *data)
+{
+ UINT cf = 0;
+ UINT cf_dataobject = RegisterClipboardFormatA("DataObject");
+ UINT cf_ole_priv_data = RegisterClipboardFormatA("Ole Private Data");
+ BOOL found_dataobject = FALSE, found_priv_data = FALSE;
+
+ OpenClipboard(NULL);
+ do
+ {
+ cf = EnumClipboardFormats(cf);
+ if(cf == cf_dataobject)
+ {
+ HGLOBAL h = GetClipboardData(cf);
+ HWND *ptr = GlobalLock(h);
+ DWORD size = GlobalSize(h);
+ HWND clip_owner = GetClipboardOwner();
+
+ found_dataobject = TRUE;
+ ok(size >= sizeof(*ptr), "size %d\n", size);
+ if(data)
+ ok(*ptr == clip_owner, "hwnd %p clip_owner %p\n", *ptr, clip_owner);
+ else /* ole clipboard flushed */
+ ok(*ptr == NULL, "hwnd %p\n", *ptr);
+ GlobalUnlock(h);
+ }
+ else if(cf == cf_ole_priv_data)
+ {
+ found_priv_data = TRUE;
+ if(data)
+ {
+ HGLOBAL h = GetClipboardData(cf);
+ DWORD *ptr = GlobalLock(h);
+ DWORD size = GlobalSize(h);
+
+ if(size != ptr[1])
+ win_skip("Ole Private Data in win9x format\n");
+ else
+ {
+ HRESULT hr;
+ IEnumFORMATETC *enum_fmt;
+ DWORD count = 0;
+ FORMATETC fmt;
+ struct formatetcetc
+ {
+ FORMATETC fmt;
+ BOOL first_use_of_cf;
+ DWORD res[2];
+ } *fmt_ptr;
+ struct priv_data
+ {
+ DWORD res1;
+ DWORD size;
+ DWORD res2;
+ DWORD count;
+ DWORD res3[2];
+ struct formatetcetc fmts[1];
+ } *priv = (struct priv_data*)ptr;
+ CLIPFORMAT cfs_seen[10];
+
+ hr = IDataObject_EnumFormatEtc(data, DATADIR_GET, &enum_fmt);
+ ok(hr == S_OK, "got %08x\n", hr);
+ fmt_ptr = priv->fmts;
+
+ while(IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL) == S_OK)
+ {
+ int i;
+ BOOL seen_cf = FALSE;
+
+ ok(fmt_ptr->fmt.cfFormat == fmt.cfFormat,
+ "got %08x expected %08x\n", fmt_ptr->fmt.cfFormat, fmt.cfFormat);
+ ok(fmt_ptr->fmt.dwAspect == fmt.dwAspect, "got %08x expected %08x\n",
+ fmt_ptr->fmt.dwAspect, fmt.dwAspect);
+ ok(fmt_ptr->fmt.lindex == fmt.lindex, "got %08x expected %08x\n",
+ fmt_ptr->fmt.lindex, fmt.lindex);
+ ok(fmt_ptr->fmt.tymed == fmt.tymed, "got %08x expected %08x\n",
+ fmt_ptr->fmt.tymed, fmt.tymed);
+ for(i = 0; i < count; i++)
+ if(fmt_ptr->fmt.cfFormat == cfs_seen[i])
+ {
+ seen_cf = TRUE;
+ break;
+ }
+ cfs_seen[count] = fmt.cfFormat;
+ ok(fmt_ptr->first_use_of_cf == seen_cf ? FALSE : TRUE, "got %08x expected %08x\n",
+ fmt_ptr->first_use_of_cf, !seen_cf);
+ ok(fmt_ptr->res[0] == 0, "got %08x\n", fmt_ptr->res[1]);
+ ok(fmt_ptr->res[1] == 0, "got %08x\n", fmt_ptr->res[2]);
+ if(fmt.ptd)
+ {
+ DVTARGETDEVICE *target;
+
+ ok(fmt_ptr->fmt.ptd != NULL, "target device offset zero\n");
+ target = (DVTARGETDEVICE*)((char*)priv + (DWORD)fmt_ptr->fmt.ptd);
+ ok(!memcmp(target, fmt.ptd, fmt.ptd->tdSize), "target devices differ\n");
+ CoTaskMemFree(fmt.ptd);
+ }
+ fmt_ptr++;
+ count++;
+ }
+ ok(priv->res1 == 0, "got %08x\n", priv->res1);
+ ok(priv->res2 == 1, "got %08x\n", priv->res2);
+ ok(priv->count == count, "got %08x expected %08x\n", priv->count, count);
+ ok(priv->res3[0] == 0, "got %08x\n", priv->res3[0]);
+
+ /* win64 sets the lsb */
+ if(sizeof(fmt_ptr->fmt.ptd) == 8)
+ todo_wine ok(priv->res3[1] == 1, "got %08x\n", priv->res3[1]);
+ else
+ ok(priv->res3[1] == 0, "got %08x\n", priv->res3[1]);
+
+ GlobalUnlock(h);
+ IEnumFORMATETC_Release(enum_fmt);
+ }
+ }
+ }
+ else if(cf == cf_stream)
+ {
+ HGLOBAL h;
+ void *ptr;
+ DWORD size;
+
+ DataObjectImpl_GetDataHere_calls = 0;
+ h = GetClipboardData(cf);
+ ok(DataObjectImpl_GetDataHere_calls == 1, "got %d\n", DataObjectImpl_GetDataHere_calls);
+ ptr = GlobalLock(h);
+ size = GlobalSize(h);
+ ok(size == strlen(cmpl_stm_data) ||
+ broken(size > strlen(cmpl_stm_data)), /* win9x, winme */
+ "expected %d got %d\n", lstrlenA(cmpl_stm_data), size);
+ ok(!memcmp(ptr, cmpl_stm_data, strlen(cmpl_stm_data)), "mismatch\n");
+ GlobalUnlock(h);
+ }
+ else if(cf == cf_global)
+ {
+ HGLOBAL h;
+ void *ptr;
+ DWORD size;
+
+ DataObjectImpl_GetDataHere_calls = 0;
+ h = GetClipboardData(cf);
+ ok(DataObjectImpl_GetDataHere_calls == 0, "got %d\n", DataObjectImpl_GetDataHere_calls);
+ ptr = GlobalLock(h);
+ size = GlobalSize(h);
+ ok(size == strlen(cmpl_text_data) + 1 ||
+ broken(size > strlen(cmpl_text_data) + 1), /* win9x, winme */
+ "expected %d got %d\n", lstrlenA(cmpl_text_data) + 1, size);
+ ok(!memcmp(ptr, cmpl_text_data, strlen(cmpl_text_data) + 1), "mismatch\n");
+ GlobalUnlock(h);
+ }
+ } while(cf);
+ CloseClipboard();
+ ok(found_dataobject, "didn't find cf_dataobject\n");
+ ok(found_priv_data, "didn't find cf_ole_priv_data\n");
+}
+
static void test_set_clipboard(void)
{
HRESULT hr;
ULONG ref;
- LPDATAOBJECT data1, data2;
+ LPDATAOBJECT data1, data2, data_cmpl;
+ HGLOBAL hblob, h;
+
+ cf_stream = RegisterClipboardFormatA("stream format");
+ cf_storage = RegisterClipboardFormatA("storage format");
+ cf_global = RegisterClipboardFormatA("global format");
+ cf_another = RegisterClipboardFormatA("another format");
+ cf_onemore = RegisterClipboardFormatA("one more format");
+
hr = DataObjectImpl_CreateText("data1", &data1);
ok(SUCCEEDED(hr), "Failed to create data1 object: 0x%08x\n", hr);
if(FAILED(hr))
return;
hr = DataObjectImpl_CreateText("data2", &data2);
ok(SUCCEEDED(hr), "Failed to create data2 object: 0x%08x\n", hr);
+ if(FAILED(hr))
+ return;
+ hr = DataObjectImpl_CreateComplex(&data_cmpl);
+ ok(SUCCEEDED(hr), "Failed to create complex data object: 0x%08x\n", hr);
if(FAILED(hr))
return;
@@ -453,6 +840,9 @@ static void test_set_clipboard(void)
hr = OleSetClipboard(data1);
ok(hr == S_OK, "failed to set clipboard to data1, hr = 0x%08x\n", hr);
+
+ test_cf_dataobject(data1);
+
hr = OleIsCurrentClipboard(data1);
ok(hr == S_OK, "expected current clipboard to be data1, hr = 0x%08x\n", hr);
hr = OleIsCurrentClipboard(data2);
@@ -471,6 +861,18 @@ static void test_set_clipboard(void)
hr = OleIsCurrentClipboard(NULL);
ok(hr == S_FALSE, "expect S_FALSE, hr = 0x%08x\n", hr);
+ /* put a format directly onto the clipboard to show
+ OleFlushClipboard doesn't empty the clipboard */
+ hblob = GlobalAlloc(GMEM_DDESHARE|GMEM_MOVEABLE|GMEM_ZEROINIT, 10);
+ OpenClipboard(NULL);
+ h = SetClipboardData(cf_onemore, hblob);
+ ok(h == hblob, "got %p\n", h);
+ h = GetClipboardData(cf_onemore);
+ ok(h == hblob ||
+ broken(h != NULL), /* win9x */
+ "got %p\n", h);
+ CloseClipboard();
+
hr = OleFlushClipboard();
ok(hr == S_OK, "failed to flush clipboard, hr = 0x%08x\n", hr);
hr = OleIsCurrentClipboard(data1);
@@ -480,18 +882,639 @@ static void test_set_clipboard(void)
hr = OleIsCurrentClipboard(NULL);
ok(hr == S_FALSE, "expect S_FALSE, hr = 0x%08x\n", hr);
+ /* format should survive the flush */
+ OpenClipboard(NULL);
+ h = GetClipboardData(cf_onemore);
+ ok(h == hblob ||
+ broken(h != NULL), /* win9x */
+ "got %p\n", h);
+ CloseClipboard();
+
+ test_cf_dataobject(NULL);
+
ok(OleSetClipboard(NULL) == S_OK, "failed to clear clipboard, hr = 0x%08x\n", hr);
+ OpenClipboard(NULL);
+ h = GetClipboardData(cf_onemore);
+ ok(h == NULL, "got %p\n", h);
+ CloseClipboard();
+
+ trace("setting complex\n");
+ hr = OleSetClipboard(data_cmpl);
+ ok(hr == S_OK, "failed to set clipboard to complex data, hr = 0x%08x\n", hr);
+ test_cf_dataobject(data_cmpl);
+ test_enum_fmtetc(data_cmpl);
+
+ ok(OleSetClipboard(NULL) == S_OK, "failed to clear clipboard, hr = 0x%08x\n", hr);
+
+ test_no_cf_dataobject();
+ test_enum_fmtetc(NULL);
+
ref = IDataObject_Release(data1);
ok(ref == 0, "expected data1 ref=0, got %d\n", ref);
ref = IDataObject_Release(data2);
ok(ref == 0, "expected data2 ref=0, got %d\n", ref);
+ ref = IDataObject_Release(data_cmpl);
+ ok(ref == 0, "expected data_cmpl ref=0, got %d\n", ref);
OleUninitialize();
}
+static inline ULONG count_refs(IDataObject *d)
+{
+ IDataObject_AddRef(d);
+ return IDataObject_Release(d);
+}
+
+static void test_consumer_refs(void)
+{
+ HRESULT hr;
+ IDataObject *src, *src2, *get1, *get2, *get3;
+ ULONG refs, old_refs;
+ FORMATETC fmt;
+ STGMEDIUM med;
+
+ InitFormatEtc(fmt, CF_TEXT, TYMED_HGLOBAL);
+
+ OleInitialize(NULL);
+
+ /* First show that each clipboard state results in
+ a different data object */
+
+ hr = DataObjectImpl_CreateText("data1", &src);
+ ok(hr == S_OK, "got %08x\n", hr);
+ hr = DataObjectImpl_CreateText("data2", &src2);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = OleSetClipboard(src);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = OleGetClipboard(&get1);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = OleGetClipboard(&get2);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ ok(get1 == get2 ||
+ broken(get1 != get2), /* win9x, winme & nt4 */
+ "data objects differ\n");
+ refs = IDataObject_Release(get2);
+ ok(refs == (get1 == get2 ? 1 : 0), "got %d\n", refs);
+
+ OleFlushClipboard();
+
+ DataObjectImpl_GetData_calls = 0;
+ hr = IDataObject_GetData(get1, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(DataObjectImpl_GetData_calls == 0, "GetData called\n");
+ ReleaseStgMedium(&med);
+
+ hr = OleGetClipboard(&get2);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ ok(get1 != get2, "data objects match\n");
+
+ OleSetClipboard(NULL);
+
+ hr = OleGetClipboard(&get3);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ ok(get1 != get3, "data objects match\n");
+ ok(get2 != get3, "data objects match\n");
+
+ IDataObject_Release(get3);
+ IDataObject_Release(get2);
+ IDataObject_Release(get1);
+
+ /* Now call GetData before the flush and show that this
+ takes a ref on our src data obj. */
+
+ hr = OleSetClipboard(src);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ old_refs = count_refs(src);
+
+ hr = OleGetClipboard(&get1);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ refs = count_refs(src);
+ ok(refs == old_refs, "%d %d\n", refs, old_refs);
+
+ DataObjectImpl_GetData_calls = 0;
+ hr = IDataObject_GetData(get1, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(DataObjectImpl_GetData_calls == 1, "GetData not called\n");
+ ReleaseStgMedium(&med);
+ refs = count_refs(src);
+ ok(refs == old_refs + 1, "%d %d\n", refs, old_refs);
+
+ OleFlushClipboard();
+
+ DataObjectImpl_GetData_calls = 0;
+ hr = IDataObject_GetData(get1, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(DataObjectImpl_GetData_calls == 1, "GetData not called\n");
+ ReleaseStgMedium(&med);
+
+ refs = count_refs(src);
+ ok(refs == 2, "%d\n", refs);
+
+ IDataObject_Release(get1);
+
+ refs = count_refs(src);
+ ok(refs == 1, "%d\n", refs);
+
+ /* Now set a second src object before the call to GetData
+ and show that GetData calls that second src. */
+
+ hr = OleSetClipboard(src);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ old_refs = count_refs(src);
+
+ hr = OleGetClipboard(&get1);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ refs = count_refs(src);
+ ok(refs == old_refs, "%d %d\n", refs, old_refs);
+
+ hr = OleSetClipboard(src2);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ old_refs = count_refs(src2);
+
+ DataObjectImpl_GetData_calls = 0;
+ hr = IDataObject_GetData(get1, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(DataObjectImpl_GetData_calls == 1, "GetData not called\n");
+ ReleaseStgMedium(&med);
+
+ refs = count_refs(src);
+ ok(refs == 1, "%d\n", refs);
+ refs = count_refs(src2);
+ ok(refs == old_refs + 1, "%d %d\n", refs, old_refs);
+
+ OleSetClipboard(NULL);
+
+ refs = count_refs(src2);
+ ok(refs == 2, "%d\n", refs);
+
+ IDataObject_Release(get1);
+
+ IDataObject_Release(src2);
+ IDataObject_Release(src);
+
+ OleUninitialize();
+}
+
+static void test_flushed_getdata(void)
+{
+ HRESULT hr;
+ IDataObject *src, *get;
+ FORMATETC fmt;
+ STGMEDIUM med;
+ STATSTG stat;
+ DEVMODEW dm;
+
+ OleInitialize(NULL);
+
+ hr = DataObjectImpl_CreateComplex(&src);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = OleSetClipboard(src);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = OleFlushClipboard();
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = OleGetClipboard(&get);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ /* global format -> global & stream */
+
+ InitFormatEtc(fmt, CF_TEXT, TYMED_HGLOBAL);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_HGLOBAL, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+
+ InitFormatEtc(fmt, CF_TEXT, TYMED_ISTREAM);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTREAM, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+
+ InitFormatEtc(fmt, CF_TEXT, TYMED_ISTORAGE);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == E_FAIL, "got %08x\n", hr);
+
+ InitFormatEtc(fmt, CF_TEXT, 0xffff);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_HGLOBAL, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+
+ /* stream format -> global & stream */
+
+ InitFormatEtc(fmt, cf_stream, TYMED_ISTREAM);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTREAM, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+
+ InitFormatEtc(fmt, cf_stream, TYMED_ISTORAGE);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == E_FAIL, "got %08x\n", hr);
+
+ InitFormatEtc(fmt, cf_stream, TYMED_HGLOBAL);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_HGLOBAL, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+
+ InitFormatEtc(fmt, cf_stream, 0xffff);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTREAM, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+
+ /* storage format -> global, stream & storage */
+
+ InitFormatEtc(fmt, cf_storage, TYMED_ISTORAGE);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTORAGE, "got %x\n", med.tymed);
+ hr = IStorage_Stat(med.u.pstg, &stat, STATFLAG_NONAME);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(stat.grfMode == (STGM_SHARE_EXCLUSIVE | STGM_READWRITE), "got %08x\n", stat.grfMode);
+ ReleaseStgMedium(&med);
+
+ InitFormatEtc(fmt, cf_storage, TYMED_ISTREAM);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTREAM, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+
+ InitFormatEtc(fmt, cf_storage, TYMED_HGLOBAL);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_HGLOBAL, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+
+ InitFormatEtc(fmt, cf_storage, TYMED_HGLOBAL | TYMED_ISTREAM);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_HGLOBAL, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+
+ InitFormatEtc(fmt, cf_storage, 0xffff);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTORAGE, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+
+ /* complex format with target device */
+
+ InitFormatEtc(fmt, cf_another, 0xffff);
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == DV_E_FORMATETC ||
+ broken(hr == S_OK), /* win9x, winme & nt4 */
+ "got %08x\n", hr);
+ if(hr == S_OK) ReleaseStgMedium(&med);
+
+ InitFormatEtc(fmt, cf_another, 0xffff);
+ memset(&dm, 0, sizeof(dm));
+ dm.dmSize = sizeof(dm);
+ dm.dmDriverExtra = 0;
+ lstrcpyW(dm.dmDeviceName, device_name);
+ fmt.ptd = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(DVTARGETDEVICE, tdData) + sizeof(device_name) + dm.dmSize + dm.dmDriverExtra);
+ fmt.ptd->tdSize = FIELD_OFFSET(DVTARGETDEVICE, tdData) + sizeof(device_name) + dm.dmSize + dm.dmDriverExtra;
+ fmt.ptd->tdDriverNameOffset = FIELD_OFFSET(DVTARGETDEVICE, tdData);
+ fmt.ptd->tdDeviceNameOffset = 0;
+ fmt.ptd->tdPortNameOffset = 0;
+ fmt.ptd->tdExtDevmodeOffset = fmt.ptd->tdDriverNameOffset + sizeof(device_name);
+ lstrcpyW((WCHAR*)fmt.ptd->tdData, device_name);
+ memcpy(fmt.ptd->tdData + sizeof(device_name), &dm, dm.dmSize + dm.dmDriverExtra);
+
+ hr = IDataObject_GetData(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTORAGE, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+
+ HeapFree(GetProcessHeap(), 0, fmt.ptd);
+
+
+ IDataObject_Release(get);
+ IDataObject_Release(src);
+ OleUninitialize();
+}
+
+static HGLOBAL create_text(void)
+{
+ HGLOBAL h = GlobalAlloc(GMEM_DDESHARE|GMEM_MOVEABLE, 5);
+ char *p = GlobalLock(h);
+ strcpy(p, "test");
+ GlobalUnlock(h);
+ return h;
+}
+
+static HENHMETAFILE create_emf(void)
+{
+ const RECT rect = {0, 0, 100, 100};
+ HDC hdc = CreateEnhMetaFileA(NULL, NULL, &rect, "HENHMETAFILE Ole Clipboard Test\0Test\0\0");
+ ExtTextOutA(hdc, 0, 0, ETO_OPAQUE, &rect, "Test String", strlen("Test String"), NULL);
+ return CloseEnhMetaFile(hdc);
+}
+
+static void test_nonole_clipboard(void)
+{
+ HRESULT hr;
+ BOOL r;
+ IDataObject *get;
+ IEnumFORMATETC *enum_fmt;
+ FORMATETC fmt;
+ HGLOBAL h, hblob, htext;
+ HENHMETAFILE emf;
+
+ r = OpenClipboard(NULL);
+ ok(r, "gle %d\n", GetLastError());
+ r = EmptyClipboard();
+ ok(r, "gle %d\n", GetLastError());
+ r = CloseClipboard();
+ ok(r, "gle %d\n", GetLastError());
+
+ OleInitialize(NULL);
+
+ /* empty clipboard */
+ hr = OleGetClipboard(&get);
+ ok(hr == S_OK, "got %08x\n", hr);
+ hr = IDataObject_EnumFormatEtc(get, DATADIR_GET, &enum_fmt);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_FALSE, "got %08x\n", hr);
+ IEnumFORMATETC_Release(enum_fmt);
+
+ IDataObject_Release(get);
+
+ /* set a user defined clipboard type */
+
+ htext = create_text();
+ hblob = GlobalAlloc(GMEM_DDESHARE|GMEM_MOVEABLE|GMEM_ZEROINIT, 10);
+ emf = create_emf();
+
+ r = OpenClipboard(NULL);
+ ok(r, "gle %d\n", GetLastError());
+ h = SetClipboardData(CF_TEXT, htext);
+ ok(h == htext, "got %p\n", h);
+ h = SetClipboardData(cf_onemore, hblob);
+ ok(h == hblob, "got %p\n", h);
+ h = SetClipboardData(CF_ENHMETAFILE, emf);
+ ok(h == emf, "got %p\n", h);
+ r = CloseClipboard();
+ ok(r, "gle %d\n", GetLastError());
+
+ hr = OleGetClipboard(&get);
+ ok(hr == S_OK, "got %08x\n", hr);
+ hr = IDataObject_EnumFormatEtc(get, DATADIR_GET, &enum_fmt);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(fmt.cfFormat == CF_TEXT, "cf %04x\n", fmt.cfFormat);
+ ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
+ ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
+ ok(fmt.lindex == -1, "lindex %d\n", fmt.lindex);
+ ok(fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL), "tymed %x\n", fmt.tymed);
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(fmt.cfFormat == cf_onemore, "cf %04x\n", fmt.cfFormat);
+ ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
+ ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
+ ok(fmt.lindex == -1, "lindex %d\n", fmt.lindex);
+ ok(fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL), "tymed %x\n", fmt.tymed);
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(fmt.cfFormat == CF_ENHMETAFILE, "cf %04x\n", fmt.cfFormat);
+ ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
+ ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
+ ok(fmt.lindex == -1, "lindex %d\n", fmt.lindex);
+ ok(fmt.tymed == TYMED_ENHMF, "tymed %x\n", fmt.tymed);
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr); /* User32 adds some synthesised formats */
+
+ todo_wine ok(fmt.cfFormat == CF_LOCALE, "cf %04x\n", fmt.cfFormat);
+ if(fmt.cfFormat == CF_LOCALE)
+ {
+ ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
+ ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
+ ok(fmt.lindex == -1, "lindex %d\n", fmt.lindex);
+ ok(fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL), "tymed %x\n", fmt.tymed);
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
+ }
+
+ ok(fmt.cfFormat == CF_OEMTEXT, "cf %04x\n", fmt.cfFormat);
+ ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
+ ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
+ ok(fmt.lindex == -1, "lindex %d\n", fmt.lindex);
+ ok(fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL), "tymed %x\n", fmt.tymed);
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(fmt.cfFormat == CF_UNICODETEXT ||
+ broken(fmt.cfFormat == CF_METAFILEPICT), /* win9x and winme don't have CF_UNICODETEXT */
+ "cf %04x\n", fmt.cfFormat);
+ if(fmt.cfFormat == CF_UNICODETEXT)
+ {
+ ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
+ ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
+ ok(fmt.lindex == -1, "lindex %d\n", fmt.lindex);
+ ok(fmt.tymed == (TYMED_ISTREAM | TYMED_HGLOBAL), "tymed %x\n", fmt.tymed);
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_OK, "got %08x\n", hr);
+ }
+ ok(fmt.cfFormat == CF_METAFILEPICT, "cf %04x\n", fmt.cfFormat);
+ ok(fmt.ptd == NULL, "ptd %p\n", fmt.ptd);
+ ok(fmt.dwAspect == DVASPECT_CONTENT, "aspect %x\n", fmt.dwAspect);
+ ok(fmt.lindex == -1, "lindex %d\n", fmt.lindex);
+ ok(fmt.tymed == TYMED_MFPICT, "tymed %x\n", fmt.tymed);
+
+ hr = IEnumFORMATETC_Next(enum_fmt, 1, &fmt, NULL);
+ ok(hr == S_FALSE, "got %08x\n", hr);
+ IEnumFORMATETC_Release(enum_fmt);
+
+ IDataObject_Release(get);
+
+ r = OpenClipboard(NULL);
+ ok(r, "gle %d\n", GetLastError());
+ r = EmptyClipboard();
+ ok(r, "gle %d\n", GetLastError());
+ r = CloseClipboard();
+ ok(r, "gle %d\n", GetLastError());
+
+ OleUninitialize();
+}
+
+static void test_getdatahere(void)
+{
+ HRESULT hr;
+ IDataObject *src, *get;
+ FORMATETC fmt;
+ STGMEDIUM med;
+
+ OleInitialize(NULL);
+
+ hr = DataObjectImpl_CreateComplex(&src);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = OleSetClipboard(src);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ hr = OleGetClipboard(&get);
+ ok(hr == S_OK, "got %08x\n", hr);
+
+ /* global format -> global & stream */
+
+ DataObjectImpl_GetData_calls = 0;
+ DataObjectImpl_GetDataHere_calls = 0;
+
+ InitFormatEtc(fmt, CF_TEXT, TYMED_HGLOBAL);
+
+ med.pUnkForRelease = NULL;
+ med.tymed = TYMED_HGLOBAL;
+ U(med).hGlobal = GlobalAlloc(GMEM_MOVEABLE, 100);
+ hr = IDataObject_GetDataHere(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_HGLOBAL, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+ ok(DataObjectImpl_GetDataHere_calls == 1, "called %d\n", DataObjectImpl_GetDataHere_calls);
+ ok(DataObjectImpl_GetData_calls == 1, "called %d\n", DataObjectImpl_GetData_calls);
+
+ InitFormatEtc(fmt, CF_TEXT, 0);
+
+ med.pUnkForRelease = NULL;
+ med.tymed = TYMED_HGLOBAL;
+ U(med).hGlobal = GlobalAlloc(GMEM_MOVEABLE, 100);
+ hr = IDataObject_GetDataHere(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_HGLOBAL, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+ ok(DataObjectImpl_GetDataHere_calls == 2, "called %d\n", DataObjectImpl_GetDataHere_calls);
+ ok(DataObjectImpl_GetData_calls == 1, "called %d\n", DataObjectImpl_GetData_calls);
+
+ med.pUnkForRelease = NULL;
+ med.tymed = TYMED_HGLOBAL;
+ U(med).hGlobal = GlobalAlloc(GMEM_MOVEABLE, 1);
+ hr = IDataObject_GetDataHere(get, &fmt, &med);
+ ok(hr == E_FAIL, "got %08x\n", hr);
+ ok(med.tymed == TYMED_HGLOBAL, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+ ok(DataObjectImpl_GetDataHere_calls == 3, "called %d\n", DataObjectImpl_GetDataHere_calls);
+ ok(DataObjectImpl_GetData_calls == 1, "called %d\n", DataObjectImpl_GetData_calls);
+
+ med.pUnkForRelease = NULL;
+ med.tymed = TYMED_ISTREAM;
+ CreateStreamOnHGlobal(NULL, TRUE, &U(med).pstm);
+ hr = IDataObject_GetDataHere(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTREAM, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+ ok(DataObjectImpl_GetDataHere_calls == 4, "called %d\n", DataObjectImpl_GetDataHere_calls);
+ ok(DataObjectImpl_GetData_calls == 1, "called %d\n", DataObjectImpl_GetData_calls);
+
+ med.pUnkForRelease = NULL;
+ med.tymed = TYMED_ISTORAGE;
+ StgCreateDocfile(NULL, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_DELETEONRELEASE, 0, &U(med).pstg);
+ hr = IDataObject_GetDataHere(get, &fmt, &med);
+ ok(hr == E_FAIL, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTORAGE, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+ ok(DataObjectImpl_GetDataHere_calls == 5, "called %d\n", DataObjectImpl_GetDataHere_calls);
+ ok(DataObjectImpl_GetData_calls == 1, "called %d\n", DataObjectImpl_GetData_calls);
+
+ InitFormatEtc(fmt, cf_stream, 0);
+
+ med.pUnkForRelease = NULL;
+ med.tymed = TYMED_HGLOBAL;
+ U(med).hGlobal = GlobalAlloc(GMEM_MOVEABLE, 100);
+ hr = IDataObject_GetDataHere(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_HGLOBAL, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+ ok(DataObjectImpl_GetDataHere_calls == 7, "called %d\n", DataObjectImpl_GetDataHere_calls);
+ ok(DataObjectImpl_GetData_calls == 2, "called %d\n", DataObjectImpl_GetData_calls);
+
+ med.pUnkForRelease = NULL;
+ med.tymed = TYMED_ISTREAM;
+ CreateStreamOnHGlobal(NULL, TRUE, &U(med).pstm);
+ hr = IDataObject_GetDataHere(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTREAM, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+ ok(DataObjectImpl_GetDataHere_calls == 8, "called %d\n", DataObjectImpl_GetDataHere_calls);
+ ok(DataObjectImpl_GetData_calls == 2, "called %d\n", DataObjectImpl_GetData_calls);
+
+ med.pUnkForRelease = NULL;
+ med.tymed = TYMED_ISTORAGE;
+ StgCreateDocfile(NULL, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_DELETEONRELEASE, 0, &U(med).pstg);
+ hr = IDataObject_GetDataHere(get, &fmt, &med);
+ ok(hr == E_FAIL, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTORAGE, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+ ok(DataObjectImpl_GetDataHere_calls == 9, "called %d\n", DataObjectImpl_GetDataHere_calls);
+ ok(DataObjectImpl_GetData_calls == 2, "called %d\n", DataObjectImpl_GetData_calls);
+
+ InitFormatEtc(fmt, cf_storage, 0);
+
+ med.pUnkForRelease = NULL;
+ med.tymed = TYMED_HGLOBAL;
+ U(med).hGlobal = GlobalAlloc(GMEM_MOVEABLE, 3000);
+ hr = IDataObject_GetDataHere(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_HGLOBAL, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+ ok(DataObjectImpl_GetDataHere_calls == 11, "called %d\n", DataObjectImpl_GetDataHere_calls);
+ ok(DataObjectImpl_GetData_calls == 3, "called %d\n", DataObjectImpl_GetData_calls);
+
+ med.pUnkForRelease = NULL;
+ med.tymed = TYMED_ISTREAM;
+ CreateStreamOnHGlobal(NULL, TRUE, &U(med).pstm);
+ hr = IDataObject_GetDataHere(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTREAM, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+ ok(DataObjectImpl_GetDataHere_calls == 12, "called %d\n", DataObjectImpl_GetDataHere_calls);
+ ok(DataObjectImpl_GetData_calls == 3, "called %d\n", DataObjectImpl_GetData_calls);
+
+ med.pUnkForRelease = NULL;
+ med.tymed = TYMED_ISTORAGE;
+ StgCreateDocfile(NULL, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_DELETEONRELEASE, 0, &U(med).pstg);
+ hr = IDataObject_GetDataHere(get, &fmt, &med);
+ ok(hr == S_OK, "got %08x\n", hr);
+ ok(med.tymed == TYMED_ISTORAGE, "got %x\n", med.tymed);
+ ReleaseStgMedium(&med);
+ ok(DataObjectImpl_GetDataHere_calls == 13, "called %d\n", DataObjectImpl_GetDataHere_calls);
+ ok(DataObjectImpl_GetData_calls == 3, "called %d\n", DataObjectImpl_GetData_calls);
+
+
+ IDataObject_Release(get);
+ IDataObject_Release(src);
+
+ OleUninitialize();
+
+}
START_TEST(clipboard)
{
test_set_clipboard();
+ test_consumer_refs();
+ test_flushed_getdata();
+ test_nonole_clipboard();
+ test_getdatahere();
}
diff --git a/rostests/winetests/ole32/compobj.c b/rostests/winetests/ole32/compobj.c
index a332d2756e3..7363f30f735 100644
--- a/rostests/winetests/ole32/compobj.c
+++ b/rostests/winetests/ole32/compobj.c
@@ -38,6 +38,7 @@
HRESULT (WINAPI * pCoInitializeEx)(LPVOID lpReserved, DWORD dwCoInit);
HRESULT (WINAPI * pCoGetObjectContext)(REFIID riid, LPVOID *ppv);
HRESULT (WINAPI * pCoSwitchCallContext)(IUnknown *pObject, IUnknown **ppOldObject);
+HRESULT (WINAPI * pCoGetTreatAsClass)(REFCLSID clsidOld, LPCLSID pClsidNew);
#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x\n", hr)
#define ok_more_than_one_lock() ok(cLocks > 0, "Number of locks should be > 0, but actually is %d\n", cLocks)
@@ -217,11 +218,36 @@ static void test_StringFromGUID2(void)
ok(len == 0, "len: %d (expected 0)\n", len);
}
+struct info
+{
+ HANDLE wait, stop;
+};
+
+static DWORD CALLBACK ole_initialize_thread(LPVOID pv)
+{
+ HRESULT hr;
+ struct info *info = pv;
+
+ hr = pCoInitializeEx(NULL, COINIT_MULTITHREADED);
+
+ SetEvent(info->wait);
+ WaitForSingleObject(info->stop, INFINITE);
+
+ CoUninitialize();
+ return hr;
+}
+
static void test_CoCreateInstance(void)
{
- REFCLSID rclsid = &CLSID_MyComputer;
- IUnknown *pUnk = (IUnknown *)0xdeadbeef;
- HRESULT hr = CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&pUnk);
+ HRESULT hr;
+ HANDLE thread;
+ DWORD tid, exitcode;
+ IUnknown *pUnk;
+ struct info info;
+ REFCLSID rclsid = &CLSID_InternetZoneManager;
+
+ pUnk = (IUnknown *)0xdeadbeef;
+ hr = CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&pUnk);
ok(hr == CO_E_NOTINITIALIZED, "CoCreateInstance should have returned CO_E_NOTINITIALIZED instead of 0x%08x\n", hr);
ok(pUnk == NULL, "CoCreateInstance should have changed the passed in pointer to NULL, instead of %p\n", pUnk);
@@ -233,19 +259,85 @@ static void test_CoCreateInstance(void)
hr = CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&pUnk);
ok(hr == CO_E_NOTINITIALIZED, "CoCreateInstance should have returned CO_E_NOTINITIALIZED instead of 0x%08x\n", hr);
+
+ /* show that COM doesn't have to be initialized for multi-threaded apartments if another
+ thread has already done so */
+
+ info.wait = CreateEvent(NULL, TRUE, FALSE, NULL);
+ ok(info.wait != NULL, "CreateEvent failed with error %d\n", GetLastError());
+
+ info.stop = CreateEvent(NULL, TRUE, FALSE, NULL);
+ ok(info.stop != NULL, "CreateEvent failed with error %d\n", GetLastError());
+
+ thread = CreateThread(NULL, 0, ole_initialize_thread, &info, 0, &tid);
+ ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError());
+
+ WaitForSingleObject(info.wait, INFINITE);
+
+ pUnk = (IUnknown *)0xdeadbeef;
+ hr = CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown, (void **)&pUnk);
+ ok(hr == S_OK, "CoCreateInstance should have returned S_OK instead of 0x%08x\n", hr);
+ if (pUnk) IUnknown_Release(pUnk);
+
+ SetEvent(info.stop);
+ WaitForSingleObject(thread, INFINITE);
+
+ GetExitCodeThread(thread, &exitcode);
+ hr = exitcode;
+ ok(hr == S_OK, "thread should have returned S_OK instead of 0x%08x\n", hr);
+
+ CloseHandle(thread);
+ CloseHandle(info.wait);
+ CloseHandle(info.stop);
}
static void test_CoGetClassObject(void)
{
- IUnknown *pUnk = (IUnknown *)0xdeadbeef;
- HRESULT hr = CoGetClassObject(&CLSID_MyComputer, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void **)&pUnk);
+ HRESULT hr;
+ HANDLE thread;
+ DWORD tid, exitcode;
+ IUnknown *pUnk;
+ struct info info;
+ REFCLSID rclsid = &CLSID_InternetZoneManager;
+
+ hr = CoGetClassObject(rclsid, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void **)&pUnk);
ok(hr == CO_E_NOTINITIALIZED, "CoGetClassObject should have returned CO_E_NOTINITIALIZED instead of 0x%08x\n", hr);
ok(pUnk == NULL, "CoGetClassObject should have changed the passed in pointer to NULL, instead of %p\n", pUnk);
- hr = CoGetClassObject(&CLSID_MyComputer, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, NULL);
+ hr = CoGetClassObject(rclsid, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, NULL);
ok(hr == E_INVALIDARG ||
broken(hr == CO_E_NOTINITIALIZED), /* win9x */
"CoGetClassObject should have returned E_INVALIDARG instead of 0x%08x\n", hr);
+
+ /* show that COM doesn't have to be initialized for multi-threaded apartments if another
+ thread has already done so */
+
+ info.wait = CreateEvent(NULL, TRUE, FALSE, NULL);
+ ok(info.wait != NULL, "CreateEvent failed with error %d\n", GetLastError());
+
+ info.stop = CreateEvent(NULL, TRUE, FALSE, NULL);
+ ok(info.stop != NULL, "CreateEvent failed with error %d\n", GetLastError());
+
+ thread = CreateThread(NULL, 0, ole_initialize_thread, &info, 0, &tid);
+ ok(thread != NULL, "CreateThread failed with error %d\n", GetLastError());
+
+ WaitForSingleObject(info.wait, INFINITE);
+
+ pUnk = (IUnknown *)0xdeadbeef;
+ hr = CoGetClassObject(rclsid, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void **)&pUnk);
+ ok(hr == S_OK, "CoGetClassObject should have returned S_OK instead of 0x%08x\n", hr);
+ if (pUnk) IUnknown_Release(pUnk);
+
+ SetEvent(info.stop);
+ WaitForSingleObject(thread, INFINITE);
+
+ GetExitCodeThread(thread, &exitcode);
+ hr = exitcode;
+ ok(hr == S_OK, "thread should have returned S_OK instead of 0x%08x\n", hr);
+
+ CloseHandle(thread);
+ CloseHandle(info.wait);
+ CloseHandle(info.stop);
}
static ATOM register_dummy_class(void)
@@ -1141,6 +1233,22 @@ static void test_CoGetCallContext(void)
CoUninitialize();
}
+static void test_CoGetTreatAsClass(void)
+{
+ HRESULT hr;
+ CLSID out;
+ static GUID deadbeef = {0xdeadbeef,0xdead,0xbeef,{0xde,0xad,0xbe,0xef,0xde,0xad,0xbe,0xef}};
+
+ if (!pCoGetTreatAsClass)
+ {
+ win_skip("CoGetTreatAsClass not present\n");
+ return;
+ }
+ hr = pCoGetTreatAsClass(&deadbeef,&out);
+ ok (hr == S_FALSE, "expected S_FALSE got %x\n",hr);
+ ok (IsEqualGUID(&out,&deadbeef), "expected to get same clsid back\n");
+}
+
static void test_CoInitializeEx(void)
{
HRESULT hr;
@@ -1167,6 +1275,7 @@ START_TEST(compobj)
HMODULE hOle32 = GetModuleHandle("ole32");
pCoGetObjectContext = (void*)GetProcAddress(hOle32, "CoGetObjectContext");
pCoSwitchCallContext = (void*)GetProcAddress(hOle32, "CoSwitchCallContext");
+ pCoGetTreatAsClass = (void*)GetProcAddress(hOle32,"CoGetTreatAsClass");
if (!(pCoInitializeEx = (void*)GetProcAddress(hOle32, "CoInitializeEx")))
{
trace("You need DCOM95 installed to run this test\n");
@@ -1192,5 +1301,6 @@ START_TEST(compobj)
test_CoFreeUnusedLibraries();
test_CoGetObjectContext();
test_CoGetCallContext();
+ test_CoGetTreatAsClass();
test_CoInitializeEx();
}
diff --git a/rostests/winetests/ole32/dragdrop.c b/rostests/winetests/ole32/dragdrop.c
index b7599814ba8..b28a8313e1a 100644
--- a/rostests/winetests/ole32/dragdrop.c
+++ b/rostests/winetests/ole32/dragdrop.c
@@ -31,9 +31,6 @@
#include "wine/test.h"
-/* functions that are not present on all versions of Windows */
-HRESULT (WINAPI * pCoInitializeEx)(LPVOID lpReserved, DWORD dwCoInit);
-
static int droptarget_addref_called;
static int droptarget_release_called;
diff --git a/rostests/winetests/ole32/marshal.c b/rostests/winetests/ole32/marshal.c
index 73d6a081fdc..40824881b01 100644
--- a/rostests/winetests/ole32/marshal.c
+++ b/rostests/winetests/ole32/marshal.c
@@ -2040,17 +2040,17 @@ static void test_WM_QUIT_handling(void)
}
}
-static SIZE_T round_heap_size(SIZE_T size)
+static SIZE_T round_global_size(SIZE_T size)
{
- static SIZE_T heap_size_alignment = -1;
- if (heap_size_alignment == -1)
+ static SIZE_T global_size_alignment = -1;
+ if (global_size_alignment == -1)
{
- void *p = HeapAlloc(GetProcessHeap(), 0, 1);
- heap_size_alignment = HeapSize(GetProcessHeap(), 0, p);
- HeapFree(GetProcessHeap(), 0, p);
+ void *p = GlobalAlloc(GMEM_FIXED, 1);
+ global_size_alignment = GlobalSize(p);
+ GlobalFree(p);
}
- return ((size + heap_size_alignment - 1) & ~(heap_size_alignment - 1));
+ return ((size + global_size_alignment - 1) & ~(global_size_alignment - 1));
}
static void test_freethreadedmarshaldata(IStream *pStream, MSHCTX mshctx, void *ptr, DWORD mshlflags)
@@ -2069,22 +2069,27 @@ static void test_freethreadedmarshaldata(IStream *pStream, MSHCTX mshctx, void *
if (mshctx == MSHCTX_INPROC)
{
- DWORD expected_size = round_heap_size(3*sizeof(DWORD) + sizeof(GUID));
- ok(size == expected_size, "size should have been %d instead of %d\n", expected_size, size);
+ DWORD expected_size = round_global_size(3*sizeof(DWORD) + sizeof(GUID));
+ ok(size == expected_size ||
+ broken(size == round_global_size(2*sizeof(DWORD))) /* Win9x & NT4 */,
+ "size should have been %d instead of %d\n", expected_size, size);
ok(*(DWORD *)marshal_data == mshlflags, "expected 0x%x, but got 0x%x for mshctx\n", mshlflags, *(DWORD *)marshal_data);
marshal_data += sizeof(DWORD);
ok(*(void **)marshal_data == ptr, "expected %p, but got %p for mshctx\n", ptr, *(void **)marshal_data);
marshal_data += sizeof(void *);
- if (sizeof(void*) == 4)
+ if (sizeof(void*) == 4 && size >= 3*sizeof(DWORD))
{
ok(*(DWORD *)marshal_data == 0, "expected 0x0, but got 0x%x\n", *(DWORD *)marshal_data);
marshal_data += sizeof(DWORD);
}
- trace("got guid data: {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
- ((GUID *)marshal_data)->Data1, ((GUID *)marshal_data)->Data2, ((GUID *)marshal_data)->Data3,
- ((GUID *)marshal_data)->Data4[0], ((GUID *)marshal_data)->Data4[1], ((GUID *)marshal_data)->Data4[2], ((GUID *)marshal_data)->Data4[3],
- ((GUID *)marshal_data)->Data4[4], ((GUID *)marshal_data)->Data4[5], ((GUID *)marshal_data)->Data4[6], ((GUID *)marshal_data)->Data4[7]);
+ if (size >= 3*sizeof(DWORD) + sizeof(GUID))
+ {
+ trace("got guid data: {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
+ ((GUID *)marshal_data)->Data1, ((GUID *)marshal_data)->Data2, ((GUID *)marshal_data)->Data3,
+ ((GUID *)marshal_data)->Data4[0], ((GUID *)marshal_data)->Data4[1], ((GUID *)marshal_data)->Data4[2], ((GUID *)marshal_data)->Data4[3],
+ ((GUID *)marshal_data)->Data4[4], ((GUID *)marshal_data)->Data4[5], ((GUID *)marshal_data)->Data4[6], ((GUID *)marshal_data)->Data4[7]);
+ }
}
else
{
@@ -2583,7 +2588,7 @@ static void test_register_local_server(void)
do
{
- wait = MsgWaitForMultipleObjects(1, &quit_event, FALSE, INFINITE, QS_ALLINPUT);
+ wait = MsgWaitForMultipleObjects(1, &quit_event, FALSE, 30000, QS_ALLINPUT);
if (wait == WAIT_OBJECT_0+1)
{
MSG msg;
@@ -2598,6 +2603,7 @@ static void test_register_local_server(void)
}
while (wait == WAIT_OBJECT_0+1);
+ ok( wait == WAIT_OBJECT_0, "quit event wait timed out\n" );
hr = CoRevokeClassObject(cookie);
ok_ole_success(hr, CoRevokeClassObject);
}
diff --git a/rostests/winetests/ole32/moniker.c b/rostests/winetests/ole32/moniker.c
index 08ef2ee04d5..413045a06b3 100644
--- a/rostests/winetests/ole32/moniker.c
+++ b/rostests/winetests/ole32/moniker.c
@@ -82,17 +82,17 @@ static void UnlockModule(void)
InterlockedDecrement(&cLocks);
}
-static SIZE_T round_heap_size(SIZE_T size)
+static SIZE_T round_global_size(SIZE_T size)
{
- static SIZE_T heap_size_alignment = -1;
- if (heap_size_alignment == -1)
+ static SIZE_T global_size_alignment = -1;
+ if (global_size_alignment == -1)
{
- void *p = HeapAlloc(GetProcessHeap(), 0, 1);
- heap_size_alignment = HeapSize(GetProcessHeap(), 0, p);
- HeapFree(GetProcessHeap(), 0, p);
+ void *p = GlobalAlloc(GMEM_FIXED, 1);
+ global_size_alignment = GlobalSize(p);
+ GlobalFree(p);
}
- return ((size + heap_size_alignment - 1) & ~(heap_size_alignment - 1));
+ return ((size + global_size_alignment - 1) & ~(global_size_alignment - 1));
}
static HRESULT WINAPI Test_IClassFactory_QueryInterface(
@@ -652,7 +652,9 @@ static void test_ROT(void)
ROTFLAGS_REGISTRATIONKEEPSALIVE|ROTFLAGS_ALLOWANYCLIENT,
(IUnknown*)&Test_ClassFactory, pMoniker, &dwCookie);
todo_wine {
- ok(hr == CO_E_WRONG_SERVER_IDENTITY, "IRunningObjectTable_Register should have returned CO_E_WRONG_SERVER_IDENTITY instead of 0x%08x\n", hr);
+ ok(hr == CO_E_WRONG_SERVER_IDENTITY ||
+ broken(hr == S_OK) /* Win9x */,
+ "IRunningObjectTable_Register should have returned CO_E_WRONG_SERVER_IDENTITY instead of 0x%08x\n", hr);
}
if (hr == S_OK) IRunningObjectTable_Revoke(pROT, dwCookie);
@@ -918,7 +920,8 @@ static void test_MkParseDisplayName(void)
hr = IMoniker_BindToObject(pmk, pbc, NULL, &IID_IUnknown, (LPVOID*)&object);
ok_ole_success(hr, IMoniker_BindToObject);
- IUnknown_Release(object);
+ if (SUCCEEDED(hr))
+ IUnknown_Release(object);
IMoniker_Release(pmk);
}
IBindCtx_Release(pbc);
@@ -1217,12 +1220,12 @@ static void test_moniker(
moniker_data = GlobalLock(hglobal);
/* first check we have the right amount of data */
- ok(moniker_size == round_heap_size(sizeof_expected_moniker_saved_data),
+ ok(moniker_size == round_global_size(sizeof_expected_moniker_saved_data),
"%s: Size of saved data differs (expected %d, actual %d)\n",
- testname, (DWORD)round_heap_size(sizeof_expected_moniker_saved_data), moniker_size);
+ testname, (DWORD)round_global_size(sizeof_expected_moniker_saved_data), moniker_size);
/* then do a byte-by-byte comparison */
- for (i = 0; i < min(moniker_size, round_heap_size(sizeof_expected_moniker_saved_data)); i++)
+ for (i = 0; i < min(moniker_size, round_global_size(sizeof_expected_moniker_saved_data)); i++)
{
if (expected_moniker_saved_data[i] != moniker_data[i])
{
@@ -1263,14 +1266,14 @@ static void test_moniker(
moniker_data = GlobalLock(hglobal);
/* first check we have the right amount of data */
- ok(moniker_size == round_heap_size(sizeof_expected_moniker_marshal_data),
+ ok(moniker_size == round_global_size(sizeof_expected_moniker_marshal_data),
"%s: Size of marshaled data differs (expected %d, actual %d)\n",
- testname, (DWORD)round_heap_size(sizeof_expected_moniker_marshal_data), moniker_size);
+ testname, (DWORD)round_global_size(sizeof_expected_moniker_marshal_data), moniker_size);
/* then do a byte-by-byte comparison */
if (expected_moniker_marshal_data)
{
- for (i = 0; i < min(moniker_size, round_heap_size(sizeof_expected_moniker_marshal_data)); i++)
+ for (i = 0; i < min(moniker_size, round_global_size(sizeof_expected_moniker_marshal_data)); i++)
{
if (expected_moniker_marshal_data[i] != moniker_data[i])
{
diff --git a/rostests/winetests/ole32/ole2.c b/rostests/winetests/ole32/ole2.c
index 42b8fa6331e..214c17e95a5 100644
--- a/rostests/winetests/ole32/ole2.c
+++ b/rostests/winetests/ole32/ole2.c
@@ -44,7 +44,15 @@ static const CLSID CLSID_WineTest =
{0xbc, 0x13, 0x51, 0x6e, 0x92, 0x39, 0xac, 0xe0}
};
-static char const * const *expected_method_list;
+#define TEST_OPTIONAL 0x1
+
+struct expected_method
+{
+ const char *method;
+ unsigned int flags;
+};
+
+static const struct expected_method *expected_method_list;
BOOL g_showRunnable = TRUE;
BOOL g_isRunning = TRUE;
@@ -52,15 +60,25 @@ BOOL g_isRunning = TRUE;
#define CHECK_EXPECTED_METHOD(method_name) \
do { \
trace("%s\n", method_name); \
- ok(*expected_method_list != NULL, "Extra method %s called\n", method_name); \
- if (*expected_method_list) \
+ ok(expected_method_list->method != NULL, "Extra method %s called\n", method_name); \
+ if (expected_method_list->method) \
{ \
- ok(!strcmp(*expected_method_list, method_name), "Expected %s to be called instead of %s\n", \
- *expected_method_list, method_name); \
+ while (expected_method_list->flags & TEST_OPTIONAL && \
+ strcmp(expected_method_list->method, method_name) != 0) \
+ expected_method_list++; \
+ ok(!strcmp(expected_method_list->method, method_name), "Expected %s to be called instead of %s\n", \
+ expected_method_list->method, method_name); \
expected_method_list++; \
} \
} while(0)
+#define CHECK_NO_EXTRA_METHODS() \
+ do { \
+ while (expected_method_list->flags & TEST_OPTIONAL) \
+ expected_method_list++; \
+ ok(!expected_method_list->method, "Method sequence starting from %s not called\n", expected_method_list->method); \
+ } while (0)
+
static HRESULT WINAPI OleObject_QueryInterface(IOleObject *iface, REFIID riid, void **ppv)
{
CHECK_EXPECTED_METHOD("OleObject_QueryInterface");
@@ -660,102 +678,122 @@ static void test_OleCreate(IStorage *pStorage)
HRESULT hr;
IOleObject *pObject;
FORMATETC formatetc;
- static const char *methods_olerender_none[] =
+ static const struct expected_method methods_olerender_none[] =
{
- "OleObject_QueryInterface",
- "OleObject_AddRef",
- "OleObject_QueryInterface",
- "OleObjectPersistStg_AddRef",
- "OleObjectPersistStg_InitNew",
- "OleObjectPersistStg_Release",
- "OleObject_Release",
- NULL
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", TEST_OPTIONAL },
+ { "OleObject_Release", TEST_OPTIONAL },
+ { "OleObject_QueryInterface", TEST_OPTIONAL },
+ { "OleObjectPersistStg_AddRef", 0 },
+ { "OleObjectPersistStg_InitNew", 0 },
+ { "OleObjectPersistStg_Release", 0 },
+ { "OleObject_Release", 0 },
+ { "OleObject_Release", TEST_OPTIONAL },
+ { NULL, 0 }
};
- static const char *methods_olerender_draw[] =
+ static const struct expected_method methods_olerender_draw[] =
{
- "OleObject_QueryInterface",
- "OleObject_AddRef",
- "OleObject_QueryInterface",
- "OleObjectPersistStg_AddRef",
- "OleObjectPersistStg_InitNew",
- "OleObjectPersistStg_Release",
- "OleObject_QueryInterface",
- "OleObjectRunnable_AddRef",
- "OleObjectRunnable_Run",
- "OleObjectRunnable_Release",
- "OleObject_QueryInterface",
- "OleObjectCache_AddRef",
- "OleObjectCache_Cache",
- "OleObjectCache_Release",
- "OleObject_Release",
- NULL
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObject_Release", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObject_QueryInterface", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObjectPersistStg_AddRef", 0 },
+ { "OleObjectPersistStg_InitNew", 0 },
+ { "OleObjectPersistStg_Release", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObjectRunnable_AddRef", 0 },
+ { "OleObjectRunnable_Run", 0 },
+ { "OleObjectRunnable_Release", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObjectCache_AddRef", 0 },
+ { "OleObjectCache_Cache", 0 },
+ { "OleObjectCache_Release", 0 },
+ { "OleObject_Release", 0 },
+ { "OleObject_Release", TEST_OPTIONAL /* NT4 only */ },
+ { NULL, 0 }
};
- static const char *methods_olerender_format[] =
+ static const struct expected_method methods_olerender_format[] =
{
- "OleObject_QueryInterface",
- "OleObject_AddRef",
- "OleObject_QueryInterface",
- "OleObject_AddRef",
- "OleObject_GetMiscStatus",
- "OleObject_QueryInterface",
- "OleObjectPersistStg_AddRef",
- "OleObjectPersistStg_InitNew",
- "OleObjectPersistStg_Release",
- "OleObject_SetClientSite",
- "OleObject_Release",
- "OleObject_QueryInterface",
- "OleObjectRunnable_AddRef",
- "OleObjectRunnable_Run",
- "OleObjectRunnable_Release",
- "OleObject_QueryInterface",
- "OleObjectCache_AddRef",
- "OleObjectCache_Cache",
- "OleObjectCache_Release",
- "OleObject_Release",
- NULL
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", 0 },
+ { "OleObject_GetMiscStatus", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObjectPersistStg_AddRef", 0 },
+ { "OleObjectPersistStg_InitNew", 0 },
+ { "OleObjectPersistStg_Release", 0 },
+ { "OleObject_SetClientSite", 0 },
+ { "OleObject_Release", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObjectRunnable_AddRef", 0 },
+ { "OleObjectRunnable_Run", 0 },
+ { "OleObjectRunnable_Release", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObjectCache_AddRef", 0 },
+ { "OleObjectCache_Cache", 0 },
+ { "OleObjectCache_Release", 0 },
+ { "OleObject_Release", 0 },
+ { NULL, 0 }
};
- static const char *methods_olerender_asis[] =
+ static const struct expected_method methods_olerender_asis[] =
{
- "OleObject_QueryInterface",
- "OleObject_AddRef",
- "OleObject_QueryInterface",
- "OleObjectPersistStg_AddRef",
- "OleObjectPersistStg_InitNew",
- "OleObjectPersistStg_Release",
- "OleObject_Release",
- NULL
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObject_Release", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObject_QueryInterface", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObjectPersistStg_AddRef", 0 },
+ { "OleObjectPersistStg_InitNew", 0 },
+ { "OleObjectPersistStg_Release", 0 },
+ { "OleObject_Release", 0 },
+ { "OleObject_Release", TEST_OPTIONAL /* NT4 only */ },
+ { NULL, 0 }
};
- static const char *methods_olerender_draw_no_runnable[] =
+ static const struct expected_method methods_olerender_draw_no_runnable[] =
{
- "OleObject_QueryInterface",
- "OleObject_AddRef",
- "OleObject_QueryInterface",
- "OleObjectPersistStg_AddRef",
- "OleObjectPersistStg_InitNew",
- "OleObjectPersistStg_Release",
- "OleObject_QueryInterface",
- "OleObject_QueryInterface",
- "OleObjectCache_AddRef",
- "OleObjectCache_Cache",
- "OleObjectCache_Release",
- "OleObject_Release",
- NULL
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObject_Release", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObject_QueryInterface", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObjectPersistStg_AddRef", 0 },
+ { "OleObjectPersistStg_InitNew", 0 },
+ { "OleObjectPersistStg_Release", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObjectCache_AddRef", 0 },
+ { "OleObjectCache_Cache", 0 },
+ { "OleObjectCache_Release", 0 },
+ { "OleObject_Release", 0 },
+ { "OleObject_Release", TEST_OPTIONAL /* NT4 only */ },
+ { NULL, 0 },
};
- static const char *methods_olerender_draw_no_cache[] =
+ static const struct expected_method methods_olerender_draw_no_cache[] =
{
- "OleObject_QueryInterface",
- "OleObject_AddRef",
- "OleObject_QueryInterface",
- "OleObjectPersistStg_AddRef",
- "OleObjectPersistStg_InitNew",
- "OleObjectPersistStg_Release",
- "OleObject_QueryInterface",
- "OleObjectRunnable_AddRef",
- "OleObjectRunnable_Run",
- "OleObjectRunnable_Release",
- "OleObject_QueryInterface",
- "OleObject_Release",
- NULL
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObject_Release", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObject_QueryInterface", TEST_OPTIONAL /* NT4 only */ },
+ { "OleObjectPersistStg_AddRef", 0 },
+ { "OleObjectPersistStg_InitNew", 0 },
+ { "OleObjectPersistStg_Release", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObjectRunnable_AddRef", 0 },
+ { "OleObjectRunnable_Run", 0 },
+ { "OleObjectRunnable_Release", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_Release", 0 },
+ { "OleObject_Release", TEST_OPTIONAL /* NT4 only */ },
+ { NULL, 0 }
};
runnable = &OleObjectRunnable;
@@ -765,14 +803,14 @@ static void test_OleCreate(IStorage *pStorage)
hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_NONE, NULL, NULL, pStorage, (void **)&pObject);
ok_ole_success(hr, "OleCreate");
IOleObject_Release(pObject);
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
expected_method_list = methods_olerender_draw;
trace("OleCreate with OLERENDER_DRAW:\n");
hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_DRAW, NULL, NULL, pStorage, (void **)&pObject);
ok_ole_success(hr, "OleCreate");
IOleObject_Release(pObject);
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
formatetc.cfFormat = CF_TEXT;
formatetc.ptd = NULL;
@@ -788,7 +826,7 @@ static void test_OleCreate(IStorage *pStorage)
if (pObject)
{
IOleObject_Release(pObject);
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
}
expected_method_list = methods_olerender_asis;
@@ -796,24 +834,24 @@ static void test_OleCreate(IStorage *pStorage)
hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_ASIS, NULL, NULL, pStorage, (void **)&pObject);
ok_ole_success(hr, "OleCreate");
IOleObject_Release(pObject);
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
runnable = NULL;
expected_method_list = methods_olerender_draw_no_runnable;
- trace("OleCreate with OLERENDER_DRAW (no IOlObjectRunnable):\n");
+ trace("OleCreate with OLERENDER_DRAW (no IRunnableObject):\n");
hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_DRAW, NULL, NULL, pStorage, (void **)&pObject);
ok_ole_success(hr, "OleCreate");
IOleObject_Release(pObject);
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
runnable = &OleObjectRunnable;
cache = NULL;
expected_method_list = methods_olerender_draw_no_cache;
- trace("OleCreate with OLERENDER_DRAW (no IOlObjectRunnable):\n");
+ trace("OleCreate with OLERENDER_DRAW (no IOleCache):\n");
hr = OleCreate(&CLSID_Equation3, &IID_IOleObject, OLERENDER_DRAW, NULL, NULL, pStorage, (void **)&pObject);
ok_ole_success(hr, "OleCreate");
IOleObject_Release(pObject);
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
trace("end\n");
}
@@ -822,22 +860,22 @@ static void test_OleLoad(IStorage *pStorage)
HRESULT hr;
IOleObject *pObject;
- static const char *methods_oleload[] =
+ static const struct expected_method methods_oleload[] =
{
- "OleObject_QueryInterface",
- "OleObject_AddRef",
- "OleObject_QueryInterface",
- "OleObject_AddRef",
- "OleObject_GetMiscStatus",
- "OleObject_QueryInterface",
- "OleObjectPersistStg_AddRef",
- "OleObjectPersistStg_Load",
- "OleObjectPersistStg_Release",
- "OleObject_SetClientSite",
- "OleObject_Release",
- "OleObject_QueryInterface",
- "OleObject_Release",
- NULL
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_AddRef", 0 },
+ { "OleObject_GetMiscStatus", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObjectPersistStg_AddRef", 0 },
+ { "OleObjectPersistStg_Load", 0 },
+ { "OleObjectPersistStg_Release", 0 },
+ { "OleObject_SetClientSite", 0 },
+ { "OleObject_Release", 0 },
+ { "OleObject_QueryInterface", 0 },
+ { "OleObject_Release", 0 },
+ { NULL, 0 }
};
expected_method_list = methods_oleload;
@@ -849,7 +887,7 @@ static void test_OleLoad(IStorage *pStorage)
if (pObject)
{
IOleObject_Release(pObject);
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
}
}
@@ -1074,27 +1112,27 @@ static void test_data_cache(void)
WCHAR wszPath[MAX_PATH];
static const WCHAR wszShell32[] = {'\\','s','h','e','l','l','3','2','.','d','l','l',0};
- static const char *methods_cacheinitnew[] =
+ static const struct expected_method methods_cacheinitnew[] =
{
- "AdviseSink_OnViewChange",
- "AdviseSink_OnViewChange",
- "draw_continue",
- "DataObject_DAdvise",
- "DataObject_DAdvise",
- "DataObject_DUnadvise",
- "DataObject_DUnadvise",
- NULL
+ { "AdviseSink_OnViewChange", 0 },
+ { "AdviseSink_OnViewChange", 0 },
+ { "draw_continue", 0 },
+ { "DataObject_DAdvise", 0 },
+ { "DataObject_DAdvise", 0 },
+ { "DataObject_DUnadvise", 0 },
+ { "DataObject_DUnadvise", 0 },
+ { NULL, 0 }
};
- static const char *methods_cacheload[] =
+ static const struct expected_method methods_cacheload[] =
{
- "AdviseSink_OnViewChange",
- "draw_continue",
- "draw_continue",
- "draw_continue",
- "DataObject_GetData",
- "DataObject_GetData",
- "DataObject_GetData",
- NULL
+ { "AdviseSink_OnViewChange", 0 },
+ { "draw_continue", 0 },
+ { "draw_continue", 0 },
+ { "draw_continue", 0 },
+ { "DataObject_GetData", 0 },
+ { "DataObject_GetData", 0 },
+ { "DataObject_GetData", 0 },
+ { NULL, 0 }
};
GetSystemDirectory(szSystemDir, sizeof(szSystemDir)/sizeof(szSystemDir[0]));
@@ -1167,7 +1205,8 @@ static void test_data_cache(void)
ok(hr == S_OK, "IOleCache_Cache cfFormat = %d, tymed = %d should have returned S_OK instead of 0x%08x\n",
fmtetc.cfFormat, fmtetc.tymed, hr);
else if (fmtetc.tymed == TYMED_HGLOBAL)
- ok(hr == CACHE_S_FORMATETC_NOTSUPPORTED,
+ ok(hr == CACHE_S_FORMATETC_NOTSUPPORTED ||
+ broken(hr == S_OK && fmtetc.cfFormat == CF_BITMAP) /* Win9x & NT4 */,
"IOleCache_Cache cfFormat = %d, tymed = %d should have returned CACHE_S_FORMATETC_NOTSUPPORTED instead of 0x%08x\n",
fmtetc.cfFormat, fmtetc.tymed, hr);
else
@@ -1251,7 +1290,7 @@ static void test_data_cache(void)
IOleCacheControl_Release(pOleCacheControl);
todo_wine {
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
}
/* Test with loaded data */
@@ -1323,7 +1362,7 @@ static void test_data_cache(void)
IOleCache_Release(pOleCache);
todo_wine {
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
}
IStorage_Release(pStorage);
@@ -1482,36 +1521,36 @@ static void test_default_handler(void)
static void test_runnable(void)
{
- static const char *methods_query_runnable[] =
+ static const struct expected_method methods_query_runnable[] =
{
- "OleObject_QueryInterface",
- "OleObjectRunnable_AddRef",
- "OleObjectRunnable_IsRunning",
- "OleObjectRunnable_Release",
- NULL
+ { "OleObject_QueryInterface", 0 },
+ { "OleObjectRunnable_AddRef", 0 },
+ { "OleObjectRunnable_IsRunning", 0 },
+ { "OleObjectRunnable_Release", 0 },
+ { NULL, 0 }
};
- static const char *methods_no_runnable[] =
+ static const struct expected_method methods_no_runnable[] =
{
- "OleObject_QueryInterface",
- NULL
+ { "OleObject_QueryInterface", 0 },
+ { NULL, 0 }
};
IOleObject *object = &OleObject;
expected_method_list = methods_query_runnable;
ok(OleIsRunning(object), "Object should be running\n");
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
g_isRunning = FALSE;
expected_method_list = methods_query_runnable;
ok(OleIsRunning(object) == FALSE, "Object should not be running\n");
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
g_showRunnable = FALSE; /* QueryInterface(IID_IRunnableObject, ...) will fail */
expected_method_list = methods_no_runnable;
ok(OleIsRunning(object), "Object without IRunnableObject should be running\n");
- ok(!*expected_method_list, "Method sequence starting from %s not called\n", *expected_method_list);
+ CHECK_NO_EXTRA_METHODS();
g_isRunning = TRUE;
g_showRunnable = TRUE;
diff --git a/rostests/winetests/ole32/propvariant.c b/rostests/winetests/ole32/propvariant.c
index f1cbc76ecdc..380dc141652 100644
--- a/rostests/winetests/ole32/propvariant.c
+++ b/rostests/winetests/ole32/propvariant.c
@@ -23,13 +23,14 @@
#include "wine/test.h"
/* invalid in all versions */
-#define PROP_INV 255
+#define PROP_INV 0x7f
/* valid in v0 and above (NT4+) */
#define PROP_V0 0
/* valid in v1 and above (Win2k+) */
#define PROP_V1 1
/* valid in v1a and above (WinXP+) */
#define PROP_V1A 2
+#define PROP_TODO 0x80
struct valid_mapping
{
@@ -41,28 +42,28 @@ struct valid_mapping
{
{ PROP_V0 , PROP_INV, PROP_INV, PROP_INV }, /* VT_EMPTY */
{ PROP_V0 , PROP_INV, PROP_INV, PROP_INV }, /* VT_NULL */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_I2 */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_I4 */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_R4 */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_R8 */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_CY */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_DATE */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_BSTR */
- { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_DISPATCH */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_ERROR */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_BOOL */
- { PROP_V1 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_VARIANT */
- { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_UNKNOWN */
- { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_DECIMAL */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_I2 */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_I4 */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_R4 */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_R8 */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_CY */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_DATE */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_BSTR */
+ { PROP_V1 | PROP_TODO , PROP_V1 | PROP_TODO , PROP_INV, PROP_V1 | PROP_TODO }, /* VT_DISPATCH */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_ERROR */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_BOOL */
+ { PROP_V1 | PROP_TODO , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_VARIANT */
+ { PROP_V1 | PROP_TODO , PROP_V1 | PROP_TODO , PROP_INV, PROP_V1 | PROP_TODO }, /* VT_UNKNOWN */
+ { PROP_V1 , PROP_V1 | PROP_TODO , PROP_INV, PROP_V1 | PROP_TODO }, /* VT_DECIMAL */
{ PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 15 */
- { PROP_V1 , PROP_V1 , PROP_V1 , PROP_V1 }, /* VT_I1 */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_UI1 */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_UI2 */
- { PROP_V0 , PROP_V1 , PROP_V0 , PROP_V1 }, /* VT_UI4 */
- { PROP_V0 , PROP_V1A, PROP_V0 , PROP_V1A }, /* VT_I8 */
- { PROP_V0 , PROP_V1A, PROP_V0 , PROP_V1A }, /* VT_UI8 */
- { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_INT */
- { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_UINT */
+ { PROP_V1 | PROP_TODO , PROP_V1 | PROP_TODO , PROP_V1 | PROP_TODO , PROP_V1 | PROP_TODO }, /* VT_I1 */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_UI1 */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_UI2 */
+ { PROP_V0 , PROP_V1 | PROP_TODO , PROP_V0 , PROP_V1 | PROP_TODO }, /* VT_UI4 */
+ { PROP_V0 , PROP_V1A | PROP_TODO, PROP_V0 , PROP_V1A | PROP_TODO }, /* VT_I8 */
+ { PROP_V0 , PROP_V1A | PROP_TODO, PROP_V0 , PROP_V1A | PROP_TODO }, /* VT_UI8 */
+ { PROP_V1 | PROP_TODO , PROP_V1 | PROP_TODO , PROP_INV, PROP_V1 | PROP_TODO }, /* VT_INT */
+ { PROP_V1 | PROP_TODO , PROP_V1 | PROP_TODO , PROP_INV, PROP_V1 | PROP_TODO }, /* VT_UINT */
{ PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_VOID */
{ PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_HRESULT */
{ PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_PTR */
@@ -75,7 +76,7 @@ struct valid_mapping
{ PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 33 */
{ PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 34 */
{ PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 35 */
- { PROP_V1 , PROP_V1 , PROP_INV, PROP_V1 }, /* VT_RECORD */
+ { PROP_V1 | PROP_TODO , PROP_V1 | PROP_TODO , PROP_INV, PROP_V1 | PROP_TODO }, /* VT_RECORD */
{ PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_INT_PTR */
{ PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* VT_UINT_PTR */
{ PROP_INV, PROP_INV, PROP_INV, PROP_INV }, /* 39 */
@@ -126,74 +127,83 @@ static const char* wine_vtypes[VT_CLSID+1] =
"VT_STREAMED_OBJECT","VT_STORED_OBJECT","VT_BLOB_OBJECT","VT_CF","VT_CLSID"
};
+
+static void expect(HRESULT hr, VARTYPE vt)
+{
+ int idx = vt & VT_TYPEMASK;
+ BYTE flags;
+ const char *modifier;
+
+ if(vt & VT_BYREF)
+ {
+ flags = valid_types[idx].byref;
+ modifier = "byref";
+ }
+ else if(vt & VT_ARRAY)
+ {
+ flags = valid_types[idx].with_array;
+ modifier = "array";
+ }
+ else if(vt & VT_VECTOR)
+ {
+ flags = valid_types[idx].with_vector;
+ modifier = "vector";
+ }
+ else
+ {
+ flags = valid_types[idx].simple;
+ modifier = "simple";
+ }
+
+ if(flags == PROP_INV)
+ ok(hr == STG_E_INVALIDPARAMETER, "%s (%s): got %08x\n", wine_vtypes[idx], modifier, hr);
+ else if(flags == PROP_V0)
+ ok(hr == S_OK, "%s (%s): got %08x\n", wine_vtypes[idx], modifier, hr);
+ else if(flags & PROP_TODO)
+ {
+ todo_wine
+ {
+ if(hr != S_OK)
+ win_skip("%s (%s): unsupported\n", wine_vtypes[idx], modifier);
+ else ok(hr == S_OK, "%s (%s): got %08x\n", wine_vtypes[idx], modifier, hr);
+ }
+ }
+ else
+ {
+ if(hr != S_OK)
+ win_skip("%s (%s): unsupported\n", wine_vtypes[idx], modifier);
+ else ok(hr == S_OK, "%s (%s): got %08x\n", wine_vtypes[idx], modifier, hr);
+ }
+}
+
static void test_validtypes(void)
{
PROPVARIANT propvar;
HRESULT hr;
unsigned int i;
- BYTE version;
memset(&propvar, 0, sizeof(propvar));
- /* detect version */
- propvar.vt = VT_I2 | VT_ARRAY;
- hr = PropVariantClear(&propvar);
- if (hr == S_OK)
- {
- propvar.vt = VT_I8 | VT_ARRAY;
- hr = PropVariantClear(&propvar);
- if (hr == S_OK)
- {
- version = PROP_V1A;
- trace("detected prop variant v1a\n");
- }
- else
- {
- version = PROP_V1;
- trace("detected prop variant v1\n");
- }
- }
- else
- {
- version = PROP_V0;
- trace("detected prop variant v0\n");
- }
-
for (i = 0; i < sizeof(valid_types)/sizeof(valid_types[0]); i++)
{
- BOOL expected_result;
+ VARTYPE vt;
- propvar.vt = i;
+ vt = propvar.vt = i;
hr = PropVariantClear(&propvar);
- expected_result = (valid_types[i].simple <= version ? TRUE : FALSE);
- ok(expected_result == !(hr == STG_E_INVALIDPARAMETER),
- "PropVariantClear(%s) should have returned 0x%08x, but returned 0x%08x\n",
- wine_vtypes[i],
- expected_result ? S_OK : STG_E_INVALIDPARAMETER, hr);
+ expect(hr, vt);
- propvar.vt = i | VT_ARRAY;
+ vt = propvar.vt = i | VT_ARRAY;
hr = PropVariantClear(&propvar);
- expected_result = (valid_types[i].with_array <= version ? TRUE : FALSE);
- ok(expected_result == !(hr == STG_E_INVALIDPARAMETER),
- "PropVariantClear(%s|VT_ARRAY) should have returned 0x%08x, but returned 0x%08x\n",
- wine_vtypes[i],
- expected_result ? S_OK : STG_E_INVALIDPARAMETER, hr);
+ expect(hr, vt);
- propvar.vt = i | VT_VECTOR;
+ vt = propvar.vt = i | VT_VECTOR;
hr = PropVariantClear(&propvar);
- expected_result = (valid_types[i].with_vector <= version ? TRUE : FALSE);
- ok(expected_result == !(hr == STG_E_INVALIDPARAMETER),
- "PropVariantClear(%s|VT_VECTOR) should have returned 0x%08x, but returned 0x%08x\n",
- wine_vtypes[i],
- expected_result ? S_OK : STG_E_INVALIDPARAMETER, hr);
+ expect(hr, vt);
- propvar.vt = i | VT_BYREF;
+ vt = propvar.vt = i | VT_BYREF;
hr = PropVariantClear(&propvar);
- expected_result = (valid_types[i].byref <= version ? TRUE : FALSE);
- ok(expected_result == !(hr == STG_E_INVALIDPARAMETER),
- "PropVariantClear(%s|VT_BYREF) should have returned 0x%08x, but returned 0x%08x\n",
- wine_vtypes[i],
- expected_result ? S_OK : STG_E_INVALIDPARAMETER, hr);
+ expect(hr, vt);
+
}
}
diff --git a/rostests/winetests/ole32/stg_prop.c b/rostests/winetests/ole32/stg_prop.c
index fbe2ae6b68f..82609462dc1 100644
--- a/rostests/winetests/ole32/stg_prop.c
+++ b/rostests/winetests/ole32/stg_prop.c
@@ -160,7 +160,7 @@ static void testProps(void)
hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var);
ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr);
ok(var.vt == VT_I4 && U(var).lVal == 1,
- "Didn't get expected type or value for property (got type %d, value %ld)\n",
+ "Didn't get expected type or value for property (got type %d, value %d)\n",
var.vt, U(var).lVal);
/* read by name */
spec.ulKind = PRSPEC_LPWSTR;
@@ -168,7 +168,7 @@ static void testProps(void)
hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var);
ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr);
ok(var.vt == VT_I4 && U(var).lVal == 2,
- "Didn't get expected type or value for property (got type %d, value %ld)\n",
+ "Didn't get expected type or value for property (got type %d, value %d)\n",
var.vt, U(var).lVal);
/* read string value */
spec.ulKind = PRSPEC_PROPID;
@@ -273,7 +273,7 @@ static void testProps(void)
hr = IPropertyStorage_ReadMultiple(propertyStorage, 1, &spec, &var);
ok(hr == S_OK, "ReadMultiple failed: 0x%08x\n", hr);
ok(var.vt == VT_I4 && U(var).lVal == 2,
- "Didn't get expected type or value for property (got type %d, value %ld)\n",
+ "Didn't get expected type or value for property (got type %d, value %d)\n",
var.vt, U(var).lVal);
spec.ulKind = PRSPEC_PROPID;
U(spec).propid = PIDSI_AUTHOR;
diff --git a/rostests/winetests/ole32/usrmarshal.c b/rostests/winetests/ole32/usrmarshal.c
index 3ce71bc1d40..3411cc283b1 100644
--- a/rostests/winetests/ole32/usrmarshal.c
+++ b/rostests/winetests/ole32/usrmarshal.c
@@ -44,6 +44,37 @@ unsigned char * __RPC_USER HMETAFILEPICT_UserMarshal (ULONG *, unsigned char *,
unsigned char * __RPC_USER HMETAFILEPICT_UserUnmarshal(ULONG *, unsigned char *, HMETAFILEPICT *);
void __RPC_USER HMETAFILEPICT_UserFree(ULONG *, HMETAFILEPICT *);
+static void * WINAPI user_allocate(SIZE_T size)
+{
+ return CoTaskMemAlloc(size);
+}
+
+static void WINAPI user_free(void *p)
+{
+ CoTaskMemFree(p);
+}
+
+static void init_user_marshal_cb(USER_MARSHAL_CB *umcb,
+ PMIDL_STUB_MESSAGE stub_msg,
+ PRPC_MESSAGE rpc_msg, unsigned char *buffer,
+ unsigned int size, MSHCTX context)
+{
+ memset(rpc_msg, 0, sizeof(*rpc_msg));
+ rpc_msg->Buffer = buffer;
+ rpc_msg->BufferLength = size;
+
+ memset(stub_msg, 0, sizeof(*stub_msg));
+ stub_msg->RpcMsg = rpc_msg;
+ stub_msg->Buffer = buffer;
+ stub_msg->pfnAllocate = user_allocate;
+ stub_msg->pfnFree = user_free;
+
+ memset(umcb, 0, sizeof(*umcb));
+ umcb->Flags = MAKELONG(context, NDR_LOCAL_DATA_REPRESENTATION);
+ umcb->pStubMsg = stub_msg;
+ umcb->Signature = USER_MARSHAL_CB_SIGNATURE;
+ umcb->CBType = buffer ? USER_MARSHAL_CB_UNMARSHALL : USER_MARSHAL_CB_BUFFER_SIZE;
+}
static const char cf_marshaled[] =
{
@@ -59,111 +90,136 @@ static const char cf_marshaled[] =
static void test_marshal_CLIPFORMAT(void)
{
+ USER_MARSHAL_CB umcb;
+ MIDL_STUB_MESSAGE stub_msg;
+ RPC_MESSAGE rpc_msg;
unsigned char *buffer;
- ULONG size;
- ULONG flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION);
- wireCLIPFORMAT wirecf;
+ ULONG i, size;
CLIPFORMAT cf = RegisterClipboardFormatA("MyFormat");
CLIPFORMAT cf2;
- size = CLIPFORMAT_UserSize(&flags, 0, &cf);
- ok(size == sizeof(*wirecf) + sizeof(cf_marshaled), "Wrong size %d\n", size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ size = CLIPFORMAT_UserSize(&umcb.Flags, 0, &cf);
+ ok(size == 8 + sizeof(cf_marshaled) ||
+ broken(size == 12 + sizeof(cf_marshaled)) || /* win64 adds 4 extra (unused) bytes */
+ broken(size == 8 + sizeof(cf_marshaled) - 2), /* win9x and winnt don't include the '\0' */
+ "CLIPFORMAT: Wrong size %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
- CLIPFORMAT_UserMarshal(&flags, buffer, &cf);
- wirecf = (wireCLIPFORMAT)buffer;
- ok(wirecf->fContext == WDT_REMOTE_CALL, "Context should be WDT_REMOTE_CALL instead of 0x%08lx\n", wirecf->fContext);
- ok(wirecf->u.dwValue == cf, "Marshaled value should be 0x%04x instead of 0x%04x\n", cf, wirecf->u.dwValue);
- ok(!memcmp(wirecf+1, cf_marshaled, sizeof(cf_marshaled)), "Marshaled data differs\n");
+ memset( buffer, 0xcc, size );
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ CLIPFORMAT_UserMarshal(&umcb.Flags, buffer, &cf);
+ ok(*(LONG *)(buffer + 0) == WDT_REMOTE_CALL, "CLIPFORMAT: Context should be WDT_REMOTE_CALL instead of 0x%08x\n", *(LONG *)(buffer + 0));
+ ok(*(DWORD *)(buffer + 4) == cf, "CLIPFORMAT: Marshaled value should be 0x%04x instead of 0x%04x\n", cf, *(DWORD *)(buffer + 4));
+ ok(!memcmp(buffer + 8, cf_marshaled, min( sizeof(cf_marshaled), size-8 )), "Marshaled data differs\n");
+ if (size > sizeof(cf_marshaled) + 8) /* make sure the extra bytes are not used */
+ for (i = sizeof(cf_marshaled) + 8; i < size; i++)
+ ok( buffer[i] == 0xcc, "buffer offset %u has been set to %x\n", i, buffer[i] );
- CLIPFORMAT_UserUnmarshal(&flags, buffer, &cf2);
- ok(cf == cf2, "Didn't unmarshal properly\n");
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ CLIPFORMAT_UserUnmarshal(&umcb.Flags, buffer, &cf2);
+ ok(cf == cf2, "CLIPFORMAT: Didn't unmarshal properly\n");
HeapFree(GetProcessHeap(), 0, buffer);
- CLIPFORMAT_UserFree(&flags, &cf2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ CLIPFORMAT_UserFree(&umcb.Flags, &cf2);
}
static void test_marshal_HWND(void)
{
+ USER_MARSHAL_CB umcb;
+ MIDL_STUB_MESSAGE stub_msg;
+ RPC_MESSAGE rpc_msg;
unsigned char *buffer;
ULONG size;
- ULONG flags = MAKELONG(MSHCTX_LOCAL, NDR_LOCAL_DATA_REPRESENTATION);
HWND hwnd = GetDesktopWindow();
HWND hwnd2;
wireHWND wirehwnd;
- size = HWND_UserSize(&flags, 0, &hwnd);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_LOCAL);
+ size = HWND_UserSize(&umcb.Flags, 0, &hwnd);
ok(size == sizeof(*wirehwnd), "Wrong size %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
- HWND_UserMarshal(&flags, buffer, &hwnd);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_LOCAL);
+ HWND_UserMarshal(&umcb.Flags, buffer, &hwnd);
wirehwnd = (wireHWND)buffer;
- ok(wirehwnd->fContext == WDT_INPROC_CALL, "Context should be WDT_INPROC_CALL instead of 0x%08lx\n", wirehwnd->fContext);
+ ok(wirehwnd->fContext == WDT_INPROC_CALL, "Context should be WDT_INPROC_CALL instead of 0x%08x\n", wirehwnd->fContext);
ok(wirehwnd->u.hInproc == (LONG_PTR)hwnd, "Marshaled value should be %p instead of %p\n", hwnd, (HANDLE)wirehwnd->u.hRemote);
- HWND_UserUnmarshal(&flags, buffer, &hwnd2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_LOCAL);
+ HWND_UserUnmarshal(&umcb.Flags, buffer, &hwnd2);
ok(hwnd == hwnd2, "Didn't unmarshal properly\n");
HeapFree(GetProcessHeap(), 0, buffer);
- HWND_UserFree(&flags, &hwnd2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_LOCAL);
+ HWND_UserFree(&umcb.Flags, &hwnd2);
}
static void test_marshal_HGLOBAL(void)
{
+ USER_MARSHAL_CB umcb;
+ MIDL_STUB_MESSAGE stub_msg;
+ RPC_MESSAGE rpc_msg;
unsigned char *buffer;
ULONG size;
- ULONG flags = MAKELONG(MSHCTX_LOCAL, NDR_LOCAL_DATA_REPRESENTATION);
HGLOBAL hglobal;
HGLOBAL hglobal2;
unsigned char *wirehglobal;
int i;
hglobal = NULL;
- flags = MAKELONG(MSHCTX_LOCAL, NDR_LOCAL_DATA_REPRESENTATION);
- size = HGLOBAL_UserSize(&flags, 0, &hglobal);
- /* native is poorly programmed and allocates 4 bytes more than it needs to
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_LOCAL);
+ size = HGLOBAL_UserSize(&umcb.Flags, 0, &hglobal);
+ /* native is poorly programmed and allocates 4/8 bytes more than it needs to
* here - Wine doesn't have to emulate that */
- ok((size == 8) || (size == 12), "Size should be 12, instead of %d\n", size);
+ ok((size == 8) || broken(size == 12) || broken(size == 16), "Size should be 8, instead of %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
- HGLOBAL_UserMarshal(&flags, buffer, &hglobal);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_LOCAL);
+ HGLOBAL_UserMarshal(&umcb.Flags, buffer, &hglobal);
wirehglobal = buffer;
ok(*(ULONG *)wirehglobal == WDT_REMOTE_CALL, "Context should be WDT_REMOTE_CALL instead of 0x%08x\n", *(ULONG *)wirehglobal);
wirehglobal += sizeof(ULONG);
- ok(*(ULONG *)wirehglobal == (ULONG)hglobal, "buffer+4 should be HGLOBAL\n");
- HGLOBAL_UserUnmarshal(&flags, buffer, &hglobal2);
+ ok(*(ULONG *)wirehglobal == 0, "buffer+4 should be HGLOBAL\n");
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_LOCAL);
+ HGLOBAL_UserUnmarshal(&umcb.Flags, buffer, &hglobal2);
ok(hglobal2 == hglobal, "Didn't unmarshal properly\n");
HeapFree(GetProcessHeap(), 0, buffer);
- HGLOBAL_UserFree(&flags, &hglobal2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_LOCAL);
+ HGLOBAL_UserFree(&umcb.Flags, &hglobal2);
hglobal = GlobalAlloc(0, 4);
buffer = GlobalLock(hglobal);
for (i = 0; i < 4; i++)
buffer[i] = i;
GlobalUnlock(hglobal);
- flags = MAKELONG(MSHCTX_LOCAL, NDR_LOCAL_DATA_REPRESENTATION);
- size = HGLOBAL_UserSize(&flags, 0, &hglobal);
- /* native is poorly programmed and allocates 4 bytes more than it needs to
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_LOCAL);
+ size = HGLOBAL_UserSize(&umcb.Flags, 0, &hglobal);
+ /* native is poorly programmed and allocates 4/8 bytes more than it needs to
* here - Wine doesn't have to emulate that */
- ok((size == 24) || (size == 28), "Size should be 24 or 28, instead of %d\n", size);
+ ok((size == 24) || broken(size == 28) || broken(size == 32), "Size should be 24, instead of %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
- HGLOBAL_UserMarshal(&flags, buffer, &hglobal);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_LOCAL);
+ HGLOBAL_UserMarshal(&umcb.Flags, buffer, &hglobal);
wirehglobal = buffer;
ok(*(ULONG *)wirehglobal == WDT_REMOTE_CALL, "Context should be WDT_REMOTE_CALL instead of 0x%08x\n", *(ULONG *)wirehglobal);
wirehglobal += sizeof(ULONG);
- ok(*(ULONG *)wirehglobal == (ULONG)hglobal, "buffer+0x4 should be HGLOBAL\n");
+ ok(*(ULONG *)wirehglobal == (ULONG)(ULONG_PTR)hglobal, "buffer+0x4 should be HGLOBAL\n");
wirehglobal += sizeof(ULONG);
- ok(*(ULONG *)wirehglobal == 4, "buffer+0x8 should be size of HGLOBAL\n");
+ ok(*(ULONG *)wirehglobal == 4, "buffer+0x8 should be size of HGLOBAL instead of %d\n", *(ULONG *)wirehglobal);
wirehglobal += sizeof(ULONG);
- ok(*(ULONG *)wirehglobal == (ULONG)hglobal, "buffer+0xc should be HGLOBAL\n");
+ ok(*(ULONG *)wirehglobal == (ULONG)(ULONG_PTR)hglobal, "buffer+0xc should be HGLOBAL\n");
wirehglobal += sizeof(ULONG);
- ok(*(ULONG *)wirehglobal == 4, "buffer+0x10 should be size of HGLOBAL\n");
+ ok(*(ULONG *)wirehglobal == 4, "buffer+0x10 should be size of HGLOBAL instead of %d\n", *(ULONG *)wirehglobal);
wirehglobal += sizeof(ULONG);
for (i = 0; i < 4; i++)
ok(wirehglobal[i] == i, "buffer+0x%x should be %d\n", 0x10 + i, i);
- HGLOBAL_UserUnmarshal(&flags, buffer, &hglobal2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_LOCAL);
+ HGLOBAL_UserUnmarshal(&umcb.Flags, buffer, &hglobal2);
ok(hglobal2 != NULL, "Didn't unmarshal properly\n");
HeapFree(GetProcessHeap(), 0, buffer);
- HGLOBAL_UserFree(&flags, &hglobal2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_LOCAL);
+ HGLOBAL_UserFree(&umcb.Flags, &hglobal2);
GlobalFree(hglobal);
}
@@ -177,19 +233,23 @@ static HENHMETAFILE create_emf(void)
static void test_marshal_HENHMETAFILE(void)
{
+ USER_MARSHAL_CB umcb;
+ MIDL_STUB_MESSAGE stub_msg;
+ RPC_MESSAGE rpc_msg;
unsigned char *buffer;
ULONG size;
- ULONG flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION);
HENHMETAFILE hemf;
HENHMETAFILE hemf2 = NULL;
unsigned char *wirehemf;
hemf = create_emf();
- size = HENHMETAFILE_UserSize(&flags, 0, &hemf);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ size = HENHMETAFILE_UserSize(&umcb.Flags, 0, &hemf);
ok(size > 20, "size should be at least 20 bytes, not %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
- HENHMETAFILE_UserMarshal(&flags, buffer, &hemf);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ HENHMETAFILE_UserMarshal(&umcb.Flags, buffer, &hemf);
wirehemf = buffer;
ok(*(DWORD *)wirehemf == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehemf);
wirehemf += sizeof(DWORD);
@@ -204,29 +264,35 @@ static void test_marshal_HENHMETAFILE(void)
/* ... rest of data not tested - refer to tests for GetEnhMetaFileBits
* at this point */
- HENHMETAFILE_UserUnmarshal(&flags, buffer, &hemf2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ HENHMETAFILE_UserUnmarshal(&umcb.Flags, buffer, &hemf2);
ok(hemf2 != NULL, "HENHMETAFILE didn't unmarshal\n");
HeapFree(GetProcessHeap(), 0, buffer);
- HENHMETAFILE_UserFree(&flags, &hemf2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ HENHMETAFILE_UserFree(&umcb.Flags, &hemf2);
DeleteEnhMetaFile(hemf);
/* test NULL emf */
hemf = NULL;
- size = HENHMETAFILE_UserSize(&flags, 0, &hemf);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ size = HENHMETAFILE_UserSize(&umcb.Flags, 0, &hemf);
ok(size == 8, "size should be 8 bytes, not %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
- HENHMETAFILE_UserMarshal(&flags, buffer, &hemf);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ HENHMETAFILE_UserMarshal(&umcb.Flags, buffer, &hemf);
wirehemf = buffer;
ok(*(DWORD *)wirehemf == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehemf);
wirehemf += sizeof(DWORD);
ok(*(DWORD *)wirehemf == (DWORD)(DWORD_PTR)hemf, "wirestgm + 0x4 should be hemf instead of 0x%08x\n", *(DWORD *)wirehemf);
wirehemf += sizeof(DWORD);
- HENHMETAFILE_UserUnmarshal(&flags, buffer, &hemf2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ HENHMETAFILE_UserUnmarshal(&umcb.Flags, buffer, &hemf2);
ok(hemf2 == NULL, "NULL HENHMETAFILE didn't unmarshal\n");
HeapFree(GetProcessHeap(), 0, buffer);
- HENHMETAFILE_UserFree(&flags, &hemf2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ HENHMETAFILE_UserFree(&umcb.Flags, &hemf2);
}
static HMETAFILE create_mf(void)
@@ -239,19 +305,23 @@ static HMETAFILE create_mf(void)
static void test_marshal_HMETAFILE(void)
{
+ USER_MARSHAL_CB umcb;
+ MIDL_STUB_MESSAGE stub_msg;
+ RPC_MESSAGE rpc_msg;
unsigned char *buffer;
ULONG size;
- ULONG flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION);
HMETAFILE hmf;
HMETAFILE hmf2 = NULL;
unsigned char *wirehmf;
hmf = create_mf();
- size = HMETAFILE_UserSize(&flags, 0, &hmf);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ size = HMETAFILE_UserSize(&umcb.Flags, 0, &hmf);
ok(size > 20, "size should be at least 20 bytes, not %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
- HMETAFILE_UserMarshal(&flags, buffer, &hmf);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ HMETAFILE_UserMarshal(&umcb.Flags, buffer, &hmf);
wirehmf = buffer;
ok(*(DWORD *)wirehmf == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehmf);
wirehmf += sizeof(DWORD);
@@ -266,29 +336,32 @@ static void test_marshal_HMETAFILE(void)
/* ... rest of data not tested - refer to tests for GetMetaFileBits
* at this point */
- HMETAFILE_UserUnmarshal(&flags, buffer, &hmf2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ HMETAFILE_UserUnmarshal(&umcb.Flags, buffer, &hmf2);
ok(hmf2 != NULL, "HMETAFILE didn't unmarshal\n");
HeapFree(GetProcessHeap(), 0, buffer);
- HMETAFILE_UserFree(&flags, &hmf2);
+ HMETAFILE_UserFree(&umcb.Flags, &hmf2);
DeleteMetaFile(hmf);
/* test NULL emf */
hmf = NULL;
- size = HMETAFILE_UserSize(&flags, 0, &hmf);
+ size = HMETAFILE_UserSize(&umcb.Flags, 0, &hmf);
ok(size == 8, "size should be 8 bytes, not %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
- HMETAFILE_UserMarshal(&flags, buffer, &hmf);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ HMETAFILE_UserMarshal(&umcb.Flags, buffer, &hmf);
wirehmf = buffer;
ok(*(DWORD *)wirehmf == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehmf);
wirehmf += sizeof(DWORD);
ok(*(DWORD *)wirehmf == (DWORD)(DWORD_PTR)hmf, "wirestgm + 0x4 should be hmf instead of 0x%08x\n", *(DWORD *)wirehmf);
wirehmf += sizeof(DWORD);
- HMETAFILE_UserUnmarshal(&flags, buffer, &hmf2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ HMETAFILE_UserUnmarshal(&umcb.Flags, buffer, &hmf2);
ok(hmf2 == NULL, "NULL HMETAFILE didn't unmarshal\n");
HeapFree(GetProcessHeap(), 0, buffer);
- HMETAFILE_UserFree(&flags, &hmf2);
+ HMETAFILE_UserFree(&umcb.Flags, &hmf2);
}
#define USER_MARSHAL_PTR_PREFIX \
@@ -297,9 +370,11 @@ static void test_marshal_HMETAFILE(void)
static void test_marshal_HMETAFILEPICT(void)
{
+ USER_MARSHAL_CB umcb;
+ MIDL_STUB_MESSAGE stub_msg;
+ RPC_MESSAGE rpc_msg;
unsigned char *buffer, *buffer_end;
ULONG size;
- ULONG flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION);
HMETAFILEPICT hmfp;
HMETAFILEPICT hmfp2 = NULL;
METAFILEPICT *pmfp;
@@ -313,11 +388,13 @@ static void test_marshal_HMETAFILEPICT(void)
pmfp->hMF = create_mf();
GlobalUnlock(hmfp);
- size = HMETAFILEPICT_UserSize(&flags, 0, &hmfp);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ size = HMETAFILEPICT_UserSize(&umcb.Flags, 0, &hmfp);
ok(size > 20, "size should be at least 20 bytes, not %d\n", size);
trace("size is %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
- buffer_end = HMETAFILEPICT_UserMarshal(&flags, buffer, &hmfp);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ buffer_end = HMETAFILEPICT_UserMarshal(&umcb.Flags, buffer, &hmfp);
wirehmfp = buffer;
ok(*(DWORD *)wirehmfp == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehmfp);
wirehmfp += sizeof(DWORD);
@@ -348,10 +425,12 @@ static void test_marshal_HMETAFILEPICT(void)
/* ... rest of data not tested - refer to tests for GetMetaFileBits
* at this point */
- HMETAFILEPICT_UserUnmarshal(&flags, buffer, &hmfp2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ HMETAFILEPICT_UserUnmarshal(&umcb.Flags, buffer, &hmfp2);
ok(hmfp2 != NULL, "HMETAFILEPICT didn't unmarshal\n");
HeapFree(GetProcessHeap(), 0, buffer);
- HMETAFILEPICT_UserFree(&flags, &hmfp2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ HMETAFILEPICT_UserFree(&umcb.Flags, &hmfp2);
pmfp = GlobalLock(hmfp);
DeleteMetaFile(pmfp->hMF);
GlobalUnlock(hmfp);
@@ -360,10 +439,12 @@ static void test_marshal_HMETAFILEPICT(void)
/* test NULL emf */
hmfp = NULL;
- size = HMETAFILEPICT_UserSize(&flags, 0, &hmfp);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ size = HMETAFILEPICT_UserSize(&umcb.Flags, 0, &hmfp);
ok(size == 8, "size should be 8 bytes, not %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
- HMETAFILEPICT_UserMarshal(&flags, buffer, &hmfp);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ HMETAFILEPICT_UserMarshal(&umcb.Flags, buffer, &hmfp);
wirehmfp = buffer;
ok(*(DWORD *)wirehmfp == WDT_REMOTE_CALL, "wirestgm + 0x0 should be WDT_REMOTE_CALL instead of 0x%08x\n", *(DWORD *)wirehmfp);
wirehmfp += sizeof(DWORD);
@@ -371,10 +452,12 @@ static void test_marshal_HMETAFILEPICT(void)
wirehmfp += sizeof(DWORD);
hmfp2 = NULL;
- HMETAFILEPICT_UserUnmarshal(&flags, buffer, &hmfp2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
+ HMETAFILEPICT_UserUnmarshal(&umcb.Flags, buffer, &hmfp2);
ok(hmfp2 == NULL, "NULL HMETAFILE didn't unmarshal\n");
HeapFree(GetProcessHeap(), 0, buffer);
- HMETAFILEPICT_UserFree(&flags, &hmfp2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ HMETAFILEPICT_UserFree(&umcb.Flags, &hmfp2);
}
static HRESULT WINAPI Test_IUnknown_QueryInterface(
@@ -421,27 +504,21 @@ void __RPC_USER WdtpInterfacePointer_UserFree(IUnknown *);
static void test_marshal_WdtpInterfacePointer(void)
{
+ USER_MARSHAL_CB umcb;
+ MIDL_STUB_MESSAGE stub_msg;
+ RPC_MESSAGE rpc_msg;
unsigned char *buffer, *buffer_end;
ULONG size;
- MIDL_STUB_MESSAGE stubmsg;
- USER_MARSHAL_CB umcb;
IUnknown *unk;
IUnknown *unk2;
unsigned char *wireip;
const IID *iid;
- memset(&stubmsg, 0xcc, sizeof(stubmsg));
- stubmsg.dwDestContext = MSHCTX_INPROC;
- stubmsg.pvDestContext = NULL;
-
- memset(&umcb, 0xcc, sizeof(umcb));
- umcb.Flags = MAKELONG(MSHCTX_INPROC, NDR_LOCAL_DATA_REPRESENTATION);
- umcb.pStubMsg = &stubmsg;
-
/* shows that the WdtpInterfacePointer functions don't marshal anything for
* NULL pointers, so code using these functions must handle that case
* itself */
unk = NULL;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_INPROC);
size = WdtpInterfacePointer_UserSize(&umcb.Flags, umcb.Flags, 0, unk, &IID_IUnknown);
ok(size == 0, "size should be 0 bytes, not %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
@@ -450,11 +527,13 @@ static void test_marshal_WdtpInterfacePointer(void)
HeapFree(GetProcessHeap(), 0, buffer);
unk = &Test_Unknown;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_INPROC);
size = WdtpInterfacePointer_UserSize(&umcb.Flags, umcb.Flags, 0, unk, &IID_IUnknown);
todo_wine
ok(size > 28, "size should be > 28 bytes, not %d\n", size);
trace("WdtpInterfacePointer_UserSize returned %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_INPROC);
buffer_end = WdtpInterfacePointer_UserMarshal(&umcb.Flags, umcb.Flags, buffer, unk, &IID_IUnknown);
wireip = buffer;
if (size >= 28)
@@ -482,10 +561,12 @@ static void test_marshal_WdtpInterfacePointer(void)
}
unk2 = NULL;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_INPROC);
WdtpInterfacePointer_UserUnmarshal(&umcb.Flags, buffer, &unk2, &IID_IUnknown);
todo_wine
ok(unk2 != NULL, "IUnknown object didn't unmarshal properly\n");
HeapFree(GetProcessHeap(), 0, buffer);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_INPROC);
WdtpInterfacePointer_UserFree(unk2);
}
diff --git a/rostests/winetests/oleaut32/olefont.c b/rostests/winetests/oleaut32/olefont.c
index cce17777f4a..8e26a0ff505 100644
--- a/rostests/winetests/oleaut32/olefont.c
+++ b/rostests/winetests/oleaut32/olefont.c
@@ -808,7 +808,7 @@ START_TEST(olefont)
pOleCreateFontIndirect = (void*)GetProcAddress(hOleaut32, "OleCreateFontIndirect");
if (!pOleCreateFontIndirect)
{
- skip("OleCreateFontIndirect not available\n");
+ win_skip("OleCreateFontIndirect not available\n");
return;
}
diff --git a/rostests/winetests/oleaut32/olepicture.c b/rostests/winetests/oleaut32/olepicture.c
index 11304104293..2dc1b05cf92 100644
--- a/rostests/winetests/oleaut32/olepicture.c
+++ b/rostests/winetests/oleaut32/olepicture.c
@@ -477,7 +477,7 @@ static void test_OleCreatePictureIndirect(void)
if(!pOleCreatePictureIndirect)
{
- skip("Skipping OleCreatePictureIndirect tests\n");
+ win_skip("Skipping OleCreatePictureIndirect tests\n");
return;
}
@@ -707,7 +707,7 @@ START_TEST(olepicture)
pOleCreatePictureIndirect = (void*)GetProcAddress(hOleaut32, "OleCreatePictureIndirect");
if (!pOleLoadPicture)
{
- skip("OleLoadPicture is not available\n");
+ win_skip("OleLoadPicture is not available\n");
return;
}
diff --git a/rostests/winetests/oleaut32/safearray.c b/rostests/winetests/oleaut32/safearray.c
index a34f09582ee..d5390566a85 100644
--- a/rostests/winetests/oleaut32/safearray.c
+++ b/rostests/winetests/oleaut32/safearray.c
@@ -146,7 +146,7 @@ static const IRecordInfoVtbl IRecordInfoImpl_VTable =
(PVOID)IRecordInfoImpl_Dummy,
(PVOID)IRecordInfoImpl_Dummy,
(PVOID)IRecordInfoImpl_Dummy,
- (PVOID)IRecordInfoImpl_GetSize,
+ IRecordInfoImpl_GetSize,
(PVOID)IRecordInfoImpl_Dummy,
(PVOID)IRecordInfoImpl_Dummy,
(PVOID)IRecordInfoImpl_Dummy,
diff --git a/rostests/winetests/oleaut32/tmarshal.c b/rostests/winetests/oleaut32/tmarshal.c
index adc5d9f28dd..a9392c5ff4c 100644
--- a/rostests/winetests/oleaut32/tmarshal.c
+++ b/rostests/winetests/oleaut32/tmarshal.c
@@ -849,7 +849,7 @@ static HRESULT WINAPI KindaEnum_Next(
static HRESULT WINAPI KindaEnum_Count(
IKindaEnumWidget *iface,
- /* [out] */ unsigned long __RPC_FAR *count)
+ /* [out] */ ULONG __RPC_FAR *count)
{
return E_NOTIMPL;
}
diff --git a/rostests/winetests/oleaut32/typelib.c b/rostests/winetests/oleaut32/typelib.c
index 7c0e2c595b9..277e97d396b 100644
--- a/rostests/winetests/oleaut32/typelib.c
+++ b/rostests/winetests/oleaut32/typelib.c
@@ -638,6 +638,10 @@ static void test_QueryPathOfRegTypeLib(void)
{ 3, 22, S_OK, {'f','a','k','e','_','3','_','3','7','.','d','l','l',0 } },
{ 3, 37, S_OK, {'f','a','k','e','_','3','_','3','7','.','d','l','l',0 } },
{ 3, 40, S_OK, {'f','a','k','e','_','3','_','3','7','.','d','l','l',0 } },
+ { 0xffff, 0xffff, S_OK, {'f','a','k','e','_','5','_','3','7','.','d','l','l',0 } },
+ { 0xffff, 0, TYPE_E_LIBNOTREGISTERED, { 0 } },
+ { 3, 0xffff, TYPE_E_LIBNOTREGISTERED, { 0 } },
+ { 5, 0xffff, TYPE_E_LIBNOTREGISTERED, { 0 } },
{ 4, 0, TYPE_E_LIBNOTREGISTERED, { 0 } }
};
static const WCHAR base[] = {'f','a','k','e',0};
@@ -657,6 +661,7 @@ static void test_QueryPathOfRegTypeLib(void)
if (!do_typelib_reg_key(&uid, 3, 0, base, 0)) return;
if (!do_typelib_reg_key(&uid, 3, 1, base, 0)) return;
if (!do_typelib_reg_key(&uid, 3, 37, base, 0)) return;
+ if (!do_typelib_reg_key(&uid, 5, 37, base, 0)) return;
for (i = 0; i < sizeof(td)/sizeof(td[0]); i++)
{
@@ -767,15 +772,17 @@ if(use_midl_tlb) {
hr = ITypeInfo_GetTypeAttr(pTI, &pTA);
ok(hr == S_OK, "hr %08x\n", hr);
- ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind);
- ok(pTA->cbSizeVft == 7 * sizeof(void *), "sizevft %d\n", pTA->cbSizeVft);
-if(use_midl_tlb) {
- ok(pTA->wTypeFlags == TYPEFLAG_FDUAL, "typeflags %x\n", pTA->wTypeFlags);
- }
- ok(pTA->cFuncs == 8, "cfuncs %d\n", pTA->cFuncs);
- ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes);
- ITypeInfo_ReleaseTypeAttr(pTI, pTA);
-
+ if (hr == S_OK)
+ {
+ ok(pTA->typekind == TKIND_DISPATCH, "kind %04x\n", pTA->typekind);
+ ok(pTA->cbSizeVft == 7 * sizeof(void *), "sizevft %d\n", pTA->cbSizeVft);
+ if(use_midl_tlb) {
+ ok(pTA->wTypeFlags == TYPEFLAG_FDUAL, "typeflags %x\n", pTA->wTypeFlags);
+ }
+ ok(pTA->cFuncs == 8, "cfuncs %d\n", pTA->cFuncs);
+ ok(pTA->cImplTypes == 1, "cimpltypes %d\n", pTA->cImplTypes);
+ ITypeInfo_ReleaseTypeAttr(pTI, pTA);
+ }
hr = ITypeInfo_GetRefTypeOfImplType(pTI, 0, &href);
ok(hr == S_OK, "hr %08x\n", hr);
hr = ITypeInfo_GetRefTypeInfo(pTI, href, &pTI_p);
diff --git a/rostests/winetests/oleaut32/usrmarshal.c b/rostests/winetests/oleaut32/usrmarshal.c
index 9b12b2e0002..38827b1dcd9 100644
--- a/rostests/winetests/oleaut32/usrmarshal.c
+++ b/rostests/winetests/oleaut32/usrmarshal.c
@@ -35,10 +35,8 @@
# define V_U2(A) (*(A))
#endif
-/* doesn't work on Windows due to needing more of the
- * MIDL_STUB_MESSAGE structure to be filled out */
-#define LPSAFEARRAY_UNMARSHAL_WORKS 0
-#define BSTR_UNMARSHAL_WORKS 0
+#define LPSAFEARRAY_UNMARSHAL_WORKS 1
+#define BSTR_UNMARSHAL_WORKS 1
#define VARIANT_UNMARSHAL_WORKS 1
static inline SF_TYPE get_union_type(SAFEARRAY *psa)
@@ -148,8 +146,8 @@ static void check_safearray(void *buffer, LPSAFEARRAY lpsa)
wiresa += sizeof(DWORD);
ok(*(DWORD *)wiresa == cell_count, "wiresa + 0x1c should be %u instead of %u\n", cell_count, *(DWORD *)wiresa);
wiresa += sizeof(DWORD);
- ok(*(DWORD_PTR *)wiresa == (DWORD_PTR)lpsa->pvData, "wiresa + 0x20 should be lpsa->pvData instead of 0x%08lx\n", *(DWORD_PTR *)wiresa);
- wiresa += sizeof(DWORD_PTR);
+ ok(*(DWORD *)wiresa, "wiresa + 0x20 should be non-zero instead of 0x%08x\n", *(DWORD *)wiresa);
+ wiresa += sizeof(DWORD);
if(sftype == SF_HAVEIID)
{
GUID guid;
@@ -165,22 +163,51 @@ static void check_safearray(void *buffer, LPSAFEARRAY lpsa)
/* elements are now pointed to by wiresa */
}
+static void * WINAPI user_allocate(SIZE_T size)
+{
+ return CoTaskMemAlloc(size);
+}
+
+static void WINAPI user_free(void *p)
+{
+ CoTaskMemFree(p);
+}
+
+static void init_user_marshal_cb(USER_MARSHAL_CB *umcb,
+ PMIDL_STUB_MESSAGE stub_msg,
+ PRPC_MESSAGE rpc_msg, unsigned char *buffer,
+ unsigned int size, MSHCTX context)
+{
+ memset(rpc_msg, 0, sizeof(*rpc_msg));
+ rpc_msg->Buffer = buffer;
+ rpc_msg->BufferLength = size;
+
+ memset(stub_msg, 0, sizeof(*stub_msg));
+ stub_msg->RpcMsg = rpc_msg;
+ stub_msg->Buffer = buffer;
+ stub_msg->pfnAllocate = user_allocate;
+ stub_msg->pfnFree = user_free;
+
+ memset(umcb, 0, sizeof(*umcb));
+ umcb->Flags = MAKELONG(context, NDR_LOCAL_DATA_REPRESENTATION);
+ umcb->pStubMsg = stub_msg;
+ umcb->Signature = USER_MARSHAL_CB_SIGNATURE;
+ umcb->CBType = buffer ? USER_MARSHAL_CB_UNMARSHALL : USER_MARSHAL_CB_BUFFER_SIZE;
+}
+
static void test_marshal_LPSAFEARRAY(void)
{
unsigned char *buffer;
- unsigned long size;
+ ULONG size;
LPSAFEARRAY lpsa;
LPSAFEARRAY lpsa2 = NULL;
SAFEARRAYBOUND sab;
- MIDL_STUB_MESSAGE stubMsg = { 0 };
- USER_MARSHAL_CB umcb = { 0 };
+ RPC_MESSAGE rpc_msg;
+ MIDL_STUB_MESSAGE stub_msg;
+ USER_MARSHAL_CB umcb;
HRESULT hr;
VARTYPE vt;
- umcb.Flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION);
- umcb.pReserve = NULL;
- umcb.pStubMsg = &stubMsg;
-
sab.lLbound = 5;
sab.cElements = 10;
@@ -188,11 +215,14 @@ static void test_marshal_LPSAFEARRAY(void)
*(DWORD *)lpsa->pvData = 0xcafebabe;
lpsa->cLocks = 7;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 1, &lpsa);
- ok(size == 68, "size should be 68 bytes, not %ld\n", size);
+ ok(size == 68, "size should be 68 bytes, not %d\n", size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa);
- ok(size == 64, "size should be 64 bytes, not %ld\n", size);
+ ok(size == 64, "size should be 64 bytes, not %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa);
check_safearray(buffer, lpsa);
@@ -200,11 +230,13 @@ static void test_marshal_LPSAFEARRAY(void)
if (LPSAFEARRAY_UNMARSHAL_WORKS)
{
VARTYPE vt, vt2;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserUnmarshal(&umcb.Flags, buffer, &lpsa2);
ok(lpsa2 != NULL, "LPSAFEARRAY didn't unmarshal\n");
SafeArrayGetVartype(lpsa, &vt);
SafeArrayGetVartype(lpsa2, &vt2);
ok(vt == vt2, "vts differ %x %x\n", vt, vt2);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserFree(&umcb.Flags, &lpsa2);
}
HeapFree(GetProcessHeap(), 0, buffer);
@@ -214,16 +246,20 @@ static void test_marshal_LPSAFEARRAY(void)
/* test NULL safe array */
lpsa = NULL;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa);
- ok(size == 4, "size should be 4 bytes, not %ld\n", size);
+ ok(size == 4, "size should be 4 bytes, not %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa);
check_safearray(buffer, lpsa);
if (LPSAFEARRAY_UNMARSHAL_WORKS)
{
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserUnmarshal(&umcb.Flags, buffer, &lpsa2);
ok(lpsa2 == NULL, "NULL LPSAFEARRAY didn't unmarshal\n");
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserFree(&umcb.Flags, &lpsa2);
}
HeapFree(GetProcessHeap(), 0, buffer);
@@ -235,11 +271,14 @@ static void test_marshal_LPSAFEARRAY(void)
*(double *)lpsa->pvData = 3.1415;
lpsa->cLocks = 7;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 1, &lpsa);
- ok(size == 128, "size should be 128 bytes, not %ld\n", size);
+ ok(size == 128, "size should be 128 bytes, not %d\n", size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa);
- ok(size == 128, "size should be 128 bytes, not %ld\n", size);
+ ok(size == 128, "size should be 128 bytes, not %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa);
check_safearray(buffer, lpsa);
@@ -260,9 +299,11 @@ static void test_marshal_LPSAFEARRAY(void)
hr = SafeArrayGetVartype(lpsa, &vt);
ok(hr == E_INVALIDARG, "ret %08x\n", hr);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa);
- ok(size == 432, "size %ld\n", size);
+ ok(size == 432, "size %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa);
check_safearray(buffer, lpsa);
HeapFree(GetProcessHeap(), 0, buffer);
@@ -282,10 +323,12 @@ static void test_marshal_LPSAFEARRAY(void)
hr = SafeArrayGetVartype(lpsa, &vt);
ok(hr == E_INVALIDARG, "ret %08x\n", hr);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = LPSAFEARRAY_UserSize(&umcb.Flags, 0, &lpsa);
todo_wine
- ok(size == 1388, "size %ld\n", size);
+ ok(size == 1388, "size %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
LPSAFEARRAY_UserMarshal(&umcb.Flags, buffer, &lpsa);
check_safearray(buffer, lpsa);
HeapFree(GetProcessHeap(), 0, buffer);
@@ -316,30 +359,31 @@ static void check_bstr(void *buffer, BSTR b)
static void test_marshal_BSTR(void)
{
- unsigned long size;
- MIDL_STUB_MESSAGE stubMsg = { 0 };
- USER_MARSHAL_CB umcb = { 0 };
+ ULONG size;
+ RPC_MESSAGE rpc_msg;
+ MIDL_STUB_MESSAGE stub_msg;
+ USER_MARSHAL_CB umcb;
unsigned char *buffer, *next;
BSTR b, b2;
WCHAR str[] = {'m','a','r','s','h','a','l',' ','t','e','s','t','1',0};
DWORD len;
- umcb.Flags = MAKELONG(MSHCTX_DIFFERENTMACHINE, NDR_LOCAL_DATA_REPRESENTATION);
- umcb.pReserve = NULL;
- umcb.pStubMsg = &stubMsg;
-
b = SysAllocString(str);
len = SysStringLen(b);
ok(len == 13, "get %d\n", len);
/* BSTRs are DWORD aligned */
- size = BSTR_UserSize(&umcb.Flags, 1, &b);
- ok(size == 42, "size %ld\n", size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
+ size = BSTR_UserSize(&umcb.Flags, 1, &b);
+ ok(size == 42, "size %d\n", size);
+
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = BSTR_UserSize(&umcb.Flags, 0, &b);
- ok(size == 38, "size %ld\n", size);
+ ok(size == 38, "size %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
next = BSTR_UserMarshal(&umcb.Flags, buffer, &b);
ok(next == buffer + size, "got %p expect %p\n", next, buffer + size);
check_bstr(buffer, b);
@@ -347,10 +391,12 @@ static void test_marshal_BSTR(void)
if (BSTR_UNMARSHAL_WORKS)
{
b2 = NULL;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
next = BSTR_UserUnmarshal(&umcb.Flags, buffer, &b2);
ok(next == buffer + size, "got %p expect %p\n", next, buffer + size);
ok(b2 != NULL, "BSTR didn't unmarshal\n");
ok(!memcmp(b, b2, (len + 1) * 2), "strings differ\n");
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
BSTR_UserFree(&umcb.Flags, &b2);
}
@@ -358,10 +404,12 @@ static void test_marshal_BSTR(void)
SysFreeString(b);
b = NULL;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = BSTR_UserSize(&umcb.Flags, 0, &b);
- ok(size == 12, "size %ld\n", size);
+ ok(size == 12, "size %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
next = BSTR_UserMarshal(&umcb.Flags, buffer, &b);
ok(next == buffer + size, "got %p expect %p\n", next, buffer + size);
@@ -369,9 +417,11 @@ static void test_marshal_BSTR(void)
if (BSTR_UNMARSHAL_WORKS)
{
b2 = NULL;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
next = BSTR_UserUnmarshal(&umcb.Flags, buffer, &b2);
ok(next == buffer + size, "got %p expect %p\n", next, buffer + size);
ok(b2 == NULL, "NULL BSTR didn't unmarshal\n");
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
BSTR_UserFree(&umcb.Flags, &b2);
}
HeapFree(GetProcessHeap(), 0, buffer);
@@ -383,11 +433,13 @@ static void test_marshal_BSTR(void)
len = SysStringByteLen(b);
ok(len == 3, "get %d\n", len);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = BSTR_UserSize(&umcb.Flags, 0, &b);
- ok(size == 16, "size %ld\n", size);
+ ok(size == 16, "size %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
memset(buffer, 0xcc, size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
next = BSTR_UserMarshal(&umcb.Flags, buffer, &b);
ok(next == buffer + size, "got %p expect %p\n", next, buffer + size);
check_bstr(buffer, b);
@@ -396,10 +448,12 @@ static void test_marshal_BSTR(void)
if (BSTR_UNMARSHAL_WORKS)
{
b2 = NULL;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
next = BSTR_UserUnmarshal(&umcb.Flags, buffer, &b2);
ok(next == buffer + size, "got %p expect %p\n", next, buffer + size);
ok(b2 != NULL, "BSTR didn't unmarshal\n");
ok(!memcmp(b, b2, len), "strings differ\n");
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
BSTR_UserFree(&umcb.Flags, &b2);
}
HeapFree(GetProcessHeap(), 0, buffer);
@@ -411,10 +465,12 @@ static void test_marshal_BSTR(void)
len = SysStringByteLen(b);
ok(len == 0, "get %d\n", len);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
size = BSTR_UserSize(&umcb.Flags, 0, &b);
- ok(size == 12, "size %ld\n", size);
+ ok(size == 12, "size %d\n", size);
buffer = HeapAlloc(GetProcessHeap(), 0, size);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
next = BSTR_UserMarshal(&umcb.Flags, buffer, &b);
ok(next == buffer + size, "got %p expect %p\n", next, buffer + size);
check_bstr(buffer, b);
@@ -422,11 +478,13 @@ static void test_marshal_BSTR(void)
if (BSTR_UNMARSHAL_WORKS)
{
b2 = NULL;
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, buffer, size, MSHCTX_DIFFERENTMACHINE);
next = BSTR_UserUnmarshal(&umcb.Flags, buffer, &b2);
ok(next == buffer + size, "got %p expect %p\n", next, buffer + size);
ok(b2 != NULL, "NULL LPSAFEARRAY didn't unmarshal\n");
len = SysStringByteLen(b2);
ok(len == 0, "byte len %d\n", len);
+ init_user_marshal_cb(&umcb, &stub_msg, &rpc_msg, NULL, 0, MSHCTX_DIFFERENTMACHINE);
BSTR_UserFree(&umcb.Flags, &b2);
}
HeapFree(GetProcessHeap(), 0, buffer);
@@ -472,12 +530,12 @@ static const IUnknownVtbl HeapUnknown_Vtbl =
HeapUnknown_Release
};
-static void check_variant_header(DWORD *wirev, VARIANT *v, unsigned long size)
+static void check_variant_header(DWORD *wirev, VARIANT *v, ULONG size)
{
WORD *wp;
DWORD switch_is;
- ok(*wirev == (size + 7) >> 3, "wv[0] %08x, expected %08lx\n", *wirev, (size + 7) >> 3);
+ ok(*wirev == (size + 7) >> 3, "wv[0] %08x, expected %08x\n", *wirev, (size + 7) >> 3);
wirev++;
ok(*wirev == 0, "wv[1] %08x\n", *wirev);
wirev++;
diff --git a/rostests/winetests/oleaut32/varformat.c b/rostests/winetests/oleaut32/varformat.c
index b8de8e26c3a..b19efbdbd02 100644
--- a/rostests/winetests/oleaut32/varformat.c
+++ b/rostests/winetests/oleaut32/varformat.c
@@ -230,6 +230,7 @@ static const FMTDATERES VarFormat_date_results[] =
static void test_VarFormat(void)
{
static const WCHAR szTesting[] = { 't','e','s','t','i','n','g','\0' };
+ static const WCHAR szNum[] = { '3','9','6','9','7','.','1','1','\0' };
size_t i;
WCHAR buffW[256];
char buff[256];
@@ -315,6 +316,10 @@ static void test_VarFormat(void)
VARFMT(VT_BSTR,V_BSTR,bstrin,"<&&",S_OK,"testing");
VARFMT(VT_BSTR,V_BSTR,bstrin,"<&>&",S_OK,"testing");
SysFreeString(bstrin);
+ bstrin = SysAllocString(szNum);
+ todo_wine VARFMT(VT_BSTR,V_BSTR,bstrin,"hh:mm",S_OK,"02:38");
+ todo_wine VARFMT(VT_BSTR,V_BSTR,bstrin,"mm-dd-yy",S_OK,"09-06-08");
+ SysFreeString(bstrin);
/* Numeric values are converted to strings then output */
VARFMT(VT_I1,V_I1,1,"<&>&",S_OK,"1");
@@ -444,7 +449,7 @@ static void test_VarWeekdayName(void)
GetLocaleInfoW(LOCALE_USER_DEFAULT, 0, NULL, 0);
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("GetLocaleInfoW is not implemented\n");
+ win_skip("GetLocaleInfoW is not implemented\n");
return;
}
diff --git a/rostests/winetests/oleaut32/vartest.c b/rostests/winetests/oleaut32/vartest.c
index 648c959b691..f0a6deb7326 100644
--- a/rostests/winetests/oleaut32/vartest.c
+++ b/rostests/winetests/oleaut32/vartest.c
@@ -46,6 +46,11 @@ static INT (WINAPI *pVariantTimeToSystemTime)(double,LPSYSTEMTIME);
static INT (WINAPI *pDosDateTimeToVariantTime)(USHORT,USHORT,double*);
static INT (WINAPI *pVariantTimeToDosDateTime)(double,USHORT*,USHORT *);
+static const WCHAR sz12[] = {'1','2','\0'};
+/* the strings are localized */
+static WCHAR sz12_false[32];
+static WCHAR sz12_true[32];
+
/* Get a conversion function ptr, return if function not available */
#define CHECKPTR(func) p##func = (void*)GetProcAddress(hOleaut32, #func); \
if (!p##func) { trace("function " # func " not available, not testing it\n"); return; }
@@ -95,7 +100,25 @@ static int IS_ANCIENT = 0;
static void init(void)
{
- hOleaut32 = GetModuleHandle("oleaut32.dll");
+ BSTR bstr;
+ HRESULT res;
+
+ res = VarBstrFromBool(VARIANT_TRUE, LANG_USER_DEFAULT, VAR_LOCALBOOL, &bstr);
+ ok(SUCCEEDED(res) && (lstrlenW(bstr) > 0),
+ "Expected localized string for 'True'\n");
+ /* lstrcpyW / lstrcatW do not work on win95 */
+ memcpy(sz12_true, sz12, sizeof(sz12));
+ if (bstr) memcpy(&sz12_true[2], bstr, SysStringByteLen(bstr) + sizeof(WCHAR));
+ SysFreeString(bstr);
+
+ res = VarBstrFromBool(VARIANT_FALSE, LANG_USER_DEFAULT, VAR_LOCALBOOL, &bstr);
+ ok(SUCCEEDED(res) && (lstrlenW(bstr) > 0),
+ "Expected localized string for 'False'\n");
+ memcpy(sz12_false, sz12, sizeof(sz12));
+ if (bstr) memcpy(&sz12_false[2], bstr, SysStringByteLen(bstr) + sizeof(WCHAR));
+ SysFreeString(bstr);
+
+ hOleaut32 = GetModuleHandle("oleaut32.dll");
/* Is a given function exported from oleaut32? */
#define HAVE_FUNC(func) ((void*)GetProcAddress(hOleaut32, #func) != NULL)
@@ -2007,7 +2030,6 @@ static HRESULT (WINAPI *pVarSub)(LPVARIANT,LPVARIANT,LPVARIANT);
static void test_VarSub(void)
{
- static const WCHAR sz12[] = {'1','2','\0'};
VARIANT left, right, exp, result, cy, dec;
VARTYPE i;
BSTR lbstr, rbstr;
@@ -4856,7 +4878,6 @@ static HRESULT (WINAPI *pVarMul)(LPVARIANT,LPVARIANT,LPVARIANT);
static void test_VarMul(void)
{
- static const WCHAR sz12[] = {'1','2','\0'};
VARIANT left, right, exp, result, cy, dec;
VARTYPE i;
BSTR lbstr, rbstr;
@@ -5028,7 +5049,6 @@ static HRESULT (WINAPI *pVarAdd)(LPVARIANT,LPVARIANT,LPVARIANT);
static void test_VarAdd(void)
{
- static const WCHAR sz12[] = {'1','2','\0'};
VARIANT left, right, exp, result, cy, dec;
VARTYPE i;
BSTR lbstr, rbstr;
@@ -5215,14 +5235,11 @@ static void test_VarCat(void)
{
LCID lcid;
VARIANT left, right, result, expected;
- static const WCHAR sz12[] = {'1','2','\0'};
static const WCHAR sz34[] = {'3','4','\0'};
static const WCHAR sz1234[] = {'1','2','3','4','\0'};
static const WCHAR date_sz12[] = {'9','/','3','0','/','1','9','8','0','1','2','\0'};
static const WCHAR sz12_date[] = {'1','2','9','/','3','0','/','1','9','8','0','\0'};
static const WCHAR sz_empty[] = {'\0'};
- static const WCHAR sz12_true[] = {'1','2','T','r','u','e','\0'};
- static const WCHAR sz12_false[] = {'1','2','F','a','l','s','e','\0'};
TCHAR orig_date_format[128];
VARTYPE leftvt, rightvt, resultvt;
HRESULT hres;
@@ -5416,8 +5433,8 @@ static void test_VarCat(void)
hres = VarCat(&left,&right,&result);
ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres);
hres = VarCmp(&result,&expected,lcid,0);
- ok(hres == VARCMP_EQ ||
- broken(hres == VARCMP_GT), "Expected VARCMP_EQ, got %08x\n", hres);
+ ok(hres == VARCMP_EQ, "Expected VARCMP_EQ, got %08x for %s, %s\n",
+ hres, variantstr(&result), variantstr(&expected));
VariantClear(&left);
VariantClear(&right);
@@ -5433,8 +5450,8 @@ static void test_VarCat(void)
hres = VarCat(&left,&right,&result);
ok(hres == S_OK, "VarCat failed with error 0x%08x\n", hres);
hres = VarCmp(&result,&expected,lcid,0);
- ok(hres == VARCMP_EQ ||
- broken(hres == VARCMP_GT), "Expected VARCMP_EQ, got %08x\n", hres);
+ ok(hres == VARCMP_EQ, "Expected VARCMP_EQ, got %08x for %s, %s\n",
+ hres, variantstr(&result), variantstr(&expected));
VariantClear(&left);
VariantClear(&right);
diff --git a/rostests/winetests/oleaut32/vartype.c b/rostests/winetests/oleaut32/vartype.c
index 4f282345ca3..7600946f53e 100644
--- a/rostests/winetests/oleaut32/vartype.c
+++ b/rostests/winetests/oleaut32/vartype.c
@@ -46,7 +46,7 @@ static HMODULE hOleaut32;
/* Get a conversion function ptr, return if function not available */
#define CHECKPTR(func) p##func = (void*)GetProcAddress(hOleaut32, #func); \
if (!p##func) { \
- skip("function " # func " not available, not testing it\n"); return; }
+ win_skip("function " # func " not available, not testing it\n"); return; }
/* Is a given function exported from oleaut32? */
#define HAVE_FUNC(func) ((void*)GetProcAddress(hOleaut32, #func) != NULL)
@@ -2349,7 +2349,7 @@ static void test_VarI8Copy(void)
if (!HAVE_OLEAUT32_I8)
{
- skip("I8 and UI8 data types are not available\n");
+ win_skip("I8 and UI8 data types are not available\n");
return;
}
@@ -2379,7 +2379,7 @@ static void test_VarI8ChangeTypeEx(void)
if (!HAVE_OLEAUT32_I8)
{
- skip("I8 and UI8 data types are not available\n");
+ win_skip("I8 and UI8 data types are not available\n");
return;
}
@@ -2611,7 +2611,7 @@ static void test_VarUI8Copy(void)
if (!HAVE_OLEAUT32_I8)
{
- skip("I8 and UI8 data types are not available\n");
+ win_skip("I8 and UI8 data types are not available\n");
return;
}
@@ -2641,7 +2641,7 @@ static void test_VarUI8ChangeTypeEx(void)
if (!HAVE_OLEAUT32_I8)
{
- skip("I8 and UI8 data types are not available\n");
+ win_skip("I8 and UI8 data types are not available\n");
return;
}
@@ -4983,6 +4983,8 @@ static void test_VarBstrCmp(void)
static const WCHAR s2[] = { 'a',0,'b' };
static const char sb1[] = {1,0,1};
static const char sb2[] = {1,0,2};
+ static const char sbchr0[] = {0,0};
+ static const char sbchr00[] = {0,0,0};
BSTR bstr, bstrempty, bstr2;
CHECKPTR(VarBstrCmp);
@@ -5021,6 +5023,15 @@ static void test_VarBstrCmp(void)
SysFreeString(bstr);
+ bstr = SysAllocStringByteLen(sbchr0, sizeof(sbchr0));
+ bstr2 = SysAllocStringByteLen(sbchr0, sizeof(sbchr00));
+ VARBSTRCMP(bstr,bstrempty,0,VARCMP_GT);
+ VARBSTRCMP(bstrempty,bstr,0,VARCMP_LT);
+ VARBSTRCMP(bstr2,bstrempty,0,VARCMP_GT);
+ VARBSTRCMP(bstr2,bstr,0,VARCMP_EQ);
+ SysFreeString(bstr2);
+ SysFreeString(bstr);
+
/* When (LCID == 0) it should be a binary comparison
* so these two strings could not match.
*/
@@ -5030,6 +5041,15 @@ static void test_VarBstrCmp(void)
VARBSTRCMP(bstr,bstr2,0,VARCMP_LT);
SysFreeString(bstr2);
SysFreeString(bstr);
+
+ bstr = SysAllocStringByteLen(sbchr0, sizeof(sbchr0));
+ bstr2 = SysAllocStringByteLen(sbchr0, sizeof(sbchr00));
+ VARBSTRCMP(bstr,bstrempty,0,VARCMP_GT);
+ VARBSTRCMP(bstrempty,bstr,0,VARCMP_LT);
+ VARBSTRCMP(bstr2,bstrempty,0,VARCMP_GT);
+ VARBSTRCMP(bstr2,bstr,0,VARCMP_GT);
+ SysFreeString(bstr2);
+ SysFreeString(bstr);
}
/* Get the internal representation of a BSTR */
@@ -5768,21 +5788,13 @@ static void test_UintChangeTypeEx(void)
static void test_ClearCustData(void)
{
- WCHAR buff[sizeof(CUSTDATAITEM) * NUM_CUST_ITEMS / sizeof(WCHAR)];
CUSTDATA ci;
unsigned i;
CHECKPTR(ClearCustData);
- memset(buff, 0, sizeof(buff));
-
ci.cCustData = NUM_CUST_ITEMS;
- /* This is a bit tricky. We use SysAllocStringByteLen to allocate the
- * array, since native uses an internal IMalloc interface for allocating
- * its memory, while Wine uses HeapAlloc(). Doing this ensures we allocate
- * using the correct function whether with native or builtin.
- */
- ci.prgCustData = (LPCUSTDATAITEM)Get(SysAllocStringByteLen((LPCSTR)buff, sizeof(buff)));
+ ci.prgCustData = CoTaskMemAlloc( sizeof(CUSTDATAITEM) * NUM_CUST_ITEMS );
for (i = 0; i < NUM_CUST_ITEMS; i++)
VariantInit(&ci.prgCustData[i].varValue);
pClearCustData(&ci);
diff --git a/rostests/winetests/pdh/pdh.c b/rostests/winetests/pdh/pdh.c
index 4b7c562c779..cd03bcb4fe3 100644
--- a/rostests/winetests/pdh/pdh.c
+++ b/rostests/winetests/pdh/pdh.c
@@ -837,6 +837,103 @@ static void test_PdhCollectQueryDataEx(void)
ok(status == ERROR_SUCCESS, "PdhCloseQuery failed 0x%08x\n", status);
}
+static void test_PdhMakeCounterPathA(void)
+{
+ PDH_STATUS ret;
+ PDH_COUNTER_PATH_ELEMENTS_A e;
+ char buffer[1024];
+ DWORD buflen;
+
+ ret = PdhMakeCounterPathA(NULL, NULL, NULL, 0);
+ ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+
+ buflen = 0;
+ ret = PdhMakeCounterPathA(NULL, NULL, &buflen, 0);
+ ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+
+ buflen = 0;
+ ret = PdhMakeCounterPathA(NULL, buffer, &buflen, 0);
+ ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+
+ buflen = sizeof(buffer);
+ memset(&e, 0, sizeof(e));
+ ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
+ ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+
+ buffer[0] = 0;
+ buflen = sizeof(buffer);
+ e.szMachineName = (char *)"machine";
+ ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
+ ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+ ok(!strcmp(buffer, ""), "expected \"machine\" got %s\n", buffer);
+
+ buffer[0] = 0;
+ buflen = sizeof(buffer);
+ e.szObjectName = (char *)"object";
+ ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
+ ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+ ok(!strcmp(buffer, ""), "expected \"machine\" got %s\n", buffer);
+
+ buffer[0] = 0;
+ buflen = sizeof(buffer);
+ e.szInstanceName = (char *)"instance";
+ ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
+ ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+ ok(!strcmp(buffer, ""), "expected \"machine\" got %s\n", buffer);
+
+ buffer[0] = 0;
+ buflen = sizeof(buffer);
+ e.szParentInstance = (char *)"parent";
+ ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
+ ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+ ok(!strcmp(buffer, ""), "expected \"machine\" got %s\n", buffer);
+
+ buffer[0] = 0;
+ buflen = sizeof(buffer);
+ e.dwInstanceIndex = 1;
+ ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
+ ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+ ok(!strcmp(buffer, ""), "expected \"machine\" got %s\n", buffer);
+
+ buffer[0] = 0;
+ buflen = sizeof(buffer);
+ e.szCounterName = (char *)"counter";
+ ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
+ ok(ret == ERROR_SUCCESS, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+ ok(!strcmp(buffer, "\\\\machine\\object(parent/instance#1)\\counter"),
+ "expected \"\\\\machine\\object(parent/instance#1)\\counter\" got %s\n", buffer);
+
+ buffer[0] = 0;
+ buflen = sizeof(buffer);
+ e.szParentInstance = NULL;
+ ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
+ ok(ret == ERROR_SUCCESS, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+ ok(!strcmp(buffer, "\\\\machine\\object(instance#1)\\counter"),
+ "expected \"\\\\machine\\object(instance#1)\\counter\" got %s\n", buffer);
+
+ buffer[0] = 0;
+ buflen = sizeof(buffer);
+ e.szInstanceName = NULL;
+ ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
+ ok(ret == ERROR_SUCCESS, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+ ok(!strcmp(buffer, "\\\\machine\\object\\counter"),
+ "expected \"\\\\machine\\object\\counter\" got %s\n", buffer);
+
+ buffer[0] = 0;
+ buflen = sizeof(buffer);
+ e.szMachineName = NULL;
+ ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
+ ok(ret == ERROR_SUCCESS, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+ ok(!strcmp(buffer, "\\object\\counter"),
+ "expected \"\\object\\counter\" got %s\n", buffer);
+
+ buffer[0] = 0;
+ buflen = sizeof(buffer);
+ e.szObjectName = NULL;
+ ret = PdhMakeCounterPathA(&e, buffer, &buflen, 0);
+ ok(ret == PDH_INVALID_ARGUMENT, "PdhMakeCounterPathA failed 0x%08x\n", ret);
+}
+
START_TEST(pdh)
{
if (PRIMARYLANGID(LANGIDFROMLCID(GetThreadLocale())) != LANG_ENGLISH)
@@ -877,4 +974,5 @@ START_TEST(pdh)
if (pPdhValidatePathExW) test_PdhValidatePathExW();
test_PdhCollectQueryDataEx();
+ test_PdhMakeCounterPathA();
}
diff --git a/rostests/winetests/psapi/psapi_main.c b/rostests/winetests/psapi/psapi_main.c
index 4cee7c62405..6ef5b04c189 100644
--- a/rostests/winetests/psapi/psapi_main.c
+++ b/rostests/winetests/psapi/psapi_main.c
@@ -21,10 +21,17 @@
#include
#include
-#include "wine/test.h"
#include "windows.h"
+#include "wine/test.h"
#include "psapi.h"
+#define expect_eq_d(expected, actual) \
+ do { \
+ int value = (actual); \
+ ok((expected) == value, "Expected " #actual " to be %d (" #expected ") is %d\n", \
+ (expected), value); \
+ } while (0)
+
#define PSAPI_GET_PROC(func) \
p ## func = (void*)GetProcAddress(hpsapi, #func); \
if(!p ## func) { \
@@ -63,6 +70,7 @@ static DWORD (WINAPI *pGetModuleFileNameExA)(HANDLE, HMODULE, LPSTR, DWORD);
static BOOL (WINAPI *pGetModuleInformation)(HANDLE, HMODULE, LPMODULEINFO, DWORD);
static DWORD (WINAPI *pGetMappedFileNameA)(HANDLE, LPVOID, LPSTR, DWORD);
static DWORD (WINAPI *pGetProcessImageFileNameA)(HANDLE, LPSTR, DWORD);
+static DWORD (WINAPI *pGetProcessImageFileNameW)(HANDLE, LPWSTR, DWORD);
static BOOL (WINAPI *pGetProcessMemoryInfo)(HANDLE, PPROCESS_MEMORY_COUNTERS, DWORD);
static BOOL (WINAPI *pGetWsChanges)(HANDLE, PPSAPI_WS_WATCH_INFORMATION, DWORD);
static BOOL (WINAPI *pInitializeProcessForWsWatch)(HANDLE);
@@ -84,6 +92,8 @@ static BOOL InitFunctionPtrs(HMODULE hpsapi)
/* GetProcessImageFileName is not exported on NT4 */
pGetProcessImageFileNameA =
(void *)GetProcAddress(hpsapi, "GetProcessImageFileNameA");
+ pGetProcessImageFileNameW =
+ (void *)GetProcAddress(hpsapi, "GetProcessImageFileNameW");
return TRUE;
}
@@ -166,6 +176,7 @@ static void test_GetProcessImageFileName(void)
{
HMODULE hMod = GetModuleHandle(NULL);
char szImgPath[MAX_PATH], szMapPath[MAX_PATH];
+ WCHAR szImgPathW[MAX_PATH];
DWORD ret;
if(pGetProcessImageFileNameA == NULL)
@@ -175,26 +186,49 @@ static void test_GetProcessImageFileName(void)
SetLastError(0xdeadbeef);
if(!pGetProcessImageFileNameA(hpQI, szImgPath, sizeof(szImgPath)))
{
- if(GetLastError() == ERROR_INVALID_FUNCTION)
+ if(GetLastError() == ERROR_INVALID_FUNCTION) {
win_skip("GetProcessImageFileName not implemented\n");
- else if(GetLastError() == 0xdeadbeef)
- ok(0, "failed without error code\n");
- else
- ok(0, "failed with %d\n", GetLastError());
+ return;
+ }
- return;
+ if(GetLastError() == 0xdeadbeef)
+ todo_wine ok(0, "failed without error code\n");
+ else
+ todo_wine ok(0, "failed with %d\n", GetLastError());
}
-
- w32_err(pGetProcessImageFileNameA(NULL, szImgPath, sizeof(szImgPath)), ERROR_INVALID_HANDLE);
- w32_err(pGetProcessImageFileNameA(hpSR, szImgPath, sizeof(szImgPath)), ERROR_ACCESS_DENIED);
- w32_err(pGetProcessImageFileNameA(hpQI, szImgPath, 0), ERROR_INSUFFICIENT_BUFFER);
- if(!w32_suc(ret = pGetProcessImageFileNameA(hpQI, szImgPath, sizeof(szImgPath))) ||
- !w32_suc(pGetMappedFileNameA(hpQV, hMod, szMapPath, sizeof(szMapPath))))
- return;
- /* Windows returns 2*strlen-1 */
- ok(ret >= strlen(szImgPath), "szImgPath=\"%s\" ret=%d\n", szImgPath, ret);
- ok(!strcmp(szImgPath, szMapPath),
- "szImgPath=\"%s\" szMapPath=\"%s\"\n", szImgPath, szMapPath);
+
+ todo_wine w32_err(pGetProcessImageFileNameA(NULL, szImgPath, sizeof(szImgPath)), ERROR_INVALID_HANDLE);
+ todo_wine w32_err(pGetProcessImageFileNameA(hpSR, szImgPath, sizeof(szImgPath)), ERROR_ACCESS_DENIED);
+ todo_wine w32_err(pGetProcessImageFileNameA(hpQI, szImgPath, 0), ERROR_INSUFFICIENT_BUFFER);
+ todo_wine
+ if(w32_suc(ret = pGetProcessImageFileNameA(hpQI, szImgPath, sizeof(szImgPath))) &&
+ w32_suc(pGetMappedFileNameA(hpQV, hMod, szMapPath, sizeof(szMapPath)))) {
+ /* Windows returns 2*strlen-1 */
+ ok(ret >= strlen(szImgPath), "szImgPath=\"%s\" ret=%d\n", szImgPath, ret);
+ ok(!strcmp(szImgPath, szMapPath),
+ "szImgPath=\"%s\" szMapPath=\"%s\"\n", szImgPath, szMapPath);
+ }
+
+ w32_err(pGetProcessImageFileNameW(NULL, szImgPathW, sizeof(szImgPathW)), ERROR_INVALID_HANDLE);
+ /* no information about correct buffer size returned: */
+ w32_err(pGetProcessImageFileNameW(hpQI, szImgPathW, 0), ERROR_INSUFFICIENT_BUFFER);
+ w32_err(pGetProcessImageFileNameW(hpQI, NULL, 0), ERROR_INSUFFICIENT_BUFFER);
+
+ /* correct call */
+ memset(szImgPathW, 0xff, sizeof(szImgPathW));
+ ret = pGetProcessImageFileNameW(hpQI, szImgPathW, sizeof(szImgPathW)/sizeof(WCHAR));
+ ok(ret > 0, "GetProcessImageFileNameW should have succeeded.\n");
+ ok(szImgPathW[0] == '\\', "GetProcessImageFileNameW should have returned an NT path.\n");
+ expect_eq_d(lstrlenW(szImgPathW), ret);
+
+ /* boundary values of 'size' */
+ w32_err(pGetProcessImageFileNameW(hpQI, szImgPathW, ret), ERROR_INSUFFICIENT_BUFFER);
+
+ memset(szImgPathW, 0xff, sizeof(szImgPathW));
+ ret = pGetProcessImageFileNameW(hpQI, szImgPathW, ret + 1);
+ ok(ret > 0, "GetProcessImageFileNameW should have succeeded.\n");
+ ok(szImgPathW[0] == '\\', "GetProcessImageFileNameW should have returned an NT path.\n");
+ expect_eq_d(lstrlenW(szImgPathW), ret);
}
static void test_GetModuleFileNameEx(void)
@@ -309,7 +343,7 @@ START_TEST(psapi_main)
test_GetModuleInformation();
test_GetProcessMemoryInfo();
todo_wine test_GetMappedFileName();
- todo_wine test_GetProcessImageFileName();
+ test_GetProcessImageFileName();
test_GetModuleFileNameEx();
test_GetModuleBaseName();
test_ws_functions();
diff --git a/rostests/winetests/qmgr/job.c b/rostests/winetests/qmgr/job.c
index 36201f8194f..d0e2306bfc0 100644
--- a/rostests/winetests/qmgr/job.c
+++ b/rostests/winetests/qmgr/job.c
@@ -24,6 +24,7 @@
#include "wine/test.h"
#include "bits.h"
+#include "initguid.h"
/* Globals used by many tests */
static const WCHAR test_displayName[] = {'T', 'e', 's', 't', 0};
@@ -123,6 +124,49 @@ static void teardown(void)
IBackgroundCopyManager_Release(test_manager);
}
+/* FIXME: Remove when Wine has implemented this */
+DEFINE_GUID(CLSID_BackgroundCopyManager2_0, 0x6d18ad12, 0xbde3, 0x4393, 0xb3,0x11, 0x09,0x9c,0x34,0x6e,0x6d,0xf9);
+
+static BOOL check_bits20(void)
+{
+ HRESULT hres;
+ IBackgroundCopyManager *manager;
+ BOOL ret = TRUE;
+
+ hres = CoCreateInstance(&CLSID_BackgroundCopyManager2_0, NULL,
+ CLSCTX_LOCAL_SERVER,
+ &IID_IBackgroundCopyManager,
+ (void **) &manager);
+
+ if (hres == REGDB_E_CLASSNOTREG)
+ {
+ ret = FALSE;
+
+ /* FIXME: Wine implements 2.0 functionality but doesn't advertise 2.0
+ *
+ * Remove when Wine is fixed
+ */
+ if (setup())
+ {
+ HRESULT hres2;
+
+ hres2 = IBackgroundCopyJob_AddFile(test_job, test_remotePathA,
+ test_localPathA);
+ if (hres2 == S_OK)
+ {
+ trace("Running on Wine, claim 2.0 is present\n");
+ ret = TRUE;
+ }
+ teardown();
+ }
+ }
+
+ if (manager)
+ IBackgroundCopyManager_Release(manager);
+
+ return ret;
+}
+
/* Test that the jobId is properly set */
static void test_GetId(void)
{
@@ -486,12 +530,15 @@ START_TEST(job)
test_GetId,
test_GetType,
test_GetName,
- test_AddFile,
- test_AddFileSet,
- test_EnumFiles,
test_GetProgress_preTransfer,
test_GetState,
test_ResumeEmpty,
+ 0
+ };
+ static const test_t tests_bits20[] = {
+ test_AddFile,
+ test_AddFileSet,
+ test_EnumFiles,
test_CompleteLocal,
test_CompleteLocalURL,
0
@@ -502,6 +549,7 @@ START_TEST(job)
return;
CoInitialize(NULL);
+
for (test = tests; *test; ++test)
{
/* Keep state separate between tests. */
@@ -513,5 +561,25 @@ START_TEST(job)
(*test)();
teardown();
}
+
+ if (check_bits20())
+ {
+ for (test = tests_bits20; *test; ++test)
+ {
+ /* Keep state separate between tests. */
+ if (!setup())
+ {
+ skip("Unable to setup test\n");
+ break;
+ }
+ (*test)();
+ teardown();
+ }
+ }
+ else
+ {
+ win_skip("Tests need BITS 2.0 or higher\n");
+ }
+
CoUninitialize();
}
diff --git a/rostests/winetests/quartz/filtergraph.c b/rostests/winetests/quartz/filtergraph.c
index 2e5fdc42f6b..26a72beef8d 100644
--- a/rostests/winetests/quartz/filtergraph.c
+++ b/rostests/winetests/quartz/filtergraph.c
@@ -1460,7 +1460,7 @@ static HRESULT get_connected_filter_name(TestFilterImpl *pFilter, char *FilterNa
static void test_render_filter_priority(void)
{
/* Tests filter choice priorities in Render(). */
- DWORD cookie1, cookie2, cookie3;
+ DWORD cookie1 = 0, cookie2 = 0, cookie3 = 0;
HRESULT hr;
IFilterGraph2* pgraph2 = NULL;
IFilterMapper2 *pMapper2 = NULL;
@@ -1539,7 +1539,7 @@ static void test_render_filter_priority(void)
no preference given to exact match. */
hr = CoCreateInstance(&CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, &IID_IFilterGraph2, (LPVOID*)&pgraph2);
ok(hr == S_OK, "CoCreateInstance failed with %08x\n", hr);
- if (!pgraph2) goto out;
+ if (!pgraph2) return;
hr = TestFilter_Create(&GUID_NULL, PinData1, (LPVOID)&ptestfilter);
ok(hr == S_OK, "TestFilter_Create failed with %08x\n", hr);
@@ -1758,12 +1758,15 @@ static void test_render_filter_priority(void)
hr = CoRegisterClassObject(Filter1ClassFactory.clsid, (IUnknown *)&Filter1ClassFactory,
CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie1);
ok(hr == S_OK, "CoRegisterClassObject failed with %08x\n", hr);
+ if (FAILED(hr)) goto out;
hr = CoRegisterClassObject(Filter2ClassFactory.clsid, (IUnknown *)&Filter2ClassFactory,
CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie2);
ok(hr == S_OK, "CoRegisterClassObject failed with %08x\n", hr);
+ if (FAILED(hr)) goto out;
hr = CoRegisterClassObject(Filter3ClassFactory.clsid, (IUnknown *)&Filter3ClassFactory,
CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie3);
ok(hr == S_OK, "CoRegisterClassObject failed with %08x\n", hr);
+ if (FAILED(hr)) goto out;
rgf2.dwVersion = 2;
rgf2.dwMerit = MERIT_UNLIKELY;
diff --git a/rostests/winetests/rasapi32/rasapi.c b/rostests/winetests/rasapi32/rasapi.c
index bf1c853b11f..11fca0eb4ad 100644
--- a/rostests/winetests/rasapi32/rasapi.c
+++ b/rostests/winetests/rasapi32/rasapi.c
@@ -163,4 +163,6 @@ START_TEST(rasapi)
InitFunctionPtrs();
test_rasenum();
+
+ FreeLibrary(hmodule);
}
diff --git a/rostests/winetests/riched20/editor.c b/rostests/winetests/riched20/editor.c
index f8da3faf109..0383d1487bf 100644
--- a/rostests/winetests/riched20/editor.c
+++ b/rostests/winetests/riched20/editor.c
@@ -445,7 +445,7 @@ static int get_scroll_pos_y(HWND hwnd)
return p.y;
}
-static void move_cursor(HWND hwnd, long charindex)
+static void move_cursor(HWND hwnd, LONG charindex)
{
CHARRANGE cr;
cr.cpMax = charindex;
@@ -1420,6 +1420,46 @@ static void test_EM_GETTEXTRANGE(void)
ok(result == 7, "EM_GETTEXTRANGE returned %ld\n", result);
ok(!strcmp(expect, buffer), "EM_GETTEXTRANGE filled %s\n", buffer);
+ /* cpMax of text length is used instead of -1 in this case */
+ textRange.lpstrText = buffer;
+ textRange.chrg.cpMin = 0;
+ textRange.chrg.cpMax = -1;
+ result = SendMessage(hwndRichEdit, EM_GETTEXTRANGE, 0, (LPARAM)&textRange);
+ ok(result == strlen(text2), "EM_GETTEXTRANGE returned %ld\n", result);
+ ok(!strcmp(text2, buffer), "EM_GETTEXTRANGE filled %s\n", buffer);
+
+ /* cpMin < 0 causes no text to be copied, and 0 to be returned */
+ textRange.lpstrText = buffer;
+ textRange.chrg.cpMin = -1;
+ textRange.chrg.cpMax = 1;
+ result = SendMessage(hwndRichEdit, EM_GETTEXTRANGE, 0, (LPARAM)&textRange);
+ ok(result == 0, "EM_GETTEXTRANGE returned %ld\n", result);
+ ok(!strcmp(text2, buffer), "EM_GETTEXTRANGE filled %s\n", buffer);
+
+ /* cpMax of -1 is not replaced with text length if cpMin != 0 */
+ textRange.lpstrText = buffer;
+ textRange.chrg.cpMin = 1;
+ textRange.chrg.cpMax = -1;
+ result = SendMessage(hwndRichEdit, EM_GETTEXTRANGE, 0, (LPARAM)&textRange);
+ ok(result == 0, "EM_GETTEXTRANGE returned %ld\n", result);
+ ok(!strcmp(text2, buffer), "EM_GETTEXTRANGE filled %s\n", buffer);
+
+ /* no end character is copied if cpMax - cpMin < 0 */
+ textRange.lpstrText = buffer;
+ textRange.chrg.cpMin = 5;
+ textRange.chrg.cpMax = 5;
+ result = SendMessage(hwndRichEdit, EM_GETTEXTRANGE, 0, (LPARAM)&textRange);
+ ok(result == 0, "EM_GETTEXTRANGE returned %ld\n", result);
+ ok(!strcmp(text2, buffer), "EM_GETTEXTRANGE filled %s\n", buffer);
+
+ /* cpMax of text length is used if cpMax > text length*/
+ textRange.lpstrText = buffer;
+ textRange.chrg.cpMin = 0;
+ textRange.chrg.cpMax = 1000;
+ result = SendMessage(hwndRichEdit, EM_GETTEXTRANGE, 0, (LPARAM)&textRange);
+ ok(result == strlen(text2), "EM_GETTEXTRANGE returned %ld\n", result);
+ ok(!strcmp(text2, buffer), "EM_GETTEXTRANGE filled %s\n", buffer);
+
DestroyWindow(hwndRichEdit);
}
@@ -3282,7 +3322,7 @@ static void test_WM_SETTEXT(void)
memset(buf, 0, sizeof(buf));
SendMessage(hwndRichEdit, EM_STREAMOUT,
(WPARAM)(SF_RTF), (LPARAM)&es);
- trace("EM_STREAMOUT produced: \n%s\n", buf);
+ trace("EM_STREAMOUT produced:\n%s\n", buf);
TEST_SETTEXT(buf, TestItem1)
#undef TEST_SETTEXT
@@ -3343,6 +3383,61 @@ static void test_EM_STREAMOUT(void)
DestroyWindow(hwndRichEdit);
}
+static void test_EM_STREAMOUT_FONTTBL(void)
+{
+ HWND hwndRichEdit = new_richedit(NULL);
+ EDITSTREAM es;
+ char buf[1024] = {0};
+ char * p;
+ char * fontTbl;
+ int brackCount;
+
+ const char * TestItem = "TestSomeText";
+
+ /* fills in the richedit control with some text */
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) TestItem);
+
+ /* streams out the text in rtf format */
+ p = buf;
+ es.dwCookie = (DWORD_PTR)&p;
+ es.dwError = 0;
+ es.pfnCallback = test_WM_SETTEXT_esCallback;
+ memset(buf, 0, sizeof(buf));
+ SendMessage(hwndRichEdit, EM_STREAMOUT,
+ (WPARAM)(SF_RTF), (LPARAM)&es);
+
+ /* scans for \fonttbl, error if not found */
+ fontTbl = strstr(buf, "\\fonttbl");
+ ok(fontTbl != NULL, "missing \\fonttbl section\n");
+ if(fontTbl)
+ {
+ /* scans for terminating closing bracket */
+ brackCount = 1;
+ while(*fontTbl && brackCount)
+ {
+ if(*fontTbl == '{')
+ brackCount++;
+ else if(*fontTbl == '}')
+ brackCount--;
+ fontTbl++;
+ }
+ /* checks whether closing bracket is ok */
+ ok(brackCount == 0, "missing closing bracket in \\fonttbl block\n");
+ if(!brackCount)
+ {
+ /* char before closing fonttbl block should be a closed bracket */
+ fontTbl -= 2;
+ ok(*fontTbl == '}', "spurious character '%02x' before \\fonttbl closing bracket\n", *fontTbl);
+
+ /* char after fonttbl block should be a crlf */
+ fontTbl += 2;
+ ok(*fontTbl == 0x0d && *(fontTbl+1) == 0x0a, "missing crlf after \\fonttbl block\n");
+ }
+ }
+ DestroyWindow(hwndRichEdit);
+}
+
+
static void test_EM_SETTEXTEX(void)
{
HWND hwndRichEdit, parent;
@@ -3618,7 +3713,7 @@ static void test_EM_SETTEXTEX(void)
memset(buf, 0, sizeof(buf));
SendMessage(hwndRichEdit, EM_STREAMOUT,
(WPARAM)(SF_RTF), (LPARAM)&es);
- trace("EM_STREAMOUT produced: \n%s\n", (char *)buf);
+ trace("EM_STREAMOUT produced:\n%s\n", (char *)buf);
/* !ST_SELECTION && !Unicode && \rtf */
setText.codepage = CP_ACP;/* EM_STREAMOUT saved as ANSI string */
@@ -3659,7 +3754,7 @@ static void test_EM_SETTEXTEX(void)
memset(buf, 0, sizeof(buf));
SendMessage(hwndRichEdit, EM_STREAMOUT,
(WPARAM)(SF_RTF), (LPARAM)&es);
- trace("EM_STREAMOUT produced: \n%s\n", (char *)buf);
+ trace("EM_STREAMOUT produced:\n%s\n", (char *)buf);
/* select some text */
cr.cpMax = 1;
@@ -4171,37 +4266,36 @@ static void test_EM_GETMODIFY(void)
}
struct exsetsel_s {
- long min;
- long max;
- long expected_retval;
+ LONG min;
+ LONG max;
+ LRESULT expected_retval;
int expected_getsel_start;
int expected_getsel_end;
- int _exsetsel_todo_wine;
int _getsel_todo_wine;
};
const struct exsetsel_s exsetsel_tests[] = {
/* sanity tests */
- {5, 10, 10, 5, 10, 0, 0},
- {15, 17, 17, 15, 17, 0, 0},
+ {5, 10, 10, 5, 10, 0},
+ {15, 17, 17, 15, 17, 0},
/* test cpMax > strlen() */
- {0, 100, 18, 0, 18, 0, 1},
+ {0, 100, 18, 0, 18, 1},
/* test cpMin == cpMax */
- {5, 5, 5, 5, 5, 0, 0},
+ {5, 5, 5, 5, 5, 0},
/* test cpMin < 0 && cpMax >= 0 (bug 4462) */
- {-1, 0, 5, 5, 5, 0, 0},
- {-1, 17, 5, 5, 5, 0, 0},
- {-1, 18, 5, 5, 5, 0, 0},
+ {-1, 0, 5, 5, 5, 0},
+ {-1, 17, 5, 5, 5, 0},
+ {-1, 18, 5, 5, 5, 0},
/* test cpMin < 0 && cpMax < 0 */
- {-1, -1, 17, 17, 17, 0, 0},
- {-4, -5, 17, 17, 17, 0, 0},
+ {-1, -1, 17, 17, 17, 0},
+ {-4, -5, 17, 17, 17, 0},
/* test cMin >=0 && cpMax < 0 (bug 6814) */
- {0, -1, 18, 0, 18, 0, 1},
- {17, -5, 18, 17, 18, 0, 1},
- {18, -3, 17, 17, 17, 0, 0},
+ {0, -1, 18, 0, 18, 1},
+ {17, -5, 18, 17, 18, 1},
+ {18, -3, 17, 17, 17, 0},
/* test if cpMin > cpMax */
- {15, 19, 18, 15, 18, 0, 1},
- {19, 15, 18, 15, 18, 0, 1}
+ {15, 19, 18, 15, 18, 1},
+ {19, 15, 18, 15, 18, 1}
};
static void check_EM_EXSETSEL(HWND hwnd, const struct exsetsel_s *setsel, int id) {
@@ -4213,13 +4307,7 @@ static void check_EM_EXSETSEL(HWND hwnd, const struct exsetsel_s *setsel, int id
cr.cpMax = setsel->max;
result = SendMessage(hwnd, EM_EXSETSEL, 0, (LPARAM) &cr);
- if (setsel->_exsetsel_todo_wine) {
- todo_wine {
- ok(result == setsel->expected_retval, "EM_EXSETSEL(%d): expected: %ld actual: %ld\n", id, setsel->expected_retval, result);
- }
- } else {
- ok(result == setsel->expected_retval, "EM_EXSETSEL(%d): expected: %ld actual: %ld\n", id, setsel->expected_retval, result);
- }
+ ok(result == setsel->expected_retval, "EM_EXSETSEL(%d): expected: %ld actual: %ld\n", id, setsel->expected_retval, result);
SendMessage(hwnd, EM_GETSEL, (WPARAM) &start, (LPARAM) &end);
@@ -4706,46 +4794,95 @@ static void test_WM_PASTE(void)
static void test_EM_FORMATRANGE(void)
{
- int r;
- FORMATRANGE fr;
+ int i, tpp_x, tpp_y;
HDC hdc;
HWND hwndRichEdit = new_richedit(NULL);
-
- SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) haystack);
+ static const struct {
+ const char *string; /* The string */
+ int first; /* First 'pagebreak', 0 for don't care */
+ int second; /* Second 'pagebreak', 0 for don't care */
+ } fmtstrings[] = {
+ {"WINE wine", 0, 0},
+ {"WINE wineWine", 0, 0},
+ {"WINE\r\nwine\r\nwine", 5, 10},
+ {"WINE\r\nWINEwine\r\nWINEwine", 5, 14},
+ {"WINE\r\n\r\nwine\r\nwine", 5, 6}
+ };
hdc = GetDC(hwndRichEdit);
ok(hdc != NULL, "Could not get HDC\n");
- fr.hdc = fr.hdcTarget = hdc;
- fr.rc.top = fr.rcPage.top = fr.rc.left = fr.rcPage.left = 0;
- fr.rc.right = fr.rcPage.right = GetDeviceCaps(hdc, HORZRES);
- fr.rc.bottom = fr.rcPage.bottom = GetDeviceCaps(hdc, VERTRES);
- fr.chrg.cpMin = 0;
- fr.chrg.cpMax = 20;
+ /* Calculate the twips per pixel */
+ tpp_x = 1440 / GetDeviceCaps(hdc, LOGPIXELSX);
+ tpp_y = 1440 / GetDeviceCaps(hdc, LOGPIXELSY);
- r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, 0);
- todo_wine {
- ok(r == 31, "EM_FORMATRANGE expect %d, got %d\n", 31, r);
- }
-
- r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) &fr);
- todo_wine {
- ok(r == 20 || r == 9, "EM_FORMATRANGE expect 20 or 9, got %d\n", r);
- }
-
- fr.chrg.cpMin = 0;
- fr.chrg.cpMax = 10;
-
- r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) &fr);
- todo_wine {
- ok(r == 10, "EM_FORMATRANGE expect %d, got %d\n", 10, r);
- }
-
- r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, 0);
- todo_wine {
- ok(r == 31, "EM_FORMATRANGE expect %d, got %d\n", 31, r);
+ SendMessage(hwndRichEdit, EM_FORMATRANGE, FALSE, 0);
+
+ for (i = 0; i < sizeof(fmtstrings)/sizeof(fmtstrings[0]); i++)
+ {
+ FORMATRANGE fr;
+ GETTEXTLENGTHEX gtl;
+ SIZE stringsize;
+ int r, len;
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) fmtstrings[i].string);
+
+ gtl.flags = GTL_NUMCHARS | GTL_PRECISE;
+ gtl.codepage = CP_ACP;
+ len = SendMessageA(hwndRichEdit, EM_GETTEXTLENGTHEX, (WPARAM)>l, 0);
+
+ /* Get some size information for the string */
+ GetTextExtentPoint32(hdc, fmtstrings[i].string, strlen(fmtstrings[i].string), &stringsize);
+
+ /* Define the box to be half the width needed and a bit larger than the height.
+ * Changes to the width means we have at least 2 pages. Changes to the height
+ * is done so we can check the changing of fr.rc.bottom.
+ */
+ fr.hdc = fr.hdcTarget = hdc;
+ fr.rc.top = fr.rcPage.top = fr.rc.left = fr.rcPage.left = 0;
+ fr.rc.right = fr.rcPage.right = (stringsize.cx / 2) * tpp_x;
+ fr.rc.bottom = fr.rcPage.bottom = (stringsize.cy + 10) * tpp_y;
+
+ r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, 0);
+ todo_wine {
+ ok(r == len, "Expected %d, got %d\n", len, r);
+ }
+
+ /* We know that the page can't hold the full string. See how many characters
+ * are on the first one
+ */
+ fr.chrg.cpMin = 0;
+ fr.chrg.cpMax = -1;
+ r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) &fr);
+ todo_wine {
+ ok(fr.rc.bottom == (stringsize.cy * tpp_y), "Expected bottom to be %d, got %d\n", (stringsize.cy * tpp_y), fr.rc.bottom);
+ }
+ if (fmtstrings[i].first)
+ todo_wine {
+ ok(r == fmtstrings[i].first, "Expected %d, got %d\n", fmtstrings[i].first, r);
+ }
+ else
+ ok(r < len, "Expected < %d, got %d\n", len, r);
+
+ /* Do another page */
+ fr.chrg.cpMin = r;
+ r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, (LPARAM) &fr);
+ if (fmtstrings[i].second)
+ todo_wine {
+ ok(r == fmtstrings[i].second, "Expected %d, got %d\n", fmtstrings[i].second, r);
+ }
+ else
+ ok (r < len, "Expected < %d, got %d\n", len, r);
+
+ /* There is at least on more page, but we don't care */
+
+ r = SendMessage(hwndRichEdit, EM_FORMATRANGE, TRUE, 0);
+ todo_wine {
+ ok(r == len, "Expected %d, got %d\n", len, r);
+ }
}
+ ReleaseDC(NULL, hdc);
DestroyWindow(hwndRichEdit);
}
@@ -6549,6 +6686,7 @@ START_TEST( editor )
test_WM_PASTE();
test_EM_STREAMIN();
test_EM_STREAMOUT();
+ test_EM_STREAMOUT_FONTTBL();
test_EM_StreamIn_Undo();
test_EM_FORMATRANGE();
test_unicode_conversions();
diff --git a/rostests/winetests/rsaenh/rsaenh.c b/rostests/winetests/rsaenh/rsaenh.c
index 8e12b2a7d3e..8afa931b8e4 100644
--- a/rostests/winetests/rsaenh/rsaenh.c
+++ b/rostests/winetests/rsaenh/rsaenh.c
@@ -106,7 +106,7 @@ static void trace_hex(BYTE *pbData, DWORD dwLen) {
trace(szTemp);
}
for (j=0; iConType == TWON_ONEVALUE)
{
- TW_ONEVALUE *onev = (TW_ONEVALUE *) p;
+ TW_ONEVALUE *onev = p;
ok(onev->Item == orig_value || !(actual_support & TWQC_GETCURRENT), "MSG_GET of 0x%x returned 0x%x, expecting 0x%x\n",
pCapability->Cap, onev->Item, orig_value);
+ trace("MSG_GET of 0x%x returned val 0x%x, type %d\n", pCapability->Cap, onev->Item, onev->ItemType);
+ if (suggested_set_value)
+ *suggested_set_value = onev->Item;
}
else if (pCapability->ConType == TWON_ENUMERATION)
{
@@ -116,7 +119,7 @@ static void check_get(TW_CAPABILITY *pCapability, TW_INT32 actual_support,
TW_UINT8 *p8;
TW_UINT16 *p16;
TW_UINT32 *p32;
- TW_ENUMERATION *enumv = (TW_ENUMERATION *) p;
+ TW_ENUMERATION *enumv = p;
p8 = enumv->ItemList;
p16 = (TW_UINT16 *) p8;
p32 = (TW_UINT32 *) p8;
@@ -326,6 +329,7 @@ static void test_resolution(TW_IDENTITY *appid, TW_IDENTITY *source, TW_UINT16 c
"Error [rc %d|cc %d] doing MSG_GETDEFAULT for type 0x%x\n", rc, status.ConditionCode, captype);
if (rc == TWRC_SUCCESS)
{
+ get_onevalue(cap.hContainer, &val, &type);
ok(type == TWTY_FIX32, "GETDEFAULT for RESOLUTION is not type FIX32, is type %d\n", type);
memcpy(&default_value, &val, sizeof(default_value));
GlobalFree(cap.hContainer);
@@ -388,6 +392,243 @@ static void test_resolution(TW_IDENTITY *appid, TW_IDENTITY *source, TW_UINT16 c
}
}
+static void test_physical(TW_IDENTITY *appid, TW_IDENTITY *source, TW_UINT16 captype, TW_INT32 minimum_support)
+{
+ TW_UINT16 rc;
+ TW_STATUS status;
+ TW_CAPABILITY cap;
+ TW_UINT32 val;
+ TW_UINT16 type;
+ TW_INT32 actual_support;
+
+ memset(&cap, 0, sizeof(cap));
+ cap.Cap = captype;
+ cap.ConType = TWON_DONTCARE16;
+
+ rc = pDSM_Entry(appid, source, DG_CONTROL, DAT_CAPABILITY, MSG_QUERYSUPPORT, &cap);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_QUERYSUPPORT for type 0x%x\n", rc, status.ConditionCode, captype);
+ if (rc != TWRC_SUCCESS)
+ return;
+ ok(get_onevalue(cap.hContainer, (TW_UINT32 *) &actual_support, NULL), "Returned cap.hContainer invalid for QuerySupport on type 0x%x\n", captype);
+ ok((actual_support & minimum_support) == minimum_support,
+ "Error: minimum support 0x%x for type 0x%x, got 0x%x\n", minimum_support,
+ captype, actual_support);
+
+
+ if (actual_support & TWQC_GETCURRENT)
+ {
+ memset(&cap, 0, sizeof(cap));
+ cap.Cap = captype;
+ cap.ConType = TWON_DONTCARE16;
+
+ rc = pDSM_Entry(appid, source, DG_CONTROL, DAT_CAPABILITY, MSG_GETCURRENT, &cap);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_GETCURRENT for type 0x%x\n", rc, status.ConditionCode, captype);
+ if (rc == TWRC_SUCCESS)
+ {
+ get_onevalue(cap.hContainer, &val, &type);
+ ok(type == TWTY_FIX32, "GETCURRENT for PHYSICALXXX is not type FIX32, is type %d\n", type);
+ GlobalFree(cap.hContainer);
+ }
+ }
+
+ if (actual_support & TWQC_GETDEFAULT)
+ {
+ memset(&cap, 0, sizeof(cap));
+ cap.Cap = captype;
+ cap.ConType = TWON_DONTCARE16;
+
+ rc = pDSM_Entry(appid, source, DG_CONTROL, DAT_CAPABILITY, MSG_GETDEFAULT, &cap);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_GETDEFAULT for type 0x%x\n", rc, status.ConditionCode, captype);
+ if (rc == TWRC_SUCCESS)
+ {
+ get_onevalue(cap.hContainer, &val, &type);
+ ok(type == TWTY_FIX32, "GETDEFAULT for PHYSICALXXX is not type FIX32, is type %d\n", type);
+ GlobalFree(cap.hContainer);
+ }
+ }
+
+ if (actual_support & TWQC_GET)
+ {
+ memset(&cap, 0, sizeof(cap));
+ cap.Cap = captype;
+ cap.ConType = TWON_DONTCARE16;
+
+ rc = pDSM_Entry(appid, source, DG_CONTROL, DAT_CAPABILITY, MSG_GET, &cap);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_GET for type 0x%x\n", rc, status.ConditionCode, captype);
+ if (rc == TWRC_SUCCESS)
+ {
+ get_onevalue(cap.hContainer, &val, &type);
+ ok(type == TWTY_FIX32, "GET for PHYSICALXXX is not type FIX32, is type %d\n", type);
+ trace("GET for Physical type 0x%x returns 0x%x\n", captype, val);
+ GlobalFree(cap.hContainer);
+ }
+ }
+
+}
+
+static void test_supported_sizes(TW_IDENTITY *appid, TW_IDENTITY *source, TW_INT32 minimum_support)
+{
+ TW_UINT16 rc;
+ TW_STATUS status;
+ TW_CAPABILITY cap;
+ TW_UINT32 val;
+ TW_UINT16 type;
+ TW_INT32 actual_support;
+ TW_UINT32 orig_value = TWSS_NONE;
+ TW_UINT32 default_value = TWSS_NONE;
+ TW_UINT32 new_value = TWSS_NONE;
+
+
+ memset(&cap, 0, sizeof(cap));
+ cap.Cap = ICAP_SUPPORTEDSIZES;
+ cap.ConType = TWON_DONTCARE16;
+
+ rc = pDSM_Entry(appid, source, DG_CONTROL, DAT_CAPABILITY, MSG_QUERYSUPPORT, &cap);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_QUERYSUPPORT for ICAP_SUPPORTEDSIZES\n", rc, status.ConditionCode);
+ if (rc != TWRC_SUCCESS)
+ return;
+ ok(get_onevalue(cap.hContainer, (TW_UINT32 *) &actual_support, NULL), "Returned cap.hContainer invalid for QuerySupport on ICAP_SUPPORTEDSIZES\n");
+ ok((actual_support & minimum_support) == minimum_support,
+ "Error: minimum support 0x%x for ICAP_SUPPORTEDSIZES, got 0x%x\n", minimum_support, actual_support);
+
+ if (actual_support & TWQC_GETCURRENT)
+ {
+ memset(&cap, 0, sizeof(cap));
+ cap.Cap = ICAP_SUPPORTEDSIZES;
+ cap.ConType = TWON_DONTCARE16;
+
+ rc = pDSM_Entry(appid, source, DG_CONTROL, DAT_CAPABILITY, MSG_GETCURRENT, &cap);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_GETCURRENT for ICAP_SUPPORTEDSIZES\n", rc, status.ConditionCode);
+ if (rc == TWRC_SUCCESS)
+ {
+ get_onevalue(cap.hContainer, &val, &type);
+ ok(type == TWTY_UINT16, "GETCURRENT for ICAP_SUPPORTEDSIZES is not type UINT16, is type %d\n", type);
+ trace("Current size is %d\n", val);
+ GlobalFree(cap.hContainer);
+ orig_value = val;
+ }
+ }
+
+ if (actual_support & TWQC_GETDEFAULT)
+ {
+ memset(&cap, 0, sizeof(cap));
+ cap.Cap = ICAP_SUPPORTEDSIZES;
+ cap.ConType = TWON_DONTCARE16;
+
+ rc = pDSM_Entry(appid, source, DG_CONTROL, DAT_CAPABILITY, MSG_GETDEFAULT, &cap);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_GETDEFAULT for ICAP_SUPPORTEDSIZES\n", rc, status.ConditionCode);
+ if (rc == TWRC_SUCCESS)
+ {
+ get_onevalue(cap.hContainer, &val, &type);
+ ok(type == TWTY_UINT16, "GETDEFAULT for PHYSICALXXX is not type TWTY_UINT16, is type %d\n", type);
+ trace("Default size is %d\n", val);
+ GlobalFree(cap.hContainer);
+ default_value = val;
+ }
+ }
+
+ if (actual_support & TWQC_GET)
+ {
+ memset(&cap, 0, sizeof(cap));
+ cap.Cap = ICAP_SUPPORTEDSIZES;
+ cap.ConType = TWON_DONTCARE16;
+
+ rc = pDSM_Entry(appid, source, DG_CONTROL, DAT_CAPABILITY, MSG_GET, &cap);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_GET for ICAP_SUPPORTEDSIZES\n", rc, status.ConditionCode);
+ check_get(&cap, actual_support, orig_value, default_value, &new_value);
+ }
+
+ if (actual_support & TWQC_SET)
+ {
+ memset(&cap, 0, sizeof(cap));
+ cap.Cap = ICAP_SUPPORTEDSIZES;
+ cap.ConType = TWON_ONEVALUE;
+ cap.hContainer = alloc_and_set_onevalue(new_value, TWTY_UINT16);
+
+ rc = pDSM_Entry(appid, source, DG_CONTROL, DAT_CAPABILITY, MSG_SET, &cap);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_SET for ICAP_SUPPORTEDSIZES\n", rc, status.ConditionCode);
+ GlobalFree(cap.hContainer);
+
+ }
+
+ if (actual_support & TWQC_RESET)
+ {
+ memset(&cap, 0, sizeof(cap));
+ cap.Cap = ICAP_SUPPORTEDSIZES;
+ cap.ConType = TWON_DONTCARE16;
+
+ rc = pDSM_Entry(appid, source, DG_CONTROL, DAT_CAPABILITY, MSG_RESET, &cap);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_RESET for ICAP_SUPPORTEDSIZES\n", rc, status.ConditionCode);
+ if (rc == TWRC_SUCCESS)
+ GlobalFree(cap.hContainer);
+ }
+}
+
+static void test_imagelayout(TW_IDENTITY *appid, TW_IDENTITY *source)
+{
+ TW_UINT16 rc;
+ TW_STATUS status;
+ TW_IMAGELAYOUT layout;
+
+ rc = pDSM_Entry(appid, source, DG_IMAGE, DAT_IMAGELAYOUT, MSG_GET, &layout);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_GET for DG_IMAGE/DAT_IMAGELAYOUT\n", rc, status.ConditionCode);
+ if (rc != TWRC_SUCCESS)
+ return;
+ trace("ImageLayout [Left %x.%x|Top %x.%x|Right %x.%x|Bottom %x.%x|Document %d|Page %d|Frame %d]\n",
+ layout.Frame.Left.Whole, layout.Frame.Left.Frac,
+ layout.Frame.Top.Whole, layout.Frame.Top.Frac,
+ layout.Frame.Right.Whole, layout.Frame.Right.Frac,
+ layout.Frame.Bottom.Whole, layout.Frame.Bottom.Frac,
+ layout.DocumentNumber, layout.PageNumber, layout.FrameNumber);
+
+ memset(&layout, 0, sizeof(layout));
+ layout.Frame.Left.Whole = 1;
+ layout.Frame.Right.Whole = 2;
+ layout.Frame.Top.Whole = 1;
+ layout.Frame.Bottom.Whole = 2;
+ rc = pDSM_Entry(appid, source, DG_IMAGE, DAT_IMAGELAYOUT, MSG_SET, &layout);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_SET for DG_IMAGE/DAT_IMAGELAYOUT\n", rc, status.ConditionCode);
+ if (rc != TWRC_SUCCESS)
+ return;
+
+ rc = pDSM_Entry(appid, source, DG_IMAGE, DAT_IMAGELAYOUT, MSG_GET, &layout);
+ get_condition_code(appid, source, &status);
+ ok(rc == TWRC_SUCCESS && status.ConditionCode == TWCC_SUCCESS,
+ "Error [rc %d|cc %d] doing MSG_GET for DG_IMAGE/DAT_IMAGELAYOUT\n", rc, status.ConditionCode);
+ if (rc != TWRC_SUCCESS)
+ return;
+ trace("ImageLayout after set [Left %x.%x|Top %x.%x|Right %x.%x|Bottom %x.%x|Document %d|Page %d|Frame %d]\n",
+ layout.Frame.Left.Whole, layout.Frame.Left.Frac,
+ layout.Frame.Top.Whole, layout.Frame.Top.Frac,
+ layout.Frame.Right.Whole, layout.Frame.Right.Frac,
+ layout.Frame.Bottom.Whole, layout.Frame.Bottom.Frac,
+ layout.DocumentNumber, layout.PageNumber, layout.FrameNumber);
+}
+
static void test_single_source(TW_IDENTITY *appid, TW_IDENTITY *source)
{
@@ -428,7 +669,7 @@ static void test_single_source(TW_IDENTITY *appid, TW_IDENTITY *source)
}
}
- /* For Twain 1.6, all sources must support: */
+ /* All sources must support: */
ok(capabilities[CAP_SUPPORTEDCAPS], "CAP_SUPPORTEDCAPS not supported\n");
ok(capabilities[CAP_XFERCOUNT], "CAP_XFERCOUNT not supported\n");
if (capabilities[CAP_XFERCOUNT])
@@ -440,7 +681,7 @@ static void test_single_source(TW_IDENTITY *appid, TW_IDENTITY *source)
if (source->SupportedGroups & DG_IMAGE)
{
- /* For Twain 1.6:
+ /*
Sources that supply image information must support DG_CONTROL / DAT_CAPABILITY /
MSG_GET, MSG_GETCURRENT, MSG_GETDEFAULT on:
*/
@@ -450,29 +691,37 @@ static void test_single_source(TW_IDENTITY *appid, TW_IDENTITY *source)
TWQC_GET | TWQC_GETDEFAULT | TWQC_GETCURRENT);
todo_wine
ok(capabilities[ICAP_PLANARCHUNKY], "ICAP_PLANARCHUNKY not supported\n");
- todo_wine
ok(capabilities[ICAP_PHYSICALHEIGHT], "ICAP_PHYSICALHEIGHT not supported\n");
- todo_wine
+ if (capabilities[ICAP_PHYSICALHEIGHT])
+ test_physical(appid, source, ICAP_PHYSICALHEIGHT,
+ TWQC_GET | TWQC_GETDEFAULT | TWQC_GETCURRENT);
ok(capabilities[ICAP_PHYSICALWIDTH], "ICAP_PHYSICALWIDTH not supported\n");
+ if (capabilities[ICAP_PHYSICALWIDTH])
+ test_physical(appid, source, ICAP_PHYSICALWIDTH,
+ TWQC_GET | TWQC_GETDEFAULT | TWQC_GETCURRENT);
ok(capabilities[ICAP_PIXELFLAVOR], "ICAP_PIXELFLAVOR not supported\n");
if (capabilities[ICAP_PIXELFLAVOR])
test_onevalue_cap(appid, source, ICAP_PIXELFLAVOR, TWTY_UINT16,
- TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET);
+ TWQC_GET | TWQC_GETDEFAULT | TWQC_GETCURRENT);
- /* For Twain 1.6:
+ /*
Sources that supply image information must support DG_CONTROL / DAT_CAPABILITY /
MSG_GET, MSG_GETCURRENT, MSG_GETDEFAULT, MSG_RESET and MSG_SET on:
*/
- todo_wine
ok(capabilities[ICAP_BITDEPTH], "ICAP_BITDEPTH not supported\n");
+ if (capabilities[ICAP_BITDEPTH])
+ test_onevalue_cap(appid, source, ICAP_BITDEPTH, TWTY_UINT16,
+ TWQC_GET | TWQC_GETDEFAULT | TWQC_GETCURRENT );
todo_wine
ok(capabilities[ICAP_BITORDER], "ICAP_BITORDER not supported\n");
ok(capabilities[ICAP_PIXELTYPE], "ICAP_PIXELTYPE not supported\n");
if (capabilities[ICAP_PIXELTYPE])
test_onevalue_cap(appid, source, ICAP_PIXELTYPE, TWTY_UINT16,
TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET);
- todo_wine
ok(capabilities[ICAP_UNITS], "ICAP_UNITS not supported\n");
+ if (capabilities[ICAP_UNITS])
+ test_onevalue_cap(appid, source, ICAP_UNITS, TWTY_UINT16,
+ TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET);
ok(capabilities[ICAP_XFERMECH], "ICAP_XFERMECH not supported\n");
if (capabilities[ICAP_XFERMECH])
test_onevalue_cap(appid, source, ICAP_XFERMECH, TWTY_UINT16,
@@ -485,6 +734,21 @@ static void test_single_source(TW_IDENTITY *appid, TW_IDENTITY *source)
if (capabilities[ICAP_YRESOLUTION])
test_resolution(appid, source, ICAP_YRESOLUTION,
TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET);
+
+ /* Optional capabilities */
+ if (capabilities[CAP_AUTOFEED])
+ test_onevalue_cap(appid, source, CAP_AUTOFEED, TWTY_BOOL,
+ TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET);
+ if (capabilities[CAP_FEEDERENABLED])
+ test_onevalue_cap(appid, source, CAP_FEEDERENABLED, TWTY_BOOL,
+ TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET);
+ if (capabilities[ICAP_SUPPORTEDSIZES])
+ test_supported_sizes(appid, source,
+ TWQC_GET | TWQC_SET | TWQC_GETDEFAULT | TWQC_GETCURRENT | TWQC_RESET);
+
+ /* Additional tests */
+ test_imagelayout(appid, source);
+
}
}
@@ -572,14 +836,14 @@ START_TEST(dsm)
htwain = LoadLibraryA("twain_32.dll");
if (! htwain)
{
- skip("twain_32.dll not available, skipping tests\n");
+ win_skip("twain_32.dll not available, skipping tests\n");
return;
}
pDSM_Entry = (void*)GetProcAddress(htwain, "DSM_Entry");
ok(pDSM_Entry != NULL, "Unable to GetProcAddress DSM_Entry\n");
if (! pDSM_Entry)
{
- skip("DSM_Entry not available, skipping tests\n");
+ win_skip("DSM_Entry not available, skipping tests\n");
return;
}
diff --git a/rostests/winetests/urlmon/misc.c b/rostests/winetests/urlmon/misc.c
index 2123392ebce..64ed9377675 100644
--- a/rostests/winetests/urlmon/misc.c
+++ b/rostests/winetests/urlmon/misc.c
@@ -851,7 +851,10 @@ static void test_url_action(IInternetSecurityManager *secmgr, IInternetZoneManag
HKEY hkey;
HRESULT hres;
- res = RegOpenKeyA(HKEY_LOCAL_MACHINE,
+ /* FIXME: HKEY_CURRENT_USER is most of the time the default but this can be changed on a system.
+ * The test should be changed to cope with that, if need be.
+ */
+ res = RegOpenKeyA(HKEY_CURRENT_USER,
"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3", &hkey);
if(res != ERROR_SUCCESS) {
ok(0, "Could not open zone key\n");
@@ -943,22 +946,27 @@ static void test_ZoneManager(void)
IInternetZoneManager *zonemgr = NULL;
BYTE buf[32];
HRESULT hres;
+ DWORD action = URLACTION_CREDENTIALS_USE; /* Implemented on all IE versions */
hres = CoInternetCreateZoneManager(NULL, &zonemgr, 0);
ok(hres == S_OK, "CoInternetCreateZoneManager failed: %08x\n", hres);
if(FAILED(hres))
return;
- hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 3, 0x1a10, buf,
+ hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 3, action, buf,
sizeof(DWORD), URLZONEREG_DEFAULT);
ok(hres == S_OK, "GetZoneActionPolicy failed: %08x\n", hres);
- ok(*(DWORD*)buf == 1, "policy=%d, expected 1\n", *(DWORD*)buf);
+ ok(*(DWORD*)buf == URLPOLICY_CREDENTIALS_SILENT_LOGON_OK ||
+ *(DWORD*)buf == URLPOLICY_CREDENTIALS_MUST_PROMPT_USER ||
+ *(DWORD*)buf == URLPOLICY_CREDENTIALS_CONDITIONAL_PROMPT ||
+ *(DWORD*)buf == URLPOLICY_CREDENTIALS_ANONYMOUS_ONLY,
+ "unexpected policy=%d\n", *(DWORD*)buf);
- hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 3, 0x1a10, NULL,
+ hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 3, action, NULL,
sizeof(DWORD), URLZONEREG_DEFAULT);
ok(hres == E_INVALIDARG, "GetZoneActionPolicy failed: %08x, expected E_INVALIDARG\n", hres);
- hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 3, 0x1a10, buf,
+ hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 3, action, buf,
2, URLZONEREG_DEFAULT);
ok(hres == E_INVALIDARG, "GetZoneActionPolicy failed: %08x, expected E_INVALIDARG\n", hres);
@@ -966,7 +974,7 @@ static void test_ZoneManager(void)
sizeof(DWORD), URLZONEREG_DEFAULT);
ok(hres == E_FAIL, "GetZoneActionPolicy failed: %08x, expected E_FAIL\n", hres);
- hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 13, 0x1a10, buf,
+ hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 13, action, buf,
sizeof(DWORD), URLZONEREG_DEFAULT);
ok(hres == E_INVALIDARG, "GetZoneActionPolicy failed: %08x, expected E_INVALIDARG\n", hres);
diff --git a/rostests/winetests/urlmon/protocol.c b/rostests/winetests/urlmon/protocol.c
index eb422828cdc..a9732117319 100644
--- a/rostests/winetests/urlmon/protocol.c
+++ b/rostests/winetests/urlmon/protocol.c
@@ -84,6 +84,7 @@ DEFINE_EXPECT(GetBindString_USER_AGENT);
DEFINE_EXPECT(GetBindString_POST_COOKIE);
DEFINE_EXPECT(QueryService_HttpNegotiate);
DEFINE_EXPECT(QueryService_InternetProtocol);
+DEFINE_EXPECT(QueryService_HttpSecurity);
DEFINE_EXPECT(BeginningTransaction);
DEFINE_EXPECT(GetRootSecurityId);
DEFINE_EXPECT(OnResponse);
@@ -110,7 +111,7 @@ static const WCHAR emptyW[] = {0};
static HRESULT expect_hrResult;
static LPCWSTR file_name, http_url, expect_wsz;
-static IInternetProtocol *http_protocol = NULL;
+static IInternetProtocol *async_protocol = NULL;
static BOOL first_data_notif = FALSE, http_is_first = FALSE,
http_post_test = FALSE;
static int state = 0, prot_state;
@@ -123,11 +124,13 @@ static HANDLE event_complete, event_complete2;
static BOOL binding_test;
static PROTOCOLDATA protocoldata, *pdata;
static DWORD prot_read;
+static BOOL security_problem = FALSE;
static enum {
FILE_TEST,
HTTP_TEST,
HTTPS_TEST,
+ FTP_TEST,
MK_TEST,
BIND_TEST
} tested_protocol;
@@ -135,13 +138,20 @@ static enum {
static const WCHAR protocol_names[][10] = {
{'f','i','l','e',0},
{'h','t','t','p',0},
+ {'h','t','t','p','s',0},
+ {'f','t','p',0},
{'m','k',0},
{'t','e','s','t',0}
};
-static const WCHAR binding_urls[][30] = {
+static const WCHAR binding_urls[][130] = {
{'f','i','l','e',':','t','e','s','t','.','h','t','m','l',0},
{'h','t','t','p',':','/','/','t','e','s','t','/','t','e','s','t','.','h','t','m','l',0},
+ {'h','t','t','p','s',':','/','/','w','w','w','.','c','o','d','e','w','e','a','v','e','r','s',
+ '.','c','o','m','/','t','e','s','t','.','h','t','m','l',0},
+ {'f','t','p',':','/','/','f','t','p','.','w','i','n','e','h','q','.','o','r','g',
+ '/','p','u','b','/','o','t','h','e','r',
+ '/','w','i','n','e','l','o','g','o','.','x','c','f','.','t','a','r','.','b','z','2',0},
{'m','k',':','t','e','s','t',0},
{'t','e','s','t',':','/','/','f','i','l','e','.','h','t','m','l',0}
};
@@ -174,6 +184,60 @@ static int strcmp_wa(LPCWSTR strw, const char *stra)
return lstrcmpW(strw, buf);
}
+static HRESULT WINAPI HttpSecurity_QueryInterface(IHttpSecurity *iface, REFIID riid, void **ppv)
+{
+ if(IsEqualGUID(&IID_IUnknown, riid)
+ || IsEqualGUID(&IID_IHttpSecurity, riid)) {
+ *ppv = iface;
+ return S_OK;
+ }
+
+ ok(0, "unexpected call\n");
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI HttpSecurity_AddRef(IHttpSecurity *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI HttpSecurity_Release(IHttpSecurity *iface)
+{
+ return 1;
+}
+
+static HRESULT WINAPI HttpSecurity_GetWindow(IHttpSecurity* iface, REFGUID rguidReason, HWND *phwnd)
+{
+ trace("HttpSecurity_GetWindow\n");
+
+ return S_FALSE;
+}
+
+static HRESULT WINAPI HttpSecurity_OnSecurityProblem(IHttpSecurity *iface, DWORD dwProblem)
+{
+ trace("Security problem: %u\n", dwProblem);
+ ok(dwProblem == ERROR_INTERNET_SEC_CERT_REV_FAILED, "Expected ERROR_INTERNET_SEC_CERT_REV_FAILED got %u\n", dwProblem);
+
+ /* Only retry once */
+ if (security_problem)
+ return E_ABORT;
+
+ security_problem = TRUE;
+ SET_EXPECT(BeginningTransaction);
+
+ return RPC_E_RETRY;
+}
+
+static IHttpSecurityVtbl HttpSecurityVtbl = {
+ HttpSecurity_QueryInterface,
+ HttpSecurity_AddRef,
+ HttpSecurity_Release,
+ HttpSecurity_GetWindow,
+ HttpSecurity_OnSecurityProblem
+};
+
+static IHttpSecurity http_security = { &HttpSecurityVtbl };
+
static HRESULT WINAPI HttpNegotiate_QueryInterface(IHttpNegotiate2 *iface, REFIID riid, void **ppv)
{
if(IsEqualGUID(&IID_IUnknown, riid)
@@ -312,6 +376,12 @@ static HRESULT WINAPI ServiceProvider_QueryService(IServiceProvider *iface, REFG
return E_NOINTERFACE;
}
+ if(IsEqualGUID(&IID_IHttpSecurity, guidService)) {
+ ok(IsEqualGUID(&IID_IHttpSecurity, riid), "unexpected riid\n");
+ CHECK_EXPECT(QueryService_HttpSecurity);
+ return IHttpSecurity_QueryInterface(&http_security, riid, ppv);
+ }
+
ok(0, "unexpected service %s\n", debugstr_guid(guidService));
return E_FAIL;
}
@@ -344,7 +414,10 @@ static HRESULT WINAPI ProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOL
{
HRESULT hres;
- CHECK_EXPECT(Switch);
+ if(tested_protocol == FTP_TEST)
+ CHECK_EXPECT2(Switch);
+ else
+ CHECK_EXPECT(Switch);
ok(pProtocolData != NULL, "pProtocolData == NULL\n");
pdata = pProtocolData;
@@ -356,37 +429,57 @@ static HRESULT WINAPI ProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOL
}
if (!state) {
- if (http_is_first) {
- CLEAR_CALLED(ReportProgress_FINDINGRESOURCE);
- CLEAR_CALLED(ReportProgress_CONNECTING);
- CLEAR_CALLED(ReportProgress_PROXYDETECTING);
- } else todo_wine {
- CHECK_NOT_CALLED(ReportProgress_FINDINGRESOURCE);
- /* IE7 does call this */
- CLEAR_CALLED(ReportProgress_CONNECTING);
+ if(tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST || tested_protocol == FTP_TEST) {
+ if (http_is_first) {
+ CLEAR_CALLED(ReportProgress_FINDINGRESOURCE);
+ CLEAR_CALLED(ReportProgress_CONNECTING);
+ CLEAR_CALLED(ReportProgress_PROXYDETECTING);
+ } else todo_wine {
+ CHECK_NOT_CALLED(ReportProgress_FINDINGRESOURCE);
+ /* IE7 does call this */
+ CLEAR_CALLED(ReportProgress_CONNECTING);
+ }
+ }
+ if(tested_protocol == FTP_TEST)
+ todo_wine CHECK_CALLED(ReportProgress_SENDINGREQUEST);
+ else if (tested_protocol != HTTPS_TEST)
+ CHECK_CALLED(ReportProgress_SENDINGREQUEST);
+ if(tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST) {
+ SET_EXPECT(OnResponse);
+ if(tested_protocol == HTTPS_TEST)
+ SET_EXPECT(ReportProgress_ACCEPTRANGES);
+ SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE);
+ if(bindf & BINDF_NEEDFILE)
+ SET_EXPECT(ReportProgress_CACHEFILENAMEAVAILABLE);
}
- CHECK_CALLED(ReportProgress_SENDINGREQUEST);
- SET_EXPECT(OnResponse);
- if(tested_protocol == HTTPS_TEST)
- SET_EXPECT(ReportProgress_ACCEPTRANGES);
- SET_EXPECT(ReportProgress_MIMETYPEAVAILABLE);
- if(bindf & BINDF_NEEDFILE)
- SET_EXPECT(ReportProgress_CACHEFILENAMEAVAILABLE);
}
SET_EXPECT(ReportData);
- hres = IInternetProtocol_Continue(http_protocol, pProtocolData);
+ hres = IInternetProtocol_Continue(async_protocol, pProtocolData);
ok(hres == S_OK, "Continue failed: %08x\n", hres);
- CHECK_CALLED(ReportData);
+ if(tested_protocol == FTP_TEST)
+ CLEAR_CALLED(ReportData);
+ else if (! security_problem)
+ CHECK_CALLED(ReportData);
if (!state) {
- state = 1;
- CHECK_CALLED(OnResponse);
- if(tested_protocol == HTTPS_TEST)
- CHECK_CALLED(ReportProgress_ACCEPTRANGES);
- CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE);
- if(bindf & BINDF_NEEDFILE)
- CHECK_CALLED(ReportProgress_CACHEFILENAMEAVAILABLE);
+ if (! security_problem)
+ {
+ state = 1;
+ if(tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST) {
+ CHECK_CALLED(OnResponse);
+ if(tested_protocol == HTTPS_TEST)
+ CHECK_CALLED(ReportProgress_ACCEPTRANGES);
+ CHECK_CALLED(ReportProgress_MIMETYPEAVAILABLE);
+ if(bindf & BINDF_NEEDFILE)
+ CHECK_CALLED(ReportProgress_CACHEFILENAMEAVAILABLE);
+ }
+ }
+ else
+ {
+ security_problem = FALSE;
+ SET_EXPECT(ReportProgress_CONNECTING);
+ }
}
SetEvent(event_complete);
@@ -443,15 +536,15 @@ static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface,
}
break;
case BINDSTATUS_FINDINGRESOURCE:
- CHECK_EXPECT(ReportProgress_FINDINGRESOURCE);
+ CHECK_EXPECT2(ReportProgress_FINDINGRESOURCE);
ok(szStatusText != NULL, "szStatusText == NULL\n");
break;
case BINDSTATUS_CONNECTING:
- CHECK_EXPECT(ReportProgress_CONNECTING);
+ CHECK_EXPECT2(ReportProgress_CONNECTING);
ok(szStatusText != NULL, "szStatusText == NULL\n");
break;
case BINDSTATUS_SENDINGREQUEST:
- CHECK_EXPECT(ReportProgress_SENDINGREQUEST);
+ CHECK_EXPECT2(ReportProgress_SENDINGREQUEST);
if(tested_protocol == FILE_TEST) {
ok(szStatusText != NULL, "szStatusText == NULL\n");
if(szStatusText)
@@ -506,9 +599,11 @@ static HRESULT WINAPI ProtocolSink_ReportData(IInternetProtocolSink *iface, DWOR
ok(ulProgress == ulProgressMax, "ulProgress (%d) != ulProgressMax (%d)\n",
ulProgress, ulProgressMax);
ok(ulProgressMax == 13, "ulProgressMax=%d, expected 13\n", ulProgressMax);
- ok(grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION),
+ /* BSCF_SKIPDRAINDATAFORFILEURLS added in IE8 */
+ ok((grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION)) ||
+ (grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION | BSCF_SKIPDRAINDATAFORFILEURLS)),
"grcfBSCF = %08x\n", grfBSCF);
- }else if(!binding_test && (tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST)) {
+ }else if(!binding_test && (tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST || tested_protocol == FTP_TEST)) {
if(!(grfBSCF & BSCF_LASTDATANOTIFICATION) || (grfBSCF & BSCF_DATAFULLYAVAILABLE))
CHECK_EXPECT(ReportData);
else if (http_post_test)
@@ -570,12 +665,17 @@ static HRESULT WINAPI ProtocolSink_ReportResult(IInternetProtocolSink *iface, HR
{
CHECK_EXPECT(ReportResult);
- ok(hrResult == expect_hrResult, "hrResult = %08x, expected: %08x\n",
- hrResult, expect_hrResult);
- if(SUCCEEDED(hrResult))
+ if(tested_protocol == FTP_TEST)
+ ok(hrResult == E_PENDING || hrResult == S_OK, "hrResult = %08x, expected E_PENDING or S_OK\n", hrResult);
+ else
+ ok(hrResult == expect_hrResult, "hrResult = %08x, expected: %08x\n",
+ hrResult, expect_hrResult);
+ if(SUCCEEDED(hrResult) || tested_protocol == FTP_TEST)
ok(dwError == ERROR_SUCCESS, "dwError = %d, expected ERROR_SUCCESS\n", dwError);
else
- ok(dwError != ERROR_SUCCESS, "dwError == ERROR_SUCCESS\n");
+ ok(dwError != ERROR_SUCCESS ||
+ broken(tested_protocol == MK_TEST), /* Win9x, WinME and NT4 */
+ "dwError == ERROR_SUCCESS\n");
ok(!szResult, "szResult != NULL\n");
return S_OK;
@@ -851,7 +951,7 @@ static DWORD WINAPI thread_proc(PVOID arg)
static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo,
- DWORD grfPI, DWORD dwReserved)
+ DWORD grfPI, HANDLE_PTR dwReserved)
{
BINDINFO bindinfo, exp_bindinfo;
DWORD cbindf = 0;
@@ -864,7 +964,7 @@ static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
ok(pOIProtSink != &protocol_sink, "unexpected pOIProtSink\n");
ok(pOIBindInfo != &bind_info, "unexpected pOIBindInfo\n");
ok(!grfPI, "grfPI = %x\n", grfPI);
- ok(!dwReserved, "dwReserved = %d\n", dwReserved);
+ ok(!dwReserved, "dwReserved = %lx\n", dwReserved);
memset(&bindinfo, 0, sizeof(bindinfo));
bindinfo.cbSize = sizeof(bindinfo);
@@ -1529,7 +1629,7 @@ static BOOL http_protocol_start(LPCWSTR url, BOOL is_first)
if (http_post_test)
SET_EXPECT(GetBindString_POST_COOKIE);
- hres = IInternetProtocol_Start(http_protocol, url, &protocol_sink, &bind_info, 0, 0);
+ hres = IInternetProtocol_Start(async_protocol, url, &protocol_sink, &bind_info, 0, 0);
ok(hres == S_OK, "Start failed: %08x\n", hres);
if(FAILED(hres))
return FALSE;
@@ -1558,6 +1658,48 @@ static BOOL http_protocol_start(LPCWSTR url, BOOL is_first)
return TRUE;
}
+static void test_protocol_terminate(IInternetProtocol *protocol)
+{
+ BYTE buf[3600];
+ DWORD cb;
+ HRESULT hres;
+
+ hres = IInternetProtocol_LockRequest(protocol, 0);
+ ok(hres == S_OK, "LockRequest failed: %08x\n", hres);
+
+ hres = IInternetProtocol_Read(protocol, buf, 1, &cb);
+ ok(hres == S_FALSE, "Read failed: %08x\n", hres);
+
+ hres = IInternetProtocol_Terminate(protocol, 0);
+ ok(hres == S_OK, "Terminate failed: %08x\n", hres);
+
+ /* This wait is to give the internet handles being freed in Terminate
+ * enough time to actually terminate in all cases. Internet handles
+ * terminate asynchronously and native reuses the main InternetOpen
+ * handle. The only case in which this seems to be necessary is on
+ * wine with native wininet and urlmon, resulting in the next time
+ * test_http_protocol_url being called the first data notification actually
+ * being an extra last data notification from the previous connection
+ * about once out of every ten times. */
+ Sleep(100);
+
+ hres = IInternetProtocol_UnlockRequest(protocol);
+ ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres);
+}
+
+static void test_http_info(IInternetProtocol *protocol)
+{
+ IWinInetHttpInfo *info;
+ HRESULT hres;
+
+ hres = IInternetProtocol_QueryInterface(protocol, &IID_IWinInetHttpInfo, (void**)&info);
+ ok(hres == S_OK, "Could not get IWinInterHttpInfo iface: %08x\n", hres);
+
+ /* TODO */
+
+ IWinInetHttpInfo_Release(info);
+}
+
/* is_first refers to whether this is the first call to this function
* _for this url_ */
static void test_http_protocol_url(LPCWSTR url, BOOL is_https, BOOL is_first)
@@ -1588,13 +1730,15 @@ static void test_http_protocol_url(LPCWSTR url, BOOL is_https, BOOL is_first)
return;
hres = IClassFactory_CreateInstance(factory, NULL, &IID_IInternetProtocol,
- (void**)&http_protocol);
+ (void**)&async_protocol);
ok(hres == S_OK, "Could not get IInternetProtocol: %08x\n", hres);
if(SUCCEEDED(hres)) {
BYTE buf[3600];
DWORD cb;
+ ULONG ref;
- test_priority(http_protocol);
+ test_priority(async_protocol);
+ test_http_info(async_protocol);
SET_EXPECT(ReportProgress_FINDINGRESOURCE);
SET_EXPECT(ReportProgress_CONNECTING);
@@ -1602,6 +1746,8 @@ static void test_http_protocol_url(LPCWSTR url, BOOL is_https, BOOL is_first)
SET_EXPECT(ReportProgress_PROXYDETECTING);
if(! is_https)
SET_EXPECT(ReportProgress_CACHEFILENAMEAVAILABLE);
+ else
+ SET_EXPECT(QueryService_HttpSecurity);
if(!(bindf & BINDF_FROMURLMON)) {
SET_EXPECT(OnResponse);
SET_EXPECT(ReportProgress_RAWMIMETYPE);
@@ -1616,7 +1762,7 @@ static void test_http_protocol_url(LPCWSTR url, BOOL is_https, BOOL is_first)
SET_EXPECT(ReportResult);
expect_hrResult = S_OK;
- hres = IInternetProtocol_Read(http_protocol, buf, 1, &cb);
+ hres = IInternetProtocol_Read(async_protocol, buf, 1, &cb);
ok((hres == E_PENDING && cb==0) ||
(hres == S_OK && cb==1), "Read failed: %08x (%d bytes)\n", hres, cb);
@@ -1625,15 +1771,17 @@ static void test_http_protocol_url(LPCWSTR url, BOOL is_https, BOOL is_first)
CHECK_CALLED(Switch);
else
CHECK_CALLED(ReportData);
+ if (is_https)
+ CLEAR_CALLED(QueryService_HttpSecurity);
while(1) {
if(bindf & BINDF_FROMURLMON)
SET_EXPECT(Switch);
else
SET_EXPECT(ReportData);
- hres = IInternetProtocol_Read(http_protocol, buf, sizeof(buf), &cb);
+ hres = IInternetProtocol_Read(async_protocol, buf, sizeof(buf), &cb);
if(hres == E_PENDING) {
- hres = IInternetProtocol_Read(http_protocol, buf, 1, &cb);
+ hres = IInternetProtocol_Read(async_protocol, buf, 1, &cb);
ok((hres == E_PENDING && cb==0) ||
(hres == S_OK && cb==1), "Read failed: %08x (%d bytes)\n", hres, cb);
WaitForSingleObject(event_complete, INFINITE);
@@ -1641,7 +1789,7 @@ static void test_http_protocol_url(LPCWSTR url, BOOL is_https, BOOL is_first)
CHECK_CALLED(Switch);
else
CHECK_CALLED(ReportData);
- } else {
+ }else {
if(bindf & BINDF_FROMURLMON)
CHECK_NOT_CALLED(Switch);
else
@@ -1651,30 +1799,12 @@ static void test_http_protocol_url(LPCWSTR url, BOOL is_https, BOOL is_first)
}
ok(hres == S_FALSE, "Read failed: %08x\n", hres);
CHECK_CALLED(ReportResult);
+ if (is_https)
+ CLEAR_CALLED(ReportProgress_SENDINGREQUEST);
- hres = IInternetProtocol_LockRequest(http_protocol, 0);
- ok(hres == S_OK, "LockRequest failed: %08x\n", hres);
-
- hres = IInternetProtocol_Read(http_protocol, buf, 1, &cb);
- ok(hres == S_FALSE, "Read failed: %08x\n", hres);
-
- hres = IInternetProtocol_Terminate(http_protocol, 0);
- ok(hres == S_OK, "Terminate failed: %08x\n", hres);
-
- /* This wait is to give the internet handles being freed in Terminate
- * enough time to actually terminate in all cases. Internet handles
- * terminate asynchronously and native reuses the main InternetOpen
- * handle. The only case in which this seems to be necessary is on
- * wine with native wininet and urlmon, resulting in the next time
- * test_http_protocol_url being called the first data notification actually
- * being an extra last data notification from the previous connection
- * about once out of every ten times. */
- Sleep(100);
-
- hres = IInternetProtocol_UnlockRequest(http_protocol);
- ok(hres == S_OK, "UnlockRequest failed: %08x\n", hres);
-
- IInternetProtocol_Release(http_protocol);
+ test_protocol_terminate(async_protocol);
+ ref = IInternetProtocol_Release(async_protocol);
+ ok(!ref, "ref=%x\n", hres);
}
IClassFactory_Release(factory);
@@ -1724,6 +1854,125 @@ static void test_https_protocol(void)
test_http_protocol_url(codeweavers_url, TRUE, TRUE);
}
+
+static void test_ftp_protocol(void)
+{
+ IInternetProtocolInfo *protocol_info;
+ IClassFactory *factory;
+ IUnknown *unk;
+ BYTE buf[4096];
+ ULONG ref;
+ DWORD cb;
+ HRESULT hres;
+
+ static const WCHAR ftp_urlW[] = {'f','t','p',':','/','/','f','t','p','.','w','i','n','e','h','q','.','o','r','g',
+ '/','p','u','b','/','o','t','h','e','r','/',
+ 'w','i','n','e','l','o','g','o','.','x','c','f','.','t','a','r','.','b','z','2',0};
+
+ trace("Testing ftp protocol...\n");
+
+ bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON | BINDF_NOWRITECACHE;
+ state = 0;
+ tested_protocol = FTP_TEST;
+ first_data_notif = TRUE;
+ expect_hrResult = E_PENDING;
+
+ hres = CoGetClassObject(&CLSID_FtpProtocol, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void**)&unk);
+ ok(hres == S_OK, "CoGetClassObject failed: %08x\n", hres);
+ if(FAILED(hres))
+ return;
+
+ hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocolInfo, (void**)&protocol_info);
+ ok(hres == E_NOINTERFACE, "Could not get IInternetProtocolInfo interface: %08x, expected E_NOINTERFACE\n", hres);
+
+ hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)&factory);
+ ok(hres == S_OK, "Could not get IClassFactory interface\n");
+ IUnknown_Release(unk);
+ if(FAILED(hres))
+ return;
+
+ hres = IClassFactory_CreateInstance(factory, NULL, &IID_IInternetProtocol,
+ (void**)&async_protocol);
+ IClassFactory_Release(factory);
+ ok(hres == S_OK, "Could not get IInternetProtocol: %08x\n", hres);
+
+ test_priority(async_protocol);
+ test_http_info(async_protocol);
+
+ SET_EXPECT(GetBindInfo);
+ SET_EXPECT(GetBindString_USER_AGENT);
+ SET_EXPECT(ReportProgress_FINDINGRESOURCE);
+ SET_EXPECT(ReportProgress_CONNECTING);
+ SET_EXPECT(ReportProgress_SENDINGREQUEST);
+ SET_EXPECT(Switch);
+
+ hres = IInternetProtocol_Start(async_protocol, ftp_urlW, &protocol_sink, &bind_info, 0, 0);
+ ok(hres == S_OK, "Start failed: %08x\n", hres);
+ CHECK_CALLED(GetBindInfo);
+ todo_wine CHECK_NOT_CALLED(GetBindString_USER_AGENT);
+
+ SET_EXPECT(ReportResult);
+
+ hres = IInternetProtocol_Read(async_protocol, buf, 1, &cb);
+ ok((hres == E_PENDING && cb==0) ||
+ (hres == S_OK && cb==1), "Read failed: %08x (%d bytes)\n", hres, cb);
+
+ WaitForSingleObject(event_complete, INFINITE);
+
+ while(1) {
+
+ hres = IInternetProtocol_Read(async_protocol, buf, sizeof(buf), &cb);
+ if(hres == E_PENDING)
+ WaitForSingleObject(event_complete, INFINITE);
+ else
+ if(cb == 0) break;
+ }
+
+ ok(hres == S_FALSE, "Read failed: %08x\n", hres);
+ CHECK_CALLED(ReportResult);
+ CHECK_CALLED(Switch);
+
+ test_protocol_terminate(async_protocol);
+
+ ref = IInternetProtocol_Release(async_protocol);
+ ok(!ref, "ref=%d\n", ref);
+}
+
+static void test_gopher_protocol(void)
+{
+ IInternetProtocolInfo *protocol_info;
+ IClassFactory *factory;
+ IUnknown *unk;
+ HRESULT hres;
+
+ trace("Testing gopher protocol...\n");
+
+ hres = CoGetClassObject(&CLSID_GopherProtocol, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void**)&unk);
+ ok(hres == S_OK ||
+ hres == REGDB_E_CLASSNOTREG, /* Gopher protocol has been removed as of Vista */
+ "CoGetClassObject failed: %08x\n", hres);
+ if(FAILED(hres))
+ return;
+
+ hres = IUnknown_QueryInterface(unk, &IID_IInternetProtocolInfo, (void**)&protocol_info);
+ ok(hres == E_NOINTERFACE, "Could not get IInternetProtocolInfo interface: %08x, expected E_NOINTERFACE\n", hres);
+
+ hres = IUnknown_QueryInterface(unk, &IID_IClassFactory, (void**)&factory);
+ ok(hres == S_OK, "Could not get IClassFactory interface\n");
+ IUnknown_Release(unk);
+ if(FAILED(hres))
+ return;
+
+ hres = IClassFactory_CreateInstance(factory, NULL, &IID_IInternetProtocol,
+ (void**)&async_protocol);
+ IClassFactory_Release(factory);
+ ok(hres == S_OK, "Could not get IInternetProtocol: %08x\n", hres);
+
+ test_priority(async_protocol);
+
+ IInternetProtocol_Release(async_protocol);
+}
+
static void test_mk_protocol(void)
{
IInternetProtocolInfo *protocol_info;
@@ -2011,6 +2260,8 @@ START_TEST(protocol)
test_file_protocol();
test_http_protocol();
test_https_protocol();
+ test_ftp_protocol();
+ test_gopher_protocol();
test_mk_protocol();
test_CreateBinding();
test_binding(FILE_TEST);
diff --git a/rostests/winetests/urlmon/url.c b/rostests/winetests/urlmon/url.c
index 094d21dd546..6d3832edf60 100644
--- a/rostests/winetests/urlmon/url.c
+++ b/rostests/winetests/urlmon/url.c
@@ -128,6 +128,7 @@ DEFINE_EXPECT(CreateInstance);
DEFINE_EXPECT(Load);
DEFINE_EXPECT(PutProperty_MIMETYPEPROP);
DEFINE_EXPECT(PutProperty_CLASSIDPROP);
+DEFINE_EXPECT(SetPriority);
static const WCHAR TEST_URL_1[] = {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/','\0'};
static const WCHAR TEST_PART_URL_1[] = {'/','t','e','s','t','/','\0'};
@@ -147,6 +148,9 @@ static const WCHAR MK_URL[] = {'m','k',':','@','M','S','I','T','S','t','o','r','
static const WCHAR https_urlW[] =
{'h','t','t','p','s',':','/','/','w','w','w','.','c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',
'/','t','e','s','t','.','h','t','m','l',0};
+static const WCHAR ftp_urlW[] = {'f','t','p',':','/','/','f','t','p','.','w','i','n','e','h','q','.','o','r','g',
+ '/','p','u','b','/','o','t','h','e','r','/',
+ 'w','i','n','e','l','o','g','o','.','x','c','f','.','t','a','r','.','b','z','2',0};
static const WCHAR wszTextHtml[] = {'t','e','x','t','/','h','t','m','l',0};
@@ -169,6 +173,7 @@ static BOOL stopped_binding = FALSE, stopped_obj_binding = FALSE, emulate_protoc
static DWORD read = 0, bindf = 0, prot_state = 0, thread_id, tymed;
static CHAR mime_type[512];
static IInternetProtocolSink *protocol_sink = NULL;
+static IBinding *current_binding;
static HANDLE complete_event, complete_event2;
static HRESULT binding_hres;
static BOOL have_IHttpNegotiate2;
@@ -179,7 +184,8 @@ static LPCWSTR urls[] = {
INDEX_HTML,
ITS_URL,
MK_URL,
- https_urlW
+ https_urlW,
+ ftp_urlW
};
static WCHAR file_url[INTERNET_MAX_URL_LENGTH];
@@ -190,7 +196,8 @@ static enum {
FILE_TEST,
ITS_TEST,
MK_TEST,
- HTTPS_TEST
+ HTTPS_TEST,
+ FTP_TEST
} test_protocol;
static enum {
@@ -218,6 +225,11 @@ static const char *debugstr_guid(REFIID riid)
return buf;
}
+static BOOL is_urlmon_protocol(int prot)
+{
+ return prot == FILE_TEST || prot == HTTP_TEST || prot == HTTPS_TEST || prot == FTP_TEST || prot == MK_TEST;
+}
+
static void test_CreateURLMoniker(LPCWSTR url1, LPCWSTR url2)
{
HRESULT hr;
@@ -239,14 +251,66 @@ static void test_create(void)
test_CreateURLMoniker(TEST_URL_1, TEST_PART_URL_1);
}
+static HRESULT WINAPI Priority_QueryInterface(IInternetPriority *iface, REFIID riid, void **ppv)
+{
+ ok(0, "unexpected call\n");
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI Priority_AddRef(IInternetPriority *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI Priority_Release(IInternetPriority *iface)
+{
+ return 1;
+}
+
+static HRESULT WINAPI Priority_SetPriority(IInternetPriority *iface, LONG nPriority)
+{
+ CHECK_EXPECT(SetPriority);
+ ok(!nPriority, "nPriority = %d\n", nPriority);
+ return S_OK;
+}
+
+static HRESULT WINAPI Priority_GetPriority(IInternetPriority *iface, LONG *pnPriority)
+{
+ ok(0, "unexpected call\n");
+ return S_OK;
+}
+
+static const IInternetPriorityVtbl InternetPriorityVtbl = {
+ Priority_QueryInterface,
+ Priority_AddRef,
+ Priority_Release,
+ Priority_SetPriority,
+ Priority_GetPriority
+};
+
+static IInternetPriority InternetPriority = { &InternetPriorityVtbl };
+
static HRESULT WINAPI Protocol_QueryInterface(IInternetProtocol *iface, REFIID riid, void **ppv)
{
+ *ppv = NULL;
+
if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IInternetProtocol, riid)) {
*ppv = iface;
return S_OK;
}
- *ppv = NULL;
+ if(IsEqualGUID(&IID_IInternetPriority, riid)) {
+ if(!is_urlmon_protocol(test_protocol))
+ return E_NOINTERFACE;
+
+ *ppv = &InternetPriority;
+ return S_OK;
+ }
+
+ if(IsEqualGUID(&IID_IInternetProtocolEx, riid))
+ return E_NOINTERFACE; /* TODO */
+
+ ok(0, "unexpected call %s\n", debugstr_guid(riid));
return E_NOINTERFACE;
}
@@ -370,7 +434,7 @@ static DWORD WINAPI thread_proc(PVOID arg)
static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
IInternetProtocolSink *pOIProtSink, IInternetBindInfo *pOIBindInfo,
- DWORD grfPI, DWORD dwReserved)
+ DWORD grfPI, HANDLE_PTR dwReserved)
{
BINDINFO bindinfo;
DWORD bindf, bscf = BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION;
@@ -388,7 +452,7 @@ static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
ok(pOIProtSink != NULL, "pOIProtSink == NULL\n");
ok(pOIBindInfo != NULL, "pOIBindInfo == NULL\n");
ok(grfPI == 0, "grfPI=%d, expected 0\n", grfPI);
- ok(dwReserved == 0, "dwReserved=%d, expected 0\n", dwReserved);
+ ok(dwReserved == 0, "dwReserved=%lx, expected 0\n", dwReserved);
if(!filedwl_api && binding_hres != S_OK) {
SET_EXPECT(OnStopBinding);
@@ -408,9 +472,7 @@ static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
if(filedwl_api) {
ok(bindf == (BINDF_PULLDATA|BINDF_FROMURLMON|BINDF_NEEDFILE), "bindf=%08x\n", bindf);
- }else if(tymed == TYMED_ISTREAM
- && (test_protocol == FILE_TEST || test_protocol == MK_TEST
- || test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)) {
+ }else if(tymed == TYMED_ISTREAM && is_urlmon_protocol(test_protocol)) {
ok(bindf == (BINDF_ASYNCHRONOUS|BINDF_ASYNCSTORAGE|BINDF_PULLDATA
|BINDF_FROMURLMON),
"bindf=%08x\n", bindf);
@@ -1118,6 +1180,8 @@ static HRESULT WINAPI statusclb_OnStartBinding(IBindStatusCallback *iface, DWORD
if(pib == (void*)0xdeadbeef)
return S_OK;
+ current_binding = pib;
+
hres = IBinding_QueryInterface(pib, &IID_IMoniker, (void**)&mon);
ok(hres == E_NOINTERFACE, "IBinding should not have IMoniker interface\n");
if(SUCCEEDED(hres))
@@ -1150,6 +1214,8 @@ static HRESULT WINAPI statusclb_OnProgress(IBindStatusCallback *iface, ULONG ulP
case BINDSTATUS_FINDINGRESOURCE:
if(iface == &objbsc)
CHECK_EXPECT(Obj_OnProgress_FINDINGRESOURCE);
+ else if(test_protocol == FTP_TEST)
+ todo_wine CHECK_EXPECT(OnProgress_FINDINGRESOURCE);
else
CHECK_EXPECT(OnProgress_FINDINGRESOURCE);
if((bindf & BINDF_ASYNCHRONOUS) && emulate_protocol)
@@ -1158,6 +1224,8 @@ static HRESULT WINAPI statusclb_OnProgress(IBindStatusCallback *iface, ULONG ulP
case BINDSTATUS_CONNECTING:
if(iface == &objbsc)
CHECK_EXPECT(Obj_OnProgress_CONNECTING);
+ else if(test_protocol == FTP_TEST)
+ todo_wine CHECK_EXPECT(OnProgress_CONNECTING);
else
CHECK_EXPECT(OnProgress_CONNECTING);
if((bindf & BINDF_ASYNCHRONOUS) && emulate_protocol)
@@ -1166,6 +1234,8 @@ static HRESULT WINAPI statusclb_OnProgress(IBindStatusCallback *iface, ULONG ulP
case BINDSTATUS_SENDINGREQUEST:
if(iface == &objbsc)
CHECK_EXPECT(Obj_OnProgress_SENDINGREQUEST);
+ else if(test_protocol == FTP_TEST)
+ CHECK_EXPECT2(OnProgress_SENDINGREQUEST);
else
CHECK_EXPECT(OnProgress_SENDINGREQUEST);
if((bindf & BINDF_ASYNCHRONOUS) && emulate_protocol)
@@ -1201,8 +1271,7 @@ static HRESULT WINAPI statusclb_OnProgress(IBindStatusCallback *iface, ULONG ulP
break;
case BINDSTATUS_DOWNLOADINGDATA:
CHECK_EXPECT2(OnProgress_DOWNLOADINGDATA);
- if(iface == &objbsc)
- todo_wine ok(0, "unexpected call\n");
+ ok(iface != &objbsc, "unexpected call\n");
ok(download_state == DOWNLOADING, "Download state was %d, expected DOWNLOADING\n",
download_state);
break;
@@ -1269,9 +1338,27 @@ static HRESULT WINAPI statusclb_OnProgress(IBindStatusCallback *iface, ULONG ulP
case BINDSTATUS_PROXYDETECTING:
trace("BINDSTATUS_PROXYDETECTING\n");
break;
+ case BINDSTATUS_COOKIE_SENT:
+ trace("BINDSTATUS_COOKIE_SENT\n");
+ break;
default:
ok(0, "unexpected code %d\n", ulStatusCode);
};
+
+ if(current_binding) {
+ IWinInetHttpInfo *http_info;
+ HRESULT hres;
+
+ hres = IBinding_QueryInterface(current_binding, &IID_IWinInetHttpInfo, (void**)&http_info);
+ if(!emulate_protocol && test_protocol != FILE_TEST && is_urlmon_protocol(test_protocol))
+ ok(hres == S_OK, "Could not get IWinInetHttpInfo iface: %08x\n", hres);
+ else
+ ok(hres == E_NOINTERFACE,
+ "QueryInterface(IID_IWinInetHttpInfo) returned: %08x, expected E_NOINTERFACE\n", hres);
+ if(SUCCEEDED(hres))
+ IWinInetHttpInfo_Release(http_info);
+ }
+
return S_OK;
}
@@ -2062,6 +2149,8 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
SET_EXPECT(QueryService_IInternetProtocol);
SET_EXPECT(OnStartBinding);
if(emulate_protocol) {
+ if(is_urlmon_protocol(test_protocol))
+ SET_EXPECT(SetPriority);
SET_EXPECT(Start);
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
SET_EXPECT(Terminate);
@@ -2078,7 +2167,8 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
SET_EXPECT(OnProgress_FINDINGRESOURCE);
SET_EXPECT(OnProgress_CONNECTING);
}
- if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FILE_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FTP_TEST
+ || test_protocol == FILE_TEST)
SET_EXPECT(OnProgress_SENDINGREQUEST);
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
SET_EXPECT(OnResponse);
@@ -2086,7 +2176,7 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
if(test_protocol == FILE_TEST)
SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
- if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FTP_TEST)
SET_EXPECT(OnProgress_DOWNLOADINGDATA);
SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
if(tymed != TYMED_FILE || test_protocol != ABOUT_TEST)
@@ -2132,6 +2222,8 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
CHECK_CALLED(QueryService_IInternetProtocol);
CHECK_CALLED(OnStartBinding);
if(emulate_protocol) {
+ if(is_urlmon_protocol(test_protocol))
+ CHECK_CALLED(SetPriority);
CHECK_CALLED(Start);
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST) {
if(tymed == TYMED_FILE)
@@ -2162,13 +2254,15 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
}
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FILE_TEST)
CHECK_CALLED(OnProgress_SENDINGREQUEST);
+ else if(test_protocol == FTP_TEST)
+ todo_wine CHECK_CALLED(OnProgress_SENDINGREQUEST);
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
CHECK_CALLED(OnResponse);
CHECK_CALLED(OnProgress_MIMETYPEAVAILABLE);
CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA);
if(test_protocol == FILE_TEST)
CHECK_CALLED(OnProgress_CACHEFILENAMEAVAILABLE);
- if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FTP_TEST)
CLEAR_CALLED(OnProgress_DOWNLOADINGDATA);
CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
if(tymed != TYMED_FILE || test_protocol != ABOUT_TEST)
@@ -2229,6 +2323,8 @@ static void test_BindToObject(int protocol, BOOL emul)
SET_EXPECT(QueryService_IInternetProtocol);
SET_EXPECT(Obj_OnStartBinding);
if(emulate_protocol) {
+ if(is_urlmon_protocol(test_protocol))
+ SET_EXPECT(SetPriority);
SET_EXPECT(Start);
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
SET_EXPECT(Terminate);
@@ -2298,6 +2394,8 @@ static void test_BindToObject(int protocol, BOOL emul)
CHECK_CALLED(QueryService_IInternetProtocol);
CHECK_CALLED(Obj_OnStartBinding);
if(emulate_protocol) {
+ if(is_urlmon_protocol(test_protocol))
+ CHECK_CALLED(SetPriority);
CHECK_CALLED(Start);
if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
CHECK_CALLED(Terminate);
@@ -2378,6 +2476,8 @@ static void test_URLDownloadToFile(DWORD prot, BOOL emul)
}
SET_EXPECT(OnStartBinding);
if(emulate_protocol) {
+ if(is_urlmon_protocol(test_protocol))
+ SET_EXPECT(SetPriority);
SET_EXPECT(Start);
SET_EXPECT(UnlockRequest);
}else {
@@ -2412,6 +2512,8 @@ static void test_URLDownloadToFile(DWORD prot, BOOL emul)
}
CHECK_CALLED(OnStartBinding);
if(emulate_protocol) {
+ if(is_urlmon_protocol(test_protocol))
+ CHECK_CALLED(SetPriority);
CHECK_CALLED(Start);
CHECK_CALLED(UnlockRequest);
}else {
@@ -2511,6 +2613,8 @@ static void test_ReportResult(HRESULT exhres)
SET_EXPECT(GetBindInfo);
SET_EXPECT(QueryInterface_IInternetProtocol);
SET_EXPECT(OnStartBinding);
+ if(is_urlmon_protocol(test_protocol))
+ SET_EXPECT(SetPriority);
SET_EXPECT(Start);
hres = IMoniker_BindToStorage(mon, bctx, NULL, &IID_IStream, (void**)&unk);
@@ -2523,6 +2627,8 @@ static void test_ReportResult(HRESULT exhres)
CHECK_CALLED(GetBindInfo);
CHECK_CALLED(QueryInterface_IInternetProtocol);
CHECK_CALLED(OnStartBinding);
+ if(is_urlmon_protocol(test_protocol))
+ CHECK_CALLED(SetPriority);
CHECK_CALLED(Start);
ok(unk == NULL, "unk=%p\n", unk);
@@ -2558,6 +2664,29 @@ static void test_BindToStorage_fail(void)
test_ReportResult(S_FALSE);
}
+static void test_StdURLMoniker(void)
+{
+ IMoniker *mon, *async_mon;
+ LPOLESTR display_name;
+ HRESULT hres;
+
+ hres = CoCreateInstance(&IID_IInternet, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
+ &IID_IMoniker, (void**)&mon);
+ ok(hres == S_OK, "Could not create IInternet instance: %08x\n", hres);
+ if(FAILED(hres))
+ return;
+
+ hres = IMoniker_QueryInterface(mon, &IID_IAsyncMoniker, (void**)&async_mon);
+ ok(hres == S_OK, "Could not get IAsyncMoniker iface: %08x\n", hres);
+ ok(mon == async_mon, "mon != async_mon\n");
+ IMoniker_Release(async_mon);
+
+ hres = IMoniker_GetDisplayName(mon, NULL, NULL, &display_name);
+ ok(hres == E_OUTOFMEMORY, "GetDisplayName failed: %08x, expected E_OUTOFMEMORY\n", hres);
+
+ IMoniker_Release(mon);
+}
+
static void gecko_installer_workaround(BOOL disable)
{
HKEY hkey;
@@ -2609,6 +2738,9 @@ START_TEST(url)
CoInitialize(NULL);
+ trace("test StdURLMoniker...\n");
+ test_StdURLMoniker();
+
trace("synchronous http test...\n");
test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM);
@@ -2709,6 +2841,11 @@ START_TEST(url)
trace("test URLDownloadToFile for http protocol...\n");
test_URLDownloadToFile(HTTP_TEST, FALSE);
+ bindf |= BINDF_NOWRITECACHE;
+
+ trace("ftp test...\n");
+ test_BindToStorage(FTP_TEST, FALSE, TYMED_ISTREAM);
+
trace("test failures...\n");
test_BindToStorage_fail();
}
diff --git a/rostests/winetests/user32/class.c b/rostests/winetests/user32/class.c
index a1ae4bdc55d..f8a4cd822ae 100755
--- a/rostests/winetests/user32/class.c
+++ b/rostests/winetests/user32/class.c
@@ -43,11 +43,13 @@ static const WCHAR WC_EDITW[] = {'E','d','i','t',0};
static LRESULT WINAPI ClassTest_WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
+ if (msg == WM_NCCREATE) return 1;
return DefWindowProcW (hWnd, msg, wParam, lParam);
}
static LRESULT WINAPI ClassTest_WndProc2 (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
+ if (msg == WM_NCCREATE) return 1;
return DefWindowProcA (hWnd, msg, wParam, lParam);
}
@@ -234,42 +236,48 @@ static void test_styles(void)
check_style( "#32772", 1, 0, 0 ); /* icon title */
}
-static void check_class(HINSTANCE inst, const char *name, const char *menu_name)
+static void check_class_(int line, HINSTANCE inst, const char *name, const char *menu_name)
{
WNDCLASS wc;
UINT atom = GetClassInfo(inst,name,&wc);
- ok( atom, "Class %s %p not found\n", name, inst );
+ ok_(__FILE__,line)( atom, "Class %s %p not found\n", name, inst );
if (atom)
{
if (wc.lpszMenuName && menu_name)
- ok( !strcmp( menu_name, wc.lpszMenuName ), "Wrong name %s/%s for class %s %p\n",
- wc.lpszMenuName, menu_name, name, inst );
+ ok_(__FILE__,line)( !strcmp( menu_name, wc.lpszMenuName ),
+ "Wrong name %s/%s for class %s %p\n",
+ wc.lpszMenuName, menu_name, name, inst );
else
- ok( !menu_name == !wc.lpszMenuName, "Wrong name %p/%p for class %s %p\n",
- wc.lpszMenuName, menu_name, name, inst );
+ ok_(__FILE__,line)( !menu_name == !wc.lpszMenuName, "Wrong name %p/%p for class %s %p\n",
+ wc.lpszMenuName, menu_name, name, inst );
}
}
+#define check_class(inst,name,menu) check_class_(__LINE__,inst,name,menu)
-static void check_instance( const char *name, HINSTANCE inst, HINSTANCE info_inst, HINSTANCE gcl_inst )
+static void check_instance_( int line, const char *name, HINSTANCE inst,
+ HINSTANCE info_inst, HINSTANCE gcl_inst )
{
WNDCLASSA wc;
HWND hwnd;
- ok( GetClassInfo( inst, name, &wc ), "Couldn't find class %s inst %p\n", name, inst );
- ok( wc.hInstance == info_inst, "Wrong info instance %p/%p for class %s\n",
- wc.hInstance, info_inst, name );
+ ok_(__FILE__,line)( GetClassInfo( inst, name, &wc ), "Couldn't find class %s inst %p\n", name, inst );
+ ok_(__FILE__,line)( wc.hInstance == info_inst, "Wrong info instance %p/%p for class %s\n",
+ wc.hInstance, info_inst, name );
hwnd = CreateWindowExA( 0, name, "test_window", 0, 0, 0, 0, 0, 0, 0, inst, 0 );
- ok( hwnd != NULL, "Couldn't create window for class %s inst %p\n", name, inst );
- ok( (HINSTANCE)GetClassLongPtrA( hwnd, GCLP_HMODULE ) == gcl_inst,
- "Wrong GCL instance %p/%p for class %s\n",
+ ok_(__FILE__,line)( hwnd != NULL, "Couldn't create window for class %s inst %p\n", name, inst );
+ ok_(__FILE__,line)( (HINSTANCE)GetClassLongPtrA( hwnd, GCLP_HMODULE ) == gcl_inst,
+ "Wrong GCL instance %p/%p for class %s\n",
(HINSTANCE)GetClassLongPtrA( hwnd, GCLP_HMODULE ), gcl_inst, name );
- ok( (HINSTANCE)GetWindowLongPtrA( hwnd, GWLP_HINSTANCE ) == inst,
- "Wrong GWL instance %p/%p for window %s\n",
+ ok_(__FILE__,line)( (HINSTANCE)GetWindowLongPtrA( hwnd, GWLP_HINSTANCE ) == inst,
+ "Wrong GWL instance %p/%p for window %s\n",
(HINSTANCE)GetWindowLongPtrA( hwnd, GWLP_HINSTANCE ), inst, name );
- ok(!UnregisterClassA(name, inst), "UnregisterClassA should fail while exists a class window\n");
- ok(GetLastError() == ERROR_CLASS_HAS_WINDOWS, "GetLastError() should be set to ERROR_CLASS_HAS_WINDOWS not %d\n", GetLastError());
+ ok_(__FILE__,line)(!UnregisterClassA(name, inst),
+ "UnregisterClassA should fail while exists a class window\n");
+ ok_(__FILE__,line)(GetLastError() == ERROR_CLASS_HAS_WINDOWS,
+ "GetLastError() should be set to ERROR_CLASS_HAS_WINDOWS not %d\n", GetLastError());
DestroyWindow(hwnd);
}
+#define check_instance(name,inst,info_inst,gcl_inst) check_instance_(__LINE__,name,inst,info_inst,gcl_inst)
struct class_info
{
@@ -364,6 +372,7 @@ static void test_instances(void)
/* setting global flag doesn't change status of class */
hwnd = CreateWindowExA( 0, name, "test", 0, 0, 0, 0, 0, 0, 0, main_module, 0 );
+ ok( hwnd != 0, "CreateWindow failed error %u\n", GetLastError());
SetClassLongA( hwnd, GCL_STYLE, CS_GLOBALCLASS );
cls.lpszMenuName = "kernel32";
cls.hInstance = kernel32;
diff --git a/rostests/winetests/user32/clipboard.c b/rostests/winetests/user32/clipboard.c
index 30b170759a2..e2ba2f92e5e 100755
--- a/rostests/winetests/user32/clipboard.c
+++ b/rostests/winetests/user32/clipboard.c
@@ -21,6 +21,7 @@
#include "wine/test.h"
#include "winbase.h"
#include "winerror.h"
+#include "wingdi.h"
#include "winuser.h"
static BOOL is_win9x = FALSE;
@@ -190,6 +191,77 @@ todo_wine
test_last_error(ERROR_CLIPBOARD_NOT_OPEN);
}
+static HGLOBAL create_text(void)
+{
+ HGLOBAL h = GlobalAlloc(GMEM_DDESHARE|GMEM_MOVEABLE, 5);
+ char *p = GlobalLock(h);
+ strcpy(p, "test");
+ GlobalUnlock(h);
+ return h;
+}
+
+static HENHMETAFILE create_emf(void)
+{
+ const RECT rect = {0, 0, 100, 100};
+ HDC hdc = CreateEnhMetaFileA(NULL, NULL, &rect, "HENHMETAFILE Ole Clipboard Test\0Test\0\0");
+ ExtTextOutA(hdc, 0, 0, ETO_OPAQUE, &rect, "Test String", strlen("Test String"), NULL);
+ return CloseEnhMetaFile(hdc);
+}
+
+static void test_synthesized(void)
+{
+ HGLOBAL h, htext;
+ HENHMETAFILE emf;
+ BOOL r;
+ UINT cf;
+
+ htext = create_text();
+ emf = create_emf();
+
+ r = OpenClipboard(NULL);
+ ok(r, "gle %d\n", GetLastError());
+ r = EmptyClipboard();
+ ok(r, "gle %d\n", GetLastError());
+ h = SetClipboardData(CF_TEXT, htext);
+ ok(h == htext, "got %p\n", h);
+ h = SetClipboardData(CF_ENHMETAFILE, emf);
+ ok(h == emf, "got %p\n", h);
+ r = CloseClipboard();
+ ok(r, "gle %d\n", GetLastError());
+
+ r = OpenClipboard(NULL);
+ ok(r, "gle %d\n", GetLastError());
+ cf = EnumClipboardFormats(0);
+ ok(cf == CF_TEXT, "cf %08x\n", cf);
+
+ cf = EnumClipboardFormats(cf);
+ ok(cf == CF_ENHMETAFILE, "cf %08x\n", cf);
+
+ cf = EnumClipboardFormats(cf);
+ todo_wine ok(cf == CF_LOCALE, "cf %08x\n", cf);
+ if(cf == CF_LOCALE)
+ cf = EnumClipboardFormats(cf);
+ ok(cf == CF_OEMTEXT, "cf %08x\n", cf);
+
+ cf = EnumClipboardFormats(cf);
+ ok(cf == CF_UNICODETEXT ||
+ broken(cf == CF_METAFILEPICT), /* win9x and winME has no CF_UNICODETEXT */
+ "cf %08x\n", cf);
+
+ if(cf == CF_UNICODETEXT)
+ cf = EnumClipboardFormats(cf);
+ ok(cf == CF_METAFILEPICT, "cf %08x\n", cf);
+
+ cf = EnumClipboardFormats(cf);
+ ok(cf == 0, "cf %08x\n", cf);
+
+ r = EmptyClipboard();
+ ok(r, "gle %d\n", GetLastError());
+
+ r = CloseClipboard();
+ ok(r, "gle %d\n", GetLastError());
+}
+
START_TEST(clipboard)
{
SetLastError(0xdeadbeef);
@@ -198,4 +270,5 @@ START_TEST(clipboard)
test_RegisterClipboardFormatA();
test_ClipboardOwner();
+ test_synthesized();
}
diff --git a/rostests/winetests/user32/combo.c b/rostests/winetests/user32/combo.c
index cc5586429d9..f7450ea6f0a 100644
--- a/rostests/winetests/user32/combo.c
+++ b/rostests/winetests/user32/combo.c
@@ -355,6 +355,48 @@ static void test_WM_LBUTTONDOWN(void)
DestroyWindow(hCombo);
}
+static void test_changesize( DWORD style)
+{
+ HWND hCombo = build_combo(style);
+ RECT rc;
+ INT ddheight, clheight, ddwidth, clwidth;
+ /* get initial measurements */
+ GetClientRect( hCombo, &rc);
+ clheight = rc.bottom - rc.top;
+ clwidth = rc.right - rc.left;
+ SendMessageA(hCombo, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)&rc);
+ ddheight = rc.bottom - rc.top;
+ ddwidth = rc.right - rc.left;
+ /* use MoveWindow to move & resize the combo */
+ /* first make it slightly smaller */
+ MoveWindow( hCombo, 10, 10, clwidth - 2, clheight - 2, TRUE);
+ GetClientRect( hCombo, &rc);
+ ok( rc.right - rc.left == clwidth - 2, "clientrect witdh is %d vs %d\n",
+ rc.right - rc.left, clwidth - 2);
+ ok( rc.bottom - rc.top == clheight, "clientrect height is %d vs %d\n",
+ rc.bottom - rc.top, clheight);
+ SendMessageA(hCombo, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)&rc);
+ ok( rc.right - rc.left == clwidth - 2, "drop-down rect witdh is %d vs %d\n",
+ rc.right - rc.left, clwidth - 2);
+ ok( rc.bottom - rc.top == ddheight, "drop-down rect height is %d vs %d\n",
+ rc.bottom - rc.top, ddheight);
+ /* new cx, cy is slightly bigger than the initial values */
+ MoveWindow( hCombo, 10, 10, clwidth + 2, clheight + 2, TRUE);
+ GetClientRect( hCombo, &rc);
+ ok( rc.right - rc.left == clwidth + 2, "clientrect witdh is %d vs %d\n",
+ rc.right - rc.left, clwidth + 2);
+ ok( rc.bottom - rc.top == clheight, "clientrect height is %d vs %d\n",
+ rc.bottom - rc.top, clheight);
+ SendMessageA(hCombo, CB_GETDROPPEDCONTROLRECT, 0, (LPARAM)&rc);
+ ok( rc.right - rc.left == clwidth + 2, "drop-down rect witdh is %d vs %d\n",
+ rc.right - rc.left, clwidth + 2);
+ todo_wine {
+ ok( rc.bottom - rc.top == clheight + 2, "drop-down rect height is %d vs %d\n",
+ rc.bottom - rc.top, clheight + 2);
+ }
+ DestroyWindow(hCombo);
+}
+
START_TEST(combo)
{
hMainWnd = CreateWindow("static", "Test", WS_OVERLAPPEDWINDOW, 10, 10, 300, 300, NULL, NULL, NULL, 0);
@@ -366,6 +408,8 @@ START_TEST(combo)
test_setitemheight(CBS_DROPDOWNLIST);
test_CBN_SELCHANGE();
test_WM_LBUTTONDOWN();
+ test_changesize(CBS_DROPDOWN);
+ test_changesize(CBS_DROPDOWNLIST);
DestroyWindow(hMainWnd);
}
diff --git a/rostests/winetests/user32/dde.c b/rostests/winetests/user32/dde.c
index e7f09f1b20d..840406e0743 100755
--- a/rostests/winetests/user32/dde.c
+++ b/rostests/winetests/user32/dde.c
@@ -585,7 +585,7 @@ static HDDEDATA CALLBACK server_ddeml_callback(UINT uType, UINT uFmt, HCONV hcon
size = DdeQueryStringA(server_pid, hsz2, str, MAX_PATH, CP_WINANSI);
ok(!strncmp(str, "TestDDEServer(", 14), "Expected TestDDEServer(, got %s\n", str);
ok(str[size - 1] == ')', "Expected ')', got %c\n", str[size - 1]);
- ok(size == 25, "Expected 25, got %d\n", size);
+ ok(size == 17 + 2*sizeof(ULONG_PTR), "Got size %d for %s\n", size, str);
return (HDDEDATA)TRUE;
}
@@ -1188,7 +1188,7 @@ static LRESULT WINAPI dde_server_wndprocW(HWND hwnd, UINT msg, WPARAM wparam, LP
ok(!IsWindowUnicode((HWND)wparam), "client should be an ANSI window\n");
old_dde_client_wndproc = (WNDPROC)SetWindowLongPtrA((HWND)wparam, GWLP_WNDPROC, (ULONG_PTR)hook_dde_client_wndproc);
trace("server: sending WM_DDE_ACK to %p\n", (HWND)wparam);
- SendMessageW((HWND)wparam, WM_DDE_ACK, (WPARAM)hwnd, MAKELPARAM(aService, 0));
+ SendMessageW((HWND)wparam, WM_DDE_ACK, (WPARAM)hwnd, PackDDElParam(WM_DDE_ACK, aService, 0));
}
else
GlobalDeleteAtom(aService);
@@ -1802,10 +1802,6 @@ static void test_FreeDDElParam(void)
hglobal = GlobalAlloc(GMEM_DDESHARE, 100);
ret = FreeDDElParam(WM_DDE_ADVISE, (LPARAM)hglobal);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
- val = GlobalFree(hglobal);
- ok(val == hglobal, "Expected hglobal, got %p\n", val);
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
hglobal = GlobalAlloc(GMEM_DDESHARE, 100);
ret = FreeDDElParam(WM_DDE_UNADVISE, (LPARAM)hglobal);
@@ -1816,18 +1812,10 @@ static void test_FreeDDElParam(void)
hglobal = GlobalAlloc(GMEM_DDESHARE, 100);
ret = FreeDDElParam(WM_DDE_ACK, (LPARAM)hglobal);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
- val = GlobalFree(hglobal);
- ok(val == hglobal, "Expected hglobal, got %p\n", val);
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
hglobal = GlobalAlloc(GMEM_DDESHARE, 100);
ret = FreeDDElParam(WM_DDE_DATA, (LPARAM)hglobal);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
- val = GlobalFree(hglobal);
- ok(val == hglobal, "Expected hglobal, got %p\n", val);
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
hglobal = GlobalAlloc(GMEM_DDESHARE, 100);
ret = FreeDDElParam(WM_DDE_REQUEST, (LPARAM)hglobal);
@@ -1838,10 +1826,6 @@ static void test_FreeDDElParam(void)
hglobal = GlobalAlloc(GMEM_DDESHARE, 100);
ret = FreeDDElParam(WM_DDE_POKE, (LPARAM)hglobal);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
- val = GlobalFree(hglobal);
- ok(val == hglobal, "Expected hglobal, got %p\n", val);
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
hglobal = GlobalAlloc(GMEM_DDESHARE, 100);
ret = FreeDDElParam(WM_DDE_EXECUTE, (LPARAM)hglobal);
@@ -1853,17 +1837,12 @@ static void test_FreeDDElParam(void)
static void test_PackDDElParam(void)
{
UINT_PTR lo, hi, *ptr;
- HGLOBAL hglobal;
LPARAM lparam;
BOOL ret;
lparam = PackDDElParam(WM_DDE_INITIATE, 0xcafe, 0xbeef);
/* value gets sign-extended despite being an LPARAM */
ok(lparam == (int)0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", lparam);
- ok(GlobalLock((HGLOBAL)lparam) == NULL,
- "Expected NULL, got %p\n", GlobalLock((HGLOBAL)lparam));
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
lo = hi = 0;
ret = UnpackDDElParam(WM_DDE_INITIATE, lparam, &lo, &hi);
@@ -1876,10 +1855,6 @@ static void test_PackDDElParam(void)
lparam = PackDDElParam(WM_DDE_TERMINATE, 0xcafe, 0xbeef);
ok(lparam == (int)0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", lparam);
- ok(GlobalLock((HGLOBAL)lparam) == NULL,
- "Expected NULL, got %p\n", GlobalLock((HGLOBAL)lparam));
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
lo = hi = 0;
ret = UnpackDDElParam(WM_DDE_TERMINATE, lparam, &lo, &hi);
@@ -1913,17 +1888,8 @@ static void test_PackDDElParam(void)
ret = FreeDDElParam(WM_DDE_ADVISE, lparam);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
- hglobal = GlobalFree((HGLOBAL)lparam);
- ok(hglobal == (HGLOBAL)lparam, "Expected lparam, got %d\n", ret);
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
-
lparam = PackDDElParam(WM_DDE_UNADVISE, 0xcafe, 0xbeef);
ok(lparam == (int)0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", lparam);
- ok(GlobalLock((HGLOBAL)lparam) == NULL,
- "Expected NULL, got %p\n", GlobalLock((HGLOBAL)lparam));
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
lo = hi = 0;
ret = UnpackDDElParam(WM_DDE_UNADVISE, lparam, &lo, &hi);
@@ -1953,11 +1919,6 @@ static void test_PackDDElParam(void)
ret = FreeDDElParam(WM_DDE_ACK, lparam);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
-
- hglobal = GlobalFree((HGLOBAL)lparam);
- ok(hglobal == (HGLOBAL)lparam, "Expected lparam, got %d\n", ret);
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
}
else
win_skip("got lparam 0x%lx for WM_DDE_ACK\n", lparam);
@@ -1985,17 +1946,8 @@ static void test_PackDDElParam(void)
ret = FreeDDElParam(WM_DDE_DATA, lparam);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
- hglobal = GlobalFree((HGLOBAL)lparam);
- ok(hglobal == (HGLOBAL)lparam, "Expected lparam, got %d\n", ret);
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
-
lparam = PackDDElParam(WM_DDE_REQUEST, 0xcafe, 0xbeef);
ok(lparam == (int)0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", lparam);
- ok(GlobalLock((HGLOBAL)lparam) == NULL,
- "Expected NULL, got %p\n", GlobalLock((HGLOBAL)lparam));
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
lo = hi = 0;
ret = UnpackDDElParam(WM_DDE_REQUEST, lparam, &lo, &hi);
@@ -2029,17 +1981,8 @@ static void test_PackDDElParam(void)
ret = FreeDDElParam(WM_DDE_POKE, lparam);
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
- hglobal = GlobalFree((HGLOBAL)lparam);
- ok(hglobal == (HGLOBAL)lparam, "Expected lparam, got %d\n", ret);
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
-
lparam = PackDDElParam(WM_DDE_EXECUTE, 0xcafe, 0xbeef);
ok(lparam == 0xbeef, "Expected 0xbeef, got %08lx\n", lparam);
- ok(GlobalLock((HGLOBAL)lparam) == NULL,
- "Expected NULL, got %p\n", GlobalLock((HGLOBAL)lparam));
- ok(GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
lo = hi = 0;
ret = UnpackDDElParam(WM_DDE_EXECUTE, lparam, &lo, &hi);
@@ -2106,17 +2049,6 @@ static void test_UnpackDDElParam(void)
broken(hi == 0xbeef), /* win2k */
"Expected 0, got %08lx\n", hi);
- lo = 0xdead;
- hi = 0xbeef;
- ret = UnpackDDElParam(WM_DDE_ADVISE, 0xcafebabe, &lo, &hi);
- ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
- ok(lo == 0 ||
- broken(lo == 0xdead), /* win2k */
- "Expected 0, got %08lx\n", lo);
- ok(hi == 0 ||
- broken(hi == 0xbeef), /* win2k */
- "Expected 0, got %08lx\n", hi);
-
hglobal = GlobalAlloc(GMEM_DDESHARE, 2);
ptr = GlobalLock(hglobal);
ptr[0] = 0xcafebabe;
@@ -2137,17 +2069,6 @@ static void test_UnpackDDElParam(void)
ok(lo == 0xbabe, "Expected 0xbabe, got %08lx\n", lo);
ok(hi == 0xcafe, "Expected 0xcafe, got %08lx\n", hi);
- lo = 0xdead;
- hi = 0xbeef;
- ret = UnpackDDElParam(WM_DDE_ACK, 0xcafebabe, &lo, &hi);
- ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
- ok(lo == 0 ||
- broken(lo == 0xdead), /* win2k */
- "Expected 0, got %08lx\n", lo);
- ok(hi == 0 ||
- broken(hi == 0xbeef), /* win2k */
- "Expected 0, got %08lx\n", hi);
-
lo = 0xdead;
hi = 0xbeef;
ret = UnpackDDElParam(WM_DDE_ACK, (LPARAM)hglobal, &lo, &hi);
@@ -2155,17 +2076,6 @@ static void test_UnpackDDElParam(void)
ok(lo == 0xcafebabe, "Expected 0xcafebabe, got %08lx\n", lo);
ok(hi == 0xdeadbeef, "Expected 0xdeadbeef, got %08lx\n", hi);
- lo = 0xdead;
- hi = 0xbeef;
- ret = UnpackDDElParam(WM_DDE_DATA, 0xcafebabe, &lo, &hi);
- ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
- ok(lo == 0 ||
- broken(lo == 0xdead), /* win2k */
- "Expected 0, got %08lx\n", lo);
- ok(hi == 0 ||
- broken(hi == 0xbeef), /* win2k */
- "Expected 0, got %08lx\n", hi);
-
lo = 0xdead;
hi = 0xbeef;
ret = UnpackDDElParam(WM_DDE_DATA, (LPARAM)hglobal, &lo, &hi);
@@ -2180,17 +2090,6 @@ static void test_UnpackDDElParam(void)
ok(lo == 0xbabe, "Expected 0xbabe, got %08lx\n", lo);
ok(hi == 0xcafe, "Expected 0xcafe, got %08lx\n", hi);
- lo = 0xdead;
- hi = 0xbeef;
- ret = UnpackDDElParam(WM_DDE_POKE, 0xcafebabe, &lo, &hi);
- ok(ret == FALSE, "Expected FALSE, got %d\n", ret);
- ok(lo == 0 ||
- broken(lo == 0xdead), /* win2k */
- "Expected 0, got %08lx\n", lo);
- ok(hi == 0 ||
- broken(hi == 0xbeef), /* win2k */
- "Expected 0, got %08lx\n", hi);
-
lo = 0xdead;
hi = 0xbeef;
ret = UnpackDDElParam(WM_DDE_POKE, (LPARAM)hglobal, &lo, &hi);
diff --git a/rostests/winetests/user32/dialog.c b/rostests/winetests/user32/dialog.c
index 84929e35c1c..060625c2162 100755
--- a/rostests/winetests/user32/dialog.c
+++ b/rostests/winetests/user32/dialog.c
@@ -36,6 +36,7 @@
#include "wine/test.h"
#include "windef.h"
#include "winbase.h"
+#include "wingdi.h"
#include "winuser.h"
#define MAXHWNDS 1024
@@ -926,6 +927,99 @@ static void test_DisabledDialogTest(void)
ok(FALSE == g_terminated, "dialog with disabled ok button has been terminated\n");
}
+static INT_PTR CALLBACK messageBoxFontDlgWinProc (HWND hDlg, UINT uiMsg, WPARAM wParam,
+ LPARAM lParam)
+{
+ return (uiMsg == WM_INITDIALOG);
+}
+
+static void test_MessageBoxFontTest(void)
+{
+ /* This dialog template defines a dialog template which got 0x7fff as its
+ * font size and omits the other font members. On WinNT, passing such a
+ * dialog template to CreateDialogIndirectParamW will result in a dialog
+ * being created which uses the message box font. We test that here.
+ */
+
+ static unsigned char dlgTemplate[] =
+ {
+ /* Dialog header */
+ 0x01,0x00, /* Version */
+ 0xff,0xff, /* Extended template marker */
+ 0x00,0x00,0x00,0x00, /* Context Help ID */
+ 0x00,0x00,0x00,0x00, /* Extended style */
+ 0xc0,0x00,0xc8,0x80, /* Style (WS_SYSMENU|WS_CAPTION|WS_POPUP|DS_SETFONT|DS_MODALFRAME) */
+ 0x01,0x00, /* Control count */
+ 0x00,0x00, /* X */
+ 0x00,0x00, /* Y */
+ 0x80,0x00, /* Width */
+ 0x80,0x00, /* Height */
+ 0x00,0x00, /* Menu name */
+ 0x00,0x00, /* Class name */
+ 'T',0x00,'e',0x00, /* Caption (unicode) */
+ 's',0x00,'t',0x00,
+ 0x00,0x00,
+ 0xff,0x7f, /* Font height (0x7fff = message box font) */
+
+ /* Control #1 */
+ 0x00,0x00, /* Align to DWORD (header is 42 bytes) */
+ 0x00,0x00,0x00,0x00, /* Context Help ID */
+ 0x00,0x00,0x00,0x00, /* Extended style */
+ 0x00,0x00,0x00,0x50, /* Style (WS_CHILD|WS_VISIBLE) */
+ 0x00,0x00, /* X */
+ 0x00,0x00, /* Y */
+ 0x80,0x00, /* Width */
+ 0x80,0x00, /* Height */
+ 0x00,0x01,0x00,0x00, /* Control ID (256) */
+ 0xff,0xff,0x82,0x00, /* Class (Static) */
+ 'W',0x00,'I',0x00, /* Caption (unicode) */
+ 'N',0x00,'E',0x00,
+ ' ',0x00,'d',0x00,
+ 'i',0x00,'a',0x00,
+ 'l',0x00,'o',0x00,
+ 'g',0x00,' ',0x00,
+ 't',0x00,'e',0x00,
+ 's',0x00,'t',0x00,
+ '.',0x00,0x00,0x00,
+ 0x00,0x00, /* Size of extended data */
+
+ 0x00,0x00 /* Align to DWORD */
+ };
+
+ HWND hDlg;
+ HFONT hFont;
+ LOGFONTW lfStaticFont;
+ NONCLIENTMETRICSW ncMetrics;
+
+ /* Check if the dialog can be created from the template. On Win9x, this should fail
+ * because we are calling the W function which is not implemented, but that's what
+ * we want, because passing such a template to CreateDialogIndirectParamA would crash
+ * anyway.
+ */
+ hDlg = CreateDialogIndirectParamW(g_hinst, (LPCDLGTEMPLATE)dlgTemplate, NULL, messageBoxFontDlgWinProc, 0);
+ if (!hDlg)
+ {
+ win_skip("dialog wasn't created\n");
+ return;
+ }
+
+ hFont = (HFONT) SendDlgItemMessageW(hDlg, 256, WM_GETFONT, 0, 0);
+ if (!hFont)
+ {
+ skip("dialog uses system font\n");
+ DestroyWindow(hDlg);
+ return;
+ }
+ GetObjectW(hFont, sizeof(LOGFONTW), &lfStaticFont);
+
+ ncMetrics.cbSize = sizeof(NONCLIENTMETRICSW);
+ SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, 0, &ncMetrics, 0);
+ ok( !memcmp(&lfStaticFont, &ncMetrics.lfMessageFont, FIELD_OFFSET(LOGFONTW, lfFaceName)) &&
+ !lstrcmpW(lfStaticFont.lfFaceName, ncMetrics.lfMessageFont.lfFaceName),
+ "dialog doesn't use message box font\n");
+ DestroyWindow(hDlg);
+}
+
START_TEST(dialog)
{
g_hinst = GetModuleHandleA (0);
@@ -939,4 +1033,5 @@ START_TEST(dialog)
test_GetDlgItemText();
test_DialogBoxParamA();
test_DisabledDialogTest();
+ test_MessageBoxFontTest();
}
diff --git a/rostests/winetests/user32/edit.c b/rostests/winetests/user32/edit.c
index b1a982079f2..399ec4c37c6 100755
--- a/rostests/winetests/user32/edit.c
+++ b/rostests/winetests/user32/edit.c
@@ -646,8 +646,8 @@ static void set_client_height(HWND Wnd, unsigned Height)
GetClientRect(Wnd, &ClientRect);
ok(ClientRect.bottom - ClientRect.top == Height,
- "The client height should be %ld, but is %ld\n",
- (long)Height, (long)(ClientRect.bottom - ClientRect.top));
+ "The client height should be %d, but is %d\n",
+ Height, ClientRect.bottom - ClientRect.top);
}
static void test_edit_control_1(void)
@@ -1177,9 +1177,13 @@ static void test_edit_control_4(void)
static void test_edit_control_5(void)
{
static const char *str = "test\r\ntest";
+ HWND parentWnd;
HWND hWnd;
int len;
+ RECT rc1 = { 10, 10, 11, 11};
+ RECT rc;
+ /* first show that a non-child won't do for this test */
hWnd = CreateWindowEx(0,
"EDIT",
str,
@@ -1187,19 +1191,48 @@ static void test_edit_control_5(void)
10, 10, 1, 1,
NULL, NULL, NULL, NULL);
assert(hWnd);
-
+ /* size of non-child edit control is (much) bigger than requested */
+ GetWindowRect( hWnd, &rc);
+ ok( rc.right - rc.left > 20, "size of the window (%d) is smaller than expected\n",
+ rc.right - rc.left);
+ DestroyWindow(hWnd);
+ /* so create a parent, and give it edit controls children to test with */
+ parentWnd = CreateWindowEx(0,
+ szEditTextPositionClass,
+ "Edit Test", WS_VISIBLE |
+ WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT, CW_USEDEFAULT,
+ 250, 250,
+ NULL, NULL, hinst, NULL);
+ assert(parentWnd);
+ ShowWindow( parentWnd, SW_SHOW);
+ /* single line */
+ hWnd = CreateWindowEx(0,
+ "EDIT",
+ str, WS_VISIBLE | WS_BORDER |
+ WS_CHILD,
+ rc1.left, rc1.top, rc1.right - rc1.left, rc1.bottom - rc1.top,
+ parentWnd, NULL, NULL, NULL);
+ assert(hWnd);
+ GetClientRect( hWnd, &rc);
+ ok( rc.right == rc1.right - rc1.left && rc.bottom == rc1.bottom - rc1.top,
+ "Client rectangle not the expected size (%d,%d,%d,%d)\n",
+ rc.left, rc.top, rc.right, rc.bottom);
len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0);
ok(lstrlenA(str) == len, "text shouldn't have been truncated\n");
DestroyWindow(hWnd);
-
+ /* multi line */
hWnd = CreateWindowEx(0,
"EDIT",
str,
- ES_MULTILINE,
- 10, 10, 1, 1,
- NULL, NULL, NULL, NULL);
+ WS_CHILD | ES_MULTILINE,
+ rc1.left, rc1.top, rc1.right - rc1.left, rc1.bottom - rc1.top,
+ parentWnd, NULL, NULL, NULL);
assert(hWnd);
-
+ GetClientRect( hWnd, &rc);
+ ok( rc.right == rc1.right - rc1.left && rc.bottom == rc1.bottom - rc1.top,
+ "Client rectangle not the expected size (%d,%d,%d,%d)\n",
+ rc.left, rc.top, rc.right, rc.bottom);
len = SendMessageA(hWnd, WM_GETTEXTLENGTH, 0, 0);
ok(lstrlenA(str) == len, "text shouldn't have been truncated\n");
DestroyWindow(hWnd);
diff --git a/rostests/winetests/user32/input.c b/rostests/winetests/user32/input.c
index 889244f0e3a..2ad3eae7d10 100755
--- a/rostests/winetests/user32/input.c
+++ b/rostests/winetests/user32/input.c
@@ -58,7 +58,7 @@
/* globals */
static HWND hWndTest;
-static long timetag = 0x10000000;
+static LONG timetag = 0x10000000;
static UINT (WINAPI *pSendInput) (UINT, INPUT*, size_t);
static int (WINAPI *pGetMouseMovePointsEx) (UINT, LPMOUSEMOVEPOINT, LPMOUSEMOVEPOINT, int, DWORD);
@@ -573,6 +573,7 @@ struct sendinput_test_s {
{{VK_MENU, 0x00}, {VK_LMENU, 0x00}, {VK_CONTROL, 0x00, 1}, {VK_LCONTROL, 0x01, 1}, {0}},
{{WM_SYSKEYDOWN, hook|wparam|optional, VK_LCONTROL},
{WM_SYSKEYDOWN, hook|wparam, VK_RMENU},
+ {WM_KEYDOWN, wparam|lparam|optional, VK_CONTROL, 0},
{WM_SYSKEYDOWN, wparam|lparam, VK_MENU, 0}, {0}}},
{VK_RMENU, KEYEVENTF_KEYUP, 1,
{{VK_MENU, 0x80}, {VK_LMENU, 0x80}, {VK_CONTROL, 0x81, 1}, {VK_LCONTROL, 0x80, 1}, {0}},
@@ -580,7 +581,7 @@ struct sendinput_test_s {
{WM_KEYUP, hook|wparam, VK_RMENU},
{WM_SYSKEYUP, wparam|lparam|optional, VK_CONTROL, KF_UP},
{WM_SYSKEYUP, wparam|lparam, VK_MENU, KF_UP},
- {WM_SYSCOMMAND}, {0}}},
+ {WM_SYSCOMMAND, optional}, {0}}},
/* LMENU | KEYEVENTF_EXTENDEDKEY == RMENU */
/* 40 */
{VK_LMENU, KEYEVENTF_EXTENDEDKEY, 0,
@@ -598,6 +599,7 @@ struct sendinput_test_s {
{{VK_MENU, 0x00}, {VK_RMENU, 0x00}, {VK_CONTROL, 0x00, 1}, {VK_LCONTROL, 0x01, 1}, {0}},
{{WM_SYSKEYDOWN, hook|wparam|lparam|optional, VK_LCONTROL, 0},
{WM_SYSKEYDOWN, hook|wparam|lparam, VK_RMENU, LLKHF_EXTENDED},
+ {WM_KEYDOWN, wparam|lparam|optional, VK_CONTROL, 0},
{WM_SYSKEYDOWN, wparam|lparam, VK_MENU, KF_EXTENDED}, {0}}},
{VK_RMENU, KEYEVENTF_KEYUP | KEYEVENTF_EXTENDEDKEY, 1,
{{VK_MENU, 0x80}, {VK_RMENU, 0x80}, {VK_CONTROL, 0x81, 1}, {VK_LCONTROL, 0x80, 1}, {0}},
@@ -605,7 +607,7 @@ struct sendinput_test_s {
{WM_KEYUP, hook|wparam|lparam, VK_RMENU, LLKHF_UP|LLKHF_EXTENDED},
{WM_SYSKEYUP, wparam|lparam|optional, VK_CONTROL, KF_UP},
{WM_SYSKEYUP, wparam|lparam, VK_MENU, KF_UP|KF_EXTENDED},
- {WM_SYSCOMMAND}, {0}}},
+ {WM_SYSCOMMAND, optional}, {0}}},
/* MENU == LMENU */
/* 44 */
{VK_MENU, 0, 0,
@@ -747,6 +749,25 @@ static void compare_and_check(int id, BYTE *ks1, BYTE *ks2, struct sendinput_tes
expected++;
continue;
}
+ /* NT4 doesn't send SYSKEYDOWN/UP to hooks, only KEYDOWN/UP */
+ else if ((expected->flags & hook) &&
+ (expected->message == WM_SYSKEYDOWN || expected->message == WM_SYSKEYUP) &&
+ (actual->message == expected->message - 4))
+ {
+ ok((expected->flags & hook) == (actual->flags & hook),
+ "%2d (%x/%x): the msg 0x%04x should have been sent by a hook\n",
+ id, test->wVk, test->dwFlags, expected->message);
+ }
+ /* For VK_RMENU, at least localized Win2k/XP sends KEYDOWN/UP
+ * instead of SYSKEYDOWN/UP to the WNDPROC */
+ else if (test->wVk == VK_RMENU && !(expected->flags & hook) &&
+ (expected->message == WM_SYSKEYDOWN || expected->message == WM_SYSKEYUP) &&
+ (actual->message == expected->message - 4))
+ {
+ ok(expected->wParam == actual->wParam && expected->lParam == actual->lParam,
+ "%2d (%x/%x): the msg 0x%04x was expected, but got msg 0x%04x instead\n",
+ id, test->wVk, test->dwFlags, expected->message, actual->message);
+ }
else if (test->_todo_wine)
{
failcount++;
@@ -885,9 +906,12 @@ static void test_Input_blackbox(void)
pSendInput(1, (INPUT*)&i, sizeof(TEST_INPUT));
empty_message_queue();
GetKeyboardState(ks2);
- if (!ii && !sent_messages_cnt && !memcmp( ks1, ks2, sizeof(ks1) ))
+ if (!ii && sent_messages_cnt <= 1 && !memcmp( ks1, ks2, sizeof(ks1) ))
{
win_skip( "window doesn't receive the queued input\n" );
+ /* release the key */
+ i.u.ki.dwFlags |= KEYEVENTF_KEYUP;
+ pSendInput(1, (INPUT*)&i, sizeof(TEST_INPUT));
break;
}
compare_and_check(ii, ks1, ks2, &sendinput_test[ii]);
@@ -913,7 +937,7 @@ static void test_keynames(void)
static POINT pt_old, pt_new;
static BOOL clipped;
-#define STEP 20
+#define STEP 3
static LRESULT CALLBACK hook_proc1( int code, WPARAM wparam, LPARAM lparam )
{
@@ -973,7 +997,11 @@ static void test_mouse_ll_hook(void)
10, 10, 200, 200, NULL, NULL, NULL, NULL);
SetCursorPos(100, 100);
- hook2 = SetWindowsHookExA(WH_MOUSE_LL, hook_proc2, GetModuleHandleA(0), 0);
+ if (!(hook2 = SetWindowsHookExA(WH_MOUSE_LL, hook_proc2, GetModuleHandleA(0), 0)))
+ {
+ win_skip( "cannot set MOUSE_LL hook\n" );
+ goto done;
+ }
hook1 = SetWindowsHookExA(WH_MOUSE_LL, hook_proc1, GetModuleHandleA(0), 0);
GetCursorPos(&pt_old);
@@ -1030,6 +1058,7 @@ static void test_mouse_ll_hook(void)
ok(pt.x == pt_new.x && pt.y == pt_new.y, "Position changed: (%d,%d)\n", pt.x, pt.y);
UnhookWindowsHookEx(hook2);
+done:
DestroyWindow(hwnd);
SetCursorPos(pt_org.x, pt_org.y);
}
@@ -1058,6 +1087,11 @@ static void test_GetMouseMovePointsEx(void)
*/
SetLastError(MYERROR);
retval = pGetMouseMovePointsEx(0, &in, out, BUFLIM, GMMP_USE_DISPLAY_POINTS);
+ if (retval == ERROR_INVALID_PARAMETER)
+ {
+ win_skip( "GetMouseMovePointsEx broken on WinME\n" );
+ return;
+ }
ok(retval == -1, "expected GetMouseMovePointsEx to fail, got %d\n", retval);
ok(GetLastError() == ERROR_INVALID_PARAMETER || GetLastError() == MYERROR,
"expected error ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
@@ -1097,11 +1131,10 @@ static void test_GetMouseMovePointsEx(void)
SetLastError(MYERROR);
count = 0;
retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), &in, NULL, count, GMMP_USE_DISPLAY_POINTS);
- todo_wine {
- ok(retval == count, "expected GetMouseMovePointsEx to succeed, got %d\n", retval);
- ok(MYERROR == GetLastError(),
- "expected error %d, got %u\n", MYERROR, GetLastError());
- }
+ if (retval == -1)
+ ok(GetLastError() == ERROR_POINT_NOT_FOUND, "unexpected error %u\n", GetLastError());
+ else
+ ok(retval == count, "expected GetMouseMovePointsEx to succeed, got %d\n", retval);
/* test fourth parameter
* a value higher than 64 is expected to fail with ERROR_INVALID_PARAMETER
@@ -1116,20 +1149,18 @@ static void test_GetMouseMovePointsEx(void)
SetLastError(MYERROR);
count = 0;
retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), &in, out, count, GMMP_USE_DISPLAY_POINTS);
- todo_wine {
- ok(retval == count, "expected GetMouseMovePointsEx to succeed, got %d\n", retval);
- ok(MYERROR == GetLastError(),
- "expected error %d, got %u\n", MYERROR, GetLastError());
- }
+ if (retval == -1)
+ ok(GetLastError() == ERROR_POINT_NOT_FOUND, "unexpected error %u\n", GetLastError());
+ else
+ ok(retval == count, "expected GetMouseMovePointsEx to succeed, got %d\n", retval);
SetLastError(MYERROR);
count = BUFLIM;
retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), &in, out, count, GMMP_USE_DISPLAY_POINTS);
- todo_wine {
- ok((0 <= retval) && (retval <= count), "expected GetMouseMovePointsEx to succeed, got %d\n", retval);
- ok(MYERROR == GetLastError(),
- "expected error %d, got %u\n", MYERROR, GetLastError());
- }
+ if (retval == -1)
+ ok(GetLastError() == ERROR_POINT_NOT_FOUND, "unexpected error %u\n", GetLastError());
+ else
+ ok((0 <= retval) && (retval <= count), "expected GetMouseMovePointsEx to succeed, got %d\n", retval);
SetLastError(MYERROR);
retval = pGetMouseMovePointsEx(sizeof(MOUSEMOVEPOINT), &in, out, BUFLIM+1, GMMP_USE_DISPLAY_POINTS);
@@ -1265,6 +1296,19 @@ static void test_get_async_key_state(void)
ok(0 == GetAsyncKeyState(-1000000), "GetAsyncKeyState did not return 0\n");
}
+static void test_keyboard_layout_name(void)
+{
+ BOOL ret;
+ char klid[KL_NAMELENGTH];
+
+ if (GetKeyboardLayout(0) != (HKL)(ULONG_PTR)0x04090409) return;
+
+ klid[0] = 0;
+ ret = GetKeyboardLayoutNameA(klid);
+ ok(ret, "GetKeyboardLayoutNameA failed %u\n", GetLastError());
+ ok(!strcmp(klid, "00000409"), "expected 00000409, got %s\n", klid);
+}
+
START_TEST(input)
{
init_function_pointers();
@@ -1281,6 +1325,7 @@ START_TEST(input)
test_key_map();
test_ToUnicode();
test_get_async_key_state();
+ test_keyboard_layout_name();
if(pGetMouseMovePointsEx)
test_GetMouseMovePointsEx();
diff --git a/rostests/winetests/user32/menu.c b/rostests/winetests/user32/menu.c
index 4d0e7d4ad3f..75059ea9068 100755
--- a/rostests/winetests/user32/menu.c
+++ b/rostests/winetests/user32/menu.c
@@ -40,6 +40,7 @@ static ATOM atomMenuCheckClass;
static BOOL (WINAPI *pGetMenuInfo)(HMENU,LPCMENUINFO);
static UINT (WINAPI *pSendInput)(UINT, INPUT*, size_t);
static BOOL (WINAPI *pSetMenuInfo)(HMENU,LPCMENUINFO);
+static BOOL (WINAPI *pEndMenu) (void);
static void init_function_pointers(void)
{
@@ -53,6 +54,7 @@ static void init_function_pointers(void)
GET_PROC(GetMenuInfo)
GET_PROC(SendInput)
GET_PROC(SetMenuInfo)
+ GET_PROC(EndMenu)
#undef GET_PROC
}
@@ -114,6 +116,7 @@ typedef struct
/* globals to communicate between test and wndproc */
static BOOL bMenuVisible;
+static BOOL got_input;
static HMENU hMenus[4];
#define MOD_SIZE 10
@@ -139,12 +142,25 @@ static int MOD_odheight;
static SIZE MODsizes[MOD_NRMENUS]= { {MOD_SIZE, MOD_SIZE},{MOD_SIZE, MOD_SIZE},
{MOD_SIZE, MOD_SIZE},{MOD_SIZE, MOD_SIZE}};
static int MOD_GotDrawItemMsg = FALSE;
+static int gflag_initmenupopup,
+ gflag_entermenuloop,
+ gflag_initmenu;
+
/* wndproc used by test_menu_ownerdraw() */
static LRESULT WINAPI menu_ownerdraw_wnd_proc(HWND hwnd, UINT msg,
WPARAM wparam, LPARAM lparam)
{
switch (msg)
{
+ case WM_INITMENUPOPUP:
+ gflag_initmenupopup++;
+ break;
+ case WM_ENTERMENULOOP:
+ gflag_entermenuloop++;
+ break;
+ case WM_INITMENU:
+ gflag_initmenu++;
+ break;
case WM_MEASUREITEM:
{
MEASUREITEMSTRUCT* pmis = (MEASUREITEMSTRUCT*)lparam;
@@ -211,6 +227,8 @@ static LRESULT WINAPI menu_ownerdraw_wnd_proc(HWND hwnd, UINT msg,
}
case WM_ENTERIDLE:
{
+ ok( lparam || broken(!lparam), /* win9x, nt4 */
+ "Menu window handle is NULL!\n");
PostMessage(hwnd, WM_CANCELMODE, 0, 0);
return TRUE;
}
@@ -262,7 +280,7 @@ static void test_menu_locked_by_window(void)
ok(ret, "DrawMenuBar failed with error %d\n", GetLastError());
}
ret = IsMenu(GetMenu(hwnd));
- ok(!ret, "Menu handle should have been destroyed\n");
+ ok(!ret || broken(ret) /* nt4 */, "Menu handle should have been destroyed\n");
SendMessage(hwnd, WM_SYSCOMMAND, SC_KEYMENU, 0);
/* did we process the WM_INITMENU message? */
@@ -274,6 +292,105 @@ static void test_menu_locked_by_window(void)
DestroyWindow(hwnd);
}
+/* demonstrates that subpopup's are locked
+ * even after a client calls DestroyMenu on it */
+static LRESULT WINAPI subpopuplocked_wnd_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+ HWND hwndmenu;
+ switch (msg)
+ {
+ case WM_ENTERIDLE:
+ hwndmenu = GetCapture();
+ if( hwndmenu) {
+ PostMessage( hwndmenu, WM_KEYDOWN, VK_DOWN, 0);
+ PostMessage( hwndmenu, WM_KEYDOWN, VK_RIGHT, 0);
+ PostMessage( hwndmenu, WM_KEYDOWN, VK_RETURN, 0);
+ }
+ }
+ return DefWindowProc(hwnd, msg, wparam, lparam);
+}
+
+static void test_subpopup_locked_by_menu(void)
+{
+ DWORD gle;
+ BOOL ret;
+ HMENU hmenu, hsubmenu;
+ MENUINFO mi = { sizeof( MENUINFO)};
+ MENUITEMINFO mii = { sizeof( MENUITEMINFO)};
+ HWND hwnd;
+ const int itemid = 0x1234567;
+ if( !pGetMenuInfo)
+ {
+ win_skip("GetMenuInfo is not available\n");
+ return;
+ }
+ /* create window, popupmenu with one subpopup */
+ hwnd = CreateWindowEx(0, MAKEINTATOM(atomMenuCheckClass), NULL,
+ WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200,
+ NULL, NULL, NULL, NULL);
+ ok(hwnd != NULL, "CreateWindowEx failed with error %d\n", GetLastError());
+ SetWindowLongPtr( hwnd, GWLP_WNDPROC, (LONG_PTR) subpopuplocked_wnd_proc);
+ hmenu = CreatePopupMenu();
+ ok(hmenu != NULL, "CreateMenu failed with error %d\n", GetLastError());
+ hsubmenu = CreatePopupMenu();
+ ok(hsubmenu != NULL, "CreateMenu failed with error %d\n", GetLastError());
+ ret = InsertMenu(hmenu, 0, MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT_PTR)hsubmenu,
+ TEXT("PopUpLockTest"));
+ ok(ret, "InsertMenu failed with error %d\n", GetLastError());
+ ret = InsertMenu(hsubmenu, 0, MF_BYPOSITION | MF_STRING, itemid, TEXT("PopUpMenu"));
+ ok(ret, "InsertMenu failed with error %d\n", GetLastError());
+ /* first some tests that all this functions properly */
+ mii.fMask = MIIM_SUBMENU;
+ ret = GetMenuItemInfo( hmenu, 0, TRUE, &mii);
+ ok( ret, "GetMenuItemInfo failed error %d\n", GetLastError());
+ ok( mii.hSubMenu == hsubmenu, "submenu is %p\n", mii.hSubMenu);
+ mi.fMask |= MIM_STYLE;
+ ret = pGetMenuInfo( hsubmenu, &mi);
+ ok( ret , "GetMenuInfo returned 0 with error %d\n", GetLastError());
+ ret = IsMenu( hsubmenu);
+ ok( ret , "Menu handle is not valid\n");
+ SetLastError( 0xdeadbeef);
+ ret = TrackPopupMenu( hmenu, 0x100, 100,100, 0, hwnd, NULL);
+ if( ret == (itemid & 0xffff)) {
+ win_skip("not on 16 bit menu subsystem\n");
+ DestroyMenu( hsubmenu);
+ } else {
+ gle = GetLastError();
+ ok( ret == itemid , "TrackPopupMenu returned %d error is %d\n", ret, gle);
+ ok( gle == 0 ||
+ broken( gle == 0xdeadbeef), /* win2k0 */
+ "Last error is %d\n", gle);
+ /* then destroy the sub-popup */
+ ret = DestroyMenu( hsubmenu);
+ ok(ret, "DestroyMenu failed with error %d\n", GetLastError());
+ /* and repeat the tests */
+ mii.fMask = MIIM_SUBMENU;
+ ret = GetMenuItemInfo( hmenu, 0, TRUE, &mii);
+ ok( ret, "GetMenuItemInfo failed error %d\n", GetLastError());
+ /* GetMenuInfo fails now */
+ ok( mii.hSubMenu == hsubmenu, "submenu is %p\n", mii.hSubMenu);
+ mi.fMask |= MIM_STYLE;
+ ret = pGetMenuInfo( hsubmenu, &mi);
+ ok( !ret , "GetMenuInfo should have failed\n");
+ /* IsMenu says it is not */
+ ret = IsMenu( hsubmenu);
+ ok( !ret , "Menu handle should be invalid\n");
+ /* but TrackPopupMenu still works! */
+ SetLastError( 0xdeadbeef);
+ ret = TrackPopupMenu( hmenu, 0x100, 100,100, 0, hwnd, NULL);
+ gle = GetLastError();
+ todo_wine {
+ ok( ret == itemid , "TrackPopupMenu returned %d error is %d\n", ret, gle);
+ }
+ ok( gle == 0 ||
+ broken( gle == ERROR_INVALID_PARAMETER), /* win2k0 */
+ "Last error is %d\n", gle);
+ }
+ /* clean up */
+ DestroyMenu( hmenu);
+ DestroyWindow(hwnd);
+}
+
static void test_menu_ownerdraw(void)
{
int i,j,k;
@@ -433,7 +550,7 @@ static void test_mbs_help( int ispop, int hassub, int mnuopt,
sprintf( buf,"%d text \"%s\" mnuopt %d", count, text ? text: "(nil)", mnuopt);
FillRect( hdc, &rc, (HBRUSH) COLOR_WINDOW);
- TextOut( hdc, 100, 50, buf, strlen( buf));
+ TextOut( hdc, 10, 50, buf, strlen( buf));
ReleaseDC( hwnd, hdc);
}
if(ispop)
@@ -445,13 +562,17 @@ static void test_mbs_help( int ispop, int hassub, int mnuopt,
}
ret = GetMenuItemRect( hwnd, hmenu, 0, &rc);
if (0) /* comment out menu size checks, behavior is different in almost every Windows version */
+ /* the tests should however succeed on win2000, XP and Wine (at least up to 1.1.15) */
+ /* with a variety of dpis and desktop font sizes */
{
/* check menu width */
if( ispop)
expect = ( text || hbmp ?
4 + (mnuopt != 1 ? GetSystemMetrics(SM_CXMENUCHECK) : 0)
: 0) +
- arrowwidth + MOD_avec + (hbmp ? bmpsize.cx + 2 : 0) +
+ arrowwidth + MOD_avec + (hbmp ?
+ ((int)hbmp<0||(int)hbmp>12 ? bmpsize.cx + 2 : GetSystemMetrics( SM_CXMENUSIZE) + 2)
+ : 0) +
(text && hastab ? /* TAB space */
MOD_avec + ( hastab==2 ? sc_size.cx : 0) : 0) +
(text ? 2 + (text[0] ? size.cx :0): 0) ;
@@ -466,7 +587,11 @@ static void test_mbs_help( int ispop, int hassub, int mnuopt,
if( ispop)
expect = max( ( !(text || hbmp) ? GetSystemMetrics( SM_CYMENUSIZE)/2 : 0),
max( (text ? max( 2 + size.cy, MOD_hic + 4) : 0),
- (hbmp ? bmpsize.cy + 2 : 0)));
+ (hbmp ?
+ ((int)hbmp<0||(int)hbmp>12 ?
+ bmpsize.cy + 2
+ : GetSystemMetrics( SM_CYMENUSIZE) + 2)
+ : 0)));
else
expect = ( !(text || hbmp) ? GetSystemMetrics( SM_CYMENUSIZE)/2 :
max( GetSystemMetrics( SM_CYMENU) - 1, (hbmp ? bmpsize.cy : 0)));
@@ -497,8 +622,8 @@ static void test_mbs_help( int ispop, int hassub, int mnuopt,
}
/* if there was a failure, report details */
if( failed) {
- trace("*** count %d text \"%s\" bitmap %p bmsize %d,%d textsize %d+%d,%d mnuopt %d hastab %d\n",
- count, text ? text: "(nil)", hbmp, bmpsize.cx, bmpsize.cy,
+ trace("*** count %d %s text \"%s\" bitmap %p bmsize %d,%d textsize %d+%d,%d mnuopt %d hastab %d\n",
+ count, (ispop? "POPUP": "MENUBAR"),text ? text: "(nil)", hbmp, bmpsize.cx, bmpsize.cy,
size.cx, size.cy, sc_size.cx, mnuopt, hastab);
trace(" check %d,%d arrow %d avechar %d\n",
GetSystemMetrics(SM_CXMENUCHECK ),
@@ -523,6 +648,9 @@ static void test_menu_bmp_and_string(void)
BITMAP bm;
INT arrowwidth;
HWND hwnd;
+ HMENU hsysmenu;
+ MENUINFO mi= {sizeof(MENUINFO)};
+ MENUITEMINFOA mii= {sizeof(MENUITEMINFOA)};
int count, szidx, txtidx, bmpidx, hassub, mnuopt, ispop;
if( !pGetMenuInfo)
@@ -532,15 +660,28 @@ static void test_menu_bmp_and_string(void)
}
memset( bmfill, 0xcc, sizeof( bmfill));
- hwnd = CreateWindowEx(0, MAKEINTATOM(atomMenuCheckClass), NULL,
+ hwnd = CreateWindowEx(0, MAKEINTATOM(atomMenuCheckClass), NULL, WS_SYSMENU |
WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200,
NULL, NULL, NULL, NULL);
hbm_arrow=LoadBitmap( 0, (CHAR*)OBM_MNARROW);
GetObject( hbm_arrow, sizeof(bm), &bm);
arrowwidth = bm.bmWidth;
-
ok(hwnd != NULL, "CreateWindowEx failed with error %d\n", GetLastError());
if( !hwnd) return;
+ /* test system menu */
+ hsysmenu = GetSystemMenu( hwnd, FALSE);
+ ok( hsysmenu != NULL, "GetSystemMenu failed with error %d\n", GetLastError());
+ mi.fMask = MIM_STYLE;
+ mi.dwStyle = 0;
+ ok( pGetMenuInfo( hsysmenu, &mi), "GetMenuInfo failed gle=%d\n", GetLastError());
+ ok( MNS_CHECKORBMP == mi.dwStyle, "System Menu Style is %08x, without the bit %08x\n",
+ mi.dwStyle, MNS_CHECKORBMP);
+ mii.fMask = MIIM_BITMAP;
+ mii.hbmpItem = NULL;
+ ok( GetMenuItemInfoA( hsysmenu, SC_CLOSE, FALSE, &mii), "GetMenuItemInfoA failed gle=%d\n", GetLastError());
+ ok( HBMMENU_POPUP_CLOSE == mii.hbmpItem, "Item info did not get the right hbitmap: got %p expected %p\n",
+ mii.hbmpItem, HBMMENU_POPUP_CLOSE);
+
SetWindowLongPtr( hwnd, GWLP_WNDPROC, (LONG_PTR)menu_ownerdraw_wnd_proc);
if( winetest_debug)
@@ -554,7 +695,7 @@ static void test_menu_bmp_and_string(void)
{10,10},{38,38},{1,30},{55,5}};
for( szidx=0; szidx < sizeof( bmsizes) / sizeof( SIZE); szidx++) {
HBITMAP hbm = CreateBitmap( bmsizes[szidx].cx, bmsizes[szidx].cy,1,1,bmfill);
- HBITMAP bitmaps[] = { HBMMENU_CALLBACK, hbm, NULL };
+ HBITMAP bitmaps[] = { HBMMENU_CALLBACK, hbm, HBMMENU_POPUP_CLOSE, NULL };
ok( hbm != 0, "CreateBitmap failed err %d\n", GetLastError());
for( txtidx = 0; txtidx < sizeof(MOD_txtsizes)/sizeof(MOD_txtsizes[0]); txtidx++) {
for( hassub = 0; hassub < 2 ; hassub++) { /* add submenu item */
@@ -562,6 +703,10 @@ static void test_menu_bmp_and_string(void)
for( bmpidx = 0; bmpidx 0) continue;
+ /* the HBMMENU_POPUP not to test for menu bars */
+ if( !ispop &&
+ bitmaps[bmpidx] >= HBMMENU_POPUP_CLOSE &&
+ bitmaps[bmpidx] <= HBMMENU_POPUP_MINIMIZE) continue;
if( !ispop && hassub) continue;
test_mbs_help( ispop, hassub, mnuopt,
hwnd, arrowwidth, ++count,
@@ -1719,23 +1864,23 @@ static struct menu_mouse_tests_s {
BOOL _todo_wine;
} menu_tests[] = {
/* for each test, send keys or clicks and check for menu visibility */
- { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE }, /* test 0 */
+ { INPUT_KEYBOARD, {{0}}, {VK_MENU, 0}, TRUE, FALSE }, /* test 0 */
{ INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE },
- { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE },
+ { INPUT_KEYBOARD, {{0}}, {VK_MENU, 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE },
- { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 0}, TRUE, FALSE },
+ { INPUT_KEYBOARD, {{0}}, {VK_MENU, 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE },
- { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE },
+ { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, VK_ESCAPE, 0}, FALSE, FALSE },
- { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', VK_ESCAPE, 0}, TRUE, FALSE },
+ { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', VK_ESCAPE, 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {VK_ESCAPE, 0}, FALSE, FALSE },
- { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE },
+ { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE },
- { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 0}, TRUE, FALSE },
+ { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE },
- { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE },
+ { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', 'P', 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'D', 0}, FALSE, FALSE },
- { INPUT_KEYBOARD, {{0}}, {VK_LMENU, 'M', 'P', 0}, TRUE, FALSE },
+ { INPUT_KEYBOARD, {{0}}, {VK_MENU, 'M', 'P', 0}, TRUE, FALSE },
{ INPUT_KEYBOARD, {{0}}, {'E', 0}, FALSE, FALSE },
{ INPUT_MOUSE, {{1, 2}, {0}}, {0}, TRUE, TRUE }, /* test 18 */
@@ -1762,7 +1907,7 @@ static void send_key(WORD wVk)
pSendInput(2, (INPUT *) i, sizeof(INPUT));
}
-static void click_menu(HANDLE hWnd, struct menu_item_pair_s *mi)
+static BOOL click_menu(HANDLE hWnd, struct menu_item_pair_s *mi)
{
HMENU hMenu = hMenus[mi->uMenu];
TEST_INPUT i[3];
@@ -1771,7 +1916,7 @@ static void click_menu(HANDLE hWnd, struct menu_item_pair_s *mi)
int screen_w = GetSystemMetrics(SM_CXSCREEN);
int screen_h = GetSystemMetrics(SM_CYSCREEN);
BOOL ret = GetMenuItemRect(mi->uMenu > 2 ? NULL : hWnd, hMenu, mi->uItem, &r);
- if(!ret) return;
+ if(!ret) return FALSE;
memset(i, 0, sizeof(i));
i[0].type = i[1].type = i[2].type = INPUT_MOUSE;
@@ -1784,10 +1929,11 @@ static void click_menu(HANDLE hWnd, struct menu_item_pair_s *mi)
i[0].u.mi.dwFlags |= MOUSEEVENTF_MOVE;
i[1].u.mi.dwFlags |= MOUSEEVENTF_LEFTDOWN;
i[2].u.mi.dwFlags |= MOUSEEVENTF_LEFTUP;
- pSendInput(3, (INPUT *) i, sizeof(INPUT));
+ ret = pSendInput(3, (INPUT *) i, sizeof(INPUT));
/* hack to prevent mouse message buildup in Wine */
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
+ return ret;
}
static DWORD WINAPI test_menu_input_thread(LPVOID lpParameter)
@@ -1799,15 +1945,23 @@ static DWORD WINAPI test_menu_input_thread(LPVOID lpParameter)
/* mixed keyboard/mouse test */
for (i = 0; menu_tests[i].type != -1; i++)
{
- int elapsed = 0;
+ int ret = TRUE, elapsed = 0;
+
+ got_input = i && menu_tests[i-1].bMenuVisible;
if (menu_tests[i].type == INPUT_KEYBOARD)
for (j = 0; menu_tests[i].wVk[j] != 0; j++)
send_key(menu_tests[i].wVk[j]);
else
for (j = 0; menu_tests[i].menu_item_pairs[j].uMenu != 0; j++)
- click_menu(hWnd, &menu_tests[i].menu_item_pairs[j]);
+ if (!(ret = click_menu(hWnd, &menu_tests[i].menu_item_pairs[j]))) break;
+ if (!ret)
+ {
+ skip( "test %u: failed to send input\n", i );
+ PostMessage( hWnd, WM_CANCELMODE, 0, 0 );
+ return 0;
+ }
while (menu_tests[i].bMenuVisible != bMenuVisible)
{
if (elapsed > 200)
@@ -1816,6 +1970,13 @@ static DWORD WINAPI test_menu_input_thread(LPVOID lpParameter)
Sleep(20);
}
+ if (!got_input)
+ {
+ skip( "test %u: didn't receive input\n", i );
+ PostMessage( hWnd, WM_CANCELMODE, 0, 0 );
+ return 0;
+ }
+
if (menu_tests[i]._todo_wine)
{
todo_wine {
@@ -1838,6 +1999,16 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam,
case WM_EXITMENULOOP:
bMenuVisible = FALSE;
break;
+ case WM_KEYDOWN:
+ case WM_SYSKEYDOWN:
+ case WM_MOUSEMOVE:
+ case WM_LBUTTONDOWN:
+ case WM_LBUTTONUP:
+ case WM_NCMOUSEMOVE:
+ case WM_NCLBUTTONDOWN:
+ case WM_NCLBUTTONUP:
+ got_input = TRUE;
+ /* fall through */
default:
return( DefWindowProcA( hWnd, msg, wParam, lParam ) );
}
@@ -2404,6 +2575,363 @@ static void test_InsertMenu(void)
#undef compare_menu
}
+static void test_menu_getmenuinfo(void)
+{
+ HMENU hmenu;
+ MENUINFO mi = {0};
+ BOOL ret;
+ DWORD gle;
+
+ /* create a menu */
+ hmenu = CreateMenu();
+ assert( hmenu);
+ /* test some parameter errors */
+ SetLastError(0xdeadbeef);
+ ret = pGetMenuInfo( hmenu, NULL);
+ gle= GetLastError();
+ ok( !ret, "GetMenuInfo() should have failed\n");
+ ok( gle == ERROR_INVALID_PARAMETER ||
+ broken(gle == 0xdeadbeef), /* Win98, WinME */
+ "GetMenuInfo() error got %u expected %u\n", gle, ERROR_INVALID_PARAMETER);
+ SetLastError(0xdeadbeef);
+ mi.cbSize = 0;
+ ret = pGetMenuInfo( hmenu, &mi);
+ gle= GetLastError();
+ ok( !ret, "GetMenuInfo() should have failed\n");
+ ok( gle == ERROR_INVALID_PARAMETER ||
+ broken(gle == 0xdeadbeef), /* Win98, WinME */
+ "GetMenuInfo() error got %u expected %u\n", gle, ERROR_INVALID_PARAMETER);
+ SetLastError(0xdeadbeef);
+ mi.cbSize = sizeof( MENUINFO);
+ ret = pGetMenuInfo( hmenu, &mi);
+ gle= GetLastError();
+ ok( ret, "GetMenuInfo() should have succeeded\n");
+ ok( gle == 0xdeadbeef, "GetMenuInfo() error got %u\n", gle);
+ SetLastError(0xdeadbeef);
+ mi.cbSize = 0;
+ ret = pGetMenuInfo( NULL, &mi);
+ gle= GetLastError();
+ ok( !ret, "GetMenuInfo() should have failed\n");
+ ok( gle == ERROR_INVALID_PARAMETER ||
+ broken(gle == 0xdeadbeef), /* Win98, WinME */
+ "GetMenuInfo() error got %u expected %u\n", gle, ERROR_INVALID_PARAMETER);
+ /* clean up */
+ DestroyMenu( hmenu);
+ return;
+}
+
+static void test_menu_setmenuinfo(void)
+{
+ HMENU hmenu, hsubmenu;
+ MENUINFO mi = {0};
+ MENUITEMINFOA mii = {sizeof( MENUITEMINFOA)};
+ BOOL ret;
+ DWORD gle;
+
+ /* create a menu with a submenu */
+ hmenu = CreateMenu();
+ hsubmenu = CreateMenu();
+ assert( hmenu && hsubmenu);
+ mii.fMask = MIIM_SUBMENU;
+ mii.hSubMenu = hsubmenu;
+ ret = InsertMenuItem( hmenu, 0, FALSE, &mii);
+ ok( ret, "InsertMenuItem failed with error %d\n", GetLastError());
+ /* test some parameter errors */
+ SetLastError(0xdeadbeef);
+ ret = pSetMenuInfo( hmenu, NULL);
+ gle= GetLastError();
+ ok( !ret, "SetMenuInfo() should have failed\n");
+ ok( gle == ERROR_INVALID_PARAMETER ||
+ broken(gle == 0xdeadbeef), /* Win98, WinME */
+ "SetMenuInfo() error got %u expected %u\n", gle, ERROR_INVALID_PARAMETER);
+ SetLastError(0xdeadbeef);
+ mi.cbSize = 0;
+ ret = pSetMenuInfo( hmenu, &mi);
+ gle= GetLastError();
+ ok( !ret, "SetMenuInfo() should have failed\n");
+ ok( gle == ERROR_INVALID_PARAMETER ||
+ broken(gle == 0xdeadbeef), /* Win98, WinME */
+ "SetMenuInfo() error got %u expected %u\n", gle, ERROR_INVALID_PARAMETER);
+ SetLastError(0xdeadbeef);
+ mi.cbSize = sizeof( MENUINFO);
+ ret = pSetMenuInfo( hmenu, &mi);
+ gle= GetLastError();
+ ok( ret, "SetMenuInfo() should have succeeded\n");
+ ok( gle == 0xdeadbeef, "SetMenuInfo() error got %u\n", gle);
+ SetLastError(0xdeadbeef);
+ mi.cbSize = 0;
+ ret = pSetMenuInfo( NULL, &mi);
+ gle= GetLastError();
+ ok( !ret, "SetMenuInfo() should have failed\n");
+ ok( gle == ERROR_INVALID_PARAMETER ||
+ broken(gle == 0xdeadbeef), /* Win98, WinME */
+ "SetMenuInfo() error got %u expected %u\n", gle, ERROR_INVALID_PARAMETER);
+ /* functional tests */
+ /* menu and submenu should have the CHECKORBMP style bit cleared */
+ SetLastError(0xdeadbeef);
+ mi.cbSize = sizeof( MENUINFO);
+ mi.fMask = MIM_STYLE;
+ ret = pGetMenuInfo( hmenu, &mi);
+ gle= GetLastError();
+ ok( ret, "GetMenuInfo() should have succeeded\n");
+ ok( gle == 0xdeadbeef, "GetMenuInfo() error got %u\n", gle);
+ ok( !(mi.dwStyle & MNS_CHECKORBMP), "menustyle was not expected to have the MNS_CHECKORBMP flag\n");
+ SetLastError(0xdeadbeef);
+ mi.cbSize = sizeof( MENUINFO);
+ mi.fMask = MIM_STYLE;
+ ret = pGetMenuInfo( hsubmenu, &mi);
+ gle= GetLastError();
+ ok( ret, "GetMenuInfo() should have succeeded\n");
+ ok( gle == 0xdeadbeef, "GetMenuInfo() error got %u\n", gle);
+ ok( !(mi.dwStyle & MNS_CHECKORBMP), "menustyle was not expected to have the MNS_CHECKORBMP flag\n");
+ /* SetMenuInfo() */
+ SetLastError(0xdeadbeef);
+ mi.cbSize = sizeof( MENUINFO);
+ mi.fMask = MIM_STYLE | MIM_APPLYTOSUBMENUS;
+ mi.dwStyle = MNS_CHECKORBMP;
+ ret = pSetMenuInfo( hmenu, &mi);
+ gle= GetLastError();
+ ok( ret, "SetMenuInfo() should have succeeded\n");
+ ok( gle == 0xdeadbeef, "SetMenuInfo() error got %u\n", gle);
+ /* Now both menus should have the MNS_CHECKORBMP style bit set */
+ SetLastError(0xdeadbeef);
+ mi.cbSize = sizeof( MENUINFO);
+ mi.fMask = MIM_STYLE;
+ ret = pGetMenuInfo( hmenu, &mi);
+ gle= GetLastError();
+ ok( ret, "GetMenuInfo() should have succeeded\n");
+ ok( gle == 0xdeadbeef, "GetMenuInfo() error got %u\n", gle);
+ ok( mi.dwStyle & MNS_CHECKORBMP, "menustyle was expected to have the MNS_CHECKORBMP flag\n");
+ SetLastError(0xdeadbeef);
+ mi.cbSize = sizeof( MENUINFO);
+ mi.fMask = MIM_STYLE;
+ ret = pGetMenuInfo( hsubmenu, &mi);
+ gle= GetLastError();
+ ok( ret, "GetMenuInfo() should have succeeded\n");
+ ok( gle == 0xdeadbeef, "GetMenuInfo() error got %u\n", gle);
+ ok( mi.dwStyle & MNS_CHECKORBMP, "menustyle was expected to have the MNS_CHECKORBMP flag\n");
+ /* now repeat that without the APPLYTOSUBMENUS flag and another style bit */
+ SetLastError(0xdeadbeef);
+ mi.cbSize = sizeof( MENUINFO);
+ mi.fMask = MIM_STYLE ;
+ mi.dwStyle = MNS_NOCHECK;
+ ret = pSetMenuInfo( hmenu, &mi);
+ gle= GetLastError();
+ ok( ret, "SetMenuInfo() should have succeeded\n");
+ ok( gle == 0xdeadbeef, "SetMenuInfo() error got %u\n", gle);
+ /* Now only the top menu should have the MNS_NOCHECK style bit set */
+ SetLastError(0xdeadbeef);
+ mi.cbSize = sizeof( MENUINFO);
+ mi.fMask = MIM_STYLE;
+ ret = pGetMenuInfo( hmenu, &mi);
+ gle= GetLastError();
+ ok( ret, "GetMenuInfo() should have succeeded\n");
+ ok( gle == 0xdeadbeef, "GetMenuInfo() error got %u\n", gle);
+ ok( mi.dwStyle & MNS_NOCHECK, "menustyle was expected to have the MNS_NOCHECK flag\n");
+ SetLastError(0xdeadbeef);
+ mi.cbSize = sizeof( MENUINFO);
+ mi.fMask = MIM_STYLE;
+ ret = pGetMenuInfo( hsubmenu, &mi);
+ gle= GetLastError();
+ ok( ret, "GetMenuInfo() should have succeeded\n");
+ ok( gle == 0xdeadbeef, "GetMenuInfo() error got %u\n", gle);
+ ok( !(mi.dwStyle & MNS_NOCHECK), "menustyle was not expected to have the MNS_NOCHECK flag\n");
+ /* clean up */
+ DestroyMenu( hsubmenu);
+ DestroyMenu( hmenu);
+ return;
+}
+
+/* little func to easy switch either TrackPopupMenu() or TrackPopupMenuEx() */
+static DWORD MyTrackPopupMenu( int ex, HMENU hmenu, UINT flags, INT x, INT y, HWND hwnd, LPTPMPARAMS ptpm)
+{
+ return ex
+ ? TrackPopupMenuEx( hmenu, flags, x, y, hwnd, ptpm)
+ : TrackPopupMenu( hmenu, flags, x, y, 0, hwnd, NULL);
+}
+
+/* some TrackPopupMenu and TrackPopupMenuEx tests */
+/* the LastError values differ between NO_ERROR and invalid handle */
+/* between all windows versions tested. The first value is that valid on XP */
+/* Vista was the only that made returned different error values */
+/* between the TrackPopupMenu and TrackPopupMenuEx functions */
+static void test_menu_trackpopupmenu(void)
+{
+ BOOL ret;
+ HMENU hmenu;
+ DWORD gle;
+ int Ex;
+ HWND hwnd = CreateWindowEx(0, MAKEINTATOM(atomMenuCheckClass), NULL,
+ WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200,
+ NULL, NULL, NULL, NULL);
+ ok(hwnd != NULL, "CreateWindowEx failed with error %d\n", GetLastError());
+ if (!hwnd) return;
+ SetWindowLongPtr( hwnd, GWLP_WNDPROC, (LONG_PTR)menu_ownerdraw_wnd_proc);
+ for( Ex = 0; Ex < 2; Ex++)
+ {
+ hmenu = CreatePopupMenu();
+ ok(hmenu != NULL, "CreateMenu failed with error %d\n", GetLastError());
+ if (!hmenu)
+ {
+ DestroyWindow(hwnd);
+ return;
+ }
+ /* display the menu */
+ /* start with an invalid menu handle */
+ gle = 0xdeadbeef;
+ gflag_initmenupopup = gflag_entermenuloop = gflag_initmenu = 0;
+ ret = MyTrackPopupMenu( Ex, NULL, 0x100, 100,100, hwnd, NULL);
+ gle = GetLastError();
+ ok( !ret, "TrackPopupMenu%s should have failed\n", Ex ? "Ex" : "");
+ ok( gle == ERROR_INVALID_MENU_HANDLE
+ || broken (gle == 0xdeadbeef) /* win95 */
+ || broken (gle == NO_ERROR) /* win98/ME */
+ ,"TrackPopupMenu%s error got %u expected %u\n",
+ Ex ? "Ex" : "", gle, ERROR_INVALID_MENU_HANDLE);
+ ok( !(gflag_initmenupopup || gflag_entermenuloop || gflag_initmenu),
+ "got unexpected message(s)%s%s%s\n",
+ gflag_initmenupopup ? " WM_INITMENUPOPUP ": " ",
+ gflag_entermenuloop ? "WM_INITMENULOOP ": "",
+ gflag_initmenu ? "WM_INITMENU": "");
+ /* another one but not NULL */
+ gle = 0xdeadbeef;
+ gflag_initmenupopup = gflag_entermenuloop = gflag_initmenu = 0;
+ ret = MyTrackPopupMenu( Ex, (HMENU)hwnd, 0x100, 100,100, hwnd, NULL);
+ gle = GetLastError();
+ ok( !ret, "TrackPopupMenu%s should have failed\n", Ex ? "Ex" : "");
+ ok( gle == ERROR_INVALID_MENU_HANDLE
+ || broken (gle == 0xdeadbeef) /* win95 */
+ || broken (gle == NO_ERROR) /* win98/ME */
+ ,"TrackPopupMenu%s error got %u expected %u\n",
+ Ex ? "Ex" : "", gle, ERROR_INVALID_MENU_HANDLE);
+ ok( !(gflag_initmenupopup || gflag_entermenuloop || gflag_initmenu),
+ "got unexpected message(s)%s%s%s\n",
+ gflag_initmenupopup ? " WM_INITMENUPOPUP ": " ",
+ gflag_entermenuloop ? "WM_INITMENULOOP ": "",
+ gflag_initmenu ? "WM_INITMENU": "");
+ /* now a somewhat successful call */
+ gle = 0xdeadbeef;
+ gflag_initmenupopup = gflag_entermenuloop = gflag_initmenu = 0;
+ ret = MyTrackPopupMenu( Ex, hmenu, 0x100, 100,100, hwnd, NULL);
+ gle = GetLastError();
+ ok( ret == 0, "TrackPopupMenu%s returned %d expected zero\n", Ex ? "Ex" : "", ret);
+ ok( gle == NO_ERROR
+ || gle == ERROR_INVALID_MENU_HANDLE /* NT4, win2k */
+ || broken (gle == 0xdeadbeef) /* win95 */
+ ,"TrackPopupMenu%s error got %u expected %u or %u\n",
+ Ex ? "Ex" : "", gle, NO_ERROR, ERROR_INVALID_MENU_HANDLE);
+ ok( gflag_initmenupopup && gflag_entermenuloop && gflag_initmenu,
+ "missed expected message(s)%s%s%s\n",
+ !gflag_initmenupopup ? " WM_INITMENUPOPUP ": " ",
+ !gflag_entermenuloop ? "WM_INITMENULOOP ": "",
+ !gflag_initmenu ? "WM_INITMENU": "");
+ /* and another */
+ ret = AppendMenuA( hmenu, MF_STRING, 1, "winetest");
+ ok( ret, "AppendMenA has failed!\n");
+ gle = 0xdeadbeef;
+ gflag_initmenupopup = gflag_entermenuloop = gflag_initmenu = 0;
+ ret = MyTrackPopupMenu( Ex, hmenu, 0x100, 100,100, hwnd, NULL);
+ gle = GetLastError();
+ ok( ret == 0, "TrackPopupMenu%s returned %d expected zero\n", Ex ? "Ex" : "", ret);
+ ok( gle == NO_ERROR
+ || gle == ERROR_INVALID_MENU_HANDLE /* NT4, win2k and Vista in the TrackPopupMenuEx case */
+ || broken (gle == 0xdeadbeef) /* win95 */
+ ,"TrackPopupMenu%s error got %u expected %u or %u\n",
+ Ex ? "Ex" : "", gle, NO_ERROR, ERROR_INVALID_MENU_HANDLE);
+ ok( gflag_initmenupopup && gflag_entermenuloop && gflag_initmenu,
+ "missed expected message(s)%s%s%s\n",
+ !gflag_initmenupopup ? " WM_INITMENUPOPUP ": " ",
+ !gflag_entermenuloop ? "WM_INITMENULOOP ": "",
+ !gflag_initmenu ? "WM_INITMENU": "");
+ DestroyMenu(hmenu);
+ }
+ /* clean up */
+ DestroyWindow(hwnd);
+}
+
+/* test handling of WM_CANCELMODE messages */
+static int g_got_enteridle;
+static HWND g_hwndtosend;
+static LRESULT WINAPI menu_cancelmode_wnd_proc(HWND hwnd, UINT msg,
+ WPARAM wparam, LPARAM lparam)
+{
+ switch (msg)
+ {
+ case WM_ENTERMENULOOP:
+ g_got_enteridle = 0;
+ return SendMessage( g_hwndtosend, WM_CANCELMODE, 0, 0);
+ case WM_ENTERIDLE:
+ {
+ if( g_got_enteridle++ == 0) {
+ /* little hack to get another WM_ENTERIDLE message */
+ PostMessage( hwnd, WM_MOUSEMOVE, 0, 0);
+ return SendMessage( g_hwndtosend, WM_CANCELMODE, 0, 0);
+ }
+ pEndMenu();
+ return TRUE;
+ }
+ }
+ return DefWindowProc( hwnd, msg, wparam, lparam);
+}
+
+static void test_menu_cancelmode(void)
+{
+ DWORD ret;
+ HWND hwnd, hwndchild;
+ HMENU menu;
+ if( !pEndMenu) { /* win95 */
+ win_skip( "EndMenu is not available\n");
+ return;
+ }
+ hwnd = CreateWindowEx( 0, MAKEINTATOM(atomMenuCheckClass), NULL,
+ WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200,
+ NULL, NULL, NULL, NULL);
+ hwndchild = CreateWindowEx( 0, MAKEINTATOM(atomMenuCheckClass), NULL,
+ WS_VISIBLE | WS_CHILD, 10, 10, 20, 20,
+ hwnd, NULL, NULL, NULL);
+ ok( hwnd != NULL && hwndchild != NULL,
+ "CreateWindowEx failed with error %d\n", GetLastError());
+ g_hwndtosend = hwnd;
+ SetWindowLongPtr( hwnd, GWLP_WNDPROC, (LONG_PTR)menu_cancelmode_wnd_proc);
+ SetWindowLongPtr( hwndchild, GWLP_WNDPROC, (LONG_PTR)menu_cancelmode_wnd_proc);
+ menu = CreatePopupMenu();
+ ok( menu != NULL, "CreatePopupMenu failed with error %d\n", GetLastError());
+ ret = AppendMenuA( menu, MF_STRING, 1, "winetest");
+ ok( ret, "Functie failed lasterror is %u\n", GetLastError());
+ /* seems to be needed only on wine :( */
+ {MSG msg; while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) DispatchMessage(&msg);}
+ /* test the effect of sending a WM_CANCELMODE message in the WM_INITMENULOOP
+ * handler of the menu owner */
+ /* test results is exctracted from variable g_got_enteridle. Possible values:
+ * 0 : complete conformance. Sending WM_CANCELMODE cancels a menu initializing tracking
+ * 1 : Sending WM_CANCELMODE cancels a menu that is in tracking state
+ * 2 : Sending WM_CANCELMODE does not work
+ */
+ /* menu owner is top level window */
+ g_hwndtosend = hwnd;
+ ret = TrackPopupMenu( menu, 0x100, 100,100, 0, hwnd, NULL);
+ todo_wine {
+ ok( g_got_enteridle == 0, "received %d WM_ENTERIDLE messages, none expected\n", g_got_enteridle);
+ }
+ ok( g_got_enteridle < 2, "received %d WM_ENTERIDLE messages, should be less than 2\n", g_got_enteridle);
+ /* menu owner is child window */
+ g_hwndtosend = hwndchild;
+ ret = TrackPopupMenu( menu, 0x100, 100,100, 0, hwndchild, NULL);
+ todo_wine {
+ ok(g_got_enteridle == 0, "received %d WM_ENTERIDLE messages, none expected\n", g_got_enteridle);
+ }
+ ok(g_got_enteridle < 2, "received %d WM_ENTERIDLE messages, should be less than 2\n", g_got_enteridle);
+ /* now send the WM_CANCELMODE messages to the WRONG window */
+ /* those should fail ( to have any effect) */
+ g_hwndtosend = hwnd;
+ ret = TrackPopupMenu( menu, 0x100, 100,100, 0, hwndchild, NULL);
+ ok( g_got_enteridle == 2, "received %d WM_ENTERIDLE messages, should be 2\n", g_got_enteridle);
+ /* cleanup */
+ DestroyMenu( menu);
+ DestroyWindow( hwndchild);
+ DestroyWindow( hwnd);
+}
+
START_TEST(menu)
{
init_function_pointers();
@@ -2424,9 +2952,15 @@ START_TEST(menu)
register_menu_check_class();
test_menu_locked_by_window();
+ test_subpopup_locked_by_menu();
test_menu_ownerdraw();
test_menu_bmp_and_string();
-
+ /* test Get/SetMenuInfo if available */
+ if( pGetMenuInfo && pSetMenuInfo) {
+ test_menu_getmenuinfo();
+ test_menu_setmenuinfo();
+ } else
+ win_skip("Get/SetMenuInfo are not available\n");
if( !pSendInput)
win_skip("SendInput is not available\n");
else
@@ -2434,4 +2968,6 @@ START_TEST(menu)
test_menu_flags();
test_menu_hilitemenuitem();
+ test_menu_trackpopupmenu();
+ test_menu_cancelmode();
}
diff --git a/rostests/winetests/user32/msg.c b/rostests/winetests/user32/msg.c
index 4a6778f900f..2445f82b5c7 100755
--- a/rostests/winetests/user32/msg.c
+++ b/rostests/winetests/user32/msg.c
@@ -180,6 +180,8 @@ static const struct message WmSWP_ShowOverlappedSeq[] = {
{ WM_NCPAINT, sent|wparam|optional, 1 },
{ WM_ERASEBKGND, sent|optional },
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
+ { WM_SYNCPAINT, sent|optional },
+ { WM_GETTITLEBARINFOEX, sent|optional },
{ WM_PAINT, sent|optional },
{ WM_NCPAINT, sent|beginpaint|optional },
{ WM_GETTEXT, sent|defwinproc|optional },
@@ -192,6 +194,11 @@ static const struct message WmSWP_ShowOverlappedSeq[] = {
static const struct message WmSWP_HideOverlappedSeq[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE },
{ EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 },
+ { HCBT_ACTIVATE, hook|optional },
+ { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
+ { WM_ACTIVATEAPP, sent|wparam|optional, 1 },
+ { WM_NCACTIVATE, sent|optional },
+ { WM_ACTIVATE, sent|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ 0 }
};
@@ -202,12 +209,12 @@ static const struct message WmSWP_HideOverlappedSeq[] = {
static const struct message WmSWP_ResizeSeq[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE },
{ WM_GETMINMAXINFO, sent|defwinproc },
- { WM_NCCALCSIZE, sent|wparam, TRUE },
+ { WM_NCCALCSIZE, sent|wparam|optional, TRUE },
{ WM_NCPAINT, sent|optional },
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ERASEBKGND, sent|optional },
- { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOCLIENTMOVE },
- { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED },
+ { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOCLIENTMOVE },
+ { WM_SIZE, sent|defwinproc|optional },
{ WM_NCCALCSIZE, sent|wparam|optional, TRUE },
{ WM_NCPAINT, sent|optional },
{ WM_GETTEXT, sent|defwinproc|optional },
@@ -223,12 +230,12 @@ static const struct message WmSWP_ResizeSeq[] = {
static const struct message WmSWP_ResizePopupSeq[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE },
{ WM_GETMINMAXINFO, sent|defwinproc|optional }, /* Win9x */
- { WM_NCCALCSIZE, sent|wparam, TRUE },
+ { WM_NCCALCSIZE, sent|wparam|optional, TRUE },
{ WM_NCPAINT, sent|optional },
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ERASEBKGND, sent|optional },
- { WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOCLIENTMOVE },
- { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED },
+ { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOCLIENTMOVE },
+ { WM_SIZE, sent|defwinproc|wparam|optional, SIZE_RESTORED },
{ WM_NCCALCSIZE, sent|wparam|optional, TRUE },
{ WM_NCPAINT, sent|optional },
{ WM_GETTEXT, sent|defwinproc|optional },
@@ -257,12 +264,14 @@ static const struct message WmSWP_MoveSeq[] = {
static const struct message WmSWP_ResizeNoZOrder[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam, /*SWP_NOZORDER|*/SWP_NOACTIVATE },
{ WM_GETMINMAXINFO, sent|defwinproc },
- { WM_NCCALCSIZE, sent|wparam, 1 },
- { WM_NCPAINT, sent },
+ { WM_NCCALCSIZE, sent|wparam|optional, 1 },
+ { WM_NCPAINT, sent|optional },
{ WM_GETTEXT, sent|defwinproc|optional },
- { WM_ERASEBKGND, sent|optional }, /* FIXME: remove optional once Wine is fixed */
- { WM_WINDOWPOSCHANGED, sent|wparam, /*SWP_NOZORDER|*/SWP_NOMOVE|SWP_NOCLIENTMOVE|SWP_NOACTIVATE },
- { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED },
+ { WM_ERASEBKGND, sent|optional },
+ { WM_WINDOWPOSCHANGED, sent|wparam, /*SWP_NOZORDER|*/SWP_NOACTIVATE, 0,
+ SWP_NOMOVE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOCLIENTSIZE },
+ { WM_MOVE, sent|defwinproc|optional },
+ { WM_SIZE, sent|defwinproc|optional },
{ WM_NCCALCSIZE, sent|wparam|optional, 1 }, /* Win9x doesn't send it */
{ WM_NCPAINT, sent|optional }, /* Win9x doesn't send it */
{ WM_GETTEXT, sent|defwinproc|optional }, /* Win9x doesn't send it */
@@ -363,7 +372,7 @@ static const struct message WmSwitchNotMaximizedChild[] = {
static const struct message WmSWP_FrameChanged_clip[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam|parent, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED },
{ WM_NCCALCSIZE, sent|wparam|parent, 1 },
- { WM_NCPAINT, sent|parent }, /* wparam != 1 */
+ { WM_NCPAINT, sent|parent|optional }, /* wparam != 1 */
{ WM_GETTEXT, sent|parent|defwinproc|optional },
{ WM_ERASEBKGND, sent|parent|optional }, /* FIXME: remove optional once Wine is fixed */
{ WM_NCPAINT, sent }, /* wparam != 1 */
@@ -382,12 +391,12 @@ static const struct message WmSWP_FrameChangedDeferErase[] = {
{ WM_NCCALCSIZE, sent|wparam|parent, 1 },
{ WM_WINDOWPOSCHANGED, sent|wparam|parent, SWP_NOSIZE|SWP_NOMOVE|SWP_DEFERERASE|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
- { WM_PAINT, sent|parent },
- { WM_NCPAINT, sent|beginpaint|parent }, /* wparam != 1 */
+ { WM_PAINT, sent|parent|optional },
+ { WM_NCPAINT, sent|beginpaint|parent|optional }, /* wparam != 1 */
{ WM_GETTEXT, sent|beginpaint|parent|defwinproc|optional },
{ WM_PAINT, sent },
{ WM_NCPAINT, sent|beginpaint }, /* wparam != 1 */
- { WM_ERASEBKGND, sent|beginpaint },
+ { WM_ERASEBKGND, sent|beginpaint|optional },
{ 0 }
};
@@ -398,14 +407,14 @@ static const struct message WmSWP_FrameChangedDeferErase[] = {
static const struct message WmSWP_FrameChanged_noclip[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam|parent, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED },
{ WM_NCCALCSIZE, sent|wparam|parent, 1 },
- { WM_NCPAINT, sent|parent }, /* wparam != 1 */
+ { WM_NCPAINT, sent|parent|optional }, /* wparam != 1 */
{ WM_GETTEXT, sent|parent|defwinproc|optional },
- { WM_ERASEBKGND, sent|parent|optional }, /* FIXME: remove optional once Wine is fixed */
+ { WM_ERASEBKGND, sent|parent|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam|parent, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
{ WM_PAINT, sent },
{ WM_NCPAINT, sent|beginpaint }, /* wparam != 1 */
- { WM_ERASEBKGND, sent|beginpaint },
+ { WM_ERASEBKGND, sent|beginpaint|optional },
{ 0 }
};
@@ -442,6 +451,7 @@ static const struct message WmShowOverlappedSeq[] = {
{ WM_GETTEXT, sent|optional },
{ WM_NCPAINT, sent|optional },
{ WM_ERASEBKGND, sent|optional },
+ { WM_SYNCPAINT, sent|optional },
#if 0 /* CreateWindow/ShowWindow(SW_SHOW) also generates WM_SIZE/WM_MOVE
* messages. Does that mean that CreateWindow doesn't set initial
* window dimensions for overlapped windows?
@@ -488,6 +498,8 @@ static const struct message WmShowMaxOverlappedSeq[] = {
{ WM_ERASEBKGND, sent|optional },
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
+ { WM_SYNCPAINT, sent|optional },
+ { WM_GETTITLEBARINFOEX, sent|optional },
{ WM_PAINT, sent|optional },
{ WM_NCPAINT, sent|beginpaint|optional },
{ WM_ERASEBKGND, sent|beginpaint|optional },
@@ -510,6 +522,7 @@ static const struct message WmShowRestoreMaxOverlappedSeq[] = {
{ WM_NCPAINT, sent|optional },
{ WM_ERASEBKGND, sent|optional },
{ WM_PAINT, sent|optional },
+ { WM_GETTITLEBARINFOEX, sent|optional },
{ WM_NCPAINT, sent|beginpaint|optional },
{ WM_ERASEBKGND, sent|beginpaint|optional },
{ 0 }
@@ -546,6 +559,7 @@ static const struct message WmShowRestoreMinOverlappedSeq[] = {
{ WM_ACTIVATE, sent|wparam, 1 },
{ WM_GETTEXT, sent|optional },
{ WM_PAINT, sent|optional },
+ { WM_GETTITLEBARINFOEX, sent|optional },
{ WM_NCPAINT, sent|beginpaint|optional },
{ WM_ERASEBKGND, sent|beginpaint|optional },
{ 0 }
@@ -576,10 +590,34 @@ static const struct message WmShowMinOverlappedSeq[] = {
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ACTIVATE, sent },
{ WM_ACTIVATEAPP, sent|wparam, 0 },
+
/* Vista sometimes restores the window right away... */
{ WM_SYSCOMMAND, sent|optional|wparam, SC_RESTORE },
{ HCBT_SYSCOMMAND, hook|optional|wparam, SC_RESTORE },
{ HCBT_MINMAX, hook|optional|lparam, 0, SW_RESTORE },
+ { WM_QUERYOPEN, sent|optional },
+ { WM_WINDOWPOSCHANGING, sent|optional|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED },
+ { WM_GETMINMAXINFO, sent|optional|defwinproc },
+ { WM_NCCALCSIZE, sent|optional|wparam, TRUE },
+ { HCBT_ACTIVATE, hook|optional },
+ { WM_ACTIVATEAPP, sent|optional|wparam, 1 },
+ { WM_NCACTIVATE, sent|optional },
+ { WM_GETTEXT, sent|optional },
+ { WM_ACTIVATE, sent|optional|wparam, 1 },
+ { HCBT_SETFOCUS, hook|optional },
+ { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
+ { WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 },
+ { WM_SETFOCUS, sent|optional },
+ { WM_NCPAINT, sent|optional },
+ { WM_GETTEXT, sent|defwinproc|optional },
+ { WM_ERASEBKGND, sent|optional },
+ { WM_WINDOWPOSCHANGED, sent|optional|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED },
+ { WM_MOVE, sent|defwinproc|optional },
+ { WM_SIZE, sent|defwinproc|optional|wparam, SIZE_RESTORED },
+ { WM_ACTIVATE, sent|optional|wparam, 1 },
+ { WM_SYSCOMMAND, sent|optional|wparam, SC_RESTORE },
+ { HCBT_SYSCOMMAND, hook|optional|wparam, SC_RESTORE },
+
{ WM_PAINT, sent|optional },
{ WM_NCPAINT, sent|beginpaint|optional },
{ WM_ERASEBKGND, sent|beginpaint|optional },
@@ -610,7 +648,7 @@ static const struct message WmDestroyOverlappedSeq[] = {
{ 0x0090, sent|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ WM_NCACTIVATE, sent|optional|wparam, 0 },
- { WM_ACTIVATE, sent|optional|wparam, 0 },
+ { WM_ACTIVATE, sent|optional },
{ WM_ACTIVATEAPP, sent|optional|wparam, 0 },
{ WM_KILLFOCUS, sent|optional|wparam, 0 },
{ WM_IME_SETCONTEXT, sent|wparam|optional, 0 },
@@ -648,7 +686,7 @@ static const struct message WmCreateMaxPopupSeq[] = {
{ WM_ERASEBKGND, sent|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOCLIENTMOVE|SWP_NOCLIENTSIZE|SWP_NOMOVE|SWP_NOSIZE },
{ WM_ACTIVATEAPP, sent|wparam, 1 },
- { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent },
{ WM_ACTIVATE, sent|wparam, 1 },
{ HCBT_SETFOCUS, hook },
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
@@ -698,7 +736,7 @@ static const struct message WmShowMaxPopupResizedSeq[] = {
{ WM_ERASEBKGND, sent|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ WM_ACTIVATEAPP, sent|wparam, 1 },
- { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent },
{ WM_ACTIVATE, sent|wparam, 1 },
{ HCBT_SETFOCUS, hook },
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
@@ -727,7 +765,7 @@ static const struct message WmShowMaxPopupSeq[] = {
{ WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 },
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
{ WM_ACTIVATEAPP, sent|wparam, 1 },
- { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent },
{ WM_ACTIVATE, sent|wparam, 1 },
{ HCBT_SETFOCUS, hook },
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
@@ -764,7 +802,7 @@ static const struct message WmCreatePopupSeq[] = {
{ WM_ERASEBKGND, sent|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ WM_ACTIVATEAPP, sent|wparam, 1 },
- { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent },
{ WM_ACTIVATE, sent|wparam, 1 },
{ HCBT_SETFOCUS, hook },
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
@@ -837,7 +875,7 @@ static const struct message WmShowVisiblePopupSeq_3[] = {
{ EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 },
{ WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 },
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
- { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent },
{ WM_ACTIVATE, sent|wparam, 1 },
{ HCBT_SETFOCUS, hook },
{ WM_KILLFOCUS, sent|parent },
@@ -1216,7 +1254,7 @@ static const struct message WmCreateCustomDialogSeq[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
- { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent },
{ WM_GETTEXT, sent|optional|defwinproc },
{ WM_GETTEXT, sent|optional|defwinproc },
{ WM_GETTEXT, sent|optional|defwinproc },
@@ -1234,7 +1272,7 @@ static const struct message WmCreateCustomDialogSeq[] = {
{ WM_GETTEXT, sent|optional|defwinproc },
{ WM_GETTEXT, sent|optional|defwinproc },
{ WM_ERASEBKGND, sent },
- { WM_CTLCOLORDLG, sent|defwinproc },
+ { WM_CTLCOLORDLG, sent|optional|defwinproc },
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ WM_GETTEXT, sent|optional },
{ WM_GETTEXT, sent|optional },
@@ -1262,6 +1300,9 @@ static const struct message WmEndCustomDialogSeq[] = {
{ WM_ACTIVATE, sent|wparam, 0 },
{ EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 },
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
+ { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOACTIVATE|SWP_NOREDRAW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
+ { WM_GETTEXT, sent|optional|defwinproc },
+ { WM_GETTEXT, sent|optional|defwinproc },
{ HCBT_SETFOCUS, hook },
{ WM_KILLFOCUS, sent },
{ WM_IME_SETCONTEXT, sent|wparam|optional, 0 },
@@ -1283,7 +1324,7 @@ static const struct message WmShowCustomDialogSeq[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
{ WM_ACTIVATEAPP, sent|wparam|optional, 1 },
- { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent },
{ WM_ACTIVATE, sent|wparam, 1 },
{ WM_GETTEXT, sent|optional },
@@ -1321,15 +1362,15 @@ static const struct message WmModalDialogSeq[] = {
{ EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 },
{ WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 },
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE },
- { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent },
{ WM_GETTEXT, sent|optional },
{ WM_ACTIVATE, sent|wparam, 1 },
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE },
{ EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 },
- { WM_NCPAINT, sent },
+ { WM_NCPAINT, sent|optional },
{ WM_GETTEXT, sent|optional },
- { WM_ERASEBKGND, sent },
- { WM_CTLCOLORDLG, sent },
+ { WM_ERASEBKGND, sent|optional },
+ { WM_CTLCOLORDLG, sent|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ WM_GETTEXT, sent|optional },
{ WM_NCCALCSIZE, sent|optional },
@@ -1339,7 +1380,8 @@ static const struct message WmModalDialogSeq[] = {
{ WM_CTLCOLORDLG, sent|optional },
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
{ WM_PAINT, sent|optional },
- { WM_CTLCOLORBTN, sent },
+ { WM_CTLCOLORBTN, sent|optional },
+ { WM_GETTITLEBARINFOEX, sent|optional },
{ WM_ENTERIDLE, sent|parent|optional },
{ WM_ENTERIDLE, sent|parent|optional },
{ WM_ENTERIDLE, sent|parent|optional },
@@ -1586,7 +1628,7 @@ static const struct message WmSetScrollRangeHV_NC_Seq[] =
{ WM_ERASEBKGND, sent|optional },
{ WM_CTLCOLORDLG, sent|defwinproc|optional }, /* sent to a parent of the dialog */
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE|SWP_NOCLIENTMOVE, 0, SWP_NOCLIENTSIZE },
- { WM_SIZE, sent|defwinproc|wparam|optional, SIZE_RESTORED },
+ { WM_SIZE, sent|defwinproc|optional },
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
{ EVENT_OBJECT_VALUECHANGE, winevent_hook|lparam|optional, 0/*OBJID_HSCROLL or OBJID_VSCROLL*/, 0 },
{ WM_GETTEXT, sent|optional },
@@ -1637,7 +1679,7 @@ static const struct message WmSHOWNATopInvisible[] = {
{ WM_SHOWWINDOW, sent|wparam, 1 },
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
{ EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 },
- { WM_NCPAINT, sent|wparam, 1 },
+ { WM_NCPAINT, sent|wparam|optional, 1 },
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ERASEBKGND, sent|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
@@ -1764,13 +1806,13 @@ static void add_message_(int line, const struct recvd_message *msg)
};
const char *code_name = (msg->message <= HCBT_SETFOCUS) ? CBT_code_name[msg->message] : "Unknown";
- snprintf( seq->output, sizeof(seq->output), "%s: hook %d (%s) wp %08lx lp %08lx",
- msg->descr, msg->message, code_name, msg->wParam, msg->lParam );
+ sprintf( seq->output, "%s: hook %d (%s) wp %08lx lp %08lx",
+ msg->descr, msg->message, code_name, msg->wParam, msg->lParam );
}
else if (msg->flags & winevent_hook)
{
- snprintf( seq->output, sizeof(seq->output), "%s: winevent %p %08x %08lx %08lx",
- msg->descr, msg->hwnd, msg->message, msg->wParam, msg->lParam );
+ sprintf( seq->output, "%s: winevent %p %08x %08lx %08lx",
+ msg->descr, msg->hwnd, msg->message, msg->wParam, msg->lParam );
}
else
{
@@ -1781,8 +1823,7 @@ static void add_message_(int line, const struct recvd_message *msg)
{
WINDOWPOS *winpos = (WINDOWPOS *)msg->lParam;
- snprintf( seq->output, sizeof(seq->output),
- "%s: %p WM_WINDOWPOS%s wp %08lx lp %08lx after %p x %d y %d cx %d cy %d flags %s",
+ sprintf( seq->output, "%s: %p WM_WINDOWPOS%s wp %08lx lp %08lx after %p x %d y %d cx %d cy %d flags %s",
msg->descr, msg->hwnd,
(msg->message == WM_WINDOWPOSCHANGING) ? "CHANGING" : "CHANGED",
msg->wParam, msg->lParam, winpos->hwndInsertAfter,
@@ -1803,11 +1844,11 @@ static void add_message_(int line, const struct recvd_message *msg)
DRAW_ITEM_STRUCT di;
DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)msg->lParam;
- snprintf( seq->output, sizeof(seq->output),
- "%s: %p WM_DRAWITEM: type %x, ctl_id %x, item_id %x, action %x, state %x",
- msg->descr, msg->hwnd, dis->CtlType, dis->CtlID,
- dis->itemID, dis->itemAction, dis->itemState);
+ sprintf( seq->output, "%s: %p WM_DRAWITEM: type %x, ctl_id %x, item_id %x, action %x, state %x",
+ msg->descr, msg->hwnd, dis->CtlType, dis->CtlID,
+ dis->itemID, dis->itemAction, dis->itemState);
+ di.u.lp = 0;
di.u.item.type = dis->CtlType;
di.u.item.ctl_id = dis->CtlID;
di.u.item.item_id = dis->itemID;
@@ -1819,8 +1860,8 @@ static void add_message_(int line, const struct recvd_message *msg)
}
default:
if (msg->message >= 0xc000) return; /* ignore registered messages */
- snprintf( seq->output, sizeof(seq->output), "%s: %p %04x wp %08lx lp %08lx",
- msg->descr, msg->hwnd, msg->message, msg->wParam, msg->lParam );
+ sprintf( seq->output, "%s: %p %04x wp %08lx lp %08lx",
+ msg->descr, msg->hwnd, msg->message, msg->wParam, msg->lParam );
}
}
}
@@ -1988,10 +2029,10 @@ static void ok_sequence_(const struct message *expected_list, const char *contex
if ((expected->lParam ^ actual->lParam) & ~expected->lp_mask) dump++;
}
}
- if ((expected->flags & defwinproc) != (actual->flags & defwinproc) &&
- (expected->flags & optional))
+ if ((expected->flags & optional) &&
+ ((expected->flags ^ actual->flags) & (defwinproc|parent)))
{
- /* don't match messages if their defwinproc status differs */
+ /* don't match optional messages if their defwinproc or parent status differs */
expected++;
count++;
continue;
@@ -2428,7 +2469,7 @@ static const struct message WmCreateMDIchildVisibleMaxSeq1[] = {
{ WM_MDIREFRESHMENU, sent/*|wparam|lparam, 0, 0*/ },
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE },
{ WM_CHILDACTIVATE, sent|wparam|lparam, 0, 0 },
- { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc|optional, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
+ { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc|optional, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE, 0, SWP_FRAMECHANGED },
/* Win9x: message sequence terminates here. */
@@ -3179,7 +3220,7 @@ static LRESULT WINAPI mdi_client_hook_proc(HWND hwnd, UINT message, WPARAM wPara
static LRESULT WINAPI mdi_child_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct recvd_message msg;
@@ -3229,7 +3270,7 @@ static LRESULT WINAPI mdi_child_wnd_proc(HWND hwnd, UINT message, WPARAM wParam,
static LRESULT WINAPI mdi_frame_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct recvd_message msg;
@@ -3658,7 +3699,7 @@ static void test_mdi_messages(void)
*/
active_child = (HWND)SendMessageA(mdi_client, WM_MDIGETACTIVE, 0, (LPARAM)&zoomed);
ok(active_child == mdi_child || /* win2k */
- !active_child, /* win9x */
+ !active_child || active_child == mdi_child2, /* win9x */
"wrong active MDI child %p\n", active_child);
flush_sequence();
@@ -4086,7 +4127,7 @@ static void test_showwindow(void)
/* ShowWindow( SW_SHOWNA) for invisible top level window */
trace("calling ShowWindow( SW_SHOWNA) for invisible top level window\n");
ok( ShowWindow(hwnd, SW_SHOWNA) == FALSE, "ShowWindow: window was visible\n" );
- ok_sequence(WmSHOWNATopInvisible, "ShowWindow(SW_SHOWNA) on invisible top level window", TRUE);
+ ok_sequence(WmSHOWNATopInvisible, "ShowWindow(SW_SHOWNA) on invisible top level window", FALSE);
/* ShowWindow( SW_SHOWNA) for now visible top level window */
trace("calling ShowWindow( SW_SHOWNA) for now visible top level window\n");
@@ -4348,7 +4389,7 @@ static const struct message WmZOrder[] = {
{ WM_GETTEXT, sent|optional },
{ WM_NCCALCSIZE, sent|wparam|optional, 1 },
{ WM_ACTIVATEAPP, sent|wparam, 1, 0 },
- { WM_NCACTIVATE, sent|wparam|lparam, 1, 0 },
+ { WM_NCACTIVATE, sent|lparam, 1, 0 },
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ACTIVATE, sent|wparam|lparam, 1, 0 },
@@ -4477,8 +4518,6 @@ static void test_messages(void)
flush_events();
ok_sequence(WmOptionalPaint, "ShowWindow(SW_SHOW):overlapped already visible", FALSE);
- ok(GetActiveWindow() == hwnd, "window should be active\n");
- ok(GetFocus() == hwnd, "window should have input focus\n");
SetWindowPos(hwnd, 0,0,0,0,0, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE);
ok_sequence(WmSWP_HideOverlappedSeq, "SetWindowPos:SWP_HIDEWINDOW:overlapped", FALSE);
ok(!IsWindowVisible(hwnd), "window should not be visible at this point\n");
@@ -5198,6 +5237,17 @@ static void test_button_messages(void)
DWORD dlg_code;
HFONT zfont;
+ /* selection with VK_SPACE should capture button window */
+ hwnd = CreateWindowExA(0, "button", "test", BS_CHECKBOX | WS_VISIBLE | WS_POPUP,
+ 0, 0, 50, 14, 0, 0, 0, NULL);
+ ok(hwnd != 0, "Failed to create button window\n");
+ ReleaseCapture();
+ SetFocus(hwnd);
+ SendMessageA(hwnd, WM_KEYDOWN, VK_SPACE, 0);
+ ok(GetCapture() == hwnd, "Should be captured on VK_SPACE WM_KEYDOWN\n");
+ SendMessageA(hwnd, WM_KEYUP, VK_SPACE, 0);
+ DestroyWindow(hwnd);
+
subclass_button();
for (i = 0; i < sizeof(button)/sizeof(button[0]); i++)
@@ -5615,7 +5665,7 @@ static const struct message WmInvalidateErasePaint[] = {
{ WM_PAINT, sent },
{ WM_NCPAINT, sent|wparam|beginpaint, 1 },
{ WM_GETTEXT, sent|beginpaint|defwinproc|optional },
- { WM_ERASEBKGND, sent|beginpaint },
+ { WM_ERASEBKGND, sent|beginpaint|optional },
{ 0 }
};
@@ -5686,7 +5736,7 @@ static const struct message WmChildPaintNc[] = {
{ WM_PAINT, sent },
{ WM_NCPAINT, sent|beginpaint },
{ WM_GETTEXT, sent|beginpaint|defwinproc|optional },
- { WM_ERASEBKGND, sent|beginpaint },
+ { WM_ERASEBKGND, sent|beginpaint|optional },
{ 0 }
};
@@ -6824,12 +6874,17 @@ static void test_accelerators(void)
GetCursorPos(&pt);
if (pt.x == rc.left && pt.y == rc.top)
{
+ int i;
keybd_event(VK_SHIFT, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
pump_msg_loop(hwnd, 0);
- ok_sequence(WmShiftMouseButton, "Shift+MouseButton press/release", FALSE);
+ for (i = 0; i < sequence_cnt; i++) if (sequence[i].message == WM_LBUTTONDOWN) break;
+ if (i < sequence_cnt)
+ ok_sequence(WmShiftMouseButton, "Shift+MouseButton press/release", FALSE);
+ else
+ skip( "Shift+MouseButton event didn't get to the window\n" );
}
done:
@@ -6842,8 +6897,8 @@ done:
static LRESULT MsgCheckProc (BOOL unicode, HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
- static long beginpaint_counter = 0;
+ static LONG defwndproc_counter = 0;
+ static LONG beginpaint_counter = 0;
LRESULT ret;
struct recvd_message msg;
@@ -6979,7 +7034,7 @@ static LRESULT WINAPI MsgCheckProcW(HWND hwnd, UINT message, WPARAM wParam, LPAR
static LRESULT WINAPI PopupMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct recvd_message msg;
@@ -7018,8 +7073,8 @@ static LRESULT WINAPI PopupMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam,
static LRESULT WINAPI ParentMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
- static long beginpaint_counter = 0;
+ static LONG defwndproc_counter = 0;
+ static LONG beginpaint_counter = 0;
LRESULT ret;
struct recvd_message msg;
@@ -7086,7 +7141,7 @@ static LRESULT WINAPI ParentMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam
static LRESULT WINAPI TestDlgProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct recvd_message msg;
@@ -7120,7 +7175,7 @@ static LRESULT WINAPI TestDlgProcA(HWND hwnd, UINT message, WPARAM wParam, LPARA
static LRESULT WINAPI ShowWindowProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct recvd_message msg;
@@ -8194,6 +8249,12 @@ static const struct message ScrollWindowPaint1[] = {
{ WM_PAINT, sent },
{ WM_ERASEBKGND, sent|beginpaint },
{ WM_GETTEXTLENGTH, sent|optional },
+ { WM_PAINT, sent|optional },
+ { WM_NCPAINT, sent|beginpaint|optional },
+ { WM_GETTEXT, sent|beginpaint|optional },
+ { WM_GETTEXT, sent|beginpaint|optional },
+ { WM_GETTEXT, sent|beginpaint|optional },
+ { WM_ERASEBKGND, sent|beginpaint|optional },
{ 0 }
};
@@ -8961,6 +9022,7 @@ static void test_PeekMessage(void)
ok(GetLastError() == ERROR_INVALID_FLAGS, "wrong error %d\n", GetLastError());
qstatus = GetQueueStatus(qs_all_input);
}
+ qstatus &= ~MAKELONG( 0x4000, 0x4000 ); /* sometimes set on Win95 */
ok(qstatus == MAKELONG(QS_SENDMESSAGE, QS_SENDMESSAGE),
"wrong qstatus %08x\n", qstatus);
@@ -9879,6 +9941,7 @@ static const struct message WmShowNoActivate_2[] = {
{ HCBT_SETFOCUS, hook|optional },
{ HCBT_ACTIVATE, hook|optional }, /* win2003 doesn't send it */
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2003 doesn't send it */
+ { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ HCBT_SETFOCUS, hook|optional }, /* win2003 doesn't send it */
{ 0 }
};
@@ -9937,13 +10000,13 @@ static const struct message WmRestore_4[] = {
{ 0 }
};
static const struct message WmRestore_5[] = {
- { HCBT_MINMAX, hook|lparam, 0, SW_SHOWNORMAL },
- { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED, 0, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOMOVE },
+ { HCBT_MINMAX, hook|lparam|optional, 0, SW_SHOWNORMAL },
+ { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_FRAMECHANGED|SWP_STATECHANGED, 0, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOMOVE },
{ HCBT_ACTIVATE, hook|optional },
{ HCBT_SETFOCUS, hook|optional },
- { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED, 0, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOMOVE },
+ { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_FRAMECHANGED|SWP_STATECHANGED, 0, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOMOVE },
{ WM_MOVE, sent|defwinproc|optional },
- { WM_SIZE, sent|wparam|defwinproc, SIZE_RESTORED },
+ { WM_SIZE, sent|wparam|defwinproc|optional, SIZE_RESTORED },
{ 0 }
};
static const struct message WmHide_1[] = {
@@ -10008,8 +10071,10 @@ static const struct message WmMinimize_3[] = {
};
static const struct message WmShowMinNoActivate[] = {
{ HCBT_MINMAX, hook|lparam, 0, SW_SHOWMINNOACTIVE },
- { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
- { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
+ { WM_WINDOWPOSCHANGING, sent },
+ { WM_WINDOWPOSCHANGED, sent },
+ { WM_MOVE, sent|defwinproc|optional },
+ { WM_SIZE, sent|wparam|defwinproc|optional, SIZE_MINIMIZED },
{ 0 }
};
static const struct message WmMinMax_1[] = {
@@ -10035,7 +10100,7 @@ static const struct message WmMinMax_3[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED },
{ WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED },
{ WM_MOVE, sent|defwinproc|optional },
- { WM_SIZE, sent|wparam|defwinproc|optional, SIZE_RESTORED },
+ { WM_SIZE, sent|wparam|defwinproc|optional, SIZE_MINIMIZED },
{ 0 }
};
static const struct message WmMinMax_4[] = {
@@ -10146,7 +10211,7 @@ static void test_ShowWindow(void)
/* 48 */ { SW_SHOWMAXIMIZED, TRUE, WS_VISIBLE|WS_MAXIMIZE, WmShowMaximized_3, FALSE },
/* 49 */ { SW_SHOW, TRUE, WS_VISIBLE|WS_MAXIMIZE, WmEmptySeq, FALSE },
/* 50 */ { SW_SHOWNORMAL, TRUE, WS_VISIBLE, WmRestore_5, FALSE },
-/* 51 */ { SW_SHOWNORMAL, TRUE, WS_VISIBLE, WmEmptySeq, FALSE },
+/* 51 */ { SW_SHOWNORMAL, TRUE, WS_VISIBLE, WmRestore_5, FALSE },
/* 52 */ { SW_HIDE, TRUE, 0, WmHide_1, FALSE },
/* 53 */ { SW_HIDE, FALSE, 0, WmEmptySeq, FALSE },
/* 54 */ { SW_MINIMIZE, FALSE, WS_VISIBLE|WS_MINIMIZE, WmMinimize_3, FALSE },
@@ -10418,16 +10483,18 @@ static const struct message SetActiveWindowSeq0[] =
{ WM_ACTIVATEAPP, sent|wparam|optional, 0 },
{ WM_ACTIVATEAPP, sent|wparam|optional, 0 },
{ WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 },
+ { WM_KILLFOCUS, sent|optional },
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE },
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
{ WM_NCACTIVATE, sent|wparam|optional, 1 },
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ACTIVATE, sent|wparam|optional, 1 },
{ HCBT_SETFOCUS, hook|optional },
- { WM_KILLFOCUS, sent|defwinproc },
- { WM_IME_SETCONTEXT, sent|defwinproc|optional },
+ { WM_KILLFOCUS, sent|defwinproc|optional },
{ WM_IME_SETCONTEXT, sent|defwinproc|optional },
{ WM_IME_SETCONTEXT, sent|defwinproc|optional },
+ { WM_IME_SETCONTEXT, sent|optional },
+ { WM_IME_SETCONTEXT, sent|optional },
{ WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 1 },
{ WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 },
{ WM_SETFOCUS, sent|defwinproc|optional },
@@ -10532,7 +10599,7 @@ static void test_SetActiveWindow(void)
trace("SetActiveWindow(0)\n");
ret = SetActiveWindow(0);
ok( ret == popup, "Failed to SetActiveWindow(0)\n");
- ok_sequence(SetActiveWindowSeq0, "SetActiveWindow(0)", TRUE);
+ ok_sequence(SetActiveWindowSeq0, "SetActiveWindow(0)", FALSE);
flush_sequence();
trace("SetActiveWindow(hwnd), hwnd visible\n");
@@ -10950,6 +11017,19 @@ static const struct message wm_lb_click_0[] =
{ WM_COMMAND, sent|wparam|parent, MAKEWPARAM(ID_LISTBOX, LBN_SELCHANGE) },
{ 0 }
};
+static const struct message wm_lb_deletestring[] =
+{
+ { LB_DELETESTRING, sent|wparam|lparam, 0, 0 },
+ { WM_DELETEITEM, sent|wparam|parent, ID_LISTBOX, 0 },
+ { 0 }
+};
+static const struct message wm_lb_deletestring_reset[] =
+{
+ { LB_DELETESTRING, sent|wparam|lparam, 0, 0 },
+ { LB_RESETCONTENT, sent|wparam|lparam|defwinproc, 0, 0 },
+ { WM_DELETEITEM, sent|wparam|parent, ID_LISTBOX, 0 },
+ { 0 }
+};
#define check_lb_state(a1, a2, a3, a4, a5) check_lb_state_dbg(a1, a2, a3, a4, a5, __LINE__)
@@ -10957,7 +11037,7 @@ static LRESULT (WINAPI *listbox_orig_proc)(HWND, UINT, WPARAM, LPARAM);
static LRESULT WINAPI listbox_hook_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp)
{
- static long defwndproc_counter = 0;
+ static LONG defwndproc_counter = 0;
LRESULT ret;
struct recvd_message msg;
@@ -11060,6 +11140,33 @@ static void test_listbox_messages(void)
check_lb_state(listbox, 3, 0, 0, 0);
flush_sequence();
+ trace("deleting item 0\n");
+ ret = SendMessage(listbox, LB_DELETESTRING, 0, 0);
+ ok(ret == 2, "expected 2, got %ld\n", ret);
+ ok_sequence(wm_lb_deletestring, "LB_DELETESTRING 0", FALSE );
+ check_lb_state(listbox, 2, -1, 0, 0);
+ flush_sequence();
+
+ trace("deleting item 0\n");
+ ret = SendMessage(listbox, LB_DELETESTRING, 0, 0);
+ ok(ret == 1, "expected 1, got %ld\n", ret);
+ ok_sequence(wm_lb_deletestring, "LB_DELETESTRING 0", FALSE );
+ check_lb_state(listbox, 1, -1, 0, 0);
+ flush_sequence();
+
+ trace("deleting item 0\n");
+ ret = SendMessage(listbox, LB_DELETESTRING, 0, 0);
+ ok(ret == 0, "expected 0, got %ld\n", ret);
+ ok_sequence(wm_lb_deletestring_reset, "LB_DELETESTRING 0", FALSE );
+ check_lb_state(listbox, 0, -1, 0, 0);
+ flush_sequence();
+
+ trace("deleting item 0\n");
+ ret = SendMessage(listbox, LB_DELETESTRING, 0, 0);
+ ok(ret == LB_ERR, "expected LB_ERR, got %ld\n", ret);
+ check_lb_state(listbox, 0, -1, 0, 0);
+ flush_sequence();
+
log_all_parent_messages--;
DestroyWindow(listbox);
@@ -11298,6 +11405,12 @@ static void test_menu_messages(void)
skip( "queuing key events not supported\n" );
goto done;
}
+ /* win98 queues only a WM_KEYUP and doesn't start menu tracking */
+ if (sequence[0].message == WM_KEYUP && sequence[0].wParam == VK_MENU)
+ {
+ win_skip( "menu tracking through VK_MENU not supported\n" );
+ goto done;
+ }
ok_sequence(wm_popup_menu_1, "popup menu command", FALSE);
/* Alt+F, Right, Enter */
diff --git a/rostests/winetests/user32/scroll.c b/rostests/winetests/user32/scroll.c
index 9547d543082..55fb6f64ac4 100644
--- a/rostests/winetests/user32/scroll.c
+++ b/rostests/winetests/user32/scroll.c
@@ -26,6 +26,7 @@
#include "wine/test.h"
static HWND hScroll, hMainWnd;
+static BOOL bThemeActive = FALSE;
static LRESULT CALLBACK MyWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
@@ -54,15 +55,26 @@ static void scrollbar_test1(void)
ret = EnableScrollBar( hScroll, SB_CTL, ESB_DISABLE_BOTH );
ok( ret, "The scrollbar should be disabled.\n" );
- todo_wine
- {
- ok( !IsWindowEnabled( hScroll ), "The scrollbar window should be disabled.\n" );
- }
+ ok( !IsWindowEnabled( hScroll ), "The scrollbar window should be disabled.\n" );
ret = EnableScrollBar( hScroll, SB_CTL, ESB_ENABLE_BOTH );
ok( ret, "The scrollbar should be enabled.\n" );
ok( IsWindowEnabled( hScroll ), "The scrollbar window should be enabled.\n" );
+ /* test buttons separately */
+ ret = EnableScrollBar( hScroll, SB_CTL, ESB_DISABLE_LTUP );
+ ok( ret, "The scrollbar LTUP button should be disabled.\n" );
+ ok( IsWindowEnabled( hScroll ), "The scrollbar window should be enabled.\n" );
+ ret = EnableScrollBar( hScroll, SB_CTL, ESB_ENABLE_BOTH );
+ ok( ret, "The scrollbar should be enabled.\n" );
+ ok( IsWindowEnabled( hScroll ), "The scrollbar window should be enabled.\n" );
+
+ ret = EnableScrollBar( hScroll, SB_CTL, ESB_DISABLE_RTDN );
+ ok( ret, "The scrollbar RTDN button should be disabled.\n" );
+ ok( IsWindowEnabled( hScroll ), "The scrollbar window should be enabled.\n" );
+ ret = EnableScrollBar( hScroll, SB_CTL, ESB_ENABLE_BOTH );
+ ok( ret, "The scrollbar should be enabled.\n" );
+ ok( IsWindowEnabled( hScroll ), "The scrollbar window should be enabled.\n" );
}
static void scrollbar_test2(void)
@@ -195,9 +207,185 @@ static void scrollbar_test4(void)
sbi.rcScrollBar.bottom, sbi.rcScrollBar.right );
}
+/* some tests designed to show that Horizontal and Vertical
+ * window scroll bar info are not created independently */
+static void scrollbar_test_default( DWORD style)
+{
+ INT min, max, ret;
+ DWORD winstyle;
+ HWND hwnd;
+ SCROLLINFO si = { sizeof( SCROLLINFO), SIF_TRACKPOS };
+
+ hwnd = CreateWindowExA( 0, "static", "", WS_POPUP | style,
+ 0, 0, 10, 10, 0, 0, 0, NULL);
+ assert( hwnd != 0);
+
+ ret = GetScrollRange( hwnd, SB_VERT, &min, &max);
+ ok( ret ||
+ broken( !ret) /* Win 98/ME */ , "GetScrollRange failed.\n");
+ /* range is 0,0 if there are no H or V scroll bars. 0,100 otherwise */
+ if( !( style & ( WS_VSCROLL | WS_HSCROLL)))
+ ok( min == 0 && max == 0,
+ "Scroll bar range is %d,%d. Expected 0,0. Style %08x\n", min, max, style);
+ else
+todo_wine
+ ok( min == 0 && max == 100,
+ "Scroll bar range is %d,%d. Expected 0,100. Style %08x\n", min, max, style);
+ ret = GetScrollRange( hwnd, SB_HORZ, &min, &max);
+ ok( ret ||
+ broken( !ret) /* Win 98/ME */ , "GetScrollRange failed.\n");
+ /* range is 0,0 if there are no H or V scroll bars. 0,100 otherwise */
+ if( !( style & ( WS_VSCROLL | WS_HSCROLL)))
+ ok( min == 0 && max == 0,
+ "Scroll bar range is %d,%d. Expected 0,0. Style %08x\n", min, max, style);
+ else
+todo_wine
+ ok( min == 0 && max == 100,
+ "Scroll bar range is %d,%d. Expected 0,100. Style %08x\n", min, max, style);
+ /* test GetScrollInfo, vist for vertical SB */
+ ret = GetScrollInfo( hwnd, SB_VERT, &si);
+ /* should fail if no H orV scroll bar styles are present. Succeed otherwise */
+ if( !( style & ( WS_VSCROLL | WS_HSCROLL)))
+ ok( !ret, "GetScrollInfo succeeded unexpectedly. Style is %08x\n", style);
+ else
+todo_wine
+ ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
+ /* Same for Horizontal SB */
+ ret = GetScrollInfo( hwnd, SB_HORZ, &si);
+ /* should fail if no H orV scroll bar styles are present. Succeed otherwise */
+ if( !( style & ( WS_VSCROLL | WS_HSCROLL)))
+ ok( !ret, "GetScrollInfo succeeded unexpectedly. Style is %08x\n", style);
+ else
+todo_wine
+ ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
+ /* now set the Vertical Scroll range to something that could be the default value it
+ * already has */;
+ ret = SetScrollRange( hwnd, SB_VERT, 0, 100, FALSE);
+ ok( ret, "SetScrollRange failed.\n");
+ /* and request the Horizontal range */
+ ret = GetScrollRange( hwnd, SB_HORZ, &min, &max);
+ ok( ret, "GetScrollRange failed.\n");
+ /* now the range should be 0,100 in ALL cases */
+ ok( min == 0 && max == 100,
+ "Scroll bar range is %d,%d. Expected 0,100. Style %08x\n", min, max, style);
+ /* See what is different now for GetScrollRange */
+ ret = GetScrollInfo( hwnd, SB_HORZ, &si);
+ /* should succeed in ALL cases */
+ ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
+ ret = GetScrollInfo( hwnd, SB_VERT, &si);
+ /* should succeed in ALL cases */
+ ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
+ /* report the windows style */
+ winstyle = GetWindowLongW( hwnd, GWL_STYLE );
+ /* WS_VSCROLL added to the window style */
+ if( !(style & WS_VSCROLL))
+ {
+ if (bThemeActive || style != WS_HSCROLL)
+todo_wine
+ ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == ( style | WS_VSCROLL),
+ "unexpected style change %8lx expected %8lx\n",
+ (winstyle & (WS_HSCROLL|WS_VSCROLL)), style | WS_VSCROLL);
+ else
+ ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == style,
+ "unexpected style change %8lx expected %8x\n",
+ (winstyle & (WS_HSCROLL|WS_VSCROLL)), style);
+ }
+ /* do the test again with H and V reversed.
+ * Start with a clean window */
+ DestroyWindow( hwnd);
+ hwnd = CreateWindowExA( 0, "static", "", WS_POPUP | style,
+ 0, 0, 10, 10, 0, 0, 0, NULL);
+ assert( hwnd != 0);
+ /* Set Horizonta Scroll range to something that could be the default value it
+ * already has */;
+ ret = SetScrollRange( hwnd, SB_HORZ, 0, 100, FALSE);
+ ok( ret, "SetScrollRange failed.\n");
+ /* and request the Vertical range */
+ ret = GetScrollRange( hwnd, SB_VERT, &min, &max);
+ ok( ret, "GetScrollRange failed.\n");
+ /* now the range should be 0,100 in ALL cases */
+ ok( min == 0 && max == 100,
+ "Scroll bar range is %d,%d. Expected 0,100. Style %08x\n", min, max, style);
+ /* See what is different now for GetScrollRange */
+ ret = GetScrollInfo( hwnd, SB_HORZ, &si);
+ /* should succeed in ALL cases */
+ ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
+ ret = GetScrollInfo( hwnd, SB_VERT, &si);
+ /* should succeed in ALL cases */
+ ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
+ /* report the windows style */
+ winstyle = GetWindowLongW( hwnd, GWL_STYLE );
+ /* WS_HSCROLL added to the window style */
+ if( !(style & WS_HSCROLL))
+ {
+ if (bThemeActive || style != WS_VSCROLL)
+todo_wine
+ ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == ( style | WS_HSCROLL),
+ "unexpected style change %8lx expected %8lx\n",
+ (winstyle & (WS_HSCROLL|WS_VSCROLL)), style | WS_HSCROLL);
+ else
+ ok( (winstyle & (WS_HSCROLL|WS_VSCROLL)) == style,
+ "unexpected style change %8lx expected %8x\n",
+ (winstyle & (WS_HSCROLL|WS_VSCROLL)), style);
+ }
+ /* Slightly change the test to use SetScrollInfo
+ * Start with a clean window */
+ DestroyWindow( hwnd);
+ hwnd = CreateWindowExA( 0, "static", "", WS_POPUP | style,
+ 0, 0, 10, 10, 0, 0, 0, NULL);
+ assert( hwnd != 0);
+ /* set Horizontal position with SetScrollInfo */
+ si.nPos = 0;
+ si.nMin = 11;
+ si.nMax = 22;
+ si.fMask |= SIF_RANGE;
+ ret = SetScrollInfo( hwnd, SB_HORZ, &si, FALSE);
+ ok( ret, "SetScrollInfo failed. Style is %08x\n", style);
+ /* and request the Vertical range */
+ ret = GetScrollRange( hwnd, SB_VERT, &min, &max);
+ ok( ret, "GetScrollRange failed.\n");
+ /* now the range should be 0,100 in ALL cases */
+ ok( min == 0 && max == 100,
+ "Scroll bar range is %d,%d. Expected 0,100. Style %08x\n", min, max, style);
+ /* See what is different now for GetScrollRange */
+ ret = GetScrollInfo( hwnd, SB_HORZ, &si);
+ /* should succeed in ALL cases */
+ ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
+ ret = GetScrollInfo( hwnd, SB_VERT, &si);
+ /* should succeed in ALL cases */
+ ok( ret, "GetScrollInfo failed unexpectedly. Style is %08x\n", style);
+ /* also test if the window scroll bars are enabled */
+ ret = EnableScrollBar( hwnd, SB_VERT, ESB_ENABLE_BOTH);
+ ok( !ret, "Vertical window scroll bar was not enabled\n");
+ ret = EnableScrollBar( hwnd, SB_HORZ, ESB_ENABLE_BOTH);
+ ok( !ret, "Horizontal window scroll bar was not enabled\n");
+ DestroyWindow( hwnd);
+ /* finally, check if adding a WS_[HV]SColl style of a window makes the scroll info
+ * available */
+ if( style & (WS_HSCROLL | WS_VSCROLL)) return;/* only test if not yet set */
+ /* Start with a clean window */
+ DestroyWindow( hwnd);
+ hwnd = CreateWindowExA( 0, "static", "", WS_POPUP ,
+ 0, 0, 10, 10, 0, 0, 0, NULL);
+ assert( hwnd != 0);
+ ret = GetScrollInfo( hwnd, SB_VERT, &si);
+ /* should fail */
+ ok( !ret, "GetScrollInfo succeeded unexpectedly. Style is %08x\n", style);
+ /* add scroll styles */
+ winstyle = GetWindowLongW( hwnd, GWL_STYLE );
+ SetWindowLongW( hwnd, GWL_STYLE, winstyle | WS_VSCROLL | WS_HSCROLL);
+ ret = GetScrollInfo( hwnd, SB_VERT, &si);
+ /* should still fail */
+ ok( !ret, "GetScrollInfo succeeded unexpectedly. Style is %08x\n", style);
+ /* clean up */
+ DestroyWindow( hwnd);
+}
+
START_TEST ( scroll )
{
WNDCLASSA wc;
+ HMODULE hUxtheme;
+ BOOL (WINAPI * pIsThemeActive)(VOID);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.cbClsExtra = 0;
@@ -225,6 +413,21 @@ START_TEST ( scroll )
scrollbar_test3();
scrollbar_test4();
+ /* Some test results vary depending of theming being active or not */
+ hUxtheme = LoadLibraryA("uxtheme.dll");
+ if (hUxtheme)
+ {
+ pIsThemeActive = (void*)GetProcAddress(hUxtheme, "IsThemeActive");
+ if (pIsThemeActive)
+ bThemeActive = pIsThemeActive();
+ FreeLibrary(hUxtheme);
+ }
+
+ scrollbar_test_default( 0);
+ scrollbar_test_default( WS_HSCROLL);
+ scrollbar_test_default( WS_VSCROLL);
+ scrollbar_test_default( WS_HSCROLL | WS_VSCROLL);
+
DestroyWindow(hScroll);
DestroyWindow(hMainWnd);
}
diff --git a/rostests/winetests/user32/static.c b/rostests/winetests/user32/static.c
index 6a474ff5903..d04f725138a 100644
--- a/rostests/winetests/user32/static.c
+++ b/rostests/winetests/user32/static.c
@@ -56,6 +56,7 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpara
ok(GetClipRgn(hdc, hrgn) == 1, "Static controls during a WM_CTLCOLORSTATIC must have a clipping region\n");
DeleteObject(hrgn);
g_nReceivedColorStatic++;
+ return (LRESULT) GetStockObject(BLACK_BRUSH);
}
break;
}
@@ -81,7 +82,11 @@ static void test_updates(int style, int flags)
InvalidateRect(hStatic, NULL, FALSE);
UpdateWindow(hStatic);
-
+ if( (style & SS_TYPEMASK) == SS_BITMAP) {
+ HDC hdc = GetDC( hStatic);
+ COLORREF colour = GetPixel( hdc, 10, 10);
+ ok ( colour != 0, "pixel should NOT be painted black!\n");
+ }
if (style != SS_ETCHEDHORZ && style != SS_ETCHEDVERT)
exp = 4;
else
@@ -89,7 +94,7 @@ static void test_updates(int style, int flags)
if (flags & TODO_COUNT)
todo_wine { expect_eq(g_nReceivedColorStatic, exp, int, "%d"); }
- else if (style == SS_ICON || style == SS_BITMAP)
+ else if ((style & SS_TYPEMASK) == SS_ICON || (style & SS_TYPEMASK) == SS_BITMAP)
ok( g_nReceivedColorStatic == exp ||
broken(g_nReceivedColorStatic == 0), /* win9x */
"expected %u got %u\n", exp, g_nReceivedColorStatic );
@@ -125,6 +130,7 @@ START_TEST(static)
test_updates(SS_SIMPLE, 0);
test_updates(SS_ICON, 0);
test_updates(SS_BITMAP, 0);
+ test_updates(SS_BITMAP | SS_CENTERIMAGE, 0);
test_updates(SS_BLACKRECT, TODO_COUNT);
test_updates(SS_WHITERECT, TODO_COUNT);
test_updates(SS_ETCHEDHORZ, TODO_COUNT);
diff --git a/rostests/winetests/user32/sysparams.c b/rostests/winetests/user32/sysparams.c
index 05f728d0b27..3c944414083 100755
--- a/rostests/winetests/user32/sysparams.c
+++ b/rostests/winetests/user32/sysparams.c
@@ -156,6 +156,7 @@ static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam );
static LRESULT CALLBACK SysParamsTestWndProc( HWND hWnd, UINT msg, WPARAM wParam,
LPARAM lParam );
static int change_counter;
+static int change_setworkarea_param, change_iconverticalspacing_param;
static int change_last_param;
static int last_bpp;
static BOOL displaychange_ok = FALSE, displaychange_test_active = FALSE;
@@ -176,21 +177,32 @@ static LRESULT CALLBACK SysParamsTestWndProc( HWND hWnd, UINT msg, WPARAM wParam
case WM_SETTINGCHANGE:
if (change_counter>0) {
/* ignore these messages caused by resizing of toolbars */
- if( wParam == SPI_SETWORKAREA ||
- wParam == SPI_ICONVERTICALSPACING ||
- displaychange_test_active)
+ if( wParam == SPI_SETWORKAREA){
+ change_setworkarea_param = 1;
break;
- if( change_last_param == SPI_SETWORKAREA ||
- change_last_param == SPI_ICONVERTICALSPACING)
- {
+ } else if( wParam == SPI_ICONVERTICALSPACING) {
+ change_iconverticalspacing_param = 1;
+ break;
+ } else if( displaychange_test_active)
+ break;
+ if( !change_last_param){
change_last_param = wParam;
break;
}
ok(0,"too many changes counter=%d last change=%d\n",
change_counter,change_last_param);
+ change_counter++;
+ change_last_param = wParam;
+ break;
}
change_counter++;
- change_last_param = wParam;
+ change_last_param = change_setworkarea_param = change_iconverticalspacing_param =0;
+ if( wParam == SPI_SETWORKAREA)
+ change_setworkarea_param = 1;
+ else if( wParam == SPI_ICONVERTICALSPACING)
+ change_iconverticalspacing_param = 1;
+ else
+ change_last_param = wParam;
break;
case WM_DESTROY:
@@ -218,7 +230,9 @@ static void test_change_message( int action, int optional )
ok( 1 == change_counter,
"Missed a message: change_counter=%d\n", change_counter );
change_counter = 0;
- ok( action == change_last_param,
+ ok( action == change_last_param ||
+ ( change_setworkarea_param && action == SPI_SETWORKAREA) ||
+ ( change_iconverticalspacing_param && action == SPI_ICONVERTICALSPACING),
"Wrong action got %d expected %d\n", change_last_param, action );
change_last_param = 0;
}
@@ -709,11 +723,15 @@ static void test_SPI_SETBORDER( void ) /* 6 */
BOOL rc;
UINT old_border;
NONCLIENTMETRICSA ncmsave;
- INT CaptionWidth;
+ INT CaptionWidth,
+ PaddedBorderWidth;
ncmsave.cbSize = sizeof( ncmsave);
rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncmsave, 0);
- ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
+ if( !rc) {
+ win_skip("SPI_GETNONCLIENTMETRICS is not available\n");
+ return;
+ }
/* CaptionWidth from the registry may have different value of iCaptionWidth
* from the non client metrics (observed on WinXP).
* Fix this so we can safely restore settings with the nonclientmetrics */
@@ -734,6 +752,13 @@ static void test_SPI_SETBORDER( void ) /* 6 */
rc=SystemParametersInfoA( SPI_GETBORDER, 0, &old_border, 0 );
if (!test_error_msg(rc,"SPI_{GET,SET}BORDER"))
return;
+ /* FIXME: include new PaddedBorderWidth parameter */
+ PaddedBorderWidth = ncmsave.iBorderWidth - old_border;
+ if( PaddedBorderWidth){
+ win_skip( "Cannot reliably restore border width yet (PaddedBorderWidth = %d)\n",
+ PaddedBorderWidth);
+ return;
+ }
/* This will restore sane values if the test hang previous run. */
if ( old_border == 7 || old_border == 20 )
old_border = 1;
@@ -1054,7 +1079,7 @@ static void test_SPI_SETICONTITLEWRAP( void ) /* 26 */
if( regval != vals[i])
regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY1,
SPI_SETICONTITLEWRAP_VALNAME, dpi);
- ok( regval == vals[i],
+ ok( regval == vals[i] || broken(regval == -1), /* win9x */
"wrong value in registry %d, expected %d\n", regval, vals[i] );
rc=SystemParametersInfoA( SPI_GETICONTITLEWRAP, 0, &v, 0 );
@@ -1346,7 +1371,7 @@ static void test_SPI_SETDRAGFULLWINDOWS( void ) /* 37 */
}
#define TEST_NONCLIENTMETRICS_REG( ncm) \
-test_reg_metric2( SPI_SETBORDER_REGKEY2, SPI_SETBORDER_REGKEY, SPI_SETBORDER_VALNAME, (ncm).iBorderWidth);\
+/*FIXME: test_reg_metric2( SPI_SETBORDER_REGKEY2, SPI_SETBORDER_REGKEY, SPI_SETBORDER_VALNAME, (ncm).iBorderWidth);*/\
test_reg_metric( SPI_METRIC_REGKEY, SPI_SCROLLWIDTH_VALNAME, (ncm).iScrollWidth);\
test_reg_metric( SPI_METRIC_REGKEY, SPI_SCROLLHEIGHT_VALNAME, (ncm).iScrollHeight);\
/*FIXME: test_reg_metric( SPI_METRIC_REGKEY, SPI_CAPTIONWIDTH_VALNAME, (ncm).iCaptionWidth);*/\
@@ -1390,6 +1415,7 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
Ncmstart.cbSize = sizeof(NONCLIENTMETRICSA);
trace("testing SPI_{GET,SET}NONCLIENTMETRICS\n");
+ change_counter = 0;
SetLastError(0xdeadbeef);
rc=SystemParametersInfoA( SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &Ncmorig, FALSE );
if (!test_error_msg(rc,"SPI_{GET,SET}NONCLIENTMETRICS"))
@@ -1443,7 +1469,7 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
/* test registry entries */
TEST_NONCLIENTMETRICS_REG( Ncmcur)
- /* test the systemm metrics with these settings */
+ /* test the system metrics with these settings */
test_GetSystemMetrics();
/* now for something invalid: increase the {menu|caption|smcaption} fonts
by a large amount will increase the {menu|caption|smcaption} height*/
@@ -1478,19 +1504,22 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
"SmCaptionHeight: %d expected %d\n", Ncmcur.iSmCaptionHeight, expect);
ok( Ncmcur.iCaptionWidth == 8 ||
+ Ncmcur.iCaptionWidth == 12 || /* Vista, W7b */
Ncmcur.iCaptionWidth == Ncmstart.iCaptionWidth, /* with windows XP theme, the value never changes */
- "CaptionWidth: %d expected 8\n", Ncmcur.iCaptionWidth);
+ "CaptionWidth: %d expected 8, 12 or %d\n", Ncmcur.iCaptionWidth, Ncmstart.iCaptionWidth);
ok( Ncmcur.iScrollWidth == 8,
"ScrollWidth: %d expected 8\n", Ncmcur.iScrollWidth);
ok( Ncmcur.iScrollHeight == 8,
"ScrollHeight: %d expected 8\n", Ncmcur.iScrollHeight);
- /* test the systemm metrics with these settings */
+ /* test the system metrics with these settings */
test_GetSystemMetrics();
/* restore */
rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS),
&Ncmorig, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
test_change_message( SPI_SETNONCLIENTMETRICS, 0 );
ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%d\n",rc,GetLastError());
+ /* test the system metrics with these settings */
+ test_GetSystemMetrics();
}
static void test_SPI_SETMINIMIZEDMETRICS( void ) /* 44 */
@@ -1639,9 +1668,11 @@ static void test_SPI_SETICONMETRICS( void ) /* 46 */
return;
/* check some registry values */
regval = metricfromreg( SPI_ICONHORIZONTALSPACING_REGKEY, SPI_ICONHORIZONTALSPACING_VALNAME, dpi);
- ok( regval==im_orig.iHorzSpacing, "wrong value in registry %d, expected %d\n", regval, im_orig.iHorzSpacing);
+ ok( regval==im_orig.iHorzSpacing || broken(regval == -1), /* nt4 */
+ "wrong value in registry %d, expected %d\n", regval, im_orig.iHorzSpacing);
regval = metricfromreg( SPI_ICONVERTICALSPACING_REGKEY, SPI_ICONVERTICALSPACING_VALNAME, dpi);
- ok( regval==im_orig.iVertSpacing, "wrong value in registry %d, expected %d\n", regval, im_orig.iVertSpacing);
+ ok( regval==im_orig.iVertSpacing || broken(regval == -1), /* nt4 */
+ "wrong value in registry %d, expected %d\n", regval, im_orig.iVertSpacing);
regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY2, SPI_SETICONTITLEWRAP_VALNAME, dpi);
if( regval != im_orig.iTitleWrap)
regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY1, SPI_SETICONTITLEWRAP_VALNAME, dpi);
@@ -1763,24 +1794,32 @@ static void test_SPI_SETWORKAREA( void ) /* 47 */
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
if (!test_error_msg(rc,"SPI_SETWORKAREA")) return;
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
- test_change_message( SPI_SETWORKAREA, 0 );
rc=SystemParametersInfoA( SPI_GETWORKAREA, 0, &area, 0 );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
+ if( !EqualRect( &area, &curr_val)) /* no message if rect has not changed */
+ test_change_message( SPI_SETWORKAREA, 0);
eq( area.left, curr_val.left, "left", "%d" );
eq( area.top, curr_val.top, "top", "%d" );
- eq( area.right, curr_val.right, "right", "%d" );
- eq( area.bottom, curr_val.bottom, "bottom", "%d" );
-
+ /* size may be rounded up */
+ ok( area.right >= curr_val.right && area.right < curr_val.right + 16,
+ "right: got %d instead of %d\n", area.right, curr_val.right );
+ ok( area.bottom >= curr_val.bottom && area.bottom < curr_val.bottom + 16,
+ "bottom: got %d instead of %d\n", area.bottom, curr_val.bottom );
+ curr_val = area;
rc=SystemParametersInfoA( SPI_SETWORKAREA, 0, &old_area,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%d\n",rc,GetLastError());
- test_change_message( SPI_SETWORKAREA, 0 );
rc=SystemParametersInfoA( SPI_GETWORKAREA, 0, &area, 0 );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
+ if( !EqualRect( &area, &curr_val)) /* no message if rect has not changed */
+ test_change_message( SPI_SETWORKAREA, 0 );
eq( area.left, old_area.left, "left", "%d" );
eq( area.top, old_area.top, "top", "%d" );
- eq( area.right, old_area.right, "right", "%d" );
- eq( area.bottom, old_area.bottom, "bottom", "%d" );
+ /* size may be rounded up */
+ ok( area.right >= old_area.right && area.right < old_area.right + 16,
+ "right: got %d instead of %d\n", area.right, old_area.right );
+ ok( area.bottom >= old_area.bottom && area.bottom < old_area.bottom + 16,
+ "bottom: got %d instead of %d\n", area.bottom, old_area.bottom );
}
static void test_SPI_SETSHOWSOUNDS( void ) /* 57 */
@@ -2409,6 +2448,14 @@ static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam )
test_SPI_SETMOUSEBUTTONSWAP(); /* 33 */
test_SPI_SETFASTTASKSWITCH(); /* 36 */
test_SPI_SETDRAGFULLWINDOWS(); /* 37 */
+ /* test_WM_DISPLAYCHANGE seems to be somewhat buggy on
+ * some versions of Windows (Vista, Win2k8, Win7B) in that
+ * not all metrics are properly restored. Problems are
+ * SM_CXMAXTRACK, SM_CYMAXTRACK
+ * Fortunately setting the Non-Client metrics like in
+ * test_SPI_SETNONCLIENTMETRICS will corect this. That is why
+ * we do the DISPLAY change now... */
+ test_WM_DISPLAYCHANGE();
test_SPI_SETNONCLIENTMETRICS(); /* 42 */
test_SPI_SETMINIMIZEDMETRICS(); /* 44 */
test_SPI_SETICONMETRICS(); /* 46 */
@@ -2428,7 +2475,6 @@ static DWORD WINAPI SysParamsThreadFunc( LPVOID lpParam )
test_SPI_SETWHEELSCROLLCHARS(); /* 108 */
test_SPI_SETWALLPAPER(); /* 115 */
- test_WM_DISPLAYCHANGE();
SendMessageA( ghTestWnd, WM_DESTROY, 0, 0 );
return 0;
@@ -2509,10 +2555,11 @@ static void test_GetSystemMetrics( void)
{
TEXTMETRICA tmMenuFont;
UINT IconSpacing, IconVerticalSpacing;
+ BOOL rc;
HDC hdc = CreateIC( "Display", 0, 0, 0);
UINT avcwCaption;
- INT CaptionWidth;
+ INT CaptionWidthfromreg;
MINIMIZEDMETRICS minim;
NONCLIENTMETRICS ncm;
SIZE screen;
@@ -2520,11 +2567,14 @@ static void test_GetSystemMetrics( void)
minim.cbSize = sizeof( minim);
ncm.cbSize = sizeof( ncm);
SystemParametersInfo( SPI_GETMINIMIZEDMETRICS, 0, &minim, 0);
- SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
-
+ rc = SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
+ if( !rc) {
+ win_skip("SPI_GETNONCLIENTMETRICS is not available\n");
+ return;
+ }
/* CaptionWidth from the registry may have different value of iCaptionWidth
* from the non client metrics (observed on WinXP) */
- CaptionWidth = metricfromreg(
+ CaptionWidthfromreg = metricfromreg(
"Control Panel\\Desktop\\WindowMetrics","CaptionWidth", dpi);
get_text_metr_size( hdc, &ncm.lfMenuFont, &tmMenuFont, NULL);
get_text_metr_size( hdc, &ncm.lfCaptionFont, NULL, &avcwCaption);
@@ -2568,8 +2618,8 @@ static void test_GetSystemMetrics( void)
/* SM_RESERVED2 */
/* SM_RESERVED3 */
/* SM_RESERVED4 */
- ok_gsm( SM_CXMIN, 3 * max( CaptionWidth, 8) + GetSystemMetrics( SM_CYSIZE) +
- 4 + 4 * avcwCaption + 2 * GetSystemMetrics( SM_CXFRAME));
+ ok_gsm( SM_CXMIN, 3 * max( CaptionWidthfromreg >= 0 ? CaptionWidthfromreg : ncm.iCaptionWidth, 8) +
+ GetSystemMetrics( SM_CYSIZE) + 4 + 4 * avcwCaption + 2 * GetSystemMetrics( SM_CXFRAME));
ok_gsm( SM_CYMIN, GetSystemMetrics( SM_CYCAPTION) +
2 * GetSystemMetrics( SM_CYFRAME));
ok_gsm_2( SM_CXSIZE,
@@ -2617,8 +2667,10 @@ static void test_GetSystemMetrics( void)
screen.cx = GetSystemMetrics( SM_CXSCREEN );
screen.cy = GetSystemMetrics( SM_CYSCREEN );
}
- ok_gsm( SM_CXMAXTRACK, screen.cx + 4 + 2 * GetSystemMetrics(SM_CXFRAME));
- ok_gsm( SM_CYMAXTRACK, screen.cy + 4 + 2 * GetSystemMetrics(SM_CYFRAME));
+ ok_gsm_2( SM_CXMAXTRACK, screen.cx + 4 + 2 * GetSystemMetrics(SM_CXFRAME),
+ screen.cx - 4 + 2 * GetSystemMetrics(SM_CXFRAME)); /* Vista */
+ ok_gsm_2( SM_CYMAXTRACK, screen.cy + 4 + 2 * GetSystemMetrics(SM_CYFRAME),
+ screen.cy - 4 + 2 * GetSystemMetrics(SM_CYFRAME)); /* Vista */
/* the next two cannot really be tested as they depend on (application)
* toolbars */
/* SM_CXMAXIMIZED */
@@ -2656,8 +2708,8 @@ static void test_GetSystemMetrics( void)
ncm.iBorderWidth, ncm.iCaptionWidth, ncm.iCaptionHeight, IconSpacing, IconVerticalSpacing);
trace( "MenuHeight %d MenuWidth %d ScrollHeight %d ScrollWidth %d SmCaptionHeight %d SmCaptionWidth %d\n",
ncm.iMenuHeight, ncm.iMenuWidth, ncm.iScrollHeight, ncm.iScrollWidth, ncm.iSmCaptionHeight, ncm.iSmCaptionWidth);
- trace( "Captionfontchar width %d MenuFont %d,%d CaptionWidth from registry: %d\n",
- avcwCaption, tmMenuFont.tmHeight, tmMenuFont.tmExternalLeading, CaptionWidth);
+ trace( "Captionfontchar width %d MenuFont %d,%d CaptionWidth from registry: %d screen %d,%d\n",
+ avcwCaption, tmMenuFont.tmHeight, tmMenuFont.tmExternalLeading, CaptionWidthfromreg, screen.cx, screen.cy);
}
ReleaseDC( 0, hdc);
}
diff --git a/rostests/winetests/user32/win.c b/rostests/winetests/user32/win.c
index 33f140335fb..1f0420e1460 100644
--- a/rostests/winetests/user32/win.c
+++ b/rostests/winetests/user32/win.c
@@ -51,6 +51,7 @@ static BOOL (WINAPI *pGetLayeredWindowAttributes)(HWND,COLORREF*,BYTE*,DWORD*);
static BOOL (WINAPI *pSetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD);
static BOOL (WINAPI *pGetMonitorInfoA)(HMONITOR,LPMONITORINFO);
static HMONITOR (WINAPI *pMonitorFromPoint)(POINT,DWORD);
+static int (WINAPI *pGetWindowRgnBox)(HWND,LPRECT);
static BOOL test_lbuttondown_flag;
static HWND hwndMessage;
@@ -2430,9 +2431,9 @@ static void test_SetForegroundWindow(HWND hwnd)
/*trace("testing SetForegroundWindow on an invisible window %p\n", hwnd);*/
ret = SetForegroundWindow(hwnd);
- ok(ret, "SetForegroundWindow returned FALSE instead of TRUE\n");
+ ok(ret || broken(!ret), /* win98 */ "SetForegroundWindow returned FALSE instead of TRUE\n");
check_wnd_state(hwnd, hwnd, hwnd, 0);
-
+
ShowWindow(hwnd, SW_SHOW);
check_wnd_state(hwnd, hwnd, hwnd, 0);
@@ -2661,7 +2662,10 @@ static void test_keyboard_input(HWND hwnd)
ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus());
keybd_event(VK_SPACE, 0, 0, 0);
- ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
+ do
+ {
+ ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
+ } while (ret && msg.message >= 0xc000);
if (!ret)
{
skip( "keybd_event didn't work, skipping keyboard test\n" );
@@ -4929,7 +4933,10 @@ static void test_GetWindowModuleFileName(void)
ok(IsWindow(hwnd), "got invalid desktop window %p\n", hwnd);
SetLastError(0xdeadbeef);
ret2 = pGetWindowModuleFileNameA(hwnd, buf2, sizeof(buf2));
- ok(!ret2 || ret1 == ret2 /* vista */, "expected 0 or %u, got %u %s\n", ret1, ret2, buf2);
+ ok(!ret2 ||
+ ret1 == ret2 || /* vista */
+ broken(ret2), /* some win98 return user.exe as file name */
+ "expected 0 or %u, got %u %s\n", ret1, ret2, buf2);
}
}
@@ -5529,6 +5536,48 @@ static void test_handles( HWND full_hwnd )
#endif
}
+static void test_winregion(void)
+{
+ HWND hwnd;
+ RECT r;
+ int ret;
+ HRGN hrgn;
+
+ if (!pGetWindowRgnBox)
+ {
+ win_skip("GetWindowRgnBox not supported\n");
+ return;
+ }
+
+ hwnd = CreateWindowExA(0, "static", NULL, WS_VISIBLE, 10, 10, 10, 10, NULL, 0, 0, NULL);
+ /* NULL prect */
+ SetLastError(0xdeadbeef);
+ ret = pGetWindowRgnBox(hwnd, NULL);
+ ok( ret == ERROR, "Expected ERROR, got %d\n", ret);
+ ok( GetLastError() == 0xdeadbeef, "Expected , got %d\n", GetLastError());
+
+ hrgn = CreateRectRgn(2, 3, 10, 15);
+ ok( hrgn != NULL, "Region creation failed\n");
+ if (hrgn)
+ {
+ SetWindowRgn(hwnd, hrgn, FALSE);
+
+ SetLastError(0xdeadbeef);
+ ret = pGetWindowRgnBox(hwnd, NULL);
+ ok( ret == ERROR, "Expected ERROR, got %d\n", ret);
+ ok( GetLastError() == 0xdeadbeef, "Expected , got %d\n", GetLastError());
+
+ r.left = r.top = r.right = r.bottom = 0;
+ ret = pGetWindowRgnBox(hwnd, &r);
+ ok( ret == SIMPLEREGION, "Expected SIMPLEREGION, got %d\n", ret);
+ ok( r.left == 2 && r.top == 3 && r.right == 10 && r.bottom == 15,
+ "Expected (2,3,10,15), got (%d,%d,%d,%d)\n", r.left, r.top,
+ r.right, r.bottom);
+ DeleteObject(hrgn);
+ }
+ DestroyWindow(hwnd);
+}
+
START_TEST(win)
{
HMODULE user32 = GetModuleHandleA( "user32.dll" );
@@ -5539,6 +5588,7 @@ START_TEST(win)
pSetLayeredWindowAttributes = (void *)GetProcAddress( user32, "SetLayeredWindowAttributes" );
pGetMonitorInfoA = (void *)GetProcAddress( user32, "GetMonitorInfoA" );
pMonitorFromPoint = (void *)GetProcAddress( user32, "MonitorFromPoint" );
+ pGetWindowRgnBox = (void *)GetProcAddress( user32, "GetWindowRgnBox" );
if (!RegisterWindowClasses()) assert(0);
@@ -5608,6 +5658,7 @@ START_TEST(win)
test_SetForegroundWindow(hwndMain);
test_shell_window();
test_handles( hwndMain );
+ test_winregion();
/* add the tests above this line */
if (hhook) UnhookWindowsHookEx(hhook);
diff --git a/rostests/winetests/usp10/usp10.c b/rostests/winetests/usp10/usp10.c
index 1dba6829ac7..1eefee0509a 100644
--- a/rostests/winetests/usp10/usp10.c
+++ b/rostests/winetests/usp10/usp10.c
@@ -40,10 +40,12 @@ static void test_ScriptShape(HDC hdc)
BOOL ret;
HRESULT hr;
SCRIPT_CACHE sc = NULL;
- WORD glyphs[4];
+ WORD glyphs[4], logclust[4];
SCRIPT_VISATTR attrs[4];
SCRIPT_ITEM items[2];
int nb, widths[4];
+ GOFFSET offset[4];
+ ABC abc[4];
hr = ScriptItemize(NULL, 4, 2, NULL, NULL, items, NULL);
ok(hr == E_INVALIDARG, "ScriptItemize should return E_INVALIDARG not %08x\n", hr);
@@ -65,19 +67,35 @@ static void test_ScriptShape(HDC hdc)
ok(hr == E_PENDING, "ScriptShape should return E_PENDING not %08x\n", hr);
hr = ScriptShape(hdc, &sc, test1, 4, 4, &items[0].a, glyphs, NULL, attrs, &nb);
+ ok(!hr ||
+ hr == E_INVALIDARG, /* Vista, W2K8 */
+ "ScriptShape should return S_OK or E_INVALIDARG, not %08x\n", hr);
+ ok(items[0].a.fNoGlyphIndex == FALSE, "fNoGlyphIndex TRUE\n");
+
+ hr = ScriptShape(hdc, &sc, test1, 4, 4, &items[0].a, glyphs, logclust, attrs, &nb);
ok(!hr, "ScriptShape should return S_OK not %08x\n", hr);
ok(items[0].a.fNoGlyphIndex == FALSE, "fNoGlyphIndex TRUE\n");
- hr = ScriptShape(NULL, &sc, test1, 4, 4, &items[0].a, glyphs, NULL, attrs, &nb);
+ hr = ScriptShape(NULL, &sc, test1, 4, 4, &items[0].a, glyphs, logclust, attrs, &nb);
ok(!hr, "ScriptShape should return S_OK not %08x\n", hr);
hr = ScriptPlace(hdc, &sc, glyphs, 4, NULL, &items[0].a, widths, NULL, NULL);
ok(hr == E_INVALIDARG, "ScriptPlace should return E_INVALIDARG not %08x\n", hr);
hr = ScriptPlace(NULL, &sc, glyphs, 4, attrs, &items[0].a, widths, NULL, NULL);
+ ok(hr == E_PENDING ||
+ hr == E_INVALIDARG, /* Vista, W2K8 */
+ "ScriptPlace should return E_PENDING or E_INVALIDARG, not %08x\n", hr);
+
+ hr = ScriptPlace(NULL, &sc, glyphs, 4, attrs, &items[0].a, widths, offset, NULL);
ok(hr == E_PENDING, "ScriptPlace should return E_PENDING not %08x\n", hr);
- hr = ScriptPlace(hdc, &sc, glyphs, 4, attrs, &items[0].a, widths, NULL, NULL);
+ hr = ScriptPlace(NULL, &sc, glyphs, 4, attrs, &items[0].a, widths, NULL, abc);
+ ok(hr == E_PENDING ||
+ hr == E_INVALIDARG, /* Vista, W2K8 */
+ "ScriptPlace should return E_PENDING or E_INVALIDARG, not %08x\n", hr);
+
+ hr = ScriptPlace(hdc, &sc, glyphs, 4, attrs, &items[0].a, widths, offset, NULL);
ok(!hr, "ScriptPlace should return S_OK not %08x\n", hr);
ok(items[0].a.fNoGlyphIndex == FALSE, "fNoGlyphIndex TRUE\n");
@@ -1099,184 +1117,6 @@ static void test_ScriptLayout(void)
}
}
-static const struct
-{
- LGRPID group;
- LCID lcid;
- SCRIPT_DIGITSUBSTITUTE sds;
- DWORD uDefaultLanguage;
- DWORD fContextDigits;
- WORD fDigitSubstitute;
-}
-subst_data[] =
-{
- { 0x01, 0x00403, { 9, 3, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00406, { 9, 6, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00407, { 9, 7, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00409, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0040a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0040b, { 9, 11, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0040c, { 9, 12, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0040f, { 9, 15, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00410, { 9, 16, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00413, { 9, 19, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00414, { 9, 20, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00416, { 9, 22, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0041d, { 9, 29, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00421, { 9, 33, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0042d, { 9, 45, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00432, { 9, 50, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00434, { 9, 52, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00435, { 9, 53, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00436, { 9, 54, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00438, { 9, 56, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0043a, { 9, 58, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0043b, { 9, 59, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0043e, { 9, 62, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00441, { 9, 65, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00452, { 9, 82, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00456, { 9, 86, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0046b, { 9, 107, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0046c, { 9, 108, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00481, { 9, 129, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00807, { 9, 7, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00809, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0080a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0080c, { 9, 12, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00810, { 9, 16, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00813, { 9, 19, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00814, { 9, 20, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00816, { 9, 22, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0081d, { 9, 29, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0083b, { 9, 59, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0083e, { 9, 62, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0086b, { 9, 107, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00c07, { 9, 7, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00c09, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00c0a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00c0c, { 9, 12, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00c3b, { 9, 59, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x00c6b, { 9, 107, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x01007, { 9, 7, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x01009, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0100a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0100c, { 9, 12, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0103b, { 9, 59, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x01407, { 9, 7, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x01409, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0140a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0140c, { 9, 12, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0143b, { 9, 59, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x01809, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0180a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0180c, { 9, 12, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0183b, { 9, 59, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x01c09, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x01c0a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x01c3b, { 9, 59, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x02009, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0200a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0203b, { 9, 59, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x02409, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0240a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0243b, { 9, 59, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x02809, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0280a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x02c09, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x02c0a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x03009, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0300a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x03409, { 9, 9, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0340a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0380a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x03c0a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0400a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0440a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0480a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x04c0a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x0500a, { 9, 10, 1, 0 }, 9, 0, 0 },
- { 0x01, 0x10407, { 9, 7, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x00405, { 9, 5, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x0040e, { 9, 14, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x00415, { 9, 21, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x00418, { 9, 24, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x0041a, { 9, 26, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x0041b, { 9, 27, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x0041c, { 9, 28, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x00424, { 9, 36, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x0081a, { 9, 26, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x0101a, { 9, 26, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x0141a, { 9, 26, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x0181a, { 9, 26, 1, 0 }, 9, 0, 0 },
- { 0x02, 0x1040e, { 9, 14, 1, 0 }, 9, 0, 0 },
- { 0x03, 0x00425, { 9, 37, 1, 0 }, 9, 0, 0 },
- { 0x03, 0x00426, { 9, 38, 1, 0 }, 9, 0, 0 },
- { 0x03, 0x00427, { 9, 39, 1, 0 }, 9, 0, 0 },
- { 0x04, 0x00408, { 9, 8, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x00402, { 9, 2, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x00419, { 9, 25, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x00422, { 9, 34, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x00423, { 9, 35, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x0042f, { 9, 47, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x0043f, { 9, 63, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x00440, { 9, 64, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x00444, { 9, 68, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x00450, { 9, 80, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x0082c, { 9, 44, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x00843, { 9, 67, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x00c1a, { 9, 26, 1, 0 }, 9, 0, 0 },
- { 0x05, 0x01c1a, { 9, 26, 1, 0 }, 9, 0, 0 },
- { 0x06, 0x0041f, { 9, 31, 1, 0 }, 9, 0, 0 },
- { 0x06, 0x0042c, { 9, 44, 1, 0 }, 9, 0, 0 },
- { 0x06, 0x00443, { 9, 67, 1, 0 }, 9, 0, 0 },
- { 0x07, 0x00411, { 9, 17, 1, 0 }, 9, 0, 0 },
- { 0x08, 0x00412, { 9, 18, 1, 0 }, 9, 0, 0 },
- { 0x09, 0x00404, { 9, 4, 1, 0 }, 9, 0, 0 },
- { 0x09, 0x00c04, { 9, 4, 1, 0 }, 9, 0, 0 },
- { 0x09, 0x01404, { 9, 4, 1, 0 }, 9, 0, 0 },
- { 0x09, 0x21404, { 9, 4, 1, 0 }, 9, 0, 0 },
- { 0x09, 0x30404, { 9, 4, 1, 0 }, 9, 0, 0 },
- { 0x0a, 0x00804, { 9, 4, 1, 0 }, 9, 0, 0 },
- { 0x0a, 0x01004, { 9, 4, 1, 0 }, 9, 0, 0 },
- { 0x0a, 0x20804, { 9, 4, 1, 0 }, 9, 0, 0 },
- { 0x0a, 0x21004, { 9, 4, 1, 0 }, 9, 0, 0 },
- { 0x0b, 0x0041e, { 9, 30, 1, 0 }, 9, 0, 0 },
- { 0x0c, 0x0040d, { 9, 13, 1, 0 }, 9, 0, 0 },
- { 0x0d, 0x00401, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x00420, { 9, 32, 1, 0 }, 9, 0, 0 },
- { 0x0d, 0x00429, { 41, 41, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x0045a, { 9, 90, 1, 0 }, 9, 0, 0 },
- { 0x0d, 0x00465, { 9, 101, 1, 0 }, 9, 0, 0 },
- { 0x0d, 0x00801, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x00c01, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x01001, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x01401, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x01801, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x01c01, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x02001, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x02401, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x02801, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x02c01, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x03001, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x03401, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x03801, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x03c01, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0d, 0x04001, { 1, 1, 0, 0 }, 9, 0, 0 },
- { 0x0e, 0x0042a, { 9, 42, 1, 0 }, 9, 0, 0 },
- { 0x0f, 0x00439, { 9, 57, 1, 0 }, 9, 0, 0 },
- { 0x0f, 0x00446, { 9, 70, 1, 0 }, 9, 0, 0 },
- { 0x0f, 0x00447, { 9, 71, 1, 0 }, 9, 0, 0 },
- { 0x0f, 0x00449, { 9, 73, 1, 0 }, 9, 0, 0 },
- { 0x0f, 0x0044a, { 9, 74, 1, 0 }, 9, 0, 0 },
- { 0x0f, 0x0044b, { 9, 75, 1, 0 }, 9, 0, 0 },
- { 0x0f, 0x0044e, { 9, 78, 1, 0 }, 9, 0, 0 },
- { 0x0f, 0x0044f, { 9, 79, 1, 0 }, 9, 0, 0 },
- { 0x0f, 0x00457, { 9, 87, 1, 0 }, 9, 0, 0 },
- { 0x10, 0x00437, { 9, 55, 1, 0 }, 9, 0, 0 },
- { 0x10, 0x10437, { 9, 55, 1, 0 }, 9, 0, 0 },
- { 0x11, 0x0042b, { 9, 43, 1, 0 }, 9, 0, 0 }
-};
-
static BOOL CALLBACK enum_proc(LGRPID group, LCID lcid, LPSTR locale, LONG_PTR lparam)
{
HRESULT hr;
@@ -1284,7 +1124,6 @@ static BOOL CALLBACK enum_proc(LGRPID group, LCID lcid, LPSTR locale, LONG_PTR l
SCRIPT_CONTROL sc;
SCRIPT_STATE ss;
LCID lcid_old;
- unsigned int i;
if (!IsValidLocale(lcid, LCID_INSTALLED)) return TRUE;
@@ -1301,21 +1140,6 @@ static BOOL CALLBACK enum_proc(LGRPID group, LCID lcid, LPSTR locale, LONG_PTR l
hr = ScriptApplyDigitSubstitution(&sds, &sc, &ss);
ok(hr == S_OK, "ScriptApplyDigitSubstitution failed: 0x%08x\n", hr);
- for (i = 0; i < sizeof(subst_data)/sizeof(subst_data[0]); i++)
- {
- if (group == subst_data[i].group && lcid == subst_data[i].lcid)
- {
- ok(!memcmp(&sds, &subst_data[i].sds, sizeof(sds)),
- "substitution data does not match\n");
-
- ok(sc.uDefaultLanguage == subst_data[i].uDefaultLanguage,
- "sc.uDefaultLanguage does not match\n");
- ok(sc.fContextDigits == subst_data[i].fContextDigits,
- "sc.fContextDigits does not match\n");
- ok(ss.fDigitSubstitute == subst_data[i].fDigitSubstitute,
- "ss.fDigitSubstitute does not match\n");
- }
- }
SetThreadLocale(lcid_old);
return TRUE;
}
@@ -1359,6 +1183,12 @@ static void test_digit_substitution(void)
for (i = 0; i < sizeof(groups)/sizeof(groups[0]); i++)
{
ret = pEnumLanguageGroupLocalesA(enum_proc, groups[i], 0, 0);
+ if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ win_skip("EnumLanguageGroupLocalesA not implemented on this platform\n");
+ break;
+ }
+
ok(ret, "EnumLanguageGroupLocalesA failed unexpectedly: %u\n", GetLastError());
}
}
diff --git a/rostests/winetests/wininet/ftp.c b/rostests/winetests/wininet/ftp.c
index a785fa983f4..b4de4e184b6 100644
--- a/rostests/winetests/wininet/ftp.c
+++ b/rostests/winetests/wininet/ftp.c
@@ -707,7 +707,7 @@ static void test_command(HINTERNET hFtp, HINTERNET hConnect)
if (!pFtpCommandA)
{
- skip("FtpCommandA() is not available. Skipping the Ftp command tests\n");
+ win_skip("FtpCommandA() is not available. Skipping the Ftp command tests\n");
return;
}
@@ -813,7 +813,7 @@ static void test_get_current_dir(HINTERNET hFtp, HINTERNET hConnect)
if (!pFtpCommandA)
{
- skip("FtpCommandA() is not available. Skipping the Ftp get_current_dir tests\n");
+ win_skip("FtpCommandA() is not available. Skipping the Ftp get_current_dir tests\n");
return;
}
diff --git a/rostests/winetests/wininet/http.c b/rostests/winetests/wininet/http.c
index 5fd45d5d069..e3c33bd8748 100644
--- a/rostests/winetests/wininet/http.c
+++ b/rostests/winetests/wininet/http.c
@@ -84,7 +84,8 @@ static BOOL first_connection_to_test_url = TRUE;
#define CHECK_NOTIFIED2(status, num) \
do { \
- ok(notified[status] == (num), "expected status %d (%s) %d times, received %d times\n", \
+ ok(notified[status] + optional[status] == (num), \
+ "expected status %d (%s) %d times, received %d times\n", \
status, status < MAX_INTERNET_STATUS && status_string[status][0] != 0 ? \
status_string[status] : "unknown", (num), notified[status]); \
CLEAR_NOTIFIED(status); \
@@ -349,12 +350,12 @@ static void InternetReadFile_test(int flags)
if (flags & INTERNET_FLAG_ASYNC)
WaitForSingleObject(hCompleteEvent, INFINITE);
- todo_wine if (first_connection_to_test_url)
+ if (first_connection_to_test_url)
{
CHECK_NOTIFIED(INTERNET_STATUS_RESOLVING_NAME);
CHECK_NOTIFIED(INTERNET_STATUS_NAME_RESOLVED);
}
- else
+ else todo_wine
{
CHECK_NOT_NOTIFIED(INTERNET_STATUS_RESOLVING_NAME);
CHECK_NOT_NOTIFIED(INTERNET_STATUS_NAME_RESOLVED);
@@ -446,8 +447,8 @@ static void InternetReadFile_test(int flags)
if (length == 0)
break;
}
- todo_wine CHECK_NOTIFIED2(INTERNET_STATUS_CLOSING_CONNECTION, 2);
- todo_wine CHECK_NOTIFIED2(INTERNET_STATUS_CONNECTION_CLOSED, 2);
+ CHECK_NOTIFIED2(INTERNET_STATUS_CLOSING_CONNECTION, 2);
+ CHECK_NOTIFIED2(INTERNET_STATUS_CONNECTION_CLOSED, 2);
abort:
trace("aborting\n");
SET_EXPECT2(INTERNET_STATUS_HANDLE_CLOSING, (hor != 0x0) + (hic != 0x0));
@@ -567,8 +568,8 @@ static void InternetReadFileExA_test(int flags)
SET_EXPECT2(INTERNET_STATUS_REQUEST_SENT, 2);
SET_EXPECT2(INTERNET_STATUS_RECEIVING_RESPONSE, 2);
SET_EXPECT2(INTERNET_STATUS_RESPONSE_RECEIVED, 2);
- SET_EXPECT2(INTERNET_STATUS_CLOSING_CONNECTION, 2);
- SET_EXPECT2(INTERNET_STATUS_CONNECTION_CLOSED, 2);
+ SET_OPTIONAL2(INTERNET_STATUS_CLOSING_CONNECTION, 2);
+ SET_OPTIONAL2(INTERNET_STATUS_CONNECTION_CLOSED, 2);
SET_EXPECT(INTERNET_STATUS_REDIRECT);
SET_OPTIONAL(INTERNET_STATUS_CONNECTING_TO_SERVER);
SET_OPTIONAL(INTERNET_STATUS_CONNECTED_TO_SERVER);
@@ -605,8 +606,8 @@ static void InternetReadFileExA_test(int flags)
CHECK_NOTIFIED2(INTERNET_STATUS_REQUEST_SENT, 2);
CHECK_NOTIFIED2(INTERNET_STATUS_RECEIVING_RESPONSE, 2);
CHECK_NOTIFIED2(INTERNET_STATUS_RESPONSE_RECEIVED, 2);
- todo_wine CHECK_NOTIFIED2(INTERNET_STATUS_CLOSING_CONNECTION, 2);
- todo_wine CHECK_NOTIFIED2(INTERNET_STATUS_CONNECTION_CLOSED, 2);
+ CHECK_NOTIFIED2(INTERNET_STATUS_CLOSING_CONNECTION, 2);
+ CHECK_NOTIFIED2(INTERNET_STATUS_CONNECTION_CLOSED, 2);
CHECK_NOTIFIED(INTERNET_STATUS_REDIRECT);
if (flags & INTERNET_FLAG_ASYNC)
CHECK_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
@@ -754,8 +755,12 @@ abort:
Sleep(100);
CHECK_NOTIFIED2(INTERNET_STATUS_HANDLE_CLOSING, (hor != 0x0) + (hic != 0x0));
}
+ /* to enable once Wine is fixed to never send it
CHECK_NOT_NOTIFIED(INTERNET_STATUS_CLOSING_CONNECTION);
CHECK_NOT_NOTIFIED(INTERNET_STATUS_CONNECTION_CLOSED);
+ */
+ CLEAR_NOTIFIED(INTERNET_STATUS_CLOSING_CONNECTION);
+ CLEAR_NOTIFIED(INTERNET_STATUS_CONNECTION_CLOSED);
CloseHandle(hCompleteEvent);
first_connection_to_test_url = FALSE;
}
@@ -766,7 +771,7 @@ static void InternetOpenUrlA_test(void)
char buffer[0x400];
DWORD size, readbytes, totalbytes=0;
BOOL ret;
-
+
myhinternet = InternetOpen("Winetest",0,NULL,NULL,INTERNET_FLAG_NO_CACHE_WRITE);
ok((myhinternet != 0), "InternetOpen failed, error %u\n",GetLastError());
size = 0x400;
@@ -1033,7 +1038,7 @@ static void HttpHeaders_test(void)
strcpy(buffer,"Warning");
ok(HttpQueryInfo(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS,
buffer,&len,&index)==0,"Warning hearder reported as Existing\n");
-
+
ok(HttpAddRequestHeaders(hRequest,"Warning:test1",-1,HTTP_ADDREQ_FLAG_ADD),
"Failed to add new header\n");
@@ -1179,7 +1184,7 @@ static void HttpHeaders_test(void)
strcpy(buffer,"Warning");
ok(HttpQueryInfo(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS,
buffer,&len,&index)==0,"Third Header Should Not Exist\n");
-
+
ok(HttpAddRequestHeaders(hRequest,"Warning:test4",-1,HTTP_ADDREQ_FLAG_ADD_IF_NEW)==0, "HTTP_ADDREQ_FLAG_ADD_IF_NEW replaced existing header\n");
index = 0;
@@ -1269,7 +1274,16 @@ static void HttpHeaders_test(void)
strcpy(buffer,"Warning");
ok(HttpQueryInfo(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer,&len,&index)==0,"Third Header Should Not Exist\n");
-
+ /* Ensure that blank headers are ignored and don't cause a failure */
+ ok(HttpAddRequestHeaders(hRequest,"\r\nBlankTest:value\r\n\r\n",-1, HTTP_ADDREQ_FLAG_ADD_IF_NEW), "Failed to add header with blank entries in list\n");
+
+ index = 0;
+ len = sizeof(buffer);
+ strcpy(buffer,"BlankTest");
+ ok(HttpQueryInfo(hRequest,HTTP_QUERY_CUSTOM|HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer,&len,&index),"Unable to query header\n");
+ ok(index == 1, "Index was not incremented\n");
+ ok(strcmp(buffer,"value")==0, "incorrect string was returned(%s)\n",buffer);
+
ok(InternetCloseHandle(hRequest), "Close request handle failed\n");
done:
ok(InternetCloseHandle(hConnect), "Close connect handle failed\n");
@@ -1305,6 +1319,12 @@ static const char noauthmsg[] =
"WWW-Authenticate: Basic realm=\"placebo\"\r\n"
"\r\n";
+static const char noauthmsg2[] =
+"HTTP/1.0 401 Anonymous requests or requests on unsecure channel are not allowed\r\n"
+"HTTP/1.0 401 Anonymous requests or requests on unsecure channel are not allowed"
+"\0d`0|6\n"
+"Server: winetest\r\n";
+
static const char proxymsg[] =
"HTTP/1.1 407 Proxy Authentication Required\r\n"
"Server: winetest\r\n"
@@ -1488,6 +1508,10 @@ static DWORD CALLBACK server_thread(LPVOID param)
{
send(c, okmsg2, sizeof okmsg2-1, 0);
}
+ if (strstr(buffer, "/testE"))
+ {
+ send(c, noauthmsg2, sizeof noauthmsg2-1, 0);
+ }
if (strstr(buffer, "GET /quit"))
{
send(c, okmsg, sizeof okmsg-1, 0);
@@ -1834,7 +1858,9 @@ static void test_HttpSendRequestW(int port)
ret = HttpSendRequestW(req, header, ~0u, NULL, 0);
error = GetLastError();
ok(!ret, "HttpSendRequestW succeeded\n");
- ok(error == ERROR_IO_PENDING || broken(error == ERROR_HTTP_HEADER_NOT_FOUND), /* IE6 */
+ ok(error == ERROR_IO_PENDING ||
+ broken(error == ERROR_HTTP_HEADER_NOT_FOUND) || /* IE6 */
+ broken(error == ERROR_INVALID_PARAMETER), /* IE5 */
"got %u expected ERROR_IO_PENDING\n", error);
InternetCloseHandle(req);
@@ -1868,6 +1894,15 @@ static void test_cookie_header(int port)
ok(!ret, "HttpQueryInfo succeeded\n");
ok(error == ERROR_HTTP_HEADER_NOT_FOUND, "got %u expected ERROR_HTTP_HEADER_NOT_FOUND\n", error);
+ ret = HttpAddRequestHeaders(req, "Cookie: cookie=not biscuit\r\n", ~0u, HTTP_ADDREQ_FLAG_ADD);
+ ok(ret, "HttpAddRequestHeaders failed: %u\n", GetLastError());
+
+ buffer[0] = 0;
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(req, HTTP_QUERY_COOKIE | HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &size, NULL);
+ ok(ret, "HttpQueryInfo failed: %u\n", GetLastError());
+ ok(!strcmp(buffer, "cookie=not biscuit"), "got '%s' expected \'cookie=not biscuit\'\n", buffer);
+
ret = HttpSendRequest(req, NULL, 0, NULL, 0);
ok(ret, "HttpSendRequest failed: %u\n", GetLastError());
@@ -1917,6 +1952,49 @@ static void test_basic_authentication(int port)
InternetCloseHandle(session);
}
+static void test_invalid_response_headers(int port)
+{
+ HINTERNET session, connect, request;
+ DWORD size, status;
+ BOOL ret;
+ char buffer[256];
+
+ session = InternetOpen("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
+ ok(session != NULL, "InternetOpen failed\n");
+
+ connect = InternetConnect(session, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
+ ok(connect != NULL, "InternetConnect failed\n");
+
+ request = HttpOpenRequest(connect, NULL, "/testE", NULL, NULL, NULL, 0, 0);
+ ok(request != NULL, "HttpOpenRequest failed\n");
+
+ ret = HttpSendRequest(request, NULL, 0, NULL, 0);
+ ok(ret, "HttpSendRequest failed %u\n", GetLastError());
+
+ status = 0;
+ size = sizeof(status);
+ ret = HttpQueryInfo( request, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL );
+ ok(ret, "HttpQueryInfo failed\n");
+ ok(status == 401, "unexpected status %u\n", status);
+
+ buffer[0] = 0;
+ size = sizeof(buffer);
+ ret = HttpQueryInfo( request, HTTP_QUERY_RAW_HEADERS, buffer, &size, NULL);
+ ok(ret, "HttpQueryInfo failed\n");
+ ok(!strcmp(buffer, "HTTP/1.0 401 Anonymous requests or requests on unsecure channel are not allowed"),
+ "headers wrong \"%s\"\n", buffer);
+
+ buffer[0] = 0;
+ size = sizeof(buffer);
+ ret = HttpQueryInfo( request, HTTP_QUERY_SERVER, buffer, &size, NULL);
+ ok(ret, "HttpQueryInfo failed\n");
+ ok(!strcmp(buffer, "winetest"), "server wrong \"%s\"\n", buffer);
+
+ InternetCloseHandle(request);
+ InternetCloseHandle(connect);
+ InternetCloseHandle(session);
+}
+
static void test_HttpQueryInfo(int port)
{
HINTERNET hi, hc, hr;
@@ -2050,6 +2128,7 @@ static void test_http_connection(void)
test_http1_1(si.port);
test_cookie_header(si.port);
test_basic_authentication(si.port);
+ test_invalid_response_headers(si.port);
test_HttpQueryInfo(si.port);
test_HttpSendRequestW(si.port);
@@ -2226,6 +2305,197 @@ static void test_open_url_async(void)
CloseHandle(ctx.event);
}
+enum api
+{
+ internet_connect = 1,
+ http_open_request,
+ http_send_request_ex,
+ internet_writefile,
+ http_end_request,
+ internet_close_handle
+};
+
+struct notification
+{
+ enum api function; /* api responsible for notification */
+ unsigned int status; /* status received */
+ int async; /* delivered from another thread? */
+ int todo;
+};
+
+struct info
+{
+ enum api function;
+ const struct notification *test;
+ unsigned int count;
+ unsigned int index;
+ HANDLE wait;
+ DWORD thread;
+ unsigned int line;
+};
+
+static CRITICAL_SECTION notification_cs;
+
+static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DWORD status, LPVOID buffer, DWORD buflen )
+{
+ BOOL status_ok, function_ok;
+ struct info *info = (struct info *)context;
+ unsigned int i;
+
+ EnterCriticalSection( ¬ification_cs );
+
+ if (status == INTERNET_STATUS_HANDLE_CREATED)
+ {
+ DWORD size = sizeof(struct info *);
+ HttpQueryInfoA( handle, INTERNET_OPTION_CONTEXT_VALUE, &info, &size, 0 );
+ }
+ i = info->index;
+ if (i >= info->count)
+ {
+ LeaveCriticalSection( ¬ification_cs );
+ return;
+ }
+
+ status_ok = (info->test[i].status == status);
+ function_ok = (info->test[i].function == info->function);
+
+ if (!info->test[i].todo)
+ {
+ ok( status_ok, "%u: expected status %u got %u\n", info->line, info->test[i].status, status );
+ ok( function_ok, "%u: expected function %u got %u\n", info->line, info->test[i].function, info->function );
+
+ if (info->test[i].async)
+ ok(info->thread != GetCurrentThreadId(), "%u: expected thread %u got %u\n",
+ info->line, info->thread, GetCurrentThreadId());
+ }
+ else
+ {
+ todo_wine ok( status_ok, "%u: expected status %u got %u\n", info->line, info->test[i].status, status );
+ if (status_ok)
+ todo_wine ok( function_ok, "%u: expected function %u got %u\n", info->line, info->test[i].function, info->function );
+ }
+ if (i == info->count - 1 || info->test[i].function != info->test[i + 1].function) SetEvent( info->wait );
+ info->index++;
+
+ LeaveCriticalSection( ¬ification_cs );
+}
+
+static void setup_test( struct info *info, enum api function, unsigned int line )
+{
+ info->function = function;
+ info->line = line;
+}
+
+static const struct notification async_send_request_ex_test[] =
+{
+ { internet_connect, INTERNET_STATUS_HANDLE_CREATED, 0 },
+ { http_open_request, INTERNET_STATUS_HANDLE_CREATED, 0 },
+ { http_send_request_ex, INTERNET_STATUS_RESOLVING_NAME, 1 },
+ { http_send_request_ex, INTERNET_STATUS_NAME_RESOLVED, 1 },
+ { http_send_request_ex, INTERNET_STATUS_CONNECTING_TO_SERVER, 1 },
+ { http_send_request_ex, INTERNET_STATUS_CONNECTED_TO_SERVER, 1 },
+ { http_send_request_ex, INTERNET_STATUS_SENDING_REQUEST, 1 },
+ { http_send_request_ex, INTERNET_STATUS_REQUEST_SENT, 1 },
+ { http_send_request_ex, INTERNET_STATUS_REQUEST_COMPLETE, 1 },
+ { internet_writefile, INTERNET_STATUS_SENDING_REQUEST, 0 },
+ { internet_writefile, INTERNET_STATUS_REQUEST_SENT, 0 },
+ { http_end_request, INTERNET_STATUS_RECEIVING_RESPONSE, 1 },
+ { http_end_request, INTERNET_STATUS_RESPONSE_RECEIVED, 1 },
+ { http_end_request, INTERNET_STATUS_REQUEST_COMPLETE, 1 },
+ { internet_close_handle, INTERNET_STATUS_HANDLE_CLOSING, 0, 1 },
+ { internet_close_handle, INTERNET_STATUS_HANDLE_CLOSING, 0, 1 }
+};
+
+static void test_async_HttpSendRequestEx(void)
+{
+ BOOL ret;
+ HINTERNET ses, req, con;
+ struct info info;
+ DWORD size, written, error;
+ INTERNET_BUFFERSA b;
+ static const char *accept[2] = {"*/*", NULL};
+ static char data[] = "Public ID=codeweavers";
+ char buffer[32];
+
+ InitializeCriticalSection( ¬ification_cs );
+
+ info.test = async_send_request_ex_test;
+ info.count = sizeof(async_send_request_ex_test)/sizeof(async_send_request_ex_test[0]);
+ info.index = 0;
+ info.wait = CreateEvent( NULL, FALSE, FALSE, NULL );
+ info.thread = GetCurrentThreadId();
+
+ ses = InternetOpen( "winetest", 0, NULL, NULL, INTERNET_FLAG_ASYNC );
+ ok( ses != NULL, "InternetOpen failed\n" );
+
+ pInternetSetStatusCallbackA( ses, check_notification );
+
+ setup_test( &info, internet_connect, __LINE__ );
+ con = InternetConnect( ses, "crossover.codeweavers.com", 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD_PTR)&info );
+ ok( con != NULL, "InternetConnect failed %u\n", GetLastError() );
+
+ WaitForSingleObject( info.wait, 10000 );
+
+ setup_test( &info, http_open_request, __LINE__ );
+ req = HttpOpenRequest( con, "POST", "posttest.php", NULL, NULL, accept, 0, (DWORD_PTR)&info );
+ ok( req != NULL, "HttpOpenRequest failed %u\n", GetLastError() );
+
+ WaitForSingleObject( info.wait, 10000 );
+
+ memset( &b, 0, sizeof(INTERNET_BUFFERSA) );
+ b.dwStructSize = sizeof(INTERNET_BUFFERSA);
+ b.lpcszHeader = "Content-Type: application/x-www-form-urlencoded";
+ b.dwHeadersLength = strlen( b.lpcszHeader );
+ b.dwBufferTotal = strlen( data );
+
+ setup_test( &info, http_send_request_ex, __LINE__ );
+ ret = HttpSendRequestExA( req, &b, NULL, 0x28, 0 );
+ ok( !ret && GetLastError() == ERROR_IO_PENDING, "HttpSendRequestExA failed %d %u\n", ret, GetLastError() );
+
+ WaitForSingleObject( info.wait, 10000 );
+
+ size = sizeof(buffer);
+ SetLastError( 0xdeadbeef );
+ ret = HttpQueryInfoA( req, HTTP_QUERY_CONTENT_ENCODING, buffer, &size, 0 );
+ error = GetLastError();
+ ok( !ret, "HttpQueryInfoA failed %u\n", GetLastError() );
+ todo_wine
+ ok( error == ERROR_INTERNET_INCORRECT_HANDLE_STATE,
+ "expected ERROR_INTERNET_INCORRECT_HANDLE_STATE got %u\n", error );
+
+ written = 0;
+ size = strlen( data );
+ setup_test( &info, internet_writefile, __LINE__ );
+ ret = InternetWriteFile( req, data, size, &written );
+ ok( ret, "InternetWriteFile failed %u\n", GetLastError() );
+ ok( written == size, "expected %u got %u\n", written, size );
+
+ WaitForSingleObject( info.wait, 10000 );
+
+ SetLastError( 0xdeadbeef );
+ ret = HttpEndRequestA( req, (void *)data, 0x28, 0 );
+ error = GetLastError();
+ ok( !ret, "HttpEndRequestA succeeded\n" );
+ ok( error == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", error );
+
+ SetLastError( 0xdeadbeef );
+ setup_test( &info, http_end_request, __LINE__ );
+ ret = HttpEndRequestA( req, NULL, 0x28, 0 );
+ error = GetLastError();
+ ok( !ret, "HttpEndRequestA succeeded\n" );
+ ok( error == ERROR_IO_PENDING, "expected ERROR_IO_PENDING got %u\n", error );
+
+ WaitForSingleObject( info.wait, 10000 );
+
+ setup_test( &info, internet_close_handle, __LINE__ );
+ InternetCloseHandle( req );
+ InternetCloseHandle( con );
+ InternetCloseHandle( ses );
+
+ WaitForSingleObject( info.wait, 10000 );
+ CloseHandle( info.wait );
+}
+
#define STATUS_STRING(status) \
memcpy(status_string[status], #status, sizeof(CHAR) * \
(strlen(#status) < MAX_STATUS_NAME ? \
@@ -2282,6 +2552,7 @@ START_TEST(http)
InternetReadFile_test(0);
InternetReadFileExA_test(INTERNET_FLAG_ASYNC);
test_open_url_async();
+ test_async_HttpSendRequestEx();
}
InternetOpenRequest_test();
test_http_cache();
diff --git a/rostests/winetests/wininet/internet.c b/rostests/winetests/wininet/internet.c
index fe3f4778f3a..176f3d8f648 100644
--- a/rostests/winetests/wininet/internet.c
+++ b/rostests/winetests/wininet/internet.c
@@ -27,6 +27,10 @@
#include "wine/test.h"
+static BOOL (WINAPI *pCreateUrlCacheContainerA)(DWORD, DWORD, DWORD, DWORD,
+ DWORD, DWORD, DWORD, DWORD);
+static BOOL (WINAPI *pCreateUrlCacheContainerW)(DWORD, DWORD, DWORD, DWORD,
+ DWORD, DWORD, DWORD, DWORD);
static BOOL (WINAPI *pInternetTimeFromSystemTimeA)(CONST SYSTEMTIME *,DWORD ,LPSTR ,DWORD);
static BOOL (WINAPI *pInternetTimeFromSystemTimeW)(CONST SYSTEMTIME *,DWORD ,LPWSTR ,DWORD);
static BOOL (WINAPI *pInternetTimeToSystemTimeA)(LPCSTR ,SYSTEMTIME *,DWORD);
@@ -193,7 +197,7 @@ static void test_InternetQueryOptionA(void)
ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code %d\n", err);
HeapFree(GetProcessHeap(),0,buffer);
- hurl = InternetConnectA(hinet,"www.winehq.com",INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
+ hurl = InternetConnectA(hinet,"www.winehq.org",INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0);
SetLastError(0xdeadbeef);
len=0;
@@ -268,6 +272,8 @@ static void test_complicated_cookie(void)
ok(ret == TRUE,"InternetSetCookie failed\n");
ret = InternetSetCookie("http://www.example.com/bar/",NULL,"M=N; domain=.example.com; path=/foo/");
ok(ret == TRUE,"InternetSetCookie failed\n");
+ ret = InternetSetCookie("http://www.example.com/bar/",NULL,"O=P; secure; path=/bar");
+ ok(ret == TRUE,"InternetSetCookie failed\n");
len = 1024;
ret = InternetGetCookie("http://testing.example.com", NULL, buffer, &len);
@@ -278,6 +284,7 @@ static void test_complicated_cookie(void)
ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
+ ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
len = 1024;
ret = InternetGetCookie("http://testing.example.com/foobar", NULL, buffer, &len);
@@ -288,6 +295,7 @@ static void test_complicated_cookie(void)
ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
+ ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
len = 1024;
ret = InternetGetCookie("http://testing.example.com/foobar/", NULL, buffer, &len);
@@ -298,6 +306,7 @@ static void test_complicated_cookie(void)
ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
+ ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
len = 1024;
ret = InternetGetCookie("http://testing.example.com/foo/bar", NULL, buffer, &len);
@@ -308,6 +317,7 @@ static void test_complicated_cookie(void)
ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
ok(strstr(buffer,"M=N")!=NULL,"M=N missing\n");
+ ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
len = 1024;
ret = InternetGetCookie("http://testing.example.com/barfoo", NULL, buffer, &len);
@@ -318,6 +328,7 @@ static void test_complicated_cookie(void)
ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
+ ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
len = 1024;
ret = InternetGetCookie("http://testing.example.com/barfoo/", NULL, buffer, &len);
@@ -328,6 +339,7 @@ static void test_complicated_cookie(void)
ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
ok(strstr(buffer,"K=L")==NULL,"K=L present\n");
ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
+ ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
len = 1024;
ret = InternetGetCookie("http://testing.example.com/bar/foo", NULL, buffer, &len);
@@ -338,6 +350,7 @@ static void test_complicated_cookie(void)
ok(strstr(buffer,"I=J")!=NULL,"I=J missing\n");
ok(strstr(buffer,"K=L")!=NULL,"K=L missing\n");
ok(strstr(buffer,"M=N")==NULL,"M=N present\n");
+ ok(strstr(buffer,"O=P")==NULL,"O=P present\n");
}
static void test_null(void)
@@ -352,7 +365,13 @@ static void test_null(void)
BOOL r;
DWORD sz;
+ SetLastError(0xdeadbeef);
hi = InternetOpenW(NULL, 0, NULL, NULL, 0);
+ if (hi == NULL && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ win_skip("Internet*W functions are not implemented\n");
+ return;
+ }
ok(hi != NULL, "open failed\n");
hc = InternetConnectW(hi, NULL, 0, NULL, NULL, 0, 0, 0);
@@ -642,8 +661,13 @@ static void test_IsDomainLegalCookieDomainW(void)
SetLastError(0xdeadbeef);
ret = pIsDomainLegalCookieDomainW(NULL, NULL);
error = GetLastError();
+ if (!ret && error == ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ win_skip("IsDomainLegalCookieDomainW is not implemented\n");
+ return;
+ }
ok(!ret ||
- broken(ret), /* Win98, NT4, W2K, XP (some) */
+ broken(ret), /* IE6 */
"IsDomainLegalCookieDomainW succeeded\n");
ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMETER\n", error);
@@ -664,7 +688,7 @@ static void test_IsDomainLegalCookieDomainW(void)
error = GetLastError();
ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
ok(error == ERROR_INVALID_NAME ||
- broken(error == ERROR_INVALID_PARAMETER), /* Win98, NT4, W2K, XP (some) */
+ broken(error == ERROR_INVALID_PARAMETER), /* IE6 */
"got %u expected ERROR_INVALID_NAME\n", error);
SetLastError(0xdeadbeef);
@@ -672,7 +696,7 @@ static void test_IsDomainLegalCookieDomainW(void)
error = GetLastError();
ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
ok(error == ERROR_INVALID_NAME ||
- broken(error == ERROR_INVALID_PARAMETER), /* Win98, NT4, W2K, XP (some) */
+ broken(error == ERROR_INVALID_PARAMETER), /* IE6 */
"got %u expected ERROR_INVALID_NAME\n", error);
SetLastError(0xdeadbeef);
@@ -680,7 +704,7 @@ static void test_IsDomainLegalCookieDomainW(void)
error = GetLastError();
ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
ok(error == ERROR_INVALID_NAME ||
- broken(error == 0xdeadbeef), /* Win98, NT4, W2K, XP (some) */
+ broken(error == 0xdeadbeef), /* IE6 */
"got %u expected ERROR_INVALID_NAME\n", error);
SetLastError(0xdeadbeef);
@@ -688,7 +712,7 @@ static void test_IsDomainLegalCookieDomainW(void)
error = GetLastError();
ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
ok(error == ERROR_INVALID_NAME ||
- broken(error == 0xdeadbeef), /* Win98, NT4, W2K, XP (some) */
+ broken(error == 0xdeadbeef), /* IE6 */
"got %u expected ERROR_INVALID_NAME\n", error);
SetLastError(0xdeadbeef);
@@ -702,7 +726,7 @@ static void test_IsDomainLegalCookieDomainW(void)
error = GetLastError();
ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
ok(error == ERROR_INVALID_NAME ||
- broken(error == 0xdeadbeef), /* Win98, NT4, W2K, XP (some) */
+ broken(error == 0xdeadbeef), /* IE6 */
"got %u expected ERROR_INVALID_NAME\n", error);
SetLastError(0xdeadbeef);
@@ -710,14 +734,16 @@ static void test_IsDomainLegalCookieDomainW(void)
error = GetLastError();
ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
ok(error == ERROR_INVALID_NAME ||
- broken(error == 0xdeadbeef), /* Win98, NT4, W2K, XP (some) */
+ broken(error == 0xdeadbeef), /* IE6 */
"got %u expected ERROR_INVALID_NAME\n", error);
SetLastError(0xdeadbeef);
ret = pIsDomainLegalCookieDomainW(com, gmail_com);
error = GetLastError();
ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
- ok(error == 0xdeadbeef, "got %u expected 0xdeadbeef\n", error);
+ ok(error == ERROR_SXS_KEY_NOT_FOUND ||
+ error == 0xdeadbeef, /* up to IE7 */
+ "got %u expected ERROR_SXS_KEY_NOT_FOUND or 0xdeadbeef\n", error);
ret = pIsDomainLegalCookieDomainW(gmail_com, gmail_com);
ok(ret, "IsDomainLegalCookieDomainW failed\n");
@@ -726,7 +752,11 @@ static void test_IsDomainLegalCookieDomainW(void)
ret = pIsDomainLegalCookieDomainW(gmail_co_uk, co_uk);
error = GetLastError();
ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
- ok(error == 0xdeadbeef, "got %u expected 0xdeadbeef\n", error);
+ ok(error == ERROR_SXS_KEY_NOT_FOUND || /* IE8 on XP */
+ error == ERROR_FILE_NOT_FOUND || /* IE8 on Vista */
+ error == 0xdeadbeef, /* up to IE7 */
+ "got %u expected ERROR_SXS_KEY_NOT_FOUND, ERROR_FILE_NOT_FOUND or "
+ "0xdeadbeef\n", error);
ret = pIsDomainLegalCookieDomainW(uk, co_uk);
ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
@@ -745,7 +775,7 @@ static void test_IsDomainLegalCookieDomainW(void)
error = GetLastError();
ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
ok(error == ERROR_INVALID_NAME ||
- broken(error == 0xdeadbeef), /* Win98, NT4, W2K, XP (some) */
+ broken(error == 0xdeadbeef), /* IE6 */
"got %u expected ERROR_INVALID_NAME\n", error);
ret = pIsDomainLegalCookieDomainW(gmail_com, mail_gmail_com);
@@ -770,6 +800,8 @@ START_TEST(internet)
{
HMODULE hdll;
hdll = GetModuleHandleA("wininet.dll");
+ pCreateUrlCacheContainerA = (void*)GetProcAddress(hdll, "CreateUrlCacheContainerA");
+ pCreateUrlCacheContainerW = (void*)GetProcAddress(hdll, "CreateUrlCacheContainerW");
pInternetTimeFromSystemTimeA = (void*)GetProcAddress(hdll, "InternetTimeFromSystemTimeA");
pInternetTimeFromSystemTimeW = (void*)GetProcAddress(hdll, "InternetTimeFromSystemTimeW");
pInternetTimeToSystemTimeA = (void*)GetProcAddress(hdll, "InternetTimeToSystemTimeA");
@@ -784,7 +816,7 @@ START_TEST(internet)
test_null();
if (!pInternetTimeFromSystemTimeA)
- skip("skipping the InternetTime tests\n");
+ win_skip("skipping the InternetTime tests\n");
else
{
InternetTimeFromSystemTimeA_test();
@@ -792,8 +824,12 @@ START_TEST(internet)
InternetTimeToSystemTimeA_test();
InternetTimeToSystemTimeW_test();
}
- if (!pIsDomainLegalCookieDomainW)
- skip("skipping IsDomainLegalCookieDomainW tests\n");
+ if (pIsDomainLegalCookieDomainW &&
+ ((void*)pIsDomainLegalCookieDomainW == (void*)pCreateUrlCacheContainerA ||
+ (void*)pIsDomainLegalCookieDomainW == (void*)pCreateUrlCacheContainerW))
+ win_skip("IsDomainLegalCookieDomainW is not available on systems with IE5\n");
+ else if (!pIsDomainLegalCookieDomainW)
+ win_skip("IsDomainLegalCookieDomainW (or ordinal 117) is not available\n");
else
test_IsDomainLegalCookieDomainW();
}
diff --git a/rostests/winetests/wininet/url.c b/rostests/winetests/wininet/url.c
index c848f6bc90d..39c02863351 100644
--- a/rostests/winetests/wininet/url.c
+++ b/rostests/winetests/wininet/url.c
@@ -299,14 +299,25 @@ static void InternetCrackUrlW_test(void)
SetLastError(0xdeadbeef);
r = InternetCrackUrlW(NULL, 0, 0, &comp );
error = GetLastError();
+ if (!r && error == ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ win_skip("InternetCrackUrlW is not implemented\n");
+ return;
+ }
ok( !r, "InternetCrackUrlW succeeded unexpectedly\n");
- ok( error == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", error);
+ ok( error == ERROR_INVALID_PARAMETER ||
+ broken(error == ERROR_INTERNET_UNRECOGNIZED_SCHEME), /* IE5 */
+ "expected ERROR_INVALID_PARAMETER got %u\n", error);
- SetLastError(0xdeadbeef);
- r = InternetCrackUrlW(url, 0, 0, NULL );
- error = GetLastError();
- ok( !r, "InternetCrackUrlW succeeded unexpectedly\n");
- ok( error == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", error);
+ if (error == ERROR_INVALID_PARAMETER)
+ {
+ /* Crashes on IE5 */
+ SetLastError(0xdeadbeef);
+ r = InternetCrackUrlW(url, 0, 0, NULL );
+ error = GetLastError();
+ ok( !r, "InternetCrackUrlW succeeded unexpectedly\n");
+ ok( error == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", error);
+ }
r = InternetCrackUrlW(url, 0, 0, &comp );
ok( r, "failed to crack url\n");
diff --git a/rostests/winetests/wintrust/asn.c b/rostests/winetests/wintrust/asn.c
index d50d2492d2a..308fb8b997d 100644
--- a/rostests/winetests/wintrust/asn.c
+++ b/rostests/winetests/wintrust/asn.c
@@ -41,7 +41,7 @@ static void test_encodeSPCFinancialCriteria(void)
if (!pCryptEncodeObjectEx)
{
- skip("CryptEncodeObjectEx() is not available. Skipping the encodeFinancialCriteria tests\n");
+ win_skip("CryptEncodeObjectEx() is not available. Skipping the encodeFinancialCriteria tests\n");
return;
}
ret = pCryptEncodeObjectEx(X509_ASN_ENCODING, SPC_FINANCIAL_CRITERIA_STRUCT,
@@ -73,7 +73,7 @@ static void test_decodeSPCFinancialCriteria(void)
if (!pCryptDecodeObjectEx)
{
- skip("CryptDecodeObjectEx() is not available. Skipping the decodeSPCFinancialCriteria tests\n");
+ win_skip("CryptDecodeObjectEx() is not available. Skipping the decodeSPCFinancialCriteria tests\n");
return;
}
@@ -123,7 +123,7 @@ static void test_encodeSPCLink(void)
if (!pCryptEncodeObjectEx)
{
- skip("CryptEncodeObjectEx() is not available. Skipping the encodeSPCLink tests\n");
+ win_skip("CryptEncodeObjectEx() is not available. Skipping the encodeSPCLink tests\n");
return;
}
@@ -215,7 +215,7 @@ static void test_decodeSPCLink(void)
if (!pCryptDecodeObjectEx)
{
- skip("CryptDecodeObjectEx() is not available. Skipping the decodeSPCLink tests\n");
+ win_skip("CryptDecodeObjectEx() is not available. Skipping the decodeSPCLink tests\n");
return;
}
@@ -325,7 +325,7 @@ static void test_encodeSPCPEImage(void)
if (!pCryptEncodeObjectEx)
{
- skip("CryptEncodeObjectEx() is not available. Skipping the encodeSPCPEImage tests\n");
+ win_skip("CryptEncodeObjectEx() is not available. Skipping the encodeSPCPEImage tests\n");
return;
}
@@ -430,7 +430,7 @@ static void test_decodeSPCPEImage(void)
if (!pCryptDecodeObjectEx)
{
- skip("CryptDecodeObjectEx() is not available. Skipping the decodeSPCPEImage tests\n");
+ win_skip("CryptDecodeObjectEx() is not available. Skipping the decodeSPCPEImage tests\n");
return;
}
@@ -556,7 +556,7 @@ static void test_encodeCatMemberInfo(void)
if (!pCryptEncodeObjectEx)
{
- skip("CryptEncodeObjectEx() is not available. Skipping the encodeCatMemberInfo tests\n");
+ win_skip("CryptEncodeObjectEx() is not available. Skipping the encodeCatMemberInfo tests\n");
return;
}
@@ -605,7 +605,7 @@ static void test_decodeCatMemberInfo(void)
if (!pCryptDecodeObjectEx)
{
- skip("CryptDecodeObjectEx() is not available. Skipping the decodeCatMemberInfo tests\n");
+ win_skip("CryptDecodeObjectEx() is not available. Skipping the decodeCatMemberInfo tests\n");
return;
}
diff --git a/rostests/winetests/wintrust/crypt.c b/rostests/winetests/wintrust/crypt.c
index 9129fa9da78..acadeadbe2d 100644
--- a/rostests/winetests/wintrust/crypt.c
+++ b/rostests/winetests/wintrust/crypt.c
@@ -206,9 +206,7 @@ static void test_context(void)
/* Proper release */
SetLastError(0xdeadbeef);
ret = pCryptCATAdminReleaseContext(hca, 0);
- ok(ret, "Expected success\n");
- ok(GetLastError() == 0xdeadbeef,
- "Expected no change in last error, got %d\n", GetLastError());
+ ok(ret, "Expected success, got FALSE with %d\n", GetLastError());
/* Try to release a second time */
SetLastError(0xdeadbeef);
@@ -854,7 +852,9 @@ static void test_cdf_parsing(void)
catcdf = pCryptCATCDFOpen(cdffileW, cdf_callback);
ok(catcdf == NULL, "CryptCATCDFOpen succeeded\n");
todo_wine
- ok(GetLastError() == ERROR_SHARING_VIOLATION, "Expected ERROR_SHARING_VIOLATION, got %d\n", GetLastError());
+ ok(GetLastError() == ERROR_SHARING_VIOLATION ||
+ broken(GetLastError() == ERROR_SUCCESS), /* win9x */
+ "Expected ERROR_SHARING_VIOLATION, got %d\n", GetLastError());
DeleteFileA(cdffileA);
/* Header and member only */
@@ -868,7 +868,9 @@ static void test_cdf_parsing(void)
catcdf = pCryptCATCDFOpen(cdffileW, cdf_callback);
ok(catcdf == NULL, "CryptCATCDFOpen succeeded\n");
todo_wine
- ok(GetLastError() == ERROR_SHARING_VIOLATION, "Expected ERROR_SHARING_VIOLATION, got %d\n", GetLastError());
+ ok(GetLastError() == ERROR_SHARING_VIOLATION ||
+ broken(GetLastError() == ERROR_SUCCESS), /* win9x */
+ "Expected ERROR_SHARING_VIOLATION, got %d\n", GetLastError());
DeleteFileA(cdffileA);
ok(!DeleteFileA(catfileA), "Didn't expect a catalog file to be created\n");
@@ -882,7 +884,9 @@ static void test_cdf_parsing(void)
catcdf = pCryptCATCDFOpen(cdffileW, cdf_callback);
ok(catcdf == NULL, "CryptCATCDFOpen succeeded\n");
todo_wine
- ok(GetLastError() == ERROR_SHARING_VIOLATION, "Expected ERROR_SHARING_VIOLATION, got %d\n", GetLastError());
+ ok(GetLastError() == ERROR_SHARING_VIOLATION ||
+ broken(GetLastError() == ERROR_SUCCESS), /* win9x */
+ "Expected ERROR_SHARING_VIOLATION, got %d\n", GetLastError());
DeleteFileA(cdffileA);
ok(!DeleteFileA(catfileA), "Didn't expect a catalog file to be created\n");
diff --git a/rostests/winetests/wintrust/register.c b/rostests/winetests/wintrust/register.c
index 8a6675cbdb4..dd266bd807d 100644
--- a/rostests/winetests/wintrust/register.c
+++ b/rostests/winetests/wintrust/register.c
@@ -66,7 +66,7 @@ static void test_AddRem_ActionID(void)
if (!pWintrustAddActionID || !pWintrustRemoveActionID)
{
- skip("WintrustAddActionID and/or WintrustRemoveActionID are not available\n");
+ win_skip("WintrustAddActionID and/or WintrustRemoveActionID are not available\n");
return;
}
@@ -176,7 +176,7 @@ static void test_AddDefaultForUsage(void)
if (!pWintrustAddDefaultForUsage)
{
- skip("WintrustAddDefaultForUsage is not available\n");
+ win_skip("WintrustAddDefaultForUsage is not available\n");
return;
}
@@ -229,7 +229,7 @@ static void test_LoadFunctionPointers(void)
if (!pWintrustLoadFunctionPointers)
{
- skip("WintrustLoadFunctionPointers is not available\n");
+ win_skip("WintrustLoadFunctionPointers is not available\n");
return;
}
SetLastError(0xdeadbeef);
@@ -278,7 +278,7 @@ static void test_RegPolicyFlags(void)
if (!pWintrustGetRegPolicyFlags || !pWintrustSetRegPolicyFlags)
{
- skip("Policy flags functions not present\n");
+ win_skip("Policy flags functions not present\n");
return;
}