diff --git a/rostests/winetests/comcat/comcat.c b/rostests/winetests/comcat/comcat.c
index 95e05ba69c9..49e5afe7c41 100644
--- a/rostests/winetests/comcat/comcat.c
+++ b/rostests/winetests/comcat/comcat.c
@@ -31,19 +31,19 @@
#define ok_ole_success(hr, func) ok(hr == S_OK, func " failed with error 0x%08x \n", hr)
-static void register_testentry(void)
+static BOOL register_testentry(void)
{
- HKEY hkey,hkey2;
-
- RegCreateKeyA(HKEY_CLASSES_ROOT,"CLSID\\{deadcafe-beed-bead-dead-cafebeaddead}",
- &hkey);
- RegSetValueA(hkey,NULL,REG_SZ,"ComCat Test key",16);
- RegCreateKeyA(hkey,
- "Implemented Categories\\{deadcafe-0000-0000-0000-000000000000}",
- &hkey2);
+ HKEY hkey = 0, hkey2 = 0;
+ DWORD ret;
+ ret = RegCreateKeyA(HKEY_CLASSES_ROOT,"CLSID\\{deadcafe-beed-bead-dead-cafebeaddead}", &hkey);
+ if (!ret) ret = RegSetValueA(hkey,NULL,REG_SZ,"ComCat Test key",16);
+ if (!ret) ret = RegCreateKeyA(hkey,
+ "Implemented Categories\\{deadcafe-0000-0000-0000-000000000000}",
+ &hkey2);
RegCloseKey(hkey);
RegCloseKey(hkey2);
+ return !ret;
}
static void unregister_testentry(void)
@@ -84,9 +84,9 @@ static void do_enum(void)
IEnumCLSID *pIEnum =(IEnumCLSID*)0xdeadcafe;
- CLSIDFromString((LPOLESTR)szCatID,the_cat);
- CLSIDFromString((LPOLESTR)szGuid,&wanted_guid);
-
+ CLSIDFromString(szCatID,the_cat);
+ CLSIDFromString(szGuid,&wanted_guid);
+
OleInitialize(NULL);
hr = CoCreateInstance(rclsid,NULL,CLSCTX_INPROC_SERVER,
@@ -106,19 +106,22 @@ static void do_enum(void)
hr = IEnumGUID_Next(pIEnum,1,the_guid, &fetched);
ok (fetched == 0,"Fetched wrong number of guids %u\n",fetched);
IEnumGUID_Release(pIEnum);
-
- register_testentry();
- hr = ICatInformation_EnumClassesOfCategories(pICat, 1, the_cat, -1, NULL,
- &pIEnum);
- ok_ole_success(hr,"ICatInformation_EnumClassesOfCategories");
- hr = IEnumGUID_Next(pIEnum,1,the_guid, &fetched);
- ok (fetched == 1,"Fetched wrong number of guids %u\n",fetched);
- ok (IsEqualGUID(the_guid,&wanted_guid),"Guids do not match\n");
+ if (register_testentry())
+ {
+ hr = ICatInformation_EnumClassesOfCategories(pICat, 1, the_cat, -1, NULL, &pIEnum);
+ ok_ole_success(hr,"ICatInformation_EnumClassesOfCategories");
+
+ hr = IEnumGUID_Next(pIEnum,1,the_guid, &fetched);
+ ok (fetched == 1,"Fetched wrong number of guids %u\n",fetched);
+ ok (IsEqualGUID(the_guid,&wanted_guid),"Guids do not match\n");
+
+ IEnumGUID_Release(pIEnum);
+ unregister_testentry();
+ }
+ else skip( "Could not register the test category\n" );
- IEnumGUID_Release(pIEnum);
ICatInformation_Release(pICat);
- unregister_testentry();
OleUninitialize();
}
diff --git a/rostests/winetests/crypt32/base64.c b/rostests/winetests/crypt32/base64.c
index 15f41c88c1e..5a260edfd6e 100644
--- a/rostests/winetests/crypt32/base64.c
+++ b/rostests/winetests/crypt32/base64.c
@@ -449,10 +449,10 @@ START_TEST(base64)
if (pCryptBinaryToStringA)
testBinaryToStringA();
else
- skip("CryptBinaryToStringA is not available\n");
+ win_skip("CryptBinaryToStringA is not available\n");
if (pCryptStringToBinaryA)
testStringToBinaryA();
else
- skip("CryptStringToBinaryA is not available\n");
+ win_skip("CryptStringToBinaryA is not available\n");
}
diff --git a/rostests/winetests/crypt32/cert.c b/rostests/winetests/crypt32/cert.c
index a22ec7cf1f7..322fa2f92d9 100644
--- a/rostests/winetests/crypt32/cert.c
+++ b/rostests/winetests/crypt32/cert.c
@@ -181,10 +181,15 @@ static void testAddCert(void)
context = NULL;
ret = CertAddEncodedCertificateToStore(0, X509_ASN_ENCODING, bigCert,
sizeof(bigCert), CERT_STORE_ADD_ALWAYS, &context);
- ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
- GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* win98 */),
+ "CertAddEncodedCertificateToStore failed: %08x\n", GetLastError());
if (context)
CertFreeCertificateContext(context);
+ if (!ret && GetLastError() == OSS_DATA_ERROR)
+ {
+ skip("bigCert can't be decoded, skipping tests\n");
+ return;
+ }
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
@@ -409,8 +414,8 @@ static void testCertProperties(void)
CRYPT_DATA_BLOB blob;
CERT_KEY_CONTEXT keyContext;
- ok(context != NULL, "CertCreateCertificateContext failed: %08x\n",
- GetLastError());
+ ok(context != NULL || broken(GetLastError() == OSS_DATA_ERROR /* win98 */),
+ "CertCreateCertificateContext failed: %08x\n", GetLastError());
if (!context)
return;
@@ -641,8 +646,13 @@ static void testDupCert(void)
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, &context);
- ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
- GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* win98 */),
+ "CertAddEncodedCertificateToStore failed: %08x\n", GetLastError());
+ if (!ret && GetLastError() == OSS_DATA_ERROR)
+ {
+ skip("bigCert can't be decoded, skipping tests\n");
+ return;
+ }
ok(context != NULL, "Expected a valid cert context\n");
if (context)
{
@@ -1014,8 +1024,13 @@ static void testFindCert(void)
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
bigCert, sizeof(bigCert), CERT_STORE_ADD_NEW, NULL);
- ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
- GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* win98 */),
+ "CertAddEncodedCertificateToStore failed: %08x\n", GetLastError());
+ if (!ret && GetLastError() == OSS_DATA_ERROR)
+ {
+ skip("bigCert can't be decoded, skipping tests\n");
+ return;
+ }
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
bigCert2, sizeof(bigCert2), CERT_STORE_ADD_NEW, NULL);
ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
@@ -1199,8 +1214,13 @@ static void testGetSubjectCert(void)
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
- ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
- GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* win98 */),
+ "CertAddEncodedCertificateToStore failed: %08x\n", GetLastError());
+ if (!ret && GetLastError() == OSS_DATA_ERROR)
+ {
+ skip("bigCert can't be decoded, skipping tests\n");
+ return;
+ }
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
bigCert2, sizeof(bigCert2), CERT_STORE_ADD_NEW, &context1);
ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
@@ -1652,12 +1672,12 @@ static void testVerifyCertSig(HCRYPTPROV csp, const CRYPT_DATA_BLOB *toBeSigned,
if (!pCryptVerifyCertificateSignatureEx)
{
- skip("no CryptVerifyCertificateSignatureEx support\n");
+ win_skip("no CryptVerifyCertificateSignatureEx support\n");
return;
}
if (!pCryptEncodeObjectEx)
{
- skip("no CryptEncodeObjectEx support\n");
+ win_skip("no CryptEncodeObjectEx support\n");
return;
}
ret = pCryptVerifyCertificateSignatureEx(0, 0, 0, NULL, 0, NULL, 0, NULL);
@@ -1877,7 +1897,7 @@ static void testCreateSelfSignCert(void)
if (!pCertCreateSelfSignCertificate)
{
- skip("CertCreateSelfSignCertificate() is not available\n");
+ win_skip("CertCreateSelfSignCertificate() is not available\n");
return;
}
@@ -2314,7 +2334,7 @@ static void testGetValidUsages(void)
if (!pCertGetValidUsages)
{
- skip("CertGetValidUsages() is not available\n");
+ win_skip("CertGetValidUsages() is not available\n");
return;
}
@@ -2855,7 +2875,7 @@ static void testAcquireCertPrivateKey(void)
if (!pCryptAcquireCertificatePrivateKey)
{
- skip("CryptAcquireCertificatePrivateKey() is not available\n");
+ win_skip("CryptAcquireCertificatePrivateKey() is not available\n");
return;
}
diff --git a/rostests/winetests/crypt32/chain.c b/rostests/winetests/crypt32/chain.c
index 34dfb6a33ad..f7efe64eec3 100644
--- a/rostests/winetests/crypt32/chain.c
+++ b/rostests/winetests/crypt32/chain.c
@@ -68,7 +68,7 @@ static void testCreateCertChainEngine(void)
if (!pCertCreateCertificateChainEngine || !pCertFreeCertificateChainEngine)
{
- skip("Cert*CertificateChainEngine() functions are not available\n");
+ win_skip("Cert*CertificateChainEngine() functions are not available\n");
return;
}
@@ -1176,14 +1176,14 @@ static void checkElementStatus(const CERT_TRUST_STATUS *expected,
todo_wine
ok(got->dwErrorStatus == expected->dwErrorStatus ||
broken((got->dwErrorStatus & ~ignore->dwErrorStatus) ==
- expected->dwErrorStatus),
+ (expected->dwErrorStatus & ~ignore->dwErrorStatus)),
"Chain %d, element [%d,%d]: expected error %08x, got %08x\n",
testIndex, chainIndex, elementIndex, expected->dwErrorStatus,
got->dwErrorStatus);
else
ok(got->dwErrorStatus == expected->dwErrorStatus ||
broken((got->dwErrorStatus & ~ignore->dwErrorStatus) ==
- expected->dwErrorStatus),
+ (expected->dwErrorStatus & ~ignore->dwErrorStatus)),
"Chain %d, element [%d,%d]: expected error %08x, got %08x\n",
testIndex, chainIndex, elementIndex, expected->dwErrorStatus,
got->dwErrorStatus);
@@ -1196,14 +1196,14 @@ static void checkElementStatus(const CERT_TRUST_STATUS *expected,
todo_wine
ok(got->dwInfoStatus == expected->dwInfoStatus ||
broken((got->dwInfoStatus & ~ignore->dwInfoStatus) ==
- expected->dwInfoStatus),
+ (expected->dwInfoStatus & ~ignore->dwInfoStatus)),
"Chain %d, element [%d,%d]: expected info %08x, got %08x\n",
testIndex, chainIndex, elementIndex, expected->dwInfoStatus,
got->dwInfoStatus);
else
ok(got->dwInfoStatus == expected->dwInfoStatus ||
broken((got->dwInfoStatus & ~ignore->dwInfoStatus) ==
- expected->dwInfoStatus),
+ (expected->dwInfoStatus & ~ignore->dwInfoStatus)),
"Chain %d, element [%d,%d]: expected info %08x, got %08x\n",
testIndex, chainIndex, elementIndex, expected->dwInfoStatus,
got->dwInfoStatus);
@@ -1249,7 +1249,11 @@ static void checkChainStatus(PCCERT_CHAIN_CONTEXT chain,
if (todo & TODO_ERROR &&
chain->TrustStatus.dwErrorStatus != chainStatus->status.dwErrorStatus)
todo_wine ok(chain->TrustStatus.dwErrorStatus ==
- chainStatus->status.dwErrorStatus,
+ chainStatus->status.dwErrorStatus ||
+ broken((chain->TrustStatus.dwErrorStatus &
+ ~chainStatus->statusToIgnore.dwErrorStatus) ==
+ (chainStatus->status.dwErrorStatus &
+ ~chainStatus->statusToIgnore.dwErrorStatus)),
"Chain %d: expected error %08x, got %08x\n",
testIndex, chainStatus->status.dwErrorStatus,
chain->TrustStatus.dwErrorStatus);
@@ -1258,14 +1262,19 @@ static void checkChainStatus(PCCERT_CHAIN_CONTEXT chain,
chainStatus->status.dwErrorStatus ||
broken((chain->TrustStatus.dwErrorStatus &
~chainStatus->statusToIgnore.dwErrorStatus) ==
- chainStatus->status.dwErrorStatus),
+ (chainStatus->status.dwErrorStatus &
+ ~chainStatus->statusToIgnore.dwErrorStatus)),
"Chain %d: expected error %08x, got %08x\n",
testIndex, chainStatus->status.dwErrorStatus,
chain->TrustStatus.dwErrorStatus);
if (todo & TODO_INFO &&
chain->TrustStatus.dwInfoStatus != chainStatus->status.dwInfoStatus)
todo_wine ok(chain->TrustStatus.dwInfoStatus ==
- chainStatus->status.dwInfoStatus,
+ chainStatus->status.dwInfoStatus ||
+ broken((chain->TrustStatus.dwInfoStatus &
+ ~chainStatus->statusToIgnore.dwInfoStatus) ==
+ (chainStatus->status.dwInfoStatus &
+ ~chainStatus->statusToIgnore.dwInfoStatus)),
"Chain %d: expected info %08x, got %08x\n",
testIndex, chainStatus->status.dwInfoStatus,
chain->TrustStatus.dwInfoStatus);
@@ -1274,7 +1283,8 @@ static void checkChainStatus(PCCERT_CHAIN_CONTEXT chain,
chainStatus->status.dwInfoStatus ||
broken((chain->TrustStatus.dwInfoStatus &
~chainStatus->statusToIgnore.dwInfoStatus) ==
- chainStatus->status.dwInfoStatus),
+ (chainStatus->status.dwInfoStatus &
+ ~chainStatus->statusToIgnore.dwInfoStatus)),
"Chain %d: expected info %08x, got %08x\n",
testIndex, chainStatus->status.dwInfoStatus,
chain->TrustStatus.dwInfoStatus);
@@ -1416,10 +1426,8 @@ static CONST_DATA_BLOB chain9[] = {
{ sizeof(chain7_1), chain7_1 },
};
static const CERT_TRUST_STATUS elementStatus9[] = {
- { CERT_TRUST_NO_ERROR,
- CERT_TRUST_HAS_NAME_MATCH_ISSUER | CERT_TRUST_HAS_PREFERRED_ISSUER },
- { CERT_TRUST_INVALID_BASIC_CONSTRAINTS,
- CERT_TRUST_HAS_NAME_MATCH_ISSUER | CERT_TRUST_HAS_PREFERRED_ISSUER },
+ { CERT_TRUST_NO_ERROR, CERT_TRUST_HAS_NAME_MATCH_ISSUER },
+ { CERT_TRUST_INVALID_BASIC_CONSTRAINTS, CERT_TRUST_HAS_NAME_MATCH_ISSUER },
{ CERT_TRUST_INVALID_BASIC_CONSTRAINTS | CERT_TRUST_IS_CYCLIC,
CERT_TRUST_HAS_NAME_MATCH_ISSUER },
};
@@ -1515,21 +1523,32 @@ static ChainCheck chainCheck[] = {
{ { CERT_TRUST_IS_NOT_TIME_NESTED, CERT_TRUST_HAS_PREFERRED_ISSUER },
{ CERT_TRUST_IS_UNTRUSTED_ROOT | CERT_TRUST_IS_NOT_TIME_VALID, 0 },
1, simpleStatus2 }, 0 },
+ /* Earlier versions of Windows incorrectly don't set
+ * CERT_TRUST_INVALID_BASIC_CONSTRAINTS on this chain.
+ */
{ { sizeof(chain3) / sizeof(chain3[0]), chain3 },
- { { CERT_TRUST_IS_NOT_TIME_NESTED, CERT_TRUST_HAS_PREFERRED_ISSUER },
+ { { CERT_TRUST_IS_NOT_TIME_NESTED | CERT_TRUST_INVALID_BASIC_CONSTRAINTS,
+ CERT_TRUST_HAS_PREFERRED_ISSUER },
{ CERT_TRUST_INVALID_BASIC_CONSTRAINTS | CERT_TRUST_IS_UNTRUSTED_ROOT |
CERT_TRUST_IS_NOT_TIME_VALID, 0 },
1, simpleStatus3 }, 0 },
+ /* Earlier versions of Windows incorrectly don't set
+ * CERT_TRUST_INVALID_BASIC_CONSTRAINTS on this chain.
+ */
{ { sizeof(chain4) / sizeof(chain4[0]), chain4 },
- { { CERT_TRUST_IS_NOT_TIME_NESTED, CERT_TRUST_HAS_PREFERRED_ISSUER },
+ { { CERT_TRUST_IS_NOT_TIME_NESTED | CERT_TRUST_INVALID_BASIC_CONSTRAINTS,
+ CERT_TRUST_HAS_PREFERRED_ISSUER },
{ CERT_TRUST_INVALID_BASIC_CONSTRAINTS | CERT_TRUST_IS_UNTRUSTED_ROOT |
CERT_TRUST_IS_NOT_TIME_VALID, 0 },
1, simpleStatus4 }, 0 },
/* Windows versions prior to Vista/2008 incorrectly set
* CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT on this chain, so ignore it.
+ * Similarly, some older versions of Windows incorrectly set
+ * CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT, ignore that too.
*/
{ { sizeof(chain5) / sizeof(chain5[0]), chain5 },
- { { CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT,
+ { { CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT |
+ CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT,
CERT_TRUST_HAS_PREFERRED_ISSUER },
{ CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT |
CERT_TRUST_IS_UNTRUSTED_ROOT, 0 }, 1, simpleStatus5 }, 0 },
@@ -1539,18 +1558,24 @@ static ChainCheck chainCheck[] = {
{ { sizeof(chain7) / sizeof(chain7[0]), chain7 },
{ { 0, CERT_TRUST_HAS_PREFERRED_ISSUER },
{ CERT_TRUST_IS_UNTRUSTED_ROOT, 0 }, 1, simpleStatus7 }, 0 },
+ /* Earlier versions of Windows incorrectly don't set
+ * CERT_TRUST_INVALID_BASIC_CONSTRAINTS on this chain.
+ */
{ { sizeof(chain8) / sizeof(chain8[0]), chain8 },
- { { CERT_TRUST_IS_NOT_TIME_NESTED, CERT_TRUST_HAS_PREFERRED_ISSUER },
+ { { CERT_TRUST_IS_NOT_TIME_NESTED | CERT_TRUST_INVALID_BASIC_CONSTRAINTS,
+ CERT_TRUST_HAS_PREFERRED_ISSUER },
{ CERT_TRUST_INVALID_BASIC_CONSTRAINTS | CERT_TRUST_IS_UNTRUSTED_ROOT |
CERT_TRUST_IS_NOT_TIME_VALID, 0 },
- 1, simpleStatus8 },
- TODO_ERROR },
+ 1, simpleStatus8 }, 0 },
+ /* Earlier versions of Windows incorrectly don't set
+ * CERT_TRUST_INVALID_BASIC_CONSTRAINTS on this chain.
+ */
{ { sizeof(chain9) / sizeof(chain9[0]), chain9 },
- { { CERT_TRUST_IS_NOT_TIME_NESTED, CERT_TRUST_HAS_PREFERRED_ISSUER },
+ { { CERT_TRUST_IS_NOT_TIME_NESTED | CERT_TRUST_INVALID_BASIC_CONSTRAINTS,
+ CERT_TRUST_HAS_PREFERRED_ISSUER },
{ CERT_TRUST_IS_PARTIAL_CHAIN |
CERT_TRUST_INVALID_BASIC_CONSTRAINTS | CERT_TRUST_IS_CYCLIC, 0 },
- 1, simpleStatus9 },
- TODO_INFO },
+ 1, simpleStatus9 }, 0 },
{ { sizeof(chain10) / sizeof(chain10[0]), chain10 },
{ { 0, CERT_TRUST_HAS_PREFERRED_ISSUER },
{ CERT_TRUST_IS_UNTRUSTED_ROOT, 0 }, 1, simpleStatus10 }, 0 },
@@ -1595,7 +1620,7 @@ static ChainCheck chainCheckNoStore[] = {
{ { 0, CERT_TRUST_HAS_PREFERRED_ISSUER },
{ CERT_TRUST_IS_PARTIAL_CHAIN, 0 },
1, simpleStatus8NoStore },
- TODO_INFO },
+ 0 },
};
/* Wednesday, Oct 1, 2007 */
@@ -1684,103 +1709,110 @@ static void testGetCertChain(void)
typedef struct _ChainPolicyCheck
{
- CONST_BLOB_ARRAY certs;
- CERT_CHAIN_POLICY_STATUS status;
- DWORD todo;
+ CONST_BLOB_ARRAY certs;
+ CERT_CHAIN_POLICY_STATUS status;
+ const CERT_CHAIN_POLICY_STATUS *brokenStatus;
+ DWORD todo;
} ChainPolicyCheck;
static const ChainPolicyCheck basePolicyCheck[] = {
{ { sizeof(chain0) / sizeof(chain0[0]), chain0 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain1) / sizeof(chain1[0]), chain1 },
- { 0, TRUST_E_CERT_SIGNATURE, 0, 0, NULL }, 0 },
+ { 0, TRUST_E_CERT_SIGNATURE, 0, 0, NULL }, NULL, 0 },
{ { sizeof(chain2) / sizeof(chain2[0]), chain2 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain3) / sizeof(chain3[0]), chain3 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain4) / sizeof(chain4[0]), chain4 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 2, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 2, NULL }, NULL, 0 },
{ { sizeof(chain5) / sizeof(chain5[0]), chain5 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain6) / sizeof(chain6[0]), chain6 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain7) / sizeof(chain7[0]), chain7 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain8) / sizeof(chain8[0]), chain8 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 2, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 2, NULL }, NULL, 0 },
{ { sizeof(chain9) / sizeof(chain9[0]), chain9 },
- { 0, CERT_E_CHAINING, 0, -1, NULL }, 0 },
+ { 0, CERT_E_CHAINING, 0, -1, NULL }, NULL, 0 },
{ { sizeof(chain10) / sizeof(chain10[0]), chain10 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain11) / sizeof(chain11[0]), chain11 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain12) / sizeof(chain12[0]), chain12 },
- { 0, TRUST_E_CERT_SIGNATURE, 0, 1, NULL }, 0 },
+ { 0, TRUST_E_CERT_SIGNATURE, 0, 1, NULL }, NULL, 0 },
{ { sizeof(selfSignedChain) / sizeof(selfSignedChain[0]), selfSignedChain },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 0, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 0, NULL }, NULL, 0 },
};
static const ChainPolicyCheck authenticodePolicyCheck[] = {
{ { sizeof(chain0) / sizeof(chain0[0]), chain0 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain1) / sizeof(chain1[0]), chain1 },
- { 0, TRUST_E_CERT_SIGNATURE, 0, 0, NULL }, 0 },
+ { 0, TRUST_E_CERT_SIGNATURE, 0, 0, NULL }, NULL, 0 },
{ { sizeof(chain2) / sizeof(chain2[0]), chain2 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain3) / sizeof(chain3[0]), chain3 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain4) / sizeof(chain4[0]), chain4 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 2, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 2, NULL }, NULL, 0 },
{ { sizeof(chain5) / sizeof(chain5[0]), chain5 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain6) / sizeof(chain6[0]), chain6 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain7) / sizeof(chain7[0]), chain7 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain8) / sizeof(chain8[0]), chain8 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 2, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 2, NULL }, NULL, 0 },
{ { sizeof(chain9) / sizeof(chain9[0]), chain9 },
- { 0, CERT_E_CHAINING, 0, -1, NULL }, 0 },
+ { 0, CERT_E_CHAINING, 0, -1, NULL }, NULL, 0 },
{ { sizeof(chain10) / sizeof(chain10[0]), chain10 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain11) / sizeof(chain11[0]), chain11 },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain12) / sizeof(chain12[0]), chain12 },
- { 0, TRUST_E_CERT_SIGNATURE, 0, 1, NULL }, 0 },
+ { 0, TRUST_E_CERT_SIGNATURE, 0, 1, NULL }, NULL, 0 },
{ { sizeof(selfSignedChain) / sizeof(selfSignedChain[0]), selfSignedChain },
- { 0, CERT_E_UNTRUSTEDROOT, 0, 0, NULL }, 0 },
+ { 0, CERT_E_UNTRUSTEDROOT, 0, 0, NULL }, NULL, 0 },
};
+/* On some older systems, the element index is set to 2 rather than 1 for
+ * chain 4, because they do not catch the basic constraints error in the
+ * chain, which occurs at element 1.
+ */
+static const CERT_CHAIN_POLICY_STATUS chain4BrokenStatus =
+ { 0, TRUST_E_BASIC_CONSTRAINTS, 0, 2, NULL };
+
static const ChainPolicyCheck basicConstraintsPolicyCheck[] = {
{ { sizeof(chain0) / sizeof(chain0[0]), chain0 },
- { 0, 0, -1, -1, NULL }, 0 },
+ { 0, 0, -1, -1, NULL }, NULL, 0 },
{ { sizeof(chain1) / sizeof(chain1[0]), chain1 },
- { 0, 0, -1, -1, NULL }, 0 },
+ { 0, 0, -1, -1, NULL }, NULL, 0 },
{ { sizeof(chain2) / sizeof(chain2[0]), chain2 },
- { 0, 0, -1, -1, NULL }, 0 },
+ { 0, 0, -1, -1, NULL }, NULL, 0 },
{ { sizeof(chain3) / sizeof(chain3[0]), chain3 },
- { 0, TRUST_E_BASIC_CONSTRAINTS, 0, 1, NULL }, 0 },
+ { 0, TRUST_E_BASIC_CONSTRAINTS, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain4) / sizeof(chain4[0]), chain4 },
- { 0, TRUST_E_BASIC_CONSTRAINTS, 0, 1, NULL }, 0 },
+ { 0, TRUST_E_BASIC_CONSTRAINTS, 0, 1, NULL }, &chain4BrokenStatus, 0 },
{ { sizeof(chain5) / sizeof(chain5[0]), chain5 },
- { 0, 0, -1, -1, NULL }, 0 },
+ { 0, 0, -1, -1, NULL }, NULL, 0 },
{ { sizeof(chain6) / sizeof(chain6[0]), chain6 },
- { 0, 0, -1, -1, NULL }, 0 },
+ { 0, 0, -1, -1, NULL }, NULL, 0 },
{ { sizeof(chain7) / sizeof(chain7[0]), chain7 },
- { 0, 0, -1, -1, NULL }, 0 },
+ { 0, 0, -1, -1, NULL }, NULL, 0 },
{ { sizeof(chain8) / sizeof(chain8[0]), chain8 },
- { 0, TRUST_E_BASIC_CONSTRAINTS, 0, 1, NULL },
- TODO_ERROR | TODO_CHAINS | TODO_ELEMENTS },
+ { 0, TRUST_E_BASIC_CONSTRAINTS, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain9) / sizeof(chain9[0]), chain9 },
- { 0, TRUST_E_BASIC_CONSTRAINTS, 0, 1, NULL }, 0 },
+ { 0, TRUST_E_BASIC_CONSTRAINTS, 0, 1, NULL }, NULL, 0 },
{ { sizeof(chain10) / sizeof(chain10[0]), chain10 },
- { 0, 0, -1, -1, NULL }, 0 },
+ { 0, 0, -1, -1, NULL }, NULL, 0 },
{ { sizeof(chain11) / sizeof(chain11[0]), chain11 },
- { 0, 0, -1, -1, NULL }, 0 },
+ { 0, 0, -1, -1, NULL }, NULL, 0 },
{ { sizeof(chain12) / sizeof(chain12[0]), chain12 },
- { 0, 0, -1, -1, NULL }, 0 },
+ { 0, 0, -1, -1, NULL }, NULL, 0 },
{ { sizeof(selfSignedChain) / sizeof(selfSignedChain[0]), selfSignedChain },
- { 0, 0, -1, -1, NULL }, 0 },
+ { 0, 0, -1, -1, NULL }, NULL, 0 },
};
static const char *num_to_str(WORD num)
@@ -1825,43 +1857,58 @@ static void checkChainPolicyStatus(LPCSTR policy, const ChainPolicyCheck *check,
{
if (check->todo & TODO_ERROR)
todo_wine ok(policyStatus.dwError == check->status.dwError ||
- broken(policyStatus.dwError == CERT_TRUST_NO_ERROR),
+ broken(policyStatus.dwError == CERT_TRUST_NO_ERROR) ||
+ (check->brokenStatus && broken(policyStatus.dwError ==
+ check->brokenStatus->dwError)),
"%s[%d]: expected %08x, got %08x\n",
HIWORD(policy) ? policy : num_to_str(LOWORD(policy)),
testIndex, check->status.dwError, policyStatus.dwError);
else
ok(policyStatus.dwError == check->status.dwError ||
- broken(policyStatus.dwError == CERT_TRUST_NO_ERROR),
+ broken(policyStatus.dwError == CERT_TRUST_NO_ERROR) ||
+ (check->brokenStatus && broken(policyStatus.dwError ==
+ check->brokenStatus->dwError)),
"%s[%d]: expected %08x, got %08x\n",
HIWORD(policy) ? policy : num_to_str(LOWORD(policy)),
testIndex, check->status.dwError, policyStatus.dwError);
if (policyStatus.dwError != check->status.dwError)
{
- skip("error doesn't match, not checking indexes\n");
+ skip("%s[%d]: error %08x doesn't match expected %08x, not checking indexes\n",
+ HIWORD(policy) ? policy : num_to_str(LOWORD(policy)),
+ testIndex, policyStatus.dwError, check->status.dwError);
pCertFreeCertificateChain(chain);
return;
}
if (check->todo & TODO_CHAINS)
todo_wine ok(policyStatus.lChainIndex ==
- check->status.lChainIndex, "%s[%d]: expected %d, got %d\n",
+ check->status.lChainIndex ||
+ (check->brokenStatus && broken(policyStatus.lChainIndex ==
+ check->brokenStatus->lChainIndex)),
+ "%s[%d]: expected %d, got %d\n",
HIWORD(policy) ? policy : num_to_str(LOWORD(policy)),
testIndex, check->status.lChainIndex,
policyStatus.lChainIndex);
else
- ok(policyStatus.lChainIndex == check->status.lChainIndex,
+ ok(policyStatus.lChainIndex == check->status.lChainIndex ||
+ (check->brokenStatus && broken(policyStatus.lChainIndex ==
+ check->brokenStatus->lChainIndex)),
"%s[%d]: expected %d, got %d\n",
HIWORD(policy) ? policy : num_to_str(LOWORD(policy)),
testIndex,
check->status.lChainIndex, policyStatus.lChainIndex);
if (check->todo & TODO_ELEMENTS)
todo_wine ok(policyStatus.lElementIndex ==
- check->status.lElementIndex,
+ check->status.lElementIndex ||
+ (check->brokenStatus && broken(policyStatus.lElementIndex ==
+ check->brokenStatus->lElementIndex)),
"%s[%d]: expected %d, got %d\n",
HIWORD(policy) ? policy : num_to_str(LOWORD(policy)),
testIndex,
check->status.lElementIndex, policyStatus.lElementIndex);
else
- ok(policyStatus.lElementIndex == check->status.lElementIndex,
+ ok(policyStatus.lElementIndex == check->status.lElementIndex ||
+ (check->brokenStatus && broken(policyStatus.lElementIndex ==
+ check->brokenStatus->lElementIndex)),
"%s[%d]: expected %d, got %d\n",
HIWORD(policy) ? policy : num_to_str(LOWORD(policy)),
testIndex,
@@ -1883,7 +1930,7 @@ static void testVerifyCertChainPolicy(void)
if (!pCertVerifyCertificateChainPolicy)
{
- skip("CertVerifyCertificateChainPolicy() is not available\n");
+ win_skip("CertVerifyCertificateChainPolicy() is not available\n");
return;
}
@@ -1963,7 +2010,7 @@ START_TEST(chain)
testCreateCertChainEngine();
if (!pCertGetCertificateChain)
{
- skip("CertGetCertificateChain() is not available\n");
+ win_skip("CertGetCertificateChain() is not available\n");
}
else
{
diff --git a/rostests/winetests/crypt32/crl.c b/rostests/winetests/crypt32/crl.c
index 0bd0e5c13b0..abd8491df90 100644
--- a/rostests/winetests/crypt32/crl.c
+++ b/rostests/winetests/crypt32/crl.c
@@ -219,7 +219,7 @@ static void testFindCRL(void)
if (!store) return;
if (!pCertFindCRLInStore)
{
- skip("CertFindCRLInStore() is not available\n");
+ win_skip("CertFindCRLInStore() is not available\n");
return;
}
@@ -619,7 +619,7 @@ static void testFindCertInCRL(void)
if (!pCertFindCertificateInCRL)
{
- skip("CertFindCertificateInCRL() is not available\n");
+ win_skip("CertFindCertificateInCRL() is not available\n");
return;
}
diff --git a/rostests/winetests/crypt32/ctl.c b/rostests/winetests/crypt32/ctl.c
index 5ed4381d48c..f09420c8a21 100644
--- a/rostests/winetests/crypt32/ctl.c
+++ b/rostests/winetests/crypt32/ctl.c
@@ -137,23 +137,27 @@ static void testCreateCTL(void)
ctl = CertCreateCTLContext(X509_ASN_ENCODING, signedCTL, sizeof(signedCTL));
ok(!ctl &&
(GetLastError() == ERROR_INVALID_DATA ||
- GetLastError() == CRYPT_E_UNEXPECTED_MSG_TYPE), /* win9x */
- "expected ERROR_INVALID_DATA, got %d (0x%08x)\n", GetLastError(),
+ GetLastError() == CRYPT_E_UNEXPECTED_MSG_TYPE /* win9x */ ||
+ GetLastError() == ERROR_SUCCESS /* some win98 */),
+ "expected ERROR_INVALID_DATA, CRYPT_E_UNEXPECTED_MSG_TYPE, or ERROR_SUCCESS, got %d (0x%08x)\n", GetLastError(),
GetLastError());
SetLastError(0xdeadbeef);
ctl = CertCreateCTLContext(X509_ASN_ENCODING, ctlWithOneEntry,
sizeof(ctlWithOneEntry));
ok(!ctl &&
(GetLastError() == ERROR_INVALID_DATA ||
- GetLastError() == OSS_DATA_ERROR), /* win9x */
- "expected ERROR_INVALID_DATA, got %d (0x%08x)\n", GetLastError(),
+ GetLastError() == CRYPT_E_UNEXPECTED_MSG_TYPE /* win9x */ ||
+ GetLastError() == OSS_DATA_ERROR /* some win98 */ ||
+ GetLastError() == ERROR_SUCCESS /* some win98 */),
+ "expected ERROR_INVALID_DATA, CRYPT_E_UNEXPECTED_MSG_TYPE, OSS_DATA_ERROR, or ERROR_SUCCESS, got %d (0x%08x)\n", GetLastError(),
GetLastError());
SetLastError(0xdeadbeef);
ctl = CertCreateCTLContext(X509_ASN_ENCODING,
signedCTLWithSubjectAlgorithm, sizeof(signedCTLWithSubjectAlgorithm));
ok(!ctl &&
(GetLastError() == ERROR_INVALID_DATA ||
- GetLastError() == CRYPT_E_UNEXPECTED_MSG_TYPE), /* win9x */
+ GetLastError() == CRYPT_E_UNEXPECTED_MSG_TYPE /* win9x */ ||
+ GetLastError() == ERROR_SUCCESS /* some win98 */),
"expected ERROR_INVALID_DATA, got %d (0x%08x)\n", GetLastError(),
GetLastError());
/* This signed CTL with the appropriate inner content type can be decoded.
@@ -228,12 +232,15 @@ static void testCTLProperties(void)
/* An implicit property */
ret = CertGetCTLContextProperty(ctl, CERT_ACCESS_STATE_PROP_ID, NULL,
&size);
- ok(ret, "CertGetCTLContextProperty failed: %08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == CRYPT_E_NOT_FOUND /* some win98 */),
+ "CertGetCTLContextProperty failed: %08x\n", GetLastError());
ret = CertGetCTLContextProperty(ctl, CERT_ACCESS_STATE_PROP_ID, &access,
&size);
- ok(ret, "CertGetCTLContextProperty failed: %08x\n", GetLastError());
- ok(!(access & CERT_ACCESS_STATE_WRITE_PERSIST_FLAG),
- "Didn't expect a persisted cert\n");
+ ok(ret || broken(GetLastError() == CRYPT_E_NOT_FOUND /* some win98 */),
+ "CertGetCTLContextProperty failed: %08x\n", GetLastError());
+ if (ret)
+ ok(!(access & CERT_ACCESS_STATE_WRITE_PERSIST_FLAG),
+ "Didn't expect a persisted cert\n");
checkHash(signedCTLWithCTLInnerContent,
sizeof(signedCTLWithCTLInnerContent), CALG_SHA1, ctl, CERT_HASH_PROP_ID);
@@ -320,7 +327,7 @@ static void testAddCTLToStore(void)
{
HCERTSTORE store;
BOOL ret;
- DWORD numCTLs;
+ DWORD numCTLs, expectedCTLs;
PCCTL_CONTEXT ctl;
store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
@@ -362,13 +369,16 @@ static void testAddCTLToStore(void)
if (ret)
{
/* win9x */
- ok(GetLastError() == CRYPT_E_NOT_FOUND,
+ ok(GetLastError() == CRYPT_E_NOT_FOUND ||
+ GetLastError() == OSS_DATA_ERROR /* some win98 */,
"Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
}
else
{
- ok(!ret && GetLastError() == CRYPT_E_EXISTS,
- "expected CRYPT_E_EXISTS, got %d %08x\n", ret, GetLastError());
+ ok(!ret && (GetLastError() == CRYPT_E_EXISTS ||
+ GetLastError() == OSS_DATA_ERROR),
+ "expected CRYPT_E_EXISTS or OSS_DATA_ERROR, got %d %08x\n", ret,
+ GetLastError());
}
CertCloseStore(store, 0);
@@ -381,10 +391,14 @@ static void testAddCTLToStore(void)
signedCTLWithCTLInnerContent, sizeof(signedCTLWithCTLInnerContent),
CERT_STORE_ADD_NEW, NULL);
ok(ret, "CertAddEncodedCTLToStore failed: %08x\n", GetLastError());
+ expectedCTLs = 1;
ret = CertAddEncodedCTLToStore(store, X509_ASN_ENCODING,
signedCTLWithUsage, sizeof(signedCTLWithUsage), CERT_STORE_ADD_NEW,
NULL);
- ok(ret, "CertAddEncodedCTLToStore failed: %08x\n", GetLastError());
+ ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* some win98 */),
+ "CertAddEncodedCTLToStore failed: %08x\n", GetLastError());
+ if (ret)
+ expectedCTLs++;
/* Check that two exist */
numCTLs = 0;
ctl = NULL;
@@ -393,7 +407,8 @@ static void testAddCTLToStore(void)
if (ctl)
numCTLs++;
} while (ctl);
- ok(numCTLs == 2, "expected 2 CTLs, got %d\n", numCTLs);
+ ok(numCTLs == expectedCTLs, "expected %d CTLs, got %d\n", expectedCTLs,
+ numCTLs);
CertCloseStore(store, 0);
store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
@@ -404,6 +419,11 @@ static void testAddCTLToStore(void)
ret = CertAddEncodedCTLToStore(store, X509_ASN_ENCODING,
signedCTLWithListID1, sizeof(signedCTLWithListID1), CERT_STORE_ADD_NEW,
NULL);
+ if (!ret)
+ {
+ skip("adding a CTL with an empty usage not supported\n");
+ return;
+ }
ok(ret, "CertAddEncodedCTLToStore failed: %08x\n", GetLastError());
ret = CertAddEncodedCTLToStore(store, X509_ASN_ENCODING,
signedCTLWithListID2, sizeof(signedCTLWithListID2), CERT_STORE_ADD_NEW,
diff --git a/rostests/winetests/crypt32/encode.c b/rostests/winetests/crypt32/encode.c
index 5c681b638cc..e40619492a7 100644
--- a/rostests/winetests/crypt32/encode.c
+++ b/rostests/winetests/crypt32/encode.c
@@ -1960,8 +1960,6 @@ static const struct encodedBits bits[] = {
{ 1, bin54, 2, bin55 },
/* strange test case, showing cUnusedBits >= 8 is allowed */
{ 9, bin56, 1, bin57 },
- /* even stranger test case, showing cUnusedBits > cbData * 8 is allowed */
- { 17, bin58, 0, NULL },
};
static void test_encodeBits(DWORD dwEncoding)
@@ -7499,7 +7497,7 @@ START_TEST(encode)
pCryptEncodeObjectEx = (void*)GetProcAddress(hCrypt32, "CryptEncodeObjectEx");
if (!pCryptDecodeObjectEx || !pCryptEncodeObjectEx)
{
- skip("CryptDecodeObjectEx() is not available\n");
+ win_skip("CryptDecodeObjectEx() is not available\n");
return;
}
diff --git a/rostests/winetests/crypt32/msg.c b/rostests/winetests/crypt32/msg.c
index 495f2f07216..7794f359f61 100644
--- a/rostests/winetests/crypt32/msg.c
+++ b/rostests/winetests/crypt32/msg.c
@@ -196,7 +196,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; i <= CMSG_CMS_SIGNER_INFO_PARAM; i++)
+ for (i = CMSG_CONTENT_PARAM; have_nt && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
{
size = 0;
ret = CryptMsgGetParam(msg, i, 0, NULL, &size);
@@ -211,7 +211,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; i <= CMSG_CMS_SIGNER_INFO_PARAM; i++)
+ for (i = CMSG_CONTENT_PARAM; have_nt && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
{
size = 0;
ret = CryptMsgGetParam(msg, i, 0, NULL, &size);
@@ -226,7 +226,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; i <= CMSG_CMS_SIGNER_INFO_PARAM; i++)
+ for (i = CMSG_CONTENT_PARAM; have_nt && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
{
size = 0;
ret = CryptMsgGetParam(msg, i, 0, NULL, &size);
@@ -241,7 +241,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; i <= CMSG_CMS_SIGNER_INFO_PARAM; i++)
+ for (i = CMSG_CONTENT_PARAM; have_nt && (i <= CMSG_CMS_SIGNER_INFO_PARAM); i++)
{
size = 0;
ret = CryptMsgGetParam(msg, i, 0, NULL, &size);
@@ -413,18 +413,22 @@ static void test_data_msg_update(void)
ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
CryptMsgClose(msg);
- /* Calling update after opening with an empty stream info (with a bogus
- * output function) yields an error:
- */
- msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, NULL, NULL,
- &streamInfo);
- SetLastError(0xdeadbeef);
- ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), FALSE);
- ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
- GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */),
- "Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n",
- GetLastError());
- CryptMsgClose(msg);
+ if (have_nt)
+ {
+ /* Calling update after opening with an empty stream info (with a bogus
+ * output function) yields an error:
+ */
+ /* Crashes on some Win9x */
+ msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, NULL, NULL,
+ &streamInfo);
+ SetLastError(0xdeadbeef);
+ ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), FALSE);
+ ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
+ GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */),
+ "Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n",
+ GetLastError());
+ CryptMsgClose(msg);
+ }
/* Calling update with a valid output function succeeds, even if the data
* exceeds the size specified in the stream info.
*/
@@ -2022,29 +2026,33 @@ static void test_decode_msg_update(void)
ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
CryptMsgClose(msg);
- msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, &streamInfo);
- /* Updating a message that has a NULL stream callback fails */
- SetLastError(0xdeadbeef);
- ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent),
- FALSE);
- todo_wine
- ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
- GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */),
- "Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n",
- GetLastError());
- /* Changing the callback pointer after the fact yields the same error (so
- * the message must copy the stream info, not just store a pointer to it)
- */
- streamInfo.pfnStreamOutput = nop_stream_output;
- SetLastError(0xdeadbeef);
- ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent),
- FALSE);
- todo_wine
- ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
- GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */),
- "Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n",
- GetLastError());
- CryptMsgClose(msg);
+ if (have_nt)
+ {
+ msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, &streamInfo);
+ /* Updating a message that has a NULL stream callback fails */
+ SetLastError(0xdeadbeef);
+ /* Crashes on some Win9x */
+ ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent),
+ FALSE);
+ todo_wine
+ ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
+ GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */),
+ "Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n",
+ GetLastError());
+ /* Changing the callback pointer after the fact yields the same error (so
+ * the message must copy the stream info, not just store a pointer to it)
+ */
+ streamInfo.pfnStreamOutput = nop_stream_output;
+ SetLastError(0xdeadbeef);
+ ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent),
+ FALSE);
+ todo_wine
+ ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
+ GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */),
+ "Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n",
+ GetLastError());
+ CryptMsgClose(msg);
+ }
/* Empty non-final updates are allowed when streaming.. */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, &streamInfo);
@@ -2353,10 +2361,14 @@ static void test_decode_msg_get_param(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
ret = CryptMsgUpdate(msg, hashEmptyContent, sizeof(hashEmptyContent), TRUE);
- check_param("empty hash content", msg, CMSG_CONTENT_PARAM, NULL, 0);
- check_param("empty hash hash data", msg, CMSG_HASH_DATA_PARAM, NULL, 0);
- check_param("empty hash computed hash", msg, CMSG_COMPUTED_HASH_PARAM,
- emptyHashParam, sizeof(emptyHashParam));
+ if (ret)
+ {
+ /* Crashes on some Win9x */
+ check_param("empty hash content", msg, CMSG_CONTENT_PARAM, NULL, 0);
+ check_param("empty hash hash data", msg, CMSG_HASH_DATA_PARAM, NULL, 0);
+ check_param("empty hash computed hash", msg, CMSG_COMPUTED_HASH_PARAM,
+ emptyHashParam, sizeof(emptyHashParam));
+ }
CryptMsgClose(msg);
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
ret = CryptMsgUpdate(msg, hashContent, sizeof(hashContent), TRUE);
@@ -2477,6 +2489,12 @@ static void test_decode_msg_get_param(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
ret = CryptMsgUpdate(msg, signedKeyIdEmptyContent,
sizeof(signedKeyIdEmptyContent), TRUE);
+ if (!ret && GetLastError() == OSS_DATA_ERROR)
+ {
+ /* Subsequent tests crashes on some Win9x, so bail out */
+ CryptMsgClose(msg);
+ return;
+ }
ok(ret, "CryptMsgUpdate failed: %08x\n", GetLastError());
size = sizeof(value);
ret = CryptMsgGetParam(msg, CMSG_SIGNER_COUNT_PARAM, 0, &value, &size);
@@ -2661,27 +2679,31 @@ static void test_msg_control(void)
"Expected CRYPT_E_INVALID_MSG_TYPE, got %08x\n", GetLastError());
CryptMsgClose(msg);
- msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_HASHED, 0, NULL,
- NULL);
- /* Can't verify the hash of an empty message */
- SetLastError(0xdeadbeef);
- ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_HASH, NULL);
- todo_wine
- ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
- "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
- /* Crashes
- ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, NULL);
- */
- /* Can't verify the signature of a hash message */
- ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
- ok(!ret && GetLastError() == CRYPT_E_INVALID_MSG_TYPE,
- "Expected CRYPT_E_INVALID_MSG_TYPE, got %08x\n", GetLastError());
- CryptMsgUpdate(msg, hashEmptyBareContent, sizeof(hashEmptyBareContent),
- TRUE);
- /* Oddly enough, this fails */
- ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_HASH, NULL);
- ok(!ret, "Expected failure\n");
- CryptMsgClose(msg);
+ if (have_nt)
+ {
+ msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_HASHED, 0, NULL,
+ NULL);
+ /* Can't verify the hash of an empty message */
+ SetLastError(0xdeadbeef);
+ /* Crashes on some Win9x */
+ ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_HASH, NULL);
+ todo_wine
+ ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
+ "Expected STATUS_ACCESS_VIOLATION, got %08x\n", GetLastError());
+ /* Crashes
+ ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, NULL);
+ */
+ /* Can't verify the signature of a hash message */
+ ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
+ ok(!ret && GetLastError() == CRYPT_E_INVALID_MSG_TYPE,
+ "Expected CRYPT_E_INVALID_MSG_TYPE, got %08x\n", GetLastError());
+ CryptMsgUpdate(msg, hashEmptyBareContent, sizeof(hashEmptyBareContent),
+ TRUE);
+ /* Oddly enough, this fails, crashes on some Win9x */
+ ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_HASH, NULL);
+ ok(!ret, "Expected failure\n");
+ CryptMsgClose(msg);
+ }
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_HASHED, 0, NULL,
NULL);
CryptMsgUpdate(msg, hashBareContent, sizeof(hashBareContent), TRUE);
@@ -2783,63 +2805,71 @@ static void test_msg_control(void)
/* 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,
NULL);
- CryptMsgUpdate(msg, signedWithCertWithPubKeyBareContent,
+ ret = CryptMsgUpdate(msg, signedWithCertWithPubKeyBareContent,
sizeof(signedWithCertWithPubKeyBareContent), TRUE);
- /* Again, cert info needs to have a public key set */
- SetLastError(0xdeadbeef);
- ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
- ok(!ret &&
- (GetLastError() == CRYPT_E_ASN1_EOD ||
- GetLastError() == TRUST_E_NOSIGNATURE /* Vista */),
- "Expected CRYPT_E_ASN1_EOD or TRUST_E_NOSIGNATURE, got %08x\n", GetLastError());
- /* The public key is supposed to be in encoded form.. */
- certInfo.SubjectPublicKeyInfo.Algorithm.pszObjId = oid_rsa_rsa;
- certInfo.SubjectPublicKeyInfo.PublicKey.cbData = sizeof(aKey);
- certInfo.SubjectPublicKeyInfo.PublicKey.pbData = aKey;
- SetLastError(0xdeadbeef);
- ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
- ok(!ret &&
- (GetLastError() == CRYPT_E_ASN1_BADTAG ||
- GetLastError() == TRUST_E_NOSIGNATURE /* Vista */),
- "Expected CRYPT_E_ASN1_BADTAG or TRUST_E_NOSIGNATURE, got %08x\n", GetLastError());
- /* but not as a X509_PUBLIC_KEY_INFO.. */
- certInfo.SubjectPublicKeyInfo.Algorithm.pszObjId = NULL;
- certInfo.SubjectPublicKeyInfo.PublicKey.cbData = sizeof(encodedPubKey);
- certInfo.SubjectPublicKeyInfo.PublicKey.pbData = encodedPubKey;
- SetLastError(0xdeadbeef);
- ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
- ok(!ret &&
- (GetLastError() == CRYPT_E_ASN1_BADTAG ||
- GetLastError() == TRUST_E_NOSIGNATURE /* Vista */),
- "Expected CRYPT_E_ASN1_BADTAG or TRUST_E_NOSIGNATURE, got %08x\n", GetLastError());
- /* This decodes successfully, but it doesn't match any key in the message */
- certInfo.SubjectPublicKeyInfo.PublicKey.cbData = sizeof(mod_encoded);
- certInfo.SubjectPublicKeyInfo.PublicKey.pbData = mod_encoded;
- SetLastError(0xdeadbeef);
- ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
- /* In Wine's rsaenh, this fails to decode because the key length is too
- * small. Not sure if that's a bug in rsaenh, so leaving todo_wine for
- * now.
- */
- todo_wine
- ok(!ret &&
- (GetLastError() == NTE_BAD_SIGNATURE ||
- GetLastError() == TRUST_E_NOSIGNATURE /* Vista */),
- "Expected NTE_BAD_SIGNATURE or TRUST_E_NOSIGNATURE, got %08x\n", GetLastError());
+ if (ret)
+ {
+ /* Crashes on some Win9x */
+ /* Again, cert info needs to have a public key set */
+ SetLastError(0xdeadbeef);
+ ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
+ ok(!ret &&
+ (GetLastError() == CRYPT_E_ASN1_EOD ||
+ GetLastError() == TRUST_E_NOSIGNATURE /* Vista */),
+ "Expected CRYPT_E_ASN1_EOD or TRUST_E_NOSIGNATURE, got %08x\n", GetLastError());
+ /* The public key is supposed to be in encoded form.. */
+ certInfo.SubjectPublicKeyInfo.Algorithm.pszObjId = oid_rsa_rsa;
+ certInfo.SubjectPublicKeyInfo.PublicKey.cbData = sizeof(aKey);
+ certInfo.SubjectPublicKeyInfo.PublicKey.pbData = aKey;
+ SetLastError(0xdeadbeef);
+ ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
+ ok(!ret &&
+ (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == TRUST_E_NOSIGNATURE /* Vista */),
+ "Expected CRYPT_E_ASN1_BADTAG or TRUST_E_NOSIGNATURE, got %08x\n", GetLastError());
+ /* but not as a X509_PUBLIC_KEY_INFO.. */
+ certInfo.SubjectPublicKeyInfo.Algorithm.pszObjId = NULL;
+ certInfo.SubjectPublicKeyInfo.PublicKey.cbData = sizeof(encodedPubKey);
+ certInfo.SubjectPublicKeyInfo.PublicKey.pbData = encodedPubKey;
+ SetLastError(0xdeadbeef);
+ ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
+ ok(!ret &&
+ (GetLastError() == CRYPT_E_ASN1_BADTAG ||
+ GetLastError() == TRUST_E_NOSIGNATURE /* Vista */),
+ "Expected CRYPT_E_ASN1_BADTAG or TRUST_E_NOSIGNATURE, got %08x\n", GetLastError());
+ /* This decodes successfully, but it doesn't match any key in the message */
+ certInfo.SubjectPublicKeyInfo.PublicKey.cbData = sizeof(mod_encoded);
+ certInfo.SubjectPublicKeyInfo.PublicKey.pbData = mod_encoded;
+ SetLastError(0xdeadbeef);
+ ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
+ /* In Wine's rsaenh, this fails to decode because the key length is too
+ * small. Not sure if that's a bug in rsaenh, so leaving todo_wine for
+ * now.
+ */
+ todo_wine
+ ok(!ret &&
+ (GetLastError() == NTE_BAD_SIGNATURE ||
+ GetLastError() == TRUST_E_NOSIGNATURE /* Vista */),
+ "Expected NTE_BAD_SIGNATURE or TRUST_E_NOSIGNATURE, got %08x\n", GetLastError());
+ }
CryptMsgClose(msg);
/* A message with no data doesn't have a valid signature */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
- CryptMsgUpdate(msg, signedWithCertWithValidPubKeyEmptyContent,
+ ret = CryptMsgUpdate(msg, signedWithCertWithValidPubKeyEmptyContent,
sizeof(signedWithCertWithValidPubKeyEmptyContent), TRUE);
- certInfo.SubjectPublicKeyInfo.Algorithm.pszObjId = oid_rsa_rsa;
- certInfo.SubjectPublicKeyInfo.PublicKey.cbData = sizeof(pubKey);
- certInfo.SubjectPublicKeyInfo.PublicKey.pbData = pubKey;
- SetLastError(0xdeadbeef);
- ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
- ok(!ret &&
- (GetLastError() == NTE_BAD_SIGNATURE ||
- GetLastError() == TRUST_E_NOSIGNATURE /* Vista */),
- "Expected NTE_BAD_SIGNATURE or TRUST_E_NOSIGNATURE, got %08x\n", GetLastError());
+ if (ret)
+ {
+ certInfo.SubjectPublicKeyInfo.Algorithm.pszObjId = oid_rsa_rsa;
+ certInfo.SubjectPublicKeyInfo.PublicKey.cbData = sizeof(pubKey);
+ certInfo.SubjectPublicKeyInfo.PublicKey.pbData = pubKey;
+ SetLastError(0xdeadbeef);
+ /* Crashes on some Win9x */
+ ret = CryptMsgControl(msg, 0, CMSG_CTRL_VERIFY_SIGNATURE, &certInfo);
+ ok(!ret &&
+ (GetLastError() == NTE_BAD_SIGNATURE ||
+ GetLastError() == TRUST_E_NOSIGNATURE /* Vista */),
+ "Expected NTE_BAD_SIGNATURE or TRUST_E_NOSIGNATURE, got %08x\n", GetLastError());
+ }
CryptMsgClose(msg);
/* Finally, this succeeds */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
@@ -2968,11 +2998,14 @@ static void test_msg_get_and_verify_signer(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
/* A "signed" message created with no signer cert likewise has no signer */
- CryptMsgUpdate(msg, signedEmptyContent, sizeof(signedEmptyContent), TRUE);
- SetLastError(0xdeadbeef);
- ret = CryptMsgGetAndVerifySigner(msg, 0, NULL, 0, NULL, NULL);
- ok(!ret && GetLastError() == CRYPT_E_NO_TRUSTED_SIGNER,
- "expected CRYPT_E_NO_TRUSTED_SIGNER, got 0x%08x\n", GetLastError());
+ ret = CryptMsgUpdate(msg, signedEmptyContent, sizeof(signedEmptyContent), TRUE);
+ if (ret)
+ {
+ /* Crashes on most Win9x */
+ ret = CryptMsgGetAndVerifySigner(msg, 0, NULL, 0, NULL, NULL);
+ ok(!ret && GetLastError() == CRYPT_E_NO_TRUSTED_SIGNER,
+ "expected CRYPT_E_NO_TRUSTED_SIGNER, got 0x%08x\n", GetLastError());
+ }
CryptMsgClose(msg);
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
@@ -3040,6 +3073,8 @@ START_TEST(msg)
{
init_function_pointers();
have_nt = detect_nt();
+ if (!have_nt)
+ win_skip("Win9x crashes on some parameter checks\n");
/* Basic parameter checking tests */
test_msg_open_to_encode();
diff --git a/rostests/winetests/crypt32/oid.c b/rostests/winetests/crypt32/oid.c
index 11451310812..9b50129fd1d 100644
--- a/rostests/winetests/crypt32/oid.c
+++ b/rostests/winetests/crypt32/oid.c
@@ -34,58 +34,59 @@ static BOOL (WINAPI *pCryptEnumOIDInfo)(DWORD,DWORD,void*,PFN_CRYPT_ENUM_OID_INF
struct OIDToAlgID
{
LPCSTR oid;
+ LPCSTR altOid;
DWORD algID;
};
static const struct OIDToAlgID oidToAlgID[] = {
- { szOID_RSA_RSA, CALG_RSA_KEYX },
- { szOID_RSA_MD2RSA, CALG_MD2 },
- { szOID_RSA_MD4RSA, CALG_MD4 },
- { szOID_RSA_MD5RSA, CALG_MD5 },
- { szOID_RSA_SHA1RSA, CALG_SHA },
- { szOID_RSA_DH, CALG_DH_SF },
- { szOID_RSA_SMIMEalgESDH, CALG_DH_EPHEM },
- { szOID_RSA_SMIMEalgCMS3DESwrap, CALG_3DES },
- { szOID_RSA_SMIMEalgCMSRC2wrap, CALG_RC2 },
- { szOID_RSA_MD2, CALG_MD2 },
- { szOID_RSA_MD4, CALG_MD4 },
- { szOID_RSA_MD5, CALG_MD5 },
- { szOID_RSA_RC2CBC, CALG_RC2 },
- { szOID_RSA_RC4, CALG_RC4 },
- { szOID_RSA_DES_EDE3_CBC, CALG_3DES },
- { szOID_ANSI_X942_DH, CALG_DH_SF },
- { szOID_X957_DSA, CALG_DSS_SIGN },
- { szOID_X957_SHA1DSA, CALG_SHA },
- { szOID_OIWSEC_md4RSA, CALG_MD4 },
- { szOID_OIWSEC_md5RSA, CALG_MD5 },
- { szOID_OIWSEC_md4RSA2, CALG_MD4 },
- { szOID_OIWSEC_desCBC, CALG_DES },
- { szOID_OIWSEC_dsa, CALG_DSS_SIGN },
- { szOID_OIWSEC_shaDSA, CALG_SHA },
- { szOID_OIWSEC_shaRSA, CALG_SHA },
- { szOID_OIWSEC_sha, CALG_SHA },
- { szOID_OIWSEC_rsaXchg, CALG_RSA_KEYX },
- { szOID_OIWSEC_sha1, CALG_SHA },
- { szOID_OIWSEC_dsaSHA1, CALG_SHA },
- { szOID_OIWSEC_sha1RSASign, CALG_SHA },
- { szOID_OIWDIR_md2RSA, CALG_MD2 },
- { szOID_INFOSEC_mosaicUpdatedSig, CALG_SHA },
- { szOID_INFOSEC_mosaicKMandUpdSig, CALG_DSS_SIGN },
+ { szOID_RSA_RSA, NULL, CALG_RSA_KEYX },
+ { szOID_RSA_MD2RSA, NULL, CALG_MD2 },
+ { szOID_RSA_MD4RSA, NULL, CALG_MD4 },
+ { szOID_RSA_MD5RSA, NULL, CALG_MD5 },
+ { szOID_RSA_SHA1RSA, NULL, CALG_SHA },
+ { szOID_RSA_DH, NULL, CALG_DH_SF },
+ { szOID_RSA_SMIMEalgESDH, NULL, CALG_DH_EPHEM },
+ { szOID_RSA_SMIMEalgCMS3DESwrap, NULL, CALG_3DES },
+ { szOID_RSA_SMIMEalgCMSRC2wrap, NULL, CALG_RC2 },
+ { szOID_RSA_MD2, NULL, CALG_MD2 },
+ { szOID_RSA_MD4, NULL, CALG_MD4 },
+ { szOID_RSA_MD5, NULL, CALG_MD5 },
+ { szOID_RSA_RC2CBC, NULL, CALG_RC2 },
+ { szOID_RSA_RC4, NULL, CALG_RC4 },
+ { szOID_RSA_DES_EDE3_CBC, NULL, CALG_3DES },
+ { szOID_ANSI_X942_DH, NULL, CALG_DH_SF },
+ { szOID_X957_DSA, NULL, CALG_DSS_SIGN },
+ { szOID_X957_SHA1DSA, NULL, CALG_SHA },
+ { szOID_OIWSEC_md4RSA, NULL, CALG_MD4 },
+ { szOID_OIWSEC_md5RSA, NULL, CALG_MD5 },
+ { szOID_OIWSEC_md4RSA2, NULL, CALG_MD4 },
+ { szOID_OIWSEC_desCBC, NULL, CALG_DES },
+ { szOID_OIWSEC_dsa, NULL, CALG_DSS_SIGN },
+ { szOID_OIWSEC_shaDSA, NULL, CALG_SHA },
+ { szOID_OIWSEC_shaRSA, NULL, CALG_SHA },
+ { szOID_OIWSEC_sha, NULL, CALG_SHA },
+ { szOID_OIWSEC_rsaXchg, NULL, CALG_RSA_KEYX },
+ { szOID_OIWSEC_sha1, NULL, CALG_SHA },
+ { szOID_OIWSEC_dsaSHA1, NULL, CALG_SHA },
+ { szOID_OIWSEC_sha1RSASign, NULL, CALG_SHA },
+ { szOID_OIWDIR_md2RSA, NULL, CALG_MD2 },
+ { szOID_INFOSEC_mosaicUpdatedSig, NULL, CALG_SHA },
+ { szOID_INFOSEC_mosaicKMandUpdSig, NULL, CALG_DSS_SIGN },
};
static const struct OIDToAlgID algIDToOID[] = {
- { szOID_RSA_RSA, CALG_RSA_KEYX },
- { szOID_RSA_SMIMEalgESDH, CALG_DH_EPHEM },
- { szOID_RSA_MD2, CALG_MD2 },
- { szOID_RSA_MD4, CALG_MD4 },
- { szOID_RSA_MD5, CALG_MD5 },
- { szOID_RSA_RC2CBC, CALG_RC2 },
- { szOID_RSA_RC4, CALG_RC4 },
- { szOID_RSA_DES_EDE3_CBC, CALG_3DES },
- { szOID_ANSI_X942_DH, CALG_DH_SF },
- { szOID_X957_DSA, CALG_DSS_SIGN },
- { szOID_OIWSEC_desCBC, CALG_DES },
- { szOID_OIWSEC_sha1, CALG_SHA },
+ { szOID_RSA_RSA, NULL, CALG_RSA_KEYX },
+ { szOID_RSA_SMIMEalgESDH, NULL, CALG_DH_EPHEM },
+ { szOID_RSA_MD2, NULL, CALG_MD2 },
+ { szOID_RSA_MD4, NULL, CALG_MD4 },
+ { szOID_RSA_MD5, NULL, CALG_MD5 },
+ { szOID_RSA_RC2CBC, NULL, CALG_RC2 },
+ { szOID_RSA_RC4, NULL, CALG_RC4 },
+ { szOID_RSA_DES_EDE3_CBC, NULL, CALG_3DES },
+ { szOID_ANSI_X942_DH, NULL, CALG_DH_SF },
+ { szOID_X957_DSA, szOID_OIWSEC_dsa /* some Win98 */, CALG_DSS_SIGN },
+ { szOID_OIWSEC_desCBC, NULL, CALG_DES },
+ { szOID_OIWSEC_sha1, NULL, CALG_SHA },
};
static const WCHAR bogusDll[] = { 'b','o','g','u','s','.','d','l','l',0 };
@@ -134,8 +135,25 @@ static void testAlgIDToOID(void)
oid = CertAlgIdToOID(algIDToOID[i].algID);
/* Allow failure, not every version of Windows supports every algo */
if (oid)
- ok(!strcmp(oid, algIDToOID[i].oid),
- "Expected %s, got %s\n", algIDToOID[i].oid, oid);
+ {
+ if (strcmp(oid, algIDToOID[i].oid))
+ {
+ if (algIDToOID[i].altOid)
+ ok(!strcmp(oid, algIDToOID[i].altOid),
+ "Expected %s or %s, got %s\n", algIDToOID[i].oid,
+ algIDToOID[i].altOid, oid);
+ else
+ {
+ /* No need to rerun the test, we already know it failed. */
+ ok(0, "Expected %s, got %s\n", algIDToOID[i].oid, oid);
+ }
+ }
+ else
+ {
+ /* No need to rerun the test, we already know it succeeded. */
+ ok(1, "Expected %s, got %s\n", algIDToOID[i].oid, oid);
+ }
+ }
}
}
@@ -202,7 +220,8 @@ static void test_oidFunctionSet(void)
ret = CryptGetOIDFunctionAddress(set1, X509_ASN_ENCODING, X509_CERT, 0,
&funcAddr, &hFuncAddr);
- ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
+ ok((!ret && GetLastError() == ERROR_FILE_NOT_FOUND) ||
+ broken(ret) /* some Win98 */,
"Expected ERROR_FILE_NOT_FOUND, got %08x\n", GetLastError());
}
}
@@ -254,8 +273,10 @@ static void test_installOIDFunctionAddress(void)
*/
ret = CryptGetOIDFunctionAddress(set, X509_ASN_ENCODING, 0, 0,
(void **)&funcAddr, &hFuncAddr);
- ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
- "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
+ ok(!ret && (GetLastError() == ERROR_FILE_NOT_FOUND ||
+ GetLastError() == E_INVALIDARG /* some Win98 */),
+ "Expected ERROR_FILE_NOT_FOUND or E_INVALIDARG, got %d\n",
+ GetLastError());
ret = CryptGetOIDFunctionAddress(set, X509_ASN_ENCODING, X509_CERT, 0,
(void **)&funcAddr, &hFuncAddr);
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
@@ -510,7 +531,7 @@ static void test_enumOIDInfo(void)
if (!pCryptEnumOIDInfo)
{
- skip("CryptEnumOIDInfo() is not available\n");
+ win_skip("CryptEnumOIDInfo() is not available\n");
return;
}
diff --git a/rostests/winetests/crypt32/protectdata.c b/rostests/winetests/crypt32/protectdata.c
index 97b08c510fb..82cf1aa2667 100644
--- a/rostests/winetests/crypt32/protectdata.c
+++ b/rostests/winetests/crypt32/protectdata.c
@@ -221,7 +221,7 @@ START_TEST(protectdata)
pCryptUnprotectData = (void*)GetProcAddress(hCrypt32, "CryptUnprotectData");
if (!pCryptProtectData || !pCryptUnprotectData)
{
- skip("Crypt(Un)ProtectData() is not available\n");
+ win_skip("Crypt(Un)ProtectData() is not available\n");
return;
}
diff --git a/rostests/winetests/crypt32/sip.c b/rostests/winetests/crypt32/sip.c
index 7ffa2b98d10..372d7ceaac9 100644
--- a/rostests/winetests/crypt32/sip.c
+++ b/rostests/winetests/crypt32/sip.c
@@ -72,9 +72,14 @@ static void test_AddRemoveProvider(void)
}
else
{
- ok (!ret, "Expected CryptSIPRemoveProvider to fail.\n");
- ok (GetLastError() == ERROR_FILE_NOT_FOUND,
- "Expected ERROR_FILE_NOT_FOUND, got %d.\n", GetLastError());
+ /* On some Win98 systems, CryptSIPRemoveProvider always succeeds if
+ * the arguments are correct, whether or not the registry key is
+ * present, so don't test ret, just check the last error if it does
+ * return FALSE.
+ */
+ if (!ret)
+ ok (GetLastError() == ERROR_FILE_NOT_FOUND,
+ "Expected ERROR_FILE_NOT_FOUND, got %d.\n", GetLastError());
}
/* Everything OK, pwszIsFunctionName and pwszIsFunctionNameFmt2 are left NULL
@@ -104,9 +109,14 @@ static void test_AddRemoveProvider(void)
*/
SetLastError(0xdeadbeef);
ret = CryptSIPRemoveProvider(&actionid);
- ok (!ret, "Expected CryptSIPRemoveProvider to fail.\n");
- ok (GetLastError() == ERROR_FILE_NOT_FOUND,
- "Expected ERROR_FILE_NOT_FOUND, got %d.\n", GetLastError());
+ /* On some Win98 systems, CryptSIPRemoveProvider always succeeds if
+ * the arguments are correct, whether or not the registry key is
+ * present, so don't test ret, just check the last error if it does
+ * return FALSE.
+ */
+ if (!ret)
+ ok (GetLastError() == ERROR_FILE_NOT_FOUND,
+ "Expected ERROR_FILE_NOT_FOUND, got %d.\n", GetLastError());
/* Everything OK */
memset(&newprov, 0, sizeof(SIP_ADD_NEWPROVIDER));
@@ -228,8 +238,9 @@ static void test_SIPRetrieveSubjectGUID(void)
ok ( !ret, "Expected CryptSIPRetrieveSubjectGuid to fail\n");
ok ( GetLastError() == ERROR_FILE_INVALID ||
GetLastError() == ERROR_INVALID_PARAMETER /* Vista */ ||
- GetLastError() == ERROR_SUCCESS /* Win98 */,
- "Expected ERROR_FILE_INVALID, ERROR_INVALID_PARAMETER or ERROR_SUCCESS, got 0x%08x\n", GetLastError());
+ GetLastError() == ERROR_SUCCESS /* most Win98 */ ||
+ GetLastError() == TRUST_E_SUBJECT_FORM_UNKNOWN /* some Win98 */,
+ "Expected ERROR_FILE_INVALID, ERROR_INVALID_PARAMETER, ERROR_SUCCESS or TRUST_E_SUBJECT_FORM_UNKNOWN, got 0x%08x\n", GetLastError());
ok ( !memcmp(&subject, &nullSubject, sizeof(GUID)),
"Expected a NULL GUID for empty file %s, not %s\n", tempfile, show_guid(&subject, guid1));
@@ -243,8 +254,9 @@ static void test_SIPRetrieveSubjectGUID(void)
ret = CryptSIPRetrieveSubjectGuid(tempfileW, NULL, &subject);
ok ( !ret, "Expected CryptSIPRetrieveSubjectGuid to fail\n");
ok ( GetLastError() == ERROR_INVALID_PARAMETER ||
- GetLastError() == ERROR_SUCCESS /* Win98 */,
- "Expected ERROR_INVALID_PARAMETER or ERROR_SUCCESS, got 0x%08x\n", GetLastError());
+ GetLastError() == ERROR_SUCCESS /* most Win98 */ ||
+ GetLastError() == TRUST_E_SUBJECT_FORM_UNKNOWN /* some Win98 */,
+ "Expected ERROR_INVALID_PARAMETER, ERROR_SUCCESS or TRUST_E_SUBJECT_FORM_UNKNOWN, got 0x%08x\n", GetLastError());
ok ( !memcmp(&subject, &nullSubject, sizeof(GUID)),
"Expected a NULL GUID for empty file %s, not %s\n", tempfile, show_guid(&subject, guid1));
diff --git a/rostests/winetests/crypt32/store.c b/rostests/winetests/crypt32/store.c
index 65d7f1529e7..ae10fbcfed2 100644
--- a/rostests/winetests/crypt32/store.c
+++ b/rostests/winetests/crypt32/store.c
@@ -285,7 +285,7 @@ static void testCollectionStore(void)
if (!pCertAddStoreToCollection)
{
- skip("CertAddStoreToCollection() is not available\n");
+ win_skip("CertAddStoreToCollection() is not available\n");
return;
}
@@ -545,7 +545,7 @@ static void testCollectionStore(void)
if (!pCertRemoveStoreFromCollection)
{
- skip("CertRemoveStoreFromCollection() is not available\n");
+ win_skip("CertRemoveStoreFromCollection() is not available\n");
}
else
{
@@ -639,7 +639,7 @@ static void testRegStore(void)
/* It looks like the remainder pretty much needs CertControlStore() */
if (!pCertControlStore)
{
- skip("CertControlStore() is not available\n");
+ win_skip("CertControlStore() is not available\n");
return;
}
@@ -1113,7 +1113,7 @@ static void testFileStore(void)
if (!pCertControlStore)
{
- skip("CertControlStore() is not available\n");
+ win_skip("CertControlStore() is not available\n");
return;
}
@@ -1714,7 +1714,7 @@ static void testCertEnumSystemStore(void)
if (!pCertEnumSystemStore)
{
- skip("CertEnumSystemStore() is not available\n");
+ win_skip("CertEnumSystemStore() is not available\n");
return;
}
@@ -1754,7 +1754,7 @@ static void testStoreProperty(void)
if (!pCertGetStoreProperty || !pCertSetStoreProperty)
{
- skip("CertGet/SetStoreProperty() is not available\n");
+ win_skip("CertGet/SetStoreProperty() is not available\n");
return;
}
@@ -2016,7 +2016,7 @@ static void test_I_UpdateStore(void)
if (!pI_CertUpdatestore)
{
- skip("No I_CertUpdateStore\n");
+ win_skip("No I_CertUpdateStore\n");
return;
}
store1 = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
diff --git a/rostests/winetests/crypt32/str.c b/rostests/winetests/crypt32/str.c
index 2b30995615f..ebc334240ae 100644
--- a/rostests/winetests/crypt32/str.c
+++ b/rostests/winetests/crypt32/str.c
@@ -281,7 +281,7 @@ static void test_CertRDNValueToStrW(void)
if (!pCertRDNValueToStrW)
{
- skip("CertRDNValueToStrW is not available\n");
+ win_skip("CertRDNValueToStrW is not available\n");
return;
}
@@ -333,7 +333,7 @@ static void test_CertNameToStrA(void)
if (!pCertNameToStrA)
{
- skip("CertNameToStrA is not available\n");
+ win_skip("CertNameToStrA is not available\n");
return;
}
@@ -412,7 +412,7 @@ static void test_CertNameToStrW(void)
if (!pCertNameToStrW)
{
- skip("CertNameToStrW is not available\n");
+ win_skip("CertNameToStrW is not available\n");
return;
}
@@ -499,7 +499,7 @@ static void test_CertStrToNameA(void)
if (!pCertStrToNameA)
{
- skip("CertStrToNameA is not available\n");
+ win_skip("CertStrToNameA is not available\n");
return;
}
@@ -584,7 +584,7 @@ static void test_CertStrToNameW(void)
if (!pCertStrToNameW)
{
- skip("CertStrToNameW is not available\n");
+ win_skip("CertStrToNameW is not available\n");
return;
}
diff --git a/rostests/winetests/gdiplus/brush.c b/rostests/winetests/gdiplus/brush.c
index ae831847835..d2cbd3c77e3 100644
--- a/rostests/winetests/gdiplus/brush.c
+++ b/rostests/winetests/gdiplus/brush.c
@@ -283,6 +283,67 @@ static void test_texturewrap(void)
ReleaseDC(0, hdc);
}
+static void test_gradientgetrect(void)
+{
+ GpLineGradient *brush;
+ GpRectF rectf;
+ GpStatus status;
+ GpPointF pt1, pt2;
+
+ pt1.X = pt1.Y = 1.0;
+ pt2.X = pt2.Y = 100.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(1.0, rectf.X);
+ expectf(1.0, rectf.Y);
+ expectf(99.0, rectf.Width);
+ expectf(99.0, rectf.Height);
+ status = GdipDeleteBrush((GpBrush*)brush);
+ /* vertical gradient */
+ pt1.X = pt1.Y = pt2.X = 0.0;
+ pt2.Y = 10.0;
+ status = GdipCreateLineBrush(&pt1, &pt2, 0, 0, WrapModeTile, &brush);
+ expect(Ok, status);
+ memset(&rectf, 0, sizeof(GpRectF));
+ status = GdipGetLineRect(brush, &rectf);
+ expect(Ok, status);
+ todo_wine expectf(-5.0, rectf.X);
+ expectf(0.0, rectf.Y);
+ todo_wine expectf(10.0, rectf.Width);
+ expectf(10.0, rectf.Height);
+ status = GdipDeleteBrush((GpBrush*)brush);
+ /* horizontal gradient */
+ pt1.X = pt1.Y = pt2.Y = 0.0;
+ pt2.X = 10.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);
+ todo_wine expectf(-5.0, rectf.Y);
+ expectf(10.0, rectf.Width);
+ todo_wine expectf(10.0, rectf.Height);
+ status = GdipDeleteBrush((GpBrush*)brush);
+ /* from rect with 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);
+}
+
START_TEST(brush)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -303,6 +364,7 @@ START_TEST(brush)
test_getgamma();
test_transform();
test_texturewrap();
+ test_gradientgetrect();
GdiplusShutdown(gdiplusToken);
}
diff --git a/rostests/winetests/gdiplus/gdiplus.rbuild b/rostests/winetests/gdiplus/gdiplus.rbuild
index 8966c181b0a..02cbcfd9413 100644
--- a/rostests/winetests/gdiplus/gdiplus.rbuild
+++ b/rostests/winetests/gdiplus/gdiplus.rbuild
@@ -22,6 +22,7 @@
user32
gdi32
kernel32
+ ole32
ntdll
diff --git a/rostests/winetests/gdiplus/graphics.c b/rostests/winetests/gdiplus/graphics.c
index fb98a3810f7..8091a9adff3 100644
--- a/rostests/winetests/gdiplus/graphics.c
+++ b/rostests/winetests/gdiplus/graphics.c
@@ -486,6 +486,7 @@ static void test_Get_Release_DC(void)
INT i;
BOOL res;
ARGB color = 0x00000000;
+ HRGN hrgn = CreateRectRgn(0, 0, 10, 10);
pt[0].X = 10;
pt[0].Y = 10;
@@ -653,6 +654,10 @@ static void test_Get_Release_DC(void)
expect(ObjectBusy, status); status = Ok;
status = GdipFlush(graphics, FlushIntentionFlush);
expect(ObjectBusy, status); status = Ok;
+ status = GdipGetClipBounds(graphics, rectf);
+ expect(ObjectBusy, status); status = Ok;
+ status = GdipGetClipBoundsI(graphics, rect);
+ expect(ObjectBusy, status); status = Ok;
status = GdipGetCompositingMode(graphics, &compmode);
expect(ObjectBusy, status); status = Ok;
status = GdipGetCompositingQuality(graphics, &quality);
@@ -711,6 +716,8 @@ static void test_Get_Release_DC(void)
expect(ObjectBusy, status); status = Ok;
status = GdipTranslateWorldTransform(graphics, 0.0, 0.0, MatrixOrderPrepend);
expect(ObjectBusy, status); status = Ok;
+ status = GdipSetClipHrgn(graphics, hrgn, CombineModeReplace);
+ expect(ObjectBusy, status); status = Ok;
status = GdipSetClipPath(graphics, path, CombineModeReplace);
expect(ObjectBusy, status); status = Ok;
status = GdipSetClipRect(graphics, 0.0, 0.0, 10.0, 10.0, CombineModeReplace);
@@ -718,7 +725,11 @@ static void test_Get_Release_DC(void)
status = GdipSetClipRectI(graphics, 0, 0, 10, 10, CombineModeReplace);
expect(ObjectBusy, status); status = Ok;
status = GdipSetClipRegion(graphics, clip, CombineModeReplace);
- expect(ObjectBusy, status);
+ expect(ObjectBusy, status); status = Ok;
+ status = GdipTranslateClip(graphics, 0.0, 0.0);
+ expect(ObjectBusy, status); status = Ok;
+ status = GdipTranslateClipI(graphics, 0, 0);
+ expect(ObjectBusy, status); status = Ok;
status = GdipDrawPolygon(graphics, pen, ptf, 5);
expect(ObjectBusy, status); status = Ok;
status = GdipDrawPolygonI(graphics, pen, pt, 5);
@@ -746,6 +757,7 @@ static void test_Get_Release_DC(void)
GdipDeleteBrush((GpBrush*)brush);
GdipDeleteRegion(region);
GdipDeleteMatrix(m);
+ DeleteObject(hrgn);
ReleaseDC(0, hdc);
}
diff --git a/rostests/winetests/gdiplus/graphicspath.c b/rostests/winetests/gdiplus/graphicspath.c
index 416d80caa90..6e257eb8008 100644
--- a/rostests/winetests/gdiplus/graphicspath.c
+++ b/rostests/winetests/gdiplus/graphicspath.c
@@ -907,7 +907,12 @@ static path_test_t addpie_path[] = {
{79.4, 46.8, PathPointTypeBezier,0, 0}, /*3*/
{63.9, 49.0, PathPointTypeBezier | PathPointTypeCloseSubpath, 0, 0} /*4*/
};
-
+static path_test_t addpie_path2[] = {
+ {0.0, 30.0, PathPointTypeStart | PathPointTypeCloseSubpath, 0, 0} /*0*/
+ };
+static path_test_t addpie_path3[] = {
+ {30.0, 0.0, PathPointTypeStart | PathPointTypeCloseSubpath, 0, 0} /*0*/
+ };
static void test_addpie(void)
{
GpStatus status;
@@ -922,6 +927,20 @@ static void test_addpie(void)
status = GdipAddPathPie(path, 0.0, 0.0, 100.0, 50.0, 10.0, 50.0);
expect(Ok, status);
ok_path(path, addpie_path, sizeof(addpie_path)/sizeof(path_test_t), FALSE);
+ status = GdipResetPath(path);
+ expect(Ok, status);
+
+ /* zero width base ellipse */
+ status = GdipAddPathPie(path, 0.0, 0.0, 0.0, 60.0, -90.0, 24.0);
+ expect(InvalidParameter, status);
+ ok_path(path, addpie_path2, sizeof(addpie_path2)/sizeof(path_test_t), FALSE);
+ status = GdipResetPath(path);
+ expect(Ok, status);
+
+ /* zero height base ellipse */
+ status = GdipAddPathPie(path, 0.0, 0.0, 60.0, 0.0 , -90.0, 24.0);
+ expect(InvalidParameter, status);
+ ok_path(path, addpie_path3, sizeof(addpie_path3)/sizeof(path_test_t), FALSE);
GdipDeletePath(path);
}
@@ -1038,6 +1057,58 @@ static void test_flatten(void)
GdipDeletePath(path);
}
+static void test_isvisible(void)
+{
+ GpPath *path;
+ GpGraphics *graphics = NULL;
+ HDC hdc = GetDC(0);
+ BOOL result;
+ GpStatus status;
+
+ status = GdipCreateFromHDC(hdc, &graphics);
+ expect(Ok, status);
+ status = GdipCreatePath(FillModeAlternate, &path);
+ expect(Ok, status);
+
+ /* NULL */
+ status = GdipIsVisiblePathPoint(NULL, 0.0, 0.0, NULL, NULL);
+ expect(InvalidParameter, status);
+ status = GdipIsVisiblePathPoint(path, 0.0, 0.0, NULL, NULL);
+ expect(InvalidParameter, status);
+ status = GdipIsVisiblePathPoint(path, 0.0, 0.0, NULL, NULL);
+ expect(InvalidParameter, status);
+ status = GdipIsVisiblePathPoint(path, 0.0, 0.0, graphics, NULL);
+ expect(InvalidParameter, status);
+
+ /* empty path */
+ result = TRUE;
+ status = GdipIsVisiblePathPoint(path, 0.0, 0.0, NULL, &result);
+ expect(Ok, status);
+ expect(FALSE, result);
+ /* rect */
+ status = GdipAddPathRectangle(path, 0.0, 0.0, 10.0, 10.0);
+ expect(Ok, status);
+ result = FALSE;
+ status = GdipIsVisiblePathPoint(path, 0.0, 0.0, NULL, &result);
+ expect(Ok, status);
+ expect(TRUE, result);
+ result = TRUE;
+ status = GdipIsVisiblePathPoint(path, 11.0, 11.0, NULL, &result);
+ expect(Ok, status);
+ expect(FALSE, result);
+ /* not affected by clipping */
+ status = GdipSetClipRect(graphics, 5.0, 5.0, 5.0, 5.0, CombineModeReplace);
+ expect(Ok, status);
+ result = FALSE;
+ status = GdipIsVisiblePathPoint(path, 0.0, 0.0, graphics, &result);
+ expect(Ok, status);
+ expect(TRUE, result);
+
+ GdipDeletePath(path);
+ GdipDeleteGraphics(graphics);
+ ReleaseDC(0, hdc);
+}
+
START_TEST(graphicspath)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -1066,6 +1137,7 @@ START_TEST(graphicspath)
test_reverse();
test_addpie();
test_flatten();
+ test_isvisible();
GdiplusShutdown(gdiplusToken);
}
diff --git a/rostests/winetests/gdiplus/image.c b/rostests/winetests/gdiplus/image.c
index 6000dde0b27..12fab7cb659 100644
--- a/rostests/winetests/gdiplus/image.c
+++ b/rostests/winetests/gdiplus/image.c
@@ -18,13 +18,69 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#define COBJMACROS
+
+#include
+
+#include "initguid.h"
#include "windows.h"
#include "gdiplus.h"
#include "wine/test.h"
-#include
-#include "wingdi.h"
#define expect(expected, got) ok(((UINT)got) == ((UINT)expected), "Expected %.8x, got %.8x\n", (UINT)expected, (UINT)got)
+#define expectf(expected, got) ok(fabs(expected - got) < 0.0001, "Expected %.2f, got %.2f\n", expected, got)
+
+static void expect_rawformat(REFGUID expected, GpImage *img, int line, BOOL todo)
+{
+ GUID raw;
+ WCHAR bufferW[39];
+ char buffer[39];
+ char buffer2[39];
+ GpStatus stat;
+
+ stat = GdipGetImageRawFormat(img, &raw);
+ ok_(__FILE__, line)(stat == Ok, "GdipGetImageRawFormat failed with %d\n", stat);
+ if(stat != Ok) return;
+ StringFromGUID2(&raw, bufferW, sizeof(bufferW)/sizeof(bufferW[0]));
+ WideCharToMultiByte(CP_ACP, 0, bufferW, sizeof(bufferW)/sizeof(bufferW[0]), buffer, sizeof(buffer), NULL, NULL);
+ StringFromGUID2(expected, bufferW, sizeof(bufferW)/sizeof(bufferW[0]));
+ WideCharToMultiByte(CP_ACP, 0, bufferW, sizeof(bufferW)/sizeof(bufferW[0]), buffer2, sizeof(buffer2), NULL, NULL);
+ if(todo)
+ todo_wine ok_(__FILE__, line)(IsEqualGUID(&raw, expected), "Expected format %s, got %s\n", buffer2, buffer);
+ else
+ ok_(__FILE__, line)(IsEqualGUID(&raw, expected), "Expected format %s, got %s\n", buffer2, buffer);
+}
+
+static void test_bufferrawformat(void* buff, int size, REFGUID expected, int line, BOOL todo)
+{
+ LPSTREAM stream;
+ HGLOBAL hglob;
+ LPBYTE data;
+ HRESULT hres;
+ GpStatus stat;
+ GpBitmap *bmp;
+
+ hglob = GlobalAlloc (0, size);
+ data = GlobalLock (hglob);
+ memcpy(data, buff, size);
+ GlobalUnlock(hglob); data = NULL;
+
+ hres = CreateStreamOnHGlobal(hglob, TRUE, &stream);
+ ok_(__FILE__, line)(hres == S_OK, "Failed to create a stream\n");
+ if(hres != S_OK) return;
+
+ stat = GdipCreateBitmapFromStream(stream, &bmp);
+ ok_(__FILE__, line)(stat == Ok, "Failed to create a Bitmap\n");
+ if(stat != Ok){
+ IStream_Release(stream);
+ return;
+ }
+
+ expect_rawformat(expected, (GpImage*)bmp, line, todo);
+
+ GdipDisposeImage((GpImage*)bmp);
+ IStream_Release(stream);
+}
static void test_Scan0(void)
{
@@ -73,10 +129,8 @@ static void test_Scan0(void)
bm = NULL;
stat = GdipCreateBitmapFromScan0(10, 10, -8, PixelFormat24bppRGB, buff, &bm);
- todo_wine{
- expect(Ok, stat);
- ok(NULL != bm, "Expected bitmap to be initialized\n");
- }
+ expect(Ok, stat);
+ ok(NULL != bm, "Expected bitmap to be initialized\n");
if (stat == Ok)
GdipDisposeImage((GpImage*)bm);
@@ -112,8 +166,8 @@ static void test_GetImageDimension(void)
h = -1;
stat = GdipGetImageDimension((GpImage*)bm,&w,&h);
expect(Ok, stat);
- ok(fabs(WIDTH - w) < 0.0001, "Width wrong\n");
- ok(fabs(HEIGHT - h) < 0.0001, "Height wrong\n");
+ expectf(WIDTH, w);
+ expectf(HEIGHT, h);
GdipDisposeImage((GpImage*)bm);
}
@@ -219,8 +273,8 @@ static void test_SavingImages(void)
stat = GdipGetImageDimension((GpImage*)bm, &w, &h);
if (stat != Ok) goto cleanup;
- ok((fabs(w - WIDTH) < 0.01) && (fabs(h - HEIGHT) < 0.01),
- "Saved image dimensions are different!\n");
+ expectf(WIDTH, w);
+ expectf(HEIGHT, h);
cleanup:
GdipFree(codecs);
@@ -416,8 +470,8 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm);
expect(Ok, stat);
expect(Ok, GdipGetImageDimension((GpImage*) gpbm, &width, &height));
- ok(fabs(WIDTH1 - width) < .0001, "width wrong\n");
- ok(fabs(HEIGHT1 - height) < .0001, "height wrong\n");
+ expectf(WIDTH1, width);
+ expectf(HEIGHT1, height);
if (stat == Ok)
GdipDisposeImage((GpImage*)gpbm);
GlobalFree(hbm);
@@ -425,9 +479,12 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
hbm = CreateBitmap(WIDTH2, HEIGHT2, 1, 1, &buff);
stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm);
expect(Ok, stat);
+ /* raw format */
+ expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)gpbm, __LINE__, TRUE);
+
expect(Ok, GdipGetImageDimension((GpImage*) gpbm, &width, &height));
- ok(fabs(WIDTH2 - width) < .0001, "width wrong\n");
- ok(fabs(HEIGHT2 - height) < .0001, "height wrong\n");
+ expectf(WIDTH2, width);
+ expectf(HEIGHT2, height);
if (stat == Ok)
GdipDisposeImage((GpImage*)gpbm);
GlobalFree(hbm);
@@ -447,15 +504,15 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm);
expect(Ok, stat);
expect(Ok, GdipGetImageDimension((GpImage*) gpbm, &width, &height));
- ok(fabs(WIDTH1 - width) < .0001, "width wrong\n");
- ok(fabs(HEIGHT1 - height) < .0001, "height wrong\n");
+ expectf(WIDTH1, width);
+ expectf(HEIGHT1, height);
if (stat == Ok)
GdipDisposeImage((GpImage*)gpbm);
LogPal = GdipAlloc(sizeof(LOGPALETTE));
ok(LogPal != NULL, "unable to allocate LOGPALETTE\n");
LogPal->palVersion = 0x300;
- hpal = CreatePalette((const LOGPALETTE*) LogPal);
+ hpal = CreatePalette(LogPal);
ok(hpal != NULL, "CreatePalette failed\n");
GdipFree(LogPal);
@@ -501,10 +558,12 @@ static void test_GdipCloneImage(void)
/* Create an image, clone it, delete the original, make sure the copy works */
stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm);
expect(Ok, stat);
+ expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)bm, __LINE__, TRUE);
image_src = ((GpImage*)bm);
stat = GdipCloneImage(image_src, &image_dest);
expect(Ok, stat);
+ expect_rawformat(&ImageFormatMemoryBMP, image_dest, __LINE__, TRUE);
stat = GdipDisposeImage((GpImage*)bm);
expect(Ok, stat);
@@ -512,8 +571,8 @@ static void test_GdipCloneImage(void)
expect(Ok, stat);
/* Treat FP values carefully */
- ok(fabsf(rectF.Width-WIDTH)<1e-5, "Expected: %d, got %.05f\n", WIDTH, rectF.Width);
- ok(fabsf(rectF.Height-HEIGHT)<1e-5, "Expected: %d, got %.05f\n", HEIGHT, rectF.Height);
+ expectf((REAL)WIDTH, rectF.Width);
+ expectf((REAL)HEIGHT, rectF.Height);
stat = GdipDisposeImage(image_dest);
expect(Ok, stat);
@@ -530,6 +589,150 @@ static void test_testcontrol(void)
ok(param != 0, "Build number expected, got %u\n", param);
}
+static void test_fromhicon(void)
+{
+ static const BYTE bmp_bits[1024];
+ HBITMAP hbmMask, hbmColor;
+ ICONINFO info;
+ HICON hIcon;
+ GpStatus stat;
+ GpBitmap *bitmap = NULL;
+ UINT dim;
+ ImageType type;
+ PixelFormat format;
+
+ /* NULL */
+ stat = GdipCreateBitmapFromHICON(NULL, NULL);
+ expect(InvalidParameter, stat);
+ stat = GdipCreateBitmapFromHICON(NULL, &bitmap);
+ expect(InvalidParameter, stat);
+
+ /* color icon 1 bit */
+ hbmMask = CreateBitmap(16, 16, 1, 1, bmp_bits);
+ ok(hbmMask != 0, "CreateBitmap failed\n");
+ hbmColor = CreateBitmap(16, 16, 1, 1, bmp_bits);
+ ok(hbmColor != 0, "CreateBitmap failed\n");
+ info.fIcon = TRUE;
+ info.xHotspot = 8;
+ info.yHotspot = 8;
+ info.hbmMask = hbmMask;
+ info.hbmColor = hbmColor;
+ hIcon = CreateIconIndirect(&info);
+ ok(hIcon != 0, "CreateIconIndirect failed\n");
+ DeleteObject(hbmMask);
+ DeleteObject(hbmColor);
+
+ stat = GdipCreateBitmapFromHICON(hIcon, &bitmap);
+ expect(Ok, stat);
+ if(stat == Ok){
+ /* check attributes */
+ stat = GdipGetImageHeight((GpImage*)bitmap, &dim);
+ expect(Ok, stat);
+ expect(16, dim);
+ stat = GdipGetImageWidth((GpImage*)bitmap, &dim);
+ expect(Ok, stat);
+ expect(16, dim);
+ stat = GdipGetImageType((GpImage*)bitmap, &type);
+ expect(Ok, stat);
+ expect(ImageTypeBitmap, type);
+ stat = GdipGetImagePixelFormat((GpImage*)bitmap, &format);
+ expect(PixelFormat32bppARGB, format);
+ /* raw format */
+ expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)bitmap, __LINE__, TRUE);
+ GdipDisposeImage((GpImage*)bitmap);
+ }
+ DestroyIcon(hIcon);
+
+ /* color icon 8 bpp */
+ hbmMask = CreateBitmap(16, 16, 1, 8, bmp_bits);
+ ok(hbmMask != 0, "CreateBitmap failed\n");
+ hbmColor = CreateBitmap(16, 16, 1, 8, bmp_bits);
+ ok(hbmColor != 0, "CreateBitmap failed\n");
+ info.fIcon = TRUE;
+ info.xHotspot = 8;
+ info.yHotspot = 8;
+ info.hbmMask = hbmMask;
+ info.hbmColor = hbmColor;
+ hIcon = CreateIconIndirect(&info);
+ ok(hIcon != 0, "CreateIconIndirect failed\n");
+ DeleteObject(hbmMask);
+ DeleteObject(hbmColor);
+
+ stat = GdipCreateBitmapFromHICON(hIcon, &bitmap);
+ expect(Ok, stat);
+ if(stat == Ok){
+ /* check attributes */
+ stat = GdipGetImageHeight((GpImage*)bitmap, &dim);
+ expect(Ok, stat);
+ expect(16, dim);
+ stat = GdipGetImageWidth((GpImage*)bitmap, &dim);
+ expect(Ok, stat);
+ expect(16, dim);
+ stat = GdipGetImageType((GpImage*)bitmap, &type);
+ expect(Ok, stat);
+ expect(ImageTypeBitmap, type);
+ stat = GdipGetImagePixelFormat((GpImage*)bitmap, &format);
+ expect(PixelFormat32bppARGB, format);
+ /* raw format */
+ expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)bitmap, __LINE__, TRUE);
+ GdipDisposeImage((GpImage*)bitmap);
+ }
+ DestroyIcon(hIcon);
+}
+
+/* 1x1 pixel png */
+static const unsigned char pngimage[285] = {
+0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52,
+0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x08,0x02,0x00,0x00,0x00,0x90,0x77,0x53,
+0xde,0x00,0x00,0x00,0x09,0x70,0x48,0x59,0x73,0x00,0x00,0x0b,0x13,0x00,0x00,0x0b,
+0x13,0x01,0x00,0x9a,0x9c,0x18,0x00,0x00,0x00,0x07,0x74,0x49,0x4d,0x45,0x07,0xd5,
+0x06,0x03,0x0f,0x07,0x2d,0x12,0x10,0xf0,0xfd,0x00,0x00,0x00,0x0c,0x49,0x44,0x41,
+0x54,0x08,0xd7,0x63,0xf8,0xff,0xff,0x3f,0x00,0x05,0xfe,0x02,0xfe,0xdc,0xcc,0x59,
+0xe7,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+/* 1x1 pixel gif */
+static const unsigned char gifimage[35] = {
+0x47,0x49,0x46,0x38,0x37,0x61,0x01,0x00,0x01,0x00,0x80,0x00,0x00,0xff,0xff,0xff,
+0xff,0xff,0xff,0x2c,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x02,0x02,0x44,
+0x01,0x00,0x3b
+};
+/* 1x1 pixel bmp */
+static const unsigned char bmpimage[66] = {
+0x42,0x4d,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x28,0x00,
+0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,
+0x00,0x00,0x04,0x00,0x00,0x00,0x12,0x0b,0x00,0x00,0x12,0x0b,0x00,0x00,0x02,0x00,
+0x00,0x00,0x02,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0x00,0x00,
+0x00,0x00
+};
+/* 1x1 pixel jpg */
+static const unsigned char jpgimage[285] = {
+0xff,0xd8,0xff,0xe0,0x00,0x10,0x4a,0x46,0x49,0x46,0x00,0x01,0x01,0x01,0x01,0x2c,
+0x01,0x2c,0x00,0x00,0xff,0xdb,0x00,0x43,0x00,0x05,0x03,0x04,0x04,0x04,0x03,0x05,
+0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x07,0x0c,0x08,0x07,0x07,0x07,0x07,0x0f,0x0b,
+0x0b,0x09,0x0c,0x11,0x0f,0x12,0x12,0x11,0x0f,0x11,0x11,0x13,0x16,0x1c,0x17,0x13,
+0x14,0x1a,0x15,0x11,0x11,0x18,0x21,0x18,0x1a,0x1d,0x1d,0x1f,0x1f,0x1f,0x13,0x17,
+0x22,0x24,0x22,0x1e,0x24,0x1c,0x1e,0x1f,0x1e,0xff,0xdb,0x00,0x43,0x01,0x05,0x05,
+0x05,0x07,0x06,0x07,0x0e,0x08,0x08,0x0e,0x1e,0x14,0x11,0x14,0x1e,0x1e,0x1e,0x1e,
+0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
+0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,
+0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0xff,0xc0,
+0x00,0x11,0x08,0x00,0x01,0x00,0x01,0x03,0x01,0x22,0x00,0x02,0x11,0x01,0x03,0x11,
+0x01,0xff,0xc4,0x00,0x15,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xff,0xc4,0x00,0x14,0x10,0x01,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xc4,
+0x00,0x14,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0xff,0xc4,0x00,0x14,0x11,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xda,0x00,0x0c,0x03,0x01,
+0x00,0x02,0x11,0x03,0x11,0x00,0x3f,0x00,0xb2,0xc0,0x07,0xff,0xd9
+};
+static void test_getrawformat(void)
+{
+ test_bufferrawformat((void*)pngimage, sizeof(pngimage), &ImageFormatPNG, __LINE__, TRUE);
+ test_bufferrawformat((void*)gifimage, sizeof(gifimage), &ImageFormatGIF, __LINE__, TRUE);
+ test_bufferrawformat((void*)bmpimage, sizeof(bmpimage), &ImageFormatBMP, __LINE__, FALSE);
+ test_bufferrawformat((void*)jpgimage, sizeof(jpgimage), &ImageFormatJPEG, __LINE__, TRUE);
+}
+
START_TEST(image)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -553,6 +756,8 @@ START_TEST(image)
test_GdipGetImageFlags();
test_GdipCloneImage();
test_testcontrol();
+ test_fromhicon();
+ test_getrawformat();
GdiplusShutdown(gdiplusToken);
}
diff --git a/rostests/winetests/gdiplus/region.c b/rostests/winetests/gdiplus/region.c
index 9ac0e9a78fe..689811cedc4 100644
--- a/rostests/winetests/gdiplus/region.c
+++ b/rostests/winetests/gdiplus/region.c
@@ -709,6 +709,9 @@ static void test_fromhrgn(void)
UINT needed;
DWORD buf[220];
RegionDataPoint *point;
+ GpGraphics *graphics = NULL;
+ HDC hdc;
+ BOOL res;
/* NULL */
status = GdipCreateRegionHrgn(NULL, NULL);
@@ -716,24 +719,42 @@ static void test_fromhrgn(void)
status = GdipCreateRegionHrgn(NULL, ®ion);
expect(InvalidParameter, status);
status = GdipCreateRegionHrgn((HRGN)0xdeadbeef, ®ion);
- todo_wine expect(InvalidParameter, status);
+ expect(InvalidParameter, status);
+
+ /* empty rectangle */
+ hrgn = CreateRectRgn(0, 0, 0, 0);
+ status = GdipCreateRegionHrgn(hrgn, ®ion);
+ expect(Ok, status);
+ if(status == Ok) {
+
+ hdc = GetDC(0);
+ status = GdipCreateFromHDC(hdc, &graphics);
+ expect(Ok, status);
+ res = FALSE;
+ status = GdipIsEmptyRegion(region, graphics, &res);
+ expect(Ok, status);
+ expect(TRUE, res);
+ GdipDeleteGraphics(graphics);
+ ReleaseDC(0, hdc);
+ GdipDeleteRegion(region);
+
+ }
+ DeleteObject(hrgn);
/* rectangle */
hrgn = CreateRectRgn(0, 0, 100, 10);
status = GdipCreateRegionHrgn(hrgn, ®ion);
- todo_wine expect(Ok, status);
+ expect(Ok, status);
status = GdipGetRegionDataSize(region, &needed);
-todo_wine{
expect(Ok, status);
expect(56, needed);
-}
status = GdipGetRegionData(region, (BYTE*)buf, sizeof(buf), &needed);
- todo_wine expect(Ok, status);
+ expect(Ok, status);
if(status == Ok){
-todo_wine{
+
expect(56, needed);
expect_dword(buf, 48);
expect_magic((DWORD*)(buf + 2));
@@ -742,25 +763,23 @@ todo_wine{
expect_dword(buf + 5, 0x00000020);
expect_magic((DWORD*)(buf + 6));
expect_dword(buf + 7, 0x00000004);
- expect_dword(buf + 8, 0x00006000); /* ?? */
-}
+ todo_wine expect_dword(buf + 8, 0x00006000); /* ?? */
+
point = (RegionDataPoint*)buf + 9;
expect(0, point[0].X);
expect(0, point[0].Y);
-todo_wine{
expect(100,point[1].X); /* buf + 10 */
expect(0, point[1].Y);
expect(100,point[2].X); /* buf + 11 */
expect(10, point[2].Y);
-}
+
expect(0, point[3].X); /* buf + 12 */
-todo_wine{
expect(10, point[3].Y);
expect_dword(buf + 13, 0x81010100); /* closed */
-}
+
}
GdipDeleteRegion(region);
@@ -777,6 +796,10 @@ todo_wine{
expect(216, needed);
}
status = GdipGetRegionData(region, (BYTE*)buf, sizeof(buf), &needed);
+ todo_wine expect(Ok, status);
+
+ if(status == Ok)
+ {
todo_wine{
expect(Ok, status);
expect(216, needed);
@@ -789,6 +812,8 @@ todo_wine{
expect_dword(buf + 7, 0x00000024);
expect_dword(buf + 8, 0x00006000); /* ?? */
}
+ }
+
GdipDeleteRegion(region);
DeleteObject(hrgn);
}
@@ -926,6 +951,236 @@ static void test_gethrgn(void)
ReleaseDC(0, hdc);
}
+static void test_isequal(void)
+{
+ GpRegion *region1, *region2;
+ GpGraphics *graphics;
+ GpRectF rectf;
+ GpStatus status;
+ HDC hdc = GetDC(0);
+ BOOL res;
+
+ status = GdipCreateFromHDC(hdc, &graphics);
+ ok(status == Ok, "status %08x\n", status);
+
+ status = GdipCreateRegion(®ion1);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipCreateRegion(®ion2);
+ ok(status == Ok, "status %08x\n", status);
+
+ /* NULL */
+ status = GdipIsEqualRegion(NULL, NULL, NULL, NULL);
+ ok(status == InvalidParameter, "status %08x\n", status);
+ status = GdipIsEqualRegion(region1, region2, NULL, NULL);
+ ok(status == InvalidParameter, "status %08x\n", status);
+ status = GdipIsEqualRegion(region1, region2, graphics, NULL);
+ ok(status == InvalidParameter, "status %08x\n", status);
+ status = GdipIsEqualRegion(region1, region2, NULL, &res);
+ ok(status == InvalidParameter, "status %08x\n", status);
+
+ /* infinite regions */
+ res = FALSE;
+ status = GdipIsEqualRegion(region1, region2, graphics, &res);
+ ok(status == Ok, "status %08x\n", status);
+ ok(res, "Expected to be equal.\n");
+ /* empty regions */
+ status = GdipSetEmpty(region1);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipSetEmpty(region2);
+ ok(status == Ok, "status %08x\n", status);
+ res = FALSE;
+ status = GdipIsEqualRegion(region1, region2, graphics, &res);
+ ok(status == Ok, "status %08x\n", status);
+ ok(res, "Expected to be equal.\n");
+ /* empty & infinite */
+ status = GdipSetInfinite(region1);
+ ok(status == Ok, "status %08x\n", status);
+ res = TRUE;
+ status = GdipIsEqualRegion(region1, region2, graphics, &res);
+ ok(status == Ok, "status %08x\n", status);
+ ok(!res, "Expected to be unequal.\n");
+ /* rect & (inf/empty) */
+ rectf.X = rectf.Y = 0.0;
+ rectf.Width = rectf.Height = 100.0;
+ status = GdipCombineRegionRect(region1, &rectf, CombineModeReplace);
+ ok(status == Ok, "status %08x\n", status);
+ res = TRUE;
+ status = GdipIsEqualRegion(region1, region2, graphics, &res);
+ ok(status == Ok, "status %08x\n", status);
+ ok(!res, "Expected to be unequal.\n");
+ status = GdipSetInfinite(region2);
+ ok(status == Ok, "status %08x\n", status);
+ res = TRUE;
+ status = GdipIsEqualRegion(region1, region2, graphics, &res);
+ ok(status == Ok, "status %08x\n", status);
+ ok(!res, "Expected to be unequal.\n");
+ /* roughly equal rectangles */
+ rectf.X = rectf.Y = 0.0;
+ rectf.Width = rectf.Height = 100.001;
+ status = GdipCombineRegionRect(region2, &rectf, CombineModeReplace);
+ ok(status == Ok, "status %08x\n", status);
+ res = FALSE;
+ status = GdipIsEqualRegion(region1, region2, graphics, &res);
+ ok(status == Ok, "status %08x\n", status);
+ ok(res, "Expected to be equal.\n");
+ /* equal rectangles */
+ rectf.X = rectf.Y = 0.0;
+ rectf.Width = rectf.Height = 100.0;
+ status = GdipCombineRegionRect(region2, &rectf, CombineModeReplace);
+ ok(status == Ok, "status %08x\n", status);
+ res = FALSE;
+ status = GdipIsEqualRegion(region1, region2, graphics, &res);
+ ok(status == Ok, "status %08x\n", status);
+ ok(res, "Expected to be equal.\n");
+
+ /* cleanup */
+ status = GdipDeleteRegion(region1);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipDeleteRegion(region2);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipDeleteGraphics(graphics);
+ ok(status == Ok, "status %08x\n", status);
+ ReleaseDC(0, hdc);
+}
+
+static void test_translate(void)
+{
+ GpRegion *region, *region2;
+ GpGraphics *graphics;
+ GpPath *path;
+ GpRectF rectf;
+ GpStatus status;
+ HDC hdc = GetDC(0);
+ BOOL res;
+
+ status = GdipCreateFromHDC(hdc, &graphics);
+ ok(status == Ok, "status %08x\n", status);
+
+ status = GdipCreatePath(FillModeAlternate, &path);
+ ok(status == Ok, "status %08x\n", status);
+
+ status = GdipCreateRegion(®ion);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipCreateRegion(®ion2);
+ ok(status == Ok, "status %08x\n", status);
+
+ /* NULL */
+ status = GdipTranslateRegion(NULL, 0.0, 0.0);
+ ok(status == InvalidParameter, "status %08x\n", status);
+
+ /* infinite */
+ status = GdipTranslateRegion(region, 10.0, 10.0);
+ ok(status == Ok, "status %08x\n", status);
+ /* empty */
+ status = GdipSetEmpty(region);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipTranslateRegion(region, 10.0, 10.0);
+ ok(status == Ok, "status %08x\n", status);
+ /* rect */
+ rectf.X = 10.0; rectf.Y = 0.0;
+ rectf.Width = rectf.Height = 100.0;
+ status = GdipCombineRegionRect(region, &rectf, CombineModeReplace);
+ ok(status == Ok, "status %08x\n", status);
+ rectf.X = 15.0; rectf.Y = -2.0;
+ rectf.Width = rectf.Height = 100.0;
+ status = GdipCombineRegionRect(region2, &rectf, CombineModeReplace);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipTranslateRegion(region, 5.0, -2.0);
+ ok(status == Ok, "status %08x\n", status);
+ res = FALSE;
+ status = GdipIsEqualRegion(region, region2, graphics, &res);
+ ok(status == Ok, "status %08x\n", status);
+ ok(res, "Expected to be equal.\n");
+ /* path */
+ status = GdipAddPathEllipse(path, 0.0, 10.0, 100.0, 150.0);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipCombineRegionPath(region, path, CombineModeReplace);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipResetPath(path);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipAddPathEllipse(path, 10.0, 21.0, 100.0, 150.0);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipCombineRegionPath(region2, path, CombineModeReplace);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipTranslateRegion(region, 10.0, 11.0);
+ ok(status == Ok, "status %08x\n", status);
+ res = FALSE;
+ status = GdipIsEqualRegion(region, region2, graphics, &res);
+ ok(status == Ok, "status %08x\n", status);
+ ok(res, "Expected to be equal.\n");
+
+ status = GdipDeleteRegion(region);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipDeleteRegion(region2);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipDeleteGraphics(graphics);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipDeletePath(path);
+ ok(status == Ok, "status %08x\n", status);
+ ReleaseDC(0, hdc);
+}
+
+static void test_getbounds(void)
+{
+ GpRegion *region;
+ GpGraphics *graphics;
+ GpStatus status;
+ GpRectF rectf;
+ HDC hdc = GetDC(0);
+
+ status = GdipCreateFromHDC(hdc, &graphics);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipCreateRegion(®ion);
+ ok(status == Ok, "status %08x\n", status);
+
+ /* NULL */
+ status = GdipGetRegionBounds(NULL, NULL, NULL);
+ ok(status == InvalidParameter, "status %08x\n", status);
+ status = GdipGetRegionBounds(region, NULL, NULL);
+ ok(status == InvalidParameter, "status %08x\n", status);
+ status = GdipGetRegionBounds(region, graphics, NULL);
+ ok(status == InvalidParameter, "status %08x\n", status);
+ /* infinite */
+ rectf.X = rectf.Y = 0.0;
+ rectf.Height = rectf.Width = 100.0;
+ status = GdipGetRegionBounds(region, graphics, &rectf);
+ ok(status == Ok, "status %08x\n", status);
+ ok(rectf.X == -(REAL)(1 << 22), "Expected X = %.2f, got %.2f\n", -(REAL)(1 << 22), rectf.X);
+ ok(rectf.Y == -(REAL)(1 << 22), "Expected Y = %.2f, got %.2f\n", -(REAL)(1 << 22), rectf.Y);
+ ok(rectf.Width == (REAL)(1 << 23), "Expected width = %.2f, got %.2f\n", (REAL)(1 << 23), rectf.Width);
+ ok(rectf.Height == (REAL)(1 << 23), "Expected height = %.2f, got %.2f\n",(REAL)(1 << 23), rectf.Height);
+ /* empty */
+ rectf.X = rectf.Y = 0.0;
+ rectf.Height = rectf.Width = 100.0;
+ status = GdipSetEmpty(region);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipGetRegionBounds(region, graphics, &rectf);
+ ok(status == Ok, "status %08x\n", status);
+ ok(rectf.X == 0.0, "Expected X = 0.0, got %.2f\n", rectf.X);
+ ok(rectf.Y == 0.0, "Expected Y = 0.0, got %.2f\n", rectf.Y);
+ ok(rectf.Width == 0.0, "Expected width = 0.0, got %.2f\n", rectf.Width);
+ ok(rectf.Height == 0.0, "Expected height = 0.0, got %.2f\n", rectf.Height);
+ /* rect */
+ rectf.X = 10.0; rectf.Y = 0.0;
+ rectf.Width = rectf.Height = 100.0;
+ status = GdipCombineRegionRect(region, &rectf, CombineModeReplace);
+ ok(status == Ok, "status %08x\n", status);
+ rectf.X = rectf.Y = 0.0;
+ rectf.Height = rectf.Width = 0.0;
+ status = GdipGetRegionBounds(region, graphics, &rectf);
+ ok(status == Ok, "status %08x\n", status);
+ ok(rectf.X == 10.0, "Expected X = 0.0, got %.2f\n", rectf.X);
+ ok(rectf.Y == 0.0, "Expected Y = 0.0, got %.2f\n", rectf.Y);
+ ok(rectf.Width == 100.0, "Expected width = 0.0, got %.2f\n", rectf.Width);
+ ok(rectf.Height == 100.0, "Expected height = 0.0, got %.2f\n", rectf.Height);
+
+ status = GdipDeleteRegion(region);
+ ok(status == Ok, "status %08x\n", status);
+ status = GdipDeleteGraphics(graphics);
+ ok(status == Ok, "status %08x\n", status);
+ ReleaseDC(0, hdc);
+}
+
START_TEST(region)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -944,6 +1199,9 @@ START_TEST(region)
test_combinereplace();
test_fromhrgn();
test_gethrgn();
+ test_isequal();
+ test_translate();
+ test_getbounds();
GdiplusShutdown(gdiplusToken);
}
diff --git a/rostests/winetests/gdiplus/stringformat.c b/rostests/winetests/gdiplus/stringformat.c
index 93319128f28..b28dbc6d355 100644
--- a/rostests/winetests/gdiplus/stringformat.c
+++ b/rostests/winetests/gdiplus/stringformat.c
@@ -318,6 +318,67 @@ static void test_getgenericdefault(void)
expect(Ok, stat);
}
+static void test_stringformatflags(void)
+{
+ GpStringFormat *format;
+ GpStatus stat;
+
+ INT flags;
+
+ stat = GdipCreateStringFormat(0, LANG_NEUTRAL, &format);
+ expect(Ok, stat);
+
+ /* NULL args */
+ stat = GdipSetStringFormatFlags(NULL, 0);
+ expect(InvalidParameter, stat);
+
+ stat = GdipSetStringFormatFlags(format, 0);
+ expect(Ok, stat);
+ stat = GdipGetStringFormatFlags(format, &flags);
+ expect(Ok, stat);
+ expect(0, flags);
+
+ /* Check some valid flags */
+ stat = GdipSetStringFormatFlags(format, StringFormatFlagsDirectionRightToLeft);
+ expect(Ok, stat);
+ stat = GdipGetStringFormatFlags(format, &flags);
+ expect(Ok, stat);
+ expect(StringFormatFlagsDirectionRightToLeft, flags);
+
+ stat = GdipSetStringFormatFlags(format, StringFormatFlagsNoFontFallback);
+ expect(Ok, stat);
+ stat = GdipGetStringFormatFlags(format, &flags);
+ expect(Ok, stat);
+ expect(StringFormatFlagsNoFontFallback, flags);
+
+ /* Check some flag combinations */
+ stat = GdipSetStringFormatFlags(format, StringFormatFlagsDirectionVertical
+ | StringFormatFlagsNoFitBlackBox);
+ expect(Ok, stat);
+ stat = GdipGetStringFormatFlags(format, &flags);
+ expect(Ok, stat);
+ expect((StringFormatFlagsDirectionVertical
+ | StringFormatFlagsNoFitBlackBox), flags);
+
+ stat = GdipSetStringFormatFlags(format, StringFormatFlagsDisplayFormatControl
+ | StringFormatFlagsMeasureTrailingSpaces);
+ expect(Ok, stat);
+ stat = GdipGetStringFormatFlags(format, &flags);
+ expect(Ok, stat);
+ expect((StringFormatFlagsDisplayFormatControl
+ | StringFormatFlagsMeasureTrailingSpaces), flags);
+
+ /* Check invalid flags */
+ stat = GdipSetStringFormatFlags(format, 0xdeadbeef);
+ expect(Ok, stat);
+ stat = GdipGetStringFormatFlags(format, &flags);
+ expect(Ok, stat);
+ expect(0xdeadbeef, flags);
+
+ stat = GdipDeleteStringFormat(format);
+ expect(Ok, stat);
+}
+
START_TEST(stringformat)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -336,6 +397,7 @@ START_TEST(stringformat)
test_getgenerictypographic();
test_tabstops();
test_getgenericdefault();
+ test_stringformatflags();
GdiplusShutdown(gdiplusToken);
}
diff --git a/rostests/winetests/lz32/lzexpand_main.c b/rostests/winetests/lz32/lzexpand_main.c
index 187aa803c7a..91fd6873e3f 100644
--- a/rostests/winetests/lz32/lzexpand_main.c
+++ b/rostests/winetests/lz32/lzexpand_main.c
@@ -231,7 +231,7 @@ static void test_LZOpenFileA_existing_compressed(void)
file = LZOpenFileA(_terminated, &test, OF_EXIST);
ok(file >= 0, "LZOpenFileA failed on switching to a compressed file name\n");
ok(test.cBytes == sizeof(OFSTRUCT) ||
- broken(test.cBytes == 40), /* win95 */
+ broken(test.cBytes == FIELD_OFFSET(OFSTRUCT, szPathName) + lstrlenA(test.szPathName)), /* win9x */
"LZOpenFileA set test.cBytes to %d\n", test.cBytes);
ok(test.nErrCode == 0, "LZOpenFileA set test.nErrCode to %d\n",
test.nErrCode);
@@ -390,8 +390,8 @@ static void test_LZOpenFileA(void)
file = LZOpenFileA(filename_, &test, OF_READ);
ok(file >= 0, "LZOpenFileA failed on read\n");
ok(test.cBytes == sizeof(OFSTRUCT) ||
- broken(test.cBytes == 40), /* win95 */
- "LZOpenFileA set test.cBytes to %d\n", test.cBytes);
+ broken(test.cBytes == FIELD_OFFSET(OFSTRUCT, szPathName) + lstrlenA(test.szPathName)), /* win9x */
+ "LZOpenFileA set test.cBytes to %d '%s'('%s')\n", test.cBytes, expected, short_expected);
ok(test.nErrCode == ERROR_SUCCESS,
"LZOpenFileA set test.nErrCode to %d\n", test.nErrCode);
ok(lstrcmpA(test.szPathName, expected) == 0 ||
@@ -406,7 +406,7 @@ static void test_LZOpenFileA(void)
file = LZOpenFileA(filename_, &test, OF_WRITE);
ok(file >= 0, "LZOpenFileA failed on write\n");
ok(test.cBytes == sizeof(OFSTRUCT) ||
- broken(test.cBytes == 40), /* win95 */
+ broken(test.cBytes == FIELD_OFFSET(OFSTRUCT, szPathName) + lstrlenA(test.szPathName)), /* win9x */
"LZOpenFileA set test.cBytes to %d\n", test.cBytes);
ok(test.nErrCode == ERROR_SUCCESS,
"LZOpenFileA set test.nErrCode to %d\n", test.nErrCode);
@@ -422,7 +422,7 @@ static void test_LZOpenFileA(void)
file = LZOpenFileA(filename_, &test, OF_READWRITE);
ok(file >= 0, "LZOpenFileA failed on read/write\n");
ok(test.cBytes == sizeof(OFSTRUCT) ||
- broken(test.cBytes == 40), /* win95 */
+ broken(test.cBytes == FIELD_OFFSET(OFSTRUCT, szPathName) + lstrlenA(test.szPathName)), /* win9x */
"LZOpenFileA set test.cBytes to %d\n", test.cBytes);
ok(test.nErrCode == ERROR_SUCCESS,
"LZOpenFileA set test.nErrCode to %d\n", test.nErrCode);
@@ -438,7 +438,7 @@ static void test_LZOpenFileA(void)
file = LZOpenFileA(filename_, &test, OF_EXIST);
ok(file >= 0, "LZOpenFileA failed on read/write\n");
ok(test.cBytes == sizeof(OFSTRUCT) ||
- broken(test.cBytes == 40), /* win95 */
+ broken(test.cBytes == FIELD_OFFSET(OFSTRUCT, szPathName) + lstrlenA(test.szPathName)), /* win9x */
"LZOpenFileA set test.cBytes to %d\n", test.cBytes);
ok(test.nErrCode == ERROR_SUCCESS,
"LZOpenFileA set test.nErrCode to %d\n", test.nErrCode);
@@ -454,7 +454,7 @@ static void test_LZOpenFileA(void)
file = LZOpenFileA(filename_, &test, OF_DELETE);
ok(file >= 0, "LZOpenFileA failed on delete\n");
ok(test.cBytes == sizeof(OFSTRUCT) ||
- broken(test.cBytes == 40), /* win95 */
+ broken(test.cBytes == FIELD_OFFSET(OFSTRUCT, szPathName) + lstrlenA(test.szPathName)), /* win9x */
"LZOpenFileA set test.cBytes to %d\n", test.cBytes);
ok(test.nErrCode == ERROR_SUCCESS,
"LZOpenFileA set test.nErrCode to %d\n", test.nErrCode);
diff --git a/rostests/winetests/mapi32/imalloc.c b/rostests/winetests/mapi32/imalloc.c
index 5e3a06014f3..9ce94b0a04c 100644
--- a/rostests/winetests/mapi32/imalloc.c
+++ b/rostests/winetests/mapi32/imalloc.c
@@ -93,7 +93,7 @@ START_TEST(imalloc)
pScInitMapiUtil = (void*)GetProcAddress(hMapi32, "ScInitMapiUtil@4");
if (!pScInitMapiUtil)
{
- skip("ScInitMapiUtil is not available\n");
+ win_skip("ScInitMapiUtil is not available\n");
FreeLibrary(hMapi32);
return;
}
@@ -102,7 +102,7 @@ START_TEST(imalloc)
ret = pScInitMapiUtil(0);
if ((ret != S_OK) && (GetLastError() == ERROR_PROC_NOT_FOUND))
{
- skip("ScInitMapiUtil is not implemented\n");
+ win_skip("ScInitMapiUtil is not implemented\n");
FreeLibrary(hMapi32);
return;
}
diff --git a/rostests/winetests/mapi32/prop.c b/rostests/winetests/mapi32/prop.c
index 0e979d15e08..8226bead08a 100644
--- a/rostests/winetests/mapi32/prop.c
+++ b/rostests/winetests/mapi32/prop.c
@@ -239,7 +239,8 @@ static void test_UlPropSize(void)
}
res = pUlPropSize(&pv);
- ok(res == exp, "pt= %d: Expected %d, got %d\n", pt, exp, res);
+ ok(res == exp || broken(!res) /* Win9x */,
+ "pt= %d: Expected %d, got %d\n", pt, exp, res);
}
}
@@ -280,30 +281,30 @@ static void test_FPropContainsProp(void)
pvRight.Value.lpszA = szFull;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING);
- ok(bRet == TRUE, "(full,full)[] match failed\n");
+ ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,full)[] match failed\n");
pvRight.Value.lpszA = szPrefix;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING);
ok(bRet == FALSE, "(full,prefix)[] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
ok(bRet == TRUE, "(full,prefix)[PREFIX] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING);
- ok(bRet == TRUE, "(full,prefix)[SUBSTRING] match failed\n");
+ ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,prefix)[SUBSTRING] match failed\n");
pvRight.Value.lpszA = szPrefixLower;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
ok(bRet == FALSE, "(full,prefixlow)[PREFIX] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING);
ok(bRet == FALSE, "(full,prefixlow)[SUBSTRING] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX|FL_IGNORECASE);
- ok(bRet == TRUE, "(full,prefixlow)[PREFIX|IGNORECASE] match failed\n");
+ ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,prefixlow)[PREFIX|IGNORECASE] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING|FL_IGNORECASE);
- ok(bRet == TRUE, "(full,prefixlow)[SUBSTRING|IGNORECASE] match failed\n");
+ ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,prefixlow)[SUBSTRING|IGNORECASE] match failed\n");
pvRight.Value.lpszA = szSubstring;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING);
ok(bRet == FALSE, "(full,substr)[] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
ok(bRet == FALSE, "(full,substr)[PREFIX] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING);
- ok(bRet == TRUE, "(full,substr)[SUBSTRING] match failed\n");
+ ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,substr)[SUBSTRING] match failed\n");
pvRight.Value.lpszA = szSubstringLower;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
ok(bRet == FALSE, "(full,substrlow)[PREFIX] match failed\n");
@@ -312,10 +313,10 @@ static void test_FPropContainsProp(void)
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX|FL_IGNORECASE);
ok(bRet == FALSE, "(full,substrlow)[PREFIX|IGNORECASE] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING|FL_IGNORECASE);
- ok(bRet == TRUE, "(full,substrlow)[SUBSTRING|IGNORECASE] match failed\n");
+ ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,substrlow)[SUBSTRING|IGNORECASE] match failed\n");
pvRight.Value.lpszA = szFullLower;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING|FL_IGNORECASE);
- ok(bRet == TRUE, "(full,fulllow)[IGNORECASE] match failed\n");
+ ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,fulllow)[IGNORECASE] match failed\n");
pvLeft.ulPropTag = pvRight.ulPropTag = PT_BINARY;
pvLeft.Value.bin.lpb = (LPBYTE)szFull;
@@ -323,15 +324,15 @@ static void test_FPropContainsProp(void)
pvLeft.Value.bin.cb = pvRight.Value.bin.cb = strlen(szFull);
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING);
- ok(bRet == TRUE, "bin(full,full)[] match failed\n");
+ ok(bRet == TRUE || broken(!bRet) /* Win9x */, "bin(full,full)[] match failed\n");
pvRight.Value.bin.lpb = (LPBYTE)szPrefix;
pvRight.Value.bin.cb = strlen(szPrefix);
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING);
ok(bRet == FALSE, "bin(full,prefix)[] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
- ok(bRet == TRUE, "bin(full,prefix)[PREFIX] match failed\n");
+ ok(bRet == TRUE || broken(!bRet) /* Win9x */, "bin(full,prefix)[PREFIX] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING);
- ok(bRet == TRUE, "bin(full,prefix)[SUBSTRING] match failed\n");
+ ok(bRet == TRUE || broken(!bRet) /* Win9x */, "bin(full,prefix)[SUBSTRING] match failed\n");
pvRight.Value.bin.lpb = (LPBYTE)szPrefixLower;
pvRight.Value.bin.cb = strlen(szPrefixLower);
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
@@ -349,7 +350,7 @@ static void test_FPropContainsProp(void)
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
ok(bRet == FALSE, "bin(full,substr)[PREFIX] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING);
- ok(bRet == TRUE, "bin(full,substr)[SUBSTRING] match failed\n");
+ ok(bRet == TRUE || broken(!bRet) /* Win9x */, "bin(full,substr)[SUBSTRING] match failed\n");
pvRight.Value.bin.lpb = (LPBYTE)szSubstringLower;
pvRight.Value.bin.cb = strlen(szSubstringLower);
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
@@ -502,7 +503,8 @@ static void test_FPropCompareProp(void)
}
bRet = pFPropCompareProp(&pvLeft, FPCProp_Results[j].relOp, &pvRight);
- ok(bRet == bExp, "pt %d (%d,%d,%s): expected %d, got %d\n", ptTypes[i],
+ ok(bRet == bExp || broken(!bRet) /* Win9x */,
+ "pt %d (%d,%d,%s): expected %d, got %d\n", ptTypes[i],
FPCProp_Results[j].lVal, FPCProp_Results[j].rVal,
relops[FPCProp_Results[j].relOp], bExp, bRet);
}
@@ -625,7 +627,8 @@ static void test_LPropCompareProp(void)
}
iRet = pLPropCompareProp(&pvLeft, &pvRight);
- ok(iRet == iExp, "pt %d (%d,%d): expected %d, got %d\n", ptTypes[i],
+ ok(iRet == iExp || broken(iRet == 0) /* Win9x */,
+ "pt %d (%d,%d): expected %d, got %d\n", ptTypes[i],
LPCProp_Results[j].lVal, LPCProp_Results[j].rVal, iExp, iRet);
}
}
@@ -646,7 +649,8 @@ static void test_PpropFindProp(void)
pvProp.ulPropTag = ptTypes[i];
pRet = pPpropFindProp(&pvProp, 1u, ptTypes[i]);
- ok(pRet == &pvProp, "PpropFindProp[%d]: Didn't find existing propery\n",
+ ok(pRet == &pvProp || broken(pRet != &pvProp) /* Win9x */,
+ "PpropFindProp[%d]: Didn't find existing propery\n",
ptTypes[i]);
pRet = pPpropFindProp(&pvProp, 1u, i ? ptTypes[i-1] : ptTypes[i+1]);
@@ -882,7 +886,8 @@ static void test_LpValFindProp(void)
pvProp.ulPropTag = PROP_TAG(ptTypes[i], 1u);
pRet = pLpValFindProp(PROP_TAG(ptTypes[i], 1u), 1u, &pvProp);
- ok(pRet == &pvProp, "LpValFindProp[%d]: Didn't find existing propery id/type\n",
+ ok(pRet == &pvProp || broken(pRet != &pvProp) /* Win9x */,
+ "LpValFindProp[%d]: Didn't find existing propery id/type\n",
ptTypes[i]);
pRet = pLpValFindProp(PROP_TAG(ptTypes[i], 0u), 1u, &pvProp);
@@ -894,7 +899,8 @@ static void test_LpValFindProp(void)
ptTypes[i]);
pRet = pLpValFindProp(PROP_TAG(PT_NULL, 1u), 1u, &pvProp);
- ok(pRet == &pvProp, "LpValFindProp[%d]: Didn't find existing propery id\n",
+ ok(pRet == &pvProp || broken(pRet != &pvProp) /* Win9x */,
+ "LpValFindProp[%d]: Didn't find existing propery id\n",
ptTypes[i]);
}
}
@@ -990,7 +996,8 @@ static void test_FBadPropTag(void)
if (bBad)
ok(res != 0, "pt= %d: Expected non-zero, got 0\n", pt);
else
- ok(res == 0, "pt= %d: Expected zero, got %d\n", pt, res);
+ ok(res == 0 || broken(res) /* Win9x */,
+ "pt= %d: Expected zero, got %d\n", pt, res);
}
}
@@ -1079,7 +1086,8 @@ static void test_FBadProp(void)
if (bBad)
ok(res != 0, "pt= %d: Expected non-zero, got 0\n", pt);
else
- ok(res == 0, "pt= %d: Expected zero, got %d\n", pt, res);
+ ok(res == 0 || broken(res) /* Win9x */,
+ "pt= %d: Expected zero, got %d\n", pt, res);
}
}
@@ -1130,7 +1138,8 @@ static void test_FBadColumnSet(void)
if (bBad)
ok(res != 0, "pt= %d: Expected non-zero, got 0\n", pt);
else
- ok(res == 0, "pt= %d: Expected zero, got %d\n", pt, res);
+ ok(res == 0 || broken(res) /* Win9x */,
+ "pt= %d: Expected zero, got %d\n", pt, res);
}
}
@@ -1353,7 +1362,7 @@ START_TEST(prop)
if(!InitFuncPtrs())
{
- skip("Needed functions are not available\n");
+ win_skip("Needed functions are not available\n");
return;
}
@@ -1361,7 +1370,7 @@ START_TEST(prop)
ret = pScInitMapiUtil(0);
if ((ret != S_OK) && (GetLastError() == ERROR_PROC_NOT_FOUND))
{
- skip("ScInitMapiUtil is not implemented\n");
+ win_skip("ScInitMapiUtil is not implemented\n");
FreeLibrary(hMapi32);
return;
}
diff --git a/rostests/winetests/mapi32/util.c b/rostests/winetests/mapi32/util.c
index 2ae42f1c814..6cb77702039 100644
--- a/rostests/winetests/mapi32/util.c
+++ b/rostests/winetests/mapi32/util.c
@@ -51,7 +51,8 @@ static void test_SwapPword(void)
shorts[1] = 0x10ff;
shorts[2] = 0x2001;
pSwapPword(shorts, 2);
- ok(shorts[0] == 0x01ff && shorts[1] == 0xff10 && shorts[2] == 0x2001,
+ ok((shorts[0] == 0x01ff && shorts[1] == 0xff10 && shorts[2] == 0x2001) ||
+ broken(shorts[0] == 0xff01 && shorts[1] == 0x10ff && shorts[2] == 0x2001) /* Win9x */,
"Expected {0x01ff,0xff10,0x2001}, got {0x%04x,0x%04x,0x%04x}\n",
shorts[0], shorts[1], shorts[2]);
}
@@ -68,7 +69,8 @@ static void test_SwapPlong(void)
longs[1] = 0x1000ffff;
longs[2] = 0x20000001;
pSwapPlong(longs, 2);
- ok(longs[0] == 0x0100ffff && longs[1] == 0xffff0010 && longs[2] == 0x20000001,
+ ok((longs[0] == 0x0100ffff && longs[1] == 0xffff0010 && longs[2] == 0x20000001) ||
+ broken(longs[0] == 0xffff0001 && longs[1] == 0x1000ffff && longs[2] == 0x20000001) /* Win9x */,
"Expected {0x0100ffff,0xffff0010,0x20000001}, got {0x%08x,0x%08x,0x%08x}\n",
longs[0], longs[1], longs[2]);
}
@@ -151,7 +153,8 @@ static void test_CbOfEncoded(void)
memset(buff, '\0', sizeof(buff));
memset(buff, '?', i);
ulRet = pCbOfEncoded(buff);
- ok(ulRet == ulExpected, "CbOfEncoded(length %d): expected %d, got %d\n",
+ ok(ulRet == ulExpected || broken(ulRet == 0) /* Win9x */,
+ "CbOfEncoded(length %d): expected %d, got %d\n",
i, ulExpected, ulRet);
}
}
@@ -177,7 +180,7 @@ START_TEST(util)
if (!pScInitMapiUtil)
{
- skip("ScInitMapiUtil is not available\n");
+ win_skip("ScInitMapiUtil is not available\n");
FreeLibrary(hMapi32);
return;
}
@@ -186,7 +189,7 @@ START_TEST(util)
ret = pScInitMapiUtil(0);
if ((ret != S_OK) && (GetLastError() == ERROR_PROC_NOT_FOUND))
{
- skip("ScInitMapiUtil is not implemented\n");
+ win_skip("ScInitMapiUtil is not implemented\n");
FreeLibrary(hMapi32);
return;
}
diff --git a/rostests/winetests/mlang/mlang.c b/rostests/winetests/mlang/mlang.c
index 115080eb692..ae5060a7cdc 100644
--- a/rostests/winetests/mlang/mlang.c
+++ b/rostests/winetests/mlang/mlang.c
@@ -25,6 +25,7 @@
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
+#include "initguid.h"
#include "mlang.h"
#include "wine/test.h"
@@ -42,21 +43,41 @@
#endif
#endif /* 0 */
-#define TRACE_2 OutputDebugStringA
+static BOOL (WINAPI *pGetCPInfoExA)(UINT, DWORD, LPCPINFOEXA);
+static HRESULT (WINAPI *pConvertINetMultiByteToUnicode)(LPDWORD, DWORD, LPCSTR,
+ LPINT, LPWSTR, LPINT);
+static HRESULT (WINAPI *pConvertINetUnicodeToMultiByte)(LPDWORD, DWORD, LPCWSTR,
+ LPINT, LPSTR, LPINT);
-static CHAR string1[MAX_PATH], string2[MAX_PATH];
+static BOOL init_function_ptrs(void)
+{
+ HMODULE hMlang;
+
+ hMlang = LoadLibraryA("mlang.dll");
+ if (!hMlang)
+ {
+ skip("mlang not available\n");
+ return FALSE;
+ }
+
+ pConvertINetMultiByteToUnicode = (void *)GetProcAddress(hMlang, "ConvertINetMultiByteToUnicode");
+ pConvertINetUnicodeToMultiByte = (void *)GetProcAddress(hMlang, "ConvertINetUnicodeToMultiByte");
+
+ pGetCPInfoExA = (void *)GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetCPInfoExA");
+
+ return TRUE;
+}
#define ok_w2(format, szString1, szString2) \
\
- if (lstrcmpW(szString1, szString2) != 0) \
+ if (lstrcmpW((szString1), (szString2)) != 0) \
{ \
- WideCharToMultiByte(CP_ACP, 0, szString1, -1, string1, MAX_PATH, NULL, NULL); \
- WideCharToMultiByte(CP_ACP, 0, szString2, -1, string2, MAX_PATH, NULL, NULL); \
- ok(0, format, string1, string2); \
+ CHAR string1[256], string2[256]; \
+ WideCharToMultiByte(CP_ACP, 0, (szString1), -1, string1, 256, NULL, NULL); \
+ WideCharToMultiByte(CP_ACP, 0, (szString2), -1, string2, 256, NULL, NULL); \
+ ok(0, (format), string1, string2); \
}
-static BOOL (WINAPI *pGetCPInfoExA)(UINT,DWORD,LPCPINFOEXA);
-
static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
{
/* these APIs are broken regarding constness of the input buffer */
@@ -66,24 +87,12 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
WCHAR bufW[256];
UINT lenA, lenW, expected_len;
HRESULT ret;
- HMODULE hMlang;
- FARPROC pConvertINetMultiByteToUnicode;
- FARPROC pConvertINetUnicodeToMultiByte;
-
- hMlang = LoadLibraryA("mlang.dll");
- ok(hMlang != 0, "couldn't load mlang.dll\n");
-
- pConvertINetMultiByteToUnicode = GetProcAddress(hMlang, "ConvertINetMultiByteToUnicode");
- ok(pConvertINetMultiByteToUnicode != NULL, "couldn't resolve ConvertINetMultiByteToUnicode\n");
- pConvertINetUnicodeToMultiByte = GetProcAddress(hMlang, "ConvertINetUnicodeToMultiByte");
- ok(pConvertINetUnicodeToMultiByte != NULL, "couldn't resolve ConvertINetUnicodeToMultiByte\n");
/* IMultiLanguage2_ConvertStringToUnicode tests */
memset(bufW, 'x', sizeof(bufW));
lenA = 0;
lenW = sizeof(bufW)/sizeof(bufW[0]);
- TRACE_2("Call IMultiLanguage2_ConvertStringToUnicode\n");
ret = IMultiLanguage2_ConvertStringToUnicode(iML2, NULL, 1252, stringA, &lenA, bufW, &lenW);
ok(ret == S_OK, "IMultiLanguage2_ConvertStringToUnicode failed: %08x\n", ret);
ok(lenA == 0, "expected lenA 0, got %u\n", lenA);
@@ -92,7 +101,6 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
memset(bufW, 'x', sizeof(bufW));
lenA = -1;
lenW = sizeof(bufW)/sizeof(bufW[0]);
- TRACE_2("Call IMultiLanguage2_ConvertStringToUnicode\n");
ret = IMultiLanguage2_ConvertStringToUnicode(iML2, NULL, 1252, stringA, &lenA, bufW, &lenW);
ok(ret == S_OK, "IMultiLanguage2_ConvertStringToUnicode failed: %08x\n", ret);
ok(lenA == lstrlenA(stringA), "expected lenA %u, got %u\n", lstrlenA(stringA), lenA);
@@ -107,7 +115,6 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
memset(bufW, 'x', sizeof(bufW));
lenA = -1;
lenW = 5;
- TRACE_2("Call IMultiLanguage2_ConvertStringToUnicode\n");
ret = IMultiLanguage2_ConvertStringToUnicode(iML2, NULL, 1252, stringA, &lenA, bufW, &lenW);
ok(ret == E_FAIL, "IMultiLanguage2_ConvertStringToUnicode should fail: %08x\n", ret);
ok(lenW == 0, "expected lenW 0, got %u\n", lenW);
@@ -117,7 +124,6 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
memset(bufW, 'x', sizeof(bufW));
lenA = -1;
lenW = sizeof(bufW)/sizeof(bufW[0]);
- TRACE_2("Call IMultiLanguage2_ConvertStringToUnicode\n");
ret = IMultiLanguage2_ConvertStringToUnicode(iML2, NULL, CP_UNICODE, stringA, &lenA, bufW, &lenW);
ok(ret == S_OK, "IMultiLanguage2_ConvertStringToUnicode failed: %08x\n", ret);
ok(lenA == lstrlenA(stringA), "expected lenA %u, got %u\n", lstrlenA(stringA), lenA);
@@ -138,7 +144,7 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
memset(bufW, 'x', sizeof(bufW));
lenA = lstrlenA(stringA);
lenW = sizeof(bufW)/sizeof(bufW[0]);
- ret = pConvertINetMultiByteToUnicode(NULL, 1252, stringA, &lenA, NULL, &lenW);
+ ret = pConvertINetMultiByteToUnicode(NULL, 1252, stringA, (INT *)&lenA, NULL, (INT *)&lenW);
ok(ret == S_OK, "ConvertINetMultiByteToUnicode failed: %08x\n", ret);
ok(lenA == lstrlenA(stringA), "expected lenA %u, got %u\n", lstrlenA(stringA), lenA);
expected_len = MultiByteToWideChar(1252, 0, stringA, lenA, NULL, 0);
@@ -147,7 +153,7 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
memset(bufW, 'x', sizeof(bufW));
lenA = lstrlenA(stringA);
lenW = 0;
- ret = pConvertINetMultiByteToUnicode(NULL, 1252, stringA, &lenA, NULL, &lenW);
+ ret = pConvertINetMultiByteToUnicode(NULL, 1252, stringA, (INT *)&lenA, NULL, (INT *)&lenW);
ok(ret == S_OK, "ConvertINetMultiByteToUnicode failed: %08x\n", ret);
ok(lenA == lstrlenA(stringA), "expected lenA %u, got %u\n", lstrlenA(stringA), lenA);
expected_len = MultiByteToWideChar(1252, 0, stringA, lenA, NULL, 0);
@@ -158,7 +164,6 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
memset(bufA, 'x', sizeof(bufA));
lenW = 0;
lenA = sizeof(bufA);
- TRACE_2("Call IMultiLanguage2_ConvertStringFromUnicode\n");
ret = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, stringW, &lenW, bufA, &lenA);
ok(ret == S_OK, "IMultiLanguage2_ConvertStringFromUnicode failed: %08x\n", ret);
ok(lenA == 0, "expected lenA 0, got %u\n", lenA);
@@ -167,7 +172,6 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
memset(bufA, 'x', sizeof(bufA));
lenW = -1;
lenA = sizeof(bufA);
- TRACE_2("Call IMultiLanguage2_ConvertStringFromUnicode\n");
ret = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, stringW, &lenW, bufA, &lenA);
ok(ret == S_OK, "IMultiLanguage2_ConvertStringFromUnicode failed: %08x\n", ret);
ok(lenA == lstrlenA(stringA), "expected lenA %u, got %u\n", lstrlenA(stringA), lenA);
@@ -179,7 +183,6 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
memset(bufA, 'x', sizeof(bufA));
lenW = -1;
lenA = 5;
- TRACE_2("Call IMultiLanguage2_ConvertStringFromUnicode\n");
ret = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, stringW, &lenW, bufA, &lenA);
ok(ret == E_FAIL, "IMultiLanguage2_ConvertStringFromUnicode should fail: %08x\n", ret);
ok(lenA == 0, "expected lenA 0, got %u\n", lenA);
@@ -189,7 +192,6 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
memset(bufA, 'x', sizeof(bufA));
lenW = -1;
lenA = sizeof(bufA);
- TRACE_2("Call IMultiLanguage2_ConvertStringFromUnicode\n");
ret = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, CP_UNICODE, stringW, &lenW, bufA, &lenA);
ok(ret == S_OK, "IMultiLanguage2_ConvertStringFromUnicode failed: %08x\n", ret);
ok(lenA == lstrlenA(stringA) * (int)sizeof(WCHAR), "wrong lenA %u\n", lenA);
@@ -207,24 +209,6 @@ static void test_multibyte_to_unicode_translations(IMultiLanguage2 *iML2)
ok(lenW == lstrlenW(stringW), "expected lenW %u, got %u\n", lstrlenW(stringW), lenW);
expected_len = WideCharToMultiByte(1252, 0, stringW, lenW, NULL, 0, NULL, NULL);
ok(lenA == expected_len, "expected lenA %u, got %u\n", expected_len, lenA);
-
- memset(bufA, 'x', sizeof(bufA));
- lenW = lstrlenW(stringW);
- lenA = sizeof(bufA);
- ret = pConvertINetUnicodeToMultiByte(NULL, 1252, stringW, &lenW, NULL, &lenA);
- ok(ret == S_OK, "ConvertINetUnicodeToMultiByte failed: %08x\n", ret);
- ok(lenW == lstrlenW(stringW), "expected lenW %u, got %u\n", lstrlenW(stringW), lenW);
- expected_len = WideCharToMultiByte(1252, 0, stringW, lenW, NULL, 0, NULL, NULL);
- ok(lenA == expected_len, "expected lenA %u, got %u\n", expected_len, lenA);
-
- memset(bufA, 'x', sizeof(bufA));
- lenW = lstrlenW(stringW);
- lenA = 0;
- ret = pConvertINetUnicodeToMultiByte(NULL, 1252, stringW, &lenW, NULL, &lenA);
- ok(ret == S_OK, "ConvertINetUnicodeToMultiByte failed: %08x\n", ret);
- ok(lenW == lstrlenW(stringW), "expected lenW %u, got %u\n", lstrlenW(stringW), lenW);
- expected_len = WideCharToMultiByte(1252, 0, stringW, lenW, NULL, 0, NULL, NULL);
- ok(lenA == expected_len, "expected lenA %u, got %u\n", expected_len, lenA);
}
static inline void cpinfo_cmp(MIMECPINFO *cpinfo1, MIMECPINFO *cpinfo2)
@@ -266,7 +250,7 @@ static const char *dump_mime_flags(DWORD flags)
}
#endif
-static BOOL check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to)
+static HRESULT check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to)
{
CHAR convert[MAX_PATH];
BYTE dest[MAX_PATH];
@@ -275,21 +259,37 @@ static BOOL check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to)
static WCHAR strW[] = {'a','b','c',0};
- srcsz = -1;
+ /* Check to see if the target codepage has these characters or not */
+ if (from != CP_UTF8)
+ {
+ BOOL fDefaultChar;
+ char ch[10];
+ int cb;
+ cb = WideCharToMultiByte( from, WC_NO_BEST_FIT_CHARS | WC_COMPOSITECHECK | WC_DEFAULTCHAR,
+ strW, 3, ch, sizeof(ch), NULL, &fDefaultChar);
+
+ if(cb == 0 || fDefaultChar)
+ {
+ trace("target codepage %i does not contain 'abc'\n",from);
+ return E_FAIL;
+ }
+ }
+
+ srcsz = lstrlenW(strW) + 1;
destsz = MAX_PATH;
hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, from, strW,
&srcsz, convert, &destsz);
if (hr != S_OK)
- return FALSE;
+ return S_FALSE;
srcsz = -1;
destsz = MAX_PATH;
hr = IMultiLanguage2_ConvertString(iML2, NULL, from, to, (BYTE *)convert,
&srcsz, dest, &destsz);
if (hr != S_OK)
- return FALSE;
+ return S_FALSE;
- return TRUE;
+ return S_OK;
}
static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
@@ -302,38 +302,35 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
UINT total;
total = 0;
- TRACE_2("Call IMultiLanguage2_GetNumberOfCodePageInfo\n");
ret = IMultiLanguage2_GetNumberOfCodePageInfo(iML2, &total);
ok(ret == S_OK && total != 0, "IMultiLanguage2_GetNumberOfCodePageInfo: expected S_OK/!0, got %08x/%u\n", ret, total);
trace("total mlang supported codepages %u\n", total);
- TRACE_2("Call IMultiLanguage2_EnumCodePages\n");
ret = IMultiLanguage2_EnumCodePages(iML2, flags, LANG_NEUTRAL, &iEnumCP);
- trace("IMultiLanguage2_EnumCodePages = %08x, iEnumCP = %p\n", ret, iEnumCP);
ok(ret == S_OK && iEnumCP, "IMultiLanguage2_EnumCodePages: expected S_OK/!NULL, got %08x/%p\n", ret, iEnumCP);
- TRACE_2("Call IEnumCodePage_Reset\n");
ret = IEnumCodePage_Reset(iEnumCP);
ok(ret == S_OK, "IEnumCodePage_Reset: expected S_OK, got %08x\n", ret);
n = 65536;
- TRACE_2("Call IEnumCodePage_Next\n");
ret = IEnumCodePage_Next(iEnumCP, 0, NULL, &n);
- ok(n == 0 && ret == S_FALSE, "IEnumCodePage_Next: expected 0/S_FALSE, got %u/%08x\n", n, ret);
- TRACE_2("Call IEnumCodePage_Next\n");
+ if (ret == S_FALSE)
+ ok(n == 0 && ret == S_FALSE, "IEnumCodePage_Next: expected 0/S_FALSE, got %u/%08x\n", n, ret);
+ else if (ret == E_FAIL)
+ ok(n == 65536 && ret == E_FAIL, "IEnumCodePage_Next: expected 65536/E_FAIL, got %u/%08x\n", n, ret);
ret = IEnumCodePage_Next(iEnumCP, 0, NULL, NULL);
- ok(ret == S_FALSE, "IEnumCodePage_Next: expected S_FALSE, got %08x\n", ret);
+ if (ret == S_FALSE)
+ ok(ret == S_FALSE, "IEnumCodePage_Next: expected S_FALSE, got %08x\n", ret);
+ else if (ret == E_FAIL)
+ ok(n == 65536 && ret == E_FAIL, "IEnumCodePage_Next: expected 65536/E_FAIL, got %u/%08x\n", n, ret);
cpinfo = HeapAlloc(GetProcessHeap(), 0, sizeof(*cpinfo) * total * 2);
n = total * 2;
- TRACE_2("Call IEnumCodePage_Next\n");
ret = IEnumCodePage_Next(iEnumCP, 0, cpinfo, &n);
- trace("IEnumCodePage_Next = %08x, n = %u\n", ret, n);
ok(ret == S_FALSE && n == 0, "IEnumCodePage_Next: expected S_FALSE/0, got %08x/%u\n", ret, n);
n = total * 2;
- TRACE_2("Call IEnumCodePage_Next\n");
ret = IEnumCodePage_Next(iEnumCP, n, cpinfo, &n);
ok(ret == S_OK && n != 0, "IEnumCodePage_Next: expected S_OK/!0, got %08x/%u\n", ret, n);
@@ -352,9 +349,9 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
{
CHARSETINFO csi;
MIMECSETINFO mcsi;
- BOOL convertible;
- HRESULT check = S_OK;
+ HRESULT convertible = S_OK;
static const WCHAR autoW[] = {'_','a','u','t','o',0};
+ static const WCHAR feffW[] = {'u','n','i','c','o','d','e','F','E','F','F',0};
#ifdef DUMP_CP_INFO
trace("MIMECPINFO #%u:\n"
@@ -382,13 +379,14 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
#endif
ok(cpinfo[i].dwFlags & flags, "enumerated flags %08x do not include requested %08x\n", cpinfo[i].dwFlags, flags);
- if (TranslateCharsetInfo((DWORD *)cpinfo[i].uiFamilyCodePage, &csi, TCI_SRCCODEPAGE))
+ if (TranslateCharsetInfo((DWORD *)(INT_PTR)cpinfo[i].uiFamilyCodePage, &csi, TCI_SRCCODEPAGE))
ok(cpinfo[i].bGDICharset == csi.ciCharset, "%d != %d\n", cpinfo[i].bGDICharset, csi.ciCharset);
else
trace("TranslateCharsetInfo failed for cp %u\n", cpinfo[i].uiFamilyCodePage);
+#ifdef DUMP_CP_INFO
trace("%u: codepage %u family %u\n", i, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
-
+#endif
/* Win95 does not support UTF-7 */
if (cpinfo[i].uiCodePage == CP_UTF7) continue;
@@ -397,104 +395,115 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
*/
if (IsValidCodePage(cpinfo[i].uiCodePage))
{
- TRACE_2("Call IMultiLanguage2_IsConvertible\n");
ret = IMultiLanguage2_IsConvertible(iML2, cpinfo[i].uiCodePage, CP_UNICODE);
ok(ret == S_OK, "IMultiLanguage2_IsConvertible(%u -> CP_UNICODE) = %08x\n", cpinfo[i].uiCodePage, ret);
- TRACE_2("Call IMultiLanguage2_IsConvertible\n");
ret = IMultiLanguage2_IsConvertible(iML2, CP_UNICODE, cpinfo[i].uiCodePage);
ok(ret == S_OK, "IMultiLanguage2_IsConvertible(CP_UNICODE -> %u) = %08x\n", cpinfo[i].uiCodePage, ret);
convertible = check_convertible(iML2, cpinfo[i].uiCodePage, CP_UTF8);
- if (!convertible)
- check = S_FALSE;
-
- TRACE_2("Call IMultiLanguage2_IsConvertible\n");
- ret = IMultiLanguage2_IsConvertible(iML2, cpinfo[i].uiCodePage, CP_UTF8);
- ok(ret == check, "IMultiLanguage2_IsConvertible(%u -> CP_UTF8) = %08x\n", cpinfo[i].uiCodePage, ret);
- TRACE_2("Call IMultiLanguage2_IsConvertible\n");
- ret = IMultiLanguage2_IsConvertible(iML2, CP_UTF8, cpinfo[i].uiCodePage);
- ok(ret == check, "IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08x\n", cpinfo[i].uiCodePage, ret);
+ if (convertible != E_FAIL)
+ {
+ ret = IMultiLanguage2_IsConvertible(iML2, cpinfo[i].uiCodePage, CP_UTF8);
+ ok(ret == convertible, "IMultiLanguage2_IsConvertible(%u -> CP_UTF8) = %08x\n", cpinfo[i].uiCodePage, ret);
+ ret = IMultiLanguage2_IsConvertible(iML2, CP_UTF8, cpinfo[i].uiCodePage);
+ ok(ret == convertible, "IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08x\n", cpinfo[i].uiCodePage, ret);
+ }
}
else
trace("IsValidCodePage failed for cp %u\n", cpinfo[i].uiCodePage);
- ret = IMultiLanguage2_GetCharsetInfo(iML2, cpinfo[i].wszWebCharset, &mcsi);
- /* _autoxxx charsets are a fake and GetCharsetInfo fails for them */
- if (memcmp(cpinfo[i].wszWebCharset, autoW, 5 * sizeof(WCHAR)))
- {
- ok (ret == S_OK, "IMultiLanguage2_GetCharsetInfo failed: %08x\n", ret);
+ if (memcmp(cpinfo[i].wszWebCharset,feffW,sizeof(WCHAR)*11)==0)
+ skip("Legacy windows bug returning invalid charset of unicodeFEFF\n");
+ else
+ {
+ ret = IMultiLanguage2_GetCharsetInfo(iML2, cpinfo[i].wszWebCharset, &mcsi);
+ /* _autoxxx charsets are a fake and GetCharsetInfo fails for them */
+ if (memcmp(cpinfo[i].wszWebCharset, autoW, 5 * sizeof(WCHAR)))
+ {
+ ok (ret == S_OK, "IMultiLanguage2_GetCharsetInfo failed: %08x\n", ret);
#ifdef DUMP_CP_INFO
- trace("%s: %u %u %s\n", wine_dbgstr_w(cpinfo[i].wszWebCharset), mcsi.uiCodePage, mcsi.uiInternetEncoding, wine_dbgstr_w(mcsi.wszCharset));
+ trace("%s: %u %u %s\n", wine_dbgstr_w(cpinfo[i].wszWebCharset), mcsi.uiCodePage, mcsi.uiInternetEncoding, wine_dbgstr_w(mcsi.wszCharset));
#endif
- ok(!lstrcmpiW(cpinfo[i].wszWebCharset, mcsi.wszCharset),
+ ok(!lstrcmpiW(cpinfo[i].wszWebCharset, mcsi.wszCharset),
#ifdef DUMP_CP_INFO
- "%s != %s\n",
- wine_dbgstr_w(cpinfo[i].wszWebCharset), wine_dbgstr_w(mcsi.wszCharset));
+ "%s != %s\n",
+ wine_dbgstr_w(cpinfo[i].wszWebCharset), wine_dbgstr_w(mcsi.wszCharset));
#else
- "wszWebCharset mismatch\n");
+ "wszWebCharset mismatch\n");
#endif
- if (0)
- {
- /* native mlang returns completely messed up encodings in some cases */
- ok(mcsi.uiInternetEncoding == cpinfo[i].uiCodePage || mcsi.uiInternetEncoding == cpinfo[i].uiFamilyCodePage,
- "%u != %u || %u\n", mcsi.uiInternetEncoding, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
- ok(mcsi.uiCodePage == cpinfo[i].uiCodePage || mcsi.uiCodePage == cpinfo[i].uiFamilyCodePage,
- "%u != %u || %u\n", mcsi.uiCodePage, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
+ if (0)
+ {
+ /* native mlang returns completely messed up encodings in some cases */
+ ok(mcsi.uiInternetEncoding == cpinfo[i].uiCodePage || mcsi.uiInternetEncoding == cpinfo[i].uiFamilyCodePage,
+ "%u != %u || %u\n", mcsi.uiInternetEncoding, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
+ ok(mcsi.uiCodePage == cpinfo[i].uiCodePage || mcsi.uiCodePage == cpinfo[i].uiFamilyCodePage,
+ "%u != %u || %u\n", mcsi.uiCodePage, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
+ }
}
- }
+ }
- ret = IMultiLanguage2_GetCharsetInfo(iML2, cpinfo[i].wszHeaderCharset, &mcsi);
- /* _autoxxx charsets are a fake and GetCharsetInfo fails for them */
- if (memcmp(cpinfo[i].wszHeaderCharset, autoW, 5 * sizeof(WCHAR)))
- {
- ok (ret == S_OK, "IMultiLanguage2_GetCharsetInfo failed: %08x\n", ret);
+ if (memcmp(cpinfo[i].wszHeaderCharset,feffW,sizeof(WCHAR)*11)==0)
+ skip("Legacy windows bug returning invalid charset of unicodeFEFF\n");
+ else
+ {
+ ret = IMultiLanguage2_GetCharsetInfo(iML2, cpinfo[i].wszHeaderCharset, &mcsi);
+ /* _autoxxx charsets are a fake and GetCharsetInfo fails for them */
+ if (memcmp(cpinfo[i].wszHeaderCharset, autoW, 5 * sizeof(WCHAR)))
+ {
+ ok (ret == S_OK, "IMultiLanguage2_GetCharsetInfo failed: %08x\n", ret);
#ifdef DUMP_CP_INFO
- trace("%s: %u %u %s\n", wine_dbgstr_w(cpinfo[i].wszHeaderCharset), mcsi.uiCodePage, mcsi.uiInternetEncoding, wine_dbgstr_w(mcsi.wszCharset));
+ trace("%s: %u %u %s\n", wine_dbgstr_w(cpinfo[i].wszHeaderCharset), mcsi.uiCodePage, mcsi.uiInternetEncoding, wine_dbgstr_w(mcsi.wszCharset));
#endif
- ok(!lstrcmpiW(cpinfo[i].wszHeaderCharset, mcsi.wszCharset),
+ ok(!lstrcmpiW(cpinfo[i].wszHeaderCharset, mcsi.wszCharset),
#ifdef DUMP_CP_INFO
- "%s != %s\n",
- wine_dbgstr_w(cpinfo[i].wszHeaderCharset), wine_dbgstr_w(mcsi.wszCharset));
+ "%s != %s\n",
+ wine_dbgstr_w(cpinfo[i].wszHeaderCharset), wine_dbgstr_w(mcsi.wszCharset));
#else
- "wszHeaderCharset mismatch\n");
+ "wszHeaderCharset mismatch\n");
#endif
- if (0)
- {
- /* native mlang returns completely messed up encodings in some cases */
- ok(mcsi.uiInternetEncoding == cpinfo[i].uiCodePage || mcsi.uiInternetEncoding == cpinfo[i].uiFamilyCodePage,
- "%u != %u || %u\n", mcsi.uiInternetEncoding, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
- ok(mcsi.uiCodePage == cpinfo[i].uiCodePage || mcsi.uiCodePage == cpinfo[i].uiFamilyCodePage,
- "%u != %u || %u\n", mcsi.uiCodePage, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
- }
- }
+ if (0)
+ {
+ /* native mlang returns completely messed up encodings in some cases */
+ ok(mcsi.uiInternetEncoding == cpinfo[i].uiCodePage || mcsi.uiInternetEncoding == cpinfo[i].uiFamilyCodePage,
+ "%u != %u || %u\n", mcsi.uiInternetEncoding, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
+ ok(mcsi.uiCodePage == cpinfo[i].uiCodePage || mcsi.uiCodePage == cpinfo[i].uiFamilyCodePage,
+ "%u != %u || %u\n", mcsi.uiCodePage, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
+ }
+ }
+ }
- ret = IMultiLanguage2_GetCharsetInfo(iML2, cpinfo[i].wszBodyCharset, &mcsi);
- /* _autoxxx charsets are a fake and GetCharsetInfo fails for them */
- if (memcmp(cpinfo[i].wszBodyCharset, autoW, 5 * sizeof(WCHAR)))
- {
- ok (ret == S_OK, "IMultiLanguage2_GetCharsetInfo failed: %08x\n", ret);
+ if (memcmp(cpinfo[i].wszBodyCharset,feffW,sizeof(WCHAR)*11)==0)
+ skip("Legacy windows bug returning invalid charset of unicodeFEFF\n");
+ else
+ {
+ ret = IMultiLanguage2_GetCharsetInfo(iML2, cpinfo[i].wszBodyCharset, &mcsi);
+ /* _autoxxx charsets are a fake and GetCharsetInfo fails for them */
+ if (memcmp(cpinfo[i].wszBodyCharset, autoW, 5 * sizeof(WCHAR)))
+ {
+ ok (ret == S_OK, "IMultiLanguage2_GetCharsetInfo failed: %08x\n", ret);
#ifdef DUMP_CP_INFO
- trace("%s: %u %u %s\n", wine_dbgstr_w(cpinfo[i].wszBodyCharset), mcsi.uiCodePage, mcsi.uiInternetEncoding, wine_dbgstr_w(mcsi.wszCharset));
+ trace("%s: %u %u %s\n", wine_dbgstr_w(cpinfo[i].wszBodyCharset), mcsi.uiCodePage, mcsi.uiInternetEncoding, wine_dbgstr_w(mcsi.wszCharset));
#endif
- ok(!lstrcmpiW(cpinfo[i].wszBodyCharset, mcsi.wszCharset),
+ ok(!lstrcmpiW(cpinfo[i].wszBodyCharset, mcsi.wszCharset),
#ifdef DUMP_CP_INFO
- "%s != %s\n",
- wine_dbgstr_w(cpinfo[i].wszBodyCharset), wine_dbgstr_w(mcsi.wszCharset));
+ "%s != %s\n",
+ wine_dbgstr_w(cpinfo[i].wszBodyCharset), wine_dbgstr_w(mcsi.wszCharset));
#else
- "wszBodyCharset mismatch\n");
+ "wszBodyCharset mismatch\n");
#endif
- if (0)
- {
- /* native mlang returns completely messed up encodings in some cases */
- ok(mcsi.uiInternetEncoding == cpinfo[i].uiCodePage || mcsi.uiInternetEncoding == cpinfo[i].uiFamilyCodePage,
- "%u != %u || %u\n", mcsi.uiInternetEncoding, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
- ok(mcsi.uiCodePage == cpinfo[i].uiCodePage || mcsi.uiCodePage == cpinfo[i].uiFamilyCodePage,
- "%u != %u || %u\n", mcsi.uiCodePage, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
- }
- }
+ if (0)
+ {
+ /* native mlang returns completely messed up encodings in some cases */
+ ok(mcsi.uiInternetEncoding == cpinfo[i].uiCodePage || mcsi.uiInternetEncoding == cpinfo[i].uiFamilyCodePage,
+ "%u != %u || %u\n", mcsi.uiInternetEncoding, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
+ ok(mcsi.uiCodePage == cpinfo[i].uiCodePage || mcsi.uiCodePage == cpinfo[i].uiFamilyCodePage,
+ "%u != %u || %u\n", mcsi.uiCodePage, cpinfo[i].uiCodePage, cpinfo[i].uiFamilyCodePage);
+ }
+ }
+ }
}
/* now IEnumCodePage_Next should fail, since pointer is at the end */
@@ -548,37 +557,29 @@ static void test_EnumScripts(IMultiLanguage2 *iML2, DWORD flags)
UINT total;
total = 0;
- TRACE_2("Call IMultiLanguage2_GetNumberOfScripts\n");
ret = IMultiLanguage2_GetNumberOfScripts(iML2, &total);
ok(ret == S_OK && total != 0, "IMultiLanguage2_GetNumberOfScripts: expected S_OK/!0, got %08x/%u\n", ret, total);
trace("total mlang supported scripts %u\n", total);
- TRACE_2("Call IMultiLanguage2_EnumScripts\n");
ret = IMultiLanguage2_EnumScripts(iML2, flags, LANG_NEUTRAL, &iEnumScript);
- trace("IMultiLanguage2_EnumScripts = %08x, iEnumScript = %p\n", ret, iEnumScript);
ok(ret == S_OK && iEnumScript, "IMultiLanguage2_EnumScripts: expected S_OK/!NULL, got %08x/%p\n", ret, iEnumScript);
- TRACE_2("Call IEnumScript_Reset\n");
ret = IEnumScript_Reset(iEnumScript);
ok(ret == S_OK, "IEnumScript_Reset: expected S_OK, got %08x\n", ret);
n = 65536;
- TRACE_2("Call IEnumScript_Next\n");
ret = IEnumScript_Next(iEnumScript, 0, NULL, &n);
ok(n == 65536 && ret == E_FAIL, "IEnumScript_Next: expected 65536/E_FAIL, got %u/%08x\n", n, ret);
- TRACE_2("Call IEnumScript_Next\n");
ret = IEnumScript_Next(iEnumScript, 0, NULL, NULL);
ok(ret == E_FAIL, "IEnumScript_Next: expected E_FAIL, got %08x\n", ret);
sinfo = HeapAlloc(GetProcessHeap(), 0, sizeof(*sinfo) * total * 2);
n = total * 2;
- TRACE_2("Call IEnumScript_Next\n");
ret = IEnumScript_Next(iEnumScript, 0, sinfo, &n);
ok(ret == S_FALSE && n == 0, "IEnumScript_Next: expected S_FALSE/0, got %08x/%u\n", ret, n);
n = total * 2;
- TRACE_2("Call IEnumScript_Next\n");
ret = IEnumScript_Next(iEnumScript, n, sinfo, &n);
ok(ret == S_OK && n != 0, "IEnumScript_Next: expected S_OK, got %08x/%u\n", ret, n);
@@ -607,8 +608,8 @@ static void test_EnumScripts(IMultiLanguage2 *iML2, DWORD flags)
wine_dbgstr_w(sinfo[i].wszDescription),
wine_dbgstr_w(sinfo[i].wszFixedWidthFont),
wine_dbgstr_w(sinfo[i].wszProportionalFont));
-#endif
trace("%u codepage %u\n", i, sinfo[i].uiCodePage);
+#endif
}
/* now IEnumScript_Next should fail, since pointer is at the end */
@@ -645,41 +646,72 @@ static void test_EnumScripts(IMultiLanguage2 *iML2, DWORD flags)
static void IMLangFontLink_Test(IMLangFontLink* iMLFL)
{
- DWORD dwCodePages = 0;
- DWORD dwManyCodePages = 0;
- UINT CodePage = 0;
+ DWORD dwCodePages, dwManyCodePages;
+ DWORD dwCmpCodePages;
+ UINT CodePage;
+ HRESULT ret;
- ok(IMLangFontLink_CodePageToCodePages(iMLFL, 932, &dwCodePages)==S_OK,
- "IMLangFontLink_CodePageToCodePages failed\n");
- ok (dwCodePages != 0, "No CodePages returned\n");
- ok(IMLangFontLink_CodePagesToCodePage(iMLFL, dwCodePages, 1035,
- &CodePage)==S_OK,
- "IMLangFontLink_CodePagesToCodePage failed\n");
+ dwCodePages = ~0u;
+ ret = IMLangFontLink_CodePageToCodePages(iMLFL, -1, &dwCodePages);
+ ok(ret == E_FAIL, "IMLangFontLink_CodePageToCodePages should fail: %x\n", ret);
+ ok(dwCodePages == 0, "expected 0, got %u\n", dwCodePages);
+
+ dwCodePages = 0;
+ ret = IMLangFontLink_CodePageToCodePages(iMLFL, 932, &dwCodePages);
+ ok(ret == S_OK, "IMLangFontLink_CodePageToCodePages error %x\n", ret);
+ ok(dwCodePages == FS_JISJAPAN, "expected FS_JISJAPAN, got %08x\n", dwCodePages);
+ CodePage = 0;
+ ret = IMLangFontLink_CodePagesToCodePage(iMLFL, dwCodePages, 1035, &CodePage);
+ ok(ret == S_OK, "IMLangFontLink_CodePagesToCodePage error %x\n", ret);
ok(CodePage == 932, "Incorrect CodePage Returned (%i)\n",CodePage);
- ok(IMLangFontLink_CodePageToCodePages(iMLFL, 1252, &dwCodePages)==S_OK,
- "IMLangFontLink_CodePageToCodePages failed\n");
- dwManyCodePages = dwManyCodePages | dwCodePages;
- ok(IMLangFontLink_CodePageToCodePages(iMLFL, 1256, &dwCodePages)==S_OK,
- "IMLangFontLink_CodePageToCodePages failed\n");
- dwManyCodePages = dwManyCodePages | dwCodePages;
- ok(IMLangFontLink_CodePageToCodePages(iMLFL, 874, &dwCodePages)==S_OK,
- "IMLangFontLink_CodePageToCodePages failed\n");
- dwManyCodePages = dwManyCodePages | dwCodePages;
+ dwManyCodePages = 0;
+ ret = IMLangFontLink_CodePageToCodePages(iMLFL, 1252, &dwManyCodePages);
+ ok(ret == S_OK, "IMLangFontLink_CodePageToCodePages error %x\n", ret);
+ ok(dwManyCodePages == FS_LATIN1, "expected FS_LATIN1, got %08x\n", dwManyCodePages);
+ dwCodePages = 0;
+ ret = IMLangFontLink_CodePageToCodePages(iMLFL, 1256, &dwCodePages);
+ ok(ret == S_OK, "IMLangFontLink_CodePageToCodePages error %x\n", ret);
+ ok(dwCodePages == FS_ARABIC, "expected FS_ARABIC, got %08x\n", dwCodePages);
+ dwManyCodePages |= dwCodePages;
+ ret = IMLangFontLink_CodePageToCodePages(iMLFL, 874, &dwCodePages);
+ ok(ret == S_OK, "IMLangFontLink_CodePageToCodePages error %x\n", ret);
+ ok(dwCodePages == FS_THAI, "expected FS_THAI, got %08x\n", dwCodePages);
+ dwManyCodePages |= dwCodePages;
- ok(IMLangFontLink_CodePagesToCodePage(iMLFL, dwManyCodePages, 1256,
- &CodePage)==S_OK,
- "IMLangFontLink_CodePagesToCodePage failed\n");
+ ret = IMLangFontLink_CodePagesToCodePage(iMLFL, dwManyCodePages, 1256, &CodePage);
+ ok(ret == S_OK, "IMLangFontLink_CodePagesToCodePage error %x\n", ret);
ok(CodePage == 1256, "Incorrect CodePage Returned (%i)\n",CodePage);
- ok(IMLangFontLink_CodePagesToCodePage(iMLFL, dwManyCodePages, 936,
- &CodePage)==S_OK,
- "IMLangFontLink_CodePagesToCodePage failed\n");
+ ret = IMLangFontLink_CodePagesToCodePage(iMLFL, dwManyCodePages, 936, &CodePage);
+ ok(ret == S_OK, "IMLangFontLink_CodePagesToCodePage error %x\n", ret);
ok(CodePage == 1252, "Incorrect CodePage Returned (%i)\n",CodePage);
+
+ /* Tests for GetCharCodePages */
+
+ /* Latin 1 */
+ 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);
+
+ /* 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);
+
+ /* 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);
}
/* copied from libs/wine/string.c */
-WCHAR *strstrW(const WCHAR *str, const WCHAR *sub)
+static WCHAR *strstrW(const WCHAR *str, const WCHAR *sub)
{
while (*str)
{
@@ -762,10 +794,28 @@ static void test_GetLcidFromRfc1766(IMultiLanguage2 *iML2)
ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret);
ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, en_them);
- ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret);
+ ok((ret == E_FAIL || ret == S_FALSE), "GetLcidFromRfc1766 returned: %08x\n", ret);
+ if (ret == S_FALSE)
+ {
+ BSTR rfcstr;
+ static WCHAR en[] = {'e','n',0};
+
+ ret = IMultiLanguage2_GetRfc1766FromLcid(iML2, lcid, &rfcstr);
+ ok(ret == S_OK, "Expected S_OK, got %08x\n", ret);
+ ok_w2("Expected \"%s\", got \"%s\"n", en, rfcstr);
+ }
ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, english);
- ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret);
+ ok((ret == E_FAIL || ret == S_FALSE), "GetLcidFromRfc1766 returned: %08x\n", ret);
+ if (ret == S_FALSE)
+ {
+ BSTR rfcstr;
+ static WCHAR en[] = {'e','n',0};
+
+ ret = IMultiLanguage2_GetRfc1766FromLcid(iML2, lcid, &rfcstr);
+ ok(ret == S_OK, "Expected S_OK, got %08x\n", ret);
+ ok_w2("Expected \"%s\", got \"%s\"n", en, rfcstr);
+ }
lcid = 0;
@@ -791,29 +841,585 @@ static void test_GetRfc1766FromLcid(IMultiLanguage2 *iML2)
static WCHAR kok[] = {'k','o','k',0};
hr = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, kok);
- ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ /*
+ * S_FALSE happens when 'kok' instead matches to a different Rfc1766 name
+ * for example 'ko' so it is not a failure but does not give us what
+ * we are looking for
+ */
+ if (hr != S_FALSE)
+ {
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- hr = IMultiLanguage2_GetRfc1766FromLcid(iML2, lcid, &rfcstr);
- ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
- ok_w2("Expected \"%s\", got \"%s\"n", kok, rfcstr);
+ hr = IMultiLanguage2_GetRfc1766FromLcid(iML2, lcid, &rfcstr);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok_w2("Expected \"%s\", got \"%s\"n", kok, rfcstr);
+ SysFreeString(rfcstr);
+ }
+}
- SysFreeString(rfcstr);
+static void test_IMultiLanguage2_ConvertStringFromUnicode(IMultiLanguage2 *iML2)
+{
+ CHAR dest[MAX_PATH];
+ CHAR invariate[MAX_PATH];
+ UINT srcsz, destsz;
+ HRESULT hr;
+
+ static WCHAR src[] = {'a','b','c',0};
+
+ memset(invariate, 'x', sizeof(invariate));
+
+ /* pSrcStr NULL */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = sizeof(dest);
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, NULL,
+ &srcsz, dest, &destsz);
+ ok(hr == S_OK || hr == E_FAIL,"expected S_OK or E_FAIL, got %08x\n",hr);
+ if (hr == S_OK)
+ {
+ ok(srcsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+ }
+ else if (hr == E_FAIL)
+ {
+ ok(srcsz == 0,
+ "Expected %u, got %u\n", 0, srcsz);
+ }
+
+ ok(!memcmp(dest, invariate, sizeof(dest)),
+ "Expected dest to be unchanged, got %s\n", dest);
+ ok(destsz == 0, "Expected 0, got %u\n", destsz);
+
+ /* pcSrcSize NULL */
+ memset(dest, 'x', sizeof(dest));
+ destsz = sizeof(dest);
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, src,
+ NULL, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(!strncmp(dest, "abc", 3),
+ "Expected first three chars to be \"abc\"\n");
+ ok(!memcmp(&dest[3], invariate, sizeof(dest) - 3),
+ "Expected rest of dest to be unchanged, got %s\n", dest);
+ ok(destsz == lstrlenW(src),
+ "Expected %u, got %u\n", lstrlenW(src), destsz);
+
+ /* both pSrcStr and pcSrcSize NULL */
+ memset(dest, 'x', sizeof(dest));
+ destsz = sizeof(dest);
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, NULL,
+ NULL, dest, &destsz);
+ ok(hr == S_OK || hr == E_FAIL, "Expected S_OK or E_FAIL, got %08x\n", hr);
+ ok(!memcmp(dest, invariate, sizeof(dest)),
+ "Expected dest to be unchanged, got %s\n", dest);
+ ok(destsz == 0, "Expected 0, got %u\n", destsz);
+
+ /* pDstStr NULL */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = sizeof(dest);
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, src,
+ &srcsz, NULL, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+ ok(destsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+
+ /* pcDstSize NULL */
+ memset(dest, 'x', sizeof(dest));
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, src,
+ &srcsz, dest, NULL);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+ ok(!memcmp(dest, invariate, sizeof(dest)),
+ "Expected dest to be unchanged, got %s\n", dest);
+
+ /* pcSrcSize is 0 */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = 0;
+ destsz = sizeof(dest);
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, src,
+ &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == 0, "Expected 0, got %u\n", srcsz);
+ ok(!memcmp(dest, invariate, sizeof(dest)),
+ "Expected dest to be unchanged, got %s\n", dest);
+ ok(destsz == 0, "Expected 0, got %u\n", destsz);
+
+ /* pcSrcSize does not include NULL terminator */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src);
+ destsz = sizeof(dest);
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, src,
+ &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src),
+ "Expected %u, got %u\n", lstrlenW(src), srcsz);
+ ok(!strncmp(dest, "abc", 3), "Expected first three chars to be \"abc\"\n");
+ ok(!memcmp(&dest[3], invariate, sizeof(dest) - 3),
+ "Expected rest of dest to be unchanged, got %s\n", dest);
+ ok(destsz == lstrlenW(src),
+ "Expected %u, got %u\n", lstrlenW(src), destsz);
+
+ /* pcSrcSize includes NULL terminator */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = sizeof(dest);
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, src,
+ &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src) + 1, "Expected 3, got %u\n", srcsz);
+ ok(!lstrcmpA(dest, "abc"), "Expected \"abc\", got \"%s\"\n", dest);
+ ok(destsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, destsz);
+
+ /* pcSrcSize is -1 */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = -1;
+ destsz = sizeof(dest);
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, src,
+ &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src),
+ "Expected %u, got %u\n", lstrlenW(src), srcsz);
+ ok(!strncmp(dest, "abc", 3), "Expected first three chars to be \"abc\"\n");
+ ok(!memcmp(&dest[3], invariate, sizeof(dest) - 3),
+ "Expected rest of dest to be unchanged, got %s\n", dest);
+ ok(destsz == lstrlenW(src),
+ "Expected %u, got %u\n", lstrlenW(src), destsz);
+
+ /* pcDstSize is 0 */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = 0;
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, src,
+ &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+ ok(!memcmp(dest, invariate, sizeof(dest)),
+ "Expected dest to be unchanged, got %s\n", dest);
+ ok(destsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, destsz);
+
+ /* pcDstSize is not large enough */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = lstrlenW(src);
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, src,
+ &srcsz, dest, &destsz);
+ ok(hr == E_FAIL, "Expected E_FAIL, got %08x\n", hr);
+ ok(srcsz == 0, "Expected 0, got %u\n", srcsz);
+ ok(!strncmp(dest, "abc", 3), "Expected first three chars to be \"abc\"\n");
+ ok(!memcmp(&dest[3], invariate, sizeof(dest) - 3),
+ "Expected rest of dest to be unchanged, got %s\n", dest);
+ ok(destsz == 0, "Expected 0, got %u\n", srcsz);
+
+ /* pcDstSize (bytes) does not leave room for NULL terminator */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = lstrlenW(src) * sizeof(WCHAR);
+ hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, 1252, src,
+ &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+ ok(!lstrcmpA(dest, "abc"), "Expected \"abc\", got \"%s\"\n", dest);
+ ok(destsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, destsz);
+}
+
+static void test_ConvertINetUnicodeToMultiByte(void)
+{
+ CHAR dest[MAX_PATH];
+ CHAR invariate[MAX_PATH];
+ INT srcsz, destsz;
+ HRESULT hr;
+
+ static WCHAR src[] = {'a','b','c',0};
+
+ memset(invariate, 'x', sizeof(invariate));
+
+ /* lpSrcStr NULL */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = sizeof(dest);
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, NULL, &srcsz, dest, &destsz);
+ ok(hr == S_OK || hr == E_FAIL, "Expected S_OK or E_FAIL, got %08x\n", hr);
+ if (hr == S_OK)
+ ok(srcsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+ else if (hr == E_FAIL)
+ ok(srcsz == 0,
+ "Expected %u, got %u\n", 0, srcsz);
+ ok(!memcmp(dest, invariate, sizeof(dest)),
+ "Expected dest to be unchanged, got %s\n", dest);
+ ok(destsz == 0, "Expected 0, got %u\n", destsz);
+
+ /* lpnWideCharCount NULL */
+ memset(dest, 'x', sizeof(dest));
+ destsz = sizeof(dest);
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, src, NULL, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(!strncmp(dest, "abc", 3),
+ "Expected first three chars to be \"abc\"\n");
+ ok(!memcmp(&dest[3], invariate, sizeof(dest) - 3),
+ "Expected rest of dest to be unchanged, got %s\n", dest);
+ ok(destsz == lstrlenW(src),
+ "Expected %u, got %u\n", lstrlenW(src), destsz);
+
+ /* both lpSrcStr and lpnWideCharCount NULL */
+ memset(dest, 'x', sizeof(dest));
+ destsz = sizeof(dest);
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, NULL, NULL, dest, &destsz);
+ ok(hr == S_OK || hr == E_FAIL, "Expected S_OK or E_FAIL, got %08x\n", hr);
+ ok(!memcmp(dest, invariate, sizeof(dest)),
+ "Expected dest to be unchanged, got %s\n", dest);
+ ok(destsz == 0, "Expected 0, got %u\n", destsz);
+
+ /* lpDstStr NULL */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = sizeof(dest);
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, src, &srcsz, NULL, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+ ok(destsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+
+ /* lpnMultiCharCount NULL */
+ memset(dest, 'x', sizeof(dest));
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, src, &srcsz, dest, NULL);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+ ok(!memcmp(dest, invariate, sizeof(dest)),
+ "Expected dest to be unchanged, got %s\n", dest);
+
+ /* lpnWideCharCount is 0 */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = 0;
+ destsz = sizeof(dest);
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, src, &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == 0, "Expected 0, got %u\n", srcsz);
+ ok(!memcmp(dest, invariate, sizeof(dest)),
+ "Expected dest to be unchanged, got %s\n", dest);
+ ok(destsz == 0, "Expected 0, got %u\n", destsz);
+
+ /* lpnWideCharCount does not include NULL terminator */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src);
+ destsz = sizeof(dest);
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, src, &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src),
+ "Expected %u, got %u\n", lstrlenW(src), srcsz);
+ ok(!strncmp(dest, "abc", 3), "Expected first three chars to be \"abc\"\n");
+ ok(!memcmp(&dest[3], invariate, sizeof(dest) - 3),
+ "Expected rest of dest to be unchanged, got %s\n", dest);
+ ok(destsz == lstrlenW(src),
+ "Expected %u, got %u\n", lstrlenW(src), destsz);
+
+ /* lpnWideCharCount includes NULL terminator */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = sizeof(dest);
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, src, &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src) + 1, "Expected 3, got %u\n", srcsz);
+ ok(!lstrcmpA(dest, "abc"), "Expected \"abc\", got \"%s\"\n", dest);
+ ok(destsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, destsz);
+
+ /* lpnWideCharCount is -1 */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = -1;
+ destsz = sizeof(dest);
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, src, &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src),
+ "Expected %u, got %u\n", lstrlenW(src), srcsz);
+ ok(!strncmp(dest, "abc", 3), "Expected first three chars to be \"abc\"\n");
+ ok(!memcmp(&dest[3], invariate, sizeof(dest) - 3),
+ "Expected rest of dest to be unchanged, got %s\n", dest);
+ ok(destsz == lstrlenW(src),
+ "Expected %u, got %u\n", lstrlenW(src), destsz);
+
+ /* lpnMultiCharCount is 0 */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = 0;
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, src, &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+ ok(!memcmp(dest, invariate, sizeof(dest)),
+ "Expected dest to be unchanged, got %s\n", dest);
+ ok(destsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, destsz);
+
+ /* lpnMultiCharCount is not large enough */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = lstrlenW(src);
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, src, &srcsz, dest, &destsz);
+ ok(hr == E_FAIL, "Expected E_FAIL, got %08x\n", hr);
+ ok(srcsz == 0, "Expected 0, got %u\n", srcsz);
+ ok(!strncmp(dest, "abc", 3), "Expected first three chars to be \"abc\"\n");
+ ok(!memcmp(&dest[3], invariate, sizeof(dest) - 3),
+ "Expected rest of dest to be unchanged, got %s\n", dest);
+ ok(destsz == 0, "Expected 0, got %u\n", srcsz);
+
+ /* lpnMultiCharCount (bytes) does not leave room for NULL terminator */
+ memset(dest, 'x', sizeof(dest));
+ srcsz = lstrlenW(src) + 1;
+ destsz = lstrlenW(src) * sizeof(WCHAR);
+ hr = pConvertINetUnicodeToMultiByte(NULL, 1252, src, &srcsz, dest, &destsz);
+ ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
+ ok(srcsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, srcsz);
+ ok(!lstrcmpA(dest, "abc"), "Expected \"abc\", got \"%s\"\n", dest);
+ ok(destsz == lstrlenW(src) + 1,
+ "Expected %u, got %u\n", lstrlenW(src) + 1, destsz);
+}
+
+static void test_JapaneseConversion(void)
+{
+ /* Data */
+ static WCHAR unc_jp[9][12] = {
+ {9,0x31,0x20,0x3042,0x3044,0x3046,0x3048,0x304a,0x000d,0x000a},
+ {9,0x31,0x20,0x30a2,0x30a4,0x30a6,0x30a8,0x30aa,0x000d,0x000a},
+ {9,0x31,0x20,0xff71,0xff72,0xff73,0xff74,0xff75,0x000d,0x000a},
+ {9,0x31,0x20,0x3041,0x3043,0x3045,0x3047,0x3049,0x000d,0x000a},
+ {9,0x31,0x20,0x30a1,0x30a3,0x30a5,0x30a7,0x30a9,0x000d,0x000a},
+ {9,0x31,0x20,0xff67,0xff68,0xff69,0xff6a,0xff6b,0x000d,0x000a},
+ {9,0x31,0x20,0x300c,0x65e5,0x672c,0x8a9e,0x300d,0x000d,0x000a},
+ {7,0x31,0x20,0x25c7,0x25c7,0x3012,0x000d,0x000a},
+ {11,0x31,0x20,0x203b,0x3010,0x0074,0x0065,0x0073,0x0074,0x3011,0x000d,0x000a}
+ };
+ static CHAR jis_jp[9][27] = {
+ {20,0x31,0x20,0x1b,0x24,0x42,0x24,0x22,0x24,0x24,0x24,0x26,0x24,0x28,
+ 0x24,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x22,0x25,0x24,0x25,0x26,0x25,0x28,
+ 0x25,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x22,0x25,0x24,0x25,0x26,0x25,0x28,
+ 0x25,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x24,0x21,0x24,0x23,0x24,0x25,0x24,0x27,
+ 0x24,0x29,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x21,0x25,0x23,0x25,0x25,0x25,0x27,
+ 0x25,0x29,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x21,0x25,0x23,0x25,0x25,0x25,0x27,
+ 0x25,0x29,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x21,0x56,0x46,0x7c,0x4b,0x5c,0x38,0x6c,
+ 0x21,0x57,0x1b,0x28,0x42,0x0d,0x0a},
+ {16,0x31,0x20,0x1b,0x24,0x42,0x21,0x7e,0x21,0x7e,0x22,0x29,0x1b,0x28,
+ 0x42,0x0d,0x0a},
+ {26,0x31,0x20,0x1b,0x24,0x42,0x22,0x28,0x21,0x5a,0x1b,0x28,0x42,0x74,
+ 0x65,0x73,0x74,0x1b,0x24,0x42,0x21,0x5b,0x1b,0x28,0x42,0x0d,0x0a}
+ };
+ static CHAR sjis_jp[9][15] = {
+ {14,0x31,0x20,0x82,0xa0,0x82,0xa2,0x82,0xa4,0x82,0xa6,0x82,0xa8,0x0d,0x0a},
+ {14,0x31,0x20,0x83,0x41,0x83,0x43,0x83,0x45,0x83,0x47,0x83,0x49,0x0d,0x0a},
+ {9,0x31,0x20,0xb1,0xb2,0xb3,0xb4,0xb5,0x0d,0x0a},
+ {14,0x31,0x20,0x82,0x9f,0x82,0xa1,0x82,0xa3,0x82,0xa5,0x82,0xa7,0x0d,0x0a},
+ {14,0x31,0x20,0x83,0x40,0x83,0x42,0x83,0x44,0x83,0x46,0x83,0x48,0x0d,0x0a},
+ {9,0x31,0x20,0xa7,0xa8,0xa9,0xaa,0xab,0x0d,0x0a},
+ {14,0x31,0x20,0x81,0x75,0x93,0xfa,0x96,0x7b,0x8c,0xea,0x81,0x76,0x0d,0x0a},
+ {10,0x31,0x20,0x81,0x9e,0x81,0x9e,0x81,0xa7,0x0d,0x0a},
+ {14,0x31,0x20,0x81,0xa6,0x81,0x79,0x74,0x65,0x73,0x74,0x81,0x7a,0x0d,0x0a}
+ };
+ static CHAR euc_jp[9][15] = {
+ {14,0x31,0x20,0xa4,0xa2,0xa4,0xa4,0xa4,0xa6,0xa4,0xa8,0xa4,0xaa,0x0d,0x0a},
+ {14,0x31,0x20,0xa5,0xa2,0xa5,0xa4,0xa5,0xa6,0xa5,0xa8,0xa5,0xaa,0x0d,0x0a},
+ {14,0x31,0x20,0x8e,0xb1,0x8e,0xb2,0x8e,0xb3,0x8e,0xb4,0x8e,0xb5,0x0d,0x0a},
+ {14,0x31,0x20,0xa4,0xa1,0xa4,0xa3,0xa4,0xa5,0xa4,0xa7,0xa4,0xa9,0x0d,0x0a},
+ {14,0x31,0x20,0xa5,0xa1,0xa5,0xa3,0xa5,0xa5,0xa5,0xa7,0xa5,0xa9,0x0d,0x0a},
+ {14,0x31,0x20,0x8e,0xa7,0x8e,0xa8,0x8e,0xa9,0x8e,0xaa,0x8e,0xab,0x0d,0x0a},
+ {14,0x31,0x20,0xa1,0xd6,0xc6,0xfc,0xcb,0xdc,0xb8,0xec,0xa1,0xd7,0x0d,0x0a},
+ {10,0x31,0x20,0xa1,0xfe,0xa1,0xfe,0xa2,0xa9,0x0d,0x0a},
+ {14,0x31,0x20,0xa2,0xa8,0xa1,0xda,0x74,0x65,0x73,0x74,0xa1,0xdb,0x0d,0x0a}
+ };
+
+ INT srcsz, destsz;
+ INT i;
+ HRESULT hr;
+ CHAR output[30];
+ WCHAR outputW[30];
+ int outlen;
+
+ /* test unc->jis */
+ for (i = 0; i < 9; i++)
+ {
+ int j;
+ destsz = 30;
+ outlen = jis_jp[i][0];
+ srcsz = unc_jp[i][0];
+ hr = pConvertINetUnicodeToMultiByte(NULL, 50220, &unc_jp[i][1], &srcsz, output, &destsz);
+ if (hr == S_FALSE)
+ {
+ skip("Code page identifier 50220 is not supported\n");
+ break;
+ }
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n", i, hr);
+ ok(destsz == outlen, "(%i) Expected %i, got %i\n",i,outlen,destsz);
+ ok(srcsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],srcsz);
+ ok(memcmp(output,&jis_jp[i][1],destsz)==0,"(%i) Strings do not match\n",i);
+
+ /* and back */
+ srcsz = outlen;
+ destsz = 30;
+ hr = pConvertINetMultiByteToUnicode(NULL, 50220, output, &srcsz, outputW,&destsz);
+
+ /*
+ * JIS does not have hankata so it get automatically converted to
+ * zenkata. this means that strings 1 and 2 are identical as well as
+ * strings 4 and 5.
+ */
+ j = i;
+ if (i == 2) j = 1;
+ if (i == 5) j = 4;
+
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n",i, hr);
+ ok(destsz == unc_jp[j][0],"(%i) Expected %i, got %i\n",i,unc_jp[j][0],destsz);
+ ok(srcsz == outlen,"(%i) Expected %i, got %i\n",i,outlen,srcsz);
+ ok(memcmp(outputW,&unc_jp[j][1],destsz)==0,"(%i) Strings do not match\n",i);
+ }
+
+ /* test unc->sjis */
+ for (i = 0; i < 9; i++)
+ {
+ destsz = 30;
+ outlen = sjis_jp[i][0];
+ srcsz = unc_jp[i][0];
+
+ hr = pConvertINetUnicodeToMultiByte(NULL, 932, &unc_jp[i][1], &srcsz, output, &destsz);
+ if (hr == S_FALSE)
+ {
+ skip("Code page identifier 932 is not supported\n");
+ break;
+ }
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n",i,hr);
+ ok(destsz == outlen,"(%i) Expected %i, got %i\n",i,outlen,destsz);
+ ok(srcsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],srcsz);
+ ok(memcmp(output,&sjis_jp[i][1],outlen)==0,"(%i) Strings do not match\n",i);
+
+ srcsz = outlen;
+ destsz = 30;
+ hr = pConvertINetMultiByteToUnicode(NULL, 932, output, &srcsz, outputW,&destsz);
+
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n", i, hr);
+ ok(destsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],destsz);
+ ok(srcsz == outlen,"(%i) Expected %i, got %i\n",i,outlen,srcsz);
+ ok(memcmp(outputW,&unc_jp[i][1],destsz)==0,"(%i) Strings do not match\n",i);
+ }
+
+ /* test unc->euc */
+ for (i = 0; i < 9; i++)
+ {
+ destsz = 30;
+ outlen = euc_jp[i][0];
+ srcsz = unc_jp[i][0];
+
+ hr = pConvertINetUnicodeToMultiByte(NULL, 51932, &unc_jp[i][1], &srcsz, output, &destsz);
+ if (hr == S_FALSE)
+ {
+ skip("Code page identifier 51932 is not supported\n");
+ break;
+ }
+ ok(hr == S_OK, "(%i) Expected S_OK, got %08x\n",i,hr);
+ ok(destsz == outlen, "(%i) Expected %i, got %i\n",i,outlen,destsz);
+ ok(srcsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],destsz);
+ ok(memcmp(output,&euc_jp[i][1],outlen)==0,"(%i) Strings do not match\n",i);
+
+ srcsz = outlen;
+ destsz = 30;
+ hr = pConvertINetMultiByteToUnicode(NULL, 51932, output, &srcsz, outputW,&destsz);
+
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n",i,hr);
+ ok(destsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],destsz);
+ ok(srcsz == outlen,"(%i) Expected %i, got %i\n",i,outlen,srcsz);
+ ok(memcmp(outputW,&unc_jp[i][1],destsz)==0,"(%i) Strings do not match\n",i);
+ }
+
+ /* Japanese autodetect */
+ i = 0;
+ destsz = 30;
+ srcsz = jis_jp[i][0];
+ hr = pConvertINetMultiByteToUnicode(NULL, 50932, &jis_jp[i][1], &srcsz, outputW, &destsz);
+ if (hr == S_FALSE)
+ {
+ skip("Code page identifier 50932 is not supported\n");
+ return;
+ }
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n",i,hr);
+ ok(destsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],destsz);
+ ok(srcsz == jis_jp[i][0],"(%i) Expected %i, got %i\n",i,jis_jp[i][0],srcsz);
+ ok(memcmp(outputW,&unc_jp[i][1],destsz)==0,"(%i) Strings do not match\n",i);
+
+ i = 1;
+ destsz = 30;
+ srcsz = sjis_jp[i][0];
+ hr = pConvertINetMultiByteToUnicode(NULL, 50932, &sjis_jp[i][1], &srcsz, outputW, &destsz);
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n",i,hr);
+ ok(destsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],destsz);
+ ok(srcsz == sjis_jp[i][0],"(%i) Expected %i, got %i\n",i,sjis_jp[i][0],srcsz);
+ ok(memcmp(outputW,&unc_jp[i][1],destsz)==0,"(%i) Strings do not match\n",i);
+}
+
+static void test_GetScriptFontInfo(IMLangFontLink2 *font_link)
+{
+ HRESULT hr;
+ UINT nfonts;
+ SCRIPTFONTINFO sfi[1];
+
+ nfonts = 0;
+ hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidLatin, 0, &nfonts, NULL);
+ ok(hr == S_OK, "GetScriptFontInfo failed %u\n", GetLastError());
+ ok(nfonts, "unexpected result\n");
+
+ nfonts = 0;
+ hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidLatin, SCRIPTCONTF_FIXED_FONT, &nfonts, NULL);
+ ok(hr == S_OK, "GetScriptFontInfo failed %u\n", GetLastError());
+ ok(nfonts, "unexpected result\n");
+
+ nfonts = 0;
+ hr = IMLangFontLink2_GetScriptFontInfo(font_link, sidLatin, SCRIPTCONTF_PROPORTIONAL_FONT, &nfonts, NULL);
+ ok(hr == S_OK, "GetScriptFontInfo failed %u\n", GetLastError());
+ ok(nfonts, "unexpected result\n");
+
+ nfonts = 1;
+ memset(sfi, 0, sizeof(sfi));
+ 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].wszFont[0], "unexpected result\n");
+
+ nfonts = 1;
+ memset(sfi, 0, sizeof(sfi));
+ 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].wszFont[0], "unexpected result\n");
}
START_TEST(mlang)
{
IMultiLanguage2 *iML2 = NULL;
IMLangFontLink *iMLFL = NULL;
+ IMLangFontLink2 *iMLFL2 = NULL;
HRESULT ret;
- pGetCPInfoExA = (void *)GetProcAddress(GetModuleHandleA("kernel32.dll"), "GetCPInfoExA");
+ if (!init_function_ptrs())
+ return;
CoInitialize(NULL);
- TRACE_2("Call CoCreateInstance\n");
ret = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER,
&IID_IMultiLanguage2, (void **)&iML2);
-
- trace("ret = %08x, MultiLanguage2 iML2 = %p\n", ret, iML2);
if (ret != S_OK || !iML2) return;
test_rfc1766(iML2);
@@ -832,25 +1438,33 @@ START_TEST(mlang)
test_EnumScripts(iML2, SCRIPTCONTF_SCRIPT_USER);
test_EnumScripts(iML2, SCRIPTCONTF_SCRIPT_USER | SCRIPTCONTF_SCRIPT_HIDE | SCRIPTCONTF_SCRIPT_SYSTEM);
- TRACE_2("Call IMultiLanguage2_IsConvertible\n");
ret = IMultiLanguage2_IsConvertible(iML2, CP_UTF8, CP_UNICODE);
ok(ret == S_OK, "IMultiLanguage2_IsConvertible(CP_UTF8 -> CP_UNICODE) = %08x\n", ret);
- TRACE_2("Call IMultiLanguage2_IsConvertible\n");
ret = IMultiLanguage2_IsConvertible(iML2, CP_UNICODE, CP_UTF8);
ok(ret == S_OK, "IMultiLanguage2_IsConvertible(CP_UNICODE -> CP_UTF8) = %08x\n", ret);
test_multibyte_to_unicode_translations(iML2);
+ test_IMultiLanguage2_ConvertStringFromUnicode(iML2);
IMultiLanguage2_Release(iML2);
+ test_ConvertINetUnicodeToMultiByte();
+
+ test_JapaneseConversion();
+
ret = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER,
&IID_IMLangFontLink, (void **)&iMLFL);
-
- trace("ret = %08x, IMLangFontLink iMLFL = %p\n", ret, iMLFL);
- if (ret != S_OK || !iML2) return;
+ if (ret != S_OK || !iMLFL) return;
IMLangFontLink_Test(iMLFL);
IMLangFontLink_Release(iMLFL);
-
+
+ ret = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IMLangFontLink2, (void **)&iMLFL2);
+ if (ret != S_OK || !iMLFL2) return;
+
+ test_GetScriptFontInfo(iMLFL2);
+ IMLangFontLink2_Release(iMLFL2);
+
CoUninitialize();
}
diff --git a/rostests/winetests/msacm32/msacm.c b/rostests/winetests/msacm32/msacm.c
index 6efcb84b9d0..956b78554bd 100644
--- a/rostests/winetests/msacm32/msacm.c
+++ b/rostests/winetests/msacm32/msacm.c
@@ -34,7 +34,7 @@
static BOOL CALLBACK FormatTagEnumProc(HACMDRIVERID hadid,
PACMFORMATTAGDETAILS paftd,
- DWORD dwInstance,
+ DWORD_PTR dwInstance,
DWORD fdwSupport)
{
if (winetest_interactive)
@@ -45,7 +45,7 @@ static BOOL CALLBACK FormatTagEnumProc(HACMDRIVERID hadid,
static BOOL CALLBACK FormatEnumProc(HACMDRIVERID hadid,
LPACMFORMATDETAILS pafd,
- DWORD dwInstance,
+ DWORD_PTR dwInstance,
DWORD fd)
{
if (winetest_interactive)
@@ -55,7 +55,7 @@ static BOOL CALLBACK FormatEnumProc(HACMDRIVERID hadid,
}
static BOOL CALLBACK DriverEnumProc(HACMDRIVERID hadid,
- DWORD dwInstance,
+ DWORD_PTR dwInstance,
DWORD fdwSupport)
{
MMRESULT rc;
diff --git a/rostests/winetests/mshtml/dom.c b/rostests/winetests/mshtml/dom.c
index bcb14ef4ea7..b4889999cbe 100644
--- a/rostests/winetests/mshtml/dom.c
+++ b/rostests/winetests/mshtml/dom.c
@@ -1798,7 +1798,7 @@ static void _test_border_styles(unsigned line, IHTMLStyle *pStyle, BSTR Name)
HRESULT hres;
DISPID dispid;
- hres = IHTMLStyle_GetIDsOfNames(pStyle, &IID_NULL, (LPOLESTR*)&Name, 1,
+ hres = IHTMLStyle_GetIDsOfNames(pStyle, &IID_NULL, &Name, 1,
LOCALE_USER_DEFAULT, &dispid);
ok_(__FILE__,line) (hres == S_OK, "GetIDsOfNames: %08x\n", hres);
if(hres == S_OK)
@@ -2371,6 +2371,7 @@ static void test_current_style(IHTMLCurrentStyle *current_style)
{
BSTR str;
HRESULT hres;
+ VARIANT v;
test_disp((IUnknown*)current_style, &DIID_DispHTMLCurrentStyle);
test_ifaces((IUnknown*)current_style, cstyle_iids);
@@ -2379,6 +2380,118 @@ static void test_current_style(IHTMLCurrentStyle *current_style)
ok(hres == S_OK, "get_display failed: %08x\n", hres);
ok(!strcmp_wa(str, "block"), "get_display returned %s\n", dbgstr_w(str));
SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_position(current_style, &str);
+ ok(hres == S_OK, "get_position failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "absolute"), "get_position returned %s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_fontFamily(current_style, &str);
+ ok(hres == S_OK, "get_fontFamily failed: %08x\n", hres);
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_fontStyle(current_style, &str);
+ ok(hres == S_OK, "get_fontStyle failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "normal"), "get_fontStyle returned %s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_backgroundImage(current_style, &str);
+ ok(hres == S_OK, "get_backgroundImage failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "none"), "get_backgroundImage returned %s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_fontVariant(current_style, &str);
+ ok(hres == S_OK, "get_fontVariant failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "normal"), "get_fontVariant returned %s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_borderTopStyle(current_style, &str);
+ ok(hres == S_OK, "get_borderTopStyle failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "none"), "get_borderTopStyle returned %s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_borderRightStyle(current_style, &str);
+ ok(hres == S_OK, "get_borderRightStyle failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "none"), "get_borderRightStyle returned %s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_borderBottomStyle(current_style, &str);
+ ok(hres == S_OK, "get_borderBottomStyle failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "none"), "get_borderBottomStyle returned %s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_borderLeftStyle(current_style, &str);
+ ok(hres == S_OK, "get_borderLeftStyle failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "none"), "get_borderLeftStyle returned %s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_textAlign(current_style, &str);
+ ok(hres == S_OK, "get_textAlign failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "center"), "get_textAlign returned %s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_textDecoration(current_style, &str);
+ ok(hres == S_OK, "get_textDecoration failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "none"), "get_textDecoration returned %s\n", dbgstr_w(str));
+ SysFreeString(str);
+
+ hres = IHTMLCurrentStyle_get_cursor(current_style, &str);
+ ok(hres == S_OK, "get_cursor failed: %08x\n", hres);
+ ok(!strcmp_wa(str, "default"), "get_cursor returned %s\n", dbgstr_w(str));
+ 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));
+ ok( V_I4(&v) == 400, "expect 400 got (%d)\n", V_I4(&v));
+ VariantClear(&v);
+
+ hres = IHTMLCurrentStyle_get_fontSize(current_style, &v);
+ ok(hres == S_OK, "get_fontSize failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
+ VariantClear(&v);
+
+ hres = IHTMLCurrentStyle_get_left(current_style, &v);
+ ok(hres == S_OK, "get_left failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
+ VariantClear(&v);
+
+ hres = IHTMLCurrentStyle_get_top(current_style, &v);
+ ok(hres == S_OK, "get_top failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
+ VariantClear(&v);
+
+ hres = IHTMLCurrentStyle_get_width(current_style, &v);
+ ok(hres == S_OK, "get_width failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
+ VariantClear(&v);
+
+ hres = IHTMLCurrentStyle_get_height(current_style, &v);
+ ok(hres == S_OK, "get_height failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
+ VariantClear(&v);
+
+ hres = IHTMLCurrentStyle_get_paddingLeft(current_style, &v);
+ ok(hres == S_OK, "get_paddingLeft failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
+ VariantClear(&v);
+
+ hres = IHTMLCurrentStyle_get_zIndex(current_style, &v);
+ ok(hres == S_OK, "get_zIndex failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_I4, "V_VT(v) = %d\n", V_VT(&v));
+ ok( V_I4(&v) == 1, "expect 1 got (%d)\n", V_I4(&v));
+ VariantClear(&v);
+
+ hres = IHTMLCurrentStyle_get_verticalAlign(current_style, &v);
+ ok(hres == S_OK, "get_verticalAlign failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
+ ok(!strcmp_wa(V_BSTR(&v), "middle"), "get_verticalAlign returned %s\n", dbgstr_w(V_BSTR(&v)));
+ VariantClear(&v);
+
+ hres = IHTMLCurrentStyle_get_marginRight(current_style, &v);
+ 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);
}
static void test_style2(IHTMLStyle2 *style2)
@@ -2403,9 +2516,35 @@ static void test_style2(IHTMLStyle2 *style2)
SysFreeString(str);
}
+static void test_style4(IHTMLStyle4 *style4)
+{
+ HRESULT hres;
+ VARIANT v;
+ VARIANT vdefault;
+
+ hres = IHTMLStyle4_get_minHeight(style4, &vdefault);
+ ok(hres == S_OK, "get_minHeight failed: %08x\n", hres);
+
+ V_VT(&v) = VT_BSTR;
+ V_BSTR(&v) = a2bstr("10px");
+ hres = IHTMLStyle4_put_minHeight(style4, v);
+ ok(hres == S_OK, "put_minHeight failed: %08x\n", hres);
+ VariantClear(&v);
+
+ hres = IHTMLStyle4_get_minHeight(style4, &v);
+ ok(hres == S_OK, "get_minHeight failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(v) = %d\n", V_VT(&v));
+ ok( !strcmp_wa(V_BSTR(&v), "10px"), "expect 10px got (%s)\n", dbgstr_w(V_BSTR(&v)));
+
+ hres = IHTMLStyle4_put_minHeight(style4, vdefault);
+ ok(hres == S_OK, "put_minHeight failed: %08x\n", hres);
+ VariantClear(&vdefault);
+}
+
static void test_default_style(IHTMLStyle *style)
{
IHTMLStyle2 *style2;
+ IHTMLStyle4 *style4;
VARIANT_BOOL b;
VARIANT v;
BSTR str;
@@ -2422,6 +2561,18 @@ static void test_default_style(IHTMLStyle *style)
ok(hres == S_OK, "get_position failed: %08x\n", hres);
ok(!str, "str=%s\n", dbgstr_w(str));
+ V_VT(&v) = VT_NULL;
+ hres = IHTMLStyle_get_marginRight(style, &v);
+ ok(hres == S_OK, "get_marginRight failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(marginRight) = %d\n", V_VT(&v));
+ ok(!V_BSTR(&v), "V_BSTR(marginRight) = %s\n", dbgstr_w(V_BSTR(&v)));
+
+ V_VT(&v) = VT_NULL;
+ hres = IHTMLStyle_get_marginLeft(style, &v);
+ ok(hres == S_OK, "get_marginLeft failed: %08x\n", hres);
+ ok(V_VT(&v) == VT_BSTR, "V_VT(marginLeft) = %d\n", V_VT(&v));
+ ok(!V_BSTR(&v), "V_BSTR(marginLeft) = %s\n", dbgstr_w(V_BSTR(&v)));
+
str = (void*)0xdeadbeef;
hres = IHTMLStyle_get_fontFamily(style, &str);
ok(hres == S_OK, "get_fontFamily failed: %08x\n", hres);
@@ -3034,6 +3185,13 @@ static void test_default_style(IHTMLStyle *style)
test_style2(style2);
IHTMLStyle2_Release(style2);
}
+
+ hres = IHTMLStyle_QueryInterface(style, &IID_IHTMLStyle4, (void**)&style4);
+ ok(hres == S_OK, "Could not get IHTMLStyle4 iface: %08x\n", hres);
+ if(SUCCEEDED(hres)) {
+ test_style4(style4);
+ IHTMLStyle4_Release(style4);
+ }
}
static void test_default_selection(IHTMLDocument2 *doc)
diff --git a/rostests/winetests/msvcrt/file.c b/rostests/winetests/msvcrt/file.c
index 36fcc8001b8..edc0799e6b3 100644
--- a/rostests/winetests/msvcrt/file.c
+++ b/rostests/winetests/msvcrt/file.c
@@ -36,6 +36,37 @@
static HANDLE proc_handles[2];
+static void test_filbuf( void )
+{
+ FILE *fp;
+ int c;
+ fpos_t pos;
+
+ fp = fopen("filbuf.tst", "wb");
+ fwrite("\n\n\n\n", 1, 4, fp);
+ fclose(fp);
+
+ fp = fopen("filbuf.tst", "rt");
+ c = _filbuf(fp);
+ ok(c == '\n', "read wrong byte\n");
+ /* See bug 16970 for why we care about _filbuf.
+ * ftell returns screwy values on files with lots
+ * of bare LFs in ascii mode because it assumes
+ * that ascii files contain only CRLFs, removes
+ * the CR's early in _filbuf, and adjusts the return
+ * value of ftell to compensate.
+ * native _filbuf will read the whole file, then consume and return
+ * the first one. That leaves fp->_fd at offset 4, and fp->_ptr
+ * pointing to a buffer of three bare LFs, so
+ * ftell will return 4 - 3 - 3 = -2.
+ */
+ ok(ftell(fp) == -2, "ascii crlf removal does not match native\n");
+ ok(fgetpos(fp, &pos) == 0, "fgetpos fail\n");
+ ok(pos == -2, "ftell does not match fgetpos\n");
+ fclose(fp);
+ unlink("filbuf.tst");
+}
+
static void test_fdopen( void )
{
static const char buffer[] = {0,1,2,3,4,5,6,7,8,9};
@@ -105,11 +136,11 @@ static void test_fileops( void )
rewind(file);
ok(fgetpos(file,&pos) == 0, "fgetpos failed unexpected\n");
- ok(pos == 0, "Unexpected result of fgetpos 0x%Lx\n", pos);
- pos = (ULONGLONG)sizeof (outbuffer);
+ ok(pos == 0, "Unexpected result of fgetpos %x%08x\n", (DWORD)(pos >> 32), (DWORD)pos);
+ pos = sizeof (outbuffer);
ok(fsetpos(file, &pos) == 0, "fsetpos failed unexpected\n");
ok(fgetpos(file,&pos) == 0, "fgetpos failed unexpected\n");
- ok(pos == (ULONGLONG)sizeof (outbuffer), "Unexpected result of fgetpos 0x%Lx\n", pos);
+ ok(pos == sizeof (outbuffer), "Unexpected result of fgetpos %x%08x\n", (DWORD)(pos >> 32), (DWORD)pos);
fclose (file);
fd = open ("fdopen.tst", O_RDONLY | O_TEXT);
@@ -275,6 +306,7 @@ static void test_asciimode(void)
{
FILE *fp;
char buf[64];
+ int c, i, j;
/* Simple test of CR CR LF handling. Test both fgets and fread code paths, they're different! */
fp = fopen("ascii.tst", "wb");
@@ -303,9 +335,84 @@ static void test_asciimode(void)
ok((fread(buf, 1, sizeof(buf), fp) == 0), "fread after logical EOF\n");
fclose(fp);
+ /* Show ASCII mode handling*/
+ fp= fopen("ascii.tst","wb");
+ fputs("0\r\n1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9\r\n", fp);
+ fclose(fp);
+
+ fp = fopen("ascii.tst", "r");
+ c= fgetc(fp);
+ c= fgetc(fp);
+ fseek(fp,0,SEEK_CUR);
+ for(i=1; i<10; i++) {
+ ok((j = ftell(fp)) == i*3, "ftell fails in TEXT mode\n");
+ fseek(fp,0,SEEK_CUR);
+ ok((c = fgetc(fp)) == '0'+ i, "fgetc after fseek failed in line %d\n", i);
+ c= fgetc(fp);
+ }
+ /* Show that fseek doesn't skip \\r !*/
+ rewind(fp);
+ c= fgetc(fp);
+ fseek(fp, 2 ,SEEK_CUR);
+ for(i=1; i<10; i++) {
+ ok((c = fgetc(fp)) == '0'+ i, "fgetc after fseek with pos Offset failed in line %d\n", i);
+ fseek(fp, 2 ,SEEK_CUR);
+ }
+ fseek(fp, 9*3 ,SEEK_SET);
+ c = fgetc(fp);
+ fseek(fp, -4 ,SEEK_CUR);
+ for(i= 8; i>=0; i--) {
+ ok((c = fgetc(fp)) == '0'+ i, "fgetc after fseek with neg Offset failed in line %d\n", i);
+ fseek(fp, -4 ,SEEK_CUR);
+ }
+ /* Show what happens if fseek positions filepointer on \\r */
+ fclose(fp);
+ fp = fopen("ascii.tst", "r");
+ fseek(fp, 3 ,SEEK_SET);
+ ok((c = fgetc(fp)) == '1', "fgetc fails to read next char when positioned on \\r\n");
+ fclose(fp);
+
unlink("ascii.tst");
}
+static void test_asciimode2(void)
+{
+ /* Error sequence from one app was getchar followed by small fread
+ * with one \r removed had last byte of buffer filled with
+ * next byte of *unbuffered* data rather than next byte from buffer
+ * Test case is a short string of one byte followed by a newline
+ * followed by filler to fill out the sector, then a sector of
+ * some different byte.
+ */
+
+ FILE *fp;
+ char ibuf[4];
+ int i;
+ static const char obuf[] =
+"00\n"
+"000000000000000000000000000000000000000000000000000000000000000000000000000000\n"
+"000000000000000000000000000000000000000000000000000000000000000000000000000000\n"
+"000000000000000000000000000000000000000000000000000000000000000000000000000000\n"
+"000000000000000000000000000000000000000000000000000000000000000000000000000000\n"
+"000000000000000000000000000000000000000000000000000000000000000000000000000000\n"
+"000000000000000000000000000000000000000000000000000000000000000000000000000000\n"
+"000000000000000000\n"
+"1111111111111111111";
+
+ fp = fopen("ascii2.tst", "wt");
+ fwrite(obuf, 1, sizeof(obuf), fp);
+ fclose(fp);
+
+ fp = fopen("ascii2.tst", "rt");
+ ok(getc(fp) == '0', "first char not 0\n");
+ memset(ibuf, 0, sizeof(ibuf));
+ i = fread(ibuf, 1, sizeof(ibuf), fp);
+ ok(i == sizeof(ibuf), "fread i %d != sizeof(ibuf)\n", i);
+ ok(0 == strncmp(ibuf, obuf+1, sizeof(ibuf)), "ibuf != obuf\n");
+ fclose(fp);
+ unlink("ascii2.tst");
+}
+
static WCHAR* AtoW( const char* p )
{
WCHAR* buffer;
@@ -362,9 +469,10 @@ static void test_flsbuf( void )
{
char* tempf;
FILE *tempfh;
+ int c;
int ret;
int bufmode;
- int bufmodes[] = {_IOFBF,_IONBF};
+ static const int bufmodes[] = {_IOFBF,_IONBF};
tempf=_tempnam(".","wne");
for (bufmode=0; bufmode < sizeof(bufmodes)/sizeof(bufmodes[0]); bufmode++)
@@ -388,6 +496,26 @@ static void test_flsbuf( void )
ok(EOF == ret, "_flsbuf(0,tempfh) on r/o file expected %x got %x\n", EOF, ret);
fclose(tempfh);
+ /* See bug 17123, exposed by WinAVR's make */
+ tempfh = fopen(tempf,"w");
+ ok(tempfh->_cnt == 0, "_cnt on freshly opened file was %d\n", tempfh->_cnt);
+ setbuf(tempfh, NULL);
+ ok(tempfh->_cnt == 0, "_cnt on unbuffered file was %d\n", tempfh->_cnt);
+ /* Inlined putchar sets _cnt to -1. Native seems to ignore the value... */
+ tempfh->_cnt = 1234;
+ ret = _flsbuf('Q',tempfh);
+ ok('Q' == ret, "_flsbuf('Q',tempfh) expected %x got %x\n", 'Q', ret);
+ /* ... and reset it to zero */
+ ok(tempfh->_cnt == 0, "after unbuf _flsbuf, _cnt was %d\n", tempfh->_cnt);
+ fclose(tempfh);
+ /* And just for grins, make sure the file is correct */
+ tempfh = fopen(tempf,"r");
+ c = fgetc(tempfh);
+ ok(c == 'Q', "first byte should be 'Q'\n");
+ c = fgetc(tempfh);
+ ok(c == EOF, "there should only be one byte\n");
+ fclose(tempfh);
+
unlink(tempf);
}
@@ -425,8 +553,7 @@ static void test_fgetwc( void )
ok(l==BUFSIZ-2, "ftell expected %d got %ld\n", BUFSIZ-2, l);
fgetws(wtextW,LLEN,tempfh);
l=ftell(tempfh);
- ok(l==BUFSIZ-2+strlen(mytext), "ftell expected %d got %ld\n",
- BUFSIZ-2+strlen(mytext), l);
+ ok(l==BUFSIZ-2+strlen(mytext), "ftell expected %d got %ld\n", BUFSIZ-2+lstrlen(mytext), l);
mytextW = AtoW (mytext);
aptr = mytextW;
wptr = wtextW;
@@ -903,23 +1030,21 @@ static void test_stat(void)
fd = open("stat.tst", O_WRONLY | O_CREAT | O_BINARY, _S_IREAD |_S_IWRITE);
if (fd >= 0)
{
- if (fstat(fd, &buf) == 0)
- {
- if ((buf.st_mode & _S_IFMT) == _S_IFREG)
- {
- ok(buf.st_dev == 0, "st_dev is %d, expected 0\n", buf.st_dev);
- ok(buf.st_dev == buf.st_rdev, "st_dev (%d) and st_rdev (%d) differ\n",
- buf.st_dev, buf.st_rdev);
- ok(buf.st_nlink == 1, "st_nlink is %d, expected 1\n",
- buf.st_nlink);
- ok(buf.st_size == 0, "st_size is %d, expected 0\n",
- buf.st_size);
- }
- else
- skip("file is not a file?\n");
- }
- else
- skip("fstat failed, errno %d\n", errno);
+ ok(fstat(fd, &buf) == 0, "fstat failed: errno=%d\n", errno);
+ ok((buf.st_mode & _S_IFMT) == _S_IFREG, "bad format = %06o\n", buf.st_mode);
+ ok((buf.st_mode & 0777) == 0666, "bad st_mode = %06o\n", buf.st_mode);
+ ok(buf.st_dev == 0, "st_dev is %d, expected 0\n", buf.st_dev);
+ ok(buf.st_dev == buf.st_rdev, "st_dev (%d) and st_rdev (%d) differ\n", buf.st_dev, buf.st_rdev);
+ ok(buf.st_nlink == 1, "st_nlink is %d, expected 1\n", buf.st_nlink);
+ ok(buf.st_size == 0, "st_size is %d, expected 0\n", buf.st_size);
+
+ ok(stat("stat.tst", &buf) == 0, "stat failed: errno=%d\n", errno);
+ ok((buf.st_mode & _S_IFMT) == _S_IFREG, "bad format = %06o\n", buf.st_mode);
+ ok((buf.st_mode & 0777) == 0666, "bad st_mode = %06o\n", buf.st_mode);
+ ok(buf.st_dev == buf.st_rdev, "st_dev (%d) and st_rdev (%d) differ\n", buf.st_dev, buf.st_rdev);
+ ok(buf.st_nlink == 1, "st_nlink is %d, expected 1\n", buf.st_nlink);
+ ok(buf.st_size == 0, "st_size is %d, expected 0\n", buf.st_size);
+
close(fd);
remove("stat.tst");
}
@@ -929,19 +1054,16 @@ static void test_stat(void)
/* Tests for a char device */
if (_dup2(0, 10) == 0)
{
- if (fstat(10, &buf) == 0)
+ ok(fstat(10, &buf) == 0, "fstat(stdin) failed: errno=%d\n", errno);
+ if ((buf.st_mode & _S_IFMT) == _S_IFCHR)
{
- if (buf.st_mode == _S_IFCHR)
- {
- ok(buf.st_dev == 10, "st_dev is %d, expected 10\n", buf.st_dev);
- ok(buf.st_rdev == 10, "st_rdev is %d, expected 10\n", buf.st_rdev);
- ok(buf.st_nlink == 1, "st_nlink is %d, expected 1\n", buf.st_nlink);
- }
- else
- skip("stdin is not a char device?\n");
+ ok(buf.st_mode == _S_IFCHR, "bad st_mode=%06o\n", buf.st_mode);
+ ok(buf.st_dev == 10, "st_dev is %d, expected 10\n", buf.st_dev);
+ ok(buf.st_rdev == 10, "st_rdev is %d, expected 10\n", buf.st_rdev);
+ ok(buf.st_nlink == 1, "st_nlink is %d, expected 1\n", buf.st_nlink);
}
else
- skip("fstat failed with errno %d\n", errno);
+ skip("stdin is not a char device? st_mode=%06o\n", buf.st_mode);
close(10);
}
else
@@ -950,22 +1072,11 @@ static void test_stat(void)
/* Tests for pipes */
if (_pipe(pipes, 1024, O_BINARY) == 0)
{
- if (fstat(pipes[0], &buf) == 0)
- {
- if (buf.st_mode == _S_IFIFO)
- {
- ok(buf.st_dev == pipes[0], "st_dev is %d, expected %d\n",
- buf.st_dev, pipes[0]);
- ok(buf.st_rdev == pipes[0], "st_rdev is %d, expected %d\n",
- buf.st_rdev, pipes[0]);
- ok(buf.st_nlink == 1, "st_nlink is %d, expected 1\n",
- buf.st_nlink);
- }
- else
- skip("pipe() didn't make a pipe?\n");
- }
- else
- skip("fstat failed with errno %d\n", errno);
+ ok(fstat(pipes[0], &buf) == 0, "fstat(pipe) failed: errno=%d\n", errno);
+ ok(buf.st_mode == _S_IFIFO, "bad st_mode=%06o\n", buf.st_mode);
+ ok(buf.st_dev == pipes[0], "st_dev is %d, expected %d\n", buf.st_dev, pipes[0]);
+ ok(buf.st_rdev == pipes[0], "st_rdev is %d, expected %d\n", buf.st_rdev, pipes[0]);
+ ok(buf.st_nlink == 1, "st_nlink is %d, expected 1\n", buf.st_nlink);
close(pipes[0]);
close(pipes[1]);
}
@@ -997,7 +1108,7 @@ static void test_pipes_child(int argc, char** args)
for (i=0; i 0)
buf[r]='\0';
ok(strcmp(buf, pipe_string) == 0, "expected to read '%s', got '%s'\n", pipe_string, buf);
@@ -1070,7 +1181,7 @@ static void test_pipes(const char* selfname)
for (i=0; i 0)
buf[r]='\0';
ok(strcmp(buf, expected) == 0, "got '%s' expected '%s'\n", buf, expected);
@@ -1125,10 +1236,12 @@ START_TEST(file)
test_unlink();
/* testing stream I/O */
+ test_filbuf();
test_fdopen();
test_fopen_fclose_fcloseall();
test_fileops();
test_asciimode();
+ test_asciimode2();
test_readmode(FALSE); /* binary mode */
test_readmode(TRUE); /* ascii mode */
test_fgetc();
diff --git a/rostests/winetests/msvcrt/headers.c b/rostests/winetests/msvcrt/headers.c
index d909ac7bf43..7133e1ec05d 100644
--- a/rostests/winetests/msvcrt/headers.c
+++ b/rostests/winetests/msvcrt/headers.c
@@ -32,7 +32,7 @@
#include "stdio.h"
#include "wchar.h"
#include "ctype.h"
-//#include "crtdbg.h"
+#include "crtdbg.h"
#include "share.h"
#include "search.h"
#include "wctype.h"
@@ -88,6 +88,7 @@ static void test_types(void)
CHECK_TYPE(_off_t);
CHECK_TYPE(clock_t);
CHECK_TYPE(time_t);
+ CHECK_TYPE(__time32_t);
CHECK_TYPE(__time64_t);
CHECK_TYPE(fpos_t);
CHECK_SIZE(FILE);
@@ -462,6 +463,17 @@ static void test_defines(void)
CHECK_DEF(SIGBREAK);
CHECK_DEF(SIGABRT);
CHECK_DEF(NSIG);
+ CHECK_DEF(_FPE_INVALID);
+ CHECK_DEF(_FPE_DENORMAL);
+ CHECK_DEF(_FPE_ZERODIVIDE);
+ CHECK_DEF(_FPE_OVERFLOW);
+ CHECK_DEF(_FPE_UNDERFLOW);
+ CHECK_DEF(_FPE_INEXACT);
+ CHECK_DEF(_FPE_UNEMULATED);
+ CHECK_DEF(_FPE_SQRTNEG);
+ CHECK_DEF(_FPE_STACKOVERFLOW);
+ CHECK_DEF(_FPE_STACKUNDERFLOW);
+ CHECK_DEF(_FPE_EXPLICITGEN);
#ifdef __i386__
CHECK_DEF(_EM_INVALID);
CHECK_DEF(_EM_DENORMAL);
diff --git a/rostests/winetests/msvcrt/heap.c b/rostests/winetests/msvcrt/heap.c
index ae98e3b8975..6e6b54446a6 100644
--- a/rostests/winetests/msvcrt/heap.c
+++ b/rostests/winetests/msvcrt/heap.c
@@ -29,7 +29,7 @@ static void * (*p_aligned_offset_malloc)(size_t,size_t,size_t) = NULL;
static void * (*p_aligned_realloc)(void*,size_t,size_t) = NULL;
static void * (*p_aligned_offset_realloc)(void*,size_t,size_t,size_t) = NULL;
-static void test_aligned_malloc(size_t size, size_t alignment)
+static void test_aligned_malloc(unsigned int size, unsigned int alignment)
{
void *mem;
@@ -48,8 +48,7 @@ static void test_aligned_malloc(size_t size, size_t alignment)
{
void *saved;
saved = *(void **)((DWORD_PTR)((char *)mem - sizeof(void *)) & ~(sizeof(void *) - 1));
- trace("_aligned_malloc(%3d, %3d) returns %p, saved = %p, diff = %d\n",
- size, alignment, mem, saved, (char *)saved - (char *)mem);
+ trace("_aligned_malloc(%3d, %3d) returns %p, saved = %p\n", size, alignment, mem, saved );
}
p_aligned_free(mem);
}
@@ -57,7 +56,7 @@ static void test_aligned_malloc(size_t size, size_t alignment)
ok(errno == EINVAL, "_aligned_malloc(%d, %d) errno: %d != %d\n", size, alignment, errno, EINVAL);
}
-static void test_aligned_offset_malloc(size_t size, size_t alignment, size_t offset)
+static void test_aligned_offset_malloc(unsigned int size, unsigned int alignment, unsigned int offset)
{
void *mem;
@@ -79,8 +78,8 @@ static void test_aligned_offset_malloc(size_t size, size_t alignment, size_t off
{
void *saved;
saved = *(void **)((DWORD_PTR)((char *)mem - sizeof(void *)) & ~(sizeof(void *) - 1));
- trace("_aligned_offset_malloc(%3d, %3d, %3d) returns %p, saved = %p, diff = %d\n",
- size, alignment, offset, mem, saved, (char *)saved - (char *)mem);
+ trace("_aligned_offset_malloc(%3d, %3d, %3d) returns %p, saved = %p\n",
+ size, alignment, offset, mem, saved);
}
p_aligned_free(mem);
}
@@ -88,7 +87,7 @@ static void test_aligned_offset_malloc(size_t size, size_t alignment, size_t off
ok(errno == EINVAL, "_aligned_offset_malloc(%d, %d, %d) errno: %d != %d\n", size, alignment, offset, errno, EINVAL);
}
-static void test_aligned_realloc(size_t size1, size_t size2, size_t alignment)
+static void test_aligned_realloc(unsigned int size1, unsigned int size2, unsigned int alignment)
{
void *mem, *mem1, *mem2;
@@ -116,8 +115,7 @@ static void test_aligned_realloc(size_t size1, size_t size2, size_t alignment)
{
void *saved;
saved = *(void **)((DWORD_PTR)((char *)mem - sizeof(void *)) & ~(sizeof(void *) - 1));
- trace("_aligned_malloc(%3d, %3d) returns %p, saved = %p, diff = %d\n",
- size1, alignment, mem, saved, (char *)saved - (char *)mem);
+ trace("_aligned_malloc(%3d, %3d) returns %p, saved = %p\n", size1, alignment, mem, saved);
}
mem2 = p_aligned_realloc(mem, size2, alignment);
@@ -132,8 +130,8 @@ static void test_aligned_realloc(size_t size1, size_t size2, size_t alignment)
{
void *saved;
saved = *(void **)((DWORD_PTR)((char *)mem2 - sizeof(void *)) & ~(sizeof(void *) - 1));
- trace("_aligned_realloc(%p, %3d, %3d) returns %p, saved = %p, diff = %d\n",
- mem, size2, alignment, mem2, saved, (char *)saved - (char *)mem2);
+ trace("_aligned_realloc(%p, %3d, %3d) returns %p, saved = %p\n",
+ mem, size2, alignment, mem2, saved);
}
if (mem1)
{
@@ -160,7 +158,8 @@ static void test_aligned_realloc(size_t size1, size_t size2, size_t alignment)
ok(errno == EINVAL, "_aligned_malloc(%d, %d) errno: %d != %d\n", size1, alignment, errno, EINVAL);
}
-static void test_aligned_offset_realloc(size_t size1, size_t size2, size_t alignment, size_t offset)
+static void test_aligned_offset_realloc(unsigned int size1, unsigned int size2,
+ unsigned int alignment, unsigned int offset)
{
void *mem, *mem1, *mem2;
@@ -188,8 +187,8 @@ static void test_aligned_offset_realloc(size_t size1, size_t size2, size_t align
{
void *saved;
saved = *(void **)((DWORD_PTR)((char *)mem - sizeof(void *)) & ~(sizeof(void *) - 1));
- trace("_aligned_offset_malloc(%3d, %3d, %3d) returns %p, saved = %p, diff = %d\n",
- size1, alignment, offset, mem, saved, (char *)saved - (char *)mem);
+ trace("_aligned_offset_malloc(%3d, %3d, %3d) returns %p, saved = %p\n",
+ size1, alignment, offset, mem, saved);
}
mem2 = p_aligned_offset_realloc(mem, size2, alignment, offset);
@@ -204,8 +203,8 @@ static void test_aligned_offset_realloc(size_t size1, size_t size2, size_t align
{
void *saved;
saved = *(void **)((DWORD_PTR)((char *)mem2 - sizeof(void *)) & ~(sizeof(void *) - 1));
- trace("_aligned_offset_realloc(%p, %3d, %3d, %3d) returns %p, saved = %p, diff = %d\n",
- mem, size2, alignment, offset, mem2, saved, (char *)saved - (char *)mem2);
+ trace("_aligned_offset_realloc(%p, %3d, %3d, %3d) returns %p, saved = %p\n",
+ mem, size2, alignment, offset, mem2, saved);
}
if (mem1)
{
diff --git a/rostests/winetests/msvcrt/printf.c b/rostests/winetests/msvcrt/printf.c
index 1603893a811..d25734e195e 100644
--- a/rostests/winetests/msvcrt/printf.c
+++ b/rostests/winetests/msvcrt/printf.c
@@ -27,6 +27,10 @@
#include
+#include "windef.h"
+#include "winbase.h"
+#include "winnls.h"
+
#include "wine/test.h"
static void test_sprintf( void )
@@ -277,20 +281,50 @@ static void test_sprintf( void )
ok(!strcmp(buffer,"1 "),"Character zero-padded and/or not left-adjusted \"%s\"\n",buffer);
ok( r==4, "return count wrong\n");
- format = "%p";
- r = sprintf(buffer,format,(void *)57);
- ok(!strcmp(buffer,"00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
- ok( r==8, "return count wrong\n");
+ if (sizeof(void *) == 8)
+ {
+ format = "%p";
+ r = sprintf(buffer,format,(void *)57);
+ ok(!strcmp(buffer,"0000000000000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
+ ok( r==16, "return count wrong\n");
- format = "%#012p";
- r = sprintf(buffer,format,(void *)57);
- ok(!strcmp(buffer," 0X00000039"),"Pointer formatted incorrectly\n");
- ok( r==12, "return count wrong\n");
+ format = "%#020p";
+ r = sprintf(buffer,format,(void *)57);
+ ok(!strcmp(buffer," 0X0000000000000039"),"Pointer formatted incorrectly\n");
+ ok( r==20, "return count wrong\n");
- format = "%Fp";
- r = sprintf(buffer,format,(void *)57);
- ok(!strcmp(buffer,"00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
- ok( r==8, "return count wrong\n");
+ format = "%Fp";
+ r = sprintf(buffer,format,(void *)57);
+ ok(!strcmp(buffer,"0000000000000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
+ ok( r==16, "return count wrong\n");
+
+ format = "%#-020p";
+ r = sprintf(buffer,format,(void *)57);
+ ok(!strcmp(buffer,"0X0000000000000039 "),"Pointer formatted incorrectly\n");
+ ok( r==20, "return count wrong\n");
+ }
+ else
+ {
+ format = "%p";
+ r = sprintf(buffer,format,(void *)57);
+ ok(!strcmp(buffer,"00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
+ ok( r==8, "return count wrong\n");
+
+ format = "%#012p";
+ r = sprintf(buffer,format,(void *)57);
+ ok(!strcmp(buffer," 0X00000039"),"Pointer formatted incorrectly\n");
+ ok( r==12, "return count wrong\n");
+
+ format = "%Fp";
+ r = sprintf(buffer,format,(void *)57);
+ ok(!strcmp(buffer,"00000039"),"Pointer formatted incorrectly \"%s\"\n",buffer);
+ ok( r==8, "return count wrong\n");
+
+ format = "%#-012p";
+ r = sprintf(buffer,format,(void *)57);
+ ok(!strcmp(buffer,"0X00000039 "),"Pointer formatted incorrectly\n");
+ ok( r==12, "return count wrong\n");
+ }
format = "%04s";
r = sprintf(buffer,format,"foo");
@@ -312,11 +346,6 @@ static void test_sprintf( void )
ok(!strcmp(buffer,"foo "),"Negative field width ignored \"%s\"\n",buffer);
ok( r==5, "return count wrong\n");
- format = "%#-012p";
- r = sprintf(buffer,format,(void *)57);
- ok(!strcmp(buffer,"0X00000039 "),"Pointer formatted incorrectly\n");
- ok( r==12, "return count wrong\n");
-
format = "hello";
r = sprintf(buffer, format);
ok(!strcmp(buffer,"hello"), "failed\n");
@@ -455,8 +484,16 @@ static void test_sprintf( void )
format = "%p";
r = sprintf(buffer, format,0);
- ok(!strcmp(buffer,"00000000"), "failed\n");
- ok( r==8, "return count wrong\n");
+ if (sizeof(void *) == 8)
+ {
+ ok(!strcmp(buffer,"0000000000000000"), "failed\n");
+ ok( r==16, "return count wrong\n");
+ }
+ else
+ {
+ ok(!strcmp(buffer,"00000000"), "failed\n");
+ ok( r==8, "return count wrong\n");
+ }
format = "%s";
r = sprintf(buffer, format,0);
@@ -661,10 +698,39 @@ static void test_fcvt(void)
ok( 0 == sign, "sign wrong\n");
}
+static int _vsnwprintf_wrapper(wchar_t *str, size_t len, const wchar_t *format, ...)
+{
+ int ret;
+ __ms_va_list valist;
+ __ms_va_start(valist, format);
+ ret = _vsnwprintf(str, len, format, valist);
+ __ms_va_end(valist);
+ return ret;
+}
+
+static void test_vsnwprintf(void)
+{
+ const wchar_t format[] = {'%','w','s','%','w','s','%','w','s',0};
+ const wchar_t one[] = {'o','n','e',0};
+ const wchar_t two[] = {'t','w','o',0};
+ const wchar_t three[] = {'t','h','r','e','e',0};
+
+ int ret;
+ wchar_t str[32];
+ char buf[32];
+
+ ret = _vsnwprintf_wrapper( str, sizeof(str)/sizeof(str[0]), format, one, two, three );
+
+ ok( ret == 11, "got %d expected 11\n", ret );
+ WideCharToMultiByte( CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL );
+ ok( !strcmp(buf, "onetwothree"), "got %s expected 'onetwothree'\n", buf );
+}
+
START_TEST(printf)
{
test_sprintf();
test_swprintf();
test_snprintf();
test_fcvt();
+ test_vsnwprintf();
}
diff --git a/rostests/winetests/msvcrt/scanf.c b/rostests/winetests/msvcrt/scanf.c
index b152eacfbfd..0ec89ff5193 100644
--- a/rostests/winetests/msvcrt/scanf.c
+++ b/rostests/winetests/msvcrt/scanf.c
@@ -51,10 +51,11 @@ static void test_sscanf( void )
ok( ptr == (void *)0x46F172,"sscanf reads %p instead of %x\n", ptr, 0x46F172 );
ok( sscanf("0x46F173", "%p", &ptr) == 1, "sscanf failed\n" );
- ok( ptr == (void *)0,"sscanf reads %p instead of %x\n", ptr, 0 );
+ ok( ptr == NULL,"sscanf reads %p instead of %x\n", ptr, 0 );
ok( sscanf("-46F174", "%p", &ptr) == 1, "sscanf failed\n" );
- ok( ptr == (void *)0xFFB90E8C,"sscanf reads %p instead of %x\n", ptr, 0xFFB90E8C );
+ ok( ptr == (void *)(ULONG_PTR)-0x46f174,"sscanf reads %p instead of %p\n",
+ ptr, (void *)(ULONG_PTR)-0x46f174 );
ok( sscanf("+46F175", "%p", &ptr) == 1, "sscanf failed\n" );
ok( ptr == (void *)0x46F175,"sscanf reads %p instead of %x\n", ptr, 0x46F175 );
diff --git a/rostests/winetests/msvcrt/string.c b/rostests/winetests/msvcrt/string.c
index a36d3b0ce7f..45c40d5dc4b 100644
--- a/rostests/winetests/msvcrt/string.c
+++ b/rostests/winetests/msvcrt/string.c
@@ -51,6 +51,8 @@ static int (*pstrcpy_s)(char *dst, size_t len, const char *src);
static int (*pstrcat_s)(char *dst, size_t len, const char *src);
static int (*p_mbsnbcpy_s)(unsigned char * dst, size_t size, const unsigned char * src, size_t count);
static int (*p_wcscpy_s)(wchar_t *wcDest, size_t size, const wchar_t *wcSrc);
+static int *p__mb_cur_max;
+static unsigned char *p_mbctype;
#define SETNOFAIL(x,y) x = (void*)GetProcAddress(hMsvcrt,y)
#define SET(x,y) SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y)
@@ -62,13 +64,13 @@ static void test_swab( void ) {
char expected1[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ@#";
char expected2[] = "ABCDEFGHIJKLMNOPQRSTUVWX$";
char expected3[] = "$";
-
+
char from[30];
char to[30];
-
+
int testsize;
-
- /* Test 1 - normal even case */
+
+ /* Test 1 - normal even case */
memset(to,'$', sizeof(to));
memset(from,'@', sizeof(from));
testsize = 26;
@@ -76,7 +78,7 @@ static void test_swab( void ) {
_swab( from, to, testsize );
ok(memcmp(to,expected1,testsize) == 0, "Testing even size %d returned '%*.*s'\n", testsize, testsize, testsize, to);
- /* Test 2 - uneven case */
+ /* Test 2 - uneven case */
memset(to,'$', sizeof(to));
memset(from,'@', sizeof(from));
testsize = 25;
@@ -84,7 +86,7 @@ static void test_swab( void ) {
_swab( from, to, testsize );
ok(memcmp(to,expected2,testsize) == 0, "Testing odd size %d returned '%*.*s'\n", testsize, testsize, testsize, to);
- /* Test 3 - from = to */
+ /* Test 3 - from = to */
memset(to,'$', sizeof(to));
memset(from,'@', sizeof(from));
testsize = 26;
@@ -92,7 +94,7 @@ static void test_swab( void ) {
_swab( to, to, testsize );
ok(memcmp(to,expected1,testsize) == 0, "Testing overlapped size %d returned '%*.*s'\n", testsize, testsize, testsize, to);
- /* Test 4 - 1 bytes */
+ /* Test 4 - 1 bytes */
memset(to,'$', sizeof(to));
memset(from,'@', sizeof(from));
testsize = 1;
@@ -111,14 +113,14 @@ static void test_codepage(int cp)
ok(_setmbcp(cp) == 0, "Couldn't set mbcp\n");
- prev = _mbctype[0];
+ prev = p_mbctype[0];
printf("static int result_cp_%d_mbctype[] = { ", cp);
for (i = 1; i < 257; i++)
{
- if (_mbctype[i] != prev)
+ if (p_mbctype[i] != prev)
{
printf("0x%x,%d, ", prev, count);
- prev = _mbctype[i];
+ prev = p_mbctype[i];
count = 1;
}
else
@@ -127,7 +129,7 @@ static void test_codepage(int cp)
printf("0x%x,%d };\n", prev, count);
}
-#define test_codepage_todo(cp, todo) test_codepage(cp)
+#else
/* RLE-encoded mbctype tables for given codepages */
static int result_cp_932_mbctype[] = { 0x0,65, 0x8,1, 0x18,26, 0x8,6, 0x28,26, 0x8,4,
@@ -139,10 +141,7 @@ static int result_cp_949_mbctype[] = { 0x0,66, 0x18,26, 0x8,6, 0x28,26, 0x8,6, 0
static int result_cp_950_mbctype[] = { 0x0,65, 0x8,1, 0x18,26, 0x8,6, 0x28,26, 0x8,4,
0x0,2, 0x4,32, 0xc,94, 0,1 };
-static int todo_none[] = { -2 };
-static int todo_cp_932[] = { 254, -2 };
-
-void test_cp_table(int cp, int *result, int *todo)
+static void test_cp_table(int cp, int *result)
{
int i;
int count = 0;
@@ -156,26 +155,18 @@ void test_cp_table(int cp, int *result, int *todo)
count = result[1];
result += 2;
}
- if (i == *todo + 1)
- {
- todo_wine ok(_mbctype[i] == curr, "CP%d: Mismatch in ctype for character %d - %d instead of %d\n", cp, i-1, _mbctype[i], curr);
- todo++;
- }
- else
- ok(_mbctype[i] == curr, "CP%d: Mismatch in ctype for character %d - %d instead of %d\n", cp, i-1, _mbctype[i], curr);
+ ok(p_mbctype[i] == curr, "CP%d: Mismatch in ctype for character %d - %d instead of %d\n", cp, i-1, p_mbctype[i], curr);
count--;
}
}
-#define test_codepage(num) test_cp_table(num, result_cp_##num##_mbctype, todo_none);
-#define test_codepage_todo(num, todo) test_cp_table(num, result_cp_##num##_mbctype, todo);
+#define test_codepage(num) test_cp_table(num, result_cp_##num##_mbctype);
#endif
-
static void test_mbcp(void)
{
- int mb_orig_max = __mb_cur_max;
+ int mb_orig_max = *p__mb_cur_max;
int curr_mbcp = _getmbcp();
unsigned char *mbstring = (unsigned char *)"\xb0\xb1\xb2 \xb3\xb4 \xb5"; /* incorrect string */
unsigned char *mbstring2 = (unsigned char *)"\xb0\xb1\xb2\xb3Q\xb4\xb5"; /* correct string */
@@ -189,26 +180,26 @@ static void test_mbcp(void)
* between versions of Windows. Also Windows 9x seems to ignore the codepage and always uses
* CP1252 (or the ACP?) so we test only a few ASCII characters */
_setmbcp(1252);
- expect_eq(_mbctype[10], 0, char, "%x");
- expect_eq(_mbctype[50], 0, char, "%x");
- expect_eq(_mbctype[66], _SBUP, char, "%x");
- expect_eq(_mbctype[100], _SBLOW, char, "%x");
- expect_eq(_mbctype[128], 0, char, "%x");
+ expect_eq(p_mbctype[10], 0, char, "%x");
+ expect_eq(p_mbctype[50], 0, char, "%x");
+ expect_eq(p_mbctype[66], _SBUP, char, "%x");
+ expect_eq(p_mbctype[100], _SBLOW, char, "%x");
+ expect_eq(p_mbctype[128], 0, char, "%x");
_setmbcp(1250);
- expect_eq(_mbctype[10], 0, char, "%x");
- expect_eq(_mbctype[50], 0, char, "%x");
- expect_eq(_mbctype[66], _SBUP, char, "%x");
- expect_eq(_mbctype[100], _SBLOW, char, "%x");
- expect_eq(_mbctype[128], 0, char, "%x");
+ expect_eq(p_mbctype[10], 0, char, "%x");
+ expect_eq(p_mbctype[50], 0, char, "%x");
+ expect_eq(p_mbctype[66], _SBUP, char, "%x");
+ expect_eq(p_mbctype[100], _SBLOW, char, "%x");
+ expect_eq(p_mbctype[128], 0, char, "%x");
/* double byte code pages */
- //test_codepage_todo(932, todo_cp_932);
- //test_codepage(936);
- //test_codepage(949);
- //test_codepage(950);
+ test_codepage(932);
+ test_codepage(936);
+ test_codepage(949);
+ test_codepage(950);
_setmbcp(936);
- ok(__mb_cur_max == mb_orig_max, "__mb_cur_max shouldn't be updated (is %d != %d)\n", __mb_cur_max, mb_orig_max);
+ ok(*p__mb_cur_max == mb_orig_max, "__mb_cur_max shouldn't be updated (is %d != %d)\n", *p__mb_cur_max, mb_orig_max);
ok(_ismbblead('\354'), "\354 should be a lead byte\n");
ok(_ismbblead(' ') == FALSE, "' ' should not be a lead byte\n");
ok(_ismbblead(0x1234b0), "0x1234b0 should not be a lead byte\n");
@@ -345,7 +336,7 @@ static void test_mbcp(void)
* we hope the current locale to be SBCS because setlocale(LC_ALL, ".1252") seems not to work yet
* (as of Wine 0.9.43)
*/
- if (__mb_cur_max == 1)
+ if (*p__mb_cur_max == 1)
{
expect_eq(mblen((char *)mbstring, 3), 1, int, "%x");
expect_eq(_mbstrlen((char *)mbstring2), 7, int, "%d");
@@ -606,6 +597,28 @@ static void test_wcscpy_s(void)
ok(szDestShort[0] == 0, "szDestShort[0] not 0\n");
}
+static void test_mbcjisjms(void)
+{
+ /* List of value-pairs to test. The test assumes the last pair to be {0, ..} */
+ unsigned int jisjms[][2] = { {0x2020, 0}, {0x2021, 0}, {0x2120, 0}, {0x2121, 0x8140},
+ {0x7f7f, 0}, {0x7f7e, 0}, {0x7e7f, 0}, {0x7e7e, 0xeffc},
+ {0x2121FFFF, 0}, {0x2223, 0x81a1}, {0x237e, 0x829e}, {0, 0}};
+ unsigned int ret, exp, i;
+
+ i = 0;
+ do
+ {
+ ret = _mbcjistojms(jisjms[i][0]);
+
+ if(_getmbcp() == 932) /* Japanese codepage? */
+ exp = jisjms[i][1];
+ else
+ exp = jisjms[i][0]; /* If not, no conversion */
+
+ ok(ret == exp, "Expected 0x%x, got 0x%x\n", exp, ret);
+ } while(jisjms[i++][0] != 0);
+}
+
START_TEST(string)
{
char mem[100];
@@ -618,6 +631,8 @@ START_TEST(string)
ok(hMsvcrt != 0, "GetModuleHandleA failed\n");
SET(pmemcpy,"memcpy");
SET(pmemcmp,"memcmp");
+ SET(p_mbctype,"_mbctype");
+ SET(p__mb_cur_max,"__mb_cur_max");
pstrcpy_s = (void *)GetProcAddress( hMsvcrt,"strcpy_s" );
pstrcat_s = (void *)GetProcAddress( hMsvcrt,"strcat_s" );
p_mbsnbcpy_s = (void *)GetProcAddress( hMsvcrt,"_mbsnbcpy_s" );
@@ -644,6 +659,7 @@ START_TEST(string)
test_strcpy_s();
test_strcat_s();
test__mbsnbcpy_s();
+ test_mbcjisjms();
test_wcscpy_s();
}
diff --git a/rostests/winetests/msxml3/domdoc.c b/rostests/winetests/msxml3/domdoc.c
index 584eab33e22..c70e6edb3e2 100644
--- a/rostests/winetests/msxml3/domdoc.c
+++ b/rostests/winetests/msxml3/domdoc.c
@@ -2404,6 +2404,7 @@ static void test_cloneNode(void )
long nAttrCnt = 0, nAttrCnt1 = 0;
IXMLDOMNode *node;
IXMLDOMNode *node_clone;
+ IXMLDOMNode *node_first;
HRESULT r;
BSTR str;
static const WCHAR szSearch[] = { 'l', 'c', '/', 'p', 'r', 0 };
@@ -2448,6 +2449,20 @@ static void test_cloneNode(void )
return;
}
+ r = IXMLDOMNode_get_firstChild(node_clone, &node_first);
+ ok( r == S_OK, "ret %08x\n", r );
+ if(r == S_OK)
+ {
+ IXMLDOMDocument *doc2;
+
+ r = IXMLDOMNode_get_ownerDocument(node_clone, &doc2);
+ ok( r == S_OK, "ret %08x\n", r );
+ if(r == S_OK)
+ IXMLDOMDocument_Release(doc2);
+
+ IXMLDOMNode_Release(node_first);
+ }
+
r = IXMLDOMNode_get_childNodes(node, &pList);
ok( r == S_OK, "ret %08x\n", r );
if (pList)
@@ -2496,6 +2511,20 @@ static void test_cloneNode(void )
return;
}
+ r = IXMLDOMNode_get_firstChild(node_clone, &node_first);
+ ok( r == S_FALSE, "ret %08x\n", r );
+ if(r == S_OK)
+ {
+ IXMLDOMDocument *doc2;
+
+ r = IXMLDOMNode_get_ownerDocument(node_clone, &doc2);
+ ok( r == S_OK, "ret %08x\n", r );
+ if(r == S_OK)
+ IXMLDOMDocument_Release(doc2);
+
+ IXMLDOMNode_Release(node_first);
+ }
+
r = IXMLDOMNode_get_childNodes(node_clone, &pList);
ok( r == S_OK, "ret %08x\n", r );
if (pList)
diff --git a/rostests/winetests/netapi32/access.c b/rostests/winetests/netapi32/access.c
index dfa68efd883..8c39a187eab 100644
--- a/rostests/winetests/netapi32/access.c
+++ b/rostests/winetests/netapi32/access.c
@@ -74,7 +74,7 @@ static int init_access_tests(void)
rc=GetUserNameW(user_name, &dwSize);
if (rc==FALSE && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("GetUserNameW is not available.\n");
+ win_skip("GetUserNameW is not available.\n");
return 0;
}
ok(rc, "User Name Retrieved\n");
@@ -251,6 +251,11 @@ static void run_userhandling_tests(void)
ret = pNetUserDel(NULL, sTooLongName);
ok(ret == NERR_Success, "Deleting the user failed : %d\n", ret);
}
+ else if (ret == ERROR_ACCESS_DENIED)
+ {
+ skip("not enough permissions to add a user\n");
+ return;
+ }
else
ok(ret == NERR_BadUsername ||
broken(ret == NERR_PasswordTooShort), /* NT4 */
@@ -260,7 +265,8 @@ static void run_userhandling_tests(void)
usri.usri1_password = sTooLongPassword;
ret = pNetUserAdd(NULL, 1, (LPBYTE)&usri, NULL);
- ok(ret == NERR_PasswordTooShort, "Adding user with too long password returned 0x%08x\n", ret);
+ ok(ret == NERR_PasswordTooShort || ret == ERROR_ACCESS_DENIED /* Win2003 */,
+ "Adding user with too long password returned 0x%08x\n", ret);
usri.usri1_name = sTooLongName;
usri.usri1_password = sTooLongPassword;
@@ -327,7 +333,7 @@ START_TEST(access)
* if one is not available, none are.
*/
if (!pNetApiBufferFree) {
- skip("Needed functions are not available\n");
+ win_skip("Needed functions are not available\n");
FreeLibrary(hnetapi32);
return;
}
diff --git a/rostests/winetests/netapi32/apibuf.c b/rostests/winetests/netapi32/apibuf.c
index fa29fc441d5..2438ecd7e44 100644
--- a/rostests/winetests/netapi32/apibuf.c
+++ b/rostests/winetests/netapi32/apibuf.c
@@ -98,7 +98,7 @@ START_TEST(apibuf)
if (pNetApiBufferAllocate && pNetApiBufferFree && pNetApiBufferReallocate && pNetApiBufferSize)
run_apibuf_tests();
else
- skip("Needed functions are not available\n");
+ win_skip("Needed functions are not available\n");
FreeLibrary(hnetapi32);
}
diff --git a/rostests/winetests/netapi32/ds.c b/rostests/winetests/netapi32/ds.c
index 277a589b8ca..be9597d79ef 100644
--- a/rostests/winetests/netapi32/ds.c
+++ b/rostests/winetests/netapi32/ds.c
@@ -87,7 +87,7 @@ START_TEST(ds)
test_get();
}
else
- skip("DsRoleGetPrimaryDomainInformation is not available\n");
+ win_skip("DsRoleGetPrimaryDomainInformation is not available\n");
FreeLibrary(hnetapi32);
}
diff --git a/rostests/winetests/netapi32/wksta.c b/rostests/winetests/netapi32/wksta.c
index b4994f8a2d3..e0c16d35ba9 100644
--- a/rostests/winetests/netapi32/wksta.c
+++ b/rostests/winetests/netapi32/wksta.c
@@ -51,7 +51,7 @@ static int init_wksta_tests(void)
dwSize = sizeof(user_name)/sizeof(user_name[0]);
rc=GetUserNameW(user_name, &dwSize);
if (rc==FALSE && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) {
- skip("GetUserNameW is not implemented\n");
+ win_skip("GetUserNameW is not implemented\n");
return 0;
}
ok(rc, "User Name Retrieved\n");
@@ -192,7 +192,7 @@ START_TEST(wksta)
* if one is not available, none are.
*/
if (!pNetApiBufferFree) {
- skip("Needed functions are not available\n");
+ win_skip("Needed functions are not available\n");
FreeLibrary(hnetapi32);
return;
}
diff --git a/rostests/winetests/psapi/psapi_main.c b/rostests/winetests/psapi/psapi_main.c
index 1978fd4d787..4cee7c62405 100644
--- a/rostests/winetests/psapi/psapi_main.c
+++ b/rostests/winetests/psapi/psapi_main.c
@@ -176,7 +176,7 @@ static void test_GetProcessImageFileName(void)
if(!pGetProcessImageFileNameA(hpQI, szImgPath, sizeof(szImgPath)))
{
if(GetLastError() == ERROR_INVALID_FUNCTION)
- trace("GetProcessImageFileName not implemented\n");
+ win_skip("GetProcessImageFileName not implemented\n");
else if(GetLastError() == 0xdeadbeef)
ok(0, "failed without error code\n");
else
diff --git a/rostests/winetests/riched20/editor.c b/rostests/winetests/riched20/editor.c
index ff5d598ef4b..f8da3faf109 100644
--- a/rostests/winetests/riched20/editor.c
+++ b/rostests/winetests/riched20/editor.c
@@ -1471,7 +1471,7 @@ static void test_EM_SETOPTIONS(void)
DestroyWindow(hwndRichEdit);
hwndRichEdit = CreateWindow(RICHEDIT_CLASS, NULL,
- WS_POPUP|WS_HSCROLL|WS_VSCROLL,
+ WS_POPUP|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE,
0, 0, 200, 60, NULL, NULL,
hmoduleRichEdit, NULL);
ok(hwndRichEdit != NULL, "class: %s, error: %d\n",
@@ -3225,7 +3225,7 @@ static DWORD CALLBACK test_WM_SETTEXT_esCallback(DWORD_PTR dwCookie,
return 0;
}
-static void test_WM_SETTEXT()
+static void test_WM_SETTEXT(void)
{
HWND hwndRichEdit = new_richedit(NULL);
const char * TestItem1 = "TestSomeText";
@@ -3345,7 +3345,9 @@ static void test_EM_STREAMOUT(void)
static void test_EM_SETTEXTEX(void)
{
- HWND hwndRichEdit = new_richedit(NULL);
+ HWND hwndRichEdit, parent;
+ SCROLLINFO si;
+ int sel_start, sel_end;
SETTEXTEX setText;
GETTEXTEX getText;
WCHAR TestItem1[] = {'T', 'e', 's', 't',
@@ -3392,6 +3394,76 @@ static void test_EM_SETTEXTEX(void)
int result;
CHARRANGE cr;
EDITSTREAM es;
+ WNDCLASSA cls;
+
+ /* Test the scroll position with and without a parent window.
+ *
+ * For some reason the scroll position is 0 after EM_SETTEXTEX
+ * with the ST_SELECTION flag only when the control has a parent
+ * window, even though the selection is at the end. */
+ cls.style = 0;
+ cls.lpfnWndProc = DefWindowProcA;
+ cls.cbClsExtra = 0;
+ cls.cbWndExtra = 0;
+ cls.hInstance = GetModuleHandleA(0);
+ cls.hIcon = 0;
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
+ cls.hbrBackground = GetStockObject(WHITE_BRUSH);
+ cls.lpszMenuName = NULL;
+ cls.lpszClassName = "ParentTestClass";
+ if(!RegisterClassA(&cls)) assert(0);
+
+ parent = CreateWindow(cls.lpszClassName, NULL, WS_POPUP|WS_VISIBLE,
+ 0, 0, 200, 60, NULL, NULL, NULL, NULL);
+ ok (parent != 0, "Failed to create parent window\n");
+
+ hwndRichEdit = CreateWindowEx(0,
+ RICHEDIT_CLASS, NULL,
+ ES_MULTILINE|WS_VSCROLL|WS_VISIBLE|WS_CHILD,
+ 0, 0, 200, 60, parent, NULL,
+ hmoduleRichEdit, NULL);
+
+ setText.codepage = CP_ACP;
+ setText.flags = ST_SELECTION;
+ SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText,
+ (LPARAM)"{\\rtf 1\\par 2\\par 3\\par 4\\par 5\\par 6\\par 7\\par 8\\par 9\\par}");
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_ALL;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ todo_wine ok(si.nPos == 0, "Position is incorrectly at %d\n", si.nPos);
+ SendMessage(hwndRichEdit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
+ ok(sel_start == 18, "Selection start incorrectly at %d\n", sel_start);
+ ok(sel_end == 18, "Selection end incorrectly at %d\n", sel_end);
+
+ DestroyWindow(parent);
+
+ /* Test without a parent window */
+ hwndRichEdit = new_richedit(NULL);
+ setText.codepage = CP_ACP;
+ setText.flags = ST_SELECTION;
+ SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText,
+ (LPARAM)"{\\rtf 1\\par 2\\par 3\\par 4\\par 5\\par 6\\par 7\\par 8\\par 9\\par}");
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_ALL;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok(si.nPos != 0, "Position is incorrectly at %d\n", si.nPos);
+ SendMessage(hwndRichEdit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
+ ok(sel_start == 18, "Selection start incorrectly at %d\n", sel_start);
+ ok(sel_end == 18, "Selection end incorrectly at %d\n", sel_end);
+
+ /* The scroll position should also be 0 after EM_SETTEXTEX with ST_DEFAULT,
+ * but this time it is because the selection is at the beginning. */
+ setText.codepage = CP_ACP;
+ setText.flags = ST_DEFAULT;
+ SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText,
+ (LPARAM)"{\\rtf 1\\par 2\\par 3\\par 4\\par 5\\par 6\\par 7\\par 8\\par 9\\par}");
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_ALL;
+ GetScrollInfo(hwndRichEdit, SB_VERT, &si);
+ ok(si.nPos == 0, "Position is incorrectly at %d\n", si.nPos);
+ SendMessage(hwndRichEdit, EM_GETSEL, (WPARAM)&sel_start, (LPARAM)&sel_end);
+ ok(sel_start == 0, "Selection start incorrectly at %d\n", sel_start);
+ ok(sel_end == 0, "Selection end incorrectly at %d\n", sel_end);
setText.codepage = 1200; /* no constant for unicode */
getText.codepage = 1200; /* no constant for unicode */
@@ -3562,6 +3634,22 @@ static void test_EM_SETTEXTEX(void)
ok(lstrcmpW(buf, TestItem1) == 0,
"EM_GETTEXTEX results not what was set by EM_SETTEXTEX\n");
+ /* The following test demonstrates that EM_SETTEXTEX treats text as ASCII if it
+ * starts with ASCII characters "{\rtf" even when the codepage is unicode. */
+ setText.codepage = 1200; /* Lie about code page (actual ASCII) */
+ getText.codepage = CP_ACP;
+ getText.cb = MAX_BUF_LEN;
+ getText.flags = GT_DEFAULT;
+ getText.lpDefaultChar = NULL;
+ getText.lpUsedDefChar = NULL;
+
+ setText.flags = ST_SELECTION;
+ SendMessage(hwndRichEdit, EM_SETSEL, 0, -1);
+ result = SendMessage(hwndRichEdit, EM_SETTEXTEX, (WPARAM)&setText, (LPARAM) "{\\rtf not unicode}");
+ todo_wine ok(result == 11, "EM_SETTEXTEX incorrectly returned %d\n", result);
+ SendMessage(hwndRichEdit, EM_GETTEXTEX, (WPARAM)&getText, (LPARAM) bufACP);
+ ok(lstrcmpA(bufACP, "not unicode") == 0, "'%s' != 'not unicode'\n", bufACP);
+
/* The following test demonstrates that EM_SETTEXTEX supports RTF strings with a selection */
SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) "TestSomeText"); /* TestItem1 */
p = (char *)buf;
@@ -5325,7 +5413,7 @@ static void test_eventMask(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "EventMaskParentClass";
@@ -5415,7 +5503,7 @@ static void test_WM_NOTIFY(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "WM_NOTIFY_ParentClass";
@@ -5851,12 +5939,12 @@ static void test_word_wrap(void)
/* Test the effect of EM_SETTARGETDEVICE on word wrap. */
res = SendMessage(hwnd, EM_SETTARGETDEVICE, 0, 1);
- todo_wine ok(res, "EM_SETTARGETDEVICE failed (returned %d).\n", res);
+ ok(res, "EM_SETTARGETDEVICE failed (returned %d).\n", res);
pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
ok(!pos, "pos=%d indicating word wrap when none is expected.\n", pos);
res = SendMessage(hwnd, EM_SETTARGETDEVICE, 0, 0);
- todo_wine ok(res, "EM_SETTARGETDEVICE failed (returned %d).\n", res);
+ ok(res, "EM_SETTARGETDEVICE failed (returned %d).\n", res);
pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
ok(pos, "pos=%d indicating no word wrap when it is expected.\n", pos);
DestroyWindow(hwnd);
diff --git a/rostests/winetests/riched20/txtsrv.c b/rostests/winetests/riched20/txtsrv.c
index 07145357688..e4d6ae44822 100644
--- a/rostests/winetests/riched20/txtsrv.c
+++ b/rostests/winetests/riched20/txtsrv.c
@@ -32,6 +32,7 @@
#include
#include
#include
+#include
static HMODULE hmoduleRichEdit;
@@ -434,12 +435,16 @@ static void WINAPI ITextHostImpl_TxImmReleaseContext(ITextHost *iface, HIMC himc
TRACECALL("Call to TxImmReleaseContext(%p, himc=%p)\n", This, himc);
}
+/* This function must set the variable pointed to by *lSelBarWidth.
+ Otherwise an uninitalized value will be used to calculate
+ positions and sizes even if E_NOTIMPL is returned. */
static HRESULT WINAPI ITextHostImpl_TxGetSelectionBarWidth(ITextHost *iface,
LONG *lSelBarWidth)
{
ITextHostTestImpl *This = (ITextHostTestImpl *)iface;
TRACECALL("Call to TxGetSelectionBarWidth(%p, lSelBarWidth=%p)\n",
This, lSelBarWidth);
+ *lSelBarWidth = 0;
return E_NOTIMPL;
}
@@ -636,7 +641,7 @@ static void test_TxGetText(void)
return;
hres = ITextServices_TxGetText(txtserv, &rettext);
- todo_wine ok(hres == S_OK, "ITextServices_TxGetText failed\n");
+ ok(hres == S_OK, "ITextServices_TxGetText failed\n");
IUnknown_Release(txtserv);
CoTaskMemFree(dummyTextHost);
@@ -652,20 +657,88 @@ static void test_TxSetText(void)
return;
hres = ITextServices_TxSetText(txtserv, settext);
- todo_wine ok(hres == S_OK, "ITextServices_TxSetText failed\n");
+ ok(hres == S_OK, "ITextServices_TxSetText failed\n");
hres = ITextServices_TxGetText(txtserv, &rettext);
- todo_wine ok(hres == S_OK, "ITextServices_TxGetText failed\n");
+ ok(hres == S_OK, "ITextServices_TxGetText failed\n");
- todo_wine ok(SysStringLen(rettext) == 4,
+ ok(SysStringLen(rettext) == 4,
"String returned of wrong length\n");
- todo_wine ok(memcmp(rettext,settext,SysStringByteLen(rettext)) == 0,
+ ok(memcmp(rettext,settext,SysStringByteLen(rettext)) == 0,
"String returned differs\n");
IUnknown_Release(txtserv);
CoTaskMemFree(dummyTextHost);
}
+static void test_TxGetNaturalSize(void) {
+ HRESULT result;
+ BOOL ret;
+
+ /* This value is used when calling TxGetNaturalSize. MSDN says
+ that this is not supported however a null pointer cannot be
+ used as it will cause a segmentation violation. The values in
+ the structure being pointed to are required to be INT_MAX
+ otherwise calculations can give wrong values. */
+ const SIZEL psizelExtent = {INT_MAX,INT_MAX};
+
+ static const WCHAR oneA[] = {'A',0};
+
+ /* Results of measurements */
+ LONG xdim, ydim;
+
+ /* The device context to do the tests in */
+ HDC hdcDraw;
+
+ /* Variables with the text metric information */
+ INT charwidth_caps_text[26];
+ TEXTMETRIC tmInfo_text;
+
+ if (!init_texthost())
+ return;
+
+ hdcDraw = GetDC(NULL);
+ SaveDC(hdcDraw);
+
+ /* Populate the metric strucs */
+ SetMapMode(hdcDraw,MM_TEXT);
+ GetTextMetrics(hdcDraw, &tmInfo_text);
+ SetLastError(0xdeadbeef);
+ ret = GetCharWidth32(hdcDraw,'A','Z',charwidth_caps_text);
+ if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) {
+ win_skip("GetCharWidth32 is not available\n");
+ RestoreDC(hdcDraw,1);
+ ReleaseDC(NULL,hdcDraw);
+ return;
+ }
+
+ /* Make measurements in MM_TEXT */
+ SetMapMode(hdcDraw,MM_TEXT);
+ xdim = 0; ydim = 0;
+
+ result = ITextServices_TxSetText(txtserv, oneA);
+ ok(result == S_OK, "ITextServices_TxSetText failed\n");
+
+ result = ITextServices_TxGetNaturalSize(txtserv, DVASPECT_CONTENT,
+ hdcDraw, NULL, NULL,
+ TXTNS_FITTOCONTENT, &psizelExtent,
+ &xdim, &ydim);
+ todo_wine ok(result == S_OK, "TxGetNaturalSize failed\n");
+ todo_wine ok(ydim == tmInfo_text.tmHeight,
+ "Height calculated incorrectly (expected %d, got %d)\n",
+ tmInfo_text.tmHeight, ydim);
+ /* The native DLL adds one pixel extra when calculating widths. */
+ todo_wine ok(xdim >= charwidth_caps_text[0] && xdim <= charwidth_caps_text[0] + 1,
+ "Width calculated incorrectly (expected %d {+1}, got %d)\n",
+ charwidth_caps_text[0], xdim);
+
+ RestoreDC(hdcDraw,1);
+ ReleaseDC(NULL,hdcDraw);
+
+ IUnknown_Release(txtserv);
+ CoTaskMemFree(dummyTextHost);
+}
+
START_TEST( txtsrv )
{
setup_thiscall_wrappers();
@@ -682,6 +755,7 @@ START_TEST( txtsrv )
test_TxGetText();
test_TxSetText();
+ test_TxGetNaturalSize();
}
if (wrapperCodeMem) VirtualFree(wrapperCodeMem, 0, MEM_RELEASE);
}
diff --git a/rostests/winetests/riched32/editor.c b/rostests/winetests/riched32/editor.c
index 63a63f13018..6216001afd1 100644
--- a/rostests/winetests/riched32/editor.c
+++ b/rostests/winetests/riched32/editor.c
@@ -48,7 +48,7 @@ static HWND new_richedit(HWND parent) {
return new_window(RICHEDIT_CLASS10A, ES_MULTILINE, parent);
}
-static void test_WM_SETTEXT()
+static void test_WM_SETTEXT(void)
{
HWND hwndRichEdit = new_richedit(NULL);
const char * TestItem1 = "TestSomeText";
@@ -71,23 +71,21 @@ static void test_WM_SETTEXT()
LRESULT result;
/* This test attempts to show that WM_SETTEXT on a riched32 control does not
- attempt to modify the text that is pasted into the control, and should
- return it as is. In particular, \r\r\n is NOT converted, unlike riched20.
- Currently, builtin riched32 mangles solitary \r or \n when not part of
- a \r\n pair.
-
- For riched32, the rules for breaking lines seem to be the following:
- - \r\n is one line break. This is the normal case.
- - \r{0,N}\n is one line break. In particular, \n by itself is a line break.
- - \n{1,N} are that many line breaks.
- - \r with text or other characters (except \n) past it, is a line break. That
- is, a run of \r{N} without a terminating \n is considered N line breaks
- - \r at the end of the text is NOT a line break. This differs from riched20,
- where \r at the end of the text is a proper line break. This causes
- TestItem2 to fail its test.
+ * attempt to modify the text that is pasted into the control, and should
+ * return it as is. In particular, \r\r\n is NOT converted, unlike riched20.
+ *
+ * For riched32, the rules for breaking lines seem to be the following:
+ * - \r\n is one line break. This is the normal case.
+ * - \r{0,2}\n is one line break. In particular, \n by itself is a line break.
+ * - \r{0,N-1}\r\r\n is N line breaks.
+ * - \n{1,N} are that many line breaks.
+ * - \r with text or other characters (except \n) past it, is a line break. That
+ * is, a run of \r{N} without a terminating \n is considered N line breaks
+ * - \r at the end of the text is NOT a line break. This differs from riched20,
+ * where \r at the end of the text is a proper line break.
*/
-#define TEST_SETTEXT(a, b, nlines, is_todo, is_todo2) \
+#define TEST_SETTEXT(a, b, nlines) \
result = SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) a); \
ok (result == 1, "WM_SETTEXT returned %ld instead of 1\n", result); \
result = SendMessage(hwndRichEdit, WM_GETTEXT, 1024, (LPARAM) buf); \
@@ -95,36 +93,27 @@ static void test_WM_SETTEXT()
"WM_GETTEXT returned %ld instead of expected %u\n", \
result, lstrlen(buf)); \
result = strcmp(b, buf); \
- if (is_todo) todo_wine { \
ok(result == 0, \
"WM_SETTEXT round trip: strcmp = %ld\n", result); \
- } else { \
- ok(result == 0, \
- "WM_SETTEXT round trip: strcmp = %ld\n", result); \
- } \
result = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0); \
- if (is_todo2) todo_wine { \
- ok(result == nlines, "EM_GETLINECOUNT returned %ld, expected %d\n", result, nlines); \
- } else { \
- ok(result == nlines, "EM_GETLINECOUNT returned %ld, expected %d\n", result, nlines); \
- }
+ ok(result == nlines, "EM_GETLINECOUNT returned %ld, expected %d\n", result, nlines);
- TEST_SETTEXT(TestItem1, TestItem1, 1, 0, 0)
- TEST_SETTEXT(TestItem2, TestItem2, 1, 0, 0)
- TEST_SETTEXT(TestItem3, TestItem3, 2, 0, 0)
- TEST_SETTEXT(TestItem4, TestItem4, 3, 0, 0)
- TEST_SETTEXT(TestItem5, TestItem5, 2, 0, 0)
- TEST_SETTEXT(TestItem6, TestItem6, 3, 0, 0)
- TEST_SETTEXT(TestItem7, TestItem7, 4, 0, 0)
- TEST_SETTEXT(TestItem8, TestItem8, 2, 0, 0)
- TEST_SETTEXT(TestItem9, TestItem9, 3, 0, 0)
- TEST_SETTEXT(TestItem10, TestItem10, 3, 0, 0)
- TEST_SETTEXT(TestItem11, TestItem11, 1, 0, 0)
- TEST_SETTEXT(TestItem12, TestItem12, 2, 0, 0)
- TEST_SETTEXT(TestItem13, TestItem13, 3, 0, 0)
- TEST_SETTEXT(TestItem14, TestItem14, 2, 0, 0)
- TEST_SETTEXT(TestItem15, TestItem15, 3, 0, 0)
- TEST_SETTEXT(TestItem16, TestItem16, 4, 0, 0)
+ TEST_SETTEXT(TestItem1, TestItem1, 1)
+ TEST_SETTEXT(TestItem2, TestItem2, 1)
+ TEST_SETTEXT(TestItem3, TestItem3, 2)
+ TEST_SETTEXT(TestItem4, TestItem4, 3)
+ TEST_SETTEXT(TestItem5, TestItem5, 2)
+ TEST_SETTEXT(TestItem6, TestItem6, 3)
+ TEST_SETTEXT(TestItem7, TestItem7, 4)
+ TEST_SETTEXT(TestItem8, TestItem8, 2)
+ TEST_SETTEXT(TestItem9, TestItem9, 3)
+ TEST_SETTEXT(TestItem10, TestItem10, 3)
+ TEST_SETTEXT(TestItem11, TestItem11, 1)
+ TEST_SETTEXT(TestItem12, TestItem12, 2)
+ TEST_SETTEXT(TestItem13, TestItem13, 3)
+ TEST_SETTEXT(TestItem14, TestItem14, 2)
+ TEST_SETTEXT(TestItem15, TestItem15, 3)
+ TEST_SETTEXT(TestItem16, TestItem16, 4)
#undef TEST_SETTEXT
DestroyWindow(hwndRichEdit);
@@ -184,18 +173,18 @@ static void test_EM_STREAMIN(void)
const char * streamText0b = "{\\rtf1 TestSomeText\\par\\par}";
const char * streamText1 =
- "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang12298{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 System;}}\r\n" \
- "\\viewkind4\\uc1\\pard\\f0\\fs17 TestSomeText\\par\r\n" \
+ "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang12298{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 System;}}\r\n"
+ "\\viewkind4\\uc1\\pard\\f0\\fs17 TestSomeText\\par\r\n"
"}\r\n";
/* This should be accepted in richedit 1.0 emulation. See bug #8326 */
const char * streamText2 =
- "{{\\colortbl;\\red0\\green255\\blue102;\\red255\\green255\\blue255;" \
- "\\red170\\green255\\blue255;\\red255\\green238\\blue0;\\red51\\green255" \
- "\\blue221;\\red238\\green238\\blue238;}\\tx0 \\tx424 \\tx848 \\tx1272 " \
- "\\tx1696 \\tx2120 \\tx2544 \\tx2968 \\tx3392 \\tx3816 \\tx4240 \\tx4664 " \
- "\\tx5088 \\tx5512 \\tx5936 \\tx6360 \\tx6784 \\tx7208 \\tx7632 \\tx8056 " \
- "\\tx8480 \\tx8904 \\tx9328 \\tx9752 \\tx10176 \\tx10600 \\tx11024 " \
+ "{{\\colortbl;\\red0\\green255\\blue102;\\red255\\green255\\blue255;"
+ "\\red170\\green255\\blue255;\\red255\\green238\\blue0;\\red51\\green255"
+ "\\blue221;\\red238\\green238\\blue238;}\\tx0 \\tx424 \\tx848 \\tx1272 "
+ "\\tx1696 \\tx2120 \\tx2544 \\tx2968 \\tx3392 \\tx3816 \\tx4240 \\tx4664 "
+ "\\tx5088 \\tx5512 \\tx5936 \\tx6360 \\tx6784 \\tx7208 \\tx7632 \\tx8056 "
+ "\\tx8480 \\tx8904 \\tx9328 \\tx9752 \\tx10176 \\tx10600 \\tx11024 "
"\\tx11448 \\tx11872 \\tx12296 \\tx12720 \\tx13144 \\cf2 RichEdit1\\line }";
const char * streamText3 = "RichEdit1";
@@ -365,17 +354,17 @@ static const struct getline_s {
int line;
size_t buffer_len;
const char *text;
- int wine_todo;
} gl[] = {
- {0, 10, "foo bar\r\n", 0},
- {1, 10, "\n", 0},
- {2, 10, "bar\n", 0},
- {3, 10, "\r\n", 0},
+ {0, 10, "foo bar\r\n"},
+ {1, 10, "\r"},
+ {2, 10, "\r\r\n"},
+ {3, 10, "bar\n"},
+ {4, 10, "\r\n"},
/* Buffer smaller than line length */
- {0, 2, "foo bar\r", 0},
- {0, 1, "foo bar\r", 0},
- {0, 0, "foo bar\r", 0}
+ {0, 2, "foo bar\r"},
+ {0, 1, "foo bar\r"},
+ {0, 0, "foo bar\r"}
};
static void test_EM_GETLINE(void)
@@ -385,7 +374,8 @@ static void test_EM_GETLINE(void)
static const int nBuf = 1024;
char dest[1024], origdest[1024];
const char text[] = "foo bar\r\n"
- "\n"
+ "\r"
+ "\r\r\n"
"bar\n";
SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text);
@@ -402,10 +392,6 @@ static void test_EM_GETLINE(void)
/* EM_GETLINE appends a "\r\0" to the end of the line
* nCopied counts up to and including the '\r' */
nCopied = SendMessage(hwndRichEdit, EM_GETLINE, gl[i].line, (LPARAM) dest);
- if (gl[i].wine_todo) todo_wine {
- ok(nCopied == expected_nCopied, "%d: %d!=%d\n", i, nCopied,
- expected_nCopied);
- } else
ok(nCopied == expected_nCopied, "%d: %d!=%d\n", i, nCopied,
expected_nCopied);
/* two special cases since a parameter is passed via dest */
@@ -417,21 +403,11 @@ static void test_EM_GETLINE(void)
!strncmp(dest+2, origdest+2, nBuf-2), "buffer_len=1\n");
else
{
- if (gl[i].wine_todo) todo_wine {
ok(!strncmp(dest, gl[i].text, expected_bytes_written),
"%d: expected_bytes_written=%d\n", i, expected_bytes_written);
ok(!strncmp(dest + expected_bytes_written, origdest
+ expected_bytes_written, nBuf - expected_bytes_written),
"%d: expected_bytes_written=%d\n", i, expected_bytes_written);
- }
- else
- {
- ok(!strncmp(dest, gl[i].text, expected_bytes_written),
- "%d: expected_bytes_written=%d\n", i, expected_bytes_written);
- ok(!strncmp(dest + expected_bytes_written, origdest
- + expected_bytes_written, nBuf - expected_bytes_written),
- "%d: expected_bytes_written=%d\n", i, expected_bytes_written);
- }
}
}
@@ -445,28 +421,45 @@ static void test_EM_LINELENGTH(void)
"richedit1\r"
"richedit1\n"
"richedit1\r\n"
- "richedit1\r\r\r\r\r\n";
- int offset_test[10][2] = {
- {0, 9},
- {5, 9},
- {10, 9},
- {15, 9},
- {20, 9},
- {25, 9},
- {30, 9},
- {35, 9},
- {40, 9}, /* <----- in the middle of the \r run, but run not counted */
- {45, 0},
+ "short\r"
+ "richedit1\r"
+ "\r"
+ "\r"
+ "\r\r\n";
+ int offset_test[16][2] = {
+ {0, 9}, /* Line 1: |richedit1\r */
+ {5, 9}, /* Line 1: riche|dit1\r */
+ {10, 9}, /* Line 2: |richedit1\n */
+ {15, 9}, /* Line 2: riche|dit1\n */
+ {20, 9}, /* Line 3: |richedit1\r\n */
+ {25, 9}, /* Line 3: riche|dit1\r\n */
+ {30, 9}, /* Line 3: richedit1\r|\n */
+ {31, 5}, /* Line 4: |short\r */
+ {42, 9}, /* Line 5: riche|dit1\r */
+ {46, 9}, /* Line 5: richedit1|\r */
+ {47, 0}, /* Line 6: |\r */
+ {48, 0}, /* Line 7: |\r */
+ {49, 0}, /* Line 8: |\r\r\n */
+ {50, 0}, /* Line 8: \r|\r\n */
+ {51, 0}, /* Line 8: \r\r|\n */
+ {52, 0}, /* Line 9: \r\r\n| */
};
int i;
LRESULT result;
SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) text);
- for (i = 0; i < 10; i++) {
+ result = SendMessage(hwndRichEdit, EM_GETLINECOUNT, 0, 0);
+ if (result == 4) {
+ win_skip("Win9x, WinME and NT4 don't handle '\\r only' correctly\n");
+ return;
+ }
+ ok(result == 9, "Incorrect line count of %ld\n", result);
+
+ for (i = 0; i < sizeof(offset_test)/sizeof(offset_test[0]); i++) {
result = SendMessage(hwndRichEdit, EM_LINELENGTH, offset_test[i][0], 0);
ok(result == offset_test[i][1], "Length of line at offset %d is %ld, expected %d\n",
- offset_test[i][0], result, offset_test[i][1]);
+ offset_test[i][0], result, offset_test[i][1]);
}
DestroyWindow(hwndRichEdit);
@@ -476,9 +469,10 @@ static void test_EM_GETTEXTRANGE(void)
{
HWND hwndRichEdit = new_richedit(NULL);
const char * text1 = "foo bar\r\nfoo bar";
- const char * text2 = "foo bar\rfoo bar";
+ const char * text3 = "foo bar\rfoo bar";
const char * expect1 = "bar\r\nfoo";
- const char * expect2 = "bar\rfoo";
+ const char * expect2 = "\nfoo";
+ const char * expect3 = "bar\rfoo";
char buffer[1024] = {0};
LRESULT result;
TEXTRANGEA textRange;
@@ -492,7 +486,14 @@ static void test_EM_GETTEXTRANGE(void)
ok(result == 8, "EM_GETTEXTRANGE returned %ld\n", result);
ok(!strcmp(expect1, buffer), "EM_GETTEXTRANGE filled %s\n", buffer);
- SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text2);
+ textRange.lpstrText = buffer;
+ textRange.chrg.cpMin = 8;
+ textRange.chrg.cpMax = 12;
+ result = SendMessage(hwndRichEdit, EM_GETTEXTRANGE, 0, (LPARAM)&textRange);
+ ok(result == 4, "EM_GETTEXTRANGE returned %ld\n", result);
+ ok(!strcmp(expect2, buffer), "EM_GETTEXTRANGE filled %s\n", buffer);
+
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM)text3);
textRange.lpstrText = buffer;
textRange.chrg.cpMin = 4;
@@ -500,7 +501,7 @@ static void test_EM_GETTEXTRANGE(void)
result = SendMessage(hwndRichEdit, EM_GETTEXTRANGE, 0, (LPARAM)&textRange);
ok(result == 7, "EM_GETTEXTRANGE returned %ld\n", result);
- ok(!strcmp(expect2, buffer), "EM_GETTEXTRANGE filled %s\n", buffer);
+ ok(!strcmp(expect3, buffer), "EM_GETTEXTRANGE filled %s\n", buffer);
DestroyWindow(hwndRichEdit);
@@ -538,90 +539,98 @@ static void test_EM_GETSELTEXT(void)
static const char haystack[] = "WINEWine wineWine wine WineWine";
/* ^0 ^10 ^20 ^30 */
+static const char haystack2[] = "first\r\r\nsecond";
+
struct find_s {
int start;
int end;
const char *needle;
int flags;
int expected_loc;
- int _todo_wine;
};
struct find_s find_tests[] = {
/* Find in empty text */
- {0, -1, "foo", FR_DOWN, -1, 0},
- {0, -1, "foo", 0, -1, 0},
- {0, -1, "", FR_DOWN, -1, 0},
- {20, 5, "foo", FR_DOWN, -1, 0},
- {5, 20, "foo", FR_DOWN, -1, 0}
+ {0, -1, "foo", FR_DOWN, -1},
+ {0, -1, "foo", 0, -1},
+ {0, -1, "", FR_DOWN, -1},
+ {20, 5, "foo", FR_DOWN, -1},
+ {5, 20, "foo", FR_DOWN, -1}
};
struct find_s find_tests2[] = {
/* No-result find */
- {0, -1, "foo", FR_DOWN | FR_MATCHCASE, -1, 0},
- {5, 20, "WINE", FR_DOWN | FR_MATCHCASE, -1, 0},
+ {0, -1, "foo", FR_DOWN | FR_MATCHCASE, -1},
+ {5, 20, "WINE", FR_DOWN | FR_MATCHCASE, -1},
/* Subsequent finds */
- {0, -1, "Wine", FR_DOWN | FR_MATCHCASE, 4, 0},
- {5, 31, "Wine", FR_DOWN | FR_MATCHCASE, 13, 0},
- {14, 31, "Wine", FR_DOWN | FR_MATCHCASE, 23, 0},
- {24, 31, "Wine", FR_DOWN | FR_MATCHCASE, 27, 0},
+ {0, -1, "Wine", FR_DOWN | FR_MATCHCASE, 4},
+ {5, 31, "Wine", FR_DOWN | FR_MATCHCASE, 13},
+ {14, 31, "Wine", FR_DOWN | FR_MATCHCASE, 23},
+ {24, 31, "Wine", FR_DOWN | FR_MATCHCASE, 27},
/* Find backwards */
- {19, 20, "Wine", FR_MATCHCASE, -1, 0},
- {10, 20, "Wine", FR_MATCHCASE, 13, 0},
- {20, 10, "Wine", FR_MATCHCASE, -1, 0},
+ {19, 20, "Wine", FR_MATCHCASE, -1},
+ {10, 20, "Wine", FR_MATCHCASE, 13},
+ {20, 10, "Wine", FR_MATCHCASE, -1},
/* Case-insensitive */
- {1, 31, "wInE", FR_DOWN, 4, 0},
- {1, 31, "Wine", FR_DOWN, 4, 0},
+ {1, 31, "wInE", FR_DOWN, 4},
+ {1, 31, "Wine", FR_DOWN, 4},
/* High-to-low ranges */
- {20, 5, "Wine", FR_DOWN, -1, 0},
- {2, 1, "Wine", FR_DOWN, -1, 0},
- {30, 29, "Wine", FR_DOWN, -1, 0},
- {20, 5, "Wine", 0, /*13*/ -1, 0},
+ {20, 5, "Wine", FR_DOWN, -1},
+ {2, 1, "Wine", FR_DOWN, -1},
+ {30, 29, "Wine", FR_DOWN, -1},
+ {20, 5, "Wine", 0, /*13*/ -1},
/* Find nothing */
- {5, 10, "", FR_DOWN, -1, 0},
- {10, 5, "", FR_DOWN, -1, 0},
- {0, -1, "", FR_DOWN, -1, 0},
- {10, 5, "", 0, -1, 0},
+ {5, 10, "", FR_DOWN, -1},
+ {10, 5, "", FR_DOWN, -1},
+ {0, -1, "", FR_DOWN, -1},
+ {10, 5, "", 0, -1},
/* Whole-word search */
- {0, -1, "wine", FR_DOWN | FR_WHOLEWORD, 18, 0},
- {0, -1, "win", FR_DOWN | FR_WHOLEWORD, -1, 0},
- {13, -1, "wine", FR_DOWN | FR_WHOLEWORD, 18, 0},
- {0, -1, "winewine", FR_DOWN | FR_WHOLEWORD, 0, 0},
- {10, -1, "winewine", FR_DOWN | FR_WHOLEWORD, 23, 0},
- {11, -1, "winewine", FR_WHOLEWORD, 23, 0},
- {31, -1, "winewine", FR_WHOLEWORD, -1, 0},
+ {0, -1, "wine", FR_DOWN | FR_WHOLEWORD, 18},
+ {0, -1, "win", FR_DOWN | FR_WHOLEWORD, -1},
+ {13, -1, "wine", FR_DOWN | FR_WHOLEWORD, 18},
+ {0, -1, "winewine", FR_DOWN | FR_WHOLEWORD, 0},
+ {10, -1, "winewine", FR_DOWN | FR_WHOLEWORD, 23},
+ {11, -1, "winewine", FR_WHOLEWORD, 23},
+ {31, -1, "winewine", FR_WHOLEWORD, -1},
/* Bad ranges */
- {5, 200, "XXX", FR_DOWN, -1, 0},
- {-20, 20, "Wine", FR_DOWN, -1, 0},
- {-20, 20, "Wine", FR_DOWN, -1, 0},
- {-15, -20, "Wine", FR_DOWN, -1, 0},
- {1<<12, 1<<13, "Wine", FR_DOWN, -1, 0},
+ {5, 200, "XXX", FR_DOWN, -1},
+ {-20, 20, "Wine", FR_DOWN, -1},
+ {-20, 20, "Wine", FR_DOWN, -1},
+ {-15, -20, "Wine", FR_DOWN, -1},
+ {1<<12, 1<<13, "Wine", FR_DOWN, -1},
/* Check the case noted in bug 4479 where matches at end aren't recognized */
- {23, 31, "Wine", FR_DOWN | FR_MATCHCASE, 23, 0},
- {27, 31, "Wine", FR_DOWN | FR_MATCHCASE, 27, 0},
- {27, 32, "Wine", FR_DOWN | FR_MATCHCASE, 27, 0},
- {13, 31, "WineWine", FR_DOWN | FR_MATCHCASE, 23, 0},
- {13, 32, "WineWine", FR_DOWN | FR_MATCHCASE, 23, 0},
+ {23, 31, "Wine", FR_DOWN | FR_MATCHCASE, 23},
+ {27, 31, "Wine", FR_DOWN | FR_MATCHCASE, 27},
+ {27, 32, "Wine", FR_DOWN | FR_MATCHCASE, 27},
+ {13, 31, "WineWine", FR_DOWN | FR_MATCHCASE, 23},
+ {13, 32, "WineWine", FR_DOWN | FR_MATCHCASE, 23},
/* The backwards case of bug 4479; bounds look right
* Fails because backward find is wrong */
- {19, 20, "WINE", FR_MATCHCASE, -1, 0},
- {0, 20, "WINE", FR_MATCHCASE, 0, 0},
+ {19, 20, "WINE", FR_MATCHCASE, -1},
+ {0, 20, "WINE", FR_MATCHCASE, 0},
- {0, -1, "wineWine wine", FR_DOWN, 0, 0},
- {0, -1, "wineWine wine", 0, 0, 0},
- {0, -1, "INEW", 0, 1, 0},
- {0, 31, "INEW", 0, 1, 0},
- {4, -1, "INEW", 0, 10, 0},
+ {0, -1, "wineWine wine", FR_DOWN, 0},
+ {0, -1, "wineWine wine", 0, 0},
+ {0, -1, "INEW", 0, 1},
+ {0, 31, "INEW", 0, 1},
+ {4, -1, "INEW", 0, 10},
+};
+
+struct find_s find_tests3[] = {
+ /* Searching for end of line characters */
+ {0, -1, "t\r\r\ns", FR_DOWN | FR_MATCHCASE, 4},
+ {6, -1, "\r\n", FR_DOWN | FR_MATCHCASE, 6},
+ {7, -1, "\n", FR_DOWN | FR_MATCHCASE, 7},
};
static void check_EM_FINDTEXT(HWND hwnd, const char *name, struct find_s *f, int id) {
@@ -667,15 +676,8 @@ static void run_tests_EM_FINDTEXT(HWND hwnd, const char *name, struct find_s *fi
int i;
for (i = 0; i < num_tests; i++) {
- if (find[i]._todo_wine) {
- todo_wine {
- check_EM_FINDTEXT(hwnd, name, &find[i], i);
- check_EM_FINDTEXTEX(hwnd, name, &find[i], i);
- }
- } else {
- check_EM_FINDTEXT(hwnd, name, &find[i], i);
- check_EM_FINDTEXTEX(hwnd, name, &find[i], i);
- }
+ check_EM_FINDTEXT(hwnd, name, &find[i], i);
+ check_EM_FINDTEXTEX(hwnd, name, &find[i], i);
}
}
@@ -693,6 +695,12 @@ static void test_EM_FINDTEXT(void)
run_tests_EM_FINDTEXT(hwndRichEdit, "2", find_tests2,
sizeof(find_tests2)/sizeof(struct find_s));
+ SendMessage(hwndRichEdit, WM_SETTEXT, 0, (LPARAM) haystack2);
+
+ /* Haystack text 2 (with EOL characters) */
+ run_tests_EM_FINDTEXT(hwndRichEdit, "3", find_tests3,
+ sizeof(find_tests3)/sizeof(struct find_s));
+
DestroyWindow(hwndRichEdit);
}
@@ -742,9 +750,7 @@ static void test_EM_POSFROMCHAR(void)
if (i == 0)
{
ok(pl.y == 0, "EM_POSFROMCHAR reports y=%d, expected 0\n", pl.y);
- todo_wine {
ok(pl.x == 1, "EM_POSFROMCHAR reports x=%d, expected 1\n", pl.x);
- }
xpos = pl.x;
}
else if (i == 1)
@@ -805,9 +811,7 @@ static void test_EM_POSFROMCHAR(void)
result = SendMessage(hwndRichEdit, EM_POSFROMCHAR, (WPARAM)&pl, 0);
ok(result == 0, "EM_POSFROMCHAR returned %ld, expected 0\n", result);
ok(pl.y == 0, "EM_POSFROMCHAR reports y=%d, expected 0\n", pl.y);
- todo_wine {
ok(pl.x == 1, "EM_POSFROMCHAR reports x=%d, expected 1\n", pl.x);
- }
xpos = pl.x;
SendMessage(hwndRichEdit, WM_HSCROLL, SB_LINERIGHT, 0);
@@ -821,6 +825,163 @@ static void test_EM_POSFROMCHAR(void)
DestroyWindow(hwndRichEdit);
}
+static void test_word_wrap(void)
+{
+ HWND hwnd;
+ POINTL point = {0, 60}; /* This point must be below the first line */
+ const char *text = "Must be long enough to test line wrapping";
+ DWORD dwCommonStyle = WS_VISIBLE|WS_POPUP|WS_VSCROLL|ES_MULTILINE;
+ int res, pos, lines;
+
+ /* Test the effect of WS_HSCROLL and ES_AUTOHSCROLL styles on wrapping
+ * when specified on window creation and set later. */
+ hwnd = CreateWindow(RICHEDIT_CLASS10A, NULL, dwCommonStyle,
+ 0, 0, 200, 80, NULL, NULL, hmoduleRichEdit, NULL);
+ ok(hwnd != NULL, "error: %d\n", (int) GetLastError());
+ res = SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) text);
+ ok(res, "WM_SETTEXT failed.\n");
+ pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
+ ok(pos, "pos=%d indicating no word wrap when it is expected.\n", pos);
+ lines = SendMessage(hwnd, EM_GETLINECOUNT, 0, 0);
+ ok(lines > 1, "Line was expected to wrap (lines=%d).\n", lines);
+
+ SetWindowLong(hwnd, GWL_STYLE, dwCommonStyle|WS_HSCROLL|ES_AUTOHSCROLL);
+ pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
+ ok(pos, "pos=%d indicating no word wrap when it is expected.\n", pos);
+ DestroyWindow(hwnd);
+
+ hwnd = CreateWindow(RICHEDIT_CLASS10A, NULL, dwCommonStyle|WS_HSCROLL,
+ 0, 0, 200, 80, NULL, NULL, hmoduleRichEdit, NULL);
+ ok(hwnd != NULL, "error: %d\n", (int) GetLastError());
+
+ res = SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) text);
+ ok(res, "WM_SETTEXT failed.\n");
+ pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
+ ok(pos, "pos=%d indicating no word wrap when it is expected.\n", pos);
+ lines = SendMessage(hwnd, EM_GETLINECOUNT, 0, 0);
+ ok(lines > 1, "Line was expected to wrap (lines=%d).\n", lines);
+
+ SetWindowLong(hwnd, GWL_STYLE, dwCommonStyle|WS_HSCROLL|ES_AUTOHSCROLL);
+ pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
+ ok(pos, "pos=%d indicating no word wrap when it is expected.\n", pos);
+ DestroyWindow(hwnd);
+
+ hwnd = CreateWindow(RICHEDIT_CLASS10A, NULL, dwCommonStyle|ES_AUTOHSCROLL,
+ 0, 0, 200, 80, NULL, NULL, hmoduleRichEdit, NULL);
+ ok(hwnd != NULL, "error: %d\n", (int) GetLastError());
+ res = SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) text);
+ ok(res, "WM_SETTEXT failed.\n");
+ pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
+ ok(!pos, "pos=%d indicating word wrap when none is expected.\n", pos);
+
+ SetWindowLong(hwnd, GWL_STYLE, dwCommonStyle);
+ pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
+ ok(!pos, "pos=%d indicating word wrap when none is expected.\n", pos);
+ DestroyWindow(hwnd);
+
+ hwnd = CreateWindow(RICHEDIT_CLASS10A, NULL,
+ dwCommonStyle|WS_HSCROLL|ES_AUTOHSCROLL,
+ 0, 0, 200, 80, NULL, NULL, hmoduleRichEdit, NULL);
+ ok(hwnd != NULL, "error: %d\n", (int) GetLastError());
+ res = SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM) text);
+ ok(res, "WM_SETTEXT failed.\n");
+ pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
+ ok(!pos, "pos=%d indicating word wrap when none is expected.\n", pos);
+
+ SetWindowLong(hwnd, GWL_STYLE, dwCommonStyle);
+ pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
+ ok(!pos, "pos=%d indicating word wrap when none is expected.\n", pos);
+
+ /* Test the effect of EM_SETTARGETDEVICE on word wrap. */
+ res = SendMessage(hwnd, EM_SETTARGETDEVICE, 0, 1);
+ ok(res, "EM_SETTARGETDEVICE failed (returned %d).\n", res);
+ pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
+ ok(!pos, "pos=%d indicating word wrap when none is expected.\n", pos);
+
+ res = SendMessage(hwnd, EM_SETTARGETDEVICE, 0, 0);
+ ok(res, "EM_SETTARGETDEVICE failed (returned %d).\n", res);
+ pos = SendMessage(hwnd, EM_CHARFROMPOS, 0, (LPARAM) &point);
+ ok(pos, "pos=%d indicating no word wrap when it is expected.\n", pos);
+ DestroyWindow(hwnd);
+
+ /* Test to see if wrapping happens with redraw disabled. */
+ hwnd = CreateWindow(RICHEDIT_CLASS10A, NULL, dwCommonStyle,
+ 0, 0, 400, 80, NULL, NULL, hmoduleRichEdit, NULL);
+ ok(hwnd != NULL, "error: %d\n", (int) GetLastError());
+ ok(IsWindowVisible(hwnd), "Window should be visible.\n");
+ SendMessage(hwnd, WM_SETREDRAW, FALSE, 0);
+ /* redraw is disabled by making the window invisible. */
+ ok(!IsWindowVisible(hwnd), "Window shouldn't be visible.\n");
+ res = SendMessage(hwnd, EM_REPLACESEL, FALSE, (LPARAM) text);
+ ok(res, "EM_REPLACESEL failed.\n");
+ MoveWindow(hwnd, 0, 0, 100, 80, TRUE);
+ SendMessage(hwnd, WM_SETREDRAW, TRUE, 0);
+ /* Wrapping didn't happen while redraw was disabled. */
+ lines = SendMessage(hwnd, EM_GETLINECOUNT, 0, 0);
+ todo_wine ok(lines == 1, "Line wasn't expected to wrap (lines=%d).\n", lines);
+ /* There isn't even a rewrap from resizing the window. */
+ lines = SendMessage(hwnd, EM_GETLINECOUNT, 0, 0);
+ todo_wine ok(lines == 1, "Line wasn't expected to wrap (lines=%d).\n", lines);
+ res = SendMessage(hwnd, EM_REPLACESEL, FALSE, (LPARAM) text);
+ ok(res, "EM_REPLACESEL failed.\n");
+ lines = SendMessage(hwnd, EM_GETLINECOUNT, 0, 0);
+ ok(lines > 1, "Line was expected to wrap (lines=%d).\n", lines);
+
+ DestroyWindow(hwnd);
+}
+
+static void test_EM_GETOPTIONS(void)
+{
+ HWND hwnd;
+ DWORD options;
+
+ hwnd = CreateWindow(RICHEDIT_CLASS10A, NULL,
+ WS_POPUP,
+ 0, 0, 200, 60, NULL, NULL, hmoduleRichEdit, NULL);
+ options = SendMessage(hwnd, EM_GETOPTIONS, 0, 0);
+ ok(options == 0, "Incorrect options %x\n", options);
+ DestroyWindow(hwnd);
+
+ hwnd = CreateWindow(RICHEDIT_CLASS10A, NULL,
+ WS_POPUP|WS_VSCROLL|WS_HSCROLL,
+ 0, 0, 200, 60, NULL, NULL, hmoduleRichEdit, NULL);
+ options = SendMessage(hwnd, EM_GETOPTIONS, 0, 0);
+ ok(options == ECO_AUTOVSCROLL,
+ "Incorrect initial options %x\n", options);
+ DestroyWindow(hwnd);
+}
+
+static void test_autoscroll(void)
+{
+ HWND hwnd;
+ UINT ret;
+
+ /* The WS_VSCROLL and WS_HSCROLL styles implicitly set
+ * auto vertical/horizontal scrolling options. */
+ hwnd = CreateWindowEx(0, RICHEDIT_CLASS10A, NULL,
+ WS_POPUP|ES_MULTILINE|WS_VSCROLL|WS_HSCROLL,
+ 0, 0, 200, 60, NULL, NULL, hmoduleRichEdit, NULL);
+ ok(hwnd != NULL, "class: %s, error: %d\n", RICHEDIT_CLASS, (int) GetLastError());
+ ret = SendMessage(hwnd, EM_GETOPTIONS, 0, 0);
+ ok(ret & ECO_AUTOVSCROLL, "ECO_AUTOVSCROLL isn't set.\n");
+ ok(!(ret & ECO_AUTOHSCROLL), "ECO_AUTOHSCROLL is set.\n");
+ ret = GetWindowLong(hwnd, GWL_STYLE);
+ todo_wine ok(ret & ES_AUTOVSCROLL, "ES_AUTOVSCROLL isn't set.\n");
+ ok(!(ret & ES_AUTOHSCROLL), "ES_AUTOHSCROLL is set.\n");
+ DestroyWindow(hwnd);
+
+ hwnd = CreateWindowEx(0, RICHEDIT_CLASS, NULL,
+ WS_POPUP|ES_MULTILINE,
+ 0, 0, 200, 60, NULL, NULL, hmoduleRichEdit, NULL);
+ ok(hwnd != NULL, "class: %s, error: %d\n", RICHEDIT_CLASS, (int) GetLastError());
+ ret = SendMessage(hwnd, EM_GETOPTIONS, 0, 0);
+ ok(!(ret & ECO_AUTOVSCROLL), "ECO_AUTOVSCROLL is set.\n");
+ ok(!(ret & ECO_AUTOHSCROLL), "ECO_AUTOHSCROLL is set.\n");
+ ret = GetWindowLong(hwnd, GWL_STYLE);
+ ok(!(ret & ES_AUTOVSCROLL), "ES_AUTOVSCROLL is set.\n");
+ ok(!(ret & ES_AUTOHSCROLL), "ES_AUTOHSCROLL is set.\n");
+ DestroyWindow(hwnd);
+}
START_TEST( editor )
{
@@ -842,6 +1003,9 @@ START_TEST( editor )
test_EM_LINELENGTH();
test_EM_FINDTEXT();
test_EM_POSFROMCHAR();
+ test_word_wrap();
+ test_EM_GETOPTIONS();
+ test_autoscroll();
/* Set the environment variable WINETEST_RICHED32 to keep windows
* responsive and open for 30 seconds. This is useful for debugging.
diff --git a/rostests/winetests/rsaenh/rsaenh.c b/rostests/winetests/rsaenh/rsaenh.c
index 60e8789475e..8e12b2a7d3e 100644
--- a/rostests/winetests/rsaenh/rsaenh.c
+++ b/rostests/winetests/rsaenh/rsaenh.c
@@ -112,7 +112,7 @@ static void trace_hex(BYTE *pbData, DWORD dwLen) {
}
*/
-static int init_base_environment(void)
+static int init_base_environment(DWORD dwKeyFlags)
{
HCRYPTKEY hKey;
BOOL result;
@@ -132,10 +132,10 @@ static int init_base_environment(void)
CRYPT_NEWKEYSET);
ok(result, "%08x\n", GetLastError());
if (!result) return 0;
- result = CryptGenKey(hProv, AT_KEYEXCHANGE, 0, &hKey);
+ result = CryptGenKey(hProv, AT_KEYEXCHANGE, dwKeyFlags, &hKey);
ok(result, "%08x\n", GetLastError());
if (result) CryptDestroyKey(hKey);
- result = CryptGenKey(hProv, AT_SIGNATURE, 0, &hKey);
+ result = CryptGenKey(hProv, AT_SIGNATURE, dwKeyFlags, &hKey);
ok(result, "%08x\n", GetLastError());
if (result) CryptDestroyKey(hKey);
}
@@ -788,6 +788,16 @@ static void test_rc2(void)
result = CryptGetKeyParam(hKey, KP_MODE_BITS, (BYTE*)&dwModeBits, &dwLen, 0);
ok(result, "%08x\n", GetLastError());
+ dwModeBits = 0xdeadbeef;
+ dwLen = sizeof(DWORD);
+ result = CryptGetKeyParam(hKey, KP_PERMISSIONS, (BYTE*)&dwModeBits, &dwLen, 0);
+ ok(result, "%08x\n", GetLastError());
+ ok(dwModeBits ==
+ (CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_DECRYPT|CRYPT_ENCRYPT) ||
+ broken(dwModeBits == 0xffffffff), /* Win9x/NT4 */
+ "expected CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_DECRYPT|CRYPT_ENCRYPT,"
+ " got %08x\n", dwModeBits);
+
dwLen = sizeof(DWORD);
result = CryptGetKeyParam(hKey, KP_PERMISSIONS, (BYTE*)&dwModeBits, &dwLen, 0);
ok(result, "%08x\n", GetLastError());
@@ -1177,7 +1187,7 @@ static BYTE abPlainPrivateKey[596] = {
static void test_import_private(void)
{
- DWORD dwLen;
+ DWORD dwLen, dwVal;
HCRYPTKEY hKeyExchangeKey, hSessionKey;
BOOL result;
static BYTE abSessionKey[148] = {
@@ -1218,6 +1228,16 @@ static void test_import_private(void)
ok(result, "%08x\n", GetLastError());
if (!result) return;
+ dwVal = 0xdeadbeef;
+ dwLen = sizeof(DWORD);
+ result = CryptGetKeyParam(hSessionKey, KP_PERMISSIONS, (BYTE*)&dwVal, &dwLen, 0);
+ ok(result, "%08x\n", GetLastError());
+ ok(dwVal ==
+ (CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_DECRYPT|CRYPT_ENCRYPT) ||
+ broken(dwVal == 0xffffffff), /* Win9x/NT4 */
+ "expected CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_DECRYPT|CRYPT_ENCRYPT,"
+ " got %08x\n", dwVal);
+
dwLen = (DWORD)sizeof(abEncryptedMessage);
result = CryptDecrypt(hSessionKey, 0, TRUE, 0, abEncryptedMessage, &dwLen);
ok(result && dwLen == 12 && !memcmp(abEncryptedMessage, "Wine rocks!",12),
@@ -1522,7 +1542,7 @@ static void test_rsa_encrypt(void)
HCRYPTKEY hRSAKey;
BYTE abData[2048] = "Wine rocks!";
BOOL result;
- DWORD dwLen;
+ DWORD dwVal, dwLen;
/* It is allowed to use the key exchange key for encryption/decryption */
result = CryptGetUserKey(hProv, AT_KEYEXCHANGE, &hRSAKey);
@@ -1541,6 +1561,33 @@ static void test_rsa_encrypt(void)
result = CryptDecrypt(hRSAKey, 0, TRUE, 0, abData, &dwLen);
ok (result && dwLen == 12 && !memcmp(abData, "Wine rocks!", 12), "%08x\n", GetLastError());
+ dwVal = 0xdeadbeef;
+ dwLen = sizeof(DWORD);
+ result = CryptGetKeyParam(hRSAKey, KP_PERMISSIONS, (BYTE*)&dwVal, &dwLen, 0);
+ ok(result, "%08x\n", GetLastError());
+ ok(dwVal ==
+ (CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_DECRYPT|CRYPT_ENCRYPT) ||
+ broken(dwVal == 0xffffffff), /* Win9x/NT4 */
+ "expected CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_DECRYPT|CRYPT_ENCRYPT,"
+ " got %08x\n", dwVal);
+
+ /* The key exchange key's public key may be exported.. */
+ result = CryptExportKey(hRSAKey, 0, PUBLICKEYBLOB, 0, NULL, &dwLen);
+ ok(result, "%08x\n", GetLastError());
+ /* but its private key may not be. */
+ SetLastError(0xdeadbeef);
+ result = CryptExportKey(hRSAKey, 0, PRIVATEKEYBLOB, 0, NULL, &dwLen);
+ ok((!result && GetLastError() == NTE_BAD_KEY_STATE) ||
+ broken(result), /* Win9x/NT4 */
+ "expected NTE_BAD_KEY_STATE, got %08x\n", GetLastError());
+ /* Setting the permissions of the key exchange key isn't allowed, either. */
+ dwVal |= CRYPT_EXPORT;
+ SetLastError(0xdeadbeef);
+ result = CryptSetKeyParam(hRSAKey, KP_PERMISSIONS, (BYTE *)&dwVal, 0);
+ ok(!result &&
+ (GetLastError() == NTE_BAD_DATA || GetLastError() == NTE_BAD_FLAGS),
+ "expected NTE_BAD_DATA or NTE_BAD_FLAGS, got %08x\n", GetLastError());
+
CryptDestroyKey(hRSAKey);
/* It is not allowed to use the signature key for encryption/decryption */
@@ -1548,6 +1595,33 @@ static void test_rsa_encrypt(void)
ok (result, "%08x\n", GetLastError());
if (!result) return;
+ dwVal = 0xdeadbeef;
+ dwLen = sizeof(DWORD);
+ result = CryptGetKeyParam(hRSAKey, KP_PERMISSIONS, (BYTE*)&dwVal, &dwLen, 0);
+ ok(result, "%08x\n", GetLastError());
+ ok(dwVal ==
+ (CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_DECRYPT|CRYPT_ENCRYPT) ||
+ broken(dwVal == 0xffffffff), /* Win9x/NT4 */
+ "expected CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_DECRYPT|CRYPT_ENCRYPT,"
+ " got %08x\n", dwVal);
+
+ /* The signature key's public key may also be exported.. */
+ result = CryptExportKey(hRSAKey, 0, PUBLICKEYBLOB, 0, NULL, &dwLen);
+ ok(result, "%08x\n", GetLastError());
+ /* but its private key may not be. */
+ SetLastError(0xdeadbeef);
+ result = CryptExportKey(hRSAKey, 0, PRIVATEKEYBLOB, 0, NULL, &dwLen);
+ ok((!result && GetLastError() == NTE_BAD_KEY_STATE) ||
+ broken(result), /* Win9x/NT4 */
+ "expected NTE_BAD_KEY_STATE, got %08x\n", GetLastError());
+ /* Setting the permissions of the signature key isn't allowed, either. */
+ dwVal |= CRYPT_EXPORT;
+ SetLastError(0xdeadbeef);
+ result = CryptSetKeyParam(hRSAKey, KP_PERMISSIONS, (BYTE *)&dwVal, 0);
+ ok(!result &&
+ (GetLastError() == NTE_BAD_DATA || GetLastError() == NTE_BAD_FLAGS),
+ "expected NTE_BAD_DATA or NTE_BAD_FLAGS, got %08x\n", GetLastError());
+
dwLen = 12;
result = CryptEncrypt(hRSAKey, 0, TRUE, 0, abData, &dwLen, (DWORD)sizeof(abData));
ok (!result && GetLastError() == NTE_BAD_KEY, "%08x\n", GetLastError());
@@ -1557,7 +1631,7 @@ static void test_rsa_encrypt(void)
static void test_import_export(void)
{
- DWORD dwLen, dwDataLen;
+ DWORD dwLen, dwDataLen, dwVal;
HCRYPTKEY hPublicKey;
BOOL result;
ALG_ID algID;
@@ -1585,6 +1659,15 @@ static void test_import_export(void)
ok(result, "failed to get the KP_ALGID from the imported public key\n");
ok(algID == CALG_RSA_KEYX, "Expected CALG_RSA_KEYX, got %x\n", algID);
+ dwVal = 0xdeadbeef;
+ dwDataLen = sizeof(DWORD);
+ result = CryptGetKeyParam(hPublicKey, KP_PERMISSIONS, (BYTE*)&dwVal, &dwDataLen, 0);
+ ok(result, "%08x\n", GetLastError());
+ ok(dwVal ==
+ (CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_DECRYPT|CRYPT_ENCRYPT) ||
+ broken(dwVal == 0xffffffff), /* Win9x/NT4 */
+ "expected CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_DECRYPT|CRYPT_ENCRYPT,"
+ " got %08x\n", dwVal);
result = CryptExportKey(hPublicKey, 0, PUBLICKEYBLOB, 0, emptyKey, &dwLen);
ok(result, "failed to export the fresh imported public key\n");
ok(dwLen == 84, "Expected exported key to be 84 bytes long but got %d bytes.\n",dwLen);
@@ -1950,8 +2033,12 @@ static void test_null_provider(void)
uniquecontainer(container);
todo_wine
{
- ok(dataLen == strlen(container)+1, "Expected a param length of 70, got %d\n", dataLen);
- ok(!strcmp(container, szName), "Wrong container name : %s\n", szName);
+ ok(dataLen == strlen(container)+1 ||
+ broken(dataLen == strlen(szContainer)+1) /* WinME */,
+ "Expected a param length of 70, got %d\n", dataLen);
+ ok(!strcmp(container, szName) ||
+ broken(!strcmp(szName, szContainer)) /* WinME */,
+ "Wrong container name : %s\n", szName);
}
}
result = CryptGetUserKey(prov, AT_KEYEXCHANGE, &key);
@@ -2041,9 +2128,144 @@ static void test_null_provider(void)
}
+static void test_key_permissions(void)
+{
+ HCRYPTKEY hKey1, hKey2;
+ DWORD dwVal, dwLen;
+ BOOL result;
+
+ /* Create keys that are exportable */
+ if (!init_base_environment(CRYPT_EXPORTABLE))
+ return;
+
+ result = CryptGetUserKey(hProv, AT_KEYEXCHANGE, &hKey1);
+ ok (result, "%08x\n", GetLastError());
+ if (!result) return;
+
+ dwVal = 0xdeadbeef;
+ dwLen = sizeof(DWORD);
+ result = CryptGetKeyParam(hKey1, KP_PERMISSIONS, (BYTE*)&dwVal, &dwLen, 0);
+ ok(result, "%08x\n", GetLastError());
+ ok(dwVal ==
+ (CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_EXPORT|CRYPT_DECRYPT|CRYPT_ENCRYPT) ||
+ broken(dwVal == 0xffffffff), /* Win9x/NT4 */
+ "expected CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_EXPORT|CRYPT_DECRYPT|CRYPT_ENCRYPT,"
+ " got %08x\n", dwVal);
+
+ /* The key exchange key's public key may be exported.. */
+ result = CryptExportKey(hKey1, 0, PUBLICKEYBLOB, 0, NULL, &dwLen);
+ ok(result, "%08x\n", GetLastError());
+ /* and its private key may be too. */
+ result = CryptExportKey(hKey1, 0, PRIVATEKEYBLOB, 0, NULL, &dwLen);
+ ok(result, "%08x\n", GetLastError());
+ /* Turning off the key's export permissions is "allowed".. */
+ dwVal &= ~CRYPT_EXPORT;
+ result = CryptSetKeyParam(hKey1, KP_PERMISSIONS, (BYTE *)&dwVal, 0);
+ ok(result ||
+ broken(!result && GetLastError() == NTE_BAD_DATA) || /* W2K */
+ broken(!result && GetLastError() == NTE_BAD_FLAGS), /* Win9x/WinME/NT4 */
+ "%08x\n", GetLastError());
+ /* but it has no effect. */
+ dwVal = 0xdeadbeef;
+ dwLen = sizeof(DWORD);
+ result = CryptGetKeyParam(hKey1, KP_PERMISSIONS, (BYTE*)&dwVal, &dwLen, 0);
+ ok(result, "%08x\n", GetLastError());
+ ok(dwVal ==
+ (CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_EXPORT|CRYPT_DECRYPT|CRYPT_ENCRYPT) ||
+ broken(dwVal == 0xffffffff), /* Win9x/NT4 */
+ "expected CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_EXPORT|CRYPT_DECRYPT|CRYPT_ENCRYPT,"
+ " got %08x\n", dwVal);
+ /* Thus, changing the export flag of the key doesn't affect whether the key
+ * may be exported.
+ */
+ result = CryptExportKey(hKey1, 0, PRIVATEKEYBLOB, 0, NULL, &dwLen);
+ ok(result, "%08x\n", GetLastError());
+
+ result = CryptGetUserKey(hProv, AT_KEYEXCHANGE, &hKey2);
+ ok (result, "%08x\n", GetLastError());
+
+ /* A subsequent get of the same key, into a different handle, also doesn't
+ * show that the permissions have been changed.
+ */
+ dwVal = 0xdeadbeef;
+ dwLen = sizeof(DWORD);
+ result = CryptGetKeyParam(hKey2, KP_PERMISSIONS, (BYTE*)&dwVal, &dwLen, 0);
+ ok(result, "%08x\n", GetLastError());
+ ok(dwVal ==
+ (CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_EXPORT|CRYPT_DECRYPT|CRYPT_ENCRYPT) ||
+ broken(dwVal == 0xffffffff), /* Win9x/NT4 */
+ "expected CRYPT_MAC|CRYPT_WRITE|CRYPT_READ|CRYPT_EXPORT|CRYPT_DECRYPT|CRYPT_ENCRYPT,"
+ " got %08x\n", dwVal);
+
+ CryptDestroyKey(hKey2);
+ CryptDestroyKey(hKey1);
+
+ clean_up_base_environment();
+}
+
+static void test_key_initialization(void)
+{
+ DWORD dwLen;
+ HCRYPTPROV prov1, prov2;
+ HCRYPTKEY hKeyExchangeKey, hSessionKey, hKey;
+ BOOL result;
+ static BYTE abSessionKey[148] = {
+ 0x01, 0x02, 0x00, 0x00, 0x01, 0x68, 0x00, 0x00,
+ 0x00, 0xa4, 0x00, 0x00, 0xb8, 0xa4, 0xdf, 0x5e,
+ 0x9e, 0xb1, 0xbf, 0x85, 0x3d, 0x24, 0x2d, 0x1e,
+ 0x69, 0xb7, 0x67, 0x13, 0x8e, 0x78, 0xf2, 0xdf,
+ 0xc6, 0x69, 0xce, 0x46, 0x7e, 0xf2, 0xf2, 0x33,
+ 0x20, 0x6f, 0xa1, 0xa5, 0x59, 0x83, 0x25, 0xcb,
+ 0x3a, 0xb1, 0x8a, 0x12, 0x63, 0x02, 0x3c, 0xfb,
+ 0x4a, 0xfa, 0xef, 0x8e, 0xf7, 0x29, 0x57, 0xb1,
+ 0x9e, 0xa7, 0xf3, 0x02, 0xfd, 0xca, 0xdf, 0x5a,
+ 0x1f, 0x71, 0xb6, 0x26, 0x09, 0x24, 0x39, 0xda,
+ 0xc0, 0xde, 0x2a, 0x0e, 0xcd, 0x1f, 0xe5, 0xb6,
+ 0x4f, 0x82, 0xa0, 0xa9, 0x90, 0xd3, 0xd9, 0x6a,
+ 0x43, 0x14, 0x2a, 0xf7, 0xac, 0xd5, 0xa0, 0x54,
+ 0x93, 0xc4, 0xb9, 0xe7, 0x24, 0x84, 0x4d, 0x69,
+ 0x5e, 0xcc, 0x2a, 0x32, 0xb5, 0xfb, 0xe4, 0xb4,
+ 0x08, 0xd5, 0x36, 0x58, 0x59, 0x40, 0xfb, 0x29,
+ 0x7f, 0xa7, 0x17, 0x25, 0xc4, 0x0d, 0x78, 0x37,
+ 0x04, 0x8c, 0x49, 0x92
+ };
+
+ /* Like init_base_environment, but doesn't generate new keys, as they'll
+ * be imported instead.
+ */
+ if (!CryptAcquireContext(&prov1, szContainer, szProvider, PROV_RSA_FULL, 0))
+ {
+ result = CryptAcquireContext(&prov1, szContainer, szProvider, PROV_RSA_FULL,
+ CRYPT_NEWKEYSET);
+ ok(result, "%08x\n", GetLastError());
+ }
+ dwLen = (DWORD)sizeof(abPlainPrivateKey);
+ result = CryptImportKey(prov1, abPlainPrivateKey, dwLen, 0, 0, &hKeyExchangeKey);
+
+ dwLen = (DWORD)sizeof(abSessionKey);
+ result = CryptImportKey(prov1, abSessionKey, dwLen, hKeyExchangeKey, 0, &hSessionKey);
+ ok(result, "%08x\n", GetLastError());
+
+ /* Once the key has been imported, subsequently acquiring a context with
+ * the same name will allow retrieving the key.
+ */
+ result = CryptAcquireContext(&prov2, szContainer, szProvider, PROV_RSA_FULL, 0);
+ ok(result, "%08x\n", GetLastError());
+ result = CryptGetUserKey(prov2, AT_KEYEXCHANGE, &hKey);
+ ok(result, "%08x\n", GetLastError());
+ if (result) CryptDestroyKey(hKey);
+ CryptReleaseContext(prov2, 0);
+
+ CryptDestroyKey(hSessionKey);
+ CryptDestroyKey(hKeyExchangeKey);
+ CryptReleaseContext(prov1, 0);
+ CryptAcquireContext(&prov1, szContainer, NULL, PROV_RSA_FULL,
+ CRYPT_DELETEKEYSET);
+}
+
START_TEST(rsaenh)
{
- if (!init_base_environment())
+ if (!init_base_environment(0))
return;
test_prov();
test_gen_random();
@@ -2062,6 +2284,8 @@ START_TEST(rsaenh)
test_import_export();
test_enum_container();
clean_up_base_environment();
+ test_key_permissions();
+ test_key_initialization();
test_schannel_provider();
test_null_provider();
if (!init_aes_environment())
diff --git a/rostests/winetests/schannel/main.c b/rostests/winetests/schannel/main.c
index 814b60a696c..ddfffc45d3f 100644
--- a/rostests/winetests/schannel/main.c
+++ b/rostests/winetests/schannel/main.c
@@ -144,11 +144,13 @@ static void testGetInfo(void)
/* First package: Unified */
status = pTables->GetInfo(&PackageInfo);
ok(status == STATUS_SUCCESS, "status: 0x%x\n", status);
- ok(PackageInfo.fCapabilities == 0x107b3, "fCapabilities: 0x%lx\n",
+ ok(PackageInfo.fCapabilities == 0x107b3, "fCapabilities: 0x%x\n",
PackageInfo.fCapabilities);
ok(PackageInfo.wVersion == 1, "wVersion: %d\n", PackageInfo.wVersion);
ok(PackageInfo.wRPCID == 14, "wRPCID: %d\n", PackageInfo.wRPCID);
- ok(PackageInfo.cbMaxToken == 0x4000, "cbMaxToken: 0x%lx\n",
+ ok(PackageInfo.cbMaxToken == 0x4000 ||
+ PackageInfo.cbMaxToken == 0x6000, /* Vista */
+ "cbMaxToken: 0x%x\n",
PackageInfo.cbMaxToken);
/* Second package: SChannel */
@@ -162,11 +164,11 @@ static void testGetInfo(void)
if (status == STATUS_SUCCESS)
{
- ok(PackageInfo.fCapabilities == 0x107b3, "fCapabilities: 0x%lx\n",
+ ok(PackageInfo.fCapabilities == 0x107b3, "fCapabilities: 0x%x\n",
PackageInfo.fCapabilities);
ok(PackageInfo.wVersion == 1, "wVersion: %d\n", PackageInfo.wVersion);
ok(PackageInfo.wRPCID == 14, "wRPCID: %d\n", PackageInfo.wRPCID);
- ok(PackageInfo.cbMaxToken == 0x4000, "cbMaxToken: 0x%lx\n",
+ ok(PackageInfo.cbMaxToken == 0x4000, "cbMaxToken: 0x%x\n",
PackageInfo.cbMaxToken);
}
}
@@ -175,7 +177,7 @@ START_TEST(main)
{
HMODULE hMod = LoadLibraryA("schannel.dll");
if (!hMod) {
- skip("schannel.dll not found.\n");
+ win_skip("schannel.dll not available\n");
return;
}
@@ -187,7 +189,7 @@ START_TEST(main)
testInitialize();
testGetInfo();
}
- else skip( "schannel functions not found\n" );
+ else win_skip( "schannel functions not found\n" );
FreeLibrary(hMod);
}
diff --git a/rostests/winetests/setupapi/devinst.c b/rostests/winetests/setupapi/devinst.c
index 727e4540c47..1ae0720198e 100644
--- a/rostests/winetests/setupapi/devinst.c
+++ b/rostests/winetests/setupapi/devinst.c
@@ -57,6 +57,9 @@ static BOOL (WINAPI *pSetupDiSetDeviceRegistryPropertyW)(HDEVINFO, PSP_DEVIN
static BOOL (WINAPI *pSetupDiGetDeviceRegistryPropertyA)(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
static BOOL (WINAPI *pSetupDiGetDeviceRegistryPropertyW)(HDEVINFO, PSP_DEVINFO_DATA, DWORD, PDWORD, PBYTE, DWORD, PDWORD);
+/* This is a unique guid for testing purposes */
+static GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04,0x00,0x11,0x95,0x5c,0x2b,0xdb}};
+
static void init_function_pointers(void)
{
hSetupAPI = GetModuleHandleA("setupapi.dll");
@@ -86,8 +89,68 @@ static void init_function_pointers(void)
pSetupDiGetDeviceRegistryPropertyW = (void *)GetProcAddress(hSetupAPI, "SetupDiGetDeviceRegistryPropertyW");
}
+static void change_reg_permissions(const WCHAR *regkey)
+{
+ HKEY hkey;
+ SID_IDENTIFIER_AUTHORITY ident = { SECURITY_WORLD_SID_AUTHORITY };
+ SECURITY_DESCRIPTOR sd;
+ PSID EveryoneSid;
+ PACL pacl = NULL;
+
+ RegOpenKeyExW(HKEY_LOCAL_MACHINE, regkey, 0, WRITE_DAC, &hkey);
+
+ /* Initialize the 'Everyone' sid */
+ AllocateAndInitializeSid(&ident, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &EveryoneSid);
+
+ pacl = HeapAlloc(GetProcessHeap(), 0, 256);
+ InitializeAcl(pacl, 256, ACL_REVISION);
+
+ /* Add 'Full Control' for 'Everyone' */
+ AddAccessAllowedAce(pacl, ACL_REVISION, KEY_ALL_ACCESS, EveryoneSid);
+
+ InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
+
+ SetSecurityDescriptorDacl(&sd, TRUE, pacl, FALSE);
+
+ /* Set the new security on the registry key */
+ RegSetKeySecurity(hkey, DACL_SECURITY_INFORMATION, &sd);
+
+ RegCloseKey(hkey);
+
+ HeapFree(GetProcessHeap(), 0, pacl);
+ if (EveryoneSid)
+ FreeSid(EveryoneSid);
+}
+
+static BOOL remove_device(void)
+{
+ HDEVINFO set;
+ SP_DEVINFO_DATA devInfo = { sizeof(devInfo), { 0 } };
+ BOOL ret;
+
+ SetLastError(0xdeadbeef);
+ set = pSetupDiGetClassDevsA(&guid, NULL, 0, 0);
+ ok(set != INVALID_HANDLE_VALUE, "SetupDiGetClassDevsA failed: %08x\n",
+ GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ok(pSetupDiEnumDeviceInfo(set, 0, &devInfo),
+ "SetupDiEnumDeviceInfo failed: %08x\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = pSetupDiCallClassInstaller(DIF_REMOVE, set, &devInfo);
+ todo_wine
+ ok(ret, "SetupDiCallClassInstaller(DIF_REMOVE...) failed: %08x\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ok(pSetupDiDestroyDeviceInfoList(set),
+ "SetupDiDestroyDeviceInfoList failed: %08x\n", GetLastError());
+
+ return ret;
+}
+
/* RegDeleteTreeW from dlls/advapi32/registry.c */
-LSTATUS WINAPI devinst_RegDeleteTreeW(HKEY hKey, LPCWSTR lpszSubKey)
+static LSTATUS devinst_RegDeleteTreeW(HKEY hKey, LPCWSTR lpszSubKey)
{
LONG ret;
DWORD dwMaxSubkeyLen, dwMaxValueLen;
@@ -153,6 +216,33 @@ cleanup:
return ret;
}
+static void clean_devclass_key(void)
+{
+ static const WCHAR devclass[] = {'S','y','s','t','e','m','\\',
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+ 'C','o','n','t','r','o','l','\\','D','e','v','i','c','e','C','l','a','s','s','e','s','\\',
+ '{','6','a','5','5','b','5','a','4','-','3','f','6','5','-',
+ '1','1','d','b','-','b','7','0','4','-',
+ '0','0','1','1','9','5','5','c','2','b','d','b','}',0};
+ HKEY key;
+ DWORD subkeys;
+
+ /* Check if we have subkeys as Windows 2000 doesn't delete
+ * the keys under the DeviceClasses key after a SetupDiDestroyDeviceInfoList.
+ */
+ RegOpenKeyW(HKEY_LOCAL_MACHINE, devclass, &key);
+ RegQueryInfoKey(key, NULL, NULL, NULL, &subkeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ if (subkeys > 0)
+ {
+ trace("We are most likely on Windows 2000\n");
+ devinst_RegDeleteTreeW(HKEY_LOCAL_MACHINE, devclass);
+ }
+ else
+ {
+ ok(!RegDeleteKeyW(HKEY_LOCAL_MACHINE, devclass),
+ "Couldn't delete deviceclass key\n");
+ }
+}
static void test_SetupDiCreateDeviceInfoListEx(void)
{
@@ -169,7 +259,7 @@ static void test_SetupDiCreateDeviceInfoListEx(void)
error = GetLastError();
if (error == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("SetupDiCreateDeviceInfoListExW is not implemented\n");
+ win_skip("SetupDiCreateDeviceInfoListExW is not implemented\n");
return;
}
ok(devlist == INVALID_HANDLE_VALUE, "SetupDiCreateDeviceInfoListExW failed : %p %d (expected %p)\n", devlist, error, INVALID_HANDLE_VALUE);
@@ -181,7 +271,7 @@ static void test_SetupDiCreateDeviceInfoListEx(void)
error = GetLastError();
ok(devlist == INVALID_HANDLE_VALUE, "SetupDiCreateDeviceInfoListExW failed : %p %d (expected %p)\n", devlist, error, INVALID_HANDLE_VALUE);
- ok(error == ERROR_INVALID_MACHINENAME, "GetLastError returned wrong value : %d, (expected %d)\n", error, ERROR_INVALID_MACHINENAME);
+ ok(error == ERROR_INVALID_MACHINENAME || error == ERROR_MACHINE_UNAVAILABLE, "GetLastError returned wrong value : %d, (expected %d or %d)\n", error, ERROR_INVALID_MACHINENAME, ERROR_MACHINE_UNAVAILABLE);
/* create empty DeviceInfoList */
devlist = pSetupDiCreateDeviceInfoListExW(NULL, NULL, NULL, NULL);
@@ -194,9 +284,6 @@ static void test_SetupDiCreateDeviceInfoListEx(void)
static void test_SetupDiOpenClassRegKeyExA(void)
{
- /* This is a unique guid for testing purposes */
- GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04,
- 0x00,0x11,0x95,0x5c,0x2b,0xdb}};
static const CHAR guidString[] = "{6a55b5a4-3f65-11db-b704-0011955c2bdb}";
HKEY hkey;
@@ -226,35 +313,30 @@ static void test_SetupDiOpenClassRegKeyExA(void)
}
else
trace("failed to create registry key for test\n");
+
+ RegCloseKey(hkey);
}
else
trace("failed to open classes key\n");
}
-static void append_str(char **str, const char *data)
-{
- sprintf(*str, data);
- *str += strlen(*str);
-}
-
static void create_inf_file(LPCSTR filename)
{
- char data[1024];
- char *ptr = data;
DWORD dwNumberOfBytesWritten;
HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
- append_str(&ptr, "[Version]\n");
- append_str(&ptr, "Signature=\"$Chicago$\"\n");
- append_str(&ptr, "Class=Bogus\n");
- append_str(&ptr, "ClassGUID={6a55b5a4-3f65-11db-b704-0011955c2bdb}\n");
- append_str(&ptr, "[ClassInstall32]\n");
- append_str(&ptr, "AddReg=BogusClass.NT.AddReg\n");
- append_str(&ptr, "[BogusClass.NT.AddReg]\n");
- append_str(&ptr, "HKR,,,,\"Wine test devices\"\n");
+ static const char data[] =
+ "[Version]\n"
+ "Signature=\"$Chicago$\"\n"
+ "Class=Bogus\n"
+ "ClassGUID={6a55b5a4-3f65-11db-b704-0011955c2bdb}\n"
+ "[ClassInstall32]\n"
+ "AddReg=BogusClass.NT.AddReg\n"
+ "[BogusClass.NT.AddReg]\n"
+ "HKR,,,,\"Wine test devices\"\n";
- WriteFile(hf, data, ptr - data, &dwNumberOfBytesWritten, NULL);
+ WriteFile(hf, data, sizeof(data) - 1, &dwNumberOfBytesWritten, NULL);
CloseHandle(hf);
}
@@ -280,20 +362,9 @@ static void testInstallClass(void)
'{','6','a','5','5','b','5','a','4','-','3','f','6','5','-',
'1','1','d','b','-','b','7','0','4','-',
'0','0','1','1','9','5','5','c','2','b','d','b','}',0};
- static const CHAR classKey_win9x[] =
- "System\\CurrentControlSet\\Services\\Class\\"
- "{6a55b5a4-3f65-11db-b704-0011955c2bdb}";
- static const CHAR bogus_win9x[] =
- "System\\CurrentControlSet\\Services\\Class\\Bogus";
char tmpfile[MAX_PATH];
BOOL ret;
- HKEY hkey;
- if (!pSetupDiInstallClassA)
- {
- skip("No SetupDiInstallClassA\n");
- return;
- }
tmpfile[0] = '.';
tmpfile[1] = '\\';
get_temp_filename(tmpfile + 2);
@@ -316,21 +387,10 @@ static void testInstallClass(void)
*/
ret = pSetupDiInstallClassA(NULL, tmpfile, 0, NULL);
ok(ret, "SetupDiInstallClassA failed: %08x\n", GetLastError());
- if (!RegOpenKeyA(HKEY_LOCAL_MACHINE, classKey_win9x, &hkey))
- {
- /* We are on win9x */
- RegCloseKey(hkey);
- ok(!RegDeleteKeyA(HKEY_LOCAL_MACHINE, classKey_win9x),
- "Couldn't delete win9x classkey\n");
- ok(!RegDeleteKeyA(HKEY_LOCAL_MACHINE, bogus_win9x),
- "Couldn't delete win9x bogus services class\n");
- }
- else
- {
- /* NT4 and above */
- ok(!RegDeleteKeyW(HKEY_LOCAL_MACHINE, classKey),
- "Couldn't delete NT classkey\n");
- }
+
+ ok(!RegDeleteKeyW(HKEY_LOCAL_MACHINE, classKey),
+ "Couldn't delete classkey\n");
+
DeleteFile(tmpfile);
}
@@ -338,19 +398,20 @@ static void testCreateDeviceInfo(void)
{
BOOL ret;
HDEVINFO set;
- GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04,
- 0x00,0x11,0x95,0x5c,0x2b,0xdb}};
+ HKEY key;
+ LONG res;
+ static const WCHAR bogus[] = {'S','y','s','t','e','m','\\',
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+ 'E','n','u','m','\\','R','o','o','t','\\',
+ 'L','E','G','A','C','Y','_','B','O','G','U','S',0};
- if (!pSetupDiCreateDeviceInfoList || !pSetupDiEnumDeviceInfo ||
- !pSetupDiDestroyDeviceInfoList || !pSetupDiCreateDeviceInfoA)
- {
- skip("No SetupDiCreateDeviceInfoA\n");
- return;
- }
SetLastError(0xdeadbeef);
ret = pSetupDiCreateDeviceInfoA(NULL, NULL, NULL, NULL, NULL, 0, NULL);
- ok(!ret && GetLastError() == ERROR_INVALID_DEVINST_NAME,
- "Expected ERROR_INVALID_DEVINST_NAME, got %08x\n", GetLastError());
+ ok(!ret, "Expected failure\n");
+ ok(GetLastError() == ERROR_INVALID_DEVINST_NAME ||
+ GetLastError() == ERROR_INVALID_PARAMETER /* NT4 */,
+ "Unexpected last error, got %08x\n", GetLastError());
+
SetLastError(0xdeadbeef);
ret = pSetupDiCreateDeviceInfoA(NULL, "Root\\LEGACY_BOGUS\\0000", NULL,
NULL, NULL, 0, NULL);
@@ -363,16 +424,52 @@ static void testCreateDeviceInfo(void)
{
SP_DEVINFO_DATA devInfo = { 0 };
DWORD i;
+ static GUID deadbeef =
+ {0xdeadbeef, 0xdead, 0xbeef, {0xde,0xad,0xbe,0xef,0xde,0xad,0xbe,0xef}};
+ LONG res;
+ HKEY key;
+ static const WCHAR bogus0000[] = {'S','y','s','t','e','m','\\',
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+ 'E','n','u','m','\\','R','o','o','t','\\',
+ 'L','E','G','A','C','Y','_','B','O','G','U','S','\\','0','0','0','0',0};
+ /* So we know we have a clean start */
+ res = RegOpenKeyW(HKEY_LOCAL_MACHINE, bogus0000, &key);
+ ok(res != ERROR_SUCCESS, "Expected key to not exist\n");
+ /* No GUID given */
SetLastError(0xdeadbeef);
ret = pSetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", NULL,
NULL, NULL, 0, NULL);
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %08x\n", GetLastError());
+ /* Even though NT4 fails it still adds some stuff to the registry that
+ * can't be deleted via normal setupapi functions. As the registry is written
+ * by a different user (SYSTEM) we have to do some magic to get rid of the key
+ */
+ if (!RegOpenKeyW(HKEY_LOCAL_MACHINE, bogus0000, &key))
+ {
+ trace("NT4 created a bogus key on failure, will be removed now\n");
+ change_reg_permissions(bogus0000);
+ ok(!RegDeleteKeyW(HKEY_LOCAL_MACHINE, bogus0000),
+ "Could not delete LEGACY_BOGUS\\0000 key\n");
+ }
+ /* We can't add device information to the set with a different GUID */
+ SetLastError(0xdeadbeef);
+ ret = pSetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000",
+ &deadbeef, NULL, NULL, 0, NULL);
+ ok(!ret && GetLastError() == ERROR_CLASS_MISMATCH,
+ "Expected ERROR_CLASS_MISMATCH, got %08x\n", GetLastError());
+ if (!RegOpenKeyW(HKEY_LOCAL_MACHINE, bogus0000, &key))
+ {
+ trace("NT4 created a bogus key on failure, will be removed now\n");
+ change_reg_permissions(bogus0000);
+ ok(!RegDeleteKeyW(HKEY_LOCAL_MACHINE, bogus0000),
+ "Could not delete LEGACY_BOGUS\\0000 key\n");
+ }
/* Finally, with all three required parameters, this succeeds: */
ret = pSetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", &guid,
NULL, NULL, 0, NULL);
- ok(ret, "pSetupDiCreateDeviceInfoA failed: %08x\n", GetLastError());
+ ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError());
/* This fails because the device ID already exists.. */
SetLastError(0xdeadbeef);
ret = pSetupDiCreateDeviceInfoA(set, "Root\\LEGACY_BOGUS\\0000", &guid,
@@ -385,10 +482,10 @@ static void testCreateDeviceInfo(void)
DICD_GENERATE_ID, &devInfo);
ok(!ret && GetLastError() == ERROR_INVALID_USER_BUFFER,
"Expected ERROR_INVALID_USER_BUFFER, got %08x\n", GetLastError());
+ /* and this finally succeeds. */
devInfo.cbSize = sizeof(devInfo);
ret = pSetupDiCreateDeviceInfoA(set, "LEGACY_BOGUS", &guid, NULL, NULL,
DICD_GENERATE_ID, &devInfo);
- /* and this finally succeeds. */
ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError());
/* There were three devices added, however - the second failure just
* resulted in the SP_DEVINFO_DATA not getting copied.
@@ -402,30 +499,59 @@ static void testCreateDeviceInfo(void)
"SetupDiEnumDeviceInfo failed: %08x\n", GetLastError());
pSetupDiDestroyDeviceInfoList(set);
}
+
+ /* The bogus registry key shouldn't be there after this test. The only
+ * reasons this key would still be present:
+ *
+ * - We are running on Wine which has to be fixed
+ * - We have leftovers from old tests
+ */
+ res = RegOpenKeyW(HKEY_LOCAL_MACHINE, bogus, &key);
+ todo_wine
+ ok(res == ERROR_FILE_NOT_FOUND, "Expected key to not exist\n");
+ if (res == ERROR_SUCCESS)
+ {
+ DWORD subkeys;
+
+ /* Check if we have subkeys */
+ RegQueryInfoKey(key, NULL, NULL, NULL, &subkeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+ if (subkeys > 0)
+ {
+ int i;
+
+ /* Leftovers from old tests */
+ trace("Going to remove %d devices\n", subkeys);
+ for (i = 0; i < subkeys; i++)
+ {
+ BOOL ret;
+
+ ret = remove_device();
+ ok(ret, "Expected a device to be removed\n");
+ }
+ }
+ else
+ {
+ /* Wine doesn't delete the bogus key itself currently */
+ trace("We are most likely on Wine\n");
+ RegDeleteKeyW(HKEY_LOCAL_MACHINE, bogus);
+ }
+ }
}
static void testGetDeviceInstanceId(void)
{
BOOL ret;
HDEVINFO set;
- GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04,
- 0x00,0x11,0x95,0x5c,0x2b,0xdb}};
SP_DEVINFO_DATA devInfo = { 0 };
- if (!pSetupDiCreateDeviceInfoList || !pSetupDiDestroyDeviceInfoList ||
- !pSetupDiCreateDeviceInfoA || !pSetupDiGetDeviceInstanceIdA)
- {
- skip("No SetupDiGetDeviceInstanceIdA\n");
- return;
- }
SetLastError(0xdeadbeef);
ret = pSetupDiGetDeviceInstanceIdA(NULL, NULL, NULL, 0, NULL);
ok(!ret && GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLEHANDLE, got %08x\n", GetLastError());
+ "Expected ERROR_INVALID_HANDLE, got %08x\n", GetLastError());
SetLastError(0xdeadbeef);
ret = pSetupDiGetDeviceInstanceIdA(NULL, &devInfo, NULL, 0, NULL);
ok(!ret && GetLastError() == ERROR_INVALID_HANDLE,
- "Expected ERROR_INVALID_HANDLEHANDLE, got %08x\n", GetLastError());
+ "Expected ERROR_INVALID_HANDLE, got %08x\n", GetLastError());
set = pSetupDiCreateDeviceInfoList(&guid, NULL);
ok(set != NULL, "SetupDiCreateDeviceInfoList failed: %08x\n",
GetLastError());
@@ -469,7 +595,8 @@ static void testGetDeviceInstanceId(void)
ret = pSetupDiGetDeviceInstanceIdA(set, &devInfo, instanceID,
sizeof(instanceID), NULL);
ok(ret, "SetupDiGetDeviceInstanceIdA failed: %08x\n", GetLastError());
- ok(!lstrcmpA(instanceID, "ROOT\\LEGACY_BOGUS\\0001"),
+ /* NT4 returns 'Root' and W2K and above 'ROOT' */
+ ok(!lstrcmpiA(instanceID, "ROOT\\LEGACY_BOGUS\\0001"),
"Unexpected instance ID %s\n", instanceID);
pSetupDiDestroyDeviceInfoList(set);
}
@@ -478,21 +605,12 @@ static void testGetDeviceInstanceId(void)
static void testRegisterDeviceInfo(void)
{
BOOL ret;
- GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04,
- 0x00,0x11,0x95,0x5c,0x2b,0xdb}};
HDEVINFO set;
- if (!pSetupDiCreateDeviceInfoList || !pSetupDiDestroyDeviceInfoList ||
- !pSetupDiRegisterDeviceInfo)
- {
- skip("No SetupDiRegisterDeviceInfo\n");
- return;
- }
SetLastError(0xdeadbeef);
ret = pSetupDiRegisterDeviceInfo(NULL, NULL, 0, NULL, NULL, NULL);
ok(!ret && GetLastError() == ERROR_INVALID_HANDLE,
"Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
- ret = pSetupDiRegisterDeviceInfo(NULL, NULL, 0, NULL, NULL, NULL);
set = pSetupDiCreateDeviceInfoList(&guid, NULL);
ok(set != NULL, "SetupDiCreateDeviceInfoList failed: %d\n", GetLastError());
if (set)
@@ -524,8 +642,7 @@ static void testRegisterDeviceInfo(void)
ok(ret, "SetupDiCreateDeviceInfoA failed: %d\n", GetLastError());
}
/* FIXME: On Win2K+ systems, this is now persisted to registry in
- * HKLM\System\CCS\Enum\USB\Bogus\0000. I don't check because the
- * Win9x location is different.
+ * HKLM\System\CCS\Enum\USB\Bogus\0000.
* FIXME: the key also becomes undeletable. How to get rid of it?
*/
pSetupDiDestroyDeviceInfoList(set);
@@ -535,15 +652,22 @@ static void testRegisterDeviceInfo(void)
static void testCreateDeviceInterface(void)
{
BOOL ret;
- GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04,
- 0x00,0x11,0x95,0x5c,0x2b,0xdb}};
HDEVINFO set;
+ HKEY key;
+ static const WCHAR bogus[] = {'S','y','s','t','e','m','\\',
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+ 'E','n','u','m','\\','R','o','o','t','\\',
+ 'L','E','G','A','C','Y','_','B','O','G','U','S',0};
+ static const WCHAR devclass[] = {'S','y','s','t','e','m','\\',
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+ 'C','o','n','t','r','o','l','\\','D','e','v','i','c','e','C','l','a','s','s','e','s','\\',
+ '{','6','a','5','5','b','5','a','4','-','3','f','6','5','-',
+ '1','1','d','b','-','b','7','0','4','-',
+ '0','0','1','1','9','5','5','c','2','b','d','b','}',0};
- if (!pSetupDiCreateDeviceInfoList || !pSetupDiDestroyDeviceInfoList ||
- !pSetupDiCreateDeviceInfoA || !pSetupDiCreateDeviceInterfaceA ||
- !pSetupDiEnumDeviceInterfaces)
+ if (!pSetupDiCreateDeviceInterfaceA || !pSetupDiEnumDeviceInterfaces)
{
- skip("No SetupDiCreateDeviceInterfaceA\n");
+ win_skip("SetupDiCreateDeviceInterfaceA and/or SetupDiEnumDeviceInterfaces are not available\n");
return;
}
SetLastError(0xdeadbeef);
@@ -601,22 +725,46 @@ static void testCreateDeviceInterface(void)
ok(i == 2, "expected 2 interfaces, got %d\n", i);
ok(GetLastError() == ERROR_NO_MORE_ITEMS,
"SetupDiEnumDeviceInterfaces failed: %08x\n", GetLastError());
- pSetupDiDestroyDeviceInfoList(set);
+ ret = pSetupDiDestroyDeviceInfoList(set);
+ ok(ret, "SetupDiDestroyDeviceInfoList failed: %08x\n", GetLastError());
+
+ /* Cleanup */
+ /* FIXME: On Wine we still have the bogus entry in Enum\Root and
+ * subkeys, as well as the deviceclass key with subkeys.
+ * Only clean the deviceclass key once Wine if fixed.
+ */
+ if (!RegOpenKeyW(HKEY_LOCAL_MACHINE, bogus, &key))
+ {
+ /* Wine doesn't delete the information currently */
+ trace("We are most likely on Wine\n");
+ devinst_RegDeleteTreeW(HKEY_LOCAL_MACHINE, bogus);
+ devinst_RegDeleteTreeW(HKEY_LOCAL_MACHINE, devclass);
+ }
+ else
+ {
+ clean_devclass_key();
+ }
}
}
static void testGetDeviceInterfaceDetail(void)
{
BOOL ret;
- GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04,
- 0x00,0x11,0x95,0x5c,0x2b,0xdb}};
HDEVINFO set;
+ static const WCHAR bogus[] = {'S','y','s','t','e','m','\\',
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+ 'E','n','u','m','\\','R','o','o','t','\\',
+ 'L','E','G','A','C','Y','_','B','O','G','U','S',0};
+ static const WCHAR devclass[] = {'S','y','s','t','e','m','\\',
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+ 'C','o','n','t','r','o','l','\\','D','e','v','i','c','e','C','l','a','s','s','e','s','\\',
+ '{','6','a','5','5','b','5','a','4','-','3','f','6','5','-',
+ '1','1','d','b','-','b','7','0','4','-',
+ '0','0','1','1','9','5','5','c','2','b','d','b','}',0};
- if (!pSetupDiCreateDeviceInfoList || !pSetupDiDestroyDeviceInfoList ||
- !pSetupDiCreateDeviceInfoA || !pSetupDiCreateDeviceInterfaceA ||
- !pSetupDiGetDeviceInterfaceDetailA)
+ if (!pSetupDiCreateDeviceInterfaceA || !pSetupDiGetDeviceInterfaceDetailA)
{
- skip("No SetupDiGetDeviceInterfaceDetailA\n");
+ win_skip("SetupDiCreateDeviceInterfaceA and/or SetupDiGetDeviceInterfaceDetailA are not available\n");
return;
}
SetLastError(0xdeadbeef);
@@ -631,6 +779,7 @@ static void testGetDeviceInterfaceDetail(void)
SP_DEVICE_INTERFACE_DATA interfaceData = { sizeof(interfaceData),
{ 0 } };
DWORD size = 0;
+ HKEY key;
SetLastError(0xdeadbeef);
ret = pSetupDiGetDeviceInterfaceDetailA(set, NULL, NULL, 0, NULL,
@@ -663,10 +812,12 @@ static void testGetDeviceInterfaceDetail(void)
{
static const char path[] =
"\\\\?\\root#legacy_bogus#0000#{6a55b5a4-3f65-11db-b704-0011955c2bdb}";
+ static const char path_w2k[] =
+ "\\\\?\\root#legacy_bogus#0000#{6a55b5a4-3f65-11db-b704-0011955c2bdb}\\";
LPBYTE buf = HeapAlloc(GetProcessHeap(), 0, size);
SP_DEVICE_INTERFACE_DETAIL_DATA_A *detail =
(SP_DEVICE_INTERFACE_DETAIL_DATA_A *)buf;
- DWORD expectedsize = offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath) + sizeof(WCHAR)*(1 + strlen(path));
+ DWORD expectedsize = FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA_W, DevicePath) + sizeof(WCHAR)*(1 + strlen(path));
detail->cbSize = 0;
SetLastError(0xdeadbeef);
@@ -682,33 +833,42 @@ static void testGetDeviceInterfaceDetail(void)
"Expected ERROR_INVALID_USER_BUFFER, got %08x\n", GetLastError());
detail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_A);
SetLastError(0xdeadbeef);
- ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData, detail,
- size, &size, NULL);
- ok(!ret && GetLastError() == ERROR_INVALID_USER_BUFFER,
- "Expected ERROR_INVALID_USER_BUFFER, got %08x\n", GetLastError());
- /* Windows 2000 and up check for the exact size. Win9x returns ERROR_INVALID_PARAMETER
- * on every call (so doesn't get here) and NT4 doesn't have this function.
- */
- detail->cbSize = FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA_A, DevicePath[1]);
ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData, detail,
size, &size, NULL);
ok(ret, "SetupDiGetDeviceInterfaceDetailA failed: %d\n",
GetLastError());
- ok(!lstrcmpiA(path, detail->DevicePath), "Unexpected path %s\n",
- detail->DevicePath);
+ ok(!lstrcmpiA(path, detail->DevicePath) ||
+ !lstrcmpiA(path_w2k, detail->DevicePath), "Unexpected path %s\n",
+ detail->DevicePath);
/* Check SetupDiGetDeviceInterfaceDetailW */
- if (pSetupDiGetDeviceInterfaceDetailW)
- {
- ret = pSetupDiGetDeviceInterfaceDetailW(set, &interfaceData, NULL, 0, &size, NULL);
- ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Expected ERROR_INSUFFICIENT_BUFFER, got error code: %d\n", GetLastError());
- ok(expectedsize == size, "SetupDiGetDeviceInterfaceDetailW returned wrong reqsize: expected %d, got %d\n", expectedsize, size);
- }
- else
- skip("SetupDiGetDeviceInterfaceDetailW is not available\n");
+ ret = pSetupDiGetDeviceInterfaceDetailW(set, &interfaceData, NULL, 0, &size, NULL);
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+ "Expected ERROR_INSUFFICIENT_BUFFER, got error code: %d\n", GetLastError());
+ ok(expectedsize == size ||
+ (expectedsize + sizeof(WCHAR)) == size /* W2K adds a backslash */,
+ "SetupDiGetDeviceInterfaceDetailW returned wrong reqsize, got %d\n",
+ size);
HeapFree(GetProcessHeap(), 0, buf);
}
pSetupDiDestroyDeviceInfoList(set);
+
+ /* Cleanup */
+ /* FIXME: On Wine we still have the bogus entry in Enum\Root and
+ * subkeys, as well as the deviceclass key with subkeys.
+ * Only do the RegDeleteKey, once Wine is fixed.
+ */
+ if (!RegOpenKeyW(HKEY_LOCAL_MACHINE, bogus, &key))
+ {
+ /* Wine doesn't delete the information currently */
+ trace("We are most likely on Wine\n");
+ devinst_RegDeleteTreeW(HKEY_LOCAL_MACHINE, bogus);
+ devinst_RegDeleteTreeW(HKEY_LOCAL_MACHINE, devclass);
+ }
+ else
+ {
+ clean_devclass_key();
+ }
}
}
@@ -720,33 +880,46 @@ static void testDevRegKey(void)
'{','6','a','5','5','b','5','a','4','-','3','f','6','5','-',
'1','1','d','b','-','b','7','0','4','-',
'0','0','1','1','9','5','5','c','2','b','d','b','}',0};
+ static const WCHAR bogus[] = {'S','y','s','t','e','m','\\',
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+ 'E','n','u','m','\\','R','o','o','t','\\',
+ 'L','E','G','A','C','Y','_','B','O','G','U','S',0};
BOOL ret;
- GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04,
- 0x00,0x11,0x95,0x5c,0x2b,0xdb}};
HDEVINFO set;
+ HKEY key = NULL;
+ BOOL classKeyCreated;
+
+ SetLastError(0xdeadbeef);
+ key = pSetupDiCreateDevRegKeyW(NULL, NULL, 0, 0, 0, NULL, NULL);
+ ok(key == INVALID_HANDLE_VALUE,
+ "Expected INVALID_HANDLE_VALUE, got %p\n", key);
+ ok(GetLastError() == ERROR_INVALID_HANDLE,
+ "Expected ERROR_INVALID_HANDLE, got %08x\n", GetLastError());
- if (!pSetupDiCreateDeviceInfoList || !pSetupDiDestroyDeviceInfoList ||
- !pSetupDiCreateDeviceInfoA || !pSetupDiOpenDevRegKey ||
- !pSetupDiRegisterDeviceInfo || !pSetupDiCreateDevRegKeyW ||
- !pSetupDiCallClassInstaller)
- {
- skip("No SetupDiOpenDevRegKey\n");
- return;
- }
set = pSetupDiCreateDeviceInfoList(&guid, NULL);
ok(set != NULL, "SetupDiCreateDeviceInfoList failed: %d\n", GetLastError());
if (set)
{
SP_DEVINFO_DATA devInfo = { sizeof(devInfo), { 0 } };
- HKEY key = INVALID_HANDLE_VALUE;
+ LONG res;
+ /* The device info key shouldn't be there */
+ res = RegOpenKeyW(HKEY_LOCAL_MACHINE, bogus, &key);
+ ok(res != ERROR_SUCCESS, "Expected key to not exist\n");
+ RegCloseKey(key);
+ /* Create the device information */
ret = pSetupDiCreateDeviceInfoA(set, "ROOT\\LEGACY_BOGUS\\0000", &guid,
NULL, NULL, 0, &devInfo);
ok(ret, "SetupDiCreateDeviceInfoA failed: %08x\n", GetLastError());
+ /* The device info key should have been created */
+ ok(!RegOpenKeyW(HKEY_LOCAL_MACHINE, bogus, &key),
+ "Expected registry key to exist\n");
+ RegCloseKey(key);
SetLastError(0xdeadbeef);
key = pSetupDiOpenDevRegKey(NULL, NULL, 0, 0, 0, 0);
- ok(key == INVALID_HANDLE_VALUE &&
- GetLastError() == ERROR_INVALID_HANDLE,
+ ok(!key || key == INVALID_HANDLE_VALUE,
+ "Expected INVALID_HANDLE_VALUE or a NULL key (NT4)\n");
+ ok(GetLastError() == ERROR_INVALID_HANDLE,
"Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
SetLastError(0xdeadbeef);
key = pSetupDiOpenDevRegKey(set, NULL, 0, 0, 0, 0);
@@ -785,46 +958,102 @@ static void testDevRegKey(void)
todo_wine
ok(key == INVALID_HANDLE_VALUE &&
GetLastError() == ERROR_KEY_DOES_NOT_EXIST,
- "Expected ERROR_KEY_DOES_NOT_EXIST_EXIST, got %08x\n", GetLastError());
+ "Expected ERROR_KEY_DOES_NOT_EXIST, got %08x\n", GetLastError());
SetLastError(0xdeadbeef);
key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0,
DIREG_DEV, 0);
todo_wine
ok(key == INVALID_HANDLE_VALUE &&
GetLastError() == ERROR_KEY_DOES_NOT_EXIST,
- "Expected ERROR_KEY_DOES_NOT_EXIST_EXIST, got %08x\n", GetLastError());
+ "Expected ERROR_KEY_DOES_NOT_EXIST, got %08x\n", GetLastError());
SetLastError(0xdeadbeef);
+ /* The class key shouldn't be there */
+ res = RegOpenKeyW(HKEY_LOCAL_MACHINE, classKey, &key);
+ todo_wine
+ ok(res != ERROR_SUCCESS, "Expected key to not exist\n");
+ RegCloseKey(key);
+ /* Create the device reg key */
key = pSetupDiCreateDevRegKeyW(set, &devInfo, DICS_FLAG_GLOBAL, 0,
DIREG_DRV, NULL, NULL);
- ok(key != INVALID_HANDLE_VALUE, "SetupDiCreateDevRegKey failed: %08x\n",
- GetLastError());
- RegCloseKey(key);
- SetLastError(0xdeadbeef);
- key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0,
- DIREG_DRV, 0);
+ /* Vista and higher don't actually create the key */
+ ok(key != INVALID_HANDLE_VALUE || GetLastError() == ERROR_KEY_DOES_NOT_EXIST,
+ "SetupDiCreateDevRegKey failed: %08x\n", GetLastError());
+ if (key != INVALID_HANDLE_VALUE)
+ {
+ classKeyCreated = TRUE;
+ RegCloseKey(key);
+ /* The class key should have been created */
+ ok(!RegOpenKeyW(HKEY_LOCAL_MACHINE, classKey, &key),
+ "Expected registry key to exist\n");
+ RegCloseKey(key);
+ SetLastError(0xdeadbeef);
+ key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0,
+ DIREG_DRV, 0);
+ todo_wine
+ ok(key == INVALID_HANDLE_VALUE &&
+ (GetLastError() == ERROR_INVALID_DATA ||
+ GetLastError() == ERROR_ACCESS_DENIED), /* win2k3 */
+ "Expected ERROR_INVALID_DATA or ERROR_ACCESS_DENIED, got %08x\n", GetLastError());
+ key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0,
+ DIREG_DRV, KEY_READ);
+ ok(key != INVALID_HANDLE_VALUE, "SetupDiOpenDevRegKey failed: %08x\n",
+ GetLastError());
+ pSetupDiDestroyDeviceInfoList(set);
+ }
+ else
+ classKeyCreated = FALSE;
+
+ /* Cleanup */
+ ret = remove_device();
todo_wine
- ok(key == INVALID_HANDLE_VALUE &&
- GetLastError() == ERROR_INVALID_DATA,
- "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError());
- key = pSetupDiOpenDevRegKey(set, &devInfo, DICS_FLAG_GLOBAL, 0,
- DIREG_DRV, KEY_READ);
- ok(key != INVALID_HANDLE_VALUE, "SetupDiOpenDevRegKey failed: %08x\n",
- GetLastError());
- ret = pSetupDiCallClassInstaller(DIF_REMOVE, set, &devInfo);
- pSetupDiDestroyDeviceInfoList(set);
+ ok(ret, "Expected the device to be removed: %08x\n", GetLastError());
+
+ /* FIXME: Only do the RegDeleteKey, once Wine is fixed */
+ if (!ret)
+ {
+ /* Wine doesn't delete the information currently */
+ trace("We are most likely on Wine\n");
+ devinst_RegDeleteTreeW(HKEY_LOCAL_MACHINE, bogus);
+ devinst_RegDeleteTreeW(HKEY_LOCAL_MACHINE, classKey);
+ }
+ else if (classKeyCreated)
+ {
+ /* There should only be a class key entry, so a simple
+ * RegDeleteKey should work
+ *
+ * This could fail if it's the first time for this new test
+ * after running the old tests.
+ */
+ ok(!RegDeleteKeyW(HKEY_LOCAL_MACHINE, classKey),
+ "Couldn't delete classkey\n");
+ }
}
- devinst_RegDeleteTreeW(HKEY_LOCAL_MACHINE, classKey);
}
static void testRegisterAndGetDetail(void)
{
HDEVINFO set;
BOOL ret;
- GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04,
- 0x00,0x11,0x95,0x5c,0x2b,0xdb}};
SP_DEVINFO_DATA devInfo = { sizeof(SP_DEVINFO_DATA), { 0 } };
SP_DEVICE_INTERFACE_DATA interfaceData = { sizeof(interfaceData), { 0 } };
DWORD dwSize = 0;
+ static const WCHAR bogus[] = {'S','y','s','t','e','m','\\',
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+ 'E','n','u','m','\\','R','o','o','t','\\',
+ 'L','E','G','A','C','Y','_','B','O','G','U','S',0};
+ static const WCHAR devclass[] = {'S','y','s','t','e','m','\\',
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+ 'C','o','n','t','r','o','l','\\','D','e','v','i','c','e','C','l','a','s','s','e','s','\\',
+ '{','6','a','5','5','b','5','a','4','-','3','f','6','5','-',
+ '1','1','d','b','-','b','7','0','4','-',
+ '0','0','1','1','9','5','5','c','2','b','d','b','}',0};
+
+ if (!pSetupDiCreateDeviceInterfaceA || !pSetupDiEnumDeviceInterfaces ||
+ !pSetupDiGetDeviceInterfaceDetailA)
+ {
+ win_skip("Needed functions are not available\n");
+ return;
+ }
SetLastError(0xdeadbeef);
set = pSetupDiGetClassDevsA(&guid, NULL, 0, DIGCF_ALLCLASSES);
@@ -860,30 +1089,53 @@ static void testRegisterAndGetDetail(void)
{
static const char path[] =
"\\\\?\\root#legacy_bogus#0000#{6a55b5a4-3f65-11db-b704-0011955c2bdb}";
+ static const char path_w2k[] =
+ "\\\\?\\root#legacy_bogus#0000#{6a55b5a4-3f65-11db-b704-0011955c2bdb}\\";
PSP_DEVICE_INTERFACE_DETAIL_DATA_A detail = NULL;
- detail = (PSP_DEVICE_INTERFACE_DETAIL_DATA_A)HeapAlloc(GetProcessHeap(), 0, dwSize);
+ detail = HeapAlloc(GetProcessHeap(), 0, dwSize);
if (detail)
{
- detail->cbSize = offsetof(SP_DEVICE_INTERFACE_DETAIL_DATA_A, DevicePath) + sizeof(char);
+ detail->cbSize = sizeof(*detail);
SetLastError(0xdeadbeef);
ret = pSetupDiGetDeviceInterfaceDetailA(set, &interfaceData,
detail, dwSize, &dwSize, NULL);
ok(ret, "SetupDiGetDeviceInterfaceDetailA failed: %08x\n", GetLastError());
- ok(!lstrcmpiA(path, detail->DevicePath), "Unexpected path %s\n",
- detail->DevicePath);
+ /* FIXME: This one only worked because old data wasn't removed properly. As soon
+ * as all the tests are cleaned up correctly this has to be (or should be) fixed
+ */
+ todo_wine
+ ok(!lstrcmpiA(path, detail->DevicePath) ||
+ !lstrcmpiA(path_w2k, detail->DevicePath), "Unexpected path %s\n",
+ detail->DevicePath);
HeapFree(GetProcessHeap(), 0, detail);
}
}
pSetupDiDestroyDeviceInfoList(set);
+
+ /* Cleanup */
+ ret = remove_device();
+ todo_wine
+ ok(ret, "Expected the device to be removed: %08x\n", GetLastError());
+
+ /* FIXME: Only do the RegDeleteKey, once Wine is fixed */
+ if (!ret)
+ {
+ /* Wine doesn't delete the information currently */
+ trace("We are most likely on Wine\n");
+ devinst_RegDeleteTreeW(HKEY_LOCAL_MACHINE, bogus);
+ devinst_RegDeleteTreeW(HKEY_LOCAL_MACHINE, devclass);
+ }
+ else
+ {
+ clean_devclass_key();
+ }
}
-static void testDeviceRegistryPropertyA()
+static void testDeviceRegistryPropertyA(void)
{
HDEVINFO set;
- GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04,
- 0x00,0x11,0x95,0x5c,0x2b,0xdb}};
SP_DEVINFO_DATA devInfo = { sizeof(SP_DEVINFO_DATA), { 0 } };
CHAR devName[] = "LEGACY_BOGUS";
CHAR friendlyName[] = "Bogus";
@@ -892,6 +1144,10 @@ static void testDeviceRegistryPropertyA()
DWORD size;
DWORD regType;
BOOL ret;
+ LONG res;
+ HKEY key;
+ static const CHAR bogus[] =
+ "System\\CurrentControlSet\\Enum\\Root\\LEGACY_BOGUS";
SetLastError(0xdeadbeef);
set = pSetupDiGetClassDevsA(&guid, NULL, 0, DIGCF_DEVICEINTERFACE);
@@ -914,12 +1170,11 @@ static void testDeviceRegistryPropertyA()
todo_wine
ok(!ret && GetLastError() == ERROR_INVALID_REG_PROPERTY,
"Expected ERROR_INVALID_REG_PROPERTY, got %08x\n", GetLastError());
- SetLastError(0xdeadbeef);
+ /* GetLastError() returns nonsense in win2k3 */
ret = pSetupDiSetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME,
NULL, 0);
todo_wine
- ok(!ret && GetLastError() == ERROR_INVALID_DATA,
- "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError());
+ ok(!ret, "Expected failure, got %d\n", ret);
SetLastError(0xdeadbeef);
ret = pSetupDiSetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME,
(PBYTE)friendlyName, buflen);
@@ -937,11 +1192,10 @@ static void testDeviceRegistryPropertyA()
todo_wine
ok(!ret && GetLastError() == ERROR_INVALID_REG_PROPERTY,
"Expected ERROR_INVALID_REG_PROPERTY, got %08x\n", GetLastError());
- SetLastError(0xdeadbeef);
+ /* GetLastError() returns nonsense in win2k3 */
ret = pSetupDiGetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME,
NULL, NULL, buflen, NULL);
- ok(!ret && GetLastError() == ERROR_INVALID_DATA,
- "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError());
+ ok(!ret, "Expected failure, got %d\n", ret);
SetLastError(0xdeadbeef);
ret = pSetupDiGetDeviceRegistryPropertyA(set, &devInfo, SPDRP_FRIENDLYNAME,
NULL, NULL, 0, &size);
@@ -970,13 +1224,22 @@ static void testDeviceRegistryPropertyA()
ok(!ret && GetLastError() == ERROR_INVALID_DATA,
"Expected ERROR_INVALID_DATA, got %08x\n", GetLastError());
pSetupDiDestroyDeviceInfoList(set);
+
+ res = RegOpenKeyA(HKEY_LOCAL_MACHINE, bogus, &key);
+ todo_wine
+ ok(res == ERROR_FILE_NOT_FOUND, "Expected key to not exist\n");
+ /* FIXME: Remove when Wine is fixed */
+ if (res == ERROR_SUCCESS)
+ {
+ /* Wine doesn't delete the information currently */
+ trace("We are most likely on Wine\n");
+ RegDeleteKeyA(HKEY_LOCAL_MACHINE, bogus);
+ }
}
-static void testDeviceRegistryPropertyW()
+static void testDeviceRegistryPropertyW(void)
{
HDEVINFO set;
- GUID guid = {0x6a55b5a4, 0x3f65, 0x11db, {0xb7,0x04,
- 0x00,0x11,0x95,0x5c,0x2b,0xdb}};
SP_DEVINFO_DATA devInfo = { sizeof(SP_DEVINFO_DATA), { 0 } };
WCHAR devName[] = {'L','E','G','A','C','Y','_','B','O','G','U','S',0};
WCHAR friendlyName[] = {'B','o','g','u','s',0};
@@ -985,14 +1248,15 @@ static void testDeviceRegistryPropertyW()
DWORD size;
DWORD regType;
BOOL ret;
+ LONG res;
+ HKEY key;
+ static const WCHAR bogus[] = {'S','y','s','t','e','m','\\',
+ 'C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t','\\',
+ 'E','n','u','m','\\','R','o','o','t','\\',
+ 'L','E','G','A','C','Y','_','B','O','G','U','S',0};
SetLastError(0xdeadbeef);
set = pSetupDiGetClassDevsW(&guid, NULL, 0, DIGCF_DEVICEINTERFACE);
- if (set == INVALID_HANDLE_VALUE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
- {
- skip("W-functions are not implemented\n");
- return;
- }
ok(set != INVALID_HANDLE_VALUE, "SetupDiGetClassDevsW failed: %08x\n",
GetLastError());
SetLastError(0xdeadbeef);
@@ -1012,12 +1276,11 @@ static void testDeviceRegistryPropertyW()
todo_wine
ok(!ret && GetLastError() == ERROR_INVALID_REG_PROPERTY,
"Expected ERROR_INVALID_REG_PROPERTY, got %08x\n", GetLastError());
- SetLastError(0xdeadbeef);
+ /* GetLastError() returns nonsense in win2k3 */
ret = pSetupDiSetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME,
NULL, 0);
todo_wine
- ok(!ret && GetLastError() == ERROR_INVALID_DATA,
- "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError());
+ ok(!ret, "Expected failure, got %d\n", ret);
SetLastError(0xdeadbeef);
ret = pSetupDiSetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME,
(PBYTE)friendlyName, buflen);
@@ -1035,11 +1298,10 @@ static void testDeviceRegistryPropertyW()
todo_wine
ok(!ret && GetLastError() == ERROR_INVALID_REG_PROPERTY,
"Expected ERROR_INVALID_REG_PROPERTY, got %08x\n", GetLastError());
- SetLastError(0xdeadbeef);
+ /* GetLastError() returns nonsense in win2k3 */
ret = pSetupDiGetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME,
NULL, NULL, buflen, NULL);
- ok(!ret && GetLastError() == ERROR_INVALID_DATA,
- "Expected ERROR_INVALID_DATA, got %08x\n", GetLastError());
+ ok(!ret, "Expected failure, got %d\n", ret);
SetLastError(0xdeadbeef);
ret = pSetupDiGetDeviceRegistryPropertyW(set, &devInfo, SPDRP_FRIENDLYNAME,
NULL, NULL, 0, &size);
@@ -1068,21 +1330,47 @@ static void testDeviceRegistryPropertyW()
ok(!ret && GetLastError() == ERROR_INVALID_DATA,
"Expected ERROR_INVALID_DATA, got %08x\n", GetLastError());
pSetupDiDestroyDeviceInfoList(set);
+
+ res = RegOpenKeyW(HKEY_LOCAL_MACHINE, bogus, &key);
+ todo_wine
+ ok(res == ERROR_FILE_NOT_FOUND, "Expected key to not exist\n");
+ /* FIXME: Remove when Wine is fixed */
+ if (res == ERROR_SUCCESS)
+ {
+ /* Wine doesn't delete the information currently */
+ trace("We are most likely on Wine\n");
+ RegDeleteKeyW(HKEY_LOCAL_MACHINE, bogus);
+ }
}
START_TEST(devinst)
{
- init_function_pointers();
+ HDEVINFO set;
- if (pSetupDiCreateDeviceInfoListExW && pSetupDiDestroyDeviceInfoList)
+ init_function_pointers();
+
+ /* Win9x/WinMe does things totally different so we skip all the tests
+ *
+ * We don't want to exclude NT4 so hence this check.
+ */
+ SetLastError(0xdeadbeef);
+ set = pSetupDiGetClassDevsW(NULL, NULL, 0, 0);
+ if (set == INVALID_HANDLE_VALUE && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ win_skip("Win9x/WinMe has totally different behavior\n");
+ return;
+ }
+
+ if (pSetupDiCreateDeviceInfoListExW)
test_SetupDiCreateDeviceInfoListEx();
else
- skip("SetupDiCreateDeviceInfoListExW and/or SetupDiDestroyDeviceInfoList not available\n");
+ win_skip("SetupDiCreateDeviceInfoListExW is not available\n");
if (pSetupDiOpenClassRegKeyExA)
test_SetupDiOpenClassRegKeyExA();
else
- skip("SetupDiOpenClassRegKeyExA is not available\n");
+ win_skip("SetupDiOpenClassRegKeyExA is not available\n");
+
testInstallClass();
testCreateDeviceInfo();
testGetDeviceInstanceId();
diff --git a/rostests/winetests/setupapi/install.c b/rostests/winetests/setupapi/install.c
index 0044f019e4b..5361238fb3b 100644
--- a/rostests/winetests/setupapi/install.c
+++ b/rostests/winetests/setupapi/install.c
@@ -30,6 +30,7 @@
#include "winreg.h"
#include "winsvc.h"
#include "setupapi.h"
+#include "shlobj.h"
#include "wine/test.h"
@@ -137,6 +138,44 @@ static void test_cmdline(void)
ok(DeleteFile(infwithspaces), "Expected source inf to exist, last error was %d\n", GetLastError());
}
+static const char *cmdline_inf_reg = "[Version]\n"
+ "Signature=\"$Chicago$\"\n"
+ "[DefaultInstall]\n"
+ "DelReg=Del.Settings\n"
+ "[Del.Settings]\n"
+ "HKCU,Software\\Wine\\setupapitest\n";
+
+static void test_registry(void)
+{
+ HKEY key;
+ LONG res;
+ char path[MAX_PATH];
+
+ /* First create a registry structure we would like to be deleted */
+ ok(!RegCreateKeyA(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest\\setupapitest", &key),
+ "Expected RegCreateKeyA to succeed\n");
+
+ /* Doublecheck if the registry key is present */
+ ok(!RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest\\setupapitest", &key),
+ "Expected registry key to exist\n");
+
+ create_inf_file(inffile, cmdline_inf_reg);
+ sprintf(path, "%s\\%s", CURR_DIR, inffile);
+ run_cmdline("DefaultInstall", 128, path);
+
+ /* Check if the registry key is recursively deleted */
+ res = RegOpenKeyA(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest", &key);
+ todo_wine
+ ok(res == ERROR_FILE_NOT_FOUND, "Didn't expect the registry key to exist\n");
+ /* Just in case */
+ if (res == ERROR_SUCCESS)
+ {
+ RegDeleteKeyA(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest\\setupapitest");
+ RegDeleteKeyA(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest");
+ }
+ ok(DeleteFile(inffile), "Expected source inf to exist, last error was %d\n", GetLastError());
+}
+
static void test_install_svc_from(void)
{
char inf[2048];
@@ -151,7 +190,7 @@ static void test_install_svc_from(void)
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);
@@ -249,6 +288,13 @@ static void test_install_svc_from(void)
infhandle = SetupOpenInfFileA(path, NULL, INF_STYLE_WIN4, NULL);
SetLastError(0xdeadbeef);
ret = SetupInstallServicesFromInfSectionA(infhandle, "Winetest.Services", 0);
+ if (!ret && GetLastError() == ERROR_ACCESS_DENIED)
+ {
+ skip("Not enough rights to install the service\n");
+ SetupCloseInfFile(infhandle);
+ DeleteFile(inffile);
+ return;
+ }
ok(ret, "Expected success\n");
ok(GetLastError() == ERROR_SUCCESS,
"Expected ERROR_SUCCESS, got %08x\n", GetLastError());
@@ -302,7 +348,12 @@ static void test_driver_install(void)
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;
+ }
+ else if (!scm_handle && (GetLastError() == ERROR_ACCESS_DENIED))
+ {
+ skip("Not enough rights to install the service\n");
return;
}
CloseServiceHandle(scm_handle);
@@ -344,6 +395,77 @@ static void test_driver_install(void)
DeleteFile(driver);
}
+static void test_profile_items(void)
+{
+ char path[MAX_PATH], commonprogs[MAX_PATH];
+ HMODULE hShell32;
+ BOOL (WINAPI *pSHGetFolderPathA)(HWND hwnd, int nFolder, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
+
+ static const char *inf =
+ "[Version]\n"
+ "Signature=\"$Chicago$\"\n"
+ "[DefaultInstall]\n"
+ "ProfileItems=TestItem,TestItem2,TestGroup\n"
+ "[TestItem]\n"
+ "Name=TestItem\n"
+ "CmdLine=11,,notepad.exe\n"
+ "[TestItem2]\n"
+ "Name=TestItem2\n"
+ "CmdLine=11,,notepad.exe\n"
+ "SubDir=TestDir\n"
+ "[TestGroup]\n"
+ "Name=TestGroup,4\n"
+ ;
+
+ hShell32 = LoadLibraryA("shell32");
+ pSHGetFolderPathA = (void*)GetProcAddress(hShell32, "SHGetFolderPathA");
+ if (!pSHGetFolderPathA)
+ {
+ win_skip("SHGetFolderPathA is not available\n");
+ goto cleanup;
+ }
+
+ if (S_OK != pSHGetFolderPathA(NULL, CSIDL_COMMON_PROGRAMS, NULL, SHGFP_TYPE_CURRENT, commonprogs))
+ {
+ skip("No common program files directory exists\n");
+ goto cleanup;
+ }
+
+ create_inf_file(inffile, inf);
+ sprintf(path, "%s\\%s", CURR_DIR, inffile);
+ run_cmdline("DefaultInstall", 128, path);
+
+ snprintf(path, MAX_PATH, "%s\\TestItem.lnk", commonprogs);
+ if (INVALID_FILE_ATTRIBUTES == GetFileAttributes(path))
+ {
+ win_skip("ProfileItems not implemented on this system\n");
+ }
+ else
+ {
+ snprintf(path, MAX_PATH, "%s\\TestDir", commonprogs);
+ ok(INVALID_FILE_ATTRIBUTES != GetFileAttributes(path), "directory not created\n");
+ snprintf(path, MAX_PATH, "%s\\TestDir\\TestItem2.lnk", commonprogs);
+ ok(INVALID_FILE_ATTRIBUTES != GetFileAttributes(path), "link not created\n");
+ snprintf(path, MAX_PATH, "%s\\TestGroup", commonprogs);
+ ok(INVALID_FILE_ATTRIBUTES != GetFileAttributes(path), "group not created\n");
+ }
+
+ snprintf(path, MAX_PATH, "%s\\TestItem.lnk", commonprogs);
+ DeleteFile(path);
+ snprintf(path, MAX_PATH, "%s\\TestDir\\TestItem2.lnk", commonprogs);
+ DeleteFile(path);
+ snprintf(path, MAX_PATH, "%s\\TestItem2.lnk", commonprogs);
+ DeleteFile(path);
+ snprintf(path, MAX_PATH, "%s\\TestDir", commonprogs);
+ RemoveDirectory(path);
+ snprintf(path, MAX_PATH, "%s\\TestGroup", commonprogs);
+ RemoveDirectory(path);
+
+cleanup:
+ if (hShell32) FreeLibrary(hShell32);
+ DeleteFile(inffile);
+}
+
START_TEST(install)
{
HMODULE hsetupapi = GetModuleHandle("setupapi.dll");
@@ -378,7 +500,7 @@ START_TEST(install)
ok(DeleteFile(inffile), "Expected source inf to exist, last error was %d\n", GetLastError());
}
if (!pInstallHinfSectionW && !pInstallHinfSectionA)
- skip("InstallHinfSectionA and InstallHinfSectionW are not available\n");
+ win_skip("InstallHinfSectionA and InstallHinfSectionW are not available\n");
else
{
/* Set CBT hook to disallow MessageBox creation in current thread */
@@ -386,10 +508,15 @@ START_TEST(install)
assert(hhook != 0);
test_cmdline();
+ test_registry();
test_install_svc_from();
test_driver_install();
UnhookWindowsHookEx(hhook);
+
+ /* We have to run this test after the CBT hook is disabled because
+ ProfileItems needs to create a window on Windows XP. */
+ test_profile_items();
}
SetCurrentDirectory(prev_path);
diff --git a/rostests/winetests/setupapi/misc.c b/rostests/winetests/setupapi/misc.c
index f8750b60154..726d1eb01de 100644
--- a/rostests/winetests/setupapi/misc.c
+++ b/rostests/winetests/setupapi/misc.c
@@ -47,29 +47,22 @@ static BOOL (WINAPI *pSetupGetFileCompressionInfoExA)(PCSTR, PSTR, DWORD, PDWORD
static BOOL (WINAPI *pSetupCopyOEMInfA)(PCSTR, PCSTR, DWORD, DWORD, PSTR, DWORD, PDWORD, PSTR *);
static BOOL (WINAPI *pSetupQueryInfOriginalFileInformationA)(PSP_INF_INFORMATION, UINT, PSP_ALTPLATFORM_INFO, PSP_ORIGINAL_FILE_INFO_A);
-static void append_str(char **str, const char *data)
-{
- sprintf(*str, data);
- *str += strlen(*str);
-}
-
static void create_inf_file(LPCSTR filename)
{
- char data[1024];
- char *ptr = data;
DWORD dwNumberOfBytesWritten;
HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
- append_str(&ptr, "[Version]\n");
- append_str(&ptr, "Signature=\"$Chicago$\"\n");
- append_str(&ptr, "AdvancedINF=2.5\n");
- append_str(&ptr, "[DefaultInstall]\n");
- append_str(&ptr, "RegisterOCXs=RegisterOCXsSection\n");
- append_str(&ptr, "[RegisterOCXsSection]\n");
- append_str(&ptr, "%%11%%\\ole32.dll\n");
+ static const char data[] =
+ "[Version]\n"
+ "Signature=\"$Chicago$\"\n"
+ "AdvancedINF=2.5\n"
+ "[DefaultInstall]\n"
+ "RegisterOCXs=RegisterOCXsSection\n"
+ "[RegisterOCXsSection]\n"
+ "%%11%%\\ole32.dll\n";
- WriteFile(hf, data, ptr - data, &dwNumberOfBytesWritten, NULL);
+ WriteFile(hf, data, sizeof(data) - 1, &dwNumberOfBytesWritten, NULL);
CloseHandle(hf);
}
@@ -114,7 +107,7 @@ static void test_original_file_name(LPCSTR original, LPCSTR dest)
if (!pSetupQueryInfOriginalFileInformationA)
{
- skip("SetupQueryInfOriginalFileInformationA is not available\n");
+ win_skip("SetupQueryInfOriginalFileInformationA is not available\n");
return;
}
@@ -166,8 +159,10 @@ static void test_SetupCopyOEMInf(void)
SetLastError(0xdeadbeef);
res = pSetupCopyOEMInfA("", NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL);
ok(res == FALSE, "Expected FALSE, got %d\n", res);
- ok(GetLastError() == ERROR_FILE_NOT_FOUND,
- "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND ||
+ GetLastError() == ERROR_BAD_PATHNAME || /* Win98 */
+ GetLastError() == ERROR_INVALID_PARAMETER, /* Vista, W2K8 */
+ "Unexpected error : %d\n", GetLastError());
/* try a relative nonexistent SourceInfFileName */
SetLastError(0xdeadbeef);
@@ -191,8 +186,9 @@ static void test_SetupCopyOEMInf(void)
SetLastError(0xdeadbeef);
res = pSetupCopyOEMInfA(toolong, NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL);
ok(res == FALSE, "Expected FALSE, got %d\n", res);
- ok(GetLastError() == ERROR_FILE_NOT_FOUND,
- "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND ||
+ GetLastError() == ERROR_FILENAME_EXCED_RANGE, /* Win98 */
+ "Expected ERROR_FILE_NOT_FOUND or ERROR_FILENAME_EXCED_RANGE, got %d\n", GetLastError());
get_temp_filename(tmpfile);
create_inf_file(tmpfile);
@@ -201,8 +197,20 @@ static void test_SetupCopyOEMInf(void)
SetLastError(0xdeadbeef);
res = pSetupCopyOEMInfA(tmpfile, NULL, 0, SP_COPY_NOOVERWRITE, NULL, 0, NULL, NULL);
ok(res == FALSE, "Expected FALSE, got %d\n", res);
- ok(GetLastError() == ERROR_FILE_NOT_FOUND,
- "Expected ERROR_FILE_NOT_FOUND, got %d\n", GetLastError());
+ if (GetLastError() == ERROR_WRONG_INF_TYPE)
+ {
+ /* FIXME:
+ * Vista needs a [Manufacturer] entry in the inf file. Doing this will give some
+ * popups during the installation though as it also needs a catalog file (signed?).
+ */
+ win_skip("Needs a different inf file on Vista/W2K8\n");
+ DeleteFile(tmpfile);
+ return;
+ }
+
+ ok(GetLastError() == ERROR_FILE_NOT_FOUND ||
+ GetLastError() == ERROR_FILE_EXISTS, /* Win98 */
+ "Expected ERROR_FILE_NOT_FOUND or ERROR_FILE_EXISTS, got %d\n", GetLastError());
ok(file_exists(tmpfile), "Expected tmpfile to exist\n");
/* try SP_COPY_REPLACEONLY, dest does not exist */
@@ -400,6 +408,7 @@ static void test_SetupGetFileCompressionInfo(void)
ok(target_size == sizeof(uncompressed), "got %d\n", target_size);
ok(type == FILE_COMPRESSION_NONE, "got %d, expected FILE_COMPRESSION_NONE\n", type);
+ MyFree(name);
DeleteFileA(source);
}
@@ -582,14 +591,14 @@ START_TEST(misc)
if (pSetupCopyOEMInfA)
test_SetupCopyOEMInf();
else
- skip("SetupCopyOEMInfA is not available\n");
+ win_skip("SetupCopyOEMInfA is not available\n");
test_SetupGetFileCompressionInfo();
if (pSetupGetFileCompressionInfoExA)
test_SetupGetFileCompressionInfoEx();
else
- skip("SetupGetFileCompressionInfoExA is not available\n");
+ win_skip("SetupGetFileCompressionInfoExA is not available\n");
test_SetupDecompressOrCopyFile();
}
diff --git a/rostests/winetests/setupapi/parser.c b/rostests/winetests/setupapi/parser.c
index 6341222819e..0aa78c12d53 100644
--- a/rostests/winetests/setupapi/parser.c
+++ b/rostests/winetests/setupapi/parser.c
@@ -33,12 +33,14 @@
/* function pointers */
static HMODULE hSetupAPI;
static LPCWSTR (WINAPI *pSetupGetField)(PINFCONTEXT,DWORD);
+static BOOL (WINAPI *pSetupEnumInfSectionsA)( HINF hinf, UINT index, PSTR buffer, DWORD size, UINT *need );
static void init_function_pointers(void)
{
hSetupAPI = GetModuleHandleA("setupapi.dll");
- pSetupGetField = (void *)GetProcAddress(hSetupAPI, "pSetupGetField");
+ pSetupGetField = (void *)GetProcAddress(hSetupAPI, "pSetupGetField");
+ pSetupEnumInfSectionsA = (void *)GetProcAddress(hSetupAPI, "SetupEnumInfSectionsA" );
}
static const char tmpfilename[] = ".\\tmp.inf";
@@ -52,6 +54,7 @@ static const char tmpfilename[] = ".\\tmp.inf";
#define A400 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
"aaaaaaaaaaaaaaaa" A256
+#define A1200 A400 A400 A400
#define A511 A255 A256
#define A4097 "a" A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256 A256
@@ -61,7 +64,7 @@ static const char tmpfilename[] = ".\\tmp.inf";
"per%%cent=abcd\nper=1\ncent=2\n22=foo\n" \
"big=" A400 "\n" \
"mydrive=\"C:\\\"\n" \
- "verybig=" A400 A400 A400 "\n"
+ "verybig=" A1200 "\n"
/* create a new file with specified contents and open it */
static HINF test_file_contents( const char *data, UINT *err_line )
@@ -245,6 +248,52 @@ static void test_section_names(void)
}
}
+static void test_enum_sections(void)
+{
+ static const char *contents = STD_HEADER "[s1]\nfoo=bar\n[s2]\nbar=foo\n[s3]\n[strings]\na=b\n";
+
+ BOOL ret;
+ DWORD len;
+ HINF hinf;
+ UINT err, index;
+ char buffer[256];
+
+ if (!pSetupEnumInfSectionsA)
+ {
+ win_skip( "SetupEnumInfSectionsA not available\n" );
+ return;
+ }
+
+ hinf = test_file_contents( contents, &err );
+ ok( hinf != NULL, "Expected valid INF file\n" );
+
+ for (index = 0; ; index++)
+ {
+ SetLastError( 0xdeadbeef );
+ ret = pSetupEnumInfSectionsA( hinf, index, NULL, 0, &len );
+ err = GetLastError();
+ if (!ret && GetLastError() == ERROR_NO_MORE_ITEMS) break;
+ ok( ret, "SetupEnumInfSectionsA failed\n" );
+ ok( len == 3 || len == 8, "wrong len %u\n", len );
+
+ SetLastError( 0xdeadbeef );
+ ret = pSetupEnumInfSectionsA( hinf, index, NULL, sizeof(buffer), &len );
+ err = GetLastError();
+ ok( !ret, "SetupEnumInfSectionsA succeeded\n" );
+ ok( err == ERROR_INVALID_USER_BUFFER, "wrong error %u\n", err );
+ ok( len == 3 || len == 8, "wrong len %u\n", len );
+
+ SetLastError( 0xdeadbeef );
+ ret = pSetupEnumInfSectionsA( hinf, index, buffer, sizeof(buffer), &len );
+ ok( ret, "SetupEnumInfSectionsA failed err %u\n", GetLastError() );
+ ok( len == 3 || len == 8, "wrong len %u\n", len );
+ ok( !lstrcmpi( buffer, "version" ) || !lstrcmpi( buffer, "s1" ) ||
+ !lstrcmpi( buffer, "s2" ) || !lstrcmpi( buffer, "s3" ) || !lstrcmpi( buffer, "strings" ),
+ "bad section '%s'\n", buffer );
+ }
+ SetupCloseInfFile( hinf );
+}
+
/* Test various key and value names */
@@ -315,7 +364,7 @@ static const struct
{ "loop=%loop%\n" STR_SECTION, "loop", { "%loop2%" } },
{ "%per%%cent%=100\n" STR_SECTION, "12", { "100" } },
{ "a=%big%\n" STR_SECTION, "a", { A400 } },
- { "a=%verybig%\n" STR_SECTION, "a", { A511 } }, /* truncated to 511 */
+ { "a=%verybig%\n" STR_SECTION, "a", { A511 } }, /* truncated to 511, not on Vista/W2K8 */
{ "a=%big%%big%%big%%big%\n" STR_SECTION, "a", { A400 A400 A400 A400 } },
{ "a=%big%%big%%big%%big%%big%%big%%big%%big%%big%\n" STR_SECTION, "a", { A400 A400 A400 A400 A400 A400 A400 A400 A400 } },
{ "a=%big%%big%%big%%big%%big%%big%%big%%big%%big%%big%%big%\n" STR_SECTION, "a", { A4097 /*MAX_INF_STRING_LENGTH+1*/ } },
@@ -384,8 +433,21 @@ static void test_key_names(void)
{
ok( err == 0, "line %u: bad error %u\n", i, err );
if (key_names[i].fields[index])
- ok( !strcmp( field, key_names[i].fields[index] ), "line %u: bad field %s/%s\n",
- i, field, key_names[i].fields[index] );
+ {
+ if (i == 49)
+ ok( !strcmp( field, key_names[i].fields[index] ) ||
+ !strcmp( field, A1200), /* Vista, W2K8 */
+ "line %u: bad field %s/%s\n",
+ i, field, key_names[i].fields[index] );
+ else /* don't compare drive letter of paths */
+ if (field[0] && field[1] == ':' && field[2] == '\\')
+ ok( !strcmp( field + 1, key_names[i].fields[index] + 1 ),
+ "line %u: bad field %s/%s\n",
+ i, field, key_names[i].fields[index] );
+ else
+ ok( !strcmp( field, key_names[i].fields[index] ), "line %u: bad field %s/%s\n",
+ i, field, key_names[i].fields[index] );
+ }
else
ok( 0, "line %u: got extra field %s\n", i, field );
strcat( buffer, "," );
@@ -416,12 +478,15 @@ static void test_close_inf_file(void)
{
SetLastError(0xdeadbeef);
SetupCloseInfFile(NULL);
- ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %u\n", GetLastError());
+ ok(GetLastError() == 0xdeadbeef ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* Win9x, WinMe */
+ "Expected 0xdeadbeef, got %u\n", GetLastError());
SetLastError(0xdeadbeef);
SetupCloseInfFile(INVALID_HANDLE_VALUE);
- ok(GetLastError() == 0xdeadbeef, "Expected 0xdeadbeef, got %u\n", GetLastError());
-
+ ok(GetLastError() == 0xdeadbeef ||
+ GetLastError() == ERROR_INVALID_PARAMETER, /* Win9x, WinMe */
+ "Expected 0xdeadbeef, got %u\n", GetLastError());
}
static const char *contents = "[Version]\n"
@@ -447,6 +512,7 @@ static void test_pSetupGetField(void)
LPCWSTR field;
INFCONTEXT context;
int i;
+ int len;
hinf = test_file_contents( contents, &err );
ok( hinf != NULL, "Expected valid INF file\n" );
@@ -465,7 +531,11 @@ static void test_pSetupGetField(void)
field = pSetupGetField( &context, 3 );
ok( field != NULL, "Failed to get field 3\n" );
- ok( lstrlenW( field ) == 511, "Expected 511, got %d\n", lstrlenW( field ) );
+ len = lstrlenW( field );
+ ok( len == 511 /* NT4, W2K, XP and W2K3 */ ||
+ len == 4096 /* Vista */ ||
+ len == 256 /* Win9x and WinME */,
+ "Unexpected length, got %d\n", len );
field = pSetupGetField( &context, 4 );
ok( field == NULL, "Expected NULL, got %p\n", field );
@@ -519,18 +589,18 @@ static void test_SetupGetIntField(void)
retb = SetupGetIntField( &context, keys[i].index, &intfield );
if ( keys[i].err == ERROR_SUCCESS )
{
- ok( retb, "Expected success\n" );
+ ok( retb, "%u: Expected success\n", i );
ok( GetLastError() == ERROR_SUCCESS ||
GetLastError() == 0xdeadbeef /* win9x, NT4 */,
- "Expected ERROR_SUCCESS or 0xdeadbeef, got %u\n", GetLastError() );
+ "%u: Expected ERROR_SUCCESS or 0xdeadbeef, got %u\n", i, GetLastError() );
}
else
{
- ok( !retb, "Expected failure\n" );
+ ok( !retb, "%u: Expected failure\n", i );
ok( GetLastError() == keys[i].err,
- "Expected %d, got %u\n", keys[i].err, GetLastError() );
+ "%u: Expected %d, got %u\n", i, keys[i].err, GetLastError() );
}
- ok( intfield == keys[i].value, "Expected %d, got %d\n", keys[i].value, intfield );
+ ok( intfield == keys[i].value, "%u: Expected %d, got %d\n", i, keys[i].value, intfield );
SetupCloseInfFile( hinf );
}
@@ -655,6 +725,7 @@ START_TEST(parser)
init_function_pointers();
test_invalid_files();
test_section_names();
+ test_enum_sections();
test_key_names();
test_close_inf_file();
test_pSetupGetField();
diff --git a/rostests/winetests/setupapi/query.c b/rostests/winetests/setupapi/query.c
index 87f167306ca..0b7883c6289 100644
--- a/rostests/winetests/setupapi/query.c
+++ b/rostests/winetests/setupapi/query.c
@@ -43,56 +43,68 @@ static void get_directories(void)
WIN_DIR[len-1] = 0;
}
-static void append_str(char **str, const char *data)
-{
- sprintf(*str, data);
- *str += strlen(*str);
-}
+static const char inf_data1[] =
+ "[Version]\n"
+ "Signature=\"$Chicago$\"\n"
+ "AdvancedINF=2.5\n"
+ "[SourceDisksNames]\n"
+ "2 = %SrcDiskName%, LANCOM\\LANtools\\lanconf.cab\n"
+ "[SourceDisksFiles]\n"
+ "lanconf.exe = 2\n"
+ "[DestinationDirs]\n"
+ "DefaultDestDir = 24, %DefaultDest%\n"
+ "[Strings]\n"
+ "LangDir = english\n"
+ "DefaultDest = LANCOM\n"
+ "SrcDiskName = \"LANCOM Software CD\"\n";
-static void create_inf_file(LPSTR filename)
+static const char inf_data2[] =
+ "[SourceFileInfo]\n"
+ "sp1qfe\\bitsinst.exe=250B3702C7CCD7C2F9E4DAA1555C933E,000600060A28062C,27136,SP1QFE\n"
+ "sp1qfe\\bitsprx2.dll=4EBEA67F4BB4EB402E725CA7CA2857AE,000600060A280621,7680,SP1QFE\n"
+ "sp1qfe\\bitsprx3.dll=C788A1D9330DA011EF25E95D3BC7BDE5,000600060A280621,7168,SP1QFE\n"
+ "sp1qfe\\qmgr.dll=696AC82FB290A03F205901442E0E9589,000600060A280621,361984,SP1QFE\n"
+ "sp1qfe\\qmgrprxy.dll=8B5848144829E1BC985EA4C3D8CA7E3F,000600060A280621,17408,SP1QFE\n"
+ "sp1qfe\\winhttp.dll=3EC6F518114606CA59D4160322077437,000500010A280615,331776,SP1QFE\n"
+ "sp1qfe\\xpob2res.dll=DB83156B9F496F20D1EA70E4ABEC0166,000500010A280622,158720,SP1QFE\n";
+
+static const char inf_data3[] =
+ "[Version]\n"
+ "Signature = \"$Windows NT$\"\n"
+ "[DestinationDirs]\n"
+ "CopyAlways.Windir.files = 10\n"
+ "[CopyAlways.Windir.Files]\n"
+ "WindowsCodecs.dll\n";
+
+static const char inf_data4[] =
+ "[Version]\n"
+ "Signature = \"$Windows NT$\"\n"
+ "[CopyAlways.System32.Files]\n"
+ "WindowsCodecs.dll\n";
+
+static const char inf_data5[] =
+ "[Version]\n"
+ "Signature = \"$Windows NT$\"\n"
+ "[DestinationDirs]\n"
+ "DefaultDestDir = 11\n"
+ "CopyAlways.Windir.files = 10\n"
+ "[CopyAlways.Windir.Files]\n"
+ "WindowsCodecs.dll\n";
+
+static const char inf_data6[] =
+ "[Version]\n"
+ "Signature = \"$Windows NT$\"\n"
+ "[DestinationDirs]\n"
+ "DefaultDestDir = 10\n"
+ "[CopyAlways.Windir.Files]\n"
+ "WindowsCodecs.dll\n";
+
+static void create_inf_file(LPSTR filename, const char *data, DWORD size)
{
- char data[1024];
- char *ptr = data;
DWORD dwNumberOfBytesWritten;
HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
-
- append_str(&ptr, "[Version]\n");
- append_str(&ptr, "Signature=\"$Chicago$\"\n");
- append_str(&ptr, "AdvancedINF=2.5\n");
- append_str(&ptr, "[SourceDisksNames]\n");
- append_str(&ptr, "2 = %%SrcDiskName%%, LANCOM\\LANtools\\lanconf.cab\n");
- append_str(&ptr, "[SourceDisksFiles]\n");
- append_str(&ptr, "lanconf.exe = 2\n");
- append_str(&ptr, "[DestinationDirs]\n");
- append_str(&ptr, "DefaultDestDir = 24, %%DefaultDest%%\n");
- append_str(&ptr, "[Strings]\n");
- append_str(&ptr, "LangDir = english\n");
- append_str(&ptr, "DefaultDest = LANCOM\n");
- append_str(&ptr, "SrcDiskName = \"LANCOM Software CD\"\n");
-
- WriteFile(hf, data, ptr - data, &dwNumberOfBytesWritten, NULL);
- CloseHandle(hf);
-}
-
-static void create_inf_file2(LPSTR filename)
-{
- char data[1024];
- char *ptr = data;
- DWORD dwNumberOfBytesWritten;
- HANDLE hf = CreateFile(filename, GENERIC_WRITE, 0, NULL,
- CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
-
- append_str(&ptr, "[SourceFileInfo]\n");
- append_str(&ptr, "sp1qfe\\bitsinst.exe=250B3702C7CCD7C2F9E4DAA1555C933E,000600060A28062C,27136,SP1QFE\n");
- append_str(&ptr, "sp1qfe\\bitsprx2.dll=4EBEA67F4BB4EB402E725CA7CA2857AE,000600060A280621,7680,SP1QFE\n");
- append_str(&ptr, "sp1qfe\\bitsprx3.dll=C788A1D9330DA011EF25E95D3BC7BDE5,000600060A280621,7168,SP1QFE\n");
- append_str(&ptr, "sp1qfe\\qmgr.dll=696AC82FB290A03F205901442E0E9589,000600060A280621,361984,SP1QFE\n");
- append_str(&ptr, "sp1qfe\\qmgrprxy.dll=8B5848144829E1BC985EA4C3D8CA7E3F,000600060A280621,17408,SP1QFE\n");
- append_str(&ptr, "sp1qfe\\winhttp.dll=3EC6F518114606CA59D4160322077437,000500010A280615,331776,SP1QFE\n");
- append_str(&ptr, "sp1qfe\\xpob2res.dll=DB83156B9F496F20D1EA70E4ABEC0166,000500010A280622,158720,SP1QFE\n");
-
- WriteFile(hf, data, ptr - data, &dwNumberOfBytesWritten, NULL);
+ WriteFile(hf, data, size, &dwNumberOfBytesWritten, NULL);
CloseHandle(hf);
}
@@ -136,6 +148,7 @@ static void test_SetupGetInfInformation(void)
PSP_INF_INFORMATION info;
CHAR inf_filename[MAX_PATH];
CHAR inf_one[MAX_PATH], inf_two[MAX_PATH];
+ LPSTR revfile;
DWORD size;
HINF hinf;
BOOL ret;
@@ -149,20 +162,30 @@ static void test_SetupGetInfInformation(void)
SetLastError(0xbeefcafe);
ret = SetupGetInfInformationA(NULL, INFINFO_INF_SPEC_IS_HINF, NULL, 0, &size);
ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n");
- ok(GetLastError() == ERROR_INVALID_HANDLE,
+ ok(GetLastError() == ERROR_INVALID_HANDLE ||
+ broken(GetLastError() == ERROR_BAD_PATHNAME) || /* win95 */
+ broken(GetLastError() == ERROR_FILE_NOT_FOUND) || /* win98 */
+ broken(GetLastError() == ERROR_PATH_NOT_FOUND) || /* NT4 */
+ broken(GetLastError() == ERROR_INVALID_NAME) || /* win2k */
+ broken(GetLastError() == ERROR_GENERAL_SYNTAX), /* another win2k */
"Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
ok(size == 0xdeadbeef, "Expected size to remain unchanged\n");
/* try an invalid inf filename */
- size = 0xdeadbeef;
- SetLastError(0xbeefcafe);
- ret = SetupGetInfInformationA(NULL, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, 0, &size);
- ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n");
- ok(GetLastError() == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
- ok(size == 0xdeadbeef, "Expected size to remain unchanged\n");
+ /* do not use NULL as absolute inf filename on win9x (crash) */
+ if ((GetLastError() != ERROR_BAD_PATHNAME) && /* win95 */
+ (GetLastError() != ERROR_FILE_NOT_FOUND)) /* win98 */
+ {
+ size = 0xdeadbeef;
+ SetLastError(0xbeefcafe);
+ ret = SetupGetInfInformationA(NULL, INFINFO_INF_NAME_IS_ABSOLUTE, NULL, 0, &size);
+ ok(ret == FALSE, "Expected SetupGetInfInformation to fail\n");
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+ ok(size == 0xdeadbeef, "Expected size to remain unchanged\n");
+ }
- create_inf_file(inf_filename);
+ create_inf_file(inf_filename, inf_data1, sizeof(inf_data1) - 1);
/* try an invalid search flag */
size = 0xdeadbeef;
@@ -231,22 +254,32 @@ static void test_SetupGetInfInformation(void)
ok(check_info_filename(info, inf_filename), "Expected returned filename to be equal\n");
SetupCloseInfFile(hinf);
- lstrcpyA(inf_one, WIN_DIR);
- lstrcatA(inf_one, "\\inf\\");
- lstrcatA(inf_one, "test.inf");
- create_inf_file(inf_one);
-
lstrcpyA(inf_two, WIN_DIR);
lstrcatA(inf_two, "\\system32\\");
lstrcatA(inf_two, "test.inf");
- create_inf_file(inf_two);
+ create_inf_file(inf_two, inf_data1, sizeof(inf_data1) - 1);
+
+ HeapFree(GetProcessHeap(), 0, info);
+ info = alloc_inf_info("test.inf", INFINFO_DEFAULT_SEARCH, &size);
+
+ /* check if system32 is searched for inf */
+ ret = SetupGetInfInformationA("test.inf", INFINFO_DEFAULT_SEARCH, info, size, &size);
+ if (!ret && GetLastError() == ERROR_FILE_NOT_FOUND)
+ revfile = inf_one; /* Vista */
+ else
+ revfile = inf_two;
+
+ lstrcpyA(inf_one, WIN_DIR);
+ lstrcatA(inf_one, "\\inf\\");
+ lstrcatA(inf_one, "test.inf");
+ create_inf_file(inf_one, inf_data1, sizeof(inf_data1) - 1);
HeapFree(GetProcessHeap(), 0, info);
info = alloc_inf_info("test.inf", INFINFO_DEFAULT_SEARCH, &size);
/* test the INFINFO_DEFAULT_SEARCH search flag */
ret = SetupGetInfInformationA("test.inf", INFINFO_DEFAULT_SEARCH, info, size, &size);
- ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
+ ok(ret == TRUE, "Expected SetupGetInfInformation to succeed: %d\n", GetLastError());
ok(check_info_filename(info, inf_one), "Expected returned filename to be equal\n");
HeapFree(GetProcessHeap(), 0, info);
@@ -255,7 +288,9 @@ static void test_SetupGetInfInformation(void)
/* test the INFINFO_REVERSE_DEFAULT_SEARCH search flag */
ret = SetupGetInfInformationA("test.inf", INFINFO_REVERSE_DEFAULT_SEARCH, info, size, &size);
ok(ret == TRUE, "Expected SetupGetInfInformation to succeed\n");
- ok(check_info_filename(info, inf_two), "Expected returned filename to be equal\n");
+ ok(check_info_filename(info, revfile), "Expected returned filename to be equal\n");
+
+ HeapFree(GetProcessHeap(), 0, info);
DeleteFileA(inf_filename);
DeleteFileA(inf_one);
@@ -274,7 +309,7 @@ static void test_SetupGetSourceFileLocation(void)
lstrcatA(inf_filename, "\\");
lstrcatA(inf_filename, "test.inf");
- create_inf_file(inf_filename);
+ create_inf_file(inf_filename, inf_data1, sizeof(inf_data1) - 1);
hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL);
ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n");
@@ -292,7 +327,7 @@ static void test_SetupGetSourceFileLocation(void)
SetupCloseInfFile(hinf);
DeleteFileA(inf_filename);
- create_inf_file2(inf_filename);
+ create_inf_file(inf_filename, inf_data2, sizeof(inf_data2) - 1);
SetLastError(0xdeadbeef);
hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL);
@@ -321,7 +356,7 @@ static void test_SetupGetSourceInfo(void)
lstrcatA(inf_filename, "\\");
lstrcatA(inf_filename, "test.inf");
- create_inf_file(inf_filename);
+ create_inf_file(inf_filename, inf_data1, sizeof(inf_data1) - 1);
hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL);
ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n");
@@ -359,6 +394,7 @@ static void test_SetupGetSourceInfo(void)
static void test_SetupGetTargetPath(void)
{
char buffer[MAX_PATH], inf_filename[MAX_PATH];
+ char destfile[MAX_PATH];
DWORD required;
HINF hinf;
INFCONTEXT ctx;
@@ -368,7 +404,7 @@ static void test_SetupGetTargetPath(void)
lstrcatA(inf_filename, "\\");
lstrcatA(inf_filename, "test.inf");
- create_inf_file(inf_filename);
+ create_inf_file(inf_filename, inf_data1, sizeof(inf_data1) - 1);
hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL);
ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n");
@@ -382,9 +418,86 @@ static void test_SetupGetTargetPath(void)
ret = SetupGetTargetPathA(hinf, &ctx, NULL, buffer, sizeof(buffer), &required);
ok(ret, "SetupGetTargetPathA failed\n");
-
ok(required == 10, "unexpected required size: %d\n", required);
- ok(!lstrcmpiA("C:\\LANCOM", buffer), "unexpected result string: %s\n", buffer);
+ /* Retrieve the system drive from the windows directory.
+ * (%SystemDrive% is not available on Win9x)
+ */
+ lstrcpyA(destfile, WIN_DIR);
+ destfile[3] = '\0';
+ lstrcatA(destfile, "LANCOM");
+ ok(!lstrcmpiA(destfile, buffer), "unexpected result string: %s\n", buffer);
+
+ SetupCloseInfFile(hinf);
+ DeleteFileA(inf_filename);
+
+ create_inf_file(inf_filename, inf_data3, sizeof(inf_data3) - 1);
+
+ hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL);
+ ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n");
+
+ required = 0;
+
+ ret = SetupGetTargetPathA(hinf, NULL, "CopyAlways.Windir.Files", buffer, sizeof(buffer), &required);
+ ok(ret, "SetupGetTargetPathA failed\n");
+
+ lstrcpyA(destfile, WIN_DIR);
+
+ ok(required == lstrlenA(destfile) + 1, "unexpected required size: %d\n", required);
+ ok(!lstrcmpiA(buffer, destfile), "unexpected path: %s\n", buffer);
+
+ SetupCloseInfFile(hinf);
+ DeleteFileA(inf_filename);
+
+ create_inf_file(inf_filename, inf_data4, sizeof(inf_data4) - 1);
+
+ hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL);
+ ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n");
+
+ required = 0;
+
+ ret = SetupGetTargetPathA(hinf, NULL, "CopyAlways.System32.Files", buffer, sizeof(buffer), &required);
+ ok(ret, "SetupGetTargetPathA failed\n");
+
+ GetSystemDirectoryA(destfile, MAX_PATH);
+
+ ok(required == lstrlenA(destfile) + 1, "unexpected required size: %d\n", required);
+ ok(!lstrcmpiA(buffer, destfile), "unexpected path: %s\n", buffer);
+
+ SetupCloseInfFile(hinf);
+ DeleteFileA(inf_filename);
+
+ create_inf_file(inf_filename, inf_data5, sizeof(inf_data5) - 1);
+
+ hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL);
+ ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n");
+
+ required = 0;
+
+ ret = SetupGetTargetPathA(hinf, NULL, "CopyAlways.Windir.Files", buffer, sizeof(buffer), &required);
+ ok(ret, "SetupGetTargetPathA failed\n");
+
+ lstrcpyA(destfile, WIN_DIR);
+
+ ok(required == lstrlenA(destfile) + 1, "unexpected required size: %d\n", required);
+ ok(!lstrcmpiA(buffer, destfile), "unexpected path: %s\n", buffer);
+
+ SetupCloseInfFile(hinf);
+ DeleteFileA(inf_filename);
+
+ create_inf_file(inf_filename, inf_data6, sizeof(inf_data6) - 1);
+
+ hinf = SetupOpenInfFileA(inf_filename, NULL, INF_STYLE_WIN4, NULL);
+ ok(hinf != INVALID_HANDLE_VALUE, "could not open inf file\n");
+
+ required = 0;
+
+ ret = SetupGetTargetPathA(hinf, NULL, "CopyAlways.Windir.Files", buffer, sizeof(buffer), &required);
+ ok(ret, "SetupGetTargetPathA failed\n");
+
+ lstrcpyA(destfile, WIN_DIR);
+
+ ok(required == lstrlenA(destfile) + 1, "unexpected required size: %d\n", required);
+ ok(!lstrcmpiA(buffer, destfile), "unexpected path: %s\n", buffer);
SetupCloseInfFile(hinf);
DeleteFileA(inf_filename);
diff --git a/rostests/winetests/setupapi/stringtable.c b/rostests/winetests/setupapi/stringtable.c
index 4eca3318553..cecfc237188 100644
--- a/rostests/winetests/setupapi/stringtable.c
+++ b/rostests/winetests/setupapi/stringtable.c
@@ -37,10 +37,13 @@
#define ST_CASE_SENSITIVE_COMPARE 0x00000001
static DWORD (WINAPI *pStringTableAddString)(HSTRING_TABLE, LPWSTR, DWORD);
+static DWORD (WINAPI *pStringTableAddStringEx)(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, DWORD);
static VOID (WINAPI *pStringTableDestroy)(HSTRING_TABLE);
static HSTRING_TABLE (WINAPI *pStringTableDuplicate)(HSTRING_TABLE hStringTable);
static HSTRING_TABLE (WINAPI *pStringTableInitialize)(VOID);
+static HSTRING_TABLE (WINAPI *pStringTableInitializeEx)(DWORD, DWORD);
static DWORD (WINAPI *pStringTableLookUpString)(HSTRING_TABLE, LPWSTR, DWORD);
+static DWORD (WINAPI *pStringTableLookUpStringEx)(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, DWORD);
static LPWSTR (WINAPI *pStringTableStringFromId)(HSTRING_TABLE, DWORD);
#if 0
static BOOL (WINAPI *pStringTableStringFromIdEx)(HSTRING_TABLE, DWORD, LPWSTR, LPDWORD);
@@ -51,8 +54,6 @@ HMODULE hdll;
static WCHAR string[] = {'s','t','r','i','n','g',0};
static WCHAR String[] = {'S','t','r','i','n','g',0};
static WCHAR foo[] = {'f','o','o',0};
-DWORD hstring, hString, hfoo; /* Handles pointing to our strings */
-HANDLE table, table2; /* Handles pointing to our tables */
static void load_it_up(void)
{
@@ -62,10 +63,18 @@ static void load_it_up(void)
if (!pStringTableInitialize)
pStringTableInitialize = (void*)GetProcAddress(hdll, "pSetupStringTableInitialize");
+ pStringTableInitializeEx = (void*)GetProcAddress(hdll, "StringTableInitializeEx");
+ if (!pStringTableInitializeEx)
+ pStringTableInitializeEx = (void*)GetProcAddress(hdll, "pSetupStringTableInitializeEx");
+
pStringTableAddString = (void*)GetProcAddress(hdll, "StringTableAddString");
if (!pStringTableAddString)
pStringTableAddString = (void*)GetProcAddress(hdll, "pSetupStringTableAddString");
+ pStringTableAddStringEx = (void*)GetProcAddress(hdll, "StringTableAddStringEx");
+ if (!pStringTableAddStringEx)
+ pStringTableAddStringEx = (void*)GetProcAddress(hdll, "pSetupStringTableAddStringEx");
+
pStringTableDuplicate = (void*)GetProcAddress(hdll, "StringTableDuplicate");
if (!pStringTableDuplicate)
pStringTableDuplicate = (void*)GetProcAddress(hdll, "pSetupStringTableDuplicate");
@@ -78,20 +87,22 @@ static void load_it_up(void)
if (!pStringTableLookUpString)
pStringTableLookUpString = (void*)GetProcAddress(hdll, "pSetupStringTableLookUpString");
+ pStringTableLookUpStringEx = (void*)GetProcAddress(hdll, "StringTableLookUpStringEx");
+ if (!pStringTableLookUpStringEx)
+ pStringTableLookUpStringEx = (void*)GetProcAddress(hdll, "pSetupStringTableLookUpStringEx");
+
pStringTableStringFromId = (void*)GetProcAddress(hdll, "StringTableStringFromId");
if (!pStringTableStringFromId)
pStringTableStringFromId = (void*)GetProcAddress(hdll, "pSetupStringTableStringFromId");
}
-static void test_StringTableInitialize(void)
-{
- table=pStringTableInitialize();
- ok(table!=NULL,"Failed to Initialize String Table\n");
-}
-
static void test_StringTableAddString(void)
{
- DWORD retval;
+ DWORD retval, hstring, hString, hfoo;
+ HANDLE table;
+
+ table = pStringTableInitialize();
+ ok(table != NULL, "failed to initialize string table\n");
/* case insensitive */
hstring=pStringTableAddString(table,string,0);
@@ -108,18 +119,71 @@ static void test_StringTableAddString(void)
/* case sensitive */
hString=pStringTableAddString(table,String,ST_CASE_SENSITIVE_COMPARE);
ok(hstring!=hString,"String handle and string share same ID %x in Table\n", hstring);
+
+ pStringTableDestroy(table);
+}
+
+static void test_StringTableAddStringEx(void)
+{
+ DWORD retval, hstring, hString, hfoo;
+ HANDLE table;
+
+ table = pStringTableInitialize();
+ ok(table != NULL,"Failed to Initialize String Table\n");
+
+ /* case insensitive */
+ hstring = pStringTableAddStringEx(table, string, 0, NULL, 0);
+ ok(hstring != ~0u, "Failed to add string to String Table\n");
+
+ retval = pStringTableAddStringEx(table, String, 0, NULL, 0);
+ ok(retval != ~0u, "Failed to add String to String Table\n");
+ ok(hstring == retval, "string handle %x != String handle %x in String Table\n", hstring, retval);
+
+ hfoo = pStringTableAddStringEx(table, foo, 0, NULL, 0);
+ ok(hfoo != ~0u, "Failed to add foo to String Table\n");
+ ok(hfoo != hstring, "foo and string share the same ID %x in String Table\n", hfoo);
+
+ /* case sensitive */
+ hString = pStringTableAddStringEx(table, String, ST_CASE_SENSITIVE_COMPARE, NULL, 0);
+ ok(hstring != hString, "String handle and string share same ID %x in Table\n", hstring);
+
+ pStringTableDestroy(table);
}
static void test_StringTableDuplicate(void)
{
+ HANDLE table, table2;
+
+ table = pStringTableInitialize();
+ ok(table != NULL,"Failed to Initialize String Table\n");
+
table2=pStringTableDuplicate(table);
ok(table2!=NULL,"Failed to duplicate String Table\n");
+
+ pStringTableDestroy(table);
+ pStringTableDestroy(table2);
}
static void test_StringTableLookUpString(void)
{
- DWORD retval, retval2;
-
+ DWORD retval, retval2, hstring, hString, hfoo;
+ HANDLE table, table2;
+
+ table = pStringTableInitialize();
+ ok(table != NULL,"failed to initialize string table\n");
+
+ hstring = pStringTableAddString(table, string, 0);
+ ok(hstring != ~0u, "failed to add 'string' to string table\n");
+
+ hString = pStringTableAddString(table, String, 0);
+ ok(hString != ~0u,"failed to add 'String' to string table\n");
+
+ hfoo = pStringTableAddString(table, foo, 0);
+ ok(hfoo != ~0u, "failed to add 'foo' to string table\n");
+
+ table2 = pStringTableDuplicate(table);
+ ok(table2 != NULL, "Failed to duplicate String Table\n");
+
/* case insensitive */
retval=pStringTableLookUpString(table,string,0);
ok(retval!=-1,"Failed find string in String Table 1\n");
@@ -149,16 +213,109 @@ static void test_StringTableLookUpString(void)
retval=pStringTableLookUpString(table,string,ST_CASE_SENSITIVE_COMPARE);
retval2=pStringTableLookUpString(table,String,ST_CASE_SENSITIVE_COMPARE);
ok(retval!=retval2,"Lookup of string equals String in Table 1\n");
- ok(retval2==hString,
+ ok(retval==hString,
"Lookup for String (%x) does not match previous handle (%x) in String Table 1\n",
- retval, hString);
+ retval, hString);
+
+ pStringTableDestroy(table);
+ pStringTableDestroy(table2);
+}
+
+static void test_StringTableLookUpStringEx(void)
+{
+ static WCHAR uilevel[] = {'U','I','L','E','V','E','L',0};
+ DWORD retval, retval2, hstring, hString, hfoo, data;
+ HANDLE table, table2;
+ char buffer[4];
+
+ table = pStringTableInitialize();
+ ok(table != NULL,"Failed to Initialize String Table\n");
+
+ hstring = pStringTableAddString(table, string, 0);
+ ok(hstring != ~0u, "failed to add 'string' to string table\n");
+
+ hString = pStringTableAddString(table, String, 0);
+ ok(hString != ~0u,"failed to add 'String' to string table\n");
+
+ hfoo = pStringTableAddString(table, foo, 0);
+ ok(hfoo != ~0u, "failed to add 'foo' to string table\n");
+
+ table2 = pStringTableDuplicate(table);
+ ok(table2 != NULL, "Failed to duplicate String Table\n");
+
+ /* case insensitive */
+ retval = pStringTableLookUpStringEx(table, string, 0, NULL, 0);
+ ok(retval != ~0u, "Failed find string in String Table 1\n");
+ ok(retval == hstring,
+ "Lookup for string (%x) does not match previous handle (%x) in String Table 1\n",
+ retval, hstring);
+
+ retval = pStringTableLookUpStringEx(table2, string, 0, NULL, 0);
+ ok(retval != ~0u, "Failed find string in String Table 2\n");
+
+ retval = pStringTableLookUpStringEx(table, String, 0, NULL, 0);
+ ok(retval != ~0u, "Failed find String in String Table 1\n");
+
+ retval = pStringTableLookUpStringEx(table2, String, 0, NULL, 0);
+ ok(retval != ~0u, "Failed find String in String Table 2\n");
+
+ retval=pStringTableLookUpStringEx(table, foo, 0, NULL, 0);
+ ok(retval != ~0u, "Failed find foo in String Table 1\n");
+ ok(retval == hfoo,
+ "Lookup for foo (%x) does not match previous handle (%x) in String Table 1\n",
+ retval, hfoo);
+
+ retval = pStringTableLookUpStringEx(table2, foo, 0, NULL, 0);
+ ok(retval != ~0u, "Failed find foo in String Table 2\n");
+
+ /* case sensitive */
+ retval = pStringTableLookUpStringEx(table, string,ST_CASE_SENSITIVE_COMPARE, NULL, 0);
+ retval2 = pStringTableLookUpStringEx(table, String, ST_CASE_SENSITIVE_COMPARE, NULL, 0);
+ ok(retval != retval2, "Lookup of string equals String in Table 1\n");
+ ok(retval == hString,
+ "Lookup for String (%x) does not match previous handle (%x) in String Table 1\n",
+ retval, hString);
+
+ pStringTableDestroy(table);
+
+ table = pStringTableInitializeEx(0x1000, 0);
+ ok(table != NULL, "failed to initialize string table\n");
+
+ data = 0xaaaaaaaa;
+ retval = pStringTableAddStringEx(table, uilevel, 0x5, &data, sizeof(data));
+ ok(retval != ~0u, "failed to add 'UILEVEL' to string table\n");
+
+ memset(buffer, 0x55, sizeof(buffer));
+ retval = pStringTableLookUpStringEx(table, uilevel, ST_CASE_SENSITIVE_COMPARE, buffer, 0);
+ ok(retval != ~0u, "failed find 'UILEVEL' in string table\n");
+ ok(memcmp(buffer, &data, 4), "unexpected data\n");
+
+ memset(buffer, 0x55, sizeof(buffer));
+ retval = pStringTableLookUpStringEx(table, uilevel, ST_CASE_SENSITIVE_COMPARE, buffer, 2);
+ ok(retval != ~0u, "failed find 'UILEVEL' in string table\n");
+ ok(!memcmp(buffer, &data, 2), "unexpected data\n");
+
+ memset(buffer, 0x55, sizeof(buffer));
+ retval = pStringTableLookUpStringEx(table, uilevel, ST_CASE_SENSITIVE_COMPARE, buffer, sizeof(buffer));
+ ok(retval != ~0u, "failed find 'UILEVEL' in string table\n");
+ ok(!memcmp(buffer, &data, 4), "unexpected data\n");
+
+ pStringTableDestroy(table);
}
static void test_StringTableStringFromId(void)
{
- WCHAR *string2, *string3;
+ HANDLE table;
+ DWORD hstring;
+ WCHAR *string2;
int result;
+ table = pStringTableInitialize();
+ ok(table != NULL,"Failed to Initialize String Table\n");
+
+ hstring = pStringTableAddString(table, string, 0);
+ ok(hstring != ~0u,"failed to add 'string' to string table\n");
+
/* correct */
string2=pStringTableStringFromId(table,pStringTableLookUpString(table,string,0));
ok(string2!=NULL,"Failed to look up string by ID from String Table\n");
@@ -166,25 +323,17 @@ static void test_StringTableStringFromId(void)
result=lstrcmpiW(string, string2);
ok(result==0,"StringID %p does not match requested StringID %p\n",string,string2);
- /* This should never work */
- string3=pStringTableStringFromId(table,0);
- ok(string3!=NULL,"Failed to look up string by ID from String Table\n");
-
- result=lstrcmpiW(string, string3);
- ok(result!=0,"StringID %p matches requested StringID %p\n",string,string3);
+ pStringTableDestroy(table);
}
START_TEST(stringtable)
{
load_it_up();
- test_StringTableInitialize();
test_StringTableAddString();
+ test_StringTableAddStringEx();
test_StringTableDuplicate();
test_StringTableLookUpString();
+ test_StringTableLookUpStringEx();
test_StringTableStringFromId();
-
- /* assume we can always destroy */
- pStringTableDestroy(table);
- pStringTableDestroy(table2);
}
diff --git a/rostests/winetests/shdocvw/webbrowser.c b/rostests/winetests/shdocvw/webbrowser.c
index 64c5bab2f6f..2f1c7d717b7 100644
--- a/rostests/winetests/shdocvw/webbrowser.c
+++ b/rostests/winetests/shdocvw/webbrowser.c
@@ -30,6 +30,7 @@
#include "exdisp.h"
#include "htiframe.h"
#include "mshtmhst.h"
+#include "mshtmcid.h"
#include "idispids.h"
#include "olectl.h"
#include "mshtmdid.h"
@@ -104,6 +105,11 @@ DEFINE_EXPECT(Invoke_ONTOOLBAR);
DEFINE_EXPECT(Invoke_ONFULLSCREEN);
DEFINE_EXPECT(Invoke_ONTHEATERMODE);
DEFINE_EXPECT(Invoke_WINDOWSETRESIZABLE);
+DEFINE_EXPECT(Invoke_TITLECHANGE);
+DEFINE_EXPECT(Invoke_NAVIGATECOMPLETE2);
+DEFINE_EXPECT(Invoke_PROGRESSCHANGE);
+DEFINE_EXPECT(Invoke_DOCUMENTCOMPLETE);
+DEFINE_EXPECT(Invoke_282);
DEFINE_EXPECT(EnableModeless_TRUE);
DEFINE_EXPECT(EnableModeless_FALSE);
DEFINE_EXPECT(GetHostInfo);
@@ -116,6 +122,10 @@ DEFINE_EXPECT(Exec_SETDOWNLOADSTATE_1);
DEFINE_EXPECT(Exec_SETPROGRESSMAX);
DEFINE_EXPECT(Exec_SETPROGRESSPOS);
DEFINE_EXPECT(QueryStatus_SETPROGRESSTEXT);
+DEFINE_EXPECT(QueryStatus_STOP);
+DEFINE_EXPECT(DocHost_EnableModeless_TRUE);
+DEFINE_EXPECT(DocHost_EnableModeless_FALSE);
+DEFINE_EXPECT(GetDropTarget);
static const WCHAR wszItem[] = {'i','t','e','m',0};
static const WCHAR about_blankW[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
@@ -125,6 +135,7 @@ static VARIANT_BOOL exvb;
static IWebBrowser2 *wb;
static HWND container_hwnd, shell_embedding_hwnd;
+static BOOL is_downloading = FALSE;
static const char *debugstr_w(LPCWSTR str)
{
@@ -194,6 +205,10 @@ static HRESULT WINAPI OleCommandTarget_QueryStatus(IOleCommandTarget *iface, con
ok(!pCmdText, "pCmdText != NULL\n");
switch(prgCmds[0].cmdID) {
+ case OLECMDID_STOP:
+ CHECK_EXPECT2(QueryStatus_STOP);
+ prgCmds[0].cmdf = OLECMDF_SUPPORTED;
+ return S_OK;
case OLECMDID_SETPROGRESSTEXT:
CHECK_EXPECT(QueryStatus_SETPROGRESSTEXT);
prgCmds[0].cmdf = OLECMDF_ENABLED;
@@ -211,7 +226,7 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID
if(!pguidCmdGroup) {
switch(nCmdID) {
case OLECMDID_SETPROGRESSMAX:
- CHECK_EXPECT(Exec_SETPROGRESSMAX);
+ CHECK_EXPECT2(Exec_SETPROGRESSMAX);
ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt);
ok(pvaIn != NULL, "pvaIn == NULL\n");
if(pvaIn)
@@ -219,7 +234,7 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID
ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
return S_OK;
case OLECMDID_SETPROGRESSPOS:
- CHECK_EXPECT(Exec_SETPROGRESSPOS);
+ CHECK_EXPECT2(Exec_SETPROGRESSPOS);
ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER, "nCmdexecopts=%08x\n", nCmdexecopt);
ok(pvaIn != NULL, "pvaIn == NULL\n");
if(pvaIn)
@@ -227,13 +242,17 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID
ok(pvaOut == NULL, "pvaOut=%p, expected NULL\n", pvaOut);
return S_OK;
case OLECMDID_SETDOWNLOADSTATE:
- ok(!nCmdexecopt, "nCmdexecopts=%08x\n", nCmdexecopt);
+ if(is_downloading)
+ ok(nCmdexecopt == OLECMDEXECOPT_DONTPROMPTUSER || !nCmdexecopt,
+ "nCmdexecopts=%08x\n", nCmdexecopt);
+ else
+ ok(!nCmdexecopt, "nCmdexecopts=%08x\n", nCmdexecopt);
ok(pvaOut == NULL, "pvaOut=%p\n", pvaOut);
ok(pvaIn != NULL, "pvaIn == NULL\n");
ok(V_VT(pvaIn) == VT_I4, "V_VT(pvaIn)=%d\n", V_VT(pvaIn));
switch(V_I4(pvaIn)) {
case 0:
- CHECK_EXPECT(Exec_SETDOWNLOADSTATE_0);
+ CHECK_EXPECT2(Exec_SETDOWNLOADSTATE_0);
break;
case 1:
CHECK_EXPECT2(Exec_SETDOWNLOADSTATE_1);
@@ -247,12 +266,14 @@ static HRESULT WINAPI OleCommandTarget_Exec(IOleCommandTarget *iface, const GUID
}
}else if(IsEqualGUID(&CGID_Explorer, pguidCmdGroup)) {
switch(nCmdID) {
- case 24:
- return E_FAIL; /* TODO */
- case 25:
- return E_FAIL; /* IE5 */
- case 66:
- return E_FAIL; /* TODO */
+ case 24: /* TODO */
+ case 25: /* IE5 */
+ case 37: /* TODO */
+ case 39: /* TODO */
+ case 66: /* TODO */
+ case 67: /* TODO */
+ case 69: /* TODO */
+ return E_FAIL;
default:
ok(0, "unexpected nCmdID %d\n", nCmdID);
}
@@ -650,6 +671,30 @@ static HRESULT WINAPI WebBrowserEvents2_Invoke(IDispatch *iface, DISPID dispIdMe
test_invoke_bool(pDispParams, TRUE);
break;
+ case DISPID_TITLECHANGE:
+ CHECK_EXPECT2(Invoke_TITLECHANGE);
+ /* FIXME */
+ break;
+
+ case DISPID_NAVIGATECOMPLETE2:
+ CHECK_EXPECT(Invoke_NAVIGATECOMPLETE2);
+ /* FIXME */
+ break;
+
+ case DISPID_PROGRESSCHANGE:
+ CHECK_EXPECT(Invoke_PROGRESSCHANGE);
+ /* FIXME */
+ break;
+
+ case DISPID_DOCUMENTCOMPLETE:
+ CHECK_EXPECT(Invoke_DOCUMENTCOMPLETE);
+ /* FIXME */
+ break;
+
+ case 282: /* FIXME */
+ CHECK_EXPECT2(Invoke_282);
+ break;
+
default:
ok(0, "unexpected dispIdMember %d\n", dispIdMember);
}
@@ -850,9 +895,9 @@ static HRESULT WINAPI InPlaceFrame_SetStatusText(IOleInPlaceFrame *iface, LPCOLE
static HRESULT WINAPI InPlaceFrame_EnableModeless(IOleInPlaceFrame *iface, BOOL fEnable)
{
if(fEnable)
- CHECK_EXPECT(EnableModeless_TRUE);
+ CHECK_EXPECT2(EnableModeless_TRUE);
else
- CHECK_EXPECT(EnableModeless_FALSE);
+ CHECK_EXPECT2(EnableModeless_FALSE);
return S_OK;
}
@@ -1118,8 +1163,12 @@ static HRESULT WINAPI DocHostUIHandler_UpdateUI(IDocHostUIHandler2 *iface)
static HRESULT WINAPI DocHostUIHandler_EnableModeless(IDocHostUIHandler2 *iface, BOOL fEnable)
{
- ok(0, "unexpected call\n");
- return E_NOTIMPL;
+ if(fEnable)
+ CHECK_EXPECT(DocHost_EnableModeless_TRUE);
+ else
+ CHECK_EXPECT(DocHost_EnableModeless_FALSE);
+
+ return S_OK;
}
static HRESULT WINAPI DocHostUIHandler_OnDocWindowActivate(IDocHostUIHandler2 *iface, BOOL fActivate)
@@ -1162,7 +1211,7 @@ static HRESULT WINAPI DocHostUIHandler_GetOptionKeyPath(IDocHostUIHandler2 *ifac
static HRESULT WINAPI DocHostUIHandler_GetDropTarget(IDocHostUIHandler2 *iface,
IDropTarget *pDropTarget, IDropTarget **ppDropTarget)
{
- ok(0, "unexpected call\n");
+ CHECK_EXPECT(GetDropTarget);
return E_NOTIMPL;
}
@@ -1371,7 +1420,7 @@ static void test_ClientSite(IUnknown *unk, IOleClientSite *client)
SET_EXPECT(Site_GetWindow);
SET_EXPECT(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
SET_EXPECT(Invoke_AMBIENT_SILENT);
- }else {
+ }else if(!is_downloading) {
SET_EXPECT(Invoke_DOWNLOADCOMPLETE);
SET_EXPECT(Exec_SETDOWNLOADSTATE_0);
SET_EXPECT(Invoke_COMMANDSTATECHANGE);
@@ -1385,7 +1434,7 @@ static void test_ClientSite(IUnknown *unk, IOleClientSite *client)
CHECK_CALLED(Site_GetWindow);
CHECK_CALLED(Invoke_AMBIENT_OFFLINEIFNOTCONNECTED);
CHECK_CALLED(Invoke_AMBIENT_SILENT);
- }else {
+ }else if(!is_downloading) {
todo_wine CHECK_CALLED(Invoke_DOWNLOADCOMPLETE);
todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
todo_wine CHECK_CALLED(Invoke_COMMANDSTATECHANGE);
@@ -2023,6 +2072,88 @@ static void test_Navigate2(IUnknown *unk)
IWebBrowser2_Release(webbrowser);
}
+static void test_download(void)
+{
+ MSG msg;
+
+ is_downloading = TRUE;
+
+ SET_EXPECT(Exec_SETPROGRESSMAX);
+ SET_EXPECT(Exec_SETPROGRESSPOS);
+ SET_EXPECT(Exec_SETDOWNLOADSTATE_1);
+ SET_EXPECT(DocHost_EnableModeless_FALSE);
+ SET_EXPECT(DocHost_EnableModeless_TRUE);
+ SET_EXPECT(Invoke_SETSECURELOCKICON);
+ SET_EXPECT(Invoke_282);
+ SET_EXPECT(EnableModeless_FALSE);
+ SET_EXPECT(Invoke_COMMANDSTATECHANGE);
+ SET_EXPECT(Invoke_STATUSTEXTCHANGE);
+ SET_EXPECT(SetStatusText);
+ SET_EXPECT(EnableModeless_TRUE);
+ SET_EXPECT(QueryStatus_STOP);
+ SET_EXPECT(Exec_SETDOWNLOADSTATE_0);
+ SET_EXPECT(Invoke_TITLECHANGE);
+ SET_EXPECT(Invoke_NAVIGATECOMPLETE2);
+ SET_EXPECT(GetDropTarget);
+ SET_EXPECT(Invoke_PROGRESSCHANGE);
+ SET_EXPECT(Invoke_DOCUMENTCOMPLETE);
+
+ while(!called_Invoke_DOCUMENTCOMPLETE && GetMessage(&msg, NULL, 0, 0)) {
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+
+ todo_wine CHECK_CALLED(Exec_SETPROGRESSMAX);
+ todo_wine CHECK_CALLED(Exec_SETPROGRESSPOS);
+ todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_1);
+ CLEAR_CALLED(DocHost_EnableModeless_FALSE); /* IE 7 */
+ CLEAR_CALLED(DocHost_EnableModeless_TRUE); /* IE 7 */
+ todo_wine CHECK_CALLED(Invoke_SETSECURELOCKICON);
+ CLEAR_CALLED(Invoke_282); /* IE 7 */
+ todo_wine CHECK_CALLED(EnableModeless_FALSE);
+ todo_wine CHECK_CALLED(Invoke_COMMANDSTATECHANGE);
+ todo_wine CHECK_CALLED(Invoke_STATUSTEXTCHANGE);
+ todo_wine CHECK_CALLED(SetStatusText);
+ todo_wine CHECK_CALLED(EnableModeless_TRUE);
+ todo_wine CHECK_CALLED(QueryStatus_STOP);
+ todo_wine CHECK_CALLED(Exec_SETDOWNLOADSTATE_0);
+ todo_wine CHECK_CALLED(Invoke_TITLECHANGE);
+ CHECK_CALLED(Invoke_NAVIGATECOMPLETE2);
+ todo_wine CHECK_CALLED(GetDropTarget);
+ todo_wine CHECK_CALLED(Invoke_PROGRESSCHANGE);
+ CHECK_CALLED(Invoke_DOCUMENTCOMPLETE);
+}
+
+static void test_olecmd(IUnknown *unk, BOOL loaded)
+{
+ IOleCommandTarget *cmdtrg;
+ OLECMD cmds[3];
+ HRESULT hres;
+
+ hres = IUnknown_QueryInterface(unk, &IID_IOleCommandTarget, (void**)&cmdtrg);
+ ok(hres == S_OK, "Could not get IOleCommandTarget iface: %08x\n", hres);
+ if(FAILED(hres))
+ return;
+
+ cmds[0].cmdID = OLECMDID_SPELL;
+ cmds[0].cmdf = 0xdeadbeef;
+ cmds[1].cmdID = OLECMDID_REFRESH;
+ cmds[1].cmdf = 0xdeadbeef;
+ hres = IOleCommandTarget_QueryStatus(cmdtrg, NULL, 2, cmds, NULL);
+ if(loaded) {
+ ok(hres == S_OK, "QueryStatus failed: %08x\n", hres);
+ ok(cmds[0].cmdf == OLECMDF_SUPPORTED, "OLECMDID_SPELL cmdf = %x\n", cmds[0].cmdf);
+ ok(cmds[1].cmdf == (OLECMDF_ENABLED|OLECMDF_SUPPORTED),
+ "OLECMDID_REFRESH cmdf = %x\n", cmds[1].cmdf);
+ }else {
+ ok(hres == 0x80040104, "QueryStatus failed: %08x\n", hres);
+ ok(cmds[0].cmdf == 0xdeadbeef, "OLECMDID_SPELL cmdf = %x\n", cmds[0].cmdf);
+ ok(cmds[1].cmdf == 0xdeadbeef, "OLECMDID_REFRESH cmdf = %x\n", cmds[0].cmdf);
+ }
+
+ IOleCommandTarget_Release(cmdtrg);
+}
+
static void test_IServiceProvider(IUnknown *unk)
{
IServiceProvider *servprov = (void*)0xdeadbeef;
@@ -2088,7 +2219,7 @@ static void test_QueryInterface(IUnknown *unk)
}
-static void test_WebBrowser(void)
+static void test_WebBrowser(BOOL do_download)
{
IUnknown *unk = NULL;
ULONG ref;
@@ -2100,6 +2231,8 @@ static void test_WebBrowser(void)
if(FAILED(hres))
return;
+ is_downloading = FALSE;
+
hres = IUnknown_QueryInterface(unk, &IID_IWebBrowser2, (void**)&wb);
ok(hres == S_OK, "Could not get IWebBrowser2 iface: %08x\n", hres);
@@ -2111,7 +2244,14 @@ static void test_WebBrowser(void)
test_Extent(unk);
test_wb_funcs(unk, TRUE);
test_DoVerb(unk);
+ test_olecmd(unk, FALSE);
test_Navigate2(unk);
+
+ if(do_download) {
+ test_download();
+ test_olecmd(unk, TRUE);
+ }
+
test_ClientSite(unk, NULL);
test_ie_funcs(unk);
test_GetControlInfo(unk);
@@ -2162,7 +2302,10 @@ START_TEST(webbrowser)
OleInitialize(NULL);
- test_WebBrowser();
+ trace("Testing WebBrowser (no download)...\n");
+ test_WebBrowser(FALSE);
+ trace("Testing WebBrowser...\n");
+ test_WebBrowser(TRUE);
OleUninitialize();
diff --git a/rostests/winetests/urlmon/generated.c b/rostests/winetests/urlmon/generated.c
index d29c226ca17..8a2f353b043 100644
--- a/rostests/winetests/urlmon/generated.c
+++ b/rostests/winetests/urlmon/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. */
/*
@@ -30,22 +30,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
@@ -62,65 +54,51 @@
* 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_BINDINFO(void)
{
/* BINDINFO (pack 4) */
- TEST_FIELD(BINDINFO, ULONG, cbSize, 0, 4, 4);
- TEST_FIELD(BINDINFO, LPWSTR, szExtraInfo, 4, 4, 4);
+ TEST_FIELD_SIZE (BINDINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (BINDINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(BINDINFO, cbSize, 0)
+ TEST_FIELD_SIZE (BINDINFO, szExtraInfo, 4)
+ TEST_FIELD_ALIGN (BINDINFO, szExtraInfo, 4)
+ TEST_FIELD_OFFSET(BINDINFO, szExtraInfo, 4)
}
static void test_pack_IBindHost(void)
@@ -206,106 +184,162 @@ static void test_pack_IWinInetInfoVtbl(void)
static void test_pack_LPBINDHOST(void)
{
/* LPBINDHOST */
- TEST_TYPE(LPBINDHOST, 4, 4);
+ TEST_TYPE_SIZE (LPBINDHOST, 4)
+ TEST_TYPE_ALIGN (LPBINDHOST, 4)
}
static void test_pack_LPBINDING(void)
{
/* LPBINDING */
- TEST_TYPE(LPBINDING, 4, 4);
+ TEST_TYPE_SIZE (LPBINDING, 4)
+ TEST_TYPE_ALIGN (LPBINDING, 4)
}
static void test_pack_LPBINDSTATUSCALLBACK(void)
{
/* LPBINDSTATUSCALLBACK */
- TEST_TYPE(LPBINDSTATUSCALLBACK, 4, 4);
+ TEST_TYPE_SIZE (LPBINDSTATUSCALLBACK, 4)
+ TEST_TYPE_ALIGN (LPBINDSTATUSCALLBACK, 4)
}
static void test_pack_LPIINTERNETPROTOCOLINFO(void)
{
/* LPIINTERNETPROTOCOLINFO */
- TEST_TYPE(LPIINTERNETPROTOCOLINFO, 4, 4);
+ TEST_TYPE_SIZE (LPIINTERNETPROTOCOLINFO, 4)
+ TEST_TYPE_ALIGN (LPIINTERNETPROTOCOLINFO, 4)
}
static void test_pack_LPIINTERNETSESSION(void)
{
/* LPIINTERNETSESSION */
- TEST_TYPE(LPIINTERNETSESSION, 4, 4);
+ TEST_TYPE_SIZE (LPIINTERNETSESSION, 4)
+ TEST_TYPE_ALIGN (LPIINTERNETSESSION, 4)
}
static void test_pack_LPPERSISTMONIKER(void)
{
/* LPPERSISTMONIKER */
- TEST_TYPE(LPPERSISTMONIKER, 4, 4);
+ TEST_TYPE_SIZE (LPPERSISTMONIKER, 4)
+ TEST_TYPE_ALIGN (LPPERSISTMONIKER, 4)
}
static void test_pack_LPREMFORMATETC(void)
{
/* LPREMFORMATETC */
- TEST_TYPE(LPREMFORMATETC, 4, 4);
+ TEST_TYPE_SIZE (LPREMFORMATETC, 4)
+ TEST_TYPE_ALIGN (LPREMFORMATETC, 4)
}
static void test_pack_LPREMSECURITY_ATTRIBUTES(void)
{
/* LPREMSECURITY_ATTRIBUTES */
- TEST_TYPE(LPREMSECURITY_ATTRIBUTES, 4, 4);
+ TEST_TYPE_SIZE (LPREMSECURITY_ATTRIBUTES, 4)
+ TEST_TYPE_ALIGN (LPREMSECURITY_ATTRIBUTES, 4)
}
static void test_pack_LPWININETHTTPINFO(void)
{
/* LPWININETHTTPINFO */
- TEST_TYPE(LPWININETHTTPINFO, 4, 4);
+ TEST_TYPE_SIZE (LPWININETHTTPINFO, 4)
+ TEST_TYPE_ALIGN (LPWININETHTTPINFO, 4)
}
static void test_pack_LPWININETINFO(void)
{
/* LPWININETINFO */
- TEST_TYPE(LPWININETINFO, 4, 4);
+ TEST_TYPE_SIZE (LPWININETINFO, 4)
+ TEST_TYPE_ALIGN (LPWININETINFO, 4)
}
static void test_pack_PREMSECURITY_ATTRIBUTES(void)
{
/* PREMSECURITY_ATTRIBUTES */
- TEST_TYPE(PREMSECURITY_ATTRIBUTES, 4, 4);
+ TEST_TYPE_SIZE (PREMSECURITY_ATTRIBUTES, 4)
+ TEST_TYPE_ALIGN (PREMSECURITY_ATTRIBUTES, 4)
}
static void test_pack_REMSECURITY_ATTRIBUTES(void)
{
/* REMSECURITY_ATTRIBUTES (pack 4) */
- TEST_TYPE(REMSECURITY_ATTRIBUTES, 12, 4);
- TEST_FIELD(REMSECURITY_ATTRIBUTES, DWORD, nLength, 0, 4, 4);
- TEST_FIELD(REMSECURITY_ATTRIBUTES, DWORD, lpSecurityDescriptor, 4, 4, 4);
- TEST_FIELD(REMSECURITY_ATTRIBUTES, BOOL, bInheritHandle, 8, 4, 4);
+ TEST_TYPE_SIZE (REMSECURITY_ATTRIBUTES, 12)
+ TEST_TYPE_ALIGN (REMSECURITY_ATTRIBUTES, 4)
+ TEST_FIELD_SIZE (REMSECURITY_ATTRIBUTES, nLength, 4)
+ TEST_FIELD_ALIGN (REMSECURITY_ATTRIBUTES, nLength, 4)
+ TEST_FIELD_OFFSET(REMSECURITY_ATTRIBUTES, nLength, 0)
+ TEST_FIELD_SIZE (REMSECURITY_ATTRIBUTES, lpSecurityDescriptor, 4)
+ TEST_FIELD_ALIGN (REMSECURITY_ATTRIBUTES, lpSecurityDescriptor, 4)
+ TEST_FIELD_OFFSET(REMSECURITY_ATTRIBUTES, lpSecurityDescriptor, 4)
+ TEST_FIELD_SIZE (REMSECURITY_ATTRIBUTES, bInheritHandle, 4)
+ TEST_FIELD_ALIGN (REMSECURITY_ATTRIBUTES, bInheritHandle, 4)
+ TEST_FIELD_OFFSET(REMSECURITY_ATTRIBUTES, bInheritHandle, 8)
}
static void test_pack_RemBINDINFO(void)
{
/* RemBINDINFO (pack 4) */
- TEST_TYPE(RemBINDINFO, 72, 4);
- TEST_FIELD(RemBINDINFO, ULONG, cbSize, 0, 4, 4);
- TEST_FIELD(RemBINDINFO, LPWSTR, szExtraInfo, 4, 4, 4);
- TEST_FIELD(RemBINDINFO, DWORD, grfBindInfoF, 8, 4, 4);
- TEST_FIELD(RemBINDINFO, DWORD, dwBindVerb, 12, 4, 4);
- TEST_FIELD(RemBINDINFO, LPWSTR, szCustomVerb, 16, 4, 4);
- TEST_FIELD(RemBINDINFO, DWORD, cbstgmedData, 20, 4, 4);
- TEST_FIELD(RemBINDINFO, DWORD, dwOptions, 24, 4, 4);
- TEST_FIELD(RemBINDINFO, DWORD, dwOptionsFlags, 28, 4, 4);
- TEST_FIELD(RemBINDINFO, DWORD, dwCodePage, 32, 4, 4);
- TEST_FIELD(RemBINDINFO, REMSECURITY_ATTRIBUTES, securityAttributes, 36, 12, 4);
- TEST_FIELD(RemBINDINFO, IID, iid, 48, 16, 4);
- TEST_FIELD(RemBINDINFO, IUnknown *, pUnk, 64, 4, 4);
- TEST_FIELD(RemBINDINFO, DWORD, dwReserved, 68, 4, 4);
+ TEST_TYPE_SIZE (RemBINDINFO, 72)
+ TEST_TYPE_ALIGN (RemBINDINFO, 4)
+ TEST_FIELD_SIZE (RemBINDINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (RemBINDINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, cbSize, 0)
+ TEST_FIELD_SIZE (RemBINDINFO, szExtraInfo, 4)
+ TEST_FIELD_ALIGN (RemBINDINFO, szExtraInfo, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, szExtraInfo, 4)
+ TEST_FIELD_SIZE (RemBINDINFO, grfBindInfoF, 4)
+ TEST_FIELD_ALIGN (RemBINDINFO, grfBindInfoF, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, grfBindInfoF, 8)
+ TEST_FIELD_SIZE (RemBINDINFO, dwBindVerb, 4)
+ TEST_FIELD_ALIGN (RemBINDINFO, dwBindVerb, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, dwBindVerb, 12)
+ TEST_FIELD_SIZE (RemBINDINFO, szCustomVerb, 4)
+ TEST_FIELD_ALIGN (RemBINDINFO, szCustomVerb, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, szCustomVerb, 16)
+ TEST_FIELD_SIZE (RemBINDINFO, cbstgmedData, 4)
+ TEST_FIELD_ALIGN (RemBINDINFO, cbstgmedData, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, cbstgmedData, 20)
+ TEST_FIELD_SIZE (RemBINDINFO, dwOptions, 4)
+ TEST_FIELD_ALIGN (RemBINDINFO, dwOptions, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, dwOptions, 24)
+ TEST_FIELD_SIZE (RemBINDINFO, dwOptionsFlags, 4)
+ TEST_FIELD_ALIGN (RemBINDINFO, dwOptionsFlags, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, dwOptionsFlags, 28)
+ TEST_FIELD_SIZE (RemBINDINFO, dwCodePage, 4)
+ TEST_FIELD_ALIGN (RemBINDINFO, dwCodePage, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, dwCodePage, 32)
+ TEST_FIELD_SIZE (RemBINDINFO, securityAttributes, 12)
+ TEST_FIELD_ALIGN (RemBINDINFO, securityAttributes, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, securityAttributes, 36)
+ TEST_FIELD_SIZE (RemBINDINFO, iid, 16)
+ TEST_FIELD_ALIGN (RemBINDINFO, iid, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, iid, 48)
+ TEST_FIELD_SIZE (RemBINDINFO, pUnk, 4)
+ TEST_FIELD_ALIGN (RemBINDINFO, pUnk, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, pUnk, 64)
+ TEST_FIELD_SIZE (RemBINDINFO, dwReserved, 4)
+ TEST_FIELD_ALIGN (RemBINDINFO, dwReserved, 4)
+ TEST_FIELD_OFFSET(RemBINDINFO, dwReserved, 68)
}
static void test_pack_RemFORMATETC(void)
{
/* RemFORMATETC (pack 4) */
- TEST_TYPE(RemFORMATETC, 20, 4);
- TEST_FIELD(RemFORMATETC, DWORD, cfFormat, 0, 4, 4);
- TEST_FIELD(RemFORMATETC, DWORD, ptd, 4, 4, 4);
- TEST_FIELD(RemFORMATETC, DWORD, dwAspect, 8, 4, 4);
- TEST_FIELD(RemFORMATETC, LONG, lindex, 12, 4, 4);
- TEST_FIELD(RemFORMATETC, DWORD, tymed, 16, 4, 4);
+ TEST_TYPE_SIZE (RemFORMATETC, 20)
+ TEST_TYPE_ALIGN (RemFORMATETC, 4)
+ TEST_FIELD_SIZE (RemFORMATETC, cfFormat, 4)
+ TEST_FIELD_ALIGN (RemFORMATETC, cfFormat, 4)
+ TEST_FIELD_OFFSET(RemFORMATETC, cfFormat, 0)
+ TEST_FIELD_SIZE (RemFORMATETC, ptd, 4)
+ TEST_FIELD_ALIGN (RemFORMATETC, ptd, 4)
+ TEST_FIELD_OFFSET(RemFORMATETC, ptd, 4)
+ TEST_FIELD_SIZE (RemFORMATETC, dwAspect, 4)
+ TEST_FIELD_ALIGN (RemFORMATETC, dwAspect, 4)
+ TEST_FIELD_OFFSET(RemFORMATETC, dwAspect, 8)
+ TEST_FIELD_SIZE (RemFORMATETC, lindex, 4)
+ TEST_FIELD_ALIGN (RemFORMATETC, lindex, 4)
+ TEST_FIELD_OFFSET(RemFORMATETC, lindex, 12)
+ TEST_FIELD_SIZE (RemFORMATETC, tymed, 4)
+ TEST_FIELD_ALIGN (RemFORMATETC, tymed, 4)
+ TEST_FIELD_OFFSET(RemFORMATETC, tymed, 16)
}
static void test_pack(void)
@@ -345,5 +379,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/urlmon/misc.c b/rostests/winetests/urlmon/misc.c
index 6d3305e5752..2123392ebce 100644
--- a/rostests/winetests/urlmon/misc.c
+++ b/rostests/winetests/urlmon/misc.c
@@ -823,6 +823,27 @@ static void test_SecurityManager(void)
IInternetSecurityManager_Release(secmgr);
}
+/* Check if Internet Explorer is configured to run in "Enhanced Security Configuration" (aka hardened mode) */
+/* Note: this code is duplicated in dlls/mshtml/tests/dom.c, dlls/mshtml/tests/script.c and dlls/urlmon/tests/misc.c */
+static BOOL is_ie_hardened(void)
+{
+ HKEY zone_map;
+ DWORD ie_harden, type, size;
+
+ ie_harden = 0;
+ if(RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap",
+ 0, KEY_QUERY_VALUE, &zone_map) == ERROR_SUCCESS) {
+ size = sizeof(DWORD);
+ if (RegQueryValueEx(zone_map, "IEHarden", NULL, &type, (LPBYTE) &ie_harden, &size) != ERROR_SUCCESS ||
+ type != REG_DWORD) {
+ ie_harden = 0;
+ }
+ RegCloseKey(zone_map);
+ }
+
+ return ie_harden != 0;
+}
+
static void test_url_action(IInternetSecurityManager *secmgr, IInternetZoneManager *zonemgr, DWORD action)
{
DWORD res, size, policy, reg_policy;
@@ -863,15 +884,19 @@ static void test_url_action(IInternetSecurityManager *secmgr, IInternetZoneManag
ok(policy == reg_policy, "(%x) policy=%x, expected %x\n", action, policy, reg_policy);
if(policy != URLPOLICY_QUERY) {
- policy = 0xdeadbeef;
- hres = IInternetSecurityManager_ProcessUrlAction(secmgr, url9, action, (BYTE*)&policy,
- sizeof(WCHAR), NULL, 0, 0, 0);
- if(reg_policy == URLPOLICY_DISALLOW)
- ok(hres == S_FALSE, "ProcessUrlAction(%x) failed: %08x, expected S_FALSE\n", action, hres);
- else
- ok(hres == S_OK, "ProcessUrlAction(%x) failed: %08x\n", action, hres);
- ok(policy == 0xdeadbeef, "(%x) policy=%x\n", action, policy);
- }
+ if(winetest_interactive || ! is_ie_hardened()) {
+ policy = 0xdeadbeef;
+ hres = IInternetSecurityManager_ProcessUrlAction(secmgr, url9, action, (BYTE*)&policy,
+ sizeof(WCHAR), NULL, 0, 0, 0);
+ if(reg_policy == URLPOLICY_DISALLOW)
+ ok(hres == S_FALSE, "ProcessUrlAction(%x) failed: %08x, expected S_FALSE\n", action, hres);
+ else
+ ok(hres == S_OK, "ProcessUrlAction(%x) failed: %08x\n", action, hres);
+ ok(policy == 0xdeadbeef, "(%x) policy=%x\n", action, policy);
+ }else {
+ skip("IE running in Enhanced Security Configuration\n");
+ }
+ }
}
static void test_special_url_action(IInternetSecurityManager *secmgr, IInternetZoneManager *zonemgr, DWORD action)
@@ -1305,18 +1330,20 @@ static void test_ReleaseBindInfo(void)
static void test_CopyStgMedium(void)
{
STGMEDIUM src, dst;
+ HGLOBAL empty;
HRESULT hres;
static WCHAR fileW[] = {'f','i','l','e',0};
memset(&src, 0xf0, sizeof(src));
memset(&dst, 0xe0, sizeof(dst));
+ memset(&empty, 0xf0, sizeof(empty));
src.tymed = TYMED_NULL;
src.pUnkForRelease = NULL;
hres = CopyStgMedium(&src, &dst);
ok(hres == S_OK, "CopyStgMedium failed: %08x\n", hres);
ok(dst.tymed == TYMED_NULL, "tymed=%d\n", dst.tymed);
- ok(dst.u.hGlobal == (void*)0xf0f0f0f0, "u=%p\n", dst.u.hGlobal);
+ ok(dst.u.hGlobal == empty, "u=%p\n", dst.u.hGlobal);
ok(!dst.pUnkForRelease, "pUnkForRelease=%p, expected NULL\n", dst.pUnkForRelease);
memset(&dst, 0xe0, sizeof(dst));
diff --git a/rostests/winetests/urlmon/protocol.c b/rostests/winetests/urlmon/protocol.c
index 55a605230cf..eb422828cdc 100644
--- a/rostests/winetests/urlmon/protocol.c
+++ b/rostests/winetests/urlmon/protocol.c
@@ -74,6 +74,9 @@ DEFINE_EXPECT(ReportProgress_VERIFIEDMIMETYPEAVAILABLE);
DEFINE_EXPECT(ReportProgress_PROTOCOLCLASSID);
DEFINE_EXPECT(ReportProgress_COOKIE_SENT);
DEFINE_EXPECT(ReportProgress_REDIRECTING);
+DEFINE_EXPECT(ReportProgress_ENCODING);
+DEFINE_EXPECT(ReportProgress_ACCEPTRANGES);
+DEFINE_EXPECT(ReportProgress_PROXYDETECTING);
DEFINE_EXPECT(ReportData);
DEFINE_EXPECT(ReportResult);
DEFINE_EXPECT(GetBindString_ACCEPT_MIMES);
@@ -124,6 +127,7 @@ static DWORD prot_read;
static enum {
FILE_TEST,
HTTP_TEST,
+ HTTPS_TEST,
MK_TEST,
BIND_TEST
} tested_protocol;
@@ -163,6 +167,13 @@ static const char *debugstr_guid(REFIID riid)
return buf;
}
+static int strcmp_wa(LPCWSTR strw, const char *stra)
+{
+ WCHAR buf[512];
+ MultiByteToWideChar(CP_ACP, 0, stra, -1, buf, sizeof(buf)/sizeof(WCHAR));
+ return lstrcmpW(strw, buf);
+}
+
static HRESULT WINAPI HttpNegotiate_QueryInterface(IHttpNegotiate2 *iface, REFIID riid, void **ppv)
{
if(IsEqualGUID(&IID_IUnknown, riid)
@@ -346,8 +357,9 @@ static HRESULT WINAPI ProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOL
if (!state) {
if (http_is_first) {
- CHECK_CALLED(ReportProgress_FINDINGRESOURCE);
- CHECK_CALLED(ReportProgress_CONNECTING);
+ CLEAR_CALLED(ReportProgress_FINDINGRESOURCE);
+ CLEAR_CALLED(ReportProgress_CONNECTING);
+ CLEAR_CALLED(ReportProgress_PROXYDETECTING);
} else todo_wine {
CHECK_NOT_CALLED(ReportProgress_FINDINGRESOURCE);
/* IE7 does call this */
@@ -355,6 +367,8 @@ static HRESULT WINAPI ProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOL
}
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);
@@ -368,6 +382,8 @@ static HRESULT WINAPI ProtocolSink_Switch(IInternetProtocolSink *iface, PROTOCOL
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);
@@ -384,12 +400,6 @@ static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface,
static const WCHAR null_guid[] = {'{','0','0','0','0','0','0','0','0','-','0','0','0','0','-',
'0','0','0','0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0','0','0','0','}',0};
static const WCHAR text_plain[] = {'t','e','x','t','/','p','l','a','i','n',0};
- static const WCHAR post_host[] =
- {'c','r','o','s','s','o','v','e','r','.','c','o','d','e',
- 'w','e','a','v','e','r','s','.','c','o','m',0};
- static const WCHAR wszCrossoverIP[] =
- {'2','0','9','.','4','6','.','2','5','.','1','3','2',0};
- /* I'm not sure if it's a good idea to hardcode here the IP address... */
switch(ulStatusCode) {
case BINDSTATUS_MIMETYPEAVAILABLE:
@@ -435,23 +445,10 @@ static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface,
case BINDSTATUS_FINDINGRESOURCE:
CHECK_EXPECT(ReportProgress_FINDINGRESOURCE);
ok(szStatusText != NULL, "szStatusText == NULL\n");
- if(szStatusText)
- {
- if (!http_post_test)
- ok(!lstrcmpW(szStatusText, hostW),
- "szStatustext != \"www.winehq.org\"\n");
- else
- ok(!lstrcmpW(szStatusText, post_host),
- "szStatustext != \"crossover.codeweavers.com\"\n");
- }
break;
case BINDSTATUS_CONNECTING:
CHECK_EXPECT(ReportProgress_CONNECTING);
ok(szStatusText != NULL, "szStatusText == NULL\n");
- if(szStatusText)
- ok(!lstrcmpW(szStatusText, http_post_test ?
- wszCrossoverIP : winehq_ipW),
- "Unexpected szStatusText\n");
break;
case BINDSTATUS_SENDINGREQUEST:
CHECK_EXPECT(ReportProgress_SENDINGREQUEST);
@@ -478,7 +475,20 @@ static HRESULT WINAPI ProtocolSink_ReportProgress(IInternetProtocolSink *iface,
break;
case BINDSTATUS_REDIRECTING:
CHECK_EXPECT(ReportProgress_REDIRECTING);
- ok(szStatusText == NULL, "szStatusText != NULL\n");
+ ok(szStatusText == NULL, "szStatusText = %s\n", debugstr_w(szStatusText));
+ break;
+ case BINDSTATUS_ENCODING:
+ CHECK_EXPECT(ReportProgress_ENCODING);
+ ok(!strcmp_wa(szStatusText, "gzip"), "szStatusText = %s\n", debugstr_w(szStatusText));
+ break;
+ case BINDSTATUS_ACCEPTRANGES:
+ CHECK_EXPECT(ReportProgress_ACCEPTRANGES);
+ ok(!szStatusText, "szStatusText = %s\n", debugstr_w(szStatusText));
+ break;
+ case BINDSTATUS_PROXYDETECTING:
+ CHECK_EXPECT(ReportProgress_PROXYDETECTING);
+ SET_EXPECT(ReportProgress_CONNECTING);
+ ok(!szStatusText, "szStatusText = %s\n", debugstr_w(szStatusText));
break;
default:
ok(0, "Unexpected status %d\n", ulStatusCode);
@@ -498,8 +508,8 @@ static HRESULT WINAPI ProtocolSink_ReportData(IInternetProtocolSink *iface, DWOR
ok(ulProgressMax == 13, "ulProgressMax=%d, expected 13\n", ulProgressMax);
ok(grfBSCF == (BSCF_FIRSTDATANOTIFICATION | BSCF_LASTDATANOTIFICATION),
"grcfBSCF = %08x\n", grfBSCF);
- }else if(!binding_test && tested_protocol == HTTP_TEST) {
- if(!(grfBSCF & BSCF_LASTDATANOTIFICATION))
+ }else if(!binding_test && (tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST)) {
+ if(!(grfBSCF & BSCF_LASTDATANOTIFICATION) || (grfBSCF & BSCF_DATAFULLYAVAILABLE))
CHECK_EXPECT(ReportData);
else if (http_post_test)
ok(ulProgress == 13, "Read %u bytes instead of 13\n", ulProgress);
@@ -507,11 +517,14 @@ static HRESULT WINAPI ProtocolSink_ReportData(IInternetProtocolSink *iface, DWOR
ok(ulProgress, "ulProgress == 0\n");
if(first_data_notif) {
- ok(grfBSCF == BSCF_FIRSTDATANOTIFICATION, "grcfBSCF = %08x\n", grfBSCF);
+ ok(grfBSCF == BSCF_FIRSTDATANOTIFICATION
+ || grfBSCF == (BSCF_LASTDATANOTIFICATION|BSCF_DATAFULLYAVAILABLE),
+ "grcfBSCF = %08x\n", grfBSCF);
first_data_notif = FALSE;
} else {
ok(grfBSCF == BSCF_INTERMEDIATEDATANOTIFICATION
- || grfBSCF == (BSCF_LASTDATANOTIFICATION|BSCF_INTERMEDIATEDATANOTIFICATION),
+ || grfBSCF == (BSCF_LASTDATANOTIFICATION|BSCF_INTERMEDIATEDATANOTIFICATION)
+ || broken(grfBSCF == (BSCF_FIRSTDATANOTIFICATION|BSCF_LASTDATANOTIFICATION)),
"grcfBSCF = %08x\n", grfBSCF);
}
@@ -870,7 +883,7 @@ static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
ok(hres == S_OK, "ReportProgress(BINDSTATUS_SENDINGREQUEST) failed: %08x\n", hres);
CHECK_CALLED(ReportProgress_SENDINGREQUEST);
- if(tested_protocol == HTTP_TEST) {
+ if(tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST) {
IServiceProvider *service_provider;
IHttpNegotiate *http_negotiate;
IHttpNegotiate2 *http_negotiate2;
@@ -1084,7 +1097,7 @@ static HRESULT WINAPI Protocol_Read(IInternetProtocol *iface, void *pv,
}
if((b = !b))
- return tested_protocol == HTTP_TEST ? E_PENDING : S_FALSE;
+ return tested_protocol == HTTP_TEST || tested_protocol == HTTPS_TEST ? E_PENDING : S_FALSE;
memset(pv, 'x', 100);
prot_read += *pcbRead = 100;
@@ -1547,7 +1560,7 @@ static BOOL http_protocol_start(LPCWSTR url, BOOL is_first)
/* 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_first)
+static void test_http_protocol_url(LPCWSTR url, BOOL is_https, BOOL is_first)
{
IInternetProtocolInfo *protocol_info;
IClassFactory *factory;
@@ -1557,7 +1570,8 @@ static void test_http_protocol_url(LPCWSTR url, BOOL is_first)
http_url = url;
http_is_first = is_first;
- hres = CoGetClassObject(&CLSID_HttpProtocol, CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void**)&unk);
+ hres = CoGetClassObject(is_https ? &CLSID_HttpSProtocol : &CLSID_HttpProtocol,
+ CLSCTX_INPROC_SERVER, NULL, &IID_IUnknown, (void**)&unk);
ok(hres == S_OK, "CoGetClassObject failed: %08x\n", hres);
if(FAILED(hres))
return;
@@ -1585,6 +1599,9 @@ static void test_http_protocol_url(LPCWSTR url, BOOL is_first)
SET_EXPECT(ReportProgress_FINDINGRESOURCE);
SET_EXPECT(ReportProgress_CONNECTING);
SET_EXPECT(ReportProgress_SENDINGREQUEST);
+ SET_EXPECT(ReportProgress_PROXYDETECTING);
+ if(! is_https)
+ SET_EXPECT(ReportProgress_CACHEFILENAMEAVAILABLE);
if(!(bindf & BINDF_FROMURLMON)) {
SET_EXPECT(OnResponse);
SET_EXPECT(ReportProgress_RAWMIMETYPE);
@@ -1676,25 +1693,37 @@ static void test_http_protocol(void)
trace("Testing http protocol (not from urlmon)...\n");
tested_protocol = HTTP_TEST;
bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
- test_http_protocol_url(winehq_url, TRUE);
+ test_http_protocol_url(winehq_url, FALSE, TRUE);
trace("Testing http protocol (from urlmon)...\n");
bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON;
- test_http_protocol_url(winehq_url, FALSE);
+ test_http_protocol_url(winehq_url, FALSE, FALSE);
trace("Testing http protocol (to file)...\n");
bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON | BINDF_NEEDFILE;
- test_http_protocol_url(winehq_url, FALSE);
+ test_http_protocol_url(winehq_url, FALSE, FALSE);
trace("Testing http protocol (post data)...\n");
http_post_test = TRUE;
/* Without this flag we get a ReportProgress_CACHEFILENAMEAVAILABLE
* notification with BINDVERB_POST */
bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON | BINDF_NOWRITECACHE;
- test_http_protocol_url(posttest_url, TRUE);
+ test_http_protocol_url(posttest_url, FALSE, TRUE);
http_post_test = FALSE;
}
+static void test_https_protocol(void)
+{
+ static const WCHAR codeweavers_url[] =
+ {'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};
+
+ trace("Testing https protocol (from urlmon)...\n");
+ tested_protocol = HTTPS_TEST;
+ bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA | BINDF_FROMURLMON | BINDF_NOWRITECACHE;
+ test_http_protocol_url(codeweavers_url, TRUE, TRUE);
+}
+
static void test_mk_protocol(void)
{
IInternetProtocolInfo *protocol_info;
@@ -1939,7 +1968,7 @@ static void test_binding(int prot)
CHECK_CALLED(SetPriority);
CHECK_CALLED(Start);
- if(prot == HTTP_TEST) {
+ if(prot == HTTP_TEST || prot == HTTPS_TEST) {
while(prot_state < 4) {
WaitForSingleObject(event_complete, INFINITE);
SET_EXPECT(Continue);
@@ -1981,6 +2010,7 @@ START_TEST(protocol)
test_file_protocol();
test_http_protocol();
+ test_https_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 830ef1a1f49..094d21dd546 100644
--- a/rostests/winetests/urlmon/url.c
+++ b/rostests/winetests/urlmon/url.c
@@ -69,6 +69,12 @@ DEFINE_GUID(IID_IBindStatusCallbackHolder,0x79eac9cc,0xbaf9,0x11ce,0x8c,0x82,0x0
expect_ ## func = called_ ## func = FALSE; \
}while(0)
+#define CHECK_CALLED_BROKEN(func) \
+ do { \
+ ok(called_ ## func || broken(!called_ ## func), "expected " #func "\n"); \
+ expect_ ## func = called_ ## func = FALSE; \
+ }while(0)
+
#define CLEAR_CALLED(func) \
expect_ ## func = called_ ## func = FALSE
@@ -138,6 +144,10 @@ static const WCHAR ITS_URL[] =
{'i','t','s',':','t','e','s','t','.','c','h','m',':',':','/','b','l','a','n','k','.','h','t','m','l',0};
static const WCHAR MK_URL[] = {'m','k',':','@','M','S','I','T','S','t','o','r','e',':',
't','e','s','t','.','c','h','m',':',':','/','b','l','a','n','k','.','h','t','m','l',0};
+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 wszTextHtml[] = {'t','e','x','t','/','h','t','m','l',0};
@@ -168,7 +178,8 @@ static LPCWSTR urls[] = {
ABOUT_BLANK,
INDEX_HTML,
ITS_URL,
- MK_URL
+ MK_URL,
+ https_urlW
};
static WCHAR file_url[INTERNET_MAX_URL_LENGTH];
@@ -178,7 +189,8 @@ static enum {
ABOUT_TEST,
FILE_TEST,
ITS_TEST,
- MK_TEST
+ MK_TEST,
+ HTTPS_TEST
} test_protocol;
static enum {
@@ -307,7 +319,7 @@ static DWORD WINAPI thread_proc(PVOID arg)
CHECK_CALLED(Obj_OnProgress_BEGINSYNCOPERATION);
CHECK_CALLED(CreateInstance);
CHECK_CALLED(PutProperty_MIMETYPEPROP);
- CLEAR_CALLED(PutProperty_CLASSIDPROP);
+ CHECK_CALLED_BROKEN(PutProperty_CLASSIDPROP);
CHECK_CALLED(Load);
CHECK_CALLED(Obj_OnProgress_ENDSYNCOPERATION);
CHECK_CALLED(OnObjectAvailable);
@@ -397,7 +409,8 @@ 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 == FILE_TEST || test_protocol == MK_TEST
+ || test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)) {
ok(bindf == (BINDF_ASYNCHRONOUS|BINDF_ASYNCSTORAGE|BINDF_PULLDATA
|BINDF_FROMURLMON),
"bindf=%08x\n", bindf);
@@ -447,7 +460,7 @@ static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
break;
}
- if(test_protocol == HTTP_TEST) {
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST) {
IServiceProvider *service_provider;
IHttpNegotiate *http_negotiate;
IHttpNegotiate2 *http_negotiate2;
@@ -605,7 +618,7 @@ static HRESULT WINAPI Protocol_Start(IInternetProtocol *iface, LPCWSTR szUrl,
CHECK_CALLED(Obj_OnProgress_BEGINSYNCOPERATION);
CHECK_CALLED(CreateInstance);
CHECK_CALLED(PutProperty_MIMETYPEPROP);
- CLEAR_CALLED(PutProperty_CLASSIDPROP);
+ CHECK_CALLED_BROKEN(PutProperty_CLASSIDPROP);
CHECK_CALLED(Load);
CHECK_CALLED(Obj_OnProgress_ENDSYNCOPERATION);
CHECK_CALLED(OnObjectAvailable);
@@ -672,6 +685,11 @@ static HRESULT WINAPI Protocol_Continue(IInternetProtocol *iface,
IHttpNegotiate_Release(http_negotiate);
ok(hres == S_OK, "OnResponse failed: %08x\n", hres);
+ if(test_protocol == HTTPS_TEST) {
+ hres = IInternetProtocolSink_ReportProgress(protocol_sink, BINDSTATUS_ACCEPTRANGES, NULL);
+ ok(hres == S_OK, "ReportProgress(BINDSTATUS_ACCEPTRANGES) failed: %08x\n", hres);
+ }
+
hres = IInternetProtocolSink_ReportProgress(protocol_sink,
BINDSTATUS_MIMETYPEAVAILABLE, wszTextHtml);
ok(hres == S_OK,
@@ -772,7 +790,7 @@ static HRESULT WINAPI Protocol_Read(IInternetProtocol *iface, void *pv,
CHECK_EXPECT2(Read);
- if(test_protocol == HTTP_TEST) {
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST) {
HRESULT hres;
static BOOL pending = TRUE;
@@ -1206,7 +1224,7 @@ static HRESULT WINAPI statusclb_OnProgress(IBindStatusCallback *iface, ULONG ulP
download_state = END_DOWNLOAD;
break;
case BINDSTATUS_CACHEFILENAMEAVAILABLE:
- if(test_protocol != HTTP_TEST) {
+ if(test_protocol != HTTP_TEST && test_protocol != HTTPS_TEST) {
if(iface == &objbsc)
CHECK_EXPECT(Obj_OnProgress_CACHEFILENAMEAVAILABLE);
else
@@ -1248,6 +1266,9 @@ static HRESULT WINAPI statusclb_OnProgress(IBindStatusCallback *iface, ULONG ulP
ok(0, "unexpected call\n");
ok(szStatusText == NULL, "Expected szStatusText to be NULL\n");
break;
+ case BINDSTATUS_PROXYDETECTING:
+ trace("BINDSTATUS_PROXYDETECTING\n");
+ break;
default:
ok(0, "unexpected code %d\n", ulStatusCode);
};
@@ -1276,7 +1297,7 @@ static HRESULT WINAPI statusclb_OnStopBinding(IBindStatusCallback *iface, HRESUL
ok(hresult == binding_hres, "binding failed: %08x, expected %08x\n", hresult, binding_hres);
ok(szError == NULL, "szError should be NULL\n");
- if(test_protocol == HTTP_TEST && emulate_protocol) {
+ if((test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST) && emulate_protocol) {
SetEvent(complete_event);
if(iface != &objbsc)
WaitForSingleObject(complete_event2, INFINITE);
@@ -1376,7 +1397,8 @@ static HRESULT WINAPI statusclb_OnDataAvailable(IBindStatusCallback *iface, DWOR
ok(pstgmed->u.lpszFileName != NULL, "lpszFileName == NULL\n");
}
- if(test_protocol == HTTP_TEST && emulate_protocol && prot_state < 4 && (!bind_to_object || prot_state > 1))
+ if((test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
+ && emulate_protocol && prot_state < 4 && (!bind_to_object || prot_state > 1))
SetEvent(complete_event);
return S_OK;
@@ -1505,7 +1527,7 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
CHECK_EXPECT(Load);
ok(GetCurrentThreadId() == thread_id, "wrong thread %d\n", GetCurrentThreadId());
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
ok(!fFullyAvailable, "fFulyAvailable = %x\n", fFullyAvailable);
else
ok(fFullyAvailable, "fFulyAvailable = %x\n", fFullyAvailable);
@@ -1535,11 +1557,11 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
if(test_protocol == FILE_TEST)
SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
- if(test_protocol != HTTP_TEST)
+ if(test_protocol != HTTP_TEST && test_protocol != HTTPS_TEST)
SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
SET_EXPECT(LockRequest);
SET_EXPECT(OnDataAvailable);
- if(test_protocol != HTTP_TEST)
+ if(test_protocol != HTTP_TEST && test_protocol != HTTPS_TEST)
SET_EXPECT(OnStopBinding);
hres = IMoniker_BindToStorage(pimkName, pibc, NULL, &IID_IStream, (void**)&unk);
@@ -1550,11 +1572,11 @@ static HRESULT WINAPI PersistMoniker_Load(IPersistMoniker *iface, BOOL fFullyAva
CHECK_CALLED(OnProgress_BEGINDOWNLOADDATA);
if(test_protocol == FILE_TEST)
CHECK_CALLED(OnProgress_CACHEFILENAMEAVAILABLE);
- if(test_protocol != HTTP_TEST)
+ if(test_protocol != HTTP_TEST && test_protocol != HTTPS_TEST)
CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
CHECK_CALLED(LockRequest);
CHECK_CALLED(OnDataAvailable);
- if(test_protocol != HTTP_TEST)
+ if(test_protocol != HTTP_TEST && test_protocol != HTTPS_TEST)
CHECK_CALLED(OnStopBinding);
if(unk)
@@ -1768,7 +1790,7 @@ static void test_CreateAsyncBindCtxEx(void)
IBindCtx_Release(bctx2);
}
-static void test_bscholder(IBindStatusCallback *holder)
+static BOOL test_bscholder(IBindStatusCallback *holder)
{
IServiceProvider *serv_prov;
IHttpNegotiate *http_negotiate, *http_negotiate_serv;
@@ -1776,6 +1798,7 @@ static void test_bscholder(IBindStatusCallback *holder)
IAuthenticate *authenticate, *authenticate_serv;
IInternetProtocol *protocol;
BINDINFO bindinfo = {sizeof(bindinfo)};
+ BOOL ret = TRUE;
LPWSTR wstr;
DWORD dw;
HRESULT hres;
@@ -1847,6 +1870,7 @@ static void test_bscholder(IBindStatusCallback *holder)
IHttpNegotiate_Release(http_negotiate2);
}else {
skip("Could not get IHttpNegotiate2\n");
+ ret = FALSE;
}
SET_EXPECT(OnProgress_FINDINGRESOURCE);
@@ -1897,12 +1921,14 @@ static void test_bscholder(IBindStatusCallback *holder)
CHECK_CALLED(QueryService_IInternetProtocol);
IServiceProvider_Release(serv_prov);
+ return ret;
}
-static void test_RegisterBindStatusCallback(void)
+static BOOL test_RegisterBindStatusCallback(void)
{
IBindStatusCallback *prevbsc, *clb;
IBindCtx *bindctx;
+ BOOL ret = TRUE;
IUnknown *unk;
HRESULT hres;
@@ -1933,7 +1959,8 @@ static void test_RegisterBindStatusCallback(void)
ok(hres == S_OK, "QueryInterface(IID_IBindStatusCallback) failed: %08x\n", hres);
ok(clb != &bsc, "bsc == clb\n");
- test_bscholder(clb);
+ if(!test_bscholder(clb))
+ ret = FALSE;
IBindStatusCallback_Release(clb);
@@ -1958,6 +1985,7 @@ static void test_RegisterBindStatusCallback(void)
ok(hres == E_INVALIDARG, "RevokeBindStatusCallback failed: %08x\n", hres);
IBindCtx_Release(bindctx);
+ return ret;
}
#define BINDTEST_EMULATE 1
@@ -2035,12 +2063,12 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
SET_EXPECT(OnStartBinding);
if(emulate_protocol) {
SET_EXPECT(Start);
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
SET_EXPECT(Terminate);
if(tymed != TYMED_FILE || (test_protocol != ABOUT_TEST && test_protocol != ITS_TEST))
SET_EXPECT(UnlockRequest);
}else {
- if(test_protocol == HTTP_TEST) {
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST) {
SET_EXPECT(QueryInterface_IInternetBindInfo);
SET_EXPECT(QueryService_IInternetBindInfo);
SET_EXPECT(QueryInterface_IHttpNegotiate);
@@ -2050,15 +2078,15 @@ 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 == FILE_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FILE_TEST)
SET_EXPECT(OnProgress_SENDINGREQUEST);
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
SET_EXPECT(OnResponse);
SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
if(test_protocol == FILE_TEST)
SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
SET_EXPECT(OnProgress_DOWNLOADINGDATA);
SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
if(tymed != TYMED_FILE || test_protocol != ABOUT_TEST)
@@ -2067,7 +2095,8 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
}
hres = IMoniker_BindToStorage(mon, bctx, NULL, tymed == TYMED_ISTREAM ? &IID_IStream : &IID_IUnknown, (void**)&unk);
- if (test_protocol == HTTP_TEST && hres == HRESULT_FROM_WIN32(ERROR_INTERNET_NAME_NOT_RESOLVED))
+ if ((test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
+ && hres == HRESULT_FROM_WIN32(ERROR_INTERNET_NAME_NOT_RESOLVED))
{
skip("Network unreachable, skipping tests\n");
return;
@@ -2104,7 +2133,7 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
CHECK_CALLED(OnStartBinding);
if(emulate_protocol) {
CHECK_CALLED(Start);
- if(test_protocol == HTTP_TEST) {
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST) {
if(tymed == TYMED_FILE)
CLEAR_CALLED(Read);
CHECK_CALLED(Terminate);
@@ -2112,7 +2141,7 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
if(tymed != TYMED_FILE || (test_protocol != ABOUT_TEST && test_protocol != ITS_TEST))
CHECK_CALLED(UnlockRequest);
}else {
- if(test_protocol == HTTP_TEST) {
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST) {
CLEAR_CALLED(QueryInterface_IInternetBindInfo);
CLEAR_CALLED(QueryService_IInternetBindInfo);
CHECK_CALLED(QueryInterface_IHttpNegotiate);
@@ -2122,7 +2151,7 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
CHECK_CALLED(QueryInterface_IHttpNegotiate2);
CHECK_CALLED(GetRootSecurityId);
}
- if(http_is_first) {
+ if(http_is_first || test_protocol == HTTPS_TEST) {
CHECK_CALLED(OnProgress_FINDINGRESOURCE);
CHECK_CALLED(OnProgress_CONNECTING);
}else todo_wine {
@@ -2131,15 +2160,15 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
CLEAR_CALLED(OnProgress_CONNECTING);
}
}
- if(test_protocol == HTTP_TEST || test_protocol == FILE_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FILE_TEST)
CHECK_CALLED(OnProgress_SENDINGREQUEST);
- if(test_protocol == HTTP_TEST)
+ 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)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
CLEAR_CALLED(OnProgress_DOWNLOADINGDATA);
CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
if(tymed != TYMED_FILE || test_protocol != ABOUT_TEST)
@@ -2150,7 +2179,7 @@ static void test_BindToStorage(int protocol, BOOL emul, DWORD t)
ok(IMoniker_Release(mon) == 0, "mon should be destroyed here\n");
ok(IBindCtx_Release(bctx) == 0, "bctx should be destroyed here\n");
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
http_is_first = FALSE;
}
@@ -2201,13 +2230,13 @@ static void test_BindToObject(int protocol, BOOL emul)
SET_EXPECT(Obj_OnStartBinding);
if(emulate_protocol) {
SET_EXPECT(Start);
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
SET_EXPECT(Terminate);
if(test_protocol == FILE_TEST)
SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
SET_EXPECT(UnlockRequest);
}else {
- if(test_protocol == HTTP_TEST) {
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST) {
SET_EXPECT(QueryInterface_IHttpNegotiate);
SET_EXPECT(BeginningTransaction);
SET_EXPECT(QueryInterface_IHttpNegotiate2);
@@ -2215,15 +2244,15 @@ static void test_BindToObject(int protocol, BOOL emul)
SET_EXPECT(Obj_OnProgress_FINDINGRESOURCE);
SET_EXPECT(Obj_OnProgress_CONNECTING);
}
- if(test_protocol == HTTP_TEST || test_protocol == FILE_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FILE_TEST)
SET_EXPECT(Obj_OnProgress_SENDINGREQUEST);
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
SET_EXPECT(OnResponse);
SET_EXPECT(Obj_OnProgress_MIMETYPEAVAILABLE);
SET_EXPECT(Obj_OnProgress_BEGINDOWNLOADDATA);
if(test_protocol == FILE_TEST)
SET_EXPECT(Obj_OnProgress_CACHEFILENAMEAVAILABLE);
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
SET_EXPECT(OnProgress_DOWNLOADINGDATA);
SET_EXPECT(Obj_OnProgress_ENDDOWNLOADDATA);
SET_EXPECT(Obj_OnProgress_CLASSIDAVAILABLE);
@@ -2235,7 +2264,8 @@ static void test_BindToObject(int protocol, BOOL emul)
hres = IMoniker_BindToObject(mon, bctx, NULL, &IID_IUnknown, (void**)&unk);
- if (test_protocol == HTTP_TEST && hres == HRESULT_FROM_WIN32(ERROR_INTERNET_NAME_NOT_RESOLVED))
+ if ((test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
+ && hres == HRESULT_FROM_WIN32(ERROR_INTERNET_NAME_NOT_RESOLVED))
{
skip( "Network unreachable, skipping tests\n" );
return;
@@ -2269,13 +2299,13 @@ static void test_BindToObject(int protocol, BOOL emul)
CHECK_CALLED(Obj_OnStartBinding);
if(emulate_protocol) {
CHECK_CALLED(Start);
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
CHECK_CALLED(Terminate);
if(test_protocol == FILE_TEST)
CLEAR_CALLED(OnProgress_MIMETYPEAVAILABLE); /* not called in IE7 */
CHECK_CALLED(UnlockRequest);
}else {
- if(test_protocol == HTTP_TEST) {
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST) {
CHECK_CALLED(QueryInterface_IHttpNegotiate);
CHECK_CALLED(BeginningTransaction);
if (have_IHttpNegotiate2)
@@ -2292,19 +2322,19 @@ static void test_BindToObject(int protocol, BOOL emul)
CLEAR_CALLED(Obj_OnProgress_CONNECTING);
}
}
- if(test_protocol == HTTP_TEST || test_protocol == FILE_TEST) {
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FILE_TEST) {
if(urls[test_protocol] == SHORT_RESPONSE_URL)
CLEAR_CALLED(Obj_OnProgress_SENDINGREQUEST);
else
CHECK_CALLED(Obj_OnProgress_SENDINGREQUEST);
}
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
CHECK_CALLED(OnResponse);
CHECK_CALLED(Obj_OnProgress_MIMETYPEAVAILABLE);
CHECK_CALLED(Obj_OnProgress_BEGINDOWNLOADDATA);
if(test_protocol == FILE_TEST)
CHECK_CALLED(Obj_OnProgress_CACHEFILENAMEAVAILABLE);
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
CLEAR_CALLED(OnProgress_DOWNLOADINGDATA);
CLEAR_CALLED(Obj_OnProgress_ENDDOWNLOADDATA);
CHECK_CALLED(Obj_OnProgress_CLASSIDAVAILABLE);
@@ -2314,7 +2344,7 @@ static void test_BindToObject(int protocol, BOOL emul)
CHECK_CALLED(Obj_OnStopBinding);
}
- if(test_protocol != HTTP_TEST || emul || urls[test_protocol] == SHORT_RESPONSE_URL) {
+ if(test_protocol != HTTP_TEST || test_protocol == HTTPS_TEST || emul || urls[test_protocol] == SHORT_RESPONSE_URL) {
ok(IMoniker_Release(mon) == 0, "mon should be destroyed here\n");
ok(IBindCtx_Release(bctx) == 0, "bctx should be destroyed here\n");
}else {
@@ -2329,7 +2359,7 @@ static void test_BindToObject(int protocol, BOOL emul)
if(emul)
CoRevokeClassObject(regid);
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
http_is_first = FALSE;
}
@@ -2351,21 +2381,21 @@ static void test_URLDownloadToFile(DWORD prot, BOOL emul)
SET_EXPECT(Start);
SET_EXPECT(UnlockRequest);
}else {
- if(test_protocol == HTTP_TEST) {
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST) {
SET_EXPECT(QueryInterface_IHttpNegotiate);
SET_EXPECT(BeginningTransaction);
SET_EXPECT(QueryInterface_IHttpNegotiate2);
SET_EXPECT(GetRootSecurityId);
}
- if(test_protocol == HTTP_TEST || test_protocol == FILE_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST || test_protocol == FILE_TEST)
SET_EXPECT(OnProgress_SENDINGREQUEST);
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
SET_EXPECT(OnResponse);
SET_EXPECT(OnProgress_MIMETYPEAVAILABLE);
SET_EXPECT(OnProgress_BEGINDOWNLOADDATA);
if(test_protocol == FILE_TEST)
SET_EXPECT(OnProgress_CACHEFILENAMEAVAILABLE);
- if(test_protocol == HTTP_TEST)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
SET_EXPECT(OnProgress_DOWNLOADINGDATA);
SET_EXPECT(OnProgress_ENDDOWNLOADDATA);
SET_EXPECT(OnStopBinding);
@@ -2385,7 +2415,7 @@ static void test_URLDownloadToFile(DWORD prot, BOOL emul)
CHECK_CALLED(Start);
CHECK_CALLED(UnlockRequest);
}else {
- if(test_protocol == HTTP_TEST) {
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST) {
CHECK_CALLED(QueryInterface_IHttpNegotiate);
CHECK_CALLED(BeginningTransaction);
if (have_IHttpNegotiate2)
@@ -2396,15 +2426,15 @@ static void test_URLDownloadToFile(DWORD prot, BOOL emul)
}
if(test_protocol == FILE_TEST)
CHECK_CALLED(OnProgress_SENDINGREQUEST);
- else if(test_protocol == HTTP_TEST)
+ else if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
CLEAR_CALLED(OnProgress_SENDINGREQUEST); /* not called by IE7 */
- if(test_protocol == HTTP_TEST)
+ 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)
+ if(test_protocol == HTTP_TEST || test_protocol == HTTPS_TEST)
CLEAR_CALLED(OnProgress_DOWNLOADINGDATA);
CHECK_CALLED(OnProgress_ENDDOWNLOADDATA);
CHECK_CALLED(OnStopBinding);
@@ -2570,110 +2600,118 @@ START_TEST(url)
test_create();
test_CreateAsyncBindCtx();
test_CreateAsyncBindCtxEx();
- test_RegisterBindStatusCallback();
- test_BindToStorage_fail();
- trace("synchronous http test (COM not initialised)...\n");
- test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM);
+ if(test_RegisterBindStatusCallback()) {
+ test_BindToStorage_fail();
- CoInitialize(NULL);
+ trace("synchronous http test (COM not initialised)...\n");
+ test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM);
- trace("synchronous http test...\n");
- test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM);
+ CoInitialize(NULL);
- trace("synchronous http test (to object)...\n");
- test_BindToObject(HTTP_TEST, FALSE);
+ trace("synchronous http test...\n");
+ test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM);
- trace("synchronous file test...\n");
- test_BindToStorage(FILE_TEST, FALSE, TYMED_ISTREAM);
+ trace("synchronous http test (to object)...\n");
+ test_BindToObject(HTTP_TEST, FALSE);
- trace("synchronous file test (to object)...\n");
- test_BindToObject(FILE_TEST, FALSE);
+ trace("synchronous file test...\n");
+ test_BindToStorage(FILE_TEST, FALSE, TYMED_ISTREAM);
- bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
+ trace("synchronous file test (to object)...\n");
+ test_BindToObject(FILE_TEST, FALSE);
- trace("http test...\n");
- test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM);
+ bindf = BINDF_ASYNCHRONOUS | BINDF_ASYNCSTORAGE | BINDF_PULLDATA;
- trace("http test (to file)...\n");
- test_BindToStorage(HTTP_TEST, FALSE, TYMED_FILE);
+ trace("http test...\n");
+ test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM);
- trace("http test (to object)...\n");
- test_BindToObject(HTTP_TEST, FALSE);
+ trace("http test (to file)...\n");
+ test_BindToStorage(HTTP_TEST, FALSE, TYMED_FILE);
- trace("http test (short response)...\n");
- http_is_first = TRUE;
- urls[HTTP_TEST] = SHORT_RESPONSE_URL;
- test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM);
+ trace("http test (to object)...\n");
+ test_BindToObject(HTTP_TEST, FALSE);
- trace("http test (short response, to object)...\n");
- test_BindToObject(HTTP_TEST, FALSE);
+ trace("http test (short response)...\n");
+ http_is_first = TRUE;
+ urls[HTTP_TEST] = SHORT_RESPONSE_URL;
+ test_BindToStorage(HTTP_TEST, FALSE, TYMED_ISTREAM);
- trace("emulated http test...\n");
- test_BindToStorage(HTTP_TEST, TRUE, TYMED_ISTREAM);
+ trace("http test (short response, to object)...\n");
+ test_BindToObject(HTTP_TEST, FALSE);
- trace("emulated http test (to object)...\n");
- test_BindToObject(HTTP_TEST, TRUE);
+ trace("emulated http test...\n");
+ test_BindToStorage(HTTP_TEST, TRUE, TYMED_ISTREAM);
- trace("emulated http test (to file)...\n");
- test_BindToStorage(HTTP_TEST, TRUE, TYMED_FILE);
+ trace("emulated http test (to object)...\n");
+ test_BindToObject(HTTP_TEST, TRUE);
- trace("about test...\n");
- test_BindToStorage(ABOUT_TEST, FALSE, TYMED_ISTREAM);
+ trace("emulated http test (to file)...\n");
+ test_BindToStorage(HTTP_TEST, TRUE, TYMED_FILE);
- trace("about test (to file)...\n");
- test_BindToStorage(ABOUT_TEST, FALSE, TYMED_FILE);
+ trace("asynchronous https test...\n");
+ test_BindToStorage(HTTPS_TEST, FALSE, TYMED_ISTREAM);
- trace("about test (to object)...\n");
- test_BindToObject(ABOUT_TEST, FALSE);
+ trace("emulated https test...\n");
+ test_BindToStorage(HTTPS_TEST, TRUE, TYMED_ISTREAM);
- trace("emulated about test...\n");
- test_BindToStorage(ABOUT_TEST, TRUE, TYMED_ISTREAM);
+ trace("about test...\n");
+ test_BindToStorage(ABOUT_TEST, FALSE, TYMED_ISTREAM);
- trace("emulated about test (to file)...\n");
- test_BindToStorage(ABOUT_TEST, TRUE, TYMED_FILE);
+ trace("about test (to file)...\n");
+ test_BindToStorage(ABOUT_TEST, FALSE, TYMED_FILE);
- trace("emulated about test (to object)...\n");
- test_BindToObject(ABOUT_TEST, TRUE);
+ trace("about test (to object)...\n");
+ test_BindToObject(ABOUT_TEST, FALSE);
- trace("file test...\n");
- test_BindToStorage(FILE_TEST, FALSE, TYMED_ISTREAM);
+ trace("emulated about test...\n");
+ test_BindToStorage(ABOUT_TEST, TRUE, TYMED_ISTREAM);
- trace("file test (to file)...\n");
- test_BindToStorage(FILE_TEST, FALSE, TYMED_FILE);
+ trace("emulated about test (to file)...\n");
+ test_BindToStorage(ABOUT_TEST, TRUE, TYMED_FILE);
- trace("file test (to object)...\n");
- test_BindToObject(FILE_TEST, FALSE);
+ trace("emulated about test (to object)...\n");
+ test_BindToObject(ABOUT_TEST, TRUE);
- trace("emulated file test...\n");
- test_BindToStorage(FILE_TEST, TRUE, TYMED_ISTREAM);
+ trace("file test...\n");
+ test_BindToStorage(FILE_TEST, FALSE, TYMED_ISTREAM);
- trace("emulated file test (to file)...\n");
- test_BindToStorage(FILE_TEST, TRUE, TYMED_FILE);
+ trace("file test (to file)...\n");
+ test_BindToStorage(FILE_TEST, FALSE, TYMED_FILE);
- trace("emulated file test (to object)...\n");
- test_BindToObject(FILE_TEST, TRUE);
+ trace("file test (to object)...\n");
+ test_BindToObject(FILE_TEST, FALSE);
- trace("emulated its test...\n");
- test_BindToStorage(ITS_TEST, TRUE, TYMED_ISTREAM);
+ trace("emulated file test...\n");
+ test_BindToStorage(FILE_TEST, TRUE, TYMED_ISTREAM);
- trace("emulated its test (to file)...\n");
- test_BindToStorage(ITS_TEST, TRUE, TYMED_FILE);
+ trace("emulated file test (to file)...\n");
+ test_BindToStorage(FILE_TEST, TRUE, TYMED_FILE);
- trace("emulated mk test...\n");
- test_BindToStorage(MK_TEST, TRUE, TYMED_ISTREAM);
+ trace("emulated file test (to object)...\n");
+ test_BindToObject(FILE_TEST, TRUE);
- trace("test URLDownloadToFile for file protocol...\n");
- test_URLDownloadToFile(FILE_TEST, FALSE);
+ trace("emulated its test...\n");
+ test_BindToStorage(ITS_TEST, TRUE, TYMED_ISTREAM);
- trace("test URLDownloadToFile for emulated file protocol...\n");
- test_URLDownloadToFile(FILE_TEST, TRUE);
+ trace("emulated its test (to file)...\n");
+ test_BindToStorage(ITS_TEST, TRUE, TYMED_FILE);
- trace("test URLDownloadToFile for http protocol...\n");
- test_URLDownloadToFile(HTTP_TEST, FALSE);
+ trace("emulated mk test...\n");
+ test_BindToStorage(MK_TEST, TRUE, TYMED_ISTREAM);
- trace("test failures...\n");
- test_BindToStorage_fail();
+ trace("test URLDownloadToFile for file protocol...\n");
+ test_URLDownloadToFile(FILE_TEST, FALSE);
+
+ trace("test URLDownloadToFile for emulated file protocol...\n");
+ test_URLDownloadToFile(FILE_TEST, TRUE);
+
+ trace("test URLDownloadToFile for http protocol...\n");
+ test_URLDownloadToFile(HTTP_TEST, FALSE);
+
+ trace("test failures...\n");
+ test_BindToStorage_fail();
+ }
DeleteFileA(wszIndexHtmlA);
CloseHandle(complete_event);
diff --git a/rostests/winetests/user32/broadcast.c b/rostests/winetests/user32/broadcast.c
index ae9cd29ee65..48f1318a879 100644
--- a/rostests/winetests/user32/broadcast.c
+++ b/rostests/winetests/user32/broadcast.c
@@ -18,12 +18,12 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#define _WIN32_WINNT 0x0501
+
#include
#include
#include
-#define _WIN32_WINNT 0x0501
-
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
@@ -66,7 +66,10 @@ static BOOL init_procs(void)
pBroadcastA = (PBROADCAST)GetProcAddress(user32, "BroadcastSystemMessage");
ok(pBroadcastA != NULL, "No BroadcastSystemMessage found\n");
if (!pBroadcastA)
+ {
+ win_skip("BroadcastA is not available\n");
return FALSE;
+ }
pBroadcastW = (PBROADCAST)GetProcAddress(user32, "BroadcastSystemMessageW");
pBroadcastExA = (PBROADCASTEX)GetProcAddress(user32, "BroadcastSystemMessageExA");
@@ -80,13 +83,13 @@ static BOOL init_procs(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "MainWindowClass";
if (!RegisterClassA(&cls))
- return 0;
+ return FALSE;
if (!CreateWindowExA(0, "MainWindowClass", "Main window", WS_CAPTION | WS_SYSMENU |
WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP, 100, 100, 200,
@@ -105,7 +108,7 @@ static void test_parameters(PBROADCAST broadcast, const char *functionname)
ret = broadcast( 0x80000000, &recips, WM_NULL, 0, 0 );
if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("%s is not implemented\n", functionname);
+ win_skip("%s is not implemented\n", functionname);
return;
}
ok(!ret || broken(ret), "Returned: %d\n", ret);
@@ -345,14 +348,14 @@ START_TEST(broadcast)
test_parameters(pBroadcastW, "BroadcastSystemMessageW");
}
else
- skip("No BroadcastSystemMessageW, skipping\n");
+ win_skip("No BroadcastSystemMessageW, skipping\n");
if (pBroadcastExA)
{
trace("Running BroadcastSystemMessageExA tests\n");
test_parametersEx(pBroadcastExA);
}
else
- skip("No BroadcastSystemMessageExA, skipping\n");
+ win_skip("No BroadcastSystemMessageExA, skipping\n");
if (pBroadcastExW)
{
trace("Running BroadcastSystemMessageExW tests\n");
@@ -361,5 +364,5 @@ START_TEST(broadcast)
test_noprivileges();
}
else
- skip("No BroadcastSystemMessageExW, skipping\n");
+ win_skip("No BroadcastSystemMessageExW, skipping\n");
}
diff --git a/rostests/winetests/user32/class.c b/rostests/winetests/user32/class.c
index ce6d020533a..a1ae4bdc55d 100755
--- a/rostests/winetests/user32/class.c
+++ b/rostests/winetests/user32/class.c
@@ -39,7 +39,7 @@ static const WCHAR WC_EDITW[] = {'E','d','i','t',0};
#define NUMCLASSWORDS 4
-#define IS_WNDPROC_HANDLE(x) (((ULONG_PTR)(x) >> 16) == (~((ULONG_PTR)0) >> 16))
+#define IS_WNDPROC_HANDLE(x) (((ULONG_PTR)(x) >> 16) == (~0u >> 16))
static LRESULT WINAPI ClassTest_WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
@@ -279,7 +279,7 @@ struct class_info
static DWORD WINAPI thread_proc(void *param)
{
- struct class_info *class_info = (struct class_info *)param;
+ struct class_info *class_info = param;
check_instance(class_info->name, class_info->inst, class_info->info_inst, class_info->gcl_inst);
@@ -415,7 +415,7 @@ static void test_instances(void)
cls.style = 3;
ok( RegisterClassA( &cls ), "Failed to register local class for deadbeef\n" );
hwnd2 = CreateWindowExA( 0, name, "test_window", 0, 0, 0, 0, 0, 0, 0, NULL, 0 );
- ok( (HINSTANCE)GetClassLongPtrA( hwnd2, GCLP_HMODULE ) == (HINSTANCE)0xdeadbeef,
+ ok( GetClassLongPtrA( hwnd2, GCLP_HMODULE ) == 0xdeadbeef,
"Didn't get deadbeef class for null instance\n" );
DestroyWindow( hwnd2 );
ok( UnregisterClassA( name, (HINSTANCE)0xdeadbeef ), "Unregister failed for deadbeef\n" );
@@ -554,10 +554,7 @@ static void test_instances(void)
ok( !UnregisterClass( "BUTTON", (HINSTANCE)0x87654321 ), "Unregistered button a second time\n" );
ok( GetLastError() == ERROR_CLASS_DOES_NOT_EXIST, "Wrong error code %d\n", GetLastError() );
ok( !GetClassInfo( 0, "BUTTON", &wc ), "Button still exists\n" );
- ok( GetLastError() == ERROR_CLASS_DOES_NOT_EXIST ||
- GetLastError() == ERROR_INVALID_PARAMETER || /* W2K3 */
- GetLastError() == ERROR_SUCCESS /* Vista */,
- "Wrong error code %d\n", GetLastError() );
+ /* last error not set reliably */
/* we can change the instance of a system class */
check_instance( "EDIT", (HINSTANCE)0xdeadbeef, (HINSTANCE)0xdeadbeef, user32 );
@@ -592,8 +589,8 @@ static void test_builtinproc(void)
HWND hwnd;
int i;
- pDefWindowProcA = (void *)GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcA");
- pDefWindowProcW = (void *)GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW");
+ pDefWindowProcA = GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcA");
+ pDefWindowProcW = GetProcAddress(GetModuleHandle("user32.dll"), "DefWindowProcW");
for (i = 0; i < 4; i++)
{
@@ -800,10 +797,8 @@ static BOOL RegisterTestDialog(HINSTANCE hInstance)
wcx.hbrBackground = GetStockObject(WHITE_BRUSH);
wcx.lpszClassName = "TestDialog";
wcx.lpszMenuName = "TestDialog";
- wcx.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(5),
- IMAGE_ICON,
- GetSystemMetrics(SM_CXSMICON),
- GetSystemMetrics(SM_CYSMICON),
+ wcx.hIconSm = LoadImage(hInstance, MAKEINTRESOURCE(5), IMAGE_ICON,
+ GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON),
LR_DEFAULTCOLOR);
atom = RegisterClassEx(&wcx);
diff --git a/rostests/winetests/user32/combo.c b/rostests/winetests/user32/combo.c
index 51660072a59..cc5586429d9 100644
--- a/rostests/winetests/user32/combo.c
+++ b/rostests/winetests/user32/combo.c
@@ -303,10 +303,8 @@ static void test_WM_LBUTTONDOWN(void)
hEdit = cbInfo.hwndItem;
hList = cbInfo.hwndList;
- trace("hMainWnd=%x, hCombo=%x, hList=%x, hEdit=%x\n",
- (UINT)hMainWnd, (UINT)hCombo, (UINT)hList, (UINT)hEdit);
- ok(GetFocus() == hMainWnd, "Focus not on Main Window, instead on %x\n",
- (UINT)GetFocus());
+ trace("hMainWnd=%p, hCombo=%p, hList=%p, hEdit=%p\n", hMainWnd, hCombo, hList, hEdit);
+ ok(GetFocus() == hMainWnd, "Focus not on Main Window, instead on %p\n", GetFocus());
/* Click on the button to drop down the list */
x = cbInfo.rcButton.left + (cbInfo.rcButton.right-cbInfo.rcButton.left)/2;
@@ -318,14 +316,12 @@ static void test_WM_LBUTTONDOWN(void)
"The dropdown list should have appeared after clicking the button.\n");
ok(GetFocus() == hEdit,
- "Focus not on ComboBox's Edit Control, instead on %x\n",
- (UINT)GetFocus());
+ "Focus not on ComboBox's Edit Control, instead on %p\n", GetFocus());
result = SendMessage(hCombo, WM_LBUTTONUP, 0, MAKELPARAM(x, y));
ok(result, "WM_LBUTTONUP was not processed. LastError=%d\n",
GetLastError());
ok(GetFocus() == hEdit,
- "Focus not on ComboBox's Edit Control, instead on %x\n",
- (UINT)GetFocus());
+ "Focus not on ComboBox's Edit Control, instead on %p\n", GetFocus());
/* Click on the 5th item in the list */
item_height = SendMessage(hCombo, CB_GETITEMHEIGHT, 0, 0);
@@ -336,15 +332,13 @@ static void test_WM_LBUTTONDOWN(void)
ok(!result, "WM_LBUTTONDOWN was not processed. LastError=%d\n",
GetLastError());
ok(GetFocus() == hEdit,
- "Focus not on ComboBox's Edit Control, instead on %x\n",
- (UINT)GetFocus());
+ "Focus not on ComboBox's Edit Control, instead on %p\n", GetFocus());
result = SendMessage(hList, WM_MOUSEMOVE, 0, MAKELPARAM(x, y));
ok(!result, "WM_MOUSEMOVE was not processed. LastError=%d\n",
GetLastError());
ok(GetFocus() == hEdit,
- "Focus not on ComboBox's Edit Control, instead on %x\n",
- (UINT)GetFocus());
+ "Focus not on ComboBox's Edit Control, instead on %p\n", GetFocus());
ok(SendMessage(hCombo, CB_GETDROPPEDSTATE, 0, 0),
"The dropdown list should still be visible.\n");
@@ -352,8 +346,7 @@ static void test_WM_LBUTTONDOWN(void)
ok(!result, "WM_LBUTTONUP was not processed. LastError=%d\n",
GetLastError());
ok(GetFocus() == hEdit,
- "Focus not on ComboBox's Edit Control, instead on %x\n",
- (UINT)GetFocus());
+ "Focus not on ComboBox's Edit Control, instead on %p\n", GetFocus());
ok(!SendMessage(hCombo, CB_GETDROPPEDSTATE, 0, 0),
"The dropdown list should have been rolled up.\n");
idx = SendMessage(hCombo, CB_GETCURSEL, 0, 0);
diff --git a/rostests/winetests/user32/cursoricon.c b/rostests/winetests/user32/cursoricon.c
index 5d1cf2bde1e..947553498ef 100644
--- a/rostests/winetests/user32/cursoricon.c
+++ b/rostests/winetests/user32/cursoricon.c
@@ -175,7 +175,7 @@ static void do_parent(void)
startup.dwFlags = STARTF_USESHOWWINDOW;
startup.wShowWindow = SW_SHOWNORMAL;
- sprintf(path_name, "%s cursoricon %x", test_argv[0], (unsigned int) parent);
+ sprintf(path_name, "%s cursoricon %lx", test_argv[0], (INT_PTR)parent);
ok(CreateProcessA(NULL, path_name, NULL, NULL, FALSE, 0L, NULL, NULL, &startup, &info), "CreateProcess failed.\n");
child_process = info.hProcess;
@@ -840,7 +840,8 @@ static void test_LoadImage(void)
ok(icon_info.fIcon == FALSE, "fIcon != FALSE.\n");
ok(icon_info.xHotspot == 1, "xHotspot is %u.\n", icon_info.xHotspot);
ok(icon_info.yHotspot == 1, "yHotspot is %u.\n", icon_info.yHotspot);
- ok(icon_info.hbmColor != NULL, "No hbmColor!\n");
+ ok(icon_info.hbmColor != NULL || broken(!icon_info.hbmColor) /* no color cursor support */,
+ "No hbmColor!\n");
ok(icon_info.hbmMask != NULL, "No hbmMask!\n");
}
@@ -910,7 +911,8 @@ static void test_CreateIconFromResource(void)
ok(icon_info.fIcon == FALSE, "fIcon != FALSE.\n");
ok(icon_info.xHotspot == 3, "xHotspot is %u.\n", icon_info.xHotspot);
ok(icon_info.yHotspot == 3, "yHotspot is %u.\n", icon_info.yHotspot);
- ok(icon_info.hbmColor != NULL, "No hbmColor!\n");
+ ok(icon_info.hbmColor != NULL || broken(!icon_info.hbmColor) /* no color cursor support */,
+ "No hbmColor!\n");
ok(icon_info.hbmMask != NULL, "No hbmMask!\n");
}
diff --git a/rostests/winetests/user32/dce.c b/rostests/winetests/user32/dce.c
index fead3850a9c..37b95464ef0 100755
--- a/rostests/winetests/user32/dce.c
+++ b/rostests/winetests/user32/dce.c
@@ -402,7 +402,7 @@ START_TEST(dce)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "cache_class";
diff --git a/rostests/winetests/user32/dde.c b/rostests/winetests/user32/dde.c
index a3b73a53e55..e7f09f1b20d 100755
--- a/rostests/winetests/user32/dde.c
+++ b/rostests/winetests/user32/dde.c
@@ -160,7 +160,7 @@ static LRESULT WINAPI dde_server_wndproc(HWND hwnd, UINT msg, WPARAM wparam, LPA
lstrcpyA((LPSTR)data->Value, str);
GlobalUnlock(hglobal);
- lparam = PackDDElParam(WM_DDE_ACK, (UINT)hglobal, HIWORD(lparam));
+ lparam = PackDDElParam(WM_DDE_ACK, (UINT_PTR)hglobal, HIWORD(lparam));
PostMessageA(client, WM_DDE_DATA, (WPARAM)hwnd, lparam);
break;
@@ -427,10 +427,7 @@ todo_wine
ret = DdeGetLastError(client_pid);
ok(op == NULL, "Expected NULL, got %p\n", op);
ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res);
- todo_wine
- {
- ok(ret == DMLERR_MEMORY_ERROR, "Expected DMLERR_MEMORY_ERROR, got %d\n", ret);
- }
+ ok(ret == DMLERR_MEMORY_ERROR, "Expected DMLERR_MEMORY_ERROR, got %d\n", ret);
/* XTYP_EXECUTE, no data, -1 size */
res = 0xdeadbeef;
@@ -562,7 +559,7 @@ static HDDEDATA CALLBACK server_ddeml_callback(UINT uType, UINT uFmt, HCONV hcon
ULONG_PTR dwData1, ULONG_PTR dwData2)
{
char str[MAX_PATH], *ptr;
- HDDEDATA ret;
+ HDDEDATA ret = NULL;
DWORD size;
static int msg_index = 0;
@@ -714,7 +711,7 @@ static HDDEDATA CALLBACK server_ddeml_callback(UINT uType, UINT uFmt, HCONV hcon
case XTYP_EXECUTE:
{
- ok(msg_index == 9 || msg_index == 10, "Expected 9 or 10, got %d\n", msg_index);
+ ok(msg_index >= 9 && msg_index <= 11, "Expected 9 or 11, got %d\n", msg_index);
ok(uFmt == 0, "Expected 0, got %d\n", uFmt);
ok(hconv == conversation, "Expected conversation handle, got %p\n", hconv);
ok(dwData1 == 0, "Expected 0, got %08lx\n", dwData1);
@@ -725,29 +722,50 @@ static HDDEDATA CALLBACK server_ddeml_callback(UINT uType, UINT uFmt, HCONV hcon
ok(!lstrcmpA(str, "TestDDETopic"), "Expected TestDDETopic, got %s\n", str);
ok(size == 12, "Expected 12, got %d\n", size);
- ptr = (LPSTR)DdeAccessData(hdata, &size);
-
- if (msg_index == 9)
+ if (msg_index == 9 || msg_index == 11)
{
- ok(!lstrcmpA(ptr, "[Command(Var)]"), "Expected '[Command(Var)]', got %s\n", ptr);
- ok(size == 15, "Expected 15, got %d\n", size);
+ ptr = (LPSTR)DdeAccessData(hdata, &size);
+
+ if (msg_index == 9)
+ {
+ ok(!lstrcmpA(ptr, "[Command(Var)]"), "Expected '[Command(Var)]', got %s\n", ptr);
+ ok(size == 15, "Expected 15, got %d\n", size);
+ ret = (HDDEDATA)DDE_FACK;
+ }
+ else
+ {
+ ok(!lstrcmpA(ptr, "[BadCommand(Var)]"), "Expected '[BadCommand(Var)]', got %s\n", ptr);
+ ok(size == 18, "Expected 18, got %d\n", size);
+ ret = DDE_FNOTPROCESSED;
+ }
+
+ DdeUnaccessData(hdata);
+ }
+ else if (msg_index == 10)
+ {
+ DWORD rsize = 0;
+ size = 0;
+
+ size = DdeGetData(hdata, NULL, 0, 0);
+ ok(size == 17, "DdeGetData should have returned 17 not %d\n", size);
+ ptr = HeapAlloc(GetProcessHeap(), 0, size);
+ ok(ptr != NULL,"HeapAlloc should have returned ptr not NULL\n");
+ rsize = DdeGetData(hdata, (LPBYTE)ptr, size, 0);
+ ok(rsize == size, "DdeGetData did not return %d bytes but %d\n", size, rsize);
+
+ ok(!lstrcmpA(ptr, "[Command-2(Var)]"), "Expected '[Command-2(Var)]' got %s\n", ptr);
+ ok(size == 17, "Expected 17, got %d\n", size);
ret = (HDDEDATA)DDE_FACK;
- }
- else
- {
- ok(!lstrcmpA(ptr, "[BadCommand(Var)]"), "Expected '[BadCommand(Var)]', got %s\n", ptr);
- ok(size == 18, "Expected 18, got %d\n", size);
- ret = (HDDEDATA)DDE_FNOTPROCESSED;
- }
- DdeUnaccessData(hdata);
+ HeapFree(GetProcessHeap(), 0, ptr);
+ }
return ret;
}
case XTYP_DISCONNECT:
{
- ok(msg_index == 11, "Expected 11, got %d\n", msg_index);
+ ok(msg_index == 12, "Expected 12, got %d\n", msg_index);
ok(uFmt == 0, "Expected 0, got %d\n", uFmt);
ok(hconv == conversation, "Expected conversation handle, got %p\n", hconv);
ok(dwData1 == 0, "Expected 0, got %08lx\n", dwData1);
@@ -836,8 +854,8 @@ static LRESULT WINAPI dde_msg_client_wndproc(HWND hwnd, UINT msg, WPARAM wparam,
case WM_DDE_ACK:
{
- ok((msg_index >= 2 && msg_index <= 4) || (msg_index >= 6 && msg_index <= 10),
- "Expected 2, 3, 4, 6, 7, 8, 9 or 10, got %d\n", msg_index);
+ ok((msg_index >= 2 && msg_index <= 4) || (msg_index >= 6 && msg_index <= 11),
+ "Expected 2, 3, 4, 6, 7, 8, 9, 10 or 11, got %d\n", msg_index);
if (msg_index == 2)
{
@@ -854,7 +872,7 @@ static LRESULT WINAPI dde_msg_client_wndproc(HWND hwnd, UINT msg, WPARAM wparam,
ok(!lstrcmpA(str, "TestDDETopic"), "Expected TestDDETopic, got %s\n", str);
ok(size == 12, "Expected 12, got %d\n", size);
}
- else if (msg_index == 9 || msg_index == 10)
+ else if (msg_index >= 9 && msg_index <= 11)
{
ok(wparam == (WPARAM)server_hwnd, "Expected server hwnd, got %08lx\n", wparam);
@@ -872,6 +890,10 @@ static LRESULT WINAPI dde_msg_client_wndproc(HWND hwnd, UINT msg, WPARAM wparam,
{
ok(ack->fAck == TRUE, "Expected TRUE, got %d\n", ack->fAck);
ok(!lstrcmpA(ptr, "[Command(Var)]"), "Expected '[Command(Var)]', got %s\n", ptr);
+ } else if (msg_index == 10)
+ {
+ ok(ack->fAck == TRUE, "Expected TRUE, got %d\n", ack->fAck);
+ ok(!lstrcmpA(ptr, "[Command-2(Var)]"), "Expected '[Command-2(Var)]', got %s\n", ptr);
}
else
{
@@ -964,7 +986,7 @@ static LRESULT WINAPI dde_msg_client_wndproc(HWND hwnd, UINT msg, WPARAM wparam,
return DefWindowProcA(hwnd, msg, wparam, lparam);
}
-static HGLOBAL create_poke()
+static HGLOBAL create_poke(void)
{
HGLOBAL hglobal;
DDEPOKE *poke;
@@ -1000,7 +1022,7 @@ static HGLOBAL create_execute(LPCSTR command)
return hglobal;
}
-static void test_msg_client()
+static void test_msg_client(void)
{
HGLOBAL hglobal;
LPARAM lparam;
@@ -1109,6 +1131,15 @@ static void test_msg_client()
flush_events();
+ GlobalFree(execute_hglobal);
+ execute_hglobal = create_execute("[Command-2(Var)]");
+
+ /* WM_DDE_EXECUTE, all params correct */
+ lparam = PackDDElParam(WM_DDE_EXECUTE, 0, (UINT_PTR)execute_hglobal);
+ PostMessageA(server_hwnd, WM_DDE_EXECUTE, (WPARAM)client_hwnd, lparam);
+
+ flush_events();
+
GlobalFree(execute_hglobal);
execute_hglobal = create_execute("[BadCommand(Var)]");
@@ -1313,7 +1344,7 @@ static void test_dde_aw_transaction(void)
dde_inst = 0;
ret = DdeInitializeA(&dde_inst, client_dde_callback, APPCMD_CLIENTONLY, 0);
- ok(ret == DMLERR_NO_ERROR, "DdeInitializeW failed with error %04x (%x)\n",
+ ok(ret == DMLERR_NO_ERROR, "DdeInitializeA failed with error %04x (%x)\n",
ret, DdeGetLastError(dde_inst));
hsz_server = DdeCreateStringHandleW(dde_inst, TEST_DDE_SERVICE, CP_WINUNICODE);
@@ -1513,35 +1544,69 @@ static void test_DdeCreateStringHandleW(DWORD dde_inst, int codepage)
static void test_DdeCreateDataHandle(void)
{
HDDEDATA hdata;
- DWORD dde_inst;
+ DWORD dde_inst, dde_inst2;
DWORD size;
UINT res, err;
BOOL ret;
HSZ item;
LPBYTE ptr;
+ WCHAR item_str[] = {'i','t','e','m',0};
dde_inst = 0;
+ dde_inst2 = 0;
res = DdeInitializeA(&dde_inst, client_ddeml_callback, APPCMD_CLIENTONLY, 0);
ok(res == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", res);
+ res = DdeInitializeA(&dde_inst2, client_ddeml_callback, APPCMD_CLIENTONLY, 0);
+ ok(res == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", res);
+
+ /* 0 instance id
+ * This block tests an invalid instance Id. The correct behaviour is that if the instance Id
+ * is invalid then the lastError of all instances is set to the error. There are two instances
+ * created, lastError is cleared, an error is generated and then both instances are checked to
+ * ensure that they both have the same error set
+ */
+ item = DdeCreateStringHandleA(0, "item", CP_WINANSI);
+ ok(item == NULL, "Expected NULL hsz got %p\n", item);
+ err = DdeGetLastError(dde_inst);
+ ok(err == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", err);
+ err = DdeGetLastError(dde_inst2);
+ ok(err == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", err);
+ item = DdeCreateStringHandleW(0, item_str, CP_WINUNICODE);
+ ok(item == NULL, "Expected NULL hsz got %p\n", item);
+ err = DdeGetLastError(dde_inst);
+ ok(err == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", err);
+ err = DdeGetLastError(dde_inst2);
+ ok(err == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", err);
+
item = DdeCreateStringHandleA(dde_inst, "item", CP_WINANSI);
ok(item != NULL, "Expected non-NULL hsz\n");
+ item = DdeCreateStringHandleA(dde_inst2, "item", CP_WINANSI);
+ ok(item != NULL, "Expected non-NULL hsz\n");
if (0) {
/* do not test with an invalid instance id: that crashes on win9x */
hdata = DdeCreateDataHandle(0xdeadbeef, (LPBYTE)"data", MAX_PATH, 0, item, CF_TEXT, 0);
}
- /* 0 instance id */
+ /* 0 instance id
+ * This block tests an invalid instance Id. The correct behaviour is that if the instance Id
+ * is invalid then the lastError of all instances is set to the error. There are two instances
+ * created, lastError is cleared, an error is generated and then both instances are checked to
+ * ensure that they both have the same error set
+ */
DdeGetLastError(dde_inst);
+ DdeGetLastError(dde_inst2);
hdata = DdeCreateDataHandle(0, (LPBYTE)"data", MAX_PATH, 0, item, CF_TEXT, 0);
err = DdeGetLastError(dde_inst);
- todo_wine
- {
- ok(hdata == NULL, "Expected NULL, got %p\n", hdata);
- ok(err == DMLERR_INVALIDPARAMETER,
- "Expected DMLERR_INVALIDPARAMETER, got %d\n", err);
- }
+ ok(hdata == NULL, "Expected NULL, got %p\n", hdata);
+ ok(err == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", err);
+ err = DdeGetLastError(dde_inst2);
+ ok(err == DMLERR_INVALIDPARAMETER, "Expected DMLERR_INVALIDPARAMETER, got %d\n", err);
+
+ ret = DdeUninitialize(dde_inst2);
+ ok(res == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", res);
+
/* NULL pSrc */
DdeGetLastError(dde_inst);
@@ -1701,7 +1766,7 @@ static void test_DdeCreateStringHandle(void)
ret = DdeInitializeW(&dde_inst, client_ddeml_callback, APPCMD_CLIENTONLY, 0);
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("DdeInitialize is unimplemented\n");
+ win_skip("DdeInitializeW is unimplemented\n");
return;
}
@@ -1793,7 +1858,8 @@ static void test_PackDDElParam(void)
BOOL ret;
lparam = PackDDElParam(WM_DDE_INITIATE, 0xcafe, 0xbeef);
- ok(lparam == 0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", lparam);
+ /* 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,
@@ -1809,7 +1875,7 @@ static void test_PackDDElParam(void)
ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
lparam = PackDDElParam(WM_DDE_TERMINATE, 0xcafe, 0xbeef);
- ok(lparam == 0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", 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,
@@ -1853,7 +1919,7 @@ static void test_PackDDElParam(void)
"Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
lparam = PackDDElParam(WM_DDE_UNADVISE, 0xcafe, 0xbeef);
- ok(lparam == 0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", 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,
@@ -1870,7 +1936,7 @@ static void test_PackDDElParam(void)
lparam = PackDDElParam(WM_DDE_ACK, 0xcafe, 0xbeef);
/* win9x returns the input (0xbeef<<16 | 0xcafe) here */
- if (lparam != 0xbeefcafe) {
+ if (lparam != (int)0xbeefcafe) {
ptr = GlobalLock((HGLOBAL)lparam);
ok(ptr != NULL, "Expected non-NULL ptr\n");
ok(ptr[0] == 0xcafe, "Expected 0xcafe, got %08lx\n", ptr[0]);
@@ -1925,7 +1991,7 @@ static void test_PackDDElParam(void)
"Expected ERROR_INVALID_HANDLE, got %d\n", GetLastError());
lparam = PackDDElParam(WM_DDE_REQUEST, 0xcafe, 0xbeef);
- ok(lparam == 0xbeefcafe, "Expected 0xbeefcafe, got %08lx\n", 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,
@@ -2148,8 +2214,10 @@ static HDDEDATA CALLBACK server_end_to_end_callback(UINT uType, UINT uFmt, HCONV
char str[MAX_PATH];
static int msg_index = 0;
static HCONV conversation = 0;
- static char test_cmd[] = "test dde command";
- static WCHAR test_cmd_w[] = {'t','e','s','t',' ','d','d','e',' ','c','o','m','m','a','n','d',0};
+ static char test_cmd_w_to_a[] = "test dde command";
+ static char test_cmd_a_to_a[] = "Test dde command";
+ static WCHAR test_cmd_w_to_w[] = {'t','e','s','t',' ','d','d','e',' ','c','o','m','m','a','n','d',0};
+ static WCHAR test_cmd_a_to_w[] = {'T','e','s','t',' ','d','d','e',' ','c','o','m','m','a','n','d',0};
static char test_service [] = "TestDDEService";
static char test_topic [] = "TestDDETopic";
@@ -2223,8 +2291,7 @@ static HDDEDATA CALLBACK server_end_to_end_callback(UINT uType, UINT uFmt, HCONV
size, msg_index);
else
if (msg_index ==22)
- todo_wine
- ok(size == 9, "Expected that size should be 9 not %d, msg_index=%d\n",
+ ok(size == 8 || size == 9, "Expected that size should be 8 or 9 not %d, msg_index=%d\n",
size, msg_index);
else
if (msg_index == 5)
@@ -2242,14 +2309,14 @@ static HDDEDATA CALLBACK server_end_to_end_callback(UINT uType, UINT uFmt, HCONV
size, rsize, msg_index);
if (msg_index == 10 || msg_index == 16)
todo_wine {
- ok(!lstrcmpW((WCHAR*)buffer, test_cmd_w),
+ ok(!lstrcmpW((WCHAR*)buffer, test_cmd_a_to_w),
"Expected \"Test dde command\", msg_index=%d\n",
msg_index);
ok(size == 34, "Expected 34, got %d, msg_index=%d\n", size, msg_index);
} else
{
- ok(!lstrcmpW((WCHAR*)buffer, test_cmd_w),
- "Expected \"Test dde command\", msg_index=%d\n",
+ ok(!lstrcmpW((WCHAR*)buffer, test_cmd_w_to_w),
+ "Expected \"test dde command\", msg_index=%d\n",
msg_index);
ok(size == 34, "Expected 34, got %d, msg_index=%d\n", size, msg_index);
}
@@ -2263,16 +2330,22 @@ static HDDEDATA CALLBACK server_end_to_end_callback(UINT uType, UINT uFmt, HCONV
size, rsize, msg_index);
if (msg_index == 5)
todo_wine {
- ok(!lstrcmpA((CHAR*)buffer, test_cmd), "Expected %s, got %s, msg_index=%d\n",
- test_cmd, buffer, msg_index);
+ ok(!lstrcmpA((CHAR*)buffer, test_cmd_w_to_a), "Expected %s, got %s, msg_index=%d\n",
+ test_cmd_w_to_a, buffer, msg_index);
ok(size == 17, "Expected size should be 17, got %d, msg_index=%d\n", size, msg_index);
}
- else
+ else if (msg_index == 23)
{
- ok(!lstrcmpA((CHAR*)buffer, test_cmd), "Expected %s, got %s, msg_index=%d\n",
- test_cmd, buffer, msg_index);
+ ok(!lstrcmpA((CHAR*)buffer, test_cmd_w_to_a), "Expected %s, got %s, msg_index=%d\n",
+ test_cmd_w_to_a, buffer, msg_index);
ok(size == 17, "Expected size should be 17, got %d, msg_index=%d\n", size, msg_index);
}
+ else
+ {
+ ok(!lstrcmpA((CHAR*)buffer, test_cmd_a_to_a), "Expected %s, got %s, msg_index=%d\n",
+ test_cmd_a_to_a, buffer, msg_index);
+ ok(size == 17, "Expected size should be 17, got %d, msg_index=%d\n", size, msg_index);
+ }
}
@@ -2311,14 +2384,14 @@ static void test_end_to_end_client(BOOL type_a)
HSZ server, topic;
HCONV hconv;
HDDEDATA hdata;
- static char test_cmd[] = "test dde command";
+ static char test_cmd[] = "Test dde command";
static WCHAR test_cmd_w[] = {'t','e','s','t',' ','d','d','e',' ','c','o','m','m','a','n','d',0};
static char test_service[] = "TestDDEService";
static WCHAR test_service_w[] = {'T','e','s','t','D','D','E','S','e','r','v','i','c','e',0};
static char test_topic[] = "TestDDETopic";
static WCHAR test_topic_w[] = {'T','e','s','t','D','D','E','T','o','p','i','c',0};
- trace("Start end to end client %d\n", type_a);
+ trace("Start end to end client %s\n", type_a ? "ASCII" : "UNICODE");
if (type_a)
ret = DdeInitializeA(&client_pid, client_end_to_end_callback, APPCMD_CLIENTONLY, 0);
@@ -2376,7 +2449,7 @@ static void test_end_to_end_server(HANDLE hproc, HANDLE hthread, BOOL type_a)
HDDEDATA hdata;
static CHAR test_service[] = "TestDDEService";
- trace("start end to end server %d\n", type_a);
+ trace("start end to end server %s\n", type_a ? "ASCII" : "UNICODE");
server_pid = 0;
if (type_a)
diff --git a/rostests/winetests/user32/dialog.c b/rostests/winetests/user32/dialog.c
index f92566c16b4..84929e35c1c 100755
--- a/rostests/winetests/user32/dialog.c
+++ b/rostests/winetests/user32/dialog.c
@@ -54,7 +54,7 @@ static BOOL g_bInitialFocusInitDlgResult;
static int g_terminated;
typedef struct {
- unsigned int id;
+ INT_PTR id;
int parent;
DWORD style;
DWORD exstyle;
@@ -160,7 +160,7 @@ static BOOL CreateWindows (HINSTANCE hinst)
{
if (p->id >= sizeof(hwnd)/sizeof(hwnd[0]))
{
- trace ("Control %d is out of range\n", p->id);
+ trace ("Control %ld is out of range\n", p->id);
return FALSE;
}
else
@@ -168,21 +168,21 @@ static BOOL CreateWindows (HINSTANCE hinst)
}
if (p->id <= 0)
{
- trace ("Control %d is out of range\n", p->id);
+ trace ("Control %ld is out of range\n", p->id);
return FALSE;
}
if (hwnd[p->id] != 0)
{
- trace ("Control %d is used more than once\n", p->id);
+ trace ("Control %ld is used more than once\n", p->id);
return FALSE;
}
/* Create the control */
- sprintf (ctrlname, "ctrl%4.4d", p->id);
+ sprintf (ctrlname, "ctrl%4.4ld", p->id);
hwnd[p->id] = CreateWindowEx (p->exstyle, TEXT(p->parent ? "static" : "GetNextDlgItemWindowClass"), TEXT(ctrlname), p->style, 10, 10, 10, 10, hwnd[p->parent], p->parent ? (HMENU) (2000 + p->id) : 0, hinst, 0);
if (!hwnd[p->id])
{
- trace ("Failed to create control %d\n", p->id);
+ trace ("Failed to create control %ld\n", p->id);
return FALSE;
}
@@ -196,7 +196,7 @@ static BOOL CreateWindows (HINSTANCE hinst)
exstyle = GetWindowLong (hwnd[p->id], GWL_EXSTYLE);
if (style != p->style || exstyle != p->exstyle)
{
- trace ("Style mismatch at %d: %8.8x %8.8x cf %8.8x %8.8x\n", p->id, style, exstyle, p->style, p->exstyle);
+ trace ("Style mismatch at %ld: %8.8x %8.8x cf %8.8x %8.8x\n", p->id, style, exstyle, p->style, p->exstyle);
}
}
p++;
@@ -872,7 +872,7 @@ static void InitialFocusTest (void)
HANDLE hTemplate;
DLGTEMPLATE* pTemplate;
- hResource = FindResourceA(g_hinst,"FOCUS_TEST_DIALOG", (LPSTR)RT_DIALOG);
+ hResource = FindResourceA(g_hinst,"FOCUS_TEST_DIALOG", RT_DIALOG);
hTemplate = LoadResource(g_hinst, hResource);
pTemplate = LockResource(hTemplate);
diff --git a/rostests/winetests/user32/edit.c b/rostests/winetests/user32/edit.c
index f6dc918240f..b1a982079f2 100755
--- a/rostests/winetests/user32/edit.c
+++ b/rostests/winetests/user32/edit.c
@@ -1973,7 +1973,7 @@ static BOOL RegisterWindowClasses (void)
test3.cbWndExtra = 0;
test3.hInstance = hinst;
test3.hIcon = 0;
- test3.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ test3.hCursor = LoadCursorA(0, IDC_ARROW);
test3.hbrBackground = GetStockObject(WHITE_BRUSH);
test3.lpszMenuName = NULL;
test3.lpszClassName = szEditTest3Class;
@@ -2001,7 +2001,7 @@ static void UnregisterWindowClasses (void)
UnregisterClassA(szEditTextPositionClass, hinst);
}
-void test_fontsize(void)
+static void test_fontsize(void)
{
HWND hwEdit;
HFONT hfont;
diff --git a/rostests/winetests/user32/generated.c b/rostests/winetests/user32/generated.c
index c2d24f913ff..d25de8fddd1 100644
--- a/rostests/winetests/user32/generated.c
+++ b/rostests/winetests/user32/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,2170 +51,3536 @@
* 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_ACCESSTIMEOUT(void)
{
/* ACCESSTIMEOUT (pack 4) */
- TEST_TYPE(ACCESSTIMEOUT, 12, 4);
- TEST_FIELD(ACCESSTIMEOUT, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(ACCESSTIMEOUT, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(ACCESSTIMEOUT, DWORD, iTimeOutMSec, 8, 4, 4);
+ TEST_TYPE_SIZE (ACCESSTIMEOUT, 12)
+ TEST_TYPE_ALIGN (ACCESSTIMEOUT, 4)
+ TEST_FIELD_SIZE (ACCESSTIMEOUT, cbSize, 4)
+ TEST_FIELD_ALIGN (ACCESSTIMEOUT, cbSize, 4)
+ TEST_FIELD_OFFSET(ACCESSTIMEOUT, cbSize, 0)
+ TEST_FIELD_SIZE (ACCESSTIMEOUT, dwFlags, 4)
+ TEST_FIELD_ALIGN (ACCESSTIMEOUT, dwFlags, 4)
+ TEST_FIELD_OFFSET(ACCESSTIMEOUT, dwFlags, 4)
+ TEST_FIELD_SIZE (ACCESSTIMEOUT, iTimeOutMSec, 4)
+ TEST_FIELD_ALIGN (ACCESSTIMEOUT, iTimeOutMSec, 4)
+ TEST_FIELD_OFFSET(ACCESSTIMEOUT, iTimeOutMSec, 8)
}
static void test_pack_ANIMATIONINFO(void)
{
/* ANIMATIONINFO (pack 4) */
- TEST_TYPE(ANIMATIONINFO, 8, 4);
- TEST_FIELD(ANIMATIONINFO, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(ANIMATIONINFO, INT, iMinAnimate, 4, 4, 4);
+ TEST_TYPE_SIZE (ANIMATIONINFO, 8)
+ TEST_TYPE_ALIGN (ANIMATIONINFO, 4)
+ TEST_FIELD_SIZE (ANIMATIONINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (ANIMATIONINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(ANIMATIONINFO, cbSize, 0)
+ TEST_FIELD_SIZE (ANIMATIONINFO, iMinAnimate, 4)
+ TEST_FIELD_ALIGN (ANIMATIONINFO, iMinAnimate, 4)
+ TEST_FIELD_OFFSET(ANIMATIONINFO, iMinAnimate, 4)
}
static void test_pack_CBTACTIVATESTRUCT(void)
{
/* CBTACTIVATESTRUCT (pack 4) */
- TEST_TYPE(CBTACTIVATESTRUCT, 8, 4);
- TEST_FIELD(CBTACTIVATESTRUCT, BOOL, fMouse, 0, 4, 4);
- TEST_FIELD(CBTACTIVATESTRUCT, HWND, hWndActive, 4, 4, 4);
+ TEST_TYPE_SIZE (CBTACTIVATESTRUCT, 8)
+ TEST_TYPE_ALIGN (CBTACTIVATESTRUCT, 4)
+ TEST_FIELD_SIZE (CBTACTIVATESTRUCT, fMouse, 4)
+ TEST_FIELD_ALIGN (CBTACTIVATESTRUCT, fMouse, 4)
+ TEST_FIELD_OFFSET(CBTACTIVATESTRUCT, fMouse, 0)
+ TEST_FIELD_SIZE (CBTACTIVATESTRUCT, hWndActive, 4)
+ TEST_FIELD_ALIGN (CBTACTIVATESTRUCT, hWndActive, 4)
+ TEST_FIELD_OFFSET(CBTACTIVATESTRUCT, hWndActive, 4)
}
static void test_pack_CBT_CREATEWNDA(void)
{
/* CBT_CREATEWNDA (pack 4) */
- TEST_TYPE(CBT_CREATEWNDA, 8, 4);
- TEST_FIELD(CBT_CREATEWNDA, CREATESTRUCTA *, lpcs, 0, 4, 4);
- TEST_FIELD(CBT_CREATEWNDA, HWND, hwndInsertAfter, 4, 4, 4);
+ TEST_TYPE_SIZE (CBT_CREATEWNDA, 8)
+ TEST_TYPE_ALIGN (CBT_CREATEWNDA, 4)
+ TEST_FIELD_SIZE (CBT_CREATEWNDA, lpcs, 4)
+ TEST_FIELD_ALIGN (CBT_CREATEWNDA, lpcs, 4)
+ TEST_FIELD_OFFSET(CBT_CREATEWNDA, lpcs, 0)
+ TEST_FIELD_SIZE (CBT_CREATEWNDA, hwndInsertAfter, 4)
+ TEST_FIELD_ALIGN (CBT_CREATEWNDA, hwndInsertAfter, 4)
+ TEST_FIELD_OFFSET(CBT_CREATEWNDA, hwndInsertAfter, 4)
}
static void test_pack_CBT_CREATEWNDW(void)
{
/* CBT_CREATEWNDW (pack 4) */
- TEST_TYPE(CBT_CREATEWNDW, 8, 4);
- TEST_FIELD(CBT_CREATEWNDW, CREATESTRUCTW *, lpcs, 0, 4, 4);
- TEST_FIELD(CBT_CREATEWNDW, HWND, hwndInsertAfter, 4, 4, 4);
+ TEST_TYPE_SIZE (CBT_CREATEWNDW, 8)
+ TEST_TYPE_ALIGN (CBT_CREATEWNDW, 4)
+ TEST_FIELD_SIZE (CBT_CREATEWNDW, lpcs, 4)
+ TEST_FIELD_ALIGN (CBT_CREATEWNDW, lpcs, 4)
+ TEST_FIELD_OFFSET(CBT_CREATEWNDW, lpcs, 0)
+ TEST_FIELD_SIZE (CBT_CREATEWNDW, hwndInsertAfter, 4)
+ TEST_FIELD_ALIGN (CBT_CREATEWNDW, hwndInsertAfter, 4)
+ TEST_FIELD_OFFSET(CBT_CREATEWNDW, hwndInsertAfter, 4)
}
static void test_pack_CLIENTCREATESTRUCT(void)
{
/* CLIENTCREATESTRUCT (pack 4) */
- TEST_TYPE(CLIENTCREATESTRUCT, 8, 4);
- TEST_FIELD(CLIENTCREATESTRUCT, HMENU, hWindowMenu, 0, 4, 4);
- TEST_FIELD(CLIENTCREATESTRUCT, UINT, idFirstChild, 4, 4, 4);
+ TEST_TYPE_SIZE (CLIENTCREATESTRUCT, 8)
+ TEST_TYPE_ALIGN (CLIENTCREATESTRUCT, 4)
+ TEST_FIELD_SIZE (CLIENTCREATESTRUCT, hWindowMenu, 4)
+ TEST_FIELD_ALIGN (CLIENTCREATESTRUCT, hWindowMenu, 4)
+ TEST_FIELD_OFFSET(CLIENTCREATESTRUCT, hWindowMenu, 0)
+ TEST_FIELD_SIZE (CLIENTCREATESTRUCT, idFirstChild, 4)
+ TEST_FIELD_ALIGN (CLIENTCREATESTRUCT, idFirstChild, 4)
+ TEST_FIELD_OFFSET(CLIENTCREATESTRUCT, idFirstChild, 4)
}
static void test_pack_COMBOBOXINFO(void)
{
/* COMBOBOXINFO (pack 4) */
- TEST_TYPE(COMBOBOXINFO, 52, 4);
- TEST_FIELD(COMBOBOXINFO, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(COMBOBOXINFO, RECT, rcItem, 4, 16, 4);
- TEST_FIELD(COMBOBOXINFO, RECT, rcButton, 20, 16, 4);
- TEST_FIELD(COMBOBOXINFO, DWORD, stateButton, 36, 4, 4);
- TEST_FIELD(COMBOBOXINFO, HWND, hwndCombo, 40, 4, 4);
- TEST_FIELD(COMBOBOXINFO, HWND, hwndItem, 44, 4, 4);
- TEST_FIELD(COMBOBOXINFO, HWND, hwndList, 48, 4, 4);
+ TEST_TYPE_SIZE (COMBOBOXINFO, 52)
+ TEST_TYPE_ALIGN (COMBOBOXINFO, 4)
+ TEST_FIELD_SIZE (COMBOBOXINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (COMBOBOXINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(COMBOBOXINFO, cbSize, 0)
+ TEST_FIELD_SIZE (COMBOBOXINFO, rcItem, 16)
+ TEST_FIELD_ALIGN (COMBOBOXINFO, rcItem, 4)
+ TEST_FIELD_OFFSET(COMBOBOXINFO, rcItem, 4)
+ TEST_FIELD_SIZE (COMBOBOXINFO, rcButton, 16)
+ TEST_FIELD_ALIGN (COMBOBOXINFO, rcButton, 4)
+ TEST_FIELD_OFFSET(COMBOBOXINFO, rcButton, 20)
+ TEST_FIELD_SIZE (COMBOBOXINFO, stateButton, 4)
+ TEST_FIELD_ALIGN (COMBOBOXINFO, stateButton, 4)
+ TEST_FIELD_OFFSET(COMBOBOXINFO, stateButton, 36)
+ TEST_FIELD_SIZE (COMBOBOXINFO, hwndCombo, 4)
+ TEST_FIELD_ALIGN (COMBOBOXINFO, hwndCombo, 4)
+ TEST_FIELD_OFFSET(COMBOBOXINFO, hwndCombo, 40)
+ TEST_FIELD_SIZE (COMBOBOXINFO, hwndItem, 4)
+ TEST_FIELD_ALIGN (COMBOBOXINFO, hwndItem, 4)
+ TEST_FIELD_OFFSET(COMBOBOXINFO, hwndItem, 44)
+ TEST_FIELD_SIZE (COMBOBOXINFO, hwndList, 4)
+ TEST_FIELD_ALIGN (COMBOBOXINFO, hwndList, 4)
+ TEST_FIELD_OFFSET(COMBOBOXINFO, hwndList, 48)
}
static void test_pack_COMPAREITEMSTRUCT(void)
{
/* COMPAREITEMSTRUCT (pack 4) */
- TEST_TYPE(COMPAREITEMSTRUCT, 32, 4);
- TEST_FIELD(COMPAREITEMSTRUCT, UINT, CtlType, 0, 4, 4);
- TEST_FIELD(COMPAREITEMSTRUCT, UINT, CtlID, 4, 4, 4);
- TEST_FIELD(COMPAREITEMSTRUCT, HWND, hwndItem, 8, 4, 4);
- TEST_FIELD(COMPAREITEMSTRUCT, UINT, itemID1, 12, 4, 4);
- TEST_FIELD(COMPAREITEMSTRUCT, ULONG_PTR, itemData1, 16, 4, 4);
- TEST_FIELD(COMPAREITEMSTRUCT, UINT, itemID2, 20, 4, 4);
- TEST_FIELD(COMPAREITEMSTRUCT, ULONG_PTR, itemData2, 24, 4, 4);
- TEST_FIELD(COMPAREITEMSTRUCT, DWORD, dwLocaleId, 28, 4, 4);
+ TEST_TYPE_SIZE (COMPAREITEMSTRUCT, 32)
+ TEST_TYPE_ALIGN (COMPAREITEMSTRUCT, 4)
+ TEST_FIELD_SIZE (COMPAREITEMSTRUCT, CtlType, 4)
+ TEST_FIELD_ALIGN (COMPAREITEMSTRUCT, CtlType, 4)
+ TEST_FIELD_OFFSET(COMPAREITEMSTRUCT, CtlType, 0)
+ TEST_FIELD_SIZE (COMPAREITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_ALIGN (COMPAREITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_OFFSET(COMPAREITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_SIZE (COMPAREITEMSTRUCT, hwndItem, 4)
+ TEST_FIELD_ALIGN (COMPAREITEMSTRUCT, hwndItem, 4)
+ TEST_FIELD_OFFSET(COMPAREITEMSTRUCT, hwndItem, 8)
+ TEST_FIELD_SIZE (COMPAREITEMSTRUCT, itemID1, 4)
+ TEST_FIELD_ALIGN (COMPAREITEMSTRUCT, itemID1, 4)
+ TEST_FIELD_OFFSET(COMPAREITEMSTRUCT, itemID1, 12)
+ TEST_FIELD_SIZE (COMPAREITEMSTRUCT, itemData1, 4)
+ TEST_FIELD_ALIGN (COMPAREITEMSTRUCT, itemData1, 4)
+ TEST_FIELD_OFFSET(COMPAREITEMSTRUCT, itemData1, 16)
+ TEST_FIELD_SIZE (COMPAREITEMSTRUCT, itemID2, 4)
+ TEST_FIELD_ALIGN (COMPAREITEMSTRUCT, itemID2, 4)
+ TEST_FIELD_OFFSET(COMPAREITEMSTRUCT, itemID2, 20)
+ TEST_FIELD_SIZE (COMPAREITEMSTRUCT, itemData2, 4)
+ TEST_FIELD_ALIGN (COMPAREITEMSTRUCT, itemData2, 4)
+ TEST_FIELD_OFFSET(COMPAREITEMSTRUCT, itemData2, 24)
+ TEST_FIELD_SIZE (COMPAREITEMSTRUCT, dwLocaleId, 4)
+ TEST_FIELD_ALIGN (COMPAREITEMSTRUCT, dwLocaleId, 4)
+ TEST_FIELD_OFFSET(COMPAREITEMSTRUCT, dwLocaleId, 28)
}
static void test_pack_COPYDATASTRUCT(void)
{
/* COPYDATASTRUCT (pack 4) */
- TEST_TYPE(COPYDATASTRUCT, 12, 4);
- TEST_FIELD(COPYDATASTRUCT, ULONG_PTR, dwData, 0, 4, 4);
- TEST_FIELD(COPYDATASTRUCT, DWORD, cbData, 4, 4, 4);
- TEST_FIELD(COPYDATASTRUCT, PVOID, lpData, 8, 4, 4);
+ TEST_TYPE_SIZE (COPYDATASTRUCT, 12)
+ TEST_TYPE_ALIGN (COPYDATASTRUCT, 4)
+ TEST_FIELD_SIZE (COPYDATASTRUCT, dwData, 4)
+ TEST_FIELD_ALIGN (COPYDATASTRUCT, dwData, 4)
+ TEST_FIELD_OFFSET(COPYDATASTRUCT, dwData, 0)
+ TEST_FIELD_SIZE (COPYDATASTRUCT, cbData, 4)
+ TEST_FIELD_ALIGN (COPYDATASTRUCT, cbData, 4)
+ TEST_FIELD_OFFSET(COPYDATASTRUCT, cbData, 4)
+ TEST_FIELD_SIZE (COPYDATASTRUCT, lpData, 4)
+ TEST_FIELD_ALIGN (COPYDATASTRUCT, lpData, 4)
+ TEST_FIELD_OFFSET(COPYDATASTRUCT, lpData, 8)
}
static void test_pack_CREATESTRUCTA(void)
{
/* CREATESTRUCTA (pack 4) */
- TEST_TYPE(CREATESTRUCTA, 48, 4);
- TEST_FIELD(CREATESTRUCTA, LPVOID, lpCreateParams, 0, 4, 4);
- TEST_FIELD(CREATESTRUCTA, HINSTANCE, hInstance, 4, 4, 4);
- TEST_FIELD(CREATESTRUCTA, HMENU, hMenu, 8, 4, 4);
- TEST_FIELD(CREATESTRUCTA, HWND, hwndParent, 12, 4, 4);
- TEST_FIELD(CREATESTRUCTA, INT, cy, 16, 4, 4);
- TEST_FIELD(CREATESTRUCTA, INT, cx, 20, 4, 4);
- TEST_FIELD(CREATESTRUCTA, INT, y, 24, 4, 4);
- TEST_FIELD(CREATESTRUCTA, INT, x, 28, 4, 4);
- TEST_FIELD(CREATESTRUCTA, LONG, style, 32, 4, 4);
- TEST_FIELD(CREATESTRUCTA, LPCSTR, lpszName, 36, 4, 4);
- TEST_FIELD(CREATESTRUCTA, LPCSTR, lpszClass, 40, 4, 4);
- TEST_FIELD(CREATESTRUCTA, DWORD, dwExStyle, 44, 4, 4);
+ TEST_TYPE_SIZE (CREATESTRUCTA, 48)
+ TEST_TYPE_ALIGN (CREATESTRUCTA, 4)
+ TEST_FIELD_SIZE (CREATESTRUCTA, lpCreateParams, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, lpCreateParams, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, lpCreateParams, 0)
+ TEST_FIELD_SIZE (CREATESTRUCTA, hInstance, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, hInstance, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, hInstance, 4)
+ TEST_FIELD_SIZE (CREATESTRUCTA, hMenu, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, hMenu, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, hMenu, 8)
+ TEST_FIELD_SIZE (CREATESTRUCTA, hwndParent, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, hwndParent, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, hwndParent, 12)
+ TEST_FIELD_SIZE (CREATESTRUCTA, cy, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, cy, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, cy, 16)
+ TEST_FIELD_SIZE (CREATESTRUCTA, cx, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, cx, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, cx, 20)
+ TEST_FIELD_SIZE (CREATESTRUCTA, y, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, y, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, y, 24)
+ TEST_FIELD_SIZE (CREATESTRUCTA, x, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, x, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, x, 28)
+ TEST_FIELD_SIZE (CREATESTRUCTA, style, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, style, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, style, 32)
+ TEST_FIELD_SIZE (CREATESTRUCTA, lpszName, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, lpszName, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, lpszName, 36)
+ TEST_FIELD_SIZE (CREATESTRUCTA, lpszClass, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, lpszClass, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, lpszClass, 40)
+ TEST_FIELD_SIZE (CREATESTRUCTA, dwExStyle, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTA, dwExStyle, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTA, dwExStyle, 44)
}
static void test_pack_CREATESTRUCTW(void)
{
/* CREATESTRUCTW (pack 4) */
- TEST_TYPE(CREATESTRUCTW, 48, 4);
- TEST_FIELD(CREATESTRUCTW, LPVOID, lpCreateParams, 0, 4, 4);
- TEST_FIELD(CREATESTRUCTW, HINSTANCE, hInstance, 4, 4, 4);
- TEST_FIELD(CREATESTRUCTW, HMENU, hMenu, 8, 4, 4);
- TEST_FIELD(CREATESTRUCTW, HWND, hwndParent, 12, 4, 4);
- TEST_FIELD(CREATESTRUCTW, INT, cy, 16, 4, 4);
- TEST_FIELD(CREATESTRUCTW, INT, cx, 20, 4, 4);
- TEST_FIELD(CREATESTRUCTW, INT, y, 24, 4, 4);
- TEST_FIELD(CREATESTRUCTW, INT, x, 28, 4, 4);
- TEST_FIELD(CREATESTRUCTW, LONG, style, 32, 4, 4);
- TEST_FIELD(CREATESTRUCTW, LPCWSTR, lpszName, 36, 4, 4);
- TEST_FIELD(CREATESTRUCTW, LPCWSTR, lpszClass, 40, 4, 4);
- TEST_FIELD(CREATESTRUCTW, DWORD, dwExStyle, 44, 4, 4);
+ TEST_TYPE_SIZE (CREATESTRUCTW, 48)
+ TEST_TYPE_ALIGN (CREATESTRUCTW, 4)
+ TEST_FIELD_SIZE (CREATESTRUCTW, lpCreateParams, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, lpCreateParams, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, lpCreateParams, 0)
+ TEST_FIELD_SIZE (CREATESTRUCTW, hInstance, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, hInstance, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, hInstance, 4)
+ TEST_FIELD_SIZE (CREATESTRUCTW, hMenu, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, hMenu, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, hMenu, 8)
+ TEST_FIELD_SIZE (CREATESTRUCTW, hwndParent, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, hwndParent, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, hwndParent, 12)
+ TEST_FIELD_SIZE (CREATESTRUCTW, cy, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, cy, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, cy, 16)
+ TEST_FIELD_SIZE (CREATESTRUCTW, cx, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, cx, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, cx, 20)
+ TEST_FIELD_SIZE (CREATESTRUCTW, y, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, y, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, y, 24)
+ TEST_FIELD_SIZE (CREATESTRUCTW, x, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, x, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, x, 28)
+ TEST_FIELD_SIZE (CREATESTRUCTW, style, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, style, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, style, 32)
+ TEST_FIELD_SIZE (CREATESTRUCTW, lpszName, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, lpszName, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, lpszName, 36)
+ TEST_FIELD_SIZE (CREATESTRUCTW, lpszClass, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, lpszClass, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, lpszClass, 40)
+ TEST_FIELD_SIZE (CREATESTRUCTW, dwExStyle, 4)
+ TEST_FIELD_ALIGN (CREATESTRUCTW, dwExStyle, 4)
+ TEST_FIELD_OFFSET(CREATESTRUCTW, dwExStyle, 44)
}
static void test_pack_CURSORINFO(void)
{
/* CURSORINFO (pack 4) */
- TEST_TYPE(CURSORINFO, 20, 4);
- TEST_FIELD(CURSORINFO, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(CURSORINFO, DWORD, flags, 4, 4, 4);
- TEST_FIELD(CURSORINFO, HCURSOR, hCursor, 8, 4, 4);
- TEST_FIELD(CURSORINFO, POINT, ptScreenPos, 12, 8, 4);
+ TEST_TYPE_SIZE (CURSORINFO, 20)
+ TEST_TYPE_ALIGN (CURSORINFO, 4)
+ TEST_FIELD_SIZE (CURSORINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (CURSORINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(CURSORINFO, cbSize, 0)
+ TEST_FIELD_SIZE (CURSORINFO, flags, 4)
+ TEST_FIELD_ALIGN (CURSORINFO, flags, 4)
+ TEST_FIELD_OFFSET(CURSORINFO, flags, 4)
+ TEST_FIELD_SIZE (CURSORINFO, hCursor, 4)
+ TEST_FIELD_ALIGN (CURSORINFO, hCursor, 4)
+ TEST_FIELD_OFFSET(CURSORINFO, hCursor, 8)
+ TEST_FIELD_SIZE (CURSORINFO, ptScreenPos, 8)
+ TEST_FIELD_ALIGN (CURSORINFO, ptScreenPos, 4)
+ TEST_FIELD_OFFSET(CURSORINFO, ptScreenPos, 12)
}
static void test_pack_CWPRETSTRUCT(void)
{
/* CWPRETSTRUCT (pack 4) */
- TEST_TYPE(CWPRETSTRUCT, 20, 4);
- TEST_FIELD(CWPRETSTRUCT, LRESULT, lResult, 0, 4, 4);
- TEST_FIELD(CWPRETSTRUCT, LPARAM, lParam, 4, 4, 4);
- TEST_FIELD(CWPRETSTRUCT, WPARAM, wParam, 8, 4, 4);
- TEST_FIELD(CWPRETSTRUCT, DWORD, message, 12, 4, 4);
- TEST_FIELD(CWPRETSTRUCT, HWND, hwnd, 16, 4, 4);
+ TEST_TYPE_SIZE (CWPRETSTRUCT, 20)
+ TEST_TYPE_ALIGN (CWPRETSTRUCT, 4)
+ TEST_FIELD_SIZE (CWPRETSTRUCT, lResult, 4)
+ TEST_FIELD_ALIGN (CWPRETSTRUCT, lResult, 4)
+ TEST_FIELD_OFFSET(CWPRETSTRUCT, lResult, 0)
+ TEST_FIELD_SIZE (CWPRETSTRUCT, lParam, 4)
+ TEST_FIELD_ALIGN (CWPRETSTRUCT, lParam, 4)
+ TEST_FIELD_OFFSET(CWPRETSTRUCT, lParam, 4)
+ TEST_FIELD_SIZE (CWPRETSTRUCT, wParam, 4)
+ TEST_FIELD_ALIGN (CWPRETSTRUCT, wParam, 4)
+ TEST_FIELD_OFFSET(CWPRETSTRUCT, wParam, 8)
+ TEST_FIELD_SIZE (CWPRETSTRUCT, message, 4)
+ TEST_FIELD_ALIGN (CWPRETSTRUCT, message, 4)
+ TEST_FIELD_OFFSET(CWPRETSTRUCT, message, 12)
+ TEST_FIELD_SIZE (CWPRETSTRUCT, hwnd, 4)
+ TEST_FIELD_ALIGN (CWPRETSTRUCT, hwnd, 4)
+ TEST_FIELD_OFFSET(CWPRETSTRUCT, hwnd, 16)
}
static void test_pack_CWPSTRUCT(void)
{
/* CWPSTRUCT (pack 4) */
- TEST_TYPE(CWPSTRUCT, 16, 4);
- TEST_FIELD(CWPSTRUCT, LPARAM, lParam, 0, 4, 4);
- TEST_FIELD(CWPSTRUCT, WPARAM, wParam, 4, 4, 4);
- TEST_FIELD(CWPSTRUCT, UINT, message, 8, 4, 4);
- TEST_FIELD(CWPSTRUCT, HWND, hwnd, 12, 4, 4);
+ TEST_TYPE_SIZE (CWPSTRUCT, 16)
+ TEST_TYPE_ALIGN (CWPSTRUCT, 4)
+ TEST_FIELD_SIZE (CWPSTRUCT, lParam, 4)
+ TEST_FIELD_ALIGN (CWPSTRUCT, lParam, 4)
+ TEST_FIELD_OFFSET(CWPSTRUCT, lParam, 0)
+ TEST_FIELD_SIZE (CWPSTRUCT, wParam, 4)
+ TEST_FIELD_ALIGN (CWPSTRUCT, wParam, 4)
+ TEST_FIELD_OFFSET(CWPSTRUCT, wParam, 4)
+ TEST_FIELD_SIZE (CWPSTRUCT, message, 4)
+ TEST_FIELD_ALIGN (CWPSTRUCT, message, 4)
+ TEST_FIELD_OFFSET(CWPSTRUCT, message, 8)
+ TEST_FIELD_SIZE (CWPSTRUCT, hwnd, 4)
+ TEST_FIELD_ALIGN (CWPSTRUCT, hwnd, 4)
+ TEST_FIELD_OFFSET(CWPSTRUCT, hwnd, 12)
}
static void test_pack_DEBUGHOOKINFO(void)
{
/* DEBUGHOOKINFO (pack 4) */
- TEST_TYPE(DEBUGHOOKINFO, 20, 4);
- TEST_FIELD(DEBUGHOOKINFO, DWORD, idThread, 0, 4, 4);
- TEST_FIELD(DEBUGHOOKINFO, DWORD, idThreadInstaller, 4, 4, 4);
- TEST_FIELD(DEBUGHOOKINFO, LPARAM, lParam, 8, 4, 4);
- TEST_FIELD(DEBUGHOOKINFO, WPARAM, wParam, 12, 4, 4);
- TEST_FIELD(DEBUGHOOKINFO, INT, code, 16, 4, 4);
+ TEST_TYPE_SIZE (DEBUGHOOKINFO, 20)
+ TEST_TYPE_ALIGN (DEBUGHOOKINFO, 4)
+ TEST_FIELD_SIZE (DEBUGHOOKINFO, idThread, 4)
+ TEST_FIELD_ALIGN (DEBUGHOOKINFO, idThread, 4)
+ TEST_FIELD_OFFSET(DEBUGHOOKINFO, idThread, 0)
+ TEST_FIELD_SIZE (DEBUGHOOKINFO, idThreadInstaller, 4)
+ TEST_FIELD_ALIGN (DEBUGHOOKINFO, idThreadInstaller, 4)
+ TEST_FIELD_OFFSET(DEBUGHOOKINFO, idThreadInstaller, 4)
+ TEST_FIELD_SIZE (DEBUGHOOKINFO, lParam, 4)
+ TEST_FIELD_ALIGN (DEBUGHOOKINFO, lParam, 4)
+ TEST_FIELD_OFFSET(DEBUGHOOKINFO, lParam, 8)
+ TEST_FIELD_SIZE (DEBUGHOOKINFO, wParam, 4)
+ TEST_FIELD_ALIGN (DEBUGHOOKINFO, wParam, 4)
+ TEST_FIELD_OFFSET(DEBUGHOOKINFO, wParam, 12)
+ TEST_FIELD_SIZE (DEBUGHOOKINFO, code, 4)
+ TEST_FIELD_ALIGN (DEBUGHOOKINFO, code, 4)
+ TEST_FIELD_OFFSET(DEBUGHOOKINFO, code, 16)
}
static void test_pack_DELETEITEMSTRUCT(void)
{
/* DELETEITEMSTRUCT (pack 4) */
- TEST_TYPE(DELETEITEMSTRUCT, 20, 4);
- TEST_FIELD(DELETEITEMSTRUCT, UINT, CtlType, 0, 4, 4);
- TEST_FIELD(DELETEITEMSTRUCT, UINT, CtlID, 4, 4, 4);
- TEST_FIELD(DELETEITEMSTRUCT, UINT, itemID, 8, 4, 4);
- TEST_FIELD(DELETEITEMSTRUCT, HWND, hwndItem, 12, 4, 4);
- TEST_FIELD(DELETEITEMSTRUCT, ULONG_PTR, itemData, 16, 4, 4);
+ TEST_TYPE_SIZE (DELETEITEMSTRUCT, 20)
+ TEST_TYPE_ALIGN (DELETEITEMSTRUCT, 4)
+ TEST_FIELD_SIZE (DELETEITEMSTRUCT, CtlType, 4)
+ TEST_FIELD_ALIGN (DELETEITEMSTRUCT, CtlType, 4)
+ TEST_FIELD_OFFSET(DELETEITEMSTRUCT, CtlType, 0)
+ TEST_FIELD_SIZE (DELETEITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_ALIGN (DELETEITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_OFFSET(DELETEITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_SIZE (DELETEITEMSTRUCT, itemID, 4)
+ TEST_FIELD_ALIGN (DELETEITEMSTRUCT, itemID, 4)
+ TEST_FIELD_OFFSET(DELETEITEMSTRUCT, itemID, 8)
+ TEST_FIELD_SIZE (DELETEITEMSTRUCT, hwndItem, 4)
+ TEST_FIELD_ALIGN (DELETEITEMSTRUCT, hwndItem, 4)
+ TEST_FIELD_OFFSET(DELETEITEMSTRUCT, hwndItem, 12)
+ TEST_FIELD_SIZE (DELETEITEMSTRUCT, itemData, 4)
+ TEST_FIELD_ALIGN (DELETEITEMSTRUCT, itemData, 4)
+ TEST_FIELD_OFFSET(DELETEITEMSTRUCT, itemData, 16)
}
static void test_pack_DESKTOPENUMPROCA(void)
{
/* DESKTOPENUMPROCA */
- TEST_TYPE(DESKTOPENUMPROCA, 4, 4);
+ TEST_TYPE_SIZE (DESKTOPENUMPROCA, 4)
+ TEST_TYPE_ALIGN (DESKTOPENUMPROCA, 4)
}
static void test_pack_DESKTOPENUMPROCW(void)
{
/* DESKTOPENUMPROCW */
- TEST_TYPE(DESKTOPENUMPROCW, 4, 4);
+ TEST_TYPE_SIZE (DESKTOPENUMPROCW, 4)
+ TEST_TYPE_ALIGN (DESKTOPENUMPROCW, 4)
}
static void test_pack_DLGITEMTEMPLATE(void)
{
/* DLGITEMTEMPLATE (pack 2) */
- TEST_TYPE(DLGITEMTEMPLATE, 18, 2);
- TEST_FIELD(DLGITEMTEMPLATE, DWORD, style, 0, 4, 2);
- TEST_FIELD(DLGITEMTEMPLATE, DWORD, dwExtendedStyle, 4, 4, 2);
- TEST_FIELD(DLGITEMTEMPLATE, short, x, 8, 2, 2);
- TEST_FIELD(DLGITEMTEMPLATE, short, y, 10, 2, 2);
- TEST_FIELD(DLGITEMTEMPLATE, short, cx, 12, 2, 2);
- TEST_FIELD(DLGITEMTEMPLATE, short, cy, 14, 2, 2);
- TEST_FIELD(DLGITEMTEMPLATE, WORD, id, 16, 2, 2);
+ TEST_TYPE_SIZE (DLGITEMTEMPLATE, 18)
+ TEST_TYPE_ALIGN (DLGITEMTEMPLATE, 2)
+ TEST_FIELD_SIZE (DLGITEMTEMPLATE, style, 4)
+ TEST_FIELD_ALIGN (DLGITEMTEMPLATE, style, 2)
+ TEST_FIELD_OFFSET(DLGITEMTEMPLATE, style, 0)
+ TEST_FIELD_SIZE (DLGITEMTEMPLATE, dwExtendedStyle, 4)
+ TEST_FIELD_ALIGN (DLGITEMTEMPLATE, dwExtendedStyle, 2)
+ TEST_FIELD_OFFSET(DLGITEMTEMPLATE, dwExtendedStyle, 4)
+ TEST_FIELD_SIZE (DLGITEMTEMPLATE, x, 2)
+ TEST_FIELD_ALIGN (DLGITEMTEMPLATE, x, 2)
+ TEST_FIELD_OFFSET(DLGITEMTEMPLATE, x, 8)
+ TEST_FIELD_SIZE (DLGITEMTEMPLATE, y, 2)
+ TEST_FIELD_ALIGN (DLGITEMTEMPLATE, y, 2)
+ TEST_FIELD_OFFSET(DLGITEMTEMPLATE, y, 10)
+ TEST_FIELD_SIZE (DLGITEMTEMPLATE, cx, 2)
+ TEST_FIELD_ALIGN (DLGITEMTEMPLATE, cx, 2)
+ TEST_FIELD_OFFSET(DLGITEMTEMPLATE, cx, 12)
+ TEST_FIELD_SIZE (DLGITEMTEMPLATE, cy, 2)
+ TEST_FIELD_ALIGN (DLGITEMTEMPLATE, cy, 2)
+ TEST_FIELD_OFFSET(DLGITEMTEMPLATE, cy, 14)
+ TEST_FIELD_SIZE (DLGITEMTEMPLATE, id, 2)
+ TEST_FIELD_ALIGN (DLGITEMTEMPLATE, id, 2)
+ TEST_FIELD_OFFSET(DLGITEMTEMPLATE, id, 16)
}
static void test_pack_DLGPROC(void)
{
/* DLGPROC */
- TEST_TYPE(DLGPROC, 4, 4);
+ TEST_TYPE_SIZE (DLGPROC, 4)
+ TEST_TYPE_ALIGN (DLGPROC, 4)
}
static void test_pack_DLGTEMPLATE(void)
{
/* DLGTEMPLATE (pack 2) */
- TEST_TYPE(DLGTEMPLATE, 18, 2);
- TEST_FIELD(DLGTEMPLATE, DWORD, style, 0, 4, 2);
- TEST_FIELD(DLGTEMPLATE, DWORD, dwExtendedStyle, 4, 4, 2);
- TEST_FIELD(DLGTEMPLATE, WORD, cdit, 8, 2, 2);
- TEST_FIELD(DLGTEMPLATE, short, x, 10, 2, 2);
- TEST_FIELD(DLGTEMPLATE, short, y, 12, 2, 2);
- TEST_FIELD(DLGTEMPLATE, short, cx, 14, 2, 2);
- TEST_FIELD(DLGTEMPLATE, short, cy, 16, 2, 2);
+ TEST_TYPE_SIZE (DLGTEMPLATE, 18)
+ TEST_TYPE_ALIGN (DLGTEMPLATE, 2)
+ TEST_FIELD_SIZE (DLGTEMPLATE, style, 4)
+ TEST_FIELD_ALIGN (DLGTEMPLATE, style, 2)
+ TEST_FIELD_OFFSET(DLGTEMPLATE, style, 0)
+ TEST_FIELD_SIZE (DLGTEMPLATE, dwExtendedStyle, 4)
+ TEST_FIELD_ALIGN (DLGTEMPLATE, dwExtendedStyle, 2)
+ TEST_FIELD_OFFSET(DLGTEMPLATE, dwExtendedStyle, 4)
+ TEST_FIELD_SIZE (DLGTEMPLATE, cdit, 2)
+ TEST_FIELD_ALIGN (DLGTEMPLATE, cdit, 2)
+ TEST_FIELD_OFFSET(DLGTEMPLATE, cdit, 8)
+ TEST_FIELD_SIZE (DLGTEMPLATE, x, 2)
+ TEST_FIELD_ALIGN (DLGTEMPLATE, x, 2)
+ TEST_FIELD_OFFSET(DLGTEMPLATE, x, 10)
+ TEST_FIELD_SIZE (DLGTEMPLATE, y, 2)
+ TEST_FIELD_ALIGN (DLGTEMPLATE, y, 2)
+ TEST_FIELD_OFFSET(DLGTEMPLATE, y, 12)
+ TEST_FIELD_SIZE (DLGTEMPLATE, cx, 2)
+ TEST_FIELD_ALIGN (DLGTEMPLATE, cx, 2)
+ TEST_FIELD_OFFSET(DLGTEMPLATE, cx, 14)
+ TEST_FIELD_SIZE (DLGTEMPLATE, cy, 2)
+ TEST_FIELD_ALIGN (DLGTEMPLATE, cy, 2)
+ TEST_FIELD_OFFSET(DLGTEMPLATE, cy, 16)
}
static void test_pack_DRAWITEMSTRUCT(void)
{
/* DRAWITEMSTRUCT (pack 4) */
- TEST_TYPE(DRAWITEMSTRUCT, 48, 4);
- TEST_FIELD(DRAWITEMSTRUCT, UINT, CtlType, 0, 4, 4);
- TEST_FIELD(DRAWITEMSTRUCT, UINT, CtlID, 4, 4, 4);
- TEST_FIELD(DRAWITEMSTRUCT, UINT, itemID, 8, 4, 4);
- TEST_FIELD(DRAWITEMSTRUCT, UINT, itemAction, 12, 4, 4);
- TEST_FIELD(DRAWITEMSTRUCT, UINT, itemState, 16, 4, 4);
- TEST_FIELD(DRAWITEMSTRUCT, HWND, hwndItem, 20, 4, 4);
- TEST_FIELD(DRAWITEMSTRUCT, HDC, hDC, 24, 4, 4);
- TEST_FIELD(DRAWITEMSTRUCT, RECT, rcItem, 28, 16, 4);
- TEST_FIELD(DRAWITEMSTRUCT, ULONG_PTR, itemData, 44, 4, 4);
+ TEST_TYPE_SIZE (DRAWITEMSTRUCT, 48)
+ TEST_TYPE_ALIGN (DRAWITEMSTRUCT, 4)
+ TEST_FIELD_SIZE (DRAWITEMSTRUCT, CtlType, 4)
+ TEST_FIELD_ALIGN (DRAWITEMSTRUCT, CtlType, 4)
+ TEST_FIELD_OFFSET(DRAWITEMSTRUCT, CtlType, 0)
+ TEST_FIELD_SIZE (DRAWITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_ALIGN (DRAWITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_OFFSET(DRAWITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_SIZE (DRAWITEMSTRUCT, itemID, 4)
+ TEST_FIELD_ALIGN (DRAWITEMSTRUCT, itemID, 4)
+ TEST_FIELD_OFFSET(DRAWITEMSTRUCT, itemID, 8)
+ TEST_FIELD_SIZE (DRAWITEMSTRUCT, itemAction, 4)
+ TEST_FIELD_ALIGN (DRAWITEMSTRUCT, itemAction, 4)
+ TEST_FIELD_OFFSET(DRAWITEMSTRUCT, itemAction, 12)
+ TEST_FIELD_SIZE (DRAWITEMSTRUCT, itemState, 4)
+ TEST_FIELD_ALIGN (DRAWITEMSTRUCT, itemState, 4)
+ TEST_FIELD_OFFSET(DRAWITEMSTRUCT, itemState, 16)
+ TEST_FIELD_SIZE (DRAWITEMSTRUCT, hwndItem, 4)
+ TEST_FIELD_ALIGN (DRAWITEMSTRUCT, hwndItem, 4)
+ TEST_FIELD_OFFSET(DRAWITEMSTRUCT, hwndItem, 20)
+ TEST_FIELD_SIZE (DRAWITEMSTRUCT, hDC, 4)
+ TEST_FIELD_ALIGN (DRAWITEMSTRUCT, hDC, 4)
+ TEST_FIELD_OFFSET(DRAWITEMSTRUCT, hDC, 24)
+ TEST_FIELD_SIZE (DRAWITEMSTRUCT, rcItem, 16)
+ TEST_FIELD_ALIGN (DRAWITEMSTRUCT, rcItem, 4)
+ TEST_FIELD_OFFSET(DRAWITEMSTRUCT, rcItem, 28)
+ TEST_FIELD_SIZE (DRAWITEMSTRUCT, itemData, 4)
+ TEST_FIELD_ALIGN (DRAWITEMSTRUCT, itemData, 4)
+ TEST_FIELD_OFFSET(DRAWITEMSTRUCT, itemData, 44)
}
static void test_pack_DRAWSTATEPROC(void)
{
/* DRAWSTATEPROC */
- TEST_TYPE(DRAWSTATEPROC, 4, 4);
+ TEST_TYPE_SIZE (DRAWSTATEPROC, 4)
+ TEST_TYPE_ALIGN (DRAWSTATEPROC, 4)
}
static void test_pack_DRAWTEXTPARAMS(void)
{
/* DRAWTEXTPARAMS (pack 4) */
- TEST_TYPE(DRAWTEXTPARAMS, 20, 4);
- TEST_FIELD(DRAWTEXTPARAMS, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(DRAWTEXTPARAMS, INT, iTabLength, 4, 4, 4);
- TEST_FIELD(DRAWTEXTPARAMS, INT, iLeftMargin, 8, 4, 4);
- TEST_FIELD(DRAWTEXTPARAMS, INT, iRightMargin, 12, 4, 4);
- TEST_FIELD(DRAWTEXTPARAMS, UINT, uiLengthDrawn, 16, 4, 4);
+ TEST_TYPE_SIZE (DRAWTEXTPARAMS, 20)
+ TEST_TYPE_ALIGN (DRAWTEXTPARAMS, 4)
+ TEST_FIELD_SIZE (DRAWTEXTPARAMS, cbSize, 4)
+ TEST_FIELD_ALIGN (DRAWTEXTPARAMS, cbSize, 4)
+ TEST_FIELD_OFFSET(DRAWTEXTPARAMS, cbSize, 0)
+ TEST_FIELD_SIZE (DRAWTEXTPARAMS, iTabLength, 4)
+ TEST_FIELD_ALIGN (DRAWTEXTPARAMS, iTabLength, 4)
+ TEST_FIELD_OFFSET(DRAWTEXTPARAMS, iTabLength, 4)
+ TEST_FIELD_SIZE (DRAWTEXTPARAMS, iLeftMargin, 4)
+ TEST_FIELD_ALIGN (DRAWTEXTPARAMS, iLeftMargin, 4)
+ TEST_FIELD_OFFSET(DRAWTEXTPARAMS, iLeftMargin, 8)
+ TEST_FIELD_SIZE (DRAWTEXTPARAMS, iRightMargin, 4)
+ TEST_FIELD_ALIGN (DRAWTEXTPARAMS, iRightMargin, 4)
+ TEST_FIELD_OFFSET(DRAWTEXTPARAMS, iRightMargin, 12)
+ TEST_FIELD_SIZE (DRAWTEXTPARAMS, uiLengthDrawn, 4)
+ TEST_FIELD_ALIGN (DRAWTEXTPARAMS, uiLengthDrawn, 4)
+ TEST_FIELD_OFFSET(DRAWTEXTPARAMS, uiLengthDrawn, 16)
}
static void test_pack_EDITWORDBREAKPROCA(void)
{
/* EDITWORDBREAKPROCA */
- TEST_TYPE(EDITWORDBREAKPROCA, 4, 4);
+ TEST_TYPE_SIZE (EDITWORDBREAKPROCA, 4)
+ TEST_TYPE_ALIGN (EDITWORDBREAKPROCA, 4)
}
static void test_pack_EDITWORDBREAKPROCW(void)
{
/* EDITWORDBREAKPROCW */
- TEST_TYPE(EDITWORDBREAKPROCW, 4, 4);
+ TEST_TYPE_SIZE (EDITWORDBREAKPROCW, 4)
+ TEST_TYPE_ALIGN (EDITWORDBREAKPROCW, 4)
}
static void test_pack_EVENTMSG(void)
{
/* EVENTMSG (pack 4) */
- TEST_TYPE(EVENTMSG, 20, 4);
- TEST_FIELD(EVENTMSG, UINT, message, 0, 4, 4);
- TEST_FIELD(EVENTMSG, UINT, paramL, 4, 4, 4);
- TEST_FIELD(EVENTMSG, UINT, paramH, 8, 4, 4);
- TEST_FIELD(EVENTMSG, DWORD, time, 12, 4, 4);
- TEST_FIELD(EVENTMSG, HWND, hwnd, 16, 4, 4);
+ TEST_TYPE_SIZE (EVENTMSG, 20)
+ TEST_TYPE_ALIGN (EVENTMSG, 4)
+ TEST_FIELD_SIZE (EVENTMSG, message, 4)
+ TEST_FIELD_ALIGN (EVENTMSG, message, 4)
+ TEST_FIELD_OFFSET(EVENTMSG, message, 0)
+ TEST_FIELD_SIZE (EVENTMSG, paramL, 4)
+ TEST_FIELD_ALIGN (EVENTMSG, paramL, 4)
+ TEST_FIELD_OFFSET(EVENTMSG, paramL, 4)
+ TEST_FIELD_SIZE (EVENTMSG, paramH, 4)
+ TEST_FIELD_ALIGN (EVENTMSG, paramH, 4)
+ TEST_FIELD_OFFSET(EVENTMSG, paramH, 8)
+ TEST_FIELD_SIZE (EVENTMSG, time, 4)
+ TEST_FIELD_ALIGN (EVENTMSG, time, 4)
+ TEST_FIELD_OFFSET(EVENTMSG, time, 12)
+ TEST_FIELD_SIZE (EVENTMSG, hwnd, 4)
+ TEST_FIELD_ALIGN (EVENTMSG, hwnd, 4)
+ TEST_FIELD_OFFSET(EVENTMSG, hwnd, 16)
}
static void test_pack_FILTERKEYS(void)
{
/* FILTERKEYS (pack 4) */
- TEST_TYPE(FILTERKEYS, 24, 4);
- TEST_FIELD(FILTERKEYS, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(FILTERKEYS, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(FILTERKEYS, DWORD, iWaitMSec, 8, 4, 4);
- TEST_FIELD(FILTERKEYS, DWORD, iDelayMSec, 12, 4, 4);
- TEST_FIELD(FILTERKEYS, DWORD, iRepeatMSec, 16, 4, 4);
- TEST_FIELD(FILTERKEYS, DWORD, iBounceMSec, 20, 4, 4);
+ TEST_TYPE_SIZE (FILTERKEYS, 24)
+ TEST_TYPE_ALIGN (FILTERKEYS, 4)
+ TEST_FIELD_SIZE (FILTERKEYS, cbSize, 4)
+ TEST_FIELD_ALIGN (FILTERKEYS, cbSize, 4)
+ TEST_FIELD_OFFSET(FILTERKEYS, cbSize, 0)
+ TEST_FIELD_SIZE (FILTERKEYS, dwFlags, 4)
+ TEST_FIELD_ALIGN (FILTERKEYS, dwFlags, 4)
+ TEST_FIELD_OFFSET(FILTERKEYS, dwFlags, 4)
+ TEST_FIELD_SIZE (FILTERKEYS, iWaitMSec, 4)
+ TEST_FIELD_ALIGN (FILTERKEYS, iWaitMSec, 4)
+ TEST_FIELD_OFFSET(FILTERKEYS, iWaitMSec, 8)
+ TEST_FIELD_SIZE (FILTERKEYS, iDelayMSec, 4)
+ TEST_FIELD_ALIGN (FILTERKEYS, iDelayMSec, 4)
+ TEST_FIELD_OFFSET(FILTERKEYS, iDelayMSec, 12)
+ TEST_FIELD_SIZE (FILTERKEYS, iRepeatMSec, 4)
+ TEST_FIELD_ALIGN (FILTERKEYS, iRepeatMSec, 4)
+ TEST_FIELD_OFFSET(FILTERKEYS, iRepeatMSec, 16)
+ TEST_FIELD_SIZE (FILTERKEYS, iBounceMSec, 4)
+ TEST_FIELD_ALIGN (FILTERKEYS, iBounceMSec, 4)
+ TEST_FIELD_OFFSET(FILTERKEYS, iBounceMSec, 20)
}
static void test_pack_FLASHWINFO(void)
{
/* FLASHWINFO (pack 4) */
- TEST_TYPE(FLASHWINFO, 20, 4);
- TEST_FIELD(FLASHWINFO, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(FLASHWINFO, HWND, hwnd, 4, 4, 4);
- TEST_FIELD(FLASHWINFO, DWORD, dwFlags, 8, 4, 4);
- TEST_FIELD(FLASHWINFO, UINT, uCount, 12, 4, 4);
- TEST_FIELD(FLASHWINFO, DWORD, dwTimeout, 16, 4, 4);
+ TEST_TYPE_SIZE (FLASHWINFO, 20)
+ TEST_TYPE_ALIGN (FLASHWINFO, 4)
+ TEST_FIELD_SIZE (FLASHWINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (FLASHWINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(FLASHWINFO, cbSize, 0)
+ TEST_FIELD_SIZE (FLASHWINFO, hwnd, 4)
+ TEST_FIELD_ALIGN (FLASHWINFO, hwnd, 4)
+ TEST_FIELD_OFFSET(FLASHWINFO, hwnd, 4)
+ TEST_FIELD_SIZE (FLASHWINFO, dwFlags, 4)
+ TEST_FIELD_ALIGN (FLASHWINFO, dwFlags, 4)
+ TEST_FIELD_OFFSET(FLASHWINFO, dwFlags, 8)
+ TEST_FIELD_SIZE (FLASHWINFO, uCount, 4)
+ TEST_FIELD_ALIGN (FLASHWINFO, uCount, 4)
+ TEST_FIELD_OFFSET(FLASHWINFO, uCount, 12)
+ TEST_FIELD_SIZE (FLASHWINFO, dwTimeout, 4)
+ TEST_FIELD_ALIGN (FLASHWINFO, dwTimeout, 4)
+ TEST_FIELD_OFFSET(FLASHWINFO, dwTimeout, 16)
}
static void test_pack_GRAYSTRINGPROC(void)
{
/* GRAYSTRINGPROC */
- TEST_TYPE(GRAYSTRINGPROC, 4, 4);
+ TEST_TYPE_SIZE (GRAYSTRINGPROC, 4)
+ TEST_TYPE_ALIGN (GRAYSTRINGPROC, 4)
}
static void test_pack_GUITHREADINFO(void)
{
/* GUITHREADINFO (pack 4) */
- TEST_TYPE(GUITHREADINFO, 48, 4);
- TEST_FIELD(GUITHREADINFO, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(GUITHREADINFO, DWORD, flags, 4, 4, 4);
- TEST_FIELD(GUITHREADINFO, HWND, hwndActive, 8, 4, 4);
- TEST_FIELD(GUITHREADINFO, HWND, hwndFocus, 12, 4, 4);
- TEST_FIELD(GUITHREADINFO, HWND, hwndCapture, 16, 4, 4);
- TEST_FIELD(GUITHREADINFO, HWND, hwndMenuOwner, 20, 4, 4);
- TEST_FIELD(GUITHREADINFO, HWND, hwndMoveSize, 24, 4, 4);
- TEST_FIELD(GUITHREADINFO, HWND, hwndCaret, 28, 4, 4);
- TEST_FIELD(GUITHREADINFO, RECT, rcCaret, 32, 16, 4);
+ TEST_TYPE_SIZE (GUITHREADINFO, 48)
+ TEST_TYPE_ALIGN (GUITHREADINFO, 4)
+ TEST_FIELD_SIZE (GUITHREADINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (GUITHREADINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(GUITHREADINFO, cbSize, 0)
+ TEST_FIELD_SIZE (GUITHREADINFO, flags, 4)
+ TEST_FIELD_ALIGN (GUITHREADINFO, flags, 4)
+ TEST_FIELD_OFFSET(GUITHREADINFO, flags, 4)
+ TEST_FIELD_SIZE (GUITHREADINFO, hwndActive, 4)
+ TEST_FIELD_ALIGN (GUITHREADINFO, hwndActive, 4)
+ TEST_FIELD_OFFSET(GUITHREADINFO, hwndActive, 8)
+ TEST_FIELD_SIZE (GUITHREADINFO, hwndFocus, 4)
+ TEST_FIELD_ALIGN (GUITHREADINFO, hwndFocus, 4)
+ TEST_FIELD_OFFSET(GUITHREADINFO, hwndFocus, 12)
+ TEST_FIELD_SIZE (GUITHREADINFO, hwndCapture, 4)
+ TEST_FIELD_ALIGN (GUITHREADINFO, hwndCapture, 4)
+ TEST_FIELD_OFFSET(GUITHREADINFO, hwndCapture, 16)
+ TEST_FIELD_SIZE (GUITHREADINFO, hwndMenuOwner, 4)
+ TEST_FIELD_ALIGN (GUITHREADINFO, hwndMenuOwner, 4)
+ TEST_FIELD_OFFSET(GUITHREADINFO, hwndMenuOwner, 20)
+ TEST_FIELD_SIZE (GUITHREADINFO, hwndMoveSize, 4)
+ TEST_FIELD_ALIGN (GUITHREADINFO, hwndMoveSize, 4)
+ TEST_FIELD_OFFSET(GUITHREADINFO, hwndMoveSize, 24)
+ TEST_FIELD_SIZE (GUITHREADINFO, hwndCaret, 4)
+ TEST_FIELD_ALIGN (GUITHREADINFO, hwndCaret, 4)
+ TEST_FIELD_OFFSET(GUITHREADINFO, hwndCaret, 28)
+ TEST_FIELD_SIZE (GUITHREADINFO, rcCaret, 16)
+ TEST_FIELD_ALIGN (GUITHREADINFO, rcCaret, 4)
+ TEST_FIELD_OFFSET(GUITHREADINFO, rcCaret, 32)
}
static void test_pack_HARDWAREHOOKSTRUCT(void)
{
/* HARDWAREHOOKSTRUCT (pack 4) */
- TEST_TYPE(HARDWAREHOOKSTRUCT, 16, 4);
- TEST_FIELD(HARDWAREHOOKSTRUCT, HWND, hwnd, 0, 4, 4);
- TEST_FIELD(HARDWAREHOOKSTRUCT, UINT, message, 4, 4, 4);
- TEST_FIELD(HARDWAREHOOKSTRUCT, WPARAM, wParam, 8, 4, 4);
- TEST_FIELD(HARDWAREHOOKSTRUCT, LPARAM, lParam, 12, 4, 4);
+ TEST_TYPE_SIZE (HARDWAREHOOKSTRUCT, 16)
+ TEST_TYPE_ALIGN (HARDWAREHOOKSTRUCT, 4)
+ TEST_FIELD_SIZE (HARDWAREHOOKSTRUCT, hwnd, 4)
+ TEST_FIELD_ALIGN (HARDWAREHOOKSTRUCT, hwnd, 4)
+ TEST_FIELD_OFFSET(HARDWAREHOOKSTRUCT, hwnd, 0)
+ TEST_FIELD_SIZE (HARDWAREHOOKSTRUCT, message, 4)
+ TEST_FIELD_ALIGN (HARDWAREHOOKSTRUCT, message, 4)
+ TEST_FIELD_OFFSET(HARDWAREHOOKSTRUCT, message, 4)
+ TEST_FIELD_SIZE (HARDWAREHOOKSTRUCT, wParam, 4)
+ TEST_FIELD_ALIGN (HARDWAREHOOKSTRUCT, wParam, 4)
+ TEST_FIELD_OFFSET(HARDWAREHOOKSTRUCT, wParam, 8)
+ TEST_FIELD_SIZE (HARDWAREHOOKSTRUCT, lParam, 4)
+ TEST_FIELD_ALIGN (HARDWAREHOOKSTRUCT, lParam, 4)
+ TEST_FIELD_OFFSET(HARDWAREHOOKSTRUCT, lParam, 12)
}
static void test_pack_HARDWAREINPUT(void)
{
/* HARDWAREINPUT (pack 4) */
- TEST_TYPE(HARDWAREINPUT, 8, 4);
- TEST_FIELD(HARDWAREINPUT, DWORD, uMsg, 0, 4, 4);
- TEST_FIELD(HARDWAREINPUT, WORD, wParamL, 4, 2, 2);
- TEST_FIELD(HARDWAREINPUT, WORD, wParamH, 6, 2, 2);
+ TEST_TYPE_SIZE (HARDWAREINPUT, 8)
+ TEST_TYPE_ALIGN (HARDWAREINPUT, 4)
+ TEST_FIELD_SIZE (HARDWAREINPUT, uMsg, 4)
+ TEST_FIELD_ALIGN (HARDWAREINPUT, uMsg, 4)
+ TEST_FIELD_OFFSET(HARDWAREINPUT, uMsg, 0)
+ TEST_FIELD_SIZE (HARDWAREINPUT, wParamL, 2)
+ TEST_FIELD_ALIGN (HARDWAREINPUT, wParamL, 2)
+ TEST_FIELD_OFFSET(HARDWAREINPUT, wParamL, 4)
+ TEST_FIELD_SIZE (HARDWAREINPUT, wParamH, 2)
+ TEST_FIELD_ALIGN (HARDWAREINPUT, wParamH, 2)
+ TEST_FIELD_OFFSET(HARDWAREINPUT, wParamH, 6)
}
static void test_pack_HDEVNOTIFY(void)
{
/* HDEVNOTIFY */
- TEST_TYPE(HDEVNOTIFY, 4, 4);
+ TEST_TYPE_SIZE (HDEVNOTIFY, 4)
+ TEST_TYPE_ALIGN (HDEVNOTIFY, 4)
}
static void test_pack_HDWP(void)
{
/* HDWP */
- TEST_TYPE(HDWP, 4, 4);
+ TEST_TYPE_SIZE (HDWP, 4)
+ TEST_TYPE_ALIGN (HDWP, 4)
}
static void test_pack_HELPINFO(void)
{
/* HELPINFO (pack 4) */
- TEST_TYPE(HELPINFO, 28, 4);
- TEST_FIELD(HELPINFO, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(HELPINFO, INT, iContextType, 4, 4, 4);
- TEST_FIELD(HELPINFO, INT, iCtrlId, 8, 4, 4);
- TEST_FIELD(HELPINFO, HANDLE, hItemHandle, 12, 4, 4);
- TEST_FIELD(HELPINFO, DWORD_PTR, dwContextId, 16, 4, 4);
- TEST_FIELD(HELPINFO, POINT, MousePos, 20, 8, 4);
+ TEST_TYPE_SIZE (HELPINFO, 28)
+ TEST_TYPE_ALIGN (HELPINFO, 4)
+ TEST_FIELD_SIZE (HELPINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (HELPINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(HELPINFO, cbSize, 0)
+ TEST_FIELD_SIZE (HELPINFO, iContextType, 4)
+ TEST_FIELD_ALIGN (HELPINFO, iContextType, 4)
+ TEST_FIELD_OFFSET(HELPINFO, iContextType, 4)
+ TEST_FIELD_SIZE (HELPINFO, iCtrlId, 4)
+ TEST_FIELD_ALIGN (HELPINFO, iCtrlId, 4)
+ TEST_FIELD_OFFSET(HELPINFO, iCtrlId, 8)
+ TEST_FIELD_SIZE (HELPINFO, hItemHandle, 4)
+ TEST_FIELD_ALIGN (HELPINFO, hItemHandle, 4)
+ TEST_FIELD_OFFSET(HELPINFO, hItemHandle, 12)
+ TEST_FIELD_SIZE (HELPINFO, dwContextId, 4)
+ TEST_FIELD_ALIGN (HELPINFO, dwContextId, 4)
+ TEST_FIELD_OFFSET(HELPINFO, dwContextId, 16)
+ TEST_FIELD_SIZE (HELPINFO, MousePos, 8)
+ TEST_FIELD_ALIGN (HELPINFO, MousePos, 4)
+ TEST_FIELD_OFFSET(HELPINFO, MousePos, 20)
}
static void test_pack_HELPWININFOA(void)
{
/* HELPWININFOA (pack 4) */
- TEST_TYPE(HELPWININFOA, 28, 4);
- TEST_FIELD(HELPWININFOA, int, wStructSize, 0, 4, 4);
- TEST_FIELD(HELPWININFOA, int, x, 4, 4, 4);
- TEST_FIELD(HELPWININFOA, int, y, 8, 4, 4);
- TEST_FIELD(HELPWININFOA, int, dx, 12, 4, 4);
- TEST_FIELD(HELPWININFOA, int, dy, 16, 4, 4);
- TEST_FIELD(HELPWININFOA, int, wMax, 20, 4, 4);
- TEST_FIELD(HELPWININFOA, CHAR[2], rgchMember, 24, 2, 1);
+ TEST_TYPE_SIZE (HELPWININFOA, 28)
+ TEST_TYPE_ALIGN (HELPWININFOA, 4)
+ TEST_FIELD_SIZE (HELPWININFOA, wStructSize, 4)
+ TEST_FIELD_ALIGN (HELPWININFOA, wStructSize, 4)
+ TEST_FIELD_OFFSET(HELPWININFOA, wStructSize, 0)
+ TEST_FIELD_SIZE (HELPWININFOA, x, 4)
+ TEST_FIELD_ALIGN (HELPWININFOA, x, 4)
+ TEST_FIELD_OFFSET(HELPWININFOA, x, 4)
+ TEST_FIELD_SIZE (HELPWININFOA, y, 4)
+ TEST_FIELD_ALIGN (HELPWININFOA, y, 4)
+ TEST_FIELD_OFFSET(HELPWININFOA, y, 8)
+ TEST_FIELD_SIZE (HELPWININFOA, dx, 4)
+ TEST_FIELD_ALIGN (HELPWININFOA, dx, 4)
+ TEST_FIELD_OFFSET(HELPWININFOA, dx, 12)
+ TEST_FIELD_SIZE (HELPWININFOA, dy, 4)
+ TEST_FIELD_ALIGN (HELPWININFOA, dy, 4)
+ TEST_FIELD_OFFSET(HELPWININFOA, dy, 16)
+ TEST_FIELD_SIZE (HELPWININFOA, wMax, 4)
+ TEST_FIELD_ALIGN (HELPWININFOA, wMax, 4)
+ TEST_FIELD_OFFSET(HELPWININFOA, wMax, 20)
+ TEST_FIELD_SIZE (HELPWININFOA, rgchMember, 2)
+ TEST_FIELD_ALIGN (HELPWININFOA, rgchMember, 1)
+ TEST_FIELD_OFFSET(HELPWININFOA, rgchMember, 24)
}
static void test_pack_HELPWININFOW(void)
{
/* HELPWININFOW (pack 4) */
- TEST_TYPE(HELPWININFOW, 28, 4);
- TEST_FIELD(HELPWININFOW, int, wStructSize, 0, 4, 4);
- TEST_FIELD(HELPWININFOW, int, x, 4, 4, 4);
- TEST_FIELD(HELPWININFOW, int, y, 8, 4, 4);
- TEST_FIELD(HELPWININFOW, int, dx, 12, 4, 4);
- TEST_FIELD(HELPWININFOW, int, dy, 16, 4, 4);
- TEST_FIELD(HELPWININFOW, int, wMax, 20, 4, 4);
- TEST_FIELD(HELPWININFOW, WCHAR[2], rgchMember, 24, 4, 2);
+ TEST_TYPE_SIZE (HELPWININFOW, 28)
+ TEST_TYPE_ALIGN (HELPWININFOW, 4)
+ TEST_FIELD_SIZE (HELPWININFOW, wStructSize, 4)
+ TEST_FIELD_ALIGN (HELPWININFOW, wStructSize, 4)
+ TEST_FIELD_OFFSET(HELPWININFOW, wStructSize, 0)
+ TEST_FIELD_SIZE (HELPWININFOW, x, 4)
+ TEST_FIELD_ALIGN (HELPWININFOW, x, 4)
+ TEST_FIELD_OFFSET(HELPWININFOW, x, 4)
+ TEST_FIELD_SIZE (HELPWININFOW, y, 4)
+ TEST_FIELD_ALIGN (HELPWININFOW, y, 4)
+ TEST_FIELD_OFFSET(HELPWININFOW, y, 8)
+ TEST_FIELD_SIZE (HELPWININFOW, dx, 4)
+ TEST_FIELD_ALIGN (HELPWININFOW, dx, 4)
+ TEST_FIELD_OFFSET(HELPWININFOW, dx, 12)
+ TEST_FIELD_SIZE (HELPWININFOW, dy, 4)
+ TEST_FIELD_ALIGN (HELPWININFOW, dy, 4)
+ TEST_FIELD_OFFSET(HELPWININFOW, dy, 16)
+ TEST_FIELD_SIZE (HELPWININFOW, wMax, 4)
+ TEST_FIELD_ALIGN (HELPWININFOW, wMax, 4)
+ TEST_FIELD_OFFSET(HELPWININFOW, wMax, 20)
+ TEST_FIELD_SIZE (HELPWININFOW, rgchMember, 4)
+ TEST_FIELD_ALIGN (HELPWININFOW, rgchMember, 2)
+ TEST_FIELD_OFFSET(HELPWININFOW, rgchMember, 24)
}
static void test_pack_HIGHCONTRASTA(void)
{
/* HIGHCONTRASTA (pack 4) */
- TEST_TYPE(HIGHCONTRASTA, 12, 4);
- TEST_FIELD(HIGHCONTRASTA, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(HIGHCONTRASTA, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(HIGHCONTRASTA, LPSTR, lpszDefaultScheme, 8, 4, 4);
+ TEST_TYPE_SIZE (HIGHCONTRASTA, 12)
+ TEST_TYPE_ALIGN (HIGHCONTRASTA, 4)
+ TEST_FIELD_SIZE (HIGHCONTRASTA, cbSize, 4)
+ TEST_FIELD_ALIGN (HIGHCONTRASTA, cbSize, 4)
+ TEST_FIELD_OFFSET(HIGHCONTRASTA, cbSize, 0)
+ TEST_FIELD_SIZE (HIGHCONTRASTA, dwFlags, 4)
+ TEST_FIELD_ALIGN (HIGHCONTRASTA, dwFlags, 4)
+ TEST_FIELD_OFFSET(HIGHCONTRASTA, dwFlags, 4)
+ TEST_FIELD_SIZE (HIGHCONTRASTA, lpszDefaultScheme, 4)
+ TEST_FIELD_ALIGN (HIGHCONTRASTA, lpszDefaultScheme, 4)
+ TEST_FIELD_OFFSET(HIGHCONTRASTA, lpszDefaultScheme, 8)
}
static void test_pack_HIGHCONTRASTW(void)
{
/* HIGHCONTRASTW (pack 4) */
- TEST_TYPE(HIGHCONTRASTW, 12, 4);
- TEST_FIELD(HIGHCONTRASTW, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(HIGHCONTRASTW, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(HIGHCONTRASTW, LPWSTR, lpszDefaultScheme, 8, 4, 4);
+ TEST_TYPE_SIZE (HIGHCONTRASTW, 12)
+ TEST_TYPE_ALIGN (HIGHCONTRASTW, 4)
+ TEST_FIELD_SIZE (HIGHCONTRASTW, cbSize, 4)
+ TEST_FIELD_ALIGN (HIGHCONTRASTW, cbSize, 4)
+ TEST_FIELD_OFFSET(HIGHCONTRASTW, cbSize, 0)
+ TEST_FIELD_SIZE (HIGHCONTRASTW, dwFlags, 4)
+ TEST_FIELD_ALIGN (HIGHCONTRASTW, dwFlags, 4)
+ TEST_FIELD_OFFSET(HIGHCONTRASTW, dwFlags, 4)
+ TEST_FIELD_SIZE (HIGHCONTRASTW, lpszDefaultScheme, 4)
+ TEST_FIELD_ALIGN (HIGHCONTRASTW, lpszDefaultScheme, 4)
+ TEST_FIELD_OFFSET(HIGHCONTRASTW, lpszDefaultScheme, 8)
}
static void test_pack_HOOKPROC(void)
{
/* HOOKPROC */
- TEST_TYPE(HOOKPROC, 4, 4);
+ TEST_TYPE_SIZE (HOOKPROC, 4)
+ TEST_TYPE_ALIGN (HOOKPROC, 4)
}
static void test_pack_ICONINFO(void)
{
/* ICONINFO (pack 4) */
- TEST_TYPE(ICONINFO, 20, 4);
- TEST_FIELD(ICONINFO, BOOL, fIcon, 0, 4, 4);
- TEST_FIELD(ICONINFO, DWORD, xHotspot, 4, 4, 4);
- TEST_FIELD(ICONINFO, DWORD, yHotspot, 8, 4, 4);
- TEST_FIELD(ICONINFO, HBITMAP, hbmMask, 12, 4, 4);
- TEST_FIELD(ICONINFO, HBITMAP, hbmColor, 16, 4, 4);
+ TEST_TYPE_SIZE (ICONINFO, 20)
+ TEST_TYPE_ALIGN (ICONINFO, 4)
+ TEST_FIELD_SIZE (ICONINFO, fIcon, 4)
+ TEST_FIELD_ALIGN (ICONINFO, fIcon, 4)
+ TEST_FIELD_OFFSET(ICONINFO, fIcon, 0)
+ TEST_FIELD_SIZE (ICONINFO, xHotspot, 4)
+ TEST_FIELD_ALIGN (ICONINFO, xHotspot, 4)
+ TEST_FIELD_OFFSET(ICONINFO, xHotspot, 4)
+ TEST_FIELD_SIZE (ICONINFO, yHotspot, 4)
+ TEST_FIELD_ALIGN (ICONINFO, yHotspot, 4)
+ TEST_FIELD_OFFSET(ICONINFO, yHotspot, 8)
+ TEST_FIELD_SIZE (ICONINFO, hbmMask, 4)
+ TEST_FIELD_ALIGN (ICONINFO, hbmMask, 4)
+ TEST_FIELD_OFFSET(ICONINFO, hbmMask, 12)
+ TEST_FIELD_SIZE (ICONINFO, hbmColor, 4)
+ TEST_FIELD_ALIGN (ICONINFO, hbmColor, 4)
+ TEST_FIELD_OFFSET(ICONINFO, hbmColor, 16)
}
static void test_pack_ICONMETRICSA(void)
{
/* ICONMETRICSA (pack 4) */
- TEST_TYPE(ICONMETRICSA, 76, 4);
- TEST_FIELD(ICONMETRICSA, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(ICONMETRICSA, int, iHorzSpacing, 4, 4, 4);
- TEST_FIELD(ICONMETRICSA, int, iVertSpacing, 8, 4, 4);
- TEST_FIELD(ICONMETRICSA, int, iTitleWrap, 12, 4, 4);
- TEST_FIELD(ICONMETRICSA, LOGFONTA, lfFont, 16, 60, 4);
+ TEST_TYPE_SIZE (ICONMETRICSA, 76)
+ TEST_TYPE_ALIGN (ICONMETRICSA, 4)
+ TEST_FIELD_SIZE (ICONMETRICSA, cbSize, 4)
+ TEST_FIELD_ALIGN (ICONMETRICSA, cbSize, 4)
+ TEST_FIELD_OFFSET(ICONMETRICSA, cbSize, 0)
+ TEST_FIELD_SIZE (ICONMETRICSA, iHorzSpacing, 4)
+ TEST_FIELD_ALIGN (ICONMETRICSA, iHorzSpacing, 4)
+ TEST_FIELD_OFFSET(ICONMETRICSA, iHorzSpacing, 4)
+ TEST_FIELD_SIZE (ICONMETRICSA, iVertSpacing, 4)
+ TEST_FIELD_ALIGN (ICONMETRICSA, iVertSpacing, 4)
+ TEST_FIELD_OFFSET(ICONMETRICSA, iVertSpacing, 8)
+ TEST_FIELD_SIZE (ICONMETRICSA, iTitleWrap, 4)
+ TEST_FIELD_ALIGN (ICONMETRICSA, iTitleWrap, 4)
+ TEST_FIELD_OFFSET(ICONMETRICSA, iTitleWrap, 12)
+ TEST_FIELD_SIZE (ICONMETRICSA, lfFont, 60)
+ TEST_FIELD_ALIGN (ICONMETRICSA, lfFont, 4)
+ TEST_FIELD_OFFSET(ICONMETRICSA, lfFont, 16)
}
static void test_pack_ICONMETRICSW(void)
{
/* ICONMETRICSW (pack 4) */
- TEST_TYPE(ICONMETRICSW, 108, 4);
- TEST_FIELD(ICONMETRICSW, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(ICONMETRICSW, int, iHorzSpacing, 4, 4, 4);
- TEST_FIELD(ICONMETRICSW, int, iVertSpacing, 8, 4, 4);
- TEST_FIELD(ICONMETRICSW, int, iTitleWrap, 12, 4, 4);
- TEST_FIELD(ICONMETRICSW, LOGFONTW, lfFont, 16, 92, 4);
+ TEST_TYPE_SIZE (ICONMETRICSW, 108)
+ TEST_TYPE_ALIGN (ICONMETRICSW, 4)
+ TEST_FIELD_SIZE (ICONMETRICSW, cbSize, 4)
+ TEST_FIELD_ALIGN (ICONMETRICSW, cbSize, 4)
+ TEST_FIELD_OFFSET(ICONMETRICSW, cbSize, 0)
+ TEST_FIELD_SIZE (ICONMETRICSW, iHorzSpacing, 4)
+ TEST_FIELD_ALIGN (ICONMETRICSW, iHorzSpacing, 4)
+ TEST_FIELD_OFFSET(ICONMETRICSW, iHorzSpacing, 4)
+ TEST_FIELD_SIZE (ICONMETRICSW, iVertSpacing, 4)
+ TEST_FIELD_ALIGN (ICONMETRICSW, iVertSpacing, 4)
+ TEST_FIELD_OFFSET(ICONMETRICSW, iVertSpacing, 8)
+ TEST_FIELD_SIZE (ICONMETRICSW, iTitleWrap, 4)
+ TEST_FIELD_ALIGN (ICONMETRICSW, iTitleWrap, 4)
+ TEST_FIELD_OFFSET(ICONMETRICSW, iTitleWrap, 12)
+ TEST_FIELD_SIZE (ICONMETRICSW, lfFont, 92)
+ TEST_FIELD_ALIGN (ICONMETRICSW, lfFont, 4)
+ TEST_FIELD_OFFSET(ICONMETRICSW, lfFont, 16)
}
static void test_pack_INPUT(void)
{
/* INPUT (pack 4) */
- TEST_FIELD(INPUT, DWORD, type, 0, 4, 4);
+ TEST_FIELD_SIZE (INPUT, type, 4)
+ TEST_FIELD_ALIGN (INPUT, type, 4)
+ TEST_FIELD_OFFSET(INPUT, type, 0)
}
static void test_pack_KBDLLHOOKSTRUCT(void)
{
/* KBDLLHOOKSTRUCT (pack 4) */
- TEST_TYPE(KBDLLHOOKSTRUCT, 20, 4);
- TEST_FIELD(KBDLLHOOKSTRUCT, DWORD, vkCode, 0, 4, 4);
- TEST_FIELD(KBDLLHOOKSTRUCT, DWORD, scanCode, 4, 4, 4);
- TEST_FIELD(KBDLLHOOKSTRUCT, DWORD, flags, 8, 4, 4);
- TEST_FIELD(KBDLLHOOKSTRUCT, DWORD, time, 12, 4, 4);
- TEST_FIELD(KBDLLHOOKSTRUCT, ULONG_PTR, dwExtraInfo, 16, 4, 4);
+ TEST_TYPE_SIZE (KBDLLHOOKSTRUCT, 20)
+ TEST_TYPE_ALIGN (KBDLLHOOKSTRUCT, 4)
+ TEST_FIELD_SIZE (KBDLLHOOKSTRUCT, vkCode, 4)
+ TEST_FIELD_ALIGN (KBDLLHOOKSTRUCT, vkCode, 4)
+ TEST_FIELD_OFFSET(KBDLLHOOKSTRUCT, vkCode, 0)
+ TEST_FIELD_SIZE (KBDLLHOOKSTRUCT, scanCode, 4)
+ TEST_FIELD_ALIGN (KBDLLHOOKSTRUCT, scanCode, 4)
+ TEST_FIELD_OFFSET(KBDLLHOOKSTRUCT, scanCode, 4)
+ TEST_FIELD_SIZE (KBDLLHOOKSTRUCT, flags, 4)
+ TEST_FIELD_ALIGN (KBDLLHOOKSTRUCT, flags, 4)
+ TEST_FIELD_OFFSET(KBDLLHOOKSTRUCT, flags, 8)
+ TEST_FIELD_SIZE (KBDLLHOOKSTRUCT, time, 4)
+ TEST_FIELD_ALIGN (KBDLLHOOKSTRUCT, time, 4)
+ TEST_FIELD_OFFSET(KBDLLHOOKSTRUCT, time, 12)
+ TEST_FIELD_SIZE (KBDLLHOOKSTRUCT, dwExtraInfo, 4)
+ TEST_FIELD_ALIGN (KBDLLHOOKSTRUCT, dwExtraInfo, 4)
+ TEST_FIELD_OFFSET(KBDLLHOOKSTRUCT, dwExtraInfo, 16)
}
static void test_pack_KEYBDINPUT(void)
{
/* KEYBDINPUT (pack 4) */
- TEST_TYPE(KEYBDINPUT, 16, 4);
- TEST_FIELD(KEYBDINPUT, WORD, wVk, 0, 2, 2);
- TEST_FIELD(KEYBDINPUT, WORD, wScan, 2, 2, 2);
- TEST_FIELD(KEYBDINPUT, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(KEYBDINPUT, DWORD, time, 8, 4, 4);
- TEST_FIELD(KEYBDINPUT, ULONG_PTR, dwExtraInfo, 12, 4, 4);
+ TEST_TYPE_SIZE (KEYBDINPUT, 16)
+ TEST_TYPE_ALIGN (KEYBDINPUT, 4)
+ TEST_FIELD_SIZE (KEYBDINPUT, wVk, 2)
+ TEST_FIELD_ALIGN (KEYBDINPUT, wVk, 2)
+ TEST_FIELD_OFFSET(KEYBDINPUT, wVk, 0)
+ TEST_FIELD_SIZE (KEYBDINPUT, wScan, 2)
+ TEST_FIELD_ALIGN (KEYBDINPUT, wScan, 2)
+ TEST_FIELD_OFFSET(KEYBDINPUT, wScan, 2)
+ TEST_FIELD_SIZE (KEYBDINPUT, dwFlags, 4)
+ TEST_FIELD_ALIGN (KEYBDINPUT, dwFlags, 4)
+ TEST_FIELD_OFFSET(KEYBDINPUT, dwFlags, 4)
+ TEST_FIELD_SIZE (KEYBDINPUT, time, 4)
+ TEST_FIELD_ALIGN (KEYBDINPUT, time, 4)
+ TEST_FIELD_OFFSET(KEYBDINPUT, time, 8)
+ TEST_FIELD_SIZE (KEYBDINPUT, dwExtraInfo, 4)
+ TEST_FIELD_ALIGN (KEYBDINPUT, dwExtraInfo, 4)
+ TEST_FIELD_OFFSET(KEYBDINPUT, dwExtraInfo, 12)
}
static void test_pack_LPACCESSTIMEOUT(void)
{
/* LPACCESSTIMEOUT */
- TEST_TYPE(LPACCESSTIMEOUT, 4, 4);
- TEST_TYPE_POINTER(LPACCESSTIMEOUT, 12, 4);
+ TEST_TYPE_SIZE (LPACCESSTIMEOUT, 4)
+ TEST_TYPE_ALIGN (LPACCESSTIMEOUT, 4)
+ TEST_TARGET_SIZE (LPACCESSTIMEOUT, 12)
+ TEST_TARGET_ALIGN(LPACCESSTIMEOUT, 4)
}
static void test_pack_LPANIMATIONINFO(void)
{
/* LPANIMATIONINFO */
- TEST_TYPE(LPANIMATIONINFO, 4, 4);
- TEST_TYPE_POINTER(LPANIMATIONINFO, 8, 4);
+ TEST_TYPE_SIZE (LPANIMATIONINFO, 4)
+ TEST_TYPE_ALIGN (LPANIMATIONINFO, 4)
+ TEST_TARGET_SIZE (LPANIMATIONINFO, 8)
+ TEST_TARGET_ALIGN(LPANIMATIONINFO, 4)
}
static void test_pack_LPCBTACTIVATESTRUCT(void)
{
/* LPCBTACTIVATESTRUCT */
- TEST_TYPE(LPCBTACTIVATESTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPCBTACTIVATESTRUCT, 8, 4);
+ TEST_TYPE_SIZE (LPCBTACTIVATESTRUCT, 4)
+ TEST_TYPE_ALIGN (LPCBTACTIVATESTRUCT, 4)
+ TEST_TARGET_SIZE (LPCBTACTIVATESTRUCT, 8)
+ TEST_TARGET_ALIGN(LPCBTACTIVATESTRUCT, 4)
}
static void test_pack_LPCBT_CREATEWNDA(void)
{
/* LPCBT_CREATEWNDA */
- TEST_TYPE(LPCBT_CREATEWNDA, 4, 4);
- TEST_TYPE_POINTER(LPCBT_CREATEWNDA, 8, 4);
+ TEST_TYPE_SIZE (LPCBT_CREATEWNDA, 4)
+ TEST_TYPE_ALIGN (LPCBT_CREATEWNDA, 4)
+ TEST_TARGET_SIZE (LPCBT_CREATEWNDA, 8)
+ TEST_TARGET_ALIGN(LPCBT_CREATEWNDA, 4)
}
static void test_pack_LPCBT_CREATEWNDW(void)
{
/* LPCBT_CREATEWNDW */
- TEST_TYPE(LPCBT_CREATEWNDW, 4, 4);
- TEST_TYPE_POINTER(LPCBT_CREATEWNDW, 8, 4);
+ TEST_TYPE_SIZE (LPCBT_CREATEWNDW, 4)
+ TEST_TYPE_ALIGN (LPCBT_CREATEWNDW, 4)
+ TEST_TARGET_SIZE (LPCBT_CREATEWNDW, 8)
+ TEST_TARGET_ALIGN(LPCBT_CREATEWNDW, 4)
}
static void test_pack_LPCDLGTEMPLATEA(void)
{
/* LPCDLGTEMPLATEA */
- TEST_TYPE(LPCDLGTEMPLATEA, 4, 4);
- TEST_TYPE_POINTER(LPCDLGTEMPLATEA, 18, 2);
+ TEST_TYPE_SIZE (LPCDLGTEMPLATEA, 4)
+ TEST_TYPE_ALIGN (LPCDLGTEMPLATEA, 4)
+ TEST_TARGET_SIZE (LPCDLGTEMPLATEA, 18)
+ TEST_TARGET_ALIGN(LPCDLGTEMPLATEA, 2)
}
static void test_pack_LPCDLGTEMPLATEW(void)
{
/* LPCDLGTEMPLATEW */
- TEST_TYPE(LPCDLGTEMPLATEW, 4, 4);
- TEST_TYPE_POINTER(LPCDLGTEMPLATEW, 18, 2);
+ TEST_TYPE_SIZE (LPCDLGTEMPLATEW, 4)
+ TEST_TYPE_ALIGN (LPCDLGTEMPLATEW, 4)
+ TEST_TARGET_SIZE (LPCDLGTEMPLATEW, 18)
+ TEST_TARGET_ALIGN(LPCDLGTEMPLATEW, 2)
}
static void test_pack_LPCLIENTCREATESTRUCT(void)
{
/* LPCLIENTCREATESTRUCT */
- TEST_TYPE(LPCLIENTCREATESTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPCLIENTCREATESTRUCT, 8, 4);
+ TEST_TYPE_SIZE (LPCLIENTCREATESTRUCT, 4)
+ TEST_TYPE_ALIGN (LPCLIENTCREATESTRUCT, 4)
+ TEST_TARGET_SIZE (LPCLIENTCREATESTRUCT, 8)
+ TEST_TARGET_ALIGN(LPCLIENTCREATESTRUCT, 4)
}
static void test_pack_LPCMENUINFO(void)
{
/* LPCMENUINFO */
- TEST_TYPE(LPCMENUINFO, 4, 4);
- TEST_TYPE_POINTER(LPCMENUINFO, 28, 4);
+ TEST_TYPE_SIZE (LPCMENUINFO, 4)
+ TEST_TYPE_ALIGN (LPCMENUINFO, 4)
+ TEST_TARGET_SIZE (LPCMENUINFO, 28)
+ TEST_TARGET_ALIGN(LPCMENUINFO, 4)
}
static void test_pack_LPCMENUITEMINFOA(void)
{
/* LPCMENUITEMINFOA */
- TEST_TYPE(LPCMENUITEMINFOA, 4, 4);
- TEST_TYPE_POINTER(LPCMENUITEMINFOA, 48, 4);
+ TEST_TYPE_SIZE (LPCMENUITEMINFOA, 4)
+ TEST_TYPE_ALIGN (LPCMENUITEMINFOA, 4)
+ TEST_TARGET_SIZE (LPCMENUITEMINFOA, 48)
+ TEST_TARGET_ALIGN(LPCMENUITEMINFOA, 4)
}
static void test_pack_LPCMENUITEMINFOW(void)
{
/* LPCMENUITEMINFOW */
- TEST_TYPE(LPCMENUITEMINFOW, 4, 4);
- TEST_TYPE_POINTER(LPCMENUITEMINFOW, 48, 4);
+ TEST_TYPE_SIZE (LPCMENUITEMINFOW, 4)
+ TEST_TYPE_ALIGN (LPCMENUITEMINFOW, 4)
+ TEST_TARGET_SIZE (LPCMENUITEMINFOW, 48)
+ TEST_TARGET_ALIGN(LPCMENUITEMINFOW, 4)
}
static void test_pack_LPCOMBOBOXINFO(void)
{
/* LPCOMBOBOXINFO */
- TEST_TYPE(LPCOMBOBOXINFO, 4, 4);
- TEST_TYPE_POINTER(LPCOMBOBOXINFO, 52, 4);
+ TEST_TYPE_SIZE (LPCOMBOBOXINFO, 4)
+ TEST_TYPE_ALIGN (LPCOMBOBOXINFO, 4)
+ TEST_TARGET_SIZE (LPCOMBOBOXINFO, 52)
+ TEST_TARGET_ALIGN(LPCOMBOBOXINFO, 4)
}
static void test_pack_LPCOMPAREITEMSTRUCT(void)
{
/* LPCOMPAREITEMSTRUCT */
- TEST_TYPE(LPCOMPAREITEMSTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPCOMPAREITEMSTRUCT, 32, 4);
+ TEST_TYPE_SIZE (LPCOMPAREITEMSTRUCT, 4)
+ TEST_TYPE_ALIGN (LPCOMPAREITEMSTRUCT, 4)
+ TEST_TARGET_SIZE (LPCOMPAREITEMSTRUCT, 32)
+ TEST_TARGET_ALIGN(LPCOMPAREITEMSTRUCT, 4)
}
static void test_pack_LPCREATESTRUCTA(void)
{
/* LPCREATESTRUCTA */
- TEST_TYPE(LPCREATESTRUCTA, 4, 4);
- TEST_TYPE_POINTER(LPCREATESTRUCTA, 48, 4);
+ TEST_TYPE_SIZE (LPCREATESTRUCTA, 4)
+ TEST_TYPE_ALIGN (LPCREATESTRUCTA, 4)
+ TEST_TARGET_SIZE (LPCREATESTRUCTA, 48)
+ TEST_TARGET_ALIGN(LPCREATESTRUCTA, 4)
}
static void test_pack_LPCREATESTRUCTW(void)
{
/* LPCREATESTRUCTW */
- TEST_TYPE(LPCREATESTRUCTW, 4, 4);
- TEST_TYPE_POINTER(LPCREATESTRUCTW, 48, 4);
+ TEST_TYPE_SIZE (LPCREATESTRUCTW, 4)
+ TEST_TYPE_ALIGN (LPCREATESTRUCTW, 4)
+ TEST_TARGET_SIZE (LPCREATESTRUCTW, 48)
+ TEST_TARGET_ALIGN(LPCREATESTRUCTW, 4)
}
static void test_pack_LPCSCROLLINFO(void)
{
/* LPCSCROLLINFO */
- TEST_TYPE(LPCSCROLLINFO, 4, 4);
- TEST_TYPE_POINTER(LPCSCROLLINFO, 28, 4);
+ TEST_TYPE_SIZE (LPCSCROLLINFO, 4)
+ TEST_TYPE_ALIGN (LPCSCROLLINFO, 4)
+ TEST_TARGET_SIZE (LPCSCROLLINFO, 28)
+ TEST_TARGET_ALIGN(LPCSCROLLINFO, 4)
}
static void test_pack_LPCURSORINFO(void)
{
/* LPCURSORINFO */
- TEST_TYPE(LPCURSORINFO, 4, 4);
- TEST_TYPE_POINTER(LPCURSORINFO, 20, 4);
+ TEST_TYPE_SIZE (LPCURSORINFO, 4)
+ TEST_TYPE_ALIGN (LPCURSORINFO, 4)
+ TEST_TARGET_SIZE (LPCURSORINFO, 20)
+ TEST_TARGET_ALIGN(LPCURSORINFO, 4)
}
static void test_pack_LPCWPRETSTRUCT(void)
{
/* LPCWPRETSTRUCT */
- TEST_TYPE(LPCWPRETSTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPCWPRETSTRUCT, 20, 4);
+ TEST_TYPE_SIZE (LPCWPRETSTRUCT, 4)
+ TEST_TYPE_ALIGN (LPCWPRETSTRUCT, 4)
+ TEST_TARGET_SIZE (LPCWPRETSTRUCT, 20)
+ TEST_TARGET_ALIGN(LPCWPRETSTRUCT, 4)
}
static void test_pack_LPCWPSTRUCT(void)
{
/* LPCWPSTRUCT */
- TEST_TYPE(LPCWPSTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPCWPSTRUCT, 16, 4);
+ TEST_TYPE_SIZE (LPCWPSTRUCT, 4)
+ TEST_TYPE_ALIGN (LPCWPSTRUCT, 4)
+ TEST_TARGET_SIZE (LPCWPSTRUCT, 16)
+ TEST_TARGET_ALIGN(LPCWPSTRUCT, 4)
}
static void test_pack_LPDEBUGHOOKINFO(void)
{
/* LPDEBUGHOOKINFO */
- TEST_TYPE(LPDEBUGHOOKINFO, 4, 4);
- TEST_TYPE_POINTER(LPDEBUGHOOKINFO, 20, 4);
+ TEST_TYPE_SIZE (LPDEBUGHOOKINFO, 4)
+ TEST_TYPE_ALIGN (LPDEBUGHOOKINFO, 4)
+ TEST_TARGET_SIZE (LPDEBUGHOOKINFO, 20)
+ TEST_TARGET_ALIGN(LPDEBUGHOOKINFO, 4)
}
static void test_pack_LPDELETEITEMSTRUCT(void)
{
/* LPDELETEITEMSTRUCT */
- TEST_TYPE(LPDELETEITEMSTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPDELETEITEMSTRUCT, 20, 4);
+ TEST_TYPE_SIZE (LPDELETEITEMSTRUCT, 4)
+ TEST_TYPE_ALIGN (LPDELETEITEMSTRUCT, 4)
+ TEST_TARGET_SIZE (LPDELETEITEMSTRUCT, 20)
+ TEST_TARGET_ALIGN(LPDELETEITEMSTRUCT, 4)
}
static void test_pack_LPDLGITEMTEMPLATEA(void)
{
/* LPDLGITEMTEMPLATEA */
- TEST_TYPE(LPDLGITEMTEMPLATEA, 4, 4);
- TEST_TYPE_POINTER(LPDLGITEMTEMPLATEA, 18, 2);
+ TEST_TYPE_SIZE (LPDLGITEMTEMPLATEA, 4)
+ TEST_TYPE_ALIGN (LPDLGITEMTEMPLATEA, 4)
+ TEST_TARGET_SIZE (LPDLGITEMTEMPLATEA, 18)
+ TEST_TARGET_ALIGN(LPDLGITEMTEMPLATEA, 2)
}
static void test_pack_LPDLGITEMTEMPLATEW(void)
{
/* LPDLGITEMTEMPLATEW */
- TEST_TYPE(LPDLGITEMTEMPLATEW, 4, 4);
- TEST_TYPE_POINTER(LPDLGITEMTEMPLATEW, 18, 2);
+ TEST_TYPE_SIZE (LPDLGITEMTEMPLATEW, 4)
+ TEST_TYPE_ALIGN (LPDLGITEMTEMPLATEW, 4)
+ TEST_TARGET_SIZE (LPDLGITEMTEMPLATEW, 18)
+ TEST_TARGET_ALIGN(LPDLGITEMTEMPLATEW, 2)
}
static void test_pack_LPDLGTEMPLATEA(void)
{
/* LPDLGTEMPLATEA */
- TEST_TYPE(LPDLGTEMPLATEA, 4, 4);
- TEST_TYPE_POINTER(LPDLGTEMPLATEA, 18, 2);
+ TEST_TYPE_SIZE (LPDLGTEMPLATEA, 4)
+ TEST_TYPE_ALIGN (LPDLGTEMPLATEA, 4)
+ TEST_TARGET_SIZE (LPDLGTEMPLATEA, 18)
+ TEST_TARGET_ALIGN(LPDLGTEMPLATEA, 2)
}
static void test_pack_LPDLGTEMPLATEW(void)
{
/* LPDLGTEMPLATEW */
- TEST_TYPE(LPDLGTEMPLATEW, 4, 4);
- TEST_TYPE_POINTER(LPDLGTEMPLATEW, 18, 2);
+ TEST_TYPE_SIZE (LPDLGTEMPLATEW, 4)
+ TEST_TYPE_ALIGN (LPDLGTEMPLATEW, 4)
+ TEST_TARGET_SIZE (LPDLGTEMPLATEW, 18)
+ TEST_TARGET_ALIGN(LPDLGTEMPLATEW, 2)
}
static void test_pack_LPDRAWITEMSTRUCT(void)
{
/* LPDRAWITEMSTRUCT */
- TEST_TYPE(LPDRAWITEMSTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPDRAWITEMSTRUCT, 48, 4);
+ TEST_TYPE_SIZE (LPDRAWITEMSTRUCT, 4)
+ TEST_TYPE_ALIGN (LPDRAWITEMSTRUCT, 4)
+ TEST_TARGET_SIZE (LPDRAWITEMSTRUCT, 48)
+ TEST_TARGET_ALIGN(LPDRAWITEMSTRUCT, 4)
}
static void test_pack_LPDRAWTEXTPARAMS(void)
{
/* LPDRAWTEXTPARAMS */
- TEST_TYPE(LPDRAWTEXTPARAMS, 4, 4);
- TEST_TYPE_POINTER(LPDRAWTEXTPARAMS, 20, 4);
+ TEST_TYPE_SIZE (LPDRAWTEXTPARAMS, 4)
+ TEST_TYPE_ALIGN (LPDRAWTEXTPARAMS, 4)
+ TEST_TARGET_SIZE (LPDRAWTEXTPARAMS, 20)
+ TEST_TARGET_ALIGN(LPDRAWTEXTPARAMS, 4)
}
static void test_pack_LPEVENTMSG(void)
{
/* LPEVENTMSG */
- TEST_TYPE(LPEVENTMSG, 4, 4);
- TEST_TYPE_POINTER(LPEVENTMSG, 20, 4);
+ TEST_TYPE_SIZE (LPEVENTMSG, 4)
+ TEST_TYPE_ALIGN (LPEVENTMSG, 4)
+ TEST_TARGET_SIZE (LPEVENTMSG, 20)
+ TEST_TARGET_ALIGN(LPEVENTMSG, 4)
}
static void test_pack_LPFILTERKEYS(void)
{
/* LPFILTERKEYS */
- TEST_TYPE(LPFILTERKEYS, 4, 4);
- TEST_TYPE_POINTER(LPFILTERKEYS, 24, 4);
+ TEST_TYPE_SIZE (LPFILTERKEYS, 4)
+ TEST_TYPE_ALIGN (LPFILTERKEYS, 4)
+ TEST_TARGET_SIZE (LPFILTERKEYS, 24)
+ TEST_TARGET_ALIGN(LPFILTERKEYS, 4)
}
static void test_pack_LPGUITHREADINFO(void)
{
/* LPGUITHREADINFO */
- TEST_TYPE(LPGUITHREADINFO, 4, 4);
- TEST_TYPE_POINTER(LPGUITHREADINFO, 48, 4);
+ TEST_TYPE_SIZE (LPGUITHREADINFO, 4)
+ TEST_TYPE_ALIGN (LPGUITHREADINFO, 4)
+ TEST_TARGET_SIZE (LPGUITHREADINFO, 48)
+ TEST_TARGET_ALIGN(LPGUITHREADINFO, 4)
}
static void test_pack_LPHARDWAREHOOKSTRUCT(void)
{
/* LPHARDWAREHOOKSTRUCT */
- TEST_TYPE(LPHARDWAREHOOKSTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPHARDWAREHOOKSTRUCT, 16, 4);
+ TEST_TYPE_SIZE (LPHARDWAREHOOKSTRUCT, 4)
+ TEST_TYPE_ALIGN (LPHARDWAREHOOKSTRUCT, 4)
+ TEST_TARGET_SIZE (LPHARDWAREHOOKSTRUCT, 16)
+ TEST_TARGET_ALIGN(LPHARDWAREHOOKSTRUCT, 4)
}
static void test_pack_LPHARDWAREINPUT(void)
{
/* LPHARDWAREINPUT */
- TEST_TYPE(LPHARDWAREINPUT, 4, 4);
- TEST_TYPE_POINTER(LPHARDWAREINPUT, 8, 4);
+ TEST_TYPE_SIZE (LPHARDWAREINPUT, 4)
+ TEST_TYPE_ALIGN (LPHARDWAREINPUT, 4)
+ TEST_TARGET_SIZE (LPHARDWAREINPUT, 8)
+ TEST_TARGET_ALIGN(LPHARDWAREINPUT, 4)
}
static void test_pack_LPHELPINFO(void)
{
/* LPHELPINFO */
- TEST_TYPE(LPHELPINFO, 4, 4);
- TEST_TYPE_POINTER(LPHELPINFO, 28, 4);
+ TEST_TYPE_SIZE (LPHELPINFO, 4)
+ TEST_TYPE_ALIGN (LPHELPINFO, 4)
+ TEST_TARGET_SIZE (LPHELPINFO, 28)
+ TEST_TARGET_ALIGN(LPHELPINFO, 4)
}
static void test_pack_LPHELPWININFOA(void)
{
/* LPHELPWININFOA */
- TEST_TYPE(LPHELPWININFOA, 4, 4);
- TEST_TYPE_POINTER(LPHELPWININFOA, 28, 4);
+ TEST_TYPE_SIZE (LPHELPWININFOA, 4)
+ TEST_TYPE_ALIGN (LPHELPWININFOA, 4)
+ TEST_TARGET_SIZE (LPHELPWININFOA, 28)
+ TEST_TARGET_ALIGN(LPHELPWININFOA, 4)
}
static void test_pack_LPHELPWININFOW(void)
{
/* LPHELPWININFOW */
- TEST_TYPE(LPHELPWININFOW, 4, 4);
- TEST_TYPE_POINTER(LPHELPWININFOW, 28, 4);
+ TEST_TYPE_SIZE (LPHELPWININFOW, 4)
+ TEST_TYPE_ALIGN (LPHELPWININFOW, 4)
+ TEST_TARGET_SIZE (LPHELPWININFOW, 28)
+ TEST_TARGET_ALIGN(LPHELPWININFOW, 4)
}
static void test_pack_LPHIGHCONTRASTA(void)
{
/* LPHIGHCONTRASTA */
- TEST_TYPE(LPHIGHCONTRASTA, 4, 4);
- TEST_TYPE_POINTER(LPHIGHCONTRASTA, 12, 4);
+ TEST_TYPE_SIZE (LPHIGHCONTRASTA, 4)
+ TEST_TYPE_ALIGN (LPHIGHCONTRASTA, 4)
+ TEST_TARGET_SIZE (LPHIGHCONTRASTA, 12)
+ TEST_TARGET_ALIGN(LPHIGHCONTRASTA, 4)
}
static void test_pack_LPHIGHCONTRASTW(void)
{
/* LPHIGHCONTRASTW */
- TEST_TYPE(LPHIGHCONTRASTW, 4, 4);
- TEST_TYPE_POINTER(LPHIGHCONTRASTW, 12, 4);
+ TEST_TYPE_SIZE (LPHIGHCONTRASTW, 4)
+ TEST_TYPE_ALIGN (LPHIGHCONTRASTW, 4)
+ TEST_TARGET_SIZE (LPHIGHCONTRASTW, 12)
+ TEST_TARGET_ALIGN(LPHIGHCONTRASTW, 4)
}
static void test_pack_LPICONMETRICSA(void)
{
/* LPICONMETRICSA */
- TEST_TYPE(LPICONMETRICSA, 4, 4);
- TEST_TYPE_POINTER(LPICONMETRICSA, 76, 4);
+ TEST_TYPE_SIZE (LPICONMETRICSA, 4)
+ TEST_TYPE_ALIGN (LPICONMETRICSA, 4)
+ TEST_TARGET_SIZE (LPICONMETRICSA, 76)
+ TEST_TARGET_ALIGN(LPICONMETRICSA, 4)
}
static void test_pack_LPICONMETRICSW(void)
{
/* LPICONMETRICSW */
- TEST_TYPE(LPICONMETRICSW, 4, 4);
- TEST_TYPE_POINTER(LPICONMETRICSW, 108, 4);
+ TEST_TYPE_SIZE (LPICONMETRICSW, 4)
+ TEST_TYPE_ALIGN (LPICONMETRICSW, 4)
+ TEST_TARGET_SIZE (LPICONMETRICSW, 108)
+ TEST_TARGET_ALIGN(LPICONMETRICSW, 4)
}
static void test_pack_LPINPUT(void)
{
/* LPINPUT */
- TEST_TYPE(LPINPUT, 4, 4);
+ TEST_TYPE_SIZE (LPINPUT, 4)
+ TEST_TYPE_ALIGN (LPINPUT, 4)
}
static void test_pack_LPKBDLLHOOKSTRUCT(void)
{
/* LPKBDLLHOOKSTRUCT */
- TEST_TYPE(LPKBDLLHOOKSTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPKBDLLHOOKSTRUCT, 20, 4);
+ TEST_TYPE_SIZE (LPKBDLLHOOKSTRUCT, 4)
+ TEST_TYPE_ALIGN (LPKBDLLHOOKSTRUCT, 4)
+ TEST_TARGET_SIZE (LPKBDLLHOOKSTRUCT, 20)
+ TEST_TARGET_ALIGN(LPKBDLLHOOKSTRUCT, 4)
}
static void test_pack_LPKEYBDINPUT(void)
{
/* LPKEYBDINPUT */
- TEST_TYPE(LPKEYBDINPUT, 4, 4);
- TEST_TYPE_POINTER(LPKEYBDINPUT, 16, 4);
+ TEST_TYPE_SIZE (LPKEYBDINPUT, 4)
+ TEST_TYPE_ALIGN (LPKEYBDINPUT, 4)
+ TEST_TARGET_SIZE (LPKEYBDINPUT, 16)
+ TEST_TARGET_ALIGN(LPKEYBDINPUT, 4)
}
static void test_pack_LPMDICREATESTRUCTA(void)
{
/* LPMDICREATESTRUCTA */
- TEST_TYPE(LPMDICREATESTRUCTA, 4, 4);
- TEST_TYPE_POINTER(LPMDICREATESTRUCTA, 36, 4);
+ TEST_TYPE_SIZE (LPMDICREATESTRUCTA, 4)
+ TEST_TYPE_ALIGN (LPMDICREATESTRUCTA, 4)
+ TEST_TARGET_SIZE (LPMDICREATESTRUCTA, 36)
+ TEST_TARGET_ALIGN(LPMDICREATESTRUCTA, 4)
}
static void test_pack_LPMDICREATESTRUCTW(void)
{
/* LPMDICREATESTRUCTW */
- TEST_TYPE(LPMDICREATESTRUCTW, 4, 4);
- TEST_TYPE_POINTER(LPMDICREATESTRUCTW, 36, 4);
+ TEST_TYPE_SIZE (LPMDICREATESTRUCTW, 4)
+ TEST_TYPE_ALIGN (LPMDICREATESTRUCTW, 4)
+ TEST_TARGET_SIZE (LPMDICREATESTRUCTW, 36)
+ TEST_TARGET_ALIGN(LPMDICREATESTRUCTW, 4)
}
static void test_pack_LPMDINEXTMENU(void)
{
/* LPMDINEXTMENU */
- TEST_TYPE(LPMDINEXTMENU, 4, 4);
- TEST_TYPE_POINTER(LPMDINEXTMENU, 12, 4);
+ TEST_TYPE_SIZE (LPMDINEXTMENU, 4)
+ TEST_TYPE_ALIGN (LPMDINEXTMENU, 4)
+ TEST_TARGET_SIZE (LPMDINEXTMENU, 12)
+ TEST_TARGET_ALIGN(LPMDINEXTMENU, 4)
}
static void test_pack_LPMEASUREITEMSTRUCT(void)
{
/* LPMEASUREITEMSTRUCT */
- TEST_TYPE(LPMEASUREITEMSTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPMEASUREITEMSTRUCT, 24, 4);
+ TEST_TYPE_SIZE (LPMEASUREITEMSTRUCT, 4)
+ TEST_TYPE_ALIGN (LPMEASUREITEMSTRUCT, 4)
+ TEST_TARGET_SIZE (LPMEASUREITEMSTRUCT, 24)
+ TEST_TARGET_ALIGN(LPMEASUREITEMSTRUCT, 4)
}
static void test_pack_LPMENUINFO(void)
{
/* LPMENUINFO */
- TEST_TYPE(LPMENUINFO, 4, 4);
- TEST_TYPE_POINTER(LPMENUINFO, 28, 4);
+ TEST_TYPE_SIZE (LPMENUINFO, 4)
+ TEST_TYPE_ALIGN (LPMENUINFO, 4)
+ TEST_TARGET_SIZE (LPMENUINFO, 28)
+ TEST_TARGET_ALIGN(LPMENUINFO, 4)
}
static void test_pack_LPMENUITEMINFOA(void)
{
/* LPMENUITEMINFOA */
- TEST_TYPE(LPMENUITEMINFOA, 4, 4);
- TEST_TYPE_POINTER(LPMENUITEMINFOA, 48, 4);
+ TEST_TYPE_SIZE (LPMENUITEMINFOA, 4)
+ TEST_TYPE_ALIGN (LPMENUITEMINFOA, 4)
+ TEST_TARGET_SIZE (LPMENUITEMINFOA, 48)
+ TEST_TARGET_ALIGN(LPMENUITEMINFOA, 4)
}
static void test_pack_LPMENUITEMINFOW(void)
{
/* LPMENUITEMINFOW */
- TEST_TYPE(LPMENUITEMINFOW, 4, 4);
- TEST_TYPE_POINTER(LPMENUITEMINFOW, 48, 4);
+ TEST_TYPE_SIZE (LPMENUITEMINFOW, 4)
+ TEST_TYPE_ALIGN (LPMENUITEMINFOW, 4)
+ TEST_TARGET_SIZE (LPMENUITEMINFOW, 48)
+ TEST_TARGET_ALIGN(LPMENUITEMINFOW, 4)
}
static void test_pack_LPMINIMIZEDMETRICS(void)
{
/* LPMINIMIZEDMETRICS */
- TEST_TYPE(LPMINIMIZEDMETRICS, 4, 4);
- TEST_TYPE_POINTER(LPMINIMIZEDMETRICS, 20, 4);
+ TEST_TYPE_SIZE (LPMINIMIZEDMETRICS, 4)
+ TEST_TYPE_ALIGN (LPMINIMIZEDMETRICS, 4)
+ TEST_TARGET_SIZE (LPMINIMIZEDMETRICS, 20)
+ TEST_TARGET_ALIGN(LPMINIMIZEDMETRICS, 4)
}
static void test_pack_LPMINMAXINFO(void)
{
/* LPMINMAXINFO */
- TEST_TYPE(LPMINMAXINFO, 4, 4);
- TEST_TYPE_POINTER(LPMINMAXINFO, 40, 4);
+ TEST_TYPE_SIZE (LPMINMAXINFO, 4)
+ TEST_TYPE_ALIGN (LPMINMAXINFO, 4)
+ TEST_TARGET_SIZE (LPMINMAXINFO, 40)
+ TEST_TARGET_ALIGN(LPMINMAXINFO, 4)
}
static void test_pack_LPMONITORINFO(void)
{
/* LPMONITORINFO */
- TEST_TYPE(LPMONITORINFO, 4, 4);
- TEST_TYPE_POINTER(LPMONITORINFO, 40, 4);
+ TEST_TYPE_SIZE (LPMONITORINFO, 4)
+ TEST_TYPE_ALIGN (LPMONITORINFO, 4)
+ TEST_TARGET_SIZE (LPMONITORINFO, 40)
+ TEST_TARGET_ALIGN(LPMONITORINFO, 4)
}
static void test_pack_LPMONITORINFOEXA(void)
{
/* LPMONITORINFOEXA */
- TEST_TYPE(LPMONITORINFOEXA, 4, 4);
- TEST_TYPE_POINTER(LPMONITORINFOEXA, 72, 4);
+ TEST_TYPE_SIZE (LPMONITORINFOEXA, 4)
+ TEST_TYPE_ALIGN (LPMONITORINFOEXA, 4)
+ TEST_TARGET_SIZE (LPMONITORINFOEXA, 72)
+ TEST_TARGET_ALIGN(LPMONITORINFOEXA, 4)
}
static void test_pack_LPMONITORINFOEXW(void)
{
/* LPMONITORINFOEXW */
- TEST_TYPE(LPMONITORINFOEXW, 4, 4);
- TEST_TYPE_POINTER(LPMONITORINFOEXW, 104, 4);
+ TEST_TYPE_SIZE (LPMONITORINFOEXW, 4)
+ TEST_TYPE_ALIGN (LPMONITORINFOEXW, 4)
+ TEST_TARGET_SIZE (LPMONITORINFOEXW, 104)
+ TEST_TARGET_ALIGN(LPMONITORINFOEXW, 4)
}
static void test_pack_LPMOUSEHOOKSTRUCT(void)
{
/* LPMOUSEHOOKSTRUCT */
- TEST_TYPE(LPMOUSEHOOKSTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPMOUSEHOOKSTRUCT, 20, 4);
+ TEST_TYPE_SIZE (LPMOUSEHOOKSTRUCT, 4)
+ TEST_TYPE_ALIGN (LPMOUSEHOOKSTRUCT, 4)
+ TEST_TARGET_SIZE (LPMOUSEHOOKSTRUCT, 20)
+ TEST_TARGET_ALIGN(LPMOUSEHOOKSTRUCT, 4)
}
static void test_pack_LPMOUSEINPUT(void)
{
/* LPMOUSEINPUT */
- TEST_TYPE(LPMOUSEINPUT, 4, 4);
- TEST_TYPE_POINTER(LPMOUSEINPUT, 24, 4);
+ TEST_TYPE_SIZE (LPMOUSEINPUT, 4)
+ TEST_TYPE_ALIGN (LPMOUSEINPUT, 4)
+ TEST_TARGET_SIZE (LPMOUSEINPUT, 24)
+ TEST_TARGET_ALIGN(LPMOUSEINPUT, 4)
}
static void test_pack_LPMOUSEKEYS(void)
{
/* LPMOUSEKEYS */
- TEST_TYPE(LPMOUSEKEYS, 4, 4);
- TEST_TYPE_POINTER(LPMOUSEKEYS, 28, 4);
+ TEST_TYPE_SIZE (LPMOUSEKEYS, 4)
+ TEST_TYPE_ALIGN (LPMOUSEKEYS, 4)
+ TEST_TARGET_SIZE (LPMOUSEKEYS, 28)
+ TEST_TARGET_ALIGN(LPMOUSEKEYS, 4)
}
static void test_pack_LPMSG(void)
{
/* LPMSG */
- TEST_TYPE(LPMSG, 4, 4);
- TEST_TYPE_POINTER(LPMSG, 28, 4);
+ TEST_TYPE_SIZE (LPMSG, 4)
+ TEST_TYPE_ALIGN (LPMSG, 4)
+ TEST_TARGET_SIZE (LPMSG, 28)
+ TEST_TARGET_ALIGN(LPMSG, 4)
}
static void test_pack_LPMSGBOXPARAMSA(void)
{
/* LPMSGBOXPARAMSA */
- TEST_TYPE(LPMSGBOXPARAMSA, 4, 4);
- TEST_TYPE_POINTER(LPMSGBOXPARAMSA, 40, 4);
+ TEST_TYPE_SIZE (LPMSGBOXPARAMSA, 4)
+ TEST_TYPE_ALIGN (LPMSGBOXPARAMSA, 4)
+ TEST_TARGET_SIZE (LPMSGBOXPARAMSA, 40)
+ TEST_TARGET_ALIGN(LPMSGBOXPARAMSA, 4)
}
static void test_pack_LPMSGBOXPARAMSW(void)
{
/* LPMSGBOXPARAMSW */
- TEST_TYPE(LPMSGBOXPARAMSW, 4, 4);
- TEST_TYPE_POINTER(LPMSGBOXPARAMSW, 40, 4);
+ TEST_TYPE_SIZE (LPMSGBOXPARAMSW, 4)
+ TEST_TYPE_ALIGN (LPMSGBOXPARAMSW, 4)
+ TEST_TARGET_SIZE (LPMSGBOXPARAMSW, 40)
+ TEST_TARGET_ALIGN(LPMSGBOXPARAMSW, 4)
}
static void test_pack_LPMSLLHOOKSTRUCT(void)
{
/* LPMSLLHOOKSTRUCT */
- TEST_TYPE(LPMSLLHOOKSTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPMSLLHOOKSTRUCT, 24, 4);
+ TEST_TYPE_SIZE (LPMSLLHOOKSTRUCT, 4)
+ TEST_TYPE_ALIGN (LPMSLLHOOKSTRUCT, 4)
+ TEST_TARGET_SIZE (LPMSLLHOOKSTRUCT, 24)
+ TEST_TARGET_ALIGN(LPMSLLHOOKSTRUCT, 4)
}
static void test_pack_LPMULTIKEYHELPA(void)
{
/* LPMULTIKEYHELPA */
- TEST_TYPE(LPMULTIKEYHELPA, 4, 4);
- TEST_TYPE_POINTER(LPMULTIKEYHELPA, 8, 4);
+ TEST_TYPE_SIZE (LPMULTIKEYHELPA, 4)
+ TEST_TYPE_ALIGN (LPMULTIKEYHELPA, 4)
+ TEST_TARGET_SIZE (LPMULTIKEYHELPA, 8)
+ TEST_TARGET_ALIGN(LPMULTIKEYHELPA, 4)
}
static void test_pack_LPMULTIKEYHELPW(void)
{
/* LPMULTIKEYHELPW */
- TEST_TYPE(LPMULTIKEYHELPW, 4, 4);
- TEST_TYPE_POINTER(LPMULTIKEYHELPW, 8, 4);
+ TEST_TYPE_SIZE (LPMULTIKEYHELPW, 4)
+ TEST_TYPE_ALIGN (LPMULTIKEYHELPW, 4)
+ TEST_TARGET_SIZE (LPMULTIKEYHELPW, 8)
+ TEST_TARGET_ALIGN(LPMULTIKEYHELPW, 4)
}
static void test_pack_LPNCCALCSIZE_PARAMS(void)
{
/* LPNCCALCSIZE_PARAMS */
- TEST_TYPE(LPNCCALCSIZE_PARAMS, 4, 4);
- TEST_TYPE_POINTER(LPNCCALCSIZE_PARAMS, 52, 4);
+ TEST_TYPE_SIZE (LPNCCALCSIZE_PARAMS, 4)
+ TEST_TYPE_ALIGN (LPNCCALCSIZE_PARAMS, 4)
+ TEST_TARGET_SIZE (LPNCCALCSIZE_PARAMS, 52)
+ TEST_TARGET_ALIGN(LPNCCALCSIZE_PARAMS, 4)
}
static void test_pack_LPNMHDR(void)
{
/* LPNMHDR */
- TEST_TYPE(LPNMHDR, 4, 4);
- TEST_TYPE_POINTER(LPNMHDR, 12, 4);
+ TEST_TYPE_SIZE (LPNMHDR, 4)
+ TEST_TYPE_ALIGN (LPNMHDR, 4)
+ TEST_TARGET_SIZE (LPNMHDR, 12)
+ TEST_TARGET_ALIGN(LPNMHDR, 4)
}
static void test_pack_LPNONCLIENTMETRICSA(void)
{
/* LPNONCLIENTMETRICSA */
- TEST_TYPE(LPNONCLIENTMETRICSA, 4, 4);
- TEST_TYPE_POINTER(LPNONCLIENTMETRICSA, 340, 4);
+ TEST_TYPE_SIZE (LPNONCLIENTMETRICSA, 4)
+ TEST_TYPE_ALIGN (LPNONCLIENTMETRICSA, 4)
+ TEST_TARGET_SIZE (LPNONCLIENTMETRICSA, 340)
+ TEST_TARGET_ALIGN(LPNONCLIENTMETRICSA, 4)
}
static void test_pack_LPNONCLIENTMETRICSW(void)
{
/* LPNONCLIENTMETRICSW */
- TEST_TYPE(LPNONCLIENTMETRICSW, 4, 4);
- TEST_TYPE_POINTER(LPNONCLIENTMETRICSW, 500, 4);
+ TEST_TYPE_SIZE (LPNONCLIENTMETRICSW, 4)
+ TEST_TYPE_ALIGN (LPNONCLIENTMETRICSW, 4)
+ TEST_TARGET_SIZE (LPNONCLIENTMETRICSW, 500)
+ TEST_TARGET_ALIGN(LPNONCLIENTMETRICSW, 4)
}
static void test_pack_LPPAINTSTRUCT(void)
{
/* LPPAINTSTRUCT */
- TEST_TYPE(LPPAINTSTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPPAINTSTRUCT, 64, 4);
+ TEST_TYPE_SIZE (LPPAINTSTRUCT, 4)
+ TEST_TYPE_ALIGN (LPPAINTSTRUCT, 4)
+ TEST_TARGET_SIZE (LPPAINTSTRUCT, 64)
+ TEST_TARGET_ALIGN(LPPAINTSTRUCT, 4)
}
static void test_pack_LPSCROLLINFO(void)
{
/* LPSCROLLINFO */
- TEST_TYPE(LPSCROLLINFO, 4, 4);
- TEST_TYPE_POINTER(LPSCROLLINFO, 28, 4);
+ TEST_TYPE_SIZE (LPSCROLLINFO, 4)
+ TEST_TYPE_ALIGN (LPSCROLLINFO, 4)
+ TEST_TARGET_SIZE (LPSCROLLINFO, 28)
+ TEST_TARGET_ALIGN(LPSCROLLINFO, 4)
}
static void test_pack_LPSERIALKEYSA(void)
{
/* LPSERIALKEYSA */
- TEST_TYPE(LPSERIALKEYSA, 4, 4);
- TEST_TYPE_POINTER(LPSERIALKEYSA, 28, 4);
+ TEST_TYPE_SIZE (LPSERIALKEYSA, 4)
+ TEST_TYPE_ALIGN (LPSERIALKEYSA, 4)
+ TEST_TARGET_SIZE (LPSERIALKEYSA, 28)
+ TEST_TARGET_ALIGN(LPSERIALKEYSA, 4)
}
static void test_pack_LPSERIALKEYSW(void)
{
/* LPSERIALKEYSW */
- TEST_TYPE(LPSERIALKEYSW, 4, 4);
- TEST_TYPE_POINTER(LPSERIALKEYSW, 28, 4);
+ TEST_TYPE_SIZE (LPSERIALKEYSW, 4)
+ TEST_TYPE_ALIGN (LPSERIALKEYSW, 4)
+ TEST_TARGET_SIZE (LPSERIALKEYSW, 28)
+ TEST_TARGET_ALIGN(LPSERIALKEYSW, 4)
}
static void test_pack_LPSOUNDSENTRYA(void)
{
/* LPSOUNDSENTRYA */
- TEST_TYPE(LPSOUNDSENTRYA, 4, 4);
- TEST_TYPE_POINTER(LPSOUNDSENTRYA, 48, 4);
+ TEST_TYPE_SIZE (LPSOUNDSENTRYA, 4)
+ TEST_TYPE_ALIGN (LPSOUNDSENTRYA, 4)
+ TEST_TARGET_SIZE (LPSOUNDSENTRYA, 48)
+ TEST_TARGET_ALIGN(LPSOUNDSENTRYA, 4)
}
static void test_pack_LPSOUNDSENTRYW(void)
{
/* LPSOUNDSENTRYW */
- TEST_TYPE(LPSOUNDSENTRYW, 4, 4);
- TEST_TYPE_POINTER(LPSOUNDSENTRYW, 48, 4);
+ TEST_TYPE_SIZE (LPSOUNDSENTRYW, 4)
+ TEST_TYPE_ALIGN (LPSOUNDSENTRYW, 4)
+ TEST_TARGET_SIZE (LPSOUNDSENTRYW, 48)
+ TEST_TARGET_ALIGN(LPSOUNDSENTRYW, 4)
}
static void test_pack_LPSTICKYKEYS(void)
{
/* LPSTICKYKEYS */
- TEST_TYPE(LPSTICKYKEYS, 4, 4);
- TEST_TYPE_POINTER(LPSTICKYKEYS, 8, 4);
+ TEST_TYPE_SIZE (LPSTICKYKEYS, 4)
+ TEST_TYPE_ALIGN (LPSTICKYKEYS, 4)
+ TEST_TARGET_SIZE (LPSTICKYKEYS, 8)
+ TEST_TARGET_ALIGN(LPSTICKYKEYS, 4)
}
static void test_pack_LPSTYLESTRUCT(void)
{
/* LPSTYLESTRUCT */
- TEST_TYPE(LPSTYLESTRUCT, 4, 4);
- TEST_TYPE_POINTER(LPSTYLESTRUCT, 8, 4);
+ TEST_TYPE_SIZE (LPSTYLESTRUCT, 4)
+ TEST_TYPE_ALIGN (LPSTYLESTRUCT, 4)
+ TEST_TARGET_SIZE (LPSTYLESTRUCT, 8)
+ TEST_TARGET_ALIGN(LPSTYLESTRUCT, 4)
}
static void test_pack_LPTITLEBARINFO(void)
{
/* LPTITLEBARINFO */
- TEST_TYPE(LPTITLEBARINFO, 4, 4);
- TEST_TYPE_POINTER(LPTITLEBARINFO, 44, 4);
+ TEST_TYPE_SIZE (LPTITLEBARINFO, 4)
+ TEST_TYPE_ALIGN (LPTITLEBARINFO, 4)
+ TEST_TARGET_SIZE (LPTITLEBARINFO, 44)
+ TEST_TARGET_ALIGN(LPTITLEBARINFO, 4)
}
static void test_pack_LPTOGGLEKEYS(void)
{
/* LPTOGGLEKEYS */
- TEST_TYPE(LPTOGGLEKEYS, 4, 4);
- TEST_TYPE_POINTER(LPTOGGLEKEYS, 8, 4);
+ TEST_TYPE_SIZE (LPTOGGLEKEYS, 4)
+ TEST_TYPE_ALIGN (LPTOGGLEKEYS, 4)
+ TEST_TARGET_SIZE (LPTOGGLEKEYS, 8)
+ TEST_TARGET_ALIGN(LPTOGGLEKEYS, 4)
}
static void test_pack_LPTPMPARAMS(void)
{
/* LPTPMPARAMS */
- TEST_TYPE(LPTPMPARAMS, 4, 4);
- TEST_TYPE_POINTER(LPTPMPARAMS, 20, 4);
+ TEST_TYPE_SIZE (LPTPMPARAMS, 4)
+ TEST_TYPE_ALIGN (LPTPMPARAMS, 4)
+ TEST_TARGET_SIZE (LPTPMPARAMS, 20)
+ TEST_TARGET_ALIGN(LPTPMPARAMS, 4)
}
static void test_pack_LPTRACKMOUSEEVENT(void)
{
/* LPTRACKMOUSEEVENT */
- TEST_TYPE(LPTRACKMOUSEEVENT, 4, 4);
- TEST_TYPE_POINTER(LPTRACKMOUSEEVENT, 16, 4);
+ TEST_TYPE_SIZE (LPTRACKMOUSEEVENT, 4)
+ TEST_TYPE_ALIGN (LPTRACKMOUSEEVENT, 4)
+ TEST_TARGET_SIZE (LPTRACKMOUSEEVENT, 16)
+ TEST_TARGET_ALIGN(LPTRACKMOUSEEVENT, 4)
}
static void test_pack_LPWINDOWINFO(void)
{
/* LPWINDOWINFO */
- TEST_TYPE(LPWINDOWINFO, 4, 4);
- TEST_TYPE_POINTER(LPWINDOWINFO, 60, 4);
+ TEST_TYPE_SIZE (LPWINDOWINFO, 4)
+ TEST_TYPE_ALIGN (LPWINDOWINFO, 4)
+ TEST_TARGET_SIZE (LPWINDOWINFO, 60)
+ TEST_TARGET_ALIGN(LPWINDOWINFO, 4)
}
static void test_pack_LPWINDOWPLACEMENT(void)
{
/* LPWINDOWPLACEMENT */
- TEST_TYPE(LPWINDOWPLACEMENT, 4, 4);
- TEST_TYPE_POINTER(LPWINDOWPLACEMENT, 44, 4);
+ TEST_TYPE_SIZE (LPWINDOWPLACEMENT, 4)
+ TEST_TYPE_ALIGN (LPWINDOWPLACEMENT, 4)
+ TEST_TARGET_SIZE (LPWINDOWPLACEMENT, 44)
+ TEST_TARGET_ALIGN(LPWINDOWPLACEMENT, 4)
}
static void test_pack_LPWINDOWPOS(void)
{
/* LPWINDOWPOS */
- TEST_TYPE(LPWINDOWPOS, 4, 4);
- TEST_TYPE_POINTER(LPWINDOWPOS, 28, 4);
+ TEST_TYPE_SIZE (LPWINDOWPOS, 4)
+ TEST_TYPE_ALIGN (LPWINDOWPOS, 4)
+ TEST_TARGET_SIZE (LPWINDOWPOS, 28)
+ TEST_TARGET_ALIGN(LPWINDOWPOS, 4)
}
static void test_pack_LPWNDCLASSA(void)
{
/* LPWNDCLASSA */
- TEST_TYPE(LPWNDCLASSA, 4, 4);
- TEST_TYPE_POINTER(LPWNDCLASSA, 40, 4);
+ TEST_TYPE_SIZE (LPWNDCLASSA, 4)
+ TEST_TYPE_ALIGN (LPWNDCLASSA, 4)
+ TEST_TARGET_SIZE (LPWNDCLASSA, 40)
+ TEST_TARGET_ALIGN(LPWNDCLASSA, 4)
}
static void test_pack_LPWNDCLASSEXA(void)
{
/* LPWNDCLASSEXA */
- TEST_TYPE(LPWNDCLASSEXA, 4, 4);
- TEST_TYPE_POINTER(LPWNDCLASSEXA, 48, 4);
+ TEST_TYPE_SIZE (LPWNDCLASSEXA, 4)
+ TEST_TYPE_ALIGN (LPWNDCLASSEXA, 4)
+ TEST_TARGET_SIZE (LPWNDCLASSEXA, 48)
+ TEST_TARGET_ALIGN(LPWNDCLASSEXA, 4)
}
static void test_pack_LPWNDCLASSEXW(void)
{
/* LPWNDCLASSEXW */
- TEST_TYPE(LPWNDCLASSEXW, 4, 4);
- TEST_TYPE_POINTER(LPWNDCLASSEXW, 48, 4);
+ TEST_TYPE_SIZE (LPWNDCLASSEXW, 4)
+ TEST_TYPE_ALIGN (LPWNDCLASSEXW, 4)
+ TEST_TARGET_SIZE (LPWNDCLASSEXW, 48)
+ TEST_TARGET_ALIGN(LPWNDCLASSEXW, 4)
}
static void test_pack_LPWNDCLASSW(void)
{
/* LPWNDCLASSW */
- TEST_TYPE(LPWNDCLASSW, 4, 4);
- TEST_TYPE_POINTER(LPWNDCLASSW, 40, 4);
+ TEST_TYPE_SIZE (LPWNDCLASSW, 4)
+ TEST_TYPE_ALIGN (LPWNDCLASSW, 4)
+ TEST_TARGET_SIZE (LPWNDCLASSW, 40)
+ TEST_TARGET_ALIGN(LPWNDCLASSW, 4)
}
static void test_pack_MDICREATESTRUCTA(void)
{
/* MDICREATESTRUCTA (pack 4) */
- TEST_TYPE(MDICREATESTRUCTA, 36, 4);
- TEST_FIELD(MDICREATESTRUCTA, LPCSTR, szClass, 0, 4, 4);
- TEST_FIELD(MDICREATESTRUCTA, LPCSTR, szTitle, 4, 4, 4);
- TEST_FIELD(MDICREATESTRUCTA, HINSTANCE, hOwner, 8, 4, 4);
- TEST_FIELD(MDICREATESTRUCTA, INT, x, 12, 4, 4);
- TEST_FIELD(MDICREATESTRUCTA, INT, y, 16, 4, 4);
- TEST_FIELD(MDICREATESTRUCTA, INT, cx, 20, 4, 4);
- TEST_FIELD(MDICREATESTRUCTA, INT, cy, 24, 4, 4);
- TEST_FIELD(MDICREATESTRUCTA, DWORD, style, 28, 4, 4);
- TEST_FIELD(MDICREATESTRUCTA, LPARAM, lParam, 32, 4, 4);
+ TEST_TYPE_SIZE (MDICREATESTRUCTA, 36)
+ TEST_TYPE_ALIGN (MDICREATESTRUCTA, 4)
+ TEST_FIELD_SIZE (MDICREATESTRUCTA, szClass, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTA, szClass, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTA, szClass, 0)
+ TEST_FIELD_SIZE (MDICREATESTRUCTA, szTitle, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTA, szTitle, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTA, szTitle, 4)
+ TEST_FIELD_SIZE (MDICREATESTRUCTA, hOwner, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTA, hOwner, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTA, hOwner, 8)
+ TEST_FIELD_SIZE (MDICREATESTRUCTA, x, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTA, x, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTA, x, 12)
+ TEST_FIELD_SIZE (MDICREATESTRUCTA, y, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTA, y, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTA, y, 16)
+ TEST_FIELD_SIZE (MDICREATESTRUCTA, cx, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTA, cx, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTA, cx, 20)
+ TEST_FIELD_SIZE (MDICREATESTRUCTA, cy, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTA, cy, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTA, cy, 24)
+ TEST_FIELD_SIZE (MDICREATESTRUCTA, style, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTA, style, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTA, style, 28)
+ TEST_FIELD_SIZE (MDICREATESTRUCTA, lParam, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTA, lParam, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTA, lParam, 32)
}
static void test_pack_MDICREATESTRUCTW(void)
{
/* MDICREATESTRUCTW (pack 4) */
- TEST_TYPE(MDICREATESTRUCTW, 36, 4);
- TEST_FIELD(MDICREATESTRUCTW, LPCWSTR, szClass, 0, 4, 4);
- TEST_FIELD(MDICREATESTRUCTW, LPCWSTR, szTitle, 4, 4, 4);
- TEST_FIELD(MDICREATESTRUCTW, HINSTANCE, hOwner, 8, 4, 4);
- TEST_FIELD(MDICREATESTRUCTW, INT, x, 12, 4, 4);
- TEST_FIELD(MDICREATESTRUCTW, INT, y, 16, 4, 4);
- TEST_FIELD(MDICREATESTRUCTW, INT, cx, 20, 4, 4);
- TEST_FIELD(MDICREATESTRUCTW, INT, cy, 24, 4, 4);
- TEST_FIELD(MDICREATESTRUCTW, DWORD, style, 28, 4, 4);
- TEST_FIELD(MDICREATESTRUCTW, LPARAM, lParam, 32, 4, 4);
+ TEST_TYPE_SIZE (MDICREATESTRUCTW, 36)
+ TEST_TYPE_ALIGN (MDICREATESTRUCTW, 4)
+ TEST_FIELD_SIZE (MDICREATESTRUCTW, szClass, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTW, szClass, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTW, szClass, 0)
+ TEST_FIELD_SIZE (MDICREATESTRUCTW, szTitle, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTW, szTitle, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTW, szTitle, 4)
+ TEST_FIELD_SIZE (MDICREATESTRUCTW, hOwner, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTW, hOwner, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTW, hOwner, 8)
+ TEST_FIELD_SIZE (MDICREATESTRUCTW, x, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTW, x, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTW, x, 12)
+ TEST_FIELD_SIZE (MDICREATESTRUCTW, y, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTW, y, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTW, y, 16)
+ TEST_FIELD_SIZE (MDICREATESTRUCTW, cx, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTW, cx, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTW, cx, 20)
+ TEST_FIELD_SIZE (MDICREATESTRUCTW, cy, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTW, cy, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTW, cy, 24)
+ TEST_FIELD_SIZE (MDICREATESTRUCTW, style, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTW, style, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTW, style, 28)
+ TEST_FIELD_SIZE (MDICREATESTRUCTW, lParam, 4)
+ TEST_FIELD_ALIGN (MDICREATESTRUCTW, lParam, 4)
+ TEST_FIELD_OFFSET(MDICREATESTRUCTW, lParam, 32)
}
static void test_pack_MDINEXTMENU(void)
{
/* MDINEXTMENU (pack 4) */
- TEST_TYPE(MDINEXTMENU, 12, 4);
- TEST_FIELD(MDINEXTMENU, HMENU, hmenuIn, 0, 4, 4);
- TEST_FIELD(MDINEXTMENU, HMENU, hmenuNext, 4, 4, 4);
- TEST_FIELD(MDINEXTMENU, HWND, hwndNext, 8, 4, 4);
+ TEST_TYPE_SIZE (MDINEXTMENU, 12)
+ TEST_TYPE_ALIGN (MDINEXTMENU, 4)
+ TEST_FIELD_SIZE (MDINEXTMENU, hmenuIn, 4)
+ TEST_FIELD_ALIGN (MDINEXTMENU, hmenuIn, 4)
+ TEST_FIELD_OFFSET(MDINEXTMENU, hmenuIn, 0)
+ TEST_FIELD_SIZE (MDINEXTMENU, hmenuNext, 4)
+ TEST_FIELD_ALIGN (MDINEXTMENU, hmenuNext, 4)
+ TEST_FIELD_OFFSET(MDINEXTMENU, hmenuNext, 4)
+ TEST_FIELD_SIZE (MDINEXTMENU, hwndNext, 4)
+ TEST_FIELD_ALIGN (MDINEXTMENU, hwndNext, 4)
+ TEST_FIELD_OFFSET(MDINEXTMENU, hwndNext, 8)
}
static void test_pack_MEASUREITEMSTRUCT(void)
{
/* MEASUREITEMSTRUCT (pack 4) */
- TEST_TYPE(MEASUREITEMSTRUCT, 24, 4);
- TEST_FIELD(MEASUREITEMSTRUCT, UINT, CtlType, 0, 4, 4);
- TEST_FIELD(MEASUREITEMSTRUCT, UINT, CtlID, 4, 4, 4);
- TEST_FIELD(MEASUREITEMSTRUCT, UINT, itemID, 8, 4, 4);
- TEST_FIELD(MEASUREITEMSTRUCT, UINT, itemWidth, 12, 4, 4);
- TEST_FIELD(MEASUREITEMSTRUCT, UINT, itemHeight, 16, 4, 4);
- TEST_FIELD(MEASUREITEMSTRUCT, ULONG_PTR, itemData, 20, 4, 4);
+ TEST_TYPE_SIZE (MEASUREITEMSTRUCT, 24)
+ TEST_TYPE_ALIGN (MEASUREITEMSTRUCT, 4)
+ TEST_FIELD_SIZE (MEASUREITEMSTRUCT, CtlType, 4)
+ TEST_FIELD_ALIGN (MEASUREITEMSTRUCT, CtlType, 4)
+ TEST_FIELD_OFFSET(MEASUREITEMSTRUCT, CtlType, 0)
+ TEST_FIELD_SIZE (MEASUREITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_ALIGN (MEASUREITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_OFFSET(MEASUREITEMSTRUCT, CtlID, 4)
+ TEST_FIELD_SIZE (MEASUREITEMSTRUCT, itemID, 4)
+ TEST_FIELD_ALIGN (MEASUREITEMSTRUCT, itemID, 4)
+ TEST_FIELD_OFFSET(MEASUREITEMSTRUCT, itemID, 8)
+ TEST_FIELD_SIZE (MEASUREITEMSTRUCT, itemWidth, 4)
+ TEST_FIELD_ALIGN (MEASUREITEMSTRUCT, itemWidth, 4)
+ TEST_FIELD_OFFSET(MEASUREITEMSTRUCT, itemWidth, 12)
+ TEST_FIELD_SIZE (MEASUREITEMSTRUCT, itemHeight, 4)
+ TEST_FIELD_ALIGN (MEASUREITEMSTRUCT, itemHeight, 4)
+ TEST_FIELD_OFFSET(MEASUREITEMSTRUCT, itemHeight, 16)
+ TEST_FIELD_SIZE (MEASUREITEMSTRUCT, itemData, 4)
+ TEST_FIELD_ALIGN (MEASUREITEMSTRUCT, itemData, 4)
+ TEST_FIELD_OFFSET(MEASUREITEMSTRUCT, itemData, 20)
}
static void test_pack_MENUINFO(void)
{
/* MENUINFO (pack 4) */
- TEST_TYPE(MENUINFO, 28, 4);
- TEST_FIELD(MENUINFO, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(MENUINFO, DWORD, fMask, 4, 4, 4);
- TEST_FIELD(MENUINFO, DWORD, dwStyle, 8, 4, 4);
- TEST_FIELD(MENUINFO, UINT, cyMax, 12, 4, 4);
- TEST_FIELD(MENUINFO, HBRUSH, hbrBack, 16, 4, 4);
- TEST_FIELD(MENUINFO, DWORD, dwContextHelpID, 20, 4, 4);
- TEST_FIELD(MENUINFO, ULONG_PTR, dwMenuData, 24, 4, 4);
+ TEST_TYPE_SIZE (MENUINFO, 28)
+ TEST_TYPE_ALIGN (MENUINFO, 4)
+ TEST_FIELD_SIZE (MENUINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (MENUINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(MENUINFO, cbSize, 0)
+ TEST_FIELD_SIZE (MENUINFO, fMask, 4)
+ TEST_FIELD_ALIGN (MENUINFO, fMask, 4)
+ TEST_FIELD_OFFSET(MENUINFO, fMask, 4)
+ TEST_FIELD_SIZE (MENUINFO, dwStyle, 4)
+ TEST_FIELD_ALIGN (MENUINFO, dwStyle, 4)
+ TEST_FIELD_OFFSET(MENUINFO, dwStyle, 8)
+ TEST_FIELD_SIZE (MENUINFO, cyMax, 4)
+ TEST_FIELD_ALIGN (MENUINFO, cyMax, 4)
+ TEST_FIELD_OFFSET(MENUINFO, cyMax, 12)
+ TEST_FIELD_SIZE (MENUINFO, hbrBack, 4)
+ TEST_FIELD_ALIGN (MENUINFO, hbrBack, 4)
+ TEST_FIELD_OFFSET(MENUINFO, hbrBack, 16)
+ TEST_FIELD_SIZE (MENUINFO, dwContextHelpID, 4)
+ TEST_FIELD_ALIGN (MENUINFO, dwContextHelpID, 4)
+ TEST_FIELD_OFFSET(MENUINFO, dwContextHelpID, 20)
+ TEST_FIELD_SIZE (MENUINFO, dwMenuData, 4)
+ TEST_FIELD_ALIGN (MENUINFO, dwMenuData, 4)
+ TEST_FIELD_OFFSET(MENUINFO, dwMenuData, 24)
}
static void test_pack_MENUITEMINFOA(void)
{
/* MENUITEMINFOA (pack 4) */
- TEST_TYPE(MENUITEMINFOA, 48, 4);
- TEST_FIELD(MENUITEMINFOA, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(MENUITEMINFOA, UINT, fMask, 4, 4, 4);
- TEST_FIELD(MENUITEMINFOA, UINT, fType, 8, 4, 4);
- TEST_FIELD(MENUITEMINFOA, UINT, fState, 12, 4, 4);
- TEST_FIELD(MENUITEMINFOA, UINT, wID, 16, 4, 4);
- TEST_FIELD(MENUITEMINFOA, HMENU, hSubMenu, 20, 4, 4);
- TEST_FIELD(MENUITEMINFOA, HBITMAP, hbmpChecked, 24, 4, 4);
- TEST_FIELD(MENUITEMINFOA, HBITMAP, hbmpUnchecked, 28, 4, 4);
- TEST_FIELD(MENUITEMINFOA, ULONG_PTR, dwItemData, 32, 4, 4);
- TEST_FIELD(MENUITEMINFOA, LPSTR, dwTypeData, 36, 4, 4);
- TEST_FIELD(MENUITEMINFOA, UINT, cch, 40, 4, 4);
- TEST_FIELD(MENUITEMINFOA, HBITMAP, hbmpItem, 44, 4, 4);
+ TEST_TYPE_SIZE (MENUITEMINFOA, 48)
+ TEST_TYPE_ALIGN (MENUITEMINFOA, 4)
+ TEST_FIELD_SIZE (MENUITEMINFOA, cbSize, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, cbSize, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, cbSize, 0)
+ TEST_FIELD_SIZE (MENUITEMINFOA, fMask, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, fMask, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, fMask, 4)
+ TEST_FIELD_SIZE (MENUITEMINFOA, fType, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, fType, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, fType, 8)
+ TEST_FIELD_SIZE (MENUITEMINFOA, fState, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, fState, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, fState, 12)
+ TEST_FIELD_SIZE (MENUITEMINFOA, wID, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, wID, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, wID, 16)
+ TEST_FIELD_SIZE (MENUITEMINFOA, hSubMenu, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, hSubMenu, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, hSubMenu, 20)
+ TEST_FIELD_SIZE (MENUITEMINFOA, hbmpChecked, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, hbmpChecked, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, hbmpChecked, 24)
+ TEST_FIELD_SIZE (MENUITEMINFOA, hbmpUnchecked, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, hbmpUnchecked, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, hbmpUnchecked, 28)
+ TEST_FIELD_SIZE (MENUITEMINFOA, dwItemData, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, dwItemData, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, dwItemData, 32)
+ TEST_FIELD_SIZE (MENUITEMINFOA, dwTypeData, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, dwTypeData, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, dwTypeData, 36)
+ TEST_FIELD_SIZE (MENUITEMINFOA, cch, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, cch, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, cch, 40)
+ TEST_FIELD_SIZE (MENUITEMINFOA, hbmpItem, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOA, hbmpItem, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOA, hbmpItem, 44)
}
static void test_pack_MENUITEMINFOW(void)
{
/* MENUITEMINFOW (pack 4) */
- TEST_TYPE(MENUITEMINFOW, 48, 4);
- TEST_FIELD(MENUITEMINFOW, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(MENUITEMINFOW, UINT, fMask, 4, 4, 4);
- TEST_FIELD(MENUITEMINFOW, UINT, fType, 8, 4, 4);
- TEST_FIELD(MENUITEMINFOW, UINT, fState, 12, 4, 4);
- TEST_FIELD(MENUITEMINFOW, UINT, wID, 16, 4, 4);
- TEST_FIELD(MENUITEMINFOW, HMENU, hSubMenu, 20, 4, 4);
- TEST_FIELD(MENUITEMINFOW, HBITMAP, hbmpChecked, 24, 4, 4);
- TEST_FIELD(MENUITEMINFOW, HBITMAP, hbmpUnchecked, 28, 4, 4);
- TEST_FIELD(MENUITEMINFOW, ULONG_PTR, dwItemData, 32, 4, 4);
- TEST_FIELD(MENUITEMINFOW, LPWSTR, dwTypeData, 36, 4, 4);
- TEST_FIELD(MENUITEMINFOW, UINT, cch, 40, 4, 4);
- TEST_FIELD(MENUITEMINFOW, HBITMAP, hbmpItem, 44, 4, 4);
+ TEST_TYPE_SIZE (MENUITEMINFOW, 48)
+ TEST_TYPE_ALIGN (MENUITEMINFOW, 4)
+ TEST_FIELD_SIZE (MENUITEMINFOW, cbSize, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, cbSize, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, cbSize, 0)
+ TEST_FIELD_SIZE (MENUITEMINFOW, fMask, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, fMask, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, fMask, 4)
+ TEST_FIELD_SIZE (MENUITEMINFOW, fType, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, fType, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, fType, 8)
+ TEST_FIELD_SIZE (MENUITEMINFOW, fState, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, fState, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, fState, 12)
+ TEST_FIELD_SIZE (MENUITEMINFOW, wID, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, wID, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, wID, 16)
+ TEST_FIELD_SIZE (MENUITEMINFOW, hSubMenu, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, hSubMenu, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, hSubMenu, 20)
+ TEST_FIELD_SIZE (MENUITEMINFOW, hbmpChecked, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, hbmpChecked, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, hbmpChecked, 24)
+ TEST_FIELD_SIZE (MENUITEMINFOW, hbmpUnchecked, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, hbmpUnchecked, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, hbmpUnchecked, 28)
+ TEST_FIELD_SIZE (MENUITEMINFOW, dwItemData, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, dwItemData, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, dwItemData, 32)
+ TEST_FIELD_SIZE (MENUITEMINFOW, dwTypeData, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, dwTypeData, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, dwTypeData, 36)
+ TEST_FIELD_SIZE (MENUITEMINFOW, cch, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, cch, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, cch, 40)
+ TEST_FIELD_SIZE (MENUITEMINFOW, hbmpItem, 4)
+ TEST_FIELD_ALIGN (MENUITEMINFOW, hbmpItem, 4)
+ TEST_FIELD_OFFSET(MENUITEMINFOW, hbmpItem, 44)
}
static void test_pack_MENUITEMTEMPLATE(void)
{
/* MENUITEMTEMPLATE (pack 4) */
- TEST_TYPE(MENUITEMTEMPLATE, 6, 2);
- TEST_FIELD(MENUITEMTEMPLATE, WORD, mtOption, 0, 2, 2);
- TEST_FIELD(MENUITEMTEMPLATE, WORD, mtID, 2, 2, 2);
- TEST_FIELD(MENUITEMTEMPLATE, WCHAR[1], mtString, 4, 2, 2);
+ TEST_TYPE_SIZE (MENUITEMTEMPLATE, 6)
+ TEST_TYPE_ALIGN (MENUITEMTEMPLATE, 2)
+ TEST_FIELD_SIZE (MENUITEMTEMPLATE, mtOption, 2)
+ TEST_FIELD_ALIGN (MENUITEMTEMPLATE, mtOption, 2)
+ TEST_FIELD_OFFSET(MENUITEMTEMPLATE, mtOption, 0)
+ TEST_FIELD_SIZE (MENUITEMTEMPLATE, mtID, 2)
+ TEST_FIELD_ALIGN (MENUITEMTEMPLATE, mtID, 2)
+ TEST_FIELD_OFFSET(MENUITEMTEMPLATE, mtID, 2)
+ TEST_FIELD_SIZE (MENUITEMTEMPLATE, mtString, 2)
+ TEST_FIELD_ALIGN (MENUITEMTEMPLATE, mtString, 2)
+ TEST_FIELD_OFFSET(MENUITEMTEMPLATE, mtString, 4)
}
static void test_pack_MENUITEMTEMPLATEHEADER(void)
{
/* MENUITEMTEMPLATEHEADER (pack 4) */
- TEST_TYPE(MENUITEMTEMPLATEHEADER, 4, 2);
- TEST_FIELD(MENUITEMTEMPLATEHEADER, WORD, versionNumber, 0, 2, 2);
- TEST_FIELD(MENUITEMTEMPLATEHEADER, WORD, offset, 2, 2, 2);
+ TEST_TYPE_SIZE (MENUITEMTEMPLATEHEADER, 4)
+ TEST_TYPE_ALIGN (MENUITEMTEMPLATEHEADER, 2)
+ TEST_FIELD_SIZE (MENUITEMTEMPLATEHEADER, versionNumber, 2)
+ TEST_FIELD_ALIGN (MENUITEMTEMPLATEHEADER, versionNumber, 2)
+ TEST_FIELD_OFFSET(MENUITEMTEMPLATEHEADER, versionNumber, 0)
+ TEST_FIELD_SIZE (MENUITEMTEMPLATEHEADER, offset, 2)
+ TEST_FIELD_ALIGN (MENUITEMTEMPLATEHEADER, offset, 2)
+ TEST_FIELD_OFFSET(MENUITEMTEMPLATEHEADER, offset, 2)
}
static void test_pack_MINIMIZEDMETRICS(void)
{
/* MINIMIZEDMETRICS (pack 4) */
- TEST_TYPE(MINIMIZEDMETRICS, 20, 4);
- TEST_FIELD(MINIMIZEDMETRICS, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(MINIMIZEDMETRICS, int, iWidth, 4, 4, 4);
- TEST_FIELD(MINIMIZEDMETRICS, int, iHorzGap, 8, 4, 4);
- TEST_FIELD(MINIMIZEDMETRICS, int, iVertGap, 12, 4, 4);
- TEST_FIELD(MINIMIZEDMETRICS, int, iArrange, 16, 4, 4);
+ TEST_TYPE_SIZE (MINIMIZEDMETRICS, 20)
+ TEST_TYPE_ALIGN (MINIMIZEDMETRICS, 4)
+ TEST_FIELD_SIZE (MINIMIZEDMETRICS, cbSize, 4)
+ TEST_FIELD_ALIGN (MINIMIZEDMETRICS, cbSize, 4)
+ TEST_FIELD_OFFSET(MINIMIZEDMETRICS, cbSize, 0)
+ TEST_FIELD_SIZE (MINIMIZEDMETRICS, iWidth, 4)
+ TEST_FIELD_ALIGN (MINIMIZEDMETRICS, iWidth, 4)
+ TEST_FIELD_OFFSET(MINIMIZEDMETRICS, iWidth, 4)
+ TEST_FIELD_SIZE (MINIMIZEDMETRICS, iHorzGap, 4)
+ TEST_FIELD_ALIGN (MINIMIZEDMETRICS, iHorzGap, 4)
+ TEST_FIELD_OFFSET(MINIMIZEDMETRICS, iHorzGap, 8)
+ TEST_FIELD_SIZE (MINIMIZEDMETRICS, iVertGap, 4)
+ TEST_FIELD_ALIGN (MINIMIZEDMETRICS, iVertGap, 4)
+ TEST_FIELD_OFFSET(MINIMIZEDMETRICS, iVertGap, 12)
+ TEST_FIELD_SIZE (MINIMIZEDMETRICS, iArrange, 4)
+ TEST_FIELD_ALIGN (MINIMIZEDMETRICS, iArrange, 4)
+ TEST_FIELD_OFFSET(MINIMIZEDMETRICS, iArrange, 16)
}
static void test_pack_MINMAXINFO(void)
{
/* MINMAXINFO (pack 4) */
- TEST_TYPE(MINMAXINFO, 40, 4);
- TEST_FIELD(MINMAXINFO, POINT, ptReserved, 0, 8, 4);
- TEST_FIELD(MINMAXINFO, POINT, ptMaxSize, 8, 8, 4);
- TEST_FIELD(MINMAXINFO, POINT, ptMaxPosition, 16, 8, 4);
- TEST_FIELD(MINMAXINFO, POINT, ptMinTrackSize, 24, 8, 4);
- TEST_FIELD(MINMAXINFO, POINT, ptMaxTrackSize, 32, 8, 4);
+ TEST_TYPE_SIZE (MINMAXINFO, 40)
+ TEST_TYPE_ALIGN (MINMAXINFO, 4)
+ TEST_FIELD_SIZE (MINMAXINFO, ptReserved, 8)
+ TEST_FIELD_ALIGN (MINMAXINFO, ptReserved, 4)
+ TEST_FIELD_OFFSET(MINMAXINFO, ptReserved, 0)
+ TEST_FIELD_SIZE (MINMAXINFO, ptMaxSize, 8)
+ TEST_FIELD_ALIGN (MINMAXINFO, ptMaxSize, 4)
+ TEST_FIELD_OFFSET(MINMAXINFO, ptMaxSize, 8)
+ TEST_FIELD_SIZE (MINMAXINFO, ptMaxPosition, 8)
+ TEST_FIELD_ALIGN (MINMAXINFO, ptMaxPosition, 4)
+ TEST_FIELD_OFFSET(MINMAXINFO, ptMaxPosition, 16)
+ TEST_FIELD_SIZE (MINMAXINFO, ptMinTrackSize, 8)
+ TEST_FIELD_ALIGN (MINMAXINFO, ptMinTrackSize, 4)
+ TEST_FIELD_OFFSET(MINMAXINFO, ptMinTrackSize, 24)
+ TEST_FIELD_SIZE (MINMAXINFO, ptMaxTrackSize, 8)
+ TEST_FIELD_ALIGN (MINMAXINFO, ptMaxTrackSize, 4)
+ TEST_FIELD_OFFSET(MINMAXINFO, ptMaxTrackSize, 32)
}
static void test_pack_MONITORENUMPROC(void)
{
/* MONITORENUMPROC */
- TEST_TYPE(MONITORENUMPROC, 4, 4);
+ TEST_TYPE_SIZE (MONITORENUMPROC, 4)
+ TEST_TYPE_ALIGN (MONITORENUMPROC, 4)
}
static void test_pack_MONITORINFO(void)
{
/* MONITORINFO (pack 4) */
- TEST_TYPE(MONITORINFO, 40, 4);
- TEST_FIELD(MONITORINFO, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(MONITORINFO, RECT, rcMonitor, 4, 16, 4);
- TEST_FIELD(MONITORINFO, RECT, rcWork, 20, 16, 4);
- TEST_FIELD(MONITORINFO, DWORD, dwFlags, 36, 4, 4);
+ TEST_TYPE_SIZE (MONITORINFO, 40)
+ TEST_TYPE_ALIGN (MONITORINFO, 4)
+ TEST_FIELD_SIZE (MONITORINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (MONITORINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(MONITORINFO, cbSize, 0)
+ TEST_FIELD_SIZE (MONITORINFO, rcMonitor, 16)
+ TEST_FIELD_ALIGN (MONITORINFO, rcMonitor, 4)
+ TEST_FIELD_OFFSET(MONITORINFO, rcMonitor, 4)
+ TEST_FIELD_SIZE (MONITORINFO, rcWork, 16)
+ TEST_FIELD_ALIGN (MONITORINFO, rcWork, 4)
+ TEST_FIELD_OFFSET(MONITORINFO, rcWork, 20)
+ TEST_FIELD_SIZE (MONITORINFO, dwFlags, 4)
+ TEST_FIELD_ALIGN (MONITORINFO, dwFlags, 4)
+ TEST_FIELD_OFFSET(MONITORINFO, dwFlags, 36)
}
static void test_pack_MONITORINFOEXA(void)
{
/* MONITORINFOEXA (pack 4) */
- TEST_TYPE(MONITORINFOEXA, 72, 4);
- TEST_FIELD(MONITORINFOEXA, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(MONITORINFOEXA, RECT, rcMonitor, 4, 16, 4);
- TEST_FIELD(MONITORINFOEXA, RECT, rcWork, 20, 16, 4);
- TEST_FIELD(MONITORINFOEXA, DWORD, dwFlags, 36, 4, 4);
- TEST_FIELD(MONITORINFOEXA, CHAR[CCHDEVICENAME], szDevice, 40, 32, 1);
+ TEST_TYPE_SIZE (MONITORINFOEXA, 72)
+ TEST_TYPE_ALIGN (MONITORINFOEXA, 4)
+ TEST_FIELD_SIZE (MONITORINFOEXA, cbSize, 4)
+ TEST_FIELD_ALIGN (MONITORINFOEXA, cbSize, 4)
+ TEST_FIELD_OFFSET(MONITORINFOEXA, cbSize, 0)
+ TEST_FIELD_SIZE (MONITORINFOEXA, rcMonitor, 16)
+ TEST_FIELD_ALIGN (MONITORINFOEXA, rcMonitor, 4)
+ TEST_FIELD_OFFSET(MONITORINFOEXA, rcMonitor, 4)
+ TEST_FIELD_SIZE (MONITORINFOEXA, rcWork, 16)
+ TEST_FIELD_ALIGN (MONITORINFOEXA, rcWork, 4)
+ TEST_FIELD_OFFSET(MONITORINFOEXA, rcWork, 20)
+ TEST_FIELD_SIZE (MONITORINFOEXA, dwFlags, 4)
+ TEST_FIELD_ALIGN (MONITORINFOEXA, dwFlags, 4)
+ TEST_FIELD_OFFSET(MONITORINFOEXA, dwFlags, 36)
+ TEST_FIELD_SIZE (MONITORINFOEXA, szDevice, 32)
+ TEST_FIELD_ALIGN (MONITORINFOEXA, szDevice, 1)
+ TEST_FIELD_OFFSET(MONITORINFOEXA, szDevice, 40)
}
static void test_pack_MONITORINFOEXW(void)
{
/* MONITORINFOEXW (pack 4) */
- TEST_TYPE(MONITORINFOEXW, 104, 4);
- TEST_FIELD(MONITORINFOEXW, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(MONITORINFOEXW, RECT, rcMonitor, 4, 16, 4);
- TEST_FIELD(MONITORINFOEXW, RECT, rcWork, 20, 16, 4);
- TEST_FIELD(MONITORINFOEXW, DWORD, dwFlags, 36, 4, 4);
- TEST_FIELD(MONITORINFOEXW, WCHAR[CCHDEVICENAME], szDevice, 40, 64, 2);
+ TEST_TYPE_SIZE (MONITORINFOEXW, 104)
+ TEST_TYPE_ALIGN (MONITORINFOEXW, 4)
+ TEST_FIELD_SIZE (MONITORINFOEXW, cbSize, 4)
+ TEST_FIELD_ALIGN (MONITORINFOEXW, cbSize, 4)
+ TEST_FIELD_OFFSET(MONITORINFOEXW, cbSize, 0)
+ TEST_FIELD_SIZE (MONITORINFOEXW, rcMonitor, 16)
+ TEST_FIELD_ALIGN (MONITORINFOEXW, rcMonitor, 4)
+ TEST_FIELD_OFFSET(MONITORINFOEXW, rcMonitor, 4)
+ TEST_FIELD_SIZE (MONITORINFOEXW, rcWork, 16)
+ TEST_FIELD_ALIGN (MONITORINFOEXW, rcWork, 4)
+ TEST_FIELD_OFFSET(MONITORINFOEXW, rcWork, 20)
+ TEST_FIELD_SIZE (MONITORINFOEXW, dwFlags, 4)
+ TEST_FIELD_ALIGN (MONITORINFOEXW, dwFlags, 4)
+ TEST_FIELD_OFFSET(MONITORINFOEXW, dwFlags, 36)
+ TEST_FIELD_SIZE (MONITORINFOEXW, szDevice, 64)
+ TEST_FIELD_ALIGN (MONITORINFOEXW, szDevice, 2)
+ TEST_FIELD_OFFSET(MONITORINFOEXW, szDevice, 40)
}
static void test_pack_MOUSEHOOKSTRUCT(void)
{
/* MOUSEHOOKSTRUCT (pack 4) */
- TEST_TYPE(MOUSEHOOKSTRUCT, 20, 4);
- TEST_FIELD(MOUSEHOOKSTRUCT, POINT, pt, 0, 8, 4);
- TEST_FIELD(MOUSEHOOKSTRUCT, HWND, hwnd, 8, 4, 4);
- TEST_FIELD(MOUSEHOOKSTRUCT, UINT, wHitTestCode, 12, 4, 4);
- TEST_FIELD(MOUSEHOOKSTRUCT, ULONG_PTR, dwExtraInfo, 16, 4, 4);
+ TEST_TYPE_SIZE (MOUSEHOOKSTRUCT, 20)
+ TEST_TYPE_ALIGN (MOUSEHOOKSTRUCT, 4)
+ TEST_FIELD_SIZE (MOUSEHOOKSTRUCT, pt, 8)
+ TEST_FIELD_ALIGN (MOUSEHOOKSTRUCT, pt, 4)
+ TEST_FIELD_OFFSET(MOUSEHOOKSTRUCT, pt, 0)
+ TEST_FIELD_SIZE (MOUSEHOOKSTRUCT, hwnd, 4)
+ TEST_FIELD_ALIGN (MOUSEHOOKSTRUCT, hwnd, 4)
+ TEST_FIELD_OFFSET(MOUSEHOOKSTRUCT, hwnd, 8)
+ TEST_FIELD_SIZE (MOUSEHOOKSTRUCT, wHitTestCode, 4)
+ TEST_FIELD_ALIGN (MOUSEHOOKSTRUCT, wHitTestCode, 4)
+ TEST_FIELD_OFFSET(MOUSEHOOKSTRUCT, wHitTestCode, 12)
+ TEST_FIELD_SIZE (MOUSEHOOKSTRUCT, dwExtraInfo, 4)
+ TEST_FIELD_ALIGN (MOUSEHOOKSTRUCT, dwExtraInfo, 4)
+ TEST_FIELD_OFFSET(MOUSEHOOKSTRUCT, dwExtraInfo, 16)
}
static void test_pack_MOUSEINPUT(void)
{
/* MOUSEINPUT (pack 4) */
- TEST_TYPE(MOUSEINPUT, 24, 4);
- TEST_FIELD(MOUSEINPUT, LONG, dx, 0, 4, 4);
- TEST_FIELD(MOUSEINPUT, LONG, dy, 4, 4, 4);
- TEST_FIELD(MOUSEINPUT, DWORD, mouseData, 8, 4, 4);
- TEST_FIELD(MOUSEINPUT, DWORD, dwFlags, 12, 4, 4);
- TEST_FIELD(MOUSEINPUT, DWORD, time, 16, 4, 4);
- TEST_FIELD(MOUSEINPUT, ULONG_PTR, dwExtraInfo, 20, 4, 4);
+ TEST_TYPE_SIZE (MOUSEINPUT, 24)
+ TEST_TYPE_ALIGN (MOUSEINPUT, 4)
+ TEST_FIELD_SIZE (MOUSEINPUT, dx, 4)
+ TEST_FIELD_ALIGN (MOUSEINPUT, dx, 4)
+ TEST_FIELD_OFFSET(MOUSEINPUT, dx, 0)
+ TEST_FIELD_SIZE (MOUSEINPUT, dy, 4)
+ TEST_FIELD_ALIGN (MOUSEINPUT, dy, 4)
+ TEST_FIELD_OFFSET(MOUSEINPUT, dy, 4)
+ TEST_FIELD_SIZE (MOUSEINPUT, mouseData, 4)
+ TEST_FIELD_ALIGN (MOUSEINPUT, mouseData, 4)
+ TEST_FIELD_OFFSET(MOUSEINPUT, mouseData, 8)
+ TEST_FIELD_SIZE (MOUSEINPUT, dwFlags, 4)
+ TEST_FIELD_ALIGN (MOUSEINPUT, dwFlags, 4)
+ TEST_FIELD_OFFSET(MOUSEINPUT, dwFlags, 12)
+ TEST_FIELD_SIZE (MOUSEINPUT, time, 4)
+ TEST_FIELD_ALIGN (MOUSEINPUT, time, 4)
+ TEST_FIELD_OFFSET(MOUSEINPUT, time, 16)
+ TEST_FIELD_SIZE (MOUSEINPUT, dwExtraInfo, 4)
+ TEST_FIELD_ALIGN (MOUSEINPUT, dwExtraInfo, 4)
+ TEST_FIELD_OFFSET(MOUSEINPUT, dwExtraInfo, 20)
}
static void test_pack_MOUSEKEYS(void)
{
/* MOUSEKEYS (pack 4) */
- TEST_TYPE(MOUSEKEYS, 28, 4);
- TEST_FIELD(MOUSEKEYS, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(MOUSEKEYS, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(MOUSEKEYS, DWORD, iMaxSpeed, 8, 4, 4);
- TEST_FIELD(MOUSEKEYS, DWORD, iTimeToMaxSpeed, 12, 4, 4);
- TEST_FIELD(MOUSEKEYS, DWORD, iCtrlSpeed, 16, 4, 4);
- TEST_FIELD(MOUSEKEYS, DWORD, dwReserved1, 20, 4, 4);
- TEST_FIELD(MOUSEKEYS, DWORD, dwReserved2, 24, 4, 4);
+ TEST_TYPE_SIZE (MOUSEKEYS, 28)
+ TEST_TYPE_ALIGN (MOUSEKEYS, 4)
+ TEST_FIELD_SIZE (MOUSEKEYS, cbSize, 4)
+ TEST_FIELD_ALIGN (MOUSEKEYS, cbSize, 4)
+ TEST_FIELD_OFFSET(MOUSEKEYS, cbSize, 0)
+ TEST_FIELD_SIZE (MOUSEKEYS, dwFlags, 4)
+ TEST_FIELD_ALIGN (MOUSEKEYS, dwFlags, 4)
+ TEST_FIELD_OFFSET(MOUSEKEYS, dwFlags, 4)
+ TEST_FIELD_SIZE (MOUSEKEYS, iMaxSpeed, 4)
+ TEST_FIELD_ALIGN (MOUSEKEYS, iMaxSpeed, 4)
+ TEST_FIELD_OFFSET(MOUSEKEYS, iMaxSpeed, 8)
+ TEST_FIELD_SIZE (MOUSEKEYS, iTimeToMaxSpeed, 4)
+ TEST_FIELD_ALIGN (MOUSEKEYS, iTimeToMaxSpeed, 4)
+ TEST_FIELD_OFFSET(MOUSEKEYS, iTimeToMaxSpeed, 12)
+ TEST_FIELD_SIZE (MOUSEKEYS, iCtrlSpeed, 4)
+ TEST_FIELD_ALIGN (MOUSEKEYS, iCtrlSpeed, 4)
+ TEST_FIELD_OFFSET(MOUSEKEYS, iCtrlSpeed, 16)
+ TEST_FIELD_SIZE (MOUSEKEYS, dwReserved1, 4)
+ TEST_FIELD_ALIGN (MOUSEKEYS, dwReserved1, 4)
+ TEST_FIELD_OFFSET(MOUSEKEYS, dwReserved1, 20)
+ TEST_FIELD_SIZE (MOUSEKEYS, dwReserved2, 4)
+ TEST_FIELD_ALIGN (MOUSEKEYS, dwReserved2, 4)
+ TEST_FIELD_OFFSET(MOUSEKEYS, dwReserved2, 24)
}
static void test_pack_MSG(void)
{
/* MSG (pack 4) */
- TEST_TYPE(MSG, 28, 4);
- TEST_FIELD(MSG, HWND, hwnd, 0, 4, 4);
- TEST_FIELD(MSG, UINT, message, 4, 4, 4);
- TEST_FIELD(MSG, WPARAM, wParam, 8, 4, 4);
- TEST_FIELD(MSG, LPARAM, lParam, 12, 4, 4);
- TEST_FIELD(MSG, DWORD, time, 16, 4, 4);
- TEST_FIELD(MSG, POINT, pt, 20, 8, 4);
+ TEST_TYPE_SIZE (MSG, 28)
+ TEST_TYPE_ALIGN (MSG, 4)
+ TEST_FIELD_SIZE (MSG, hwnd, 4)
+ TEST_FIELD_ALIGN (MSG, hwnd, 4)
+ TEST_FIELD_OFFSET(MSG, hwnd, 0)
+ TEST_FIELD_SIZE (MSG, message, 4)
+ TEST_FIELD_ALIGN (MSG, message, 4)
+ TEST_FIELD_OFFSET(MSG, message, 4)
+ TEST_FIELD_SIZE (MSG, wParam, 4)
+ TEST_FIELD_ALIGN (MSG, wParam, 4)
+ TEST_FIELD_OFFSET(MSG, wParam, 8)
+ TEST_FIELD_SIZE (MSG, lParam, 4)
+ TEST_FIELD_ALIGN (MSG, lParam, 4)
+ TEST_FIELD_OFFSET(MSG, lParam, 12)
+ TEST_FIELD_SIZE (MSG, time, 4)
+ TEST_FIELD_ALIGN (MSG, time, 4)
+ TEST_FIELD_OFFSET(MSG, time, 16)
+ TEST_FIELD_SIZE (MSG, pt, 8)
+ TEST_FIELD_ALIGN (MSG, pt, 4)
+ TEST_FIELD_OFFSET(MSG, pt, 20)
}
static void test_pack_MSGBOXCALLBACK(void)
{
/* MSGBOXCALLBACK */
- TEST_TYPE(MSGBOXCALLBACK, 4, 4);
+ TEST_TYPE_SIZE (MSGBOXCALLBACK, 4)
+ TEST_TYPE_ALIGN (MSGBOXCALLBACK, 4)
}
static void test_pack_MSGBOXPARAMSA(void)
{
/* MSGBOXPARAMSA (pack 4) */
- TEST_TYPE(MSGBOXPARAMSA, 40, 4);
- TEST_FIELD(MSGBOXPARAMSA, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(MSGBOXPARAMSA, HWND, hwndOwner, 4, 4, 4);
- TEST_FIELD(MSGBOXPARAMSA, HINSTANCE, hInstance, 8, 4, 4);
- TEST_FIELD(MSGBOXPARAMSA, LPCSTR, lpszText, 12, 4, 4);
- TEST_FIELD(MSGBOXPARAMSA, LPCSTR, lpszCaption, 16, 4, 4);
- TEST_FIELD(MSGBOXPARAMSA, DWORD, dwStyle, 20, 4, 4);
- TEST_FIELD(MSGBOXPARAMSA, LPCSTR, lpszIcon, 24, 4, 4);
- TEST_FIELD(MSGBOXPARAMSA, DWORD_PTR, dwContextHelpId, 28, 4, 4);
- TEST_FIELD(MSGBOXPARAMSA, MSGBOXCALLBACK, lpfnMsgBoxCallback, 32, 4, 4);
- TEST_FIELD(MSGBOXPARAMSA, DWORD, dwLanguageId, 36, 4, 4);
+ TEST_TYPE_SIZE (MSGBOXPARAMSA, 40)
+ TEST_TYPE_ALIGN (MSGBOXPARAMSA, 4)
+ TEST_FIELD_SIZE (MSGBOXPARAMSA, cbSize, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSA, cbSize, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSA, cbSize, 0)
+ TEST_FIELD_SIZE (MSGBOXPARAMSA, hwndOwner, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSA, hwndOwner, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSA, hwndOwner, 4)
+ TEST_FIELD_SIZE (MSGBOXPARAMSA, hInstance, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSA, hInstance, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSA, hInstance, 8)
+ TEST_FIELD_SIZE (MSGBOXPARAMSA, lpszText, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSA, lpszText, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSA, lpszText, 12)
+ TEST_FIELD_SIZE (MSGBOXPARAMSA, lpszCaption, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSA, lpszCaption, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSA, lpszCaption, 16)
+ TEST_FIELD_SIZE (MSGBOXPARAMSA, dwStyle, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSA, dwStyle, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSA, dwStyle, 20)
+ TEST_FIELD_SIZE (MSGBOXPARAMSA, lpszIcon, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSA, lpszIcon, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSA, lpszIcon, 24)
+ TEST_FIELD_SIZE (MSGBOXPARAMSA, dwContextHelpId, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSA, dwContextHelpId, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSA, dwContextHelpId, 28)
+ TEST_FIELD_SIZE (MSGBOXPARAMSA, lpfnMsgBoxCallback, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSA, lpfnMsgBoxCallback, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSA, lpfnMsgBoxCallback, 32)
+ TEST_FIELD_SIZE (MSGBOXPARAMSA, dwLanguageId, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSA, dwLanguageId, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSA, dwLanguageId, 36)
}
static void test_pack_MSGBOXPARAMSW(void)
{
/* MSGBOXPARAMSW (pack 4) */
- TEST_TYPE(MSGBOXPARAMSW, 40, 4);
- TEST_FIELD(MSGBOXPARAMSW, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(MSGBOXPARAMSW, HWND, hwndOwner, 4, 4, 4);
- TEST_FIELD(MSGBOXPARAMSW, HINSTANCE, hInstance, 8, 4, 4);
- TEST_FIELD(MSGBOXPARAMSW, LPCWSTR, lpszText, 12, 4, 4);
- TEST_FIELD(MSGBOXPARAMSW, LPCWSTR, lpszCaption, 16, 4, 4);
- TEST_FIELD(MSGBOXPARAMSW, DWORD, dwStyle, 20, 4, 4);
- TEST_FIELD(MSGBOXPARAMSW, LPCWSTR, lpszIcon, 24, 4, 4);
- TEST_FIELD(MSGBOXPARAMSW, DWORD_PTR, dwContextHelpId, 28, 4, 4);
- TEST_FIELD(MSGBOXPARAMSW, MSGBOXCALLBACK, lpfnMsgBoxCallback, 32, 4, 4);
- TEST_FIELD(MSGBOXPARAMSW, DWORD, dwLanguageId, 36, 4, 4);
+ TEST_TYPE_SIZE (MSGBOXPARAMSW, 40)
+ TEST_TYPE_ALIGN (MSGBOXPARAMSW, 4)
+ TEST_FIELD_SIZE (MSGBOXPARAMSW, cbSize, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSW, cbSize, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSW, cbSize, 0)
+ TEST_FIELD_SIZE (MSGBOXPARAMSW, hwndOwner, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSW, hwndOwner, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSW, hwndOwner, 4)
+ TEST_FIELD_SIZE (MSGBOXPARAMSW, hInstance, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSW, hInstance, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSW, hInstance, 8)
+ TEST_FIELD_SIZE (MSGBOXPARAMSW, lpszText, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSW, lpszText, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSW, lpszText, 12)
+ TEST_FIELD_SIZE (MSGBOXPARAMSW, lpszCaption, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSW, lpszCaption, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSW, lpszCaption, 16)
+ TEST_FIELD_SIZE (MSGBOXPARAMSW, dwStyle, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSW, dwStyle, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSW, dwStyle, 20)
+ TEST_FIELD_SIZE (MSGBOXPARAMSW, lpszIcon, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSW, lpszIcon, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSW, lpszIcon, 24)
+ TEST_FIELD_SIZE (MSGBOXPARAMSW, dwContextHelpId, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSW, dwContextHelpId, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSW, dwContextHelpId, 28)
+ TEST_FIELD_SIZE (MSGBOXPARAMSW, lpfnMsgBoxCallback, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSW, lpfnMsgBoxCallback, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSW, lpfnMsgBoxCallback, 32)
+ TEST_FIELD_SIZE (MSGBOXPARAMSW, dwLanguageId, 4)
+ TEST_FIELD_ALIGN (MSGBOXPARAMSW, dwLanguageId, 4)
+ TEST_FIELD_OFFSET(MSGBOXPARAMSW, dwLanguageId, 36)
}
static void test_pack_MSLLHOOKSTRUCT(void)
{
/* MSLLHOOKSTRUCT (pack 4) */
- TEST_TYPE(MSLLHOOKSTRUCT, 24, 4);
- TEST_FIELD(MSLLHOOKSTRUCT, POINT, pt, 0, 8, 4);
- TEST_FIELD(MSLLHOOKSTRUCT, DWORD, mouseData, 8, 4, 4);
- TEST_FIELD(MSLLHOOKSTRUCT, DWORD, flags, 12, 4, 4);
- TEST_FIELD(MSLLHOOKSTRUCT, DWORD, time, 16, 4, 4);
- TEST_FIELD(MSLLHOOKSTRUCT, ULONG_PTR, dwExtraInfo, 20, 4, 4);
+ TEST_TYPE_SIZE (MSLLHOOKSTRUCT, 24)
+ TEST_TYPE_ALIGN (MSLLHOOKSTRUCT, 4)
+ TEST_FIELD_SIZE (MSLLHOOKSTRUCT, pt, 8)
+ TEST_FIELD_ALIGN (MSLLHOOKSTRUCT, pt, 4)
+ TEST_FIELD_OFFSET(MSLLHOOKSTRUCT, pt, 0)
+ TEST_FIELD_SIZE (MSLLHOOKSTRUCT, mouseData, 4)
+ TEST_FIELD_ALIGN (MSLLHOOKSTRUCT, mouseData, 4)
+ TEST_FIELD_OFFSET(MSLLHOOKSTRUCT, mouseData, 8)
+ TEST_FIELD_SIZE (MSLLHOOKSTRUCT, flags, 4)
+ TEST_FIELD_ALIGN (MSLLHOOKSTRUCT, flags, 4)
+ TEST_FIELD_OFFSET(MSLLHOOKSTRUCT, flags, 12)
+ TEST_FIELD_SIZE (MSLLHOOKSTRUCT, time, 4)
+ TEST_FIELD_ALIGN (MSLLHOOKSTRUCT, time, 4)
+ TEST_FIELD_OFFSET(MSLLHOOKSTRUCT, time, 16)
+ TEST_FIELD_SIZE (MSLLHOOKSTRUCT, dwExtraInfo, 4)
+ TEST_FIELD_ALIGN (MSLLHOOKSTRUCT, dwExtraInfo, 4)
+ TEST_FIELD_OFFSET(MSLLHOOKSTRUCT, dwExtraInfo, 20)
}
static void test_pack_MULTIKEYHELPA(void)
{
/* MULTIKEYHELPA (pack 4) */
- TEST_TYPE(MULTIKEYHELPA, 8, 4);
- TEST_FIELD(MULTIKEYHELPA, DWORD, mkSize, 0, 4, 4);
- TEST_FIELD(MULTIKEYHELPA, CHAR, mkKeylist, 4, 1, 1);
- TEST_FIELD(MULTIKEYHELPA, CHAR[1], szKeyphrase, 5, 1, 1);
+ TEST_TYPE_SIZE (MULTIKEYHELPA, 8)
+ TEST_TYPE_ALIGN (MULTIKEYHELPA, 4)
+ TEST_FIELD_SIZE (MULTIKEYHELPA, mkSize, 4)
+ TEST_FIELD_ALIGN (MULTIKEYHELPA, mkSize, 4)
+ TEST_FIELD_OFFSET(MULTIKEYHELPA, mkSize, 0)
+ TEST_FIELD_SIZE (MULTIKEYHELPA, mkKeylist, 1)
+ TEST_FIELD_ALIGN (MULTIKEYHELPA, mkKeylist, 1)
+ TEST_FIELD_OFFSET(MULTIKEYHELPA, mkKeylist, 4)
+ TEST_FIELD_SIZE (MULTIKEYHELPA, szKeyphrase, 1)
+ TEST_FIELD_ALIGN (MULTIKEYHELPA, szKeyphrase, 1)
+ TEST_FIELD_OFFSET(MULTIKEYHELPA, szKeyphrase, 5)
}
static void test_pack_MULTIKEYHELPW(void)
{
/* MULTIKEYHELPW (pack 4) */
- TEST_TYPE(MULTIKEYHELPW, 8, 4);
- TEST_FIELD(MULTIKEYHELPW, DWORD, mkSize, 0, 4, 4);
- TEST_FIELD(MULTIKEYHELPW, WCHAR, mkKeylist, 4, 2, 2);
- TEST_FIELD(MULTIKEYHELPW, WCHAR[1], szKeyphrase, 6, 2, 2);
+ TEST_TYPE_SIZE (MULTIKEYHELPW, 8)
+ TEST_TYPE_ALIGN (MULTIKEYHELPW, 4)
+ TEST_FIELD_SIZE (MULTIKEYHELPW, mkSize, 4)
+ TEST_FIELD_ALIGN (MULTIKEYHELPW, mkSize, 4)
+ TEST_FIELD_OFFSET(MULTIKEYHELPW, mkSize, 0)
+ TEST_FIELD_SIZE (MULTIKEYHELPW, mkKeylist, 2)
+ TEST_FIELD_ALIGN (MULTIKEYHELPW, mkKeylist, 2)
+ TEST_FIELD_OFFSET(MULTIKEYHELPW, mkKeylist, 4)
+ TEST_FIELD_SIZE (MULTIKEYHELPW, szKeyphrase, 2)
+ TEST_FIELD_ALIGN (MULTIKEYHELPW, szKeyphrase, 2)
+ TEST_FIELD_OFFSET(MULTIKEYHELPW, szKeyphrase, 6)
}
static void test_pack_NAMEENUMPROCA(void)
{
/* NAMEENUMPROCA */
- TEST_TYPE(NAMEENUMPROCA, 4, 4);
+ TEST_TYPE_SIZE (NAMEENUMPROCA, 4)
+ TEST_TYPE_ALIGN (NAMEENUMPROCA, 4)
}
static void test_pack_NAMEENUMPROCW(void)
{
/* NAMEENUMPROCW */
- TEST_TYPE(NAMEENUMPROCW, 4, 4);
+ TEST_TYPE_SIZE (NAMEENUMPROCW, 4)
+ TEST_TYPE_ALIGN (NAMEENUMPROCW, 4)
}
static void test_pack_NCCALCSIZE_PARAMS(void)
{
/* NCCALCSIZE_PARAMS (pack 4) */
- TEST_TYPE(NCCALCSIZE_PARAMS, 52, 4);
- TEST_FIELD(NCCALCSIZE_PARAMS, RECT[3], rgrc, 0, 48, 4);
- TEST_FIELD(NCCALCSIZE_PARAMS, WINDOWPOS *, lppos, 48, 4, 4);
+ TEST_TYPE_SIZE (NCCALCSIZE_PARAMS, 52)
+ TEST_TYPE_ALIGN (NCCALCSIZE_PARAMS, 4)
+ TEST_FIELD_SIZE (NCCALCSIZE_PARAMS, rgrc, 48)
+ TEST_FIELD_ALIGN (NCCALCSIZE_PARAMS, rgrc, 4)
+ TEST_FIELD_OFFSET(NCCALCSIZE_PARAMS, rgrc, 0)
+ TEST_FIELD_SIZE (NCCALCSIZE_PARAMS, lppos, 4)
+ TEST_FIELD_ALIGN (NCCALCSIZE_PARAMS, lppos, 4)
+ TEST_FIELD_OFFSET(NCCALCSIZE_PARAMS, lppos, 48)
}
static void test_pack_NMHDR(void)
{
/* NMHDR (pack 4) */
- TEST_TYPE(NMHDR, 12, 4);
- TEST_FIELD(NMHDR, HWND, hwndFrom, 0, 4, 4);
- TEST_FIELD(NMHDR, UINT_PTR, idFrom, 4, 4, 4);
- TEST_FIELD(NMHDR, UINT, code, 8, 4, 4);
+ TEST_TYPE_SIZE (NMHDR, 12)
+ TEST_TYPE_ALIGN (NMHDR, 4)
+ TEST_FIELD_SIZE (NMHDR, hwndFrom, 4)
+ TEST_FIELD_ALIGN (NMHDR, hwndFrom, 4)
+ TEST_FIELD_OFFSET(NMHDR, hwndFrom, 0)
+ TEST_FIELD_SIZE (NMHDR, idFrom, 4)
+ TEST_FIELD_ALIGN (NMHDR, idFrom, 4)
+ TEST_FIELD_OFFSET(NMHDR, idFrom, 4)
+ TEST_FIELD_SIZE (NMHDR, code, 4)
+ TEST_FIELD_ALIGN (NMHDR, code, 4)
+ TEST_FIELD_OFFSET(NMHDR, code, 8)
}
static void test_pack_NONCLIENTMETRICSA(void)
{
/* NONCLIENTMETRICSA (pack 4) */
- TEST_TYPE(NONCLIENTMETRICSA, 340, 4);
- TEST_FIELD(NONCLIENTMETRICSA, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSA, INT, iBorderWidth, 4, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSA, INT, iScrollWidth, 8, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSA, INT, iScrollHeight, 12, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSA, INT, iCaptionWidth, 16, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSA, INT, iCaptionHeight, 20, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSA, LOGFONTA, lfCaptionFont, 24, 60, 4);
- TEST_FIELD(NONCLIENTMETRICSA, INT, iSmCaptionWidth, 84, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSA, INT, iSmCaptionHeight, 88, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSA, LOGFONTA, lfSmCaptionFont, 92, 60, 4);
- TEST_FIELD(NONCLIENTMETRICSA, INT, iMenuWidth, 152, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSA, INT, iMenuHeight, 156, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSA, LOGFONTA, lfMenuFont, 160, 60, 4);
- TEST_FIELD(NONCLIENTMETRICSA, LOGFONTA, lfStatusFont, 220, 60, 4);
- TEST_FIELD(NONCLIENTMETRICSA, LOGFONTA, lfMessageFont, 280, 60, 4);
+ TEST_TYPE_SIZE (NONCLIENTMETRICSA, 340)
+ TEST_TYPE_ALIGN (NONCLIENTMETRICSA, 4)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, cbSize, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, cbSize, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, cbSize, 0)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, iBorderWidth, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, iBorderWidth, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, iBorderWidth, 4)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, iScrollWidth, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, iScrollWidth, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, iScrollWidth, 8)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, iScrollHeight, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, iScrollHeight, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, iScrollHeight, 12)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, iCaptionWidth, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, iCaptionWidth, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, iCaptionWidth, 16)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, iCaptionHeight, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, iCaptionHeight, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, iCaptionHeight, 20)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, lfCaptionFont, 60)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, lfCaptionFont, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, lfCaptionFont, 24)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, iSmCaptionWidth, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, iSmCaptionWidth, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, iSmCaptionWidth, 84)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, iSmCaptionHeight, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, iSmCaptionHeight, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, iSmCaptionHeight, 88)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, lfSmCaptionFont, 60)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, lfSmCaptionFont, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, lfSmCaptionFont, 92)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, iMenuWidth, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, iMenuWidth, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, iMenuWidth, 152)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, iMenuHeight, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, iMenuHeight, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, iMenuHeight, 156)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, lfMenuFont, 60)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, lfMenuFont, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, lfMenuFont, 160)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, lfStatusFont, 60)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, lfStatusFont, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, lfStatusFont, 220)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSA, lfMessageFont, 60)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSA, lfMessageFont, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSA, lfMessageFont, 280)
}
static void test_pack_NONCLIENTMETRICSW(void)
{
/* NONCLIENTMETRICSW (pack 4) */
- TEST_TYPE(NONCLIENTMETRICSW, 500, 4);
- TEST_FIELD(NONCLIENTMETRICSW, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSW, INT, iBorderWidth, 4, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSW, INT, iScrollWidth, 8, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSW, INT, iScrollHeight, 12, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSW, INT, iCaptionWidth, 16, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSW, INT, iCaptionHeight, 20, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSW, LOGFONTW, lfCaptionFont, 24, 92, 4);
- TEST_FIELD(NONCLIENTMETRICSW, INT, iSmCaptionWidth, 116, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSW, INT, iSmCaptionHeight, 120, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSW, LOGFONTW, lfSmCaptionFont, 124, 92, 4);
- TEST_FIELD(NONCLIENTMETRICSW, INT, iMenuWidth, 216, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSW, INT, iMenuHeight, 220, 4, 4);
- TEST_FIELD(NONCLIENTMETRICSW, LOGFONTW, lfMenuFont, 224, 92, 4);
- TEST_FIELD(NONCLIENTMETRICSW, LOGFONTW, lfStatusFont, 316, 92, 4);
- TEST_FIELD(NONCLIENTMETRICSW, LOGFONTW, lfMessageFont, 408, 92, 4);
+ TEST_TYPE_SIZE (NONCLIENTMETRICSW, 500)
+ TEST_TYPE_ALIGN (NONCLIENTMETRICSW, 4)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, cbSize, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, cbSize, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, cbSize, 0)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, iBorderWidth, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, iBorderWidth, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, iBorderWidth, 4)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, iScrollWidth, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, iScrollWidth, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, iScrollWidth, 8)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, iScrollHeight, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, iScrollHeight, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, iScrollHeight, 12)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, iCaptionWidth, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, iCaptionWidth, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, iCaptionWidth, 16)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, iCaptionHeight, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, iCaptionHeight, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, iCaptionHeight, 20)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, lfCaptionFont, 92)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, lfCaptionFont, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, lfCaptionFont, 24)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, iSmCaptionWidth, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, iSmCaptionWidth, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, iSmCaptionWidth, 116)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, iSmCaptionHeight, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, iSmCaptionHeight, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, iSmCaptionHeight, 120)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, lfSmCaptionFont, 92)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, lfSmCaptionFont, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, lfSmCaptionFont, 124)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, iMenuWidth, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, iMenuWidth, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, iMenuWidth, 216)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, iMenuHeight, 4)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, iMenuHeight, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, iMenuHeight, 220)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, lfMenuFont, 92)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, lfMenuFont, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, lfMenuFont, 224)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, lfStatusFont, 92)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, lfStatusFont, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, lfStatusFont, 316)
+ TEST_FIELD_SIZE (NONCLIENTMETRICSW, lfMessageFont, 92)
+ TEST_FIELD_ALIGN (NONCLIENTMETRICSW, lfMessageFont, 4)
+ TEST_FIELD_OFFSET(NONCLIENTMETRICSW, lfMessageFont, 408)
}
static void test_pack_PAINTSTRUCT(void)
{
/* PAINTSTRUCT (pack 4) */
- TEST_TYPE(PAINTSTRUCT, 64, 4);
- TEST_FIELD(PAINTSTRUCT, HDC, hdc, 0, 4, 4);
- TEST_FIELD(PAINTSTRUCT, BOOL, fErase, 4, 4, 4);
- TEST_FIELD(PAINTSTRUCT, RECT, rcPaint, 8, 16, 4);
- TEST_FIELD(PAINTSTRUCT, BOOL, fRestore, 24, 4, 4);
- TEST_FIELD(PAINTSTRUCT, BOOL, fIncUpdate, 28, 4, 4);
- TEST_FIELD(PAINTSTRUCT, BYTE[32], rgbReserved, 32, 32, 1);
+ TEST_TYPE_SIZE (PAINTSTRUCT, 64)
+ TEST_TYPE_ALIGN (PAINTSTRUCT, 4)
+ TEST_FIELD_SIZE (PAINTSTRUCT, hdc, 4)
+ TEST_FIELD_ALIGN (PAINTSTRUCT, hdc, 4)
+ TEST_FIELD_OFFSET(PAINTSTRUCT, hdc, 0)
+ TEST_FIELD_SIZE (PAINTSTRUCT, fErase, 4)
+ TEST_FIELD_ALIGN (PAINTSTRUCT, fErase, 4)
+ TEST_FIELD_OFFSET(PAINTSTRUCT, fErase, 4)
+ TEST_FIELD_SIZE (PAINTSTRUCT, rcPaint, 16)
+ TEST_FIELD_ALIGN (PAINTSTRUCT, rcPaint, 4)
+ TEST_FIELD_OFFSET(PAINTSTRUCT, rcPaint, 8)
+ TEST_FIELD_SIZE (PAINTSTRUCT, fRestore, 4)
+ TEST_FIELD_ALIGN (PAINTSTRUCT, fRestore, 4)
+ TEST_FIELD_OFFSET(PAINTSTRUCT, fRestore, 24)
+ TEST_FIELD_SIZE (PAINTSTRUCT, fIncUpdate, 4)
+ TEST_FIELD_ALIGN (PAINTSTRUCT, fIncUpdate, 4)
+ TEST_FIELD_OFFSET(PAINTSTRUCT, fIncUpdate, 28)
+ TEST_FIELD_SIZE (PAINTSTRUCT, rgbReserved, 32)
+ TEST_FIELD_ALIGN (PAINTSTRUCT, rgbReserved, 1)
+ TEST_FIELD_OFFSET(PAINTSTRUCT, rgbReserved, 32)
}
static void test_pack_PCOMBOBOXINFO(void)
{
/* PCOMBOBOXINFO */
- TEST_TYPE(PCOMBOBOXINFO, 4, 4);
- TEST_TYPE_POINTER(PCOMBOBOXINFO, 52, 4);
+ TEST_TYPE_SIZE (PCOMBOBOXINFO, 4)
+ TEST_TYPE_ALIGN (PCOMBOBOXINFO, 4)
+ TEST_TARGET_SIZE (PCOMBOBOXINFO, 52)
+ TEST_TARGET_ALIGN(PCOMBOBOXINFO, 4)
}
static void test_pack_PCOMPAREITEMSTRUCT(void)
{
/* PCOMPAREITEMSTRUCT */
- TEST_TYPE(PCOMPAREITEMSTRUCT, 4, 4);
- TEST_TYPE_POINTER(PCOMPAREITEMSTRUCT, 32, 4);
+ TEST_TYPE_SIZE (PCOMPAREITEMSTRUCT, 4)
+ TEST_TYPE_ALIGN (PCOMPAREITEMSTRUCT, 4)
+ TEST_TARGET_SIZE (PCOMPAREITEMSTRUCT, 32)
+ TEST_TARGET_ALIGN(PCOMPAREITEMSTRUCT, 4)
}
static void test_pack_PCOPYDATASTRUCT(void)
{
/* PCOPYDATASTRUCT */
- TEST_TYPE(PCOPYDATASTRUCT, 4, 4);
- TEST_TYPE_POINTER(PCOPYDATASTRUCT, 12, 4);
+ TEST_TYPE_SIZE (PCOPYDATASTRUCT, 4)
+ TEST_TYPE_ALIGN (PCOPYDATASTRUCT, 4)
+ TEST_TARGET_SIZE (PCOPYDATASTRUCT, 12)
+ TEST_TARGET_ALIGN(PCOPYDATASTRUCT, 4)
}
static void test_pack_PCURSORINFO(void)
{
/* PCURSORINFO */
- TEST_TYPE(PCURSORINFO, 4, 4);
- TEST_TYPE_POINTER(PCURSORINFO, 20, 4);
+ TEST_TYPE_SIZE (PCURSORINFO, 4)
+ TEST_TYPE_ALIGN (PCURSORINFO, 4)
+ TEST_TARGET_SIZE (PCURSORINFO, 20)
+ TEST_TARGET_ALIGN(PCURSORINFO, 4)
}
static void test_pack_PCWPRETSTRUCT(void)
{
/* PCWPRETSTRUCT */
- TEST_TYPE(PCWPRETSTRUCT, 4, 4);
- TEST_TYPE_POINTER(PCWPRETSTRUCT, 20, 4);
+ TEST_TYPE_SIZE (PCWPRETSTRUCT, 4)
+ TEST_TYPE_ALIGN (PCWPRETSTRUCT, 4)
+ TEST_TARGET_SIZE (PCWPRETSTRUCT, 20)
+ TEST_TARGET_ALIGN(PCWPRETSTRUCT, 4)
}
static void test_pack_PCWPSTRUCT(void)
{
/* PCWPSTRUCT */
- TEST_TYPE(PCWPSTRUCT, 4, 4);
- TEST_TYPE_POINTER(PCWPSTRUCT, 16, 4);
+ TEST_TYPE_SIZE (PCWPSTRUCT, 4)
+ TEST_TYPE_ALIGN (PCWPSTRUCT, 4)
+ TEST_TARGET_SIZE (PCWPSTRUCT, 16)
+ TEST_TARGET_ALIGN(PCWPSTRUCT, 4)
}
static void test_pack_PDEBUGHOOKINFO(void)
{
/* PDEBUGHOOKINFO */
- TEST_TYPE(PDEBUGHOOKINFO, 4, 4);
- TEST_TYPE_POINTER(PDEBUGHOOKINFO, 20, 4);
+ TEST_TYPE_SIZE (PDEBUGHOOKINFO, 4)
+ TEST_TYPE_ALIGN (PDEBUGHOOKINFO, 4)
+ TEST_TARGET_SIZE (PDEBUGHOOKINFO, 20)
+ TEST_TARGET_ALIGN(PDEBUGHOOKINFO, 4)
}
static void test_pack_PDELETEITEMSTRUCT(void)
{
/* PDELETEITEMSTRUCT */
- TEST_TYPE(PDELETEITEMSTRUCT, 4, 4);
- TEST_TYPE_POINTER(PDELETEITEMSTRUCT, 20, 4);
+ TEST_TYPE_SIZE (PDELETEITEMSTRUCT, 4)
+ TEST_TYPE_ALIGN (PDELETEITEMSTRUCT, 4)
+ TEST_TARGET_SIZE (PDELETEITEMSTRUCT, 20)
+ TEST_TARGET_ALIGN(PDELETEITEMSTRUCT, 4)
}
static void test_pack_PDLGITEMTEMPLATEA(void)
{
/* PDLGITEMTEMPLATEA */
- TEST_TYPE(PDLGITEMTEMPLATEA, 4, 4);
- TEST_TYPE_POINTER(PDLGITEMTEMPLATEA, 18, 2);
+ TEST_TYPE_SIZE (PDLGITEMTEMPLATEA, 4)
+ TEST_TYPE_ALIGN (PDLGITEMTEMPLATEA, 4)
+ TEST_TARGET_SIZE (PDLGITEMTEMPLATEA, 18)
+ TEST_TARGET_ALIGN(PDLGITEMTEMPLATEA, 2)
}
static void test_pack_PDLGITEMTEMPLATEW(void)
{
/* PDLGITEMTEMPLATEW */
- TEST_TYPE(PDLGITEMTEMPLATEW, 4, 4);
- TEST_TYPE_POINTER(PDLGITEMTEMPLATEW, 18, 2);
+ TEST_TYPE_SIZE (PDLGITEMTEMPLATEW, 4)
+ TEST_TYPE_ALIGN (PDLGITEMTEMPLATEW, 4)
+ TEST_TARGET_SIZE (PDLGITEMTEMPLATEW, 18)
+ TEST_TARGET_ALIGN(PDLGITEMTEMPLATEW, 2)
}
static void test_pack_PDRAWITEMSTRUCT(void)
{
/* PDRAWITEMSTRUCT */
- TEST_TYPE(PDRAWITEMSTRUCT, 4, 4);
- TEST_TYPE_POINTER(PDRAWITEMSTRUCT, 48, 4);
+ TEST_TYPE_SIZE (PDRAWITEMSTRUCT, 4)
+ TEST_TYPE_ALIGN (PDRAWITEMSTRUCT, 4)
+ TEST_TARGET_SIZE (PDRAWITEMSTRUCT, 48)
+ TEST_TARGET_ALIGN(PDRAWITEMSTRUCT, 4)
}
static void test_pack_PEVENTMSG(void)
{
/* PEVENTMSG */
- TEST_TYPE(PEVENTMSG, 4, 4);
- TEST_TYPE_POINTER(PEVENTMSG, 20, 4);
+ TEST_TYPE_SIZE (PEVENTMSG, 4)
+ TEST_TYPE_ALIGN (PEVENTMSG, 4)
+ TEST_TARGET_SIZE (PEVENTMSG, 20)
+ TEST_TARGET_ALIGN(PEVENTMSG, 4)
}
static void test_pack_PFLASHWINFO(void)
{
/* PFLASHWINFO */
- TEST_TYPE(PFLASHWINFO, 4, 4);
- TEST_TYPE_POINTER(PFLASHWINFO, 20, 4);
+ TEST_TYPE_SIZE (PFLASHWINFO, 4)
+ TEST_TYPE_ALIGN (PFLASHWINFO, 4)
+ TEST_TARGET_SIZE (PFLASHWINFO, 20)
+ TEST_TARGET_ALIGN(PFLASHWINFO, 4)
}
static void test_pack_PGUITHREADINFO(void)
{
/* PGUITHREADINFO */
- TEST_TYPE(PGUITHREADINFO, 4, 4);
- TEST_TYPE_POINTER(PGUITHREADINFO, 48, 4);
+ TEST_TYPE_SIZE (PGUITHREADINFO, 4)
+ TEST_TYPE_ALIGN (PGUITHREADINFO, 4)
+ TEST_TARGET_SIZE (PGUITHREADINFO, 48)
+ TEST_TARGET_ALIGN(PGUITHREADINFO, 4)
}
static void test_pack_PHARDWAREHOOKSTRUCT(void)
{
/* PHARDWAREHOOKSTRUCT */
- TEST_TYPE(PHARDWAREHOOKSTRUCT, 4, 4);
- TEST_TYPE_POINTER(PHARDWAREHOOKSTRUCT, 16, 4);
+ TEST_TYPE_SIZE (PHARDWAREHOOKSTRUCT, 4)
+ TEST_TYPE_ALIGN (PHARDWAREHOOKSTRUCT, 4)
+ TEST_TARGET_SIZE (PHARDWAREHOOKSTRUCT, 16)
+ TEST_TARGET_ALIGN(PHARDWAREHOOKSTRUCT, 4)
}
static void test_pack_PHARDWAREINPUT(void)
{
/* PHARDWAREINPUT */
- TEST_TYPE(PHARDWAREINPUT, 4, 4);
- TEST_TYPE_POINTER(PHARDWAREINPUT, 8, 4);
+ TEST_TYPE_SIZE (PHARDWAREINPUT, 4)
+ TEST_TYPE_ALIGN (PHARDWAREINPUT, 4)
+ TEST_TARGET_SIZE (PHARDWAREINPUT, 8)
+ TEST_TARGET_ALIGN(PHARDWAREINPUT, 4)
}
static void test_pack_PHDEVNOTIFY(void)
{
/* PHDEVNOTIFY */
- TEST_TYPE(PHDEVNOTIFY, 4, 4);
- TEST_TYPE_POINTER(PHDEVNOTIFY, 4, 4);
+ TEST_TYPE_SIZE (PHDEVNOTIFY, 4)
+ TEST_TYPE_ALIGN (PHDEVNOTIFY, 4)
+ TEST_TARGET_SIZE (PHDEVNOTIFY, 4)
+ TEST_TARGET_ALIGN(PHDEVNOTIFY, 4)
}
static void test_pack_PHELPWININFOA(void)
{
/* PHELPWININFOA */
- TEST_TYPE(PHELPWININFOA, 4, 4);
- TEST_TYPE_POINTER(PHELPWININFOA, 28, 4);
+ TEST_TYPE_SIZE (PHELPWININFOA, 4)
+ TEST_TYPE_ALIGN (PHELPWININFOA, 4)
+ TEST_TARGET_SIZE (PHELPWININFOA, 28)
+ TEST_TARGET_ALIGN(PHELPWININFOA, 4)
}
static void test_pack_PHELPWININFOW(void)
{
/* PHELPWININFOW */
- TEST_TYPE(PHELPWININFOW, 4, 4);
- TEST_TYPE_POINTER(PHELPWININFOW, 28, 4);
+ TEST_TYPE_SIZE (PHELPWININFOW, 4)
+ TEST_TYPE_ALIGN (PHELPWININFOW, 4)
+ TEST_TARGET_SIZE (PHELPWININFOW, 28)
+ TEST_TARGET_ALIGN(PHELPWININFOW, 4)
}
static void test_pack_PICONINFO(void)
{
/* PICONINFO */
- TEST_TYPE(PICONINFO, 4, 4);
- TEST_TYPE_POINTER(PICONINFO, 20, 4);
+ TEST_TYPE_SIZE (PICONINFO, 4)
+ TEST_TYPE_ALIGN (PICONINFO, 4)
+ TEST_TARGET_SIZE (PICONINFO, 20)
+ TEST_TARGET_ALIGN(PICONINFO, 4)
}
static void test_pack_PICONMETRICSA(void)
{
/* PICONMETRICSA */
- TEST_TYPE(PICONMETRICSA, 4, 4);
- TEST_TYPE_POINTER(PICONMETRICSA, 76, 4);
+ TEST_TYPE_SIZE (PICONMETRICSA, 4)
+ TEST_TYPE_ALIGN (PICONMETRICSA, 4)
+ TEST_TARGET_SIZE (PICONMETRICSA, 76)
+ TEST_TARGET_ALIGN(PICONMETRICSA, 4)
}
static void test_pack_PICONMETRICSW(void)
{
/* PICONMETRICSW */
- TEST_TYPE(PICONMETRICSW, 4, 4);
- TEST_TYPE_POINTER(PICONMETRICSW, 108, 4);
+ TEST_TYPE_SIZE (PICONMETRICSW, 4)
+ TEST_TYPE_ALIGN (PICONMETRICSW, 4)
+ TEST_TARGET_SIZE (PICONMETRICSW, 108)
+ TEST_TARGET_ALIGN(PICONMETRICSW, 4)
}
static void test_pack_PINPUT(void)
{
/* PINPUT */
- TEST_TYPE(PINPUT, 4, 4);
+ TEST_TYPE_SIZE (PINPUT, 4)
+ TEST_TYPE_ALIGN (PINPUT, 4)
}
static void test_pack_PKBDLLHOOKSTRUCT(void)
{
/* PKBDLLHOOKSTRUCT */
- TEST_TYPE(PKBDLLHOOKSTRUCT, 4, 4);
- TEST_TYPE_POINTER(PKBDLLHOOKSTRUCT, 20, 4);
+ TEST_TYPE_SIZE (PKBDLLHOOKSTRUCT, 4)
+ TEST_TYPE_ALIGN (PKBDLLHOOKSTRUCT, 4)
+ TEST_TARGET_SIZE (PKBDLLHOOKSTRUCT, 20)
+ TEST_TARGET_ALIGN(PKBDLLHOOKSTRUCT, 4)
}
static void test_pack_PKEYBDINPUT(void)
{
/* PKEYBDINPUT */
- TEST_TYPE(PKEYBDINPUT, 4, 4);
- TEST_TYPE_POINTER(PKEYBDINPUT, 16, 4);
+ TEST_TYPE_SIZE (PKEYBDINPUT, 4)
+ TEST_TYPE_ALIGN (PKEYBDINPUT, 4)
+ TEST_TARGET_SIZE (PKEYBDINPUT, 16)
+ TEST_TARGET_ALIGN(PKEYBDINPUT, 4)
}
static void test_pack_PMDINEXTMENU(void)
{
/* PMDINEXTMENU */
- TEST_TYPE(PMDINEXTMENU, 4, 4);
- TEST_TYPE_POINTER(PMDINEXTMENU, 12, 4);
+ TEST_TYPE_SIZE (PMDINEXTMENU, 4)
+ TEST_TYPE_ALIGN (PMDINEXTMENU, 4)
+ TEST_TARGET_SIZE (PMDINEXTMENU, 12)
+ TEST_TARGET_ALIGN(PMDINEXTMENU, 4)
}
static void test_pack_PMEASUREITEMSTRUCT(void)
{
/* PMEASUREITEMSTRUCT */
- TEST_TYPE(PMEASUREITEMSTRUCT, 4, 4);
- TEST_TYPE_POINTER(PMEASUREITEMSTRUCT, 24, 4);
+ TEST_TYPE_SIZE (PMEASUREITEMSTRUCT, 4)
+ TEST_TYPE_ALIGN (PMEASUREITEMSTRUCT, 4)
+ TEST_TARGET_SIZE (PMEASUREITEMSTRUCT, 24)
+ TEST_TARGET_ALIGN(PMEASUREITEMSTRUCT, 4)
}
static void test_pack_PMENUITEMTEMPLATE(void)
{
/* PMENUITEMTEMPLATE */
- TEST_TYPE(PMENUITEMTEMPLATE, 4, 4);
- TEST_TYPE_POINTER(PMENUITEMTEMPLATE, 6, 2);
+ TEST_TYPE_SIZE (PMENUITEMTEMPLATE, 4)
+ TEST_TYPE_ALIGN (PMENUITEMTEMPLATE, 4)
+ TEST_TARGET_SIZE (PMENUITEMTEMPLATE, 6)
+ TEST_TARGET_ALIGN(PMENUITEMTEMPLATE, 2)
}
static void test_pack_PMENUITEMTEMPLATEHEADER(void)
{
/* PMENUITEMTEMPLATEHEADER */
- TEST_TYPE(PMENUITEMTEMPLATEHEADER, 4, 4);
- TEST_TYPE_POINTER(PMENUITEMTEMPLATEHEADER, 4, 2);
+ TEST_TYPE_SIZE (PMENUITEMTEMPLATEHEADER, 4)
+ TEST_TYPE_ALIGN (PMENUITEMTEMPLATEHEADER, 4)
+ TEST_TARGET_SIZE (PMENUITEMTEMPLATEHEADER, 4)
+ TEST_TARGET_ALIGN(PMENUITEMTEMPLATEHEADER, 2)
}
static void test_pack_PMINIMIZEDMETRICS(void)
{
/* PMINIMIZEDMETRICS */
- TEST_TYPE(PMINIMIZEDMETRICS, 4, 4);
- TEST_TYPE_POINTER(PMINIMIZEDMETRICS, 20, 4);
+ TEST_TYPE_SIZE (PMINIMIZEDMETRICS, 4)
+ TEST_TYPE_ALIGN (PMINIMIZEDMETRICS, 4)
+ TEST_TARGET_SIZE (PMINIMIZEDMETRICS, 20)
+ TEST_TARGET_ALIGN(PMINIMIZEDMETRICS, 4)
}
static void test_pack_PMINMAXINFO(void)
{
/* PMINMAXINFO */
- TEST_TYPE(PMINMAXINFO, 4, 4);
- TEST_TYPE_POINTER(PMINMAXINFO, 40, 4);
+ TEST_TYPE_SIZE (PMINMAXINFO, 4)
+ TEST_TYPE_ALIGN (PMINMAXINFO, 4)
+ TEST_TARGET_SIZE (PMINMAXINFO, 40)
+ TEST_TARGET_ALIGN(PMINMAXINFO, 4)
}
static void test_pack_PMOUSEHOOKSTRUCT(void)
{
/* PMOUSEHOOKSTRUCT */
- TEST_TYPE(PMOUSEHOOKSTRUCT, 4, 4);
- TEST_TYPE_POINTER(PMOUSEHOOKSTRUCT, 20, 4);
+ TEST_TYPE_SIZE (PMOUSEHOOKSTRUCT, 4)
+ TEST_TYPE_ALIGN (PMOUSEHOOKSTRUCT, 4)
+ TEST_TARGET_SIZE (PMOUSEHOOKSTRUCT, 20)
+ TEST_TARGET_ALIGN(PMOUSEHOOKSTRUCT, 4)
}
static void test_pack_PMOUSEINPUT(void)
{
/* PMOUSEINPUT */
- TEST_TYPE(PMOUSEINPUT, 4, 4);
- TEST_TYPE_POINTER(PMOUSEINPUT, 24, 4);
+ TEST_TYPE_SIZE (PMOUSEINPUT, 4)
+ TEST_TYPE_ALIGN (PMOUSEINPUT, 4)
+ TEST_TARGET_SIZE (PMOUSEINPUT, 24)
+ TEST_TARGET_ALIGN(PMOUSEINPUT, 4)
}
static void test_pack_PMSG(void)
{
/* PMSG */
- TEST_TYPE(PMSG, 4, 4);
- TEST_TYPE_POINTER(PMSG, 28, 4);
+ TEST_TYPE_SIZE (PMSG, 4)
+ TEST_TYPE_ALIGN (PMSG, 4)
+ TEST_TARGET_SIZE (PMSG, 28)
+ TEST_TARGET_ALIGN(PMSG, 4)
}
static void test_pack_PMSGBOXPARAMSA(void)
{
/* PMSGBOXPARAMSA */
- TEST_TYPE(PMSGBOXPARAMSA, 4, 4);
- TEST_TYPE_POINTER(PMSGBOXPARAMSA, 40, 4);
+ TEST_TYPE_SIZE (PMSGBOXPARAMSA, 4)
+ TEST_TYPE_ALIGN (PMSGBOXPARAMSA, 4)
+ TEST_TARGET_SIZE (PMSGBOXPARAMSA, 40)
+ TEST_TARGET_ALIGN(PMSGBOXPARAMSA, 4)
}
static void test_pack_PMSGBOXPARAMSW(void)
{
/* PMSGBOXPARAMSW */
- TEST_TYPE(PMSGBOXPARAMSW, 4, 4);
- TEST_TYPE_POINTER(PMSGBOXPARAMSW, 40, 4);
+ TEST_TYPE_SIZE (PMSGBOXPARAMSW, 4)
+ TEST_TYPE_ALIGN (PMSGBOXPARAMSW, 4)
+ TEST_TARGET_SIZE (PMSGBOXPARAMSW, 40)
+ TEST_TARGET_ALIGN(PMSGBOXPARAMSW, 4)
}
static void test_pack_PMSLLHOOKSTRUCT(void)
{
/* PMSLLHOOKSTRUCT */
- TEST_TYPE(PMSLLHOOKSTRUCT, 4, 4);
- TEST_TYPE_POINTER(PMSLLHOOKSTRUCT, 24, 4);
+ TEST_TYPE_SIZE (PMSLLHOOKSTRUCT, 4)
+ TEST_TYPE_ALIGN (PMSLLHOOKSTRUCT, 4)
+ TEST_TARGET_SIZE (PMSLLHOOKSTRUCT, 24)
+ TEST_TARGET_ALIGN(PMSLLHOOKSTRUCT, 4)
}
static void test_pack_PMULTIKEYHELPA(void)
{
/* PMULTIKEYHELPA */
- TEST_TYPE(PMULTIKEYHELPA, 4, 4);
- TEST_TYPE_POINTER(PMULTIKEYHELPA, 8, 4);
+ TEST_TYPE_SIZE (PMULTIKEYHELPA, 4)
+ TEST_TYPE_ALIGN (PMULTIKEYHELPA, 4)
+ TEST_TARGET_SIZE (PMULTIKEYHELPA, 8)
+ TEST_TARGET_ALIGN(PMULTIKEYHELPA, 4)
}
static void test_pack_PMULTIKEYHELPW(void)
{
/* PMULTIKEYHELPW */
- TEST_TYPE(PMULTIKEYHELPW, 4, 4);
- TEST_TYPE_POINTER(PMULTIKEYHELPW, 8, 4);
+ TEST_TYPE_SIZE (PMULTIKEYHELPW, 4)
+ TEST_TYPE_ALIGN (PMULTIKEYHELPW, 4)
+ TEST_TARGET_SIZE (PMULTIKEYHELPW, 8)
+ TEST_TARGET_ALIGN(PMULTIKEYHELPW, 4)
}
static void test_pack_PNONCLIENTMETRICSA(void)
{
/* PNONCLIENTMETRICSA */
- TEST_TYPE(PNONCLIENTMETRICSA, 4, 4);
- TEST_TYPE_POINTER(PNONCLIENTMETRICSA, 340, 4);
+ TEST_TYPE_SIZE (PNONCLIENTMETRICSA, 4)
+ TEST_TYPE_ALIGN (PNONCLIENTMETRICSA, 4)
+ TEST_TARGET_SIZE (PNONCLIENTMETRICSA, 340)
+ TEST_TARGET_ALIGN(PNONCLIENTMETRICSA, 4)
}
static void test_pack_PNONCLIENTMETRICSW(void)
{
/* PNONCLIENTMETRICSW */
- TEST_TYPE(PNONCLIENTMETRICSW, 4, 4);
- TEST_TYPE_POINTER(PNONCLIENTMETRICSW, 500, 4);
+ TEST_TYPE_SIZE (PNONCLIENTMETRICSW, 4)
+ TEST_TYPE_ALIGN (PNONCLIENTMETRICSW, 4)
+ TEST_TARGET_SIZE (PNONCLIENTMETRICSW, 500)
+ TEST_TARGET_ALIGN(PNONCLIENTMETRICSW, 4)
}
static void test_pack_PPAINTSTRUCT(void)
{
/* PPAINTSTRUCT */
- TEST_TYPE(PPAINTSTRUCT, 4, 4);
- TEST_TYPE_POINTER(PPAINTSTRUCT, 64, 4);
+ TEST_TYPE_SIZE (PPAINTSTRUCT, 4)
+ TEST_TYPE_ALIGN (PPAINTSTRUCT, 4)
+ TEST_TARGET_SIZE (PPAINTSTRUCT, 64)
+ TEST_TARGET_ALIGN(PPAINTSTRUCT, 4)
}
static void test_pack_PROPENUMPROCA(void)
{
/* PROPENUMPROCA */
- TEST_TYPE(PROPENUMPROCA, 4, 4);
+ TEST_TYPE_SIZE (PROPENUMPROCA, 4)
+ TEST_TYPE_ALIGN (PROPENUMPROCA, 4)
}
static void test_pack_PROPENUMPROCEXA(void)
{
/* PROPENUMPROCEXA */
- TEST_TYPE(PROPENUMPROCEXA, 4, 4);
+ TEST_TYPE_SIZE (PROPENUMPROCEXA, 4)
+ TEST_TYPE_ALIGN (PROPENUMPROCEXA, 4)
}
static void test_pack_PROPENUMPROCEXW(void)
{
/* PROPENUMPROCEXW */
- TEST_TYPE(PROPENUMPROCEXW, 4, 4);
+ TEST_TYPE_SIZE (PROPENUMPROCEXW, 4)
+ TEST_TYPE_ALIGN (PROPENUMPROCEXW, 4)
}
static void test_pack_PROPENUMPROCW(void)
{
/* PROPENUMPROCW */
- TEST_TYPE(PROPENUMPROCW, 4, 4);
+ TEST_TYPE_SIZE (PROPENUMPROCW, 4)
+ TEST_TYPE_ALIGN (PROPENUMPROCW, 4)
}
static void test_pack_PTITLEBARINFO(void)
{
/* PTITLEBARINFO */
- TEST_TYPE(PTITLEBARINFO, 4, 4);
- TEST_TYPE_POINTER(PTITLEBARINFO, 44, 4);
+ TEST_TYPE_SIZE (PTITLEBARINFO, 4)
+ TEST_TYPE_ALIGN (PTITLEBARINFO, 4)
+ TEST_TARGET_SIZE (PTITLEBARINFO, 44)
+ TEST_TARGET_ALIGN(PTITLEBARINFO, 4)
}
static void test_pack_PUSEROBJECTFLAGS(void)
{
/* PUSEROBJECTFLAGS */
- TEST_TYPE(PUSEROBJECTFLAGS, 4, 4);
- TEST_TYPE_POINTER(PUSEROBJECTFLAGS, 12, 4);
+ TEST_TYPE_SIZE (PUSEROBJECTFLAGS, 4)
+ TEST_TYPE_ALIGN (PUSEROBJECTFLAGS, 4)
+ TEST_TARGET_SIZE (PUSEROBJECTFLAGS, 12)
+ TEST_TARGET_ALIGN(PUSEROBJECTFLAGS, 4)
}
static void test_pack_PWINDOWINFO(void)
{
/* PWINDOWINFO */
- TEST_TYPE(PWINDOWINFO, 4, 4);
- TEST_TYPE_POINTER(PWINDOWINFO, 60, 4);
+ TEST_TYPE_SIZE (PWINDOWINFO, 4)
+ TEST_TYPE_ALIGN (PWINDOWINFO, 4)
+ TEST_TARGET_SIZE (PWINDOWINFO, 60)
+ TEST_TARGET_ALIGN(PWINDOWINFO, 4)
}
static void test_pack_PWINDOWPLACEMENT(void)
{
/* PWINDOWPLACEMENT */
- TEST_TYPE(PWINDOWPLACEMENT, 4, 4);
- TEST_TYPE_POINTER(PWINDOWPLACEMENT, 44, 4);
+ TEST_TYPE_SIZE (PWINDOWPLACEMENT, 4)
+ TEST_TYPE_ALIGN (PWINDOWPLACEMENT, 4)
+ TEST_TARGET_SIZE (PWINDOWPLACEMENT, 44)
+ TEST_TARGET_ALIGN(PWINDOWPLACEMENT, 4)
}
static void test_pack_PWINDOWPOS(void)
{
/* PWINDOWPOS */
- TEST_TYPE(PWINDOWPOS, 4, 4);
- TEST_TYPE_POINTER(PWINDOWPOS, 28, 4);
+ TEST_TYPE_SIZE (PWINDOWPOS, 4)
+ TEST_TYPE_ALIGN (PWINDOWPOS, 4)
+ TEST_TARGET_SIZE (PWINDOWPOS, 28)
+ TEST_TARGET_ALIGN(PWINDOWPOS, 4)
}
static void test_pack_PWNDCLASSA(void)
{
/* PWNDCLASSA */
- TEST_TYPE(PWNDCLASSA, 4, 4);
- TEST_TYPE_POINTER(PWNDCLASSA, 40, 4);
+ TEST_TYPE_SIZE (PWNDCLASSA, 4)
+ TEST_TYPE_ALIGN (PWNDCLASSA, 4)
+ TEST_TARGET_SIZE (PWNDCLASSA, 40)
+ TEST_TARGET_ALIGN(PWNDCLASSA, 4)
}
static void test_pack_PWNDCLASSEXA(void)
{
/* PWNDCLASSEXA */
- TEST_TYPE(PWNDCLASSEXA, 4, 4);
- TEST_TYPE_POINTER(PWNDCLASSEXA, 48, 4);
+ TEST_TYPE_SIZE (PWNDCLASSEXA, 4)
+ TEST_TYPE_ALIGN (PWNDCLASSEXA, 4)
+ TEST_TARGET_SIZE (PWNDCLASSEXA, 48)
+ TEST_TARGET_ALIGN(PWNDCLASSEXA, 4)
}
static void test_pack_PWNDCLASSEXW(void)
{
/* PWNDCLASSEXW */
- TEST_TYPE(PWNDCLASSEXW, 4, 4);
- TEST_TYPE_POINTER(PWNDCLASSEXW, 48, 4);
+ TEST_TYPE_SIZE (PWNDCLASSEXW, 4)
+ TEST_TYPE_ALIGN (PWNDCLASSEXW, 4)
+ TEST_TARGET_SIZE (PWNDCLASSEXW, 48)
+ TEST_TARGET_ALIGN(PWNDCLASSEXW, 4)
}
static void test_pack_PWNDCLASSW(void)
{
/* PWNDCLASSW */
- TEST_TYPE(PWNDCLASSW, 4, 4);
- TEST_TYPE_POINTER(PWNDCLASSW, 40, 4);
+ TEST_TYPE_SIZE (PWNDCLASSW, 4)
+ TEST_TYPE_ALIGN (PWNDCLASSW, 4)
+ TEST_TARGET_SIZE (PWNDCLASSW, 40)
+ TEST_TARGET_ALIGN(PWNDCLASSW, 4)
}
static void test_pack_SCROLLINFO(void)
{
/* SCROLLINFO (pack 4) */
- TEST_TYPE(SCROLLINFO, 28, 4);
- TEST_FIELD(SCROLLINFO, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(SCROLLINFO, UINT, fMask, 4, 4, 4);
- TEST_FIELD(SCROLLINFO, INT, nMin, 8, 4, 4);
- TEST_FIELD(SCROLLINFO, INT, nMax, 12, 4, 4);
- TEST_FIELD(SCROLLINFO, UINT, nPage, 16, 4, 4);
- TEST_FIELD(SCROLLINFO, INT, nPos, 20, 4, 4);
- TEST_FIELD(SCROLLINFO, INT, nTrackPos, 24, 4, 4);
+ TEST_TYPE_SIZE (SCROLLINFO, 28)
+ TEST_TYPE_ALIGN (SCROLLINFO, 4)
+ TEST_FIELD_SIZE (SCROLLINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (SCROLLINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(SCROLLINFO, cbSize, 0)
+ TEST_FIELD_SIZE (SCROLLINFO, fMask, 4)
+ TEST_FIELD_ALIGN (SCROLLINFO, fMask, 4)
+ TEST_FIELD_OFFSET(SCROLLINFO, fMask, 4)
+ TEST_FIELD_SIZE (SCROLLINFO, nMin, 4)
+ TEST_FIELD_ALIGN (SCROLLINFO, nMin, 4)
+ TEST_FIELD_OFFSET(SCROLLINFO, nMin, 8)
+ TEST_FIELD_SIZE (SCROLLINFO, nMax, 4)
+ TEST_FIELD_ALIGN (SCROLLINFO, nMax, 4)
+ TEST_FIELD_OFFSET(SCROLLINFO, nMax, 12)
+ TEST_FIELD_SIZE (SCROLLINFO, nPage, 4)
+ TEST_FIELD_ALIGN (SCROLLINFO, nPage, 4)
+ TEST_FIELD_OFFSET(SCROLLINFO, nPage, 16)
+ TEST_FIELD_SIZE (SCROLLINFO, nPos, 4)
+ TEST_FIELD_ALIGN (SCROLLINFO, nPos, 4)
+ TEST_FIELD_OFFSET(SCROLLINFO, nPos, 20)
+ TEST_FIELD_SIZE (SCROLLINFO, nTrackPos, 4)
+ TEST_FIELD_ALIGN (SCROLLINFO, nTrackPos, 4)
+ TEST_FIELD_OFFSET(SCROLLINFO, nTrackPos, 24)
}
static void test_pack_SENDASYNCPROC(void)
{
/* SENDASYNCPROC */
- TEST_TYPE(SENDASYNCPROC, 4, 4);
+ TEST_TYPE_SIZE (SENDASYNCPROC, 4)
+ TEST_TYPE_ALIGN (SENDASYNCPROC, 4)
}
static void test_pack_SERIALKEYSA(void)
{
/* SERIALKEYSA (pack 4) */
- TEST_TYPE(SERIALKEYSA, 28, 4);
- TEST_FIELD(SERIALKEYSA, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(SERIALKEYSA, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(SERIALKEYSA, LPSTR, lpszActivePort, 8, 4, 4);
- TEST_FIELD(SERIALKEYSA, LPSTR, lpszPort, 12, 4, 4);
- TEST_FIELD(SERIALKEYSA, UINT, iBaudRate, 16, 4, 4);
- TEST_FIELD(SERIALKEYSA, UINT, iPortState, 20, 4, 4);
- TEST_FIELD(SERIALKEYSA, UINT, iActive, 24, 4, 4);
+ TEST_TYPE_SIZE (SERIALKEYSA, 28)
+ TEST_TYPE_ALIGN (SERIALKEYSA, 4)
+ TEST_FIELD_SIZE (SERIALKEYSA, cbSize, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSA, cbSize, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSA, cbSize, 0)
+ TEST_FIELD_SIZE (SERIALKEYSA, dwFlags, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSA, dwFlags, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSA, dwFlags, 4)
+ TEST_FIELD_SIZE (SERIALKEYSA, lpszActivePort, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSA, lpszActivePort, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSA, lpszActivePort, 8)
+ TEST_FIELD_SIZE (SERIALKEYSA, lpszPort, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSA, lpszPort, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSA, lpszPort, 12)
+ TEST_FIELD_SIZE (SERIALKEYSA, iBaudRate, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSA, iBaudRate, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSA, iBaudRate, 16)
+ TEST_FIELD_SIZE (SERIALKEYSA, iPortState, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSA, iPortState, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSA, iPortState, 20)
+ TEST_FIELD_SIZE (SERIALKEYSA, iActive, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSA, iActive, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSA, iActive, 24)
}
static void test_pack_SERIALKEYSW(void)
{
/* SERIALKEYSW (pack 4) */
- TEST_TYPE(SERIALKEYSW, 28, 4);
- TEST_FIELD(SERIALKEYSW, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(SERIALKEYSW, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(SERIALKEYSW, LPWSTR, lpszActivePort, 8, 4, 4);
- TEST_FIELD(SERIALKEYSW, LPWSTR, lpszPort, 12, 4, 4);
- TEST_FIELD(SERIALKEYSW, UINT, iBaudRate, 16, 4, 4);
- TEST_FIELD(SERIALKEYSW, UINT, iPortState, 20, 4, 4);
- TEST_FIELD(SERIALKEYSW, UINT, iActive, 24, 4, 4);
+ TEST_TYPE_SIZE (SERIALKEYSW, 28)
+ TEST_TYPE_ALIGN (SERIALKEYSW, 4)
+ TEST_FIELD_SIZE (SERIALKEYSW, cbSize, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSW, cbSize, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSW, cbSize, 0)
+ TEST_FIELD_SIZE (SERIALKEYSW, dwFlags, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSW, dwFlags, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSW, dwFlags, 4)
+ TEST_FIELD_SIZE (SERIALKEYSW, lpszActivePort, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSW, lpszActivePort, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSW, lpszActivePort, 8)
+ TEST_FIELD_SIZE (SERIALKEYSW, lpszPort, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSW, lpszPort, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSW, lpszPort, 12)
+ TEST_FIELD_SIZE (SERIALKEYSW, iBaudRate, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSW, iBaudRate, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSW, iBaudRate, 16)
+ TEST_FIELD_SIZE (SERIALKEYSW, iPortState, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSW, iPortState, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSW, iPortState, 20)
+ TEST_FIELD_SIZE (SERIALKEYSW, iActive, 4)
+ TEST_FIELD_ALIGN (SERIALKEYSW, iActive, 4)
+ TEST_FIELD_OFFSET(SERIALKEYSW, iActive, 24)
}
static void test_pack_SOUNDSENTRYA(void)
{
/* SOUNDSENTRYA (pack 4) */
- TEST_TYPE(SOUNDSENTRYA, 48, 4);
- TEST_FIELD(SOUNDSENTRYA, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(SOUNDSENTRYA, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(SOUNDSENTRYA, DWORD, iFSTextEffect, 8, 4, 4);
- TEST_FIELD(SOUNDSENTRYA, DWORD, iFSTextEffectMSec, 12, 4, 4);
- TEST_FIELD(SOUNDSENTRYA, DWORD, iFSTextEffectColorBits, 16, 4, 4);
- TEST_FIELD(SOUNDSENTRYA, DWORD, iFSGrafEffect, 20, 4, 4);
- TEST_FIELD(SOUNDSENTRYA, DWORD, iFSGrafEffectMSec, 24, 4, 4);
- TEST_FIELD(SOUNDSENTRYA, DWORD, iFSGrafEffectColor, 28, 4, 4);
- TEST_FIELD(SOUNDSENTRYA, DWORD, iWindowsEffect, 32, 4, 4);
- TEST_FIELD(SOUNDSENTRYA, DWORD, iWindowsEffectMSec, 36, 4, 4);
- TEST_FIELD(SOUNDSENTRYA, LPSTR, lpszWindowsEffectDLL, 40, 4, 4);
- TEST_FIELD(SOUNDSENTRYA, DWORD, iWindowsEffectOrdinal, 44, 4, 4);
+ TEST_TYPE_SIZE (SOUNDSENTRYA, 48)
+ TEST_TYPE_ALIGN (SOUNDSENTRYA, 4)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, cbSize, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, cbSize, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, cbSize, 0)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, dwFlags, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, dwFlags, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, dwFlags, 4)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, iFSTextEffect, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, iFSTextEffect, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, iFSTextEffect, 8)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, iFSTextEffectMSec, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, iFSTextEffectMSec, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, iFSTextEffectMSec, 12)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, iFSTextEffectColorBits, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, iFSTextEffectColorBits, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, iFSTextEffectColorBits, 16)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, iFSGrafEffect, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, iFSGrafEffect, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, iFSGrafEffect, 20)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, iFSGrafEffectMSec, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, iFSGrafEffectMSec, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, iFSGrafEffectMSec, 24)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, iFSGrafEffectColor, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, iFSGrafEffectColor, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, iFSGrafEffectColor, 28)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, iWindowsEffect, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, iWindowsEffect, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, iWindowsEffect, 32)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, iWindowsEffectMSec, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, iWindowsEffectMSec, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, iWindowsEffectMSec, 36)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, lpszWindowsEffectDLL, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, lpszWindowsEffectDLL, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, lpszWindowsEffectDLL, 40)
+ TEST_FIELD_SIZE (SOUNDSENTRYA, iWindowsEffectOrdinal, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYA, iWindowsEffectOrdinal, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYA, iWindowsEffectOrdinal, 44)
}
static void test_pack_SOUNDSENTRYW(void)
{
/* SOUNDSENTRYW (pack 4) */
- TEST_TYPE(SOUNDSENTRYW, 48, 4);
- TEST_FIELD(SOUNDSENTRYW, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(SOUNDSENTRYW, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(SOUNDSENTRYW, DWORD, iFSTextEffect, 8, 4, 4);
- TEST_FIELD(SOUNDSENTRYW, DWORD, iFSTextEffectMSec, 12, 4, 4);
- TEST_FIELD(SOUNDSENTRYW, DWORD, iFSTextEffectColorBits, 16, 4, 4);
- TEST_FIELD(SOUNDSENTRYW, DWORD, iFSGrafEffect, 20, 4, 4);
- TEST_FIELD(SOUNDSENTRYW, DWORD, iFSGrafEffectMSec, 24, 4, 4);
- TEST_FIELD(SOUNDSENTRYW, DWORD, iFSGrafEffectColor, 28, 4, 4);
- TEST_FIELD(SOUNDSENTRYW, DWORD, iWindowsEffect, 32, 4, 4);
- TEST_FIELD(SOUNDSENTRYW, DWORD, iWindowsEffectMSec, 36, 4, 4);
- TEST_FIELD(SOUNDSENTRYW, LPWSTR, lpszWindowsEffectDLL, 40, 4, 4);
- TEST_FIELD(SOUNDSENTRYW, DWORD, iWindowsEffectOrdinal, 44, 4, 4);
+ TEST_TYPE_SIZE (SOUNDSENTRYW, 48)
+ TEST_TYPE_ALIGN (SOUNDSENTRYW, 4)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, cbSize, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, cbSize, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, cbSize, 0)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, dwFlags, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, dwFlags, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, dwFlags, 4)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, iFSTextEffect, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, iFSTextEffect, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, iFSTextEffect, 8)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, iFSTextEffectMSec, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, iFSTextEffectMSec, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, iFSTextEffectMSec, 12)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, iFSTextEffectColorBits, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, iFSTextEffectColorBits, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, iFSTextEffectColorBits, 16)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, iFSGrafEffect, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, iFSGrafEffect, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, iFSGrafEffect, 20)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, iFSGrafEffectMSec, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, iFSGrafEffectMSec, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, iFSGrafEffectMSec, 24)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, iFSGrafEffectColor, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, iFSGrafEffectColor, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, iFSGrafEffectColor, 28)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, iWindowsEffect, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, iWindowsEffect, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, iWindowsEffect, 32)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, iWindowsEffectMSec, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, iWindowsEffectMSec, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, iWindowsEffectMSec, 36)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, lpszWindowsEffectDLL, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, lpszWindowsEffectDLL, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, lpszWindowsEffectDLL, 40)
+ TEST_FIELD_SIZE (SOUNDSENTRYW, iWindowsEffectOrdinal, 4)
+ TEST_FIELD_ALIGN (SOUNDSENTRYW, iWindowsEffectOrdinal, 4)
+ TEST_FIELD_OFFSET(SOUNDSENTRYW, iWindowsEffectOrdinal, 44)
}
static void test_pack_STICKYKEYS(void)
{
/* STICKYKEYS (pack 4) */
- TEST_TYPE(STICKYKEYS, 8, 4);
- TEST_FIELD(STICKYKEYS, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(STICKYKEYS, DWORD, dwFlags, 4, 4, 4);
+ TEST_TYPE_SIZE (STICKYKEYS, 8)
+ TEST_TYPE_ALIGN (STICKYKEYS, 4)
+ TEST_FIELD_SIZE (STICKYKEYS, cbSize, 4)
+ TEST_FIELD_ALIGN (STICKYKEYS, cbSize, 4)
+ TEST_FIELD_OFFSET(STICKYKEYS, cbSize, 0)
+ TEST_FIELD_SIZE (STICKYKEYS, dwFlags, 4)
+ TEST_FIELD_ALIGN (STICKYKEYS, dwFlags, 4)
+ TEST_FIELD_OFFSET(STICKYKEYS, dwFlags, 4)
}
static void test_pack_STYLESTRUCT(void)
{
/* STYLESTRUCT (pack 4) */
- TEST_TYPE(STYLESTRUCT, 8, 4);
- TEST_FIELD(STYLESTRUCT, DWORD, styleOld, 0, 4, 4);
- TEST_FIELD(STYLESTRUCT, DWORD, styleNew, 4, 4, 4);
+ TEST_TYPE_SIZE (STYLESTRUCT, 8)
+ TEST_TYPE_ALIGN (STYLESTRUCT, 4)
+ TEST_FIELD_SIZE (STYLESTRUCT, styleOld, 4)
+ TEST_FIELD_ALIGN (STYLESTRUCT, styleOld, 4)
+ TEST_FIELD_OFFSET(STYLESTRUCT, styleOld, 0)
+ TEST_FIELD_SIZE (STYLESTRUCT, styleNew, 4)
+ TEST_FIELD_ALIGN (STYLESTRUCT, styleNew, 4)
+ TEST_FIELD_OFFSET(STYLESTRUCT, styleNew, 4)
}
static void test_pack_TIMERPROC(void)
{
/* TIMERPROC */
- TEST_TYPE(TIMERPROC, 4, 4);
+ TEST_TYPE_SIZE (TIMERPROC, 4)
+ TEST_TYPE_ALIGN (TIMERPROC, 4)
}
static void test_pack_TITLEBARINFO(void)
{
/* TITLEBARINFO (pack 4) */
- TEST_TYPE(TITLEBARINFO, 44, 4);
- TEST_FIELD(TITLEBARINFO, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(TITLEBARINFO, RECT, rcTitleBar, 4, 16, 4);
- TEST_FIELD(TITLEBARINFO, DWORD[CCHILDREN_TITLEBAR+1], rgstate, 20, 24, 4);
+ TEST_TYPE_SIZE (TITLEBARINFO, 44)
+ TEST_TYPE_ALIGN (TITLEBARINFO, 4)
+ TEST_FIELD_SIZE (TITLEBARINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (TITLEBARINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(TITLEBARINFO, cbSize, 0)
+ TEST_FIELD_SIZE (TITLEBARINFO, rcTitleBar, 16)
+ TEST_FIELD_ALIGN (TITLEBARINFO, rcTitleBar, 4)
+ TEST_FIELD_OFFSET(TITLEBARINFO, rcTitleBar, 4)
+ TEST_FIELD_SIZE (TITLEBARINFO, rgstate, 24)
+ TEST_FIELD_ALIGN (TITLEBARINFO, rgstate, 4)
+ TEST_FIELD_OFFSET(TITLEBARINFO, rgstate, 20)
}
static void test_pack_TOGGLEKEYS(void)
{
/* TOGGLEKEYS (pack 4) */
- TEST_TYPE(TOGGLEKEYS, 8, 4);
- TEST_FIELD(TOGGLEKEYS, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(TOGGLEKEYS, DWORD, dwFlags, 4, 4, 4);
+ TEST_TYPE_SIZE (TOGGLEKEYS, 8)
+ TEST_TYPE_ALIGN (TOGGLEKEYS, 4)
+ TEST_FIELD_SIZE (TOGGLEKEYS, cbSize, 4)
+ TEST_FIELD_ALIGN (TOGGLEKEYS, cbSize, 4)
+ TEST_FIELD_OFFSET(TOGGLEKEYS, cbSize, 0)
+ TEST_FIELD_SIZE (TOGGLEKEYS, dwFlags, 4)
+ TEST_FIELD_ALIGN (TOGGLEKEYS, dwFlags, 4)
+ TEST_FIELD_OFFSET(TOGGLEKEYS, dwFlags, 4)
}
static void test_pack_TPMPARAMS(void)
{
/* TPMPARAMS (pack 4) */
- TEST_TYPE(TPMPARAMS, 20, 4);
- TEST_FIELD(TPMPARAMS, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(TPMPARAMS, RECT, rcExclude, 4, 16, 4);
+ TEST_TYPE_SIZE (TPMPARAMS, 20)
+ TEST_TYPE_ALIGN (TPMPARAMS, 4)
+ TEST_FIELD_SIZE (TPMPARAMS, cbSize, 4)
+ TEST_FIELD_ALIGN (TPMPARAMS, cbSize, 4)
+ TEST_FIELD_OFFSET(TPMPARAMS, cbSize, 0)
+ TEST_FIELD_SIZE (TPMPARAMS, rcExclude, 16)
+ TEST_FIELD_ALIGN (TPMPARAMS, rcExclude, 4)
+ TEST_FIELD_OFFSET(TPMPARAMS, rcExclude, 4)
}
static void test_pack_TRACKMOUSEEVENT(void)
{
/* TRACKMOUSEEVENT (pack 4) */
- TEST_TYPE(TRACKMOUSEEVENT, 16, 4);
- TEST_FIELD(TRACKMOUSEEVENT, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(TRACKMOUSEEVENT, DWORD, dwFlags, 4, 4, 4);
- TEST_FIELD(TRACKMOUSEEVENT, HWND, hwndTrack, 8, 4, 4);
- TEST_FIELD(TRACKMOUSEEVENT, DWORD, dwHoverTime, 12, 4, 4);
+ TEST_TYPE_SIZE (TRACKMOUSEEVENT, 16)
+ TEST_TYPE_ALIGN (TRACKMOUSEEVENT, 4)
+ TEST_FIELD_SIZE (TRACKMOUSEEVENT, cbSize, 4)
+ TEST_FIELD_ALIGN (TRACKMOUSEEVENT, cbSize, 4)
+ TEST_FIELD_OFFSET(TRACKMOUSEEVENT, cbSize, 0)
+ TEST_FIELD_SIZE (TRACKMOUSEEVENT, dwFlags, 4)
+ TEST_FIELD_ALIGN (TRACKMOUSEEVENT, dwFlags, 4)
+ TEST_FIELD_OFFSET(TRACKMOUSEEVENT, dwFlags, 4)
+ TEST_FIELD_SIZE (TRACKMOUSEEVENT, hwndTrack, 4)
+ TEST_FIELD_ALIGN (TRACKMOUSEEVENT, hwndTrack, 4)
+ TEST_FIELD_OFFSET(TRACKMOUSEEVENT, hwndTrack, 8)
+ TEST_FIELD_SIZE (TRACKMOUSEEVENT, dwHoverTime, 4)
+ TEST_FIELD_ALIGN (TRACKMOUSEEVENT, dwHoverTime, 4)
+ TEST_FIELD_OFFSET(TRACKMOUSEEVENT, dwHoverTime, 12)
}
static void test_pack_USEROBJECTFLAGS(void)
{
/* USEROBJECTFLAGS (pack 4) */
- TEST_TYPE(USEROBJECTFLAGS, 12, 4);
- TEST_FIELD(USEROBJECTFLAGS, BOOL, fInherit, 0, 4, 4);
- TEST_FIELD(USEROBJECTFLAGS, BOOL, fReserved, 4, 4, 4);
- TEST_FIELD(USEROBJECTFLAGS, DWORD, dwFlags, 8, 4, 4);
+ TEST_TYPE_SIZE (USEROBJECTFLAGS, 12)
+ TEST_TYPE_ALIGN (USEROBJECTFLAGS, 4)
+ TEST_FIELD_SIZE (USEROBJECTFLAGS, fInherit, 4)
+ TEST_FIELD_ALIGN (USEROBJECTFLAGS, fInherit, 4)
+ TEST_FIELD_OFFSET(USEROBJECTFLAGS, fInherit, 0)
+ TEST_FIELD_SIZE (USEROBJECTFLAGS, fReserved, 4)
+ TEST_FIELD_ALIGN (USEROBJECTFLAGS, fReserved, 4)
+ TEST_FIELD_OFFSET(USEROBJECTFLAGS, fReserved, 4)
+ TEST_FIELD_SIZE (USEROBJECTFLAGS, dwFlags, 4)
+ TEST_FIELD_ALIGN (USEROBJECTFLAGS, dwFlags, 4)
+ TEST_FIELD_OFFSET(USEROBJECTFLAGS, dwFlags, 8)
}
static void test_pack_WINDOWINFO(void)
{
/* WINDOWINFO (pack 4) */
- TEST_TYPE(WINDOWINFO, 60, 4);
- TEST_FIELD(WINDOWINFO, DWORD, cbSize, 0, 4, 4);
- TEST_FIELD(WINDOWINFO, RECT, rcWindow, 4, 16, 4);
- TEST_FIELD(WINDOWINFO, RECT, rcClient, 20, 16, 4);
- TEST_FIELD(WINDOWINFO, DWORD, dwStyle, 36, 4, 4);
- TEST_FIELD(WINDOWINFO, DWORD, dwExStyle, 40, 4, 4);
- TEST_FIELD(WINDOWINFO, DWORD, dwWindowStatus, 44, 4, 4);
- TEST_FIELD(WINDOWINFO, UINT, cxWindowBorders, 48, 4, 4);
- TEST_FIELD(WINDOWINFO, UINT, cyWindowBorders, 52, 4, 4);
- TEST_FIELD(WINDOWINFO, ATOM, atomWindowType, 56, 2, 2);
- TEST_FIELD(WINDOWINFO, WORD, wCreatorVersion, 58, 2, 2);
+ TEST_TYPE_SIZE (WINDOWINFO, 60)
+ TEST_TYPE_ALIGN (WINDOWINFO, 4)
+ TEST_FIELD_SIZE (WINDOWINFO, cbSize, 4)
+ TEST_FIELD_ALIGN (WINDOWINFO, cbSize, 4)
+ TEST_FIELD_OFFSET(WINDOWINFO, cbSize, 0)
+ TEST_FIELD_SIZE (WINDOWINFO, rcWindow, 16)
+ TEST_FIELD_ALIGN (WINDOWINFO, rcWindow, 4)
+ TEST_FIELD_OFFSET(WINDOWINFO, rcWindow, 4)
+ TEST_FIELD_SIZE (WINDOWINFO, rcClient, 16)
+ TEST_FIELD_ALIGN (WINDOWINFO, rcClient, 4)
+ TEST_FIELD_OFFSET(WINDOWINFO, rcClient, 20)
+ TEST_FIELD_SIZE (WINDOWINFO, dwStyle, 4)
+ TEST_FIELD_ALIGN (WINDOWINFO, dwStyle, 4)
+ TEST_FIELD_OFFSET(WINDOWINFO, dwStyle, 36)
+ TEST_FIELD_SIZE (WINDOWINFO, dwExStyle, 4)
+ TEST_FIELD_ALIGN (WINDOWINFO, dwExStyle, 4)
+ TEST_FIELD_OFFSET(WINDOWINFO, dwExStyle, 40)
+ TEST_FIELD_SIZE (WINDOWINFO, dwWindowStatus, 4)
+ TEST_FIELD_ALIGN (WINDOWINFO, dwWindowStatus, 4)
+ TEST_FIELD_OFFSET(WINDOWINFO, dwWindowStatus, 44)
+ TEST_FIELD_SIZE (WINDOWINFO, cxWindowBorders, 4)
+ TEST_FIELD_ALIGN (WINDOWINFO, cxWindowBorders, 4)
+ TEST_FIELD_OFFSET(WINDOWINFO, cxWindowBorders, 48)
+ TEST_FIELD_SIZE (WINDOWINFO, cyWindowBorders, 4)
+ TEST_FIELD_ALIGN (WINDOWINFO, cyWindowBorders, 4)
+ TEST_FIELD_OFFSET(WINDOWINFO, cyWindowBorders, 52)
+ TEST_FIELD_SIZE (WINDOWINFO, atomWindowType, 2)
+ TEST_FIELD_ALIGN (WINDOWINFO, atomWindowType, 2)
+ TEST_FIELD_OFFSET(WINDOWINFO, atomWindowType, 56)
+ TEST_FIELD_SIZE (WINDOWINFO, wCreatorVersion, 2)
+ TEST_FIELD_ALIGN (WINDOWINFO, wCreatorVersion, 2)
+ TEST_FIELD_OFFSET(WINDOWINFO, wCreatorVersion, 58)
}
static void test_pack_WINDOWPLACEMENT(void)
{
/* WINDOWPLACEMENT (pack 4) */
- TEST_TYPE(WINDOWPLACEMENT, 44, 4);
- TEST_FIELD(WINDOWPLACEMENT, UINT, length, 0, 4, 4);
- TEST_FIELD(WINDOWPLACEMENT, UINT, flags, 4, 4, 4);
- TEST_FIELD(WINDOWPLACEMENT, UINT, showCmd, 8, 4, 4);
- TEST_FIELD(WINDOWPLACEMENT, POINT, ptMinPosition, 12, 8, 4);
- TEST_FIELD(WINDOWPLACEMENT, POINT, ptMaxPosition, 20, 8, 4);
- TEST_FIELD(WINDOWPLACEMENT, RECT, rcNormalPosition, 28, 16, 4);
+ TEST_TYPE_SIZE (WINDOWPLACEMENT, 44)
+ TEST_TYPE_ALIGN (WINDOWPLACEMENT, 4)
+ TEST_FIELD_SIZE (WINDOWPLACEMENT, length, 4)
+ TEST_FIELD_ALIGN (WINDOWPLACEMENT, length, 4)
+ TEST_FIELD_OFFSET(WINDOWPLACEMENT, length, 0)
+ TEST_FIELD_SIZE (WINDOWPLACEMENT, flags, 4)
+ TEST_FIELD_ALIGN (WINDOWPLACEMENT, flags, 4)
+ TEST_FIELD_OFFSET(WINDOWPLACEMENT, flags, 4)
+ TEST_FIELD_SIZE (WINDOWPLACEMENT, showCmd, 4)
+ TEST_FIELD_ALIGN (WINDOWPLACEMENT, showCmd, 4)
+ TEST_FIELD_OFFSET(WINDOWPLACEMENT, showCmd, 8)
+ TEST_FIELD_SIZE (WINDOWPLACEMENT, ptMinPosition, 8)
+ TEST_FIELD_ALIGN (WINDOWPLACEMENT, ptMinPosition, 4)
+ TEST_FIELD_OFFSET(WINDOWPLACEMENT, ptMinPosition, 12)
+ TEST_FIELD_SIZE (WINDOWPLACEMENT, ptMaxPosition, 8)
+ TEST_FIELD_ALIGN (WINDOWPLACEMENT, ptMaxPosition, 4)
+ TEST_FIELD_OFFSET(WINDOWPLACEMENT, ptMaxPosition, 20)
+ TEST_FIELD_SIZE (WINDOWPLACEMENT, rcNormalPosition, 16)
+ TEST_FIELD_ALIGN (WINDOWPLACEMENT, rcNormalPosition, 4)
+ TEST_FIELD_OFFSET(WINDOWPLACEMENT, rcNormalPosition, 28)
}
static void test_pack_WINDOWPOS(void)
{
/* WINDOWPOS (pack 4) */
- TEST_TYPE(WINDOWPOS, 28, 4);
- TEST_FIELD(WINDOWPOS, HWND, hwnd, 0, 4, 4);
- TEST_FIELD(WINDOWPOS, HWND, hwndInsertAfter, 4, 4, 4);
- TEST_FIELD(WINDOWPOS, INT, x, 8, 4, 4);
- TEST_FIELD(WINDOWPOS, INT, y, 12, 4, 4);
- TEST_FIELD(WINDOWPOS, INT, cx, 16, 4, 4);
- TEST_FIELD(WINDOWPOS, INT, cy, 20, 4, 4);
- TEST_FIELD(WINDOWPOS, UINT, flags, 24, 4, 4);
+ TEST_TYPE_SIZE (WINDOWPOS, 28)
+ TEST_TYPE_ALIGN (WINDOWPOS, 4)
+ TEST_FIELD_SIZE (WINDOWPOS, hwnd, 4)
+ TEST_FIELD_ALIGN (WINDOWPOS, hwnd, 4)
+ TEST_FIELD_OFFSET(WINDOWPOS, hwnd, 0)
+ TEST_FIELD_SIZE (WINDOWPOS, hwndInsertAfter, 4)
+ TEST_FIELD_ALIGN (WINDOWPOS, hwndInsertAfter, 4)
+ TEST_FIELD_OFFSET(WINDOWPOS, hwndInsertAfter, 4)
+ TEST_FIELD_SIZE (WINDOWPOS, x, 4)
+ TEST_FIELD_ALIGN (WINDOWPOS, x, 4)
+ TEST_FIELD_OFFSET(WINDOWPOS, x, 8)
+ TEST_FIELD_SIZE (WINDOWPOS, y, 4)
+ TEST_FIELD_ALIGN (WINDOWPOS, y, 4)
+ TEST_FIELD_OFFSET(WINDOWPOS, y, 12)
+ TEST_FIELD_SIZE (WINDOWPOS, cx, 4)
+ TEST_FIELD_ALIGN (WINDOWPOS, cx, 4)
+ TEST_FIELD_OFFSET(WINDOWPOS, cx, 16)
+ TEST_FIELD_SIZE (WINDOWPOS, cy, 4)
+ TEST_FIELD_ALIGN (WINDOWPOS, cy, 4)
+ TEST_FIELD_OFFSET(WINDOWPOS, cy, 20)
+ TEST_FIELD_SIZE (WINDOWPOS, flags, 4)
+ TEST_FIELD_ALIGN (WINDOWPOS, flags, 4)
+ TEST_FIELD_OFFSET(WINDOWPOS, flags, 24)
}
static void test_pack_WINEVENTPROC(void)
{
/* WINEVENTPROC */
- TEST_TYPE(WINEVENTPROC, 4, 4);
+ TEST_TYPE_SIZE (WINEVENTPROC, 4)
+ TEST_TYPE_ALIGN (WINEVENTPROC, 4)
}
static void test_pack_WINSTAENUMPROCA(void)
{
/* WINSTAENUMPROCA */
- TEST_TYPE(WINSTAENUMPROCA, 4, 4);
+ TEST_TYPE_SIZE (WINSTAENUMPROCA, 4)
+ TEST_TYPE_ALIGN (WINSTAENUMPROCA, 4)
}
static void test_pack_WINSTAENUMPROCW(void)
{
/* WINSTAENUMPROCW */
- TEST_TYPE(WINSTAENUMPROCW, 4, 4);
+ TEST_TYPE_SIZE (WINSTAENUMPROCW, 4)
+ TEST_TYPE_ALIGN (WINSTAENUMPROCW, 4)
}
static void test_pack_WNDCLASSA(void)
{
/* WNDCLASSA (pack 4) */
- TEST_TYPE(WNDCLASSA, 40, 4);
- TEST_FIELD(WNDCLASSA, UINT, style, 0, 4, 4);
- TEST_FIELD(WNDCLASSA, WNDPROC, lpfnWndProc, 4, 4, 4);
- TEST_FIELD(WNDCLASSA, INT, cbClsExtra, 8, 4, 4);
- TEST_FIELD(WNDCLASSA, INT, cbWndExtra, 12, 4, 4);
- TEST_FIELD(WNDCLASSA, HINSTANCE, hInstance, 16, 4, 4);
- TEST_FIELD(WNDCLASSA, HICON, hIcon, 20, 4, 4);
- TEST_FIELD(WNDCLASSA, HCURSOR, hCursor, 24, 4, 4);
- TEST_FIELD(WNDCLASSA, HBRUSH, hbrBackground, 28, 4, 4);
- TEST_FIELD(WNDCLASSA, LPCSTR, lpszMenuName, 32, 4, 4);
- TEST_FIELD(WNDCLASSA, LPCSTR, lpszClassName, 36, 4, 4);
+ TEST_TYPE_SIZE (WNDCLASSA, 40)
+ TEST_TYPE_ALIGN (WNDCLASSA, 4)
+ TEST_FIELD_SIZE (WNDCLASSA, style, 4)
+ TEST_FIELD_ALIGN (WNDCLASSA, style, 4)
+ TEST_FIELD_OFFSET(WNDCLASSA, style, 0)
+ TEST_FIELD_SIZE (WNDCLASSA, lpfnWndProc, 4)
+ TEST_FIELD_ALIGN (WNDCLASSA, lpfnWndProc, 4)
+ TEST_FIELD_OFFSET(WNDCLASSA, lpfnWndProc, 4)
+ TEST_FIELD_SIZE (WNDCLASSA, cbClsExtra, 4)
+ TEST_FIELD_ALIGN (WNDCLASSA, cbClsExtra, 4)
+ TEST_FIELD_OFFSET(WNDCLASSA, cbClsExtra, 8)
+ TEST_FIELD_SIZE (WNDCLASSA, cbWndExtra, 4)
+ TEST_FIELD_ALIGN (WNDCLASSA, cbWndExtra, 4)
+ TEST_FIELD_OFFSET(WNDCLASSA, cbWndExtra, 12)
+ TEST_FIELD_SIZE (WNDCLASSA, hInstance, 4)
+ TEST_FIELD_ALIGN (WNDCLASSA, hInstance, 4)
+ TEST_FIELD_OFFSET(WNDCLASSA, hInstance, 16)
+ TEST_FIELD_SIZE (WNDCLASSA, hIcon, 4)
+ TEST_FIELD_ALIGN (WNDCLASSA, hIcon, 4)
+ TEST_FIELD_OFFSET(WNDCLASSA, hIcon, 20)
+ TEST_FIELD_SIZE (WNDCLASSA, hCursor, 4)
+ TEST_FIELD_ALIGN (WNDCLASSA, hCursor, 4)
+ TEST_FIELD_OFFSET(WNDCLASSA, hCursor, 24)
+ TEST_FIELD_SIZE (WNDCLASSA, hbrBackground, 4)
+ TEST_FIELD_ALIGN (WNDCLASSA, hbrBackground, 4)
+ TEST_FIELD_OFFSET(WNDCLASSA, hbrBackground, 28)
+ TEST_FIELD_SIZE (WNDCLASSA, lpszMenuName, 4)
+ TEST_FIELD_ALIGN (WNDCLASSA, lpszMenuName, 4)
+ TEST_FIELD_OFFSET(WNDCLASSA, lpszMenuName, 32)
+ TEST_FIELD_SIZE (WNDCLASSA, lpszClassName, 4)
+ TEST_FIELD_ALIGN (WNDCLASSA, lpszClassName, 4)
+ TEST_FIELD_OFFSET(WNDCLASSA, lpszClassName, 36)
}
static void test_pack_WNDCLASSEXA(void)
{
/* WNDCLASSEXA (pack 4) */
- TEST_TYPE(WNDCLASSEXA, 48, 4);
- TEST_FIELD(WNDCLASSEXA, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(WNDCLASSEXA, UINT, style, 4, 4, 4);
- TEST_FIELD(WNDCLASSEXA, WNDPROC, lpfnWndProc, 8, 4, 4);
- TEST_FIELD(WNDCLASSEXA, INT, cbClsExtra, 12, 4, 4);
- TEST_FIELD(WNDCLASSEXA, INT, cbWndExtra, 16, 4, 4);
- TEST_FIELD(WNDCLASSEXA, HINSTANCE, hInstance, 20, 4, 4);
- TEST_FIELD(WNDCLASSEXA, HICON, hIcon, 24, 4, 4);
- TEST_FIELD(WNDCLASSEXA, HCURSOR, hCursor, 28, 4, 4);
- TEST_FIELD(WNDCLASSEXA, HBRUSH, hbrBackground, 32, 4, 4);
- TEST_FIELD(WNDCLASSEXA, LPCSTR, lpszMenuName, 36, 4, 4);
- TEST_FIELD(WNDCLASSEXA, LPCSTR, lpszClassName, 40, 4, 4);
- TEST_FIELD(WNDCLASSEXA, HICON, hIconSm, 44, 4, 4);
+ TEST_TYPE_SIZE (WNDCLASSEXA, 48)
+ TEST_TYPE_ALIGN (WNDCLASSEXA, 4)
+ TEST_FIELD_SIZE (WNDCLASSEXA, cbSize, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, cbSize, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, cbSize, 0)
+ TEST_FIELD_SIZE (WNDCLASSEXA, style, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, style, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, style, 4)
+ TEST_FIELD_SIZE (WNDCLASSEXA, lpfnWndProc, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, lpfnWndProc, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, lpfnWndProc, 8)
+ TEST_FIELD_SIZE (WNDCLASSEXA, cbClsExtra, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, cbClsExtra, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, cbClsExtra, 12)
+ TEST_FIELD_SIZE (WNDCLASSEXA, cbWndExtra, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, cbWndExtra, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, cbWndExtra, 16)
+ TEST_FIELD_SIZE (WNDCLASSEXA, hInstance, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, hInstance, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, hInstance, 20)
+ TEST_FIELD_SIZE (WNDCLASSEXA, hIcon, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, hIcon, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, hIcon, 24)
+ TEST_FIELD_SIZE (WNDCLASSEXA, hCursor, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, hCursor, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, hCursor, 28)
+ TEST_FIELD_SIZE (WNDCLASSEXA, hbrBackground, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, hbrBackground, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, hbrBackground, 32)
+ TEST_FIELD_SIZE (WNDCLASSEXA, lpszMenuName, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, lpszMenuName, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, lpszMenuName, 36)
+ TEST_FIELD_SIZE (WNDCLASSEXA, lpszClassName, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, lpszClassName, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, lpszClassName, 40)
+ TEST_FIELD_SIZE (WNDCLASSEXA, hIconSm, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXA, hIconSm, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXA, hIconSm, 44)
}
static void test_pack_WNDCLASSEXW(void)
{
/* WNDCLASSEXW (pack 4) */
- TEST_TYPE(WNDCLASSEXW, 48, 4);
- TEST_FIELD(WNDCLASSEXW, UINT, cbSize, 0, 4, 4);
- TEST_FIELD(WNDCLASSEXW, UINT, style, 4, 4, 4);
- TEST_FIELD(WNDCLASSEXW, WNDPROC, lpfnWndProc, 8, 4, 4);
- TEST_FIELD(WNDCLASSEXW, INT, cbClsExtra, 12, 4, 4);
- TEST_FIELD(WNDCLASSEXW, INT, cbWndExtra, 16, 4, 4);
- TEST_FIELD(WNDCLASSEXW, HINSTANCE, hInstance, 20, 4, 4);
- TEST_FIELD(WNDCLASSEXW, HICON, hIcon, 24, 4, 4);
- TEST_FIELD(WNDCLASSEXW, HCURSOR, hCursor, 28, 4, 4);
- TEST_FIELD(WNDCLASSEXW, HBRUSH, hbrBackground, 32, 4, 4);
- TEST_FIELD(WNDCLASSEXW, LPCWSTR, lpszMenuName, 36, 4, 4);
- TEST_FIELD(WNDCLASSEXW, LPCWSTR, lpszClassName, 40, 4, 4);
- TEST_FIELD(WNDCLASSEXW, HICON, hIconSm, 44, 4, 4);
+ TEST_TYPE_SIZE (WNDCLASSEXW, 48)
+ TEST_TYPE_ALIGN (WNDCLASSEXW, 4)
+ TEST_FIELD_SIZE (WNDCLASSEXW, cbSize, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, cbSize, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, cbSize, 0)
+ TEST_FIELD_SIZE (WNDCLASSEXW, style, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, style, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, style, 4)
+ TEST_FIELD_SIZE (WNDCLASSEXW, lpfnWndProc, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, lpfnWndProc, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, lpfnWndProc, 8)
+ TEST_FIELD_SIZE (WNDCLASSEXW, cbClsExtra, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, cbClsExtra, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, cbClsExtra, 12)
+ TEST_FIELD_SIZE (WNDCLASSEXW, cbWndExtra, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, cbWndExtra, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, cbWndExtra, 16)
+ TEST_FIELD_SIZE (WNDCLASSEXW, hInstance, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, hInstance, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, hInstance, 20)
+ TEST_FIELD_SIZE (WNDCLASSEXW, hIcon, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, hIcon, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, hIcon, 24)
+ TEST_FIELD_SIZE (WNDCLASSEXW, hCursor, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, hCursor, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, hCursor, 28)
+ TEST_FIELD_SIZE (WNDCLASSEXW, hbrBackground, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, hbrBackground, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, hbrBackground, 32)
+ TEST_FIELD_SIZE (WNDCLASSEXW, lpszMenuName, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, lpszMenuName, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, lpszMenuName, 36)
+ TEST_FIELD_SIZE (WNDCLASSEXW, lpszClassName, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, lpszClassName, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, lpszClassName, 40)
+ TEST_FIELD_SIZE (WNDCLASSEXW, hIconSm, 4)
+ TEST_FIELD_ALIGN (WNDCLASSEXW, hIconSm, 4)
+ TEST_FIELD_OFFSET(WNDCLASSEXW, hIconSm, 44)
}
static void test_pack_WNDCLASSW(void)
{
/* WNDCLASSW (pack 4) */
- TEST_TYPE(WNDCLASSW, 40, 4);
- TEST_FIELD(WNDCLASSW, UINT, style, 0, 4, 4);
- TEST_FIELD(WNDCLASSW, WNDPROC, lpfnWndProc, 4, 4, 4);
- TEST_FIELD(WNDCLASSW, INT, cbClsExtra, 8, 4, 4);
- TEST_FIELD(WNDCLASSW, INT, cbWndExtra, 12, 4, 4);
- TEST_FIELD(WNDCLASSW, HINSTANCE, hInstance, 16, 4, 4);
- TEST_FIELD(WNDCLASSW, HICON, hIcon, 20, 4, 4);
- TEST_FIELD(WNDCLASSW, HCURSOR, hCursor, 24, 4, 4);
- TEST_FIELD(WNDCLASSW, HBRUSH, hbrBackground, 28, 4, 4);
- TEST_FIELD(WNDCLASSW, LPCWSTR, lpszMenuName, 32, 4, 4);
- TEST_FIELD(WNDCLASSW, LPCWSTR, lpszClassName, 36, 4, 4);
+ TEST_TYPE_SIZE (WNDCLASSW, 40)
+ TEST_TYPE_ALIGN (WNDCLASSW, 4)
+ TEST_FIELD_SIZE (WNDCLASSW, style, 4)
+ TEST_FIELD_ALIGN (WNDCLASSW, style, 4)
+ TEST_FIELD_OFFSET(WNDCLASSW, style, 0)
+ TEST_FIELD_SIZE (WNDCLASSW, lpfnWndProc, 4)
+ TEST_FIELD_ALIGN (WNDCLASSW, lpfnWndProc, 4)
+ TEST_FIELD_OFFSET(WNDCLASSW, lpfnWndProc, 4)
+ TEST_FIELD_SIZE (WNDCLASSW, cbClsExtra, 4)
+ TEST_FIELD_ALIGN (WNDCLASSW, cbClsExtra, 4)
+ TEST_FIELD_OFFSET(WNDCLASSW, cbClsExtra, 8)
+ TEST_FIELD_SIZE (WNDCLASSW, cbWndExtra, 4)
+ TEST_FIELD_ALIGN (WNDCLASSW, cbWndExtra, 4)
+ TEST_FIELD_OFFSET(WNDCLASSW, cbWndExtra, 12)
+ TEST_FIELD_SIZE (WNDCLASSW, hInstance, 4)
+ TEST_FIELD_ALIGN (WNDCLASSW, hInstance, 4)
+ TEST_FIELD_OFFSET(WNDCLASSW, hInstance, 16)
+ TEST_FIELD_SIZE (WNDCLASSW, hIcon, 4)
+ TEST_FIELD_ALIGN (WNDCLASSW, hIcon, 4)
+ TEST_FIELD_OFFSET(WNDCLASSW, hIcon, 20)
+ TEST_FIELD_SIZE (WNDCLASSW, hCursor, 4)
+ TEST_FIELD_ALIGN (WNDCLASSW, hCursor, 4)
+ TEST_FIELD_OFFSET(WNDCLASSW, hCursor, 24)
+ TEST_FIELD_SIZE (WNDCLASSW, hbrBackground, 4)
+ TEST_FIELD_ALIGN (WNDCLASSW, hbrBackground, 4)
+ TEST_FIELD_OFFSET(WNDCLASSW, hbrBackground, 28)
+ TEST_FIELD_SIZE (WNDCLASSW, lpszMenuName, 4)
+ TEST_FIELD_ALIGN (WNDCLASSW, lpszMenuName, 4)
+ TEST_FIELD_OFFSET(WNDCLASSW, lpszMenuName, 32)
+ TEST_FIELD_SIZE (WNDCLASSW, lpszClassName, 4)
+ TEST_FIELD_ALIGN (WNDCLASSW, lpszClassName, 4)
+ TEST_FIELD_OFFSET(WNDCLASSW, lpszClassName, 36)
}
static void test_pack_WNDENUMPROC(void)
{
/* WNDENUMPROC */
- TEST_TYPE(WNDENUMPROC, 4, 4);
+ TEST_TYPE_SIZE (WNDENUMPROC, 4)
+ TEST_TYPE_ALIGN (WNDENUMPROC, 4)
}
static void test_pack_WNDPROC(void)
{
/* WNDPROC */
- TEST_TYPE(WNDPROC, 4, 4);
+ TEST_TYPE_SIZE (WNDPROC, 4)
+ TEST_TYPE_ALIGN (WNDPROC, 4)
}
static void test_pack(void)
@@ -2477,5 +3835,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/user32/input.c b/rostests/winetests/user32/input.c
index 4297fe21877..889244f0e3a 100755
--- a/rostests/winetests/user32/input.c
+++ b/rostests/winetests/user32/input.c
@@ -44,6 +44,9 @@
*
*/
+#define _WIN32_WINNT 0x401
+#define _WIN32_IE 0x0500
+
#include
#include
@@ -60,7 +63,7 @@ static long timetag = 0x10000000;
static UINT (WINAPI *pSendInput) (UINT, INPUT*, size_t);
static int (WINAPI *pGetMouseMovePointsEx) (UINT, LPMOUSEMOVEPOINT, LPMOUSEMOVEPOINT, int, DWORD);
-#define MAXKEYEVENTS 6
+#define MAXKEYEVENTS 10
#define MAXKEYMESSAGES MAXKEYEVENTS /* assuming a key event generates one
and only one message */
@@ -200,7 +203,7 @@ static int KbdMessage( KEV kev, WPARAM *pwParam, LPARAM *plParam )
* . retrieve the messages from the input queue
* . verify
*/
-static void do_test( HWND hwnd, int seqnr, const KEV td[] )
+static BOOL do_test( HWND hwnd, int seqnr, const KEV td[] )
{
INPUT inputs[MAXKEYEVENTS];
KMSG expmsg[MAXKEYEVENTS];
@@ -233,22 +236,27 @@ static void do_test( HWND hwnd, int seqnr, const KEV td[] )
MSGNAME[msg.message - WM_KEYFIRST], msg.wParam, msg.lParam, msg.time);
if( i < kmctr ) {
ok( msg.message == expmsg[i].message &&
- msg.wParam == expmsg[i].wParam &&
- msg.lParam == expmsg[i].lParam,
- "wrong message! expected:\n"
- "message[%d] %-15s wParam %04lx lParam %08lx\n",i,
- MSGNAME[(expmsg[i]).message - WM_KEYFIRST],
- expmsg[i].wParam, expmsg[i].lParam );
+ msg.wParam == expmsg[i].wParam &&
+ msg.lParam == expmsg[i].lParam,
+ "%u/%u: wrong message %x/%08lx/%08lx expected %s/%08lx/%08lx\n",
+ seqnr, i, msg.message, msg.wParam, msg.lParam,
+ MSGNAME[(expmsg[i]).message - WM_KEYFIRST], expmsg[i].wParam, expmsg[i].lParam );
}
i++;
}
if (winetest_debug > 1)
trace("%d messages retrieved\n", i);
+ if (!i && kmctr)
+ {
+ skip( "simulated keyboard input doesn't work\n" );
+ return FALSE;
+ }
ok( i == kmctr, "message count is wrong: got %d expected: %d\n", i, kmctr);
+ return TRUE;
}
/* test all combinations of the specified key events */
-static void TestASet( HWND hWnd, int nrkev, const KEV kevdwn[], const KEV kevup[] )
+static BOOL TestASet( HWND hWnd, int nrkev, const KEV kevdwn[], const KEV kevup[] )
{
int i,j,k,l,m,n;
static int count=0;
@@ -263,7 +271,7 @@ static void TestASet( HWND hWnd, int nrkev, const KEV kevdwn[], const KEV kevup[
kbuf[1] = kevdwn[1-i];
kbuf[2] = kevup[j];
kbuf[3] = kevup[1-j];
- do_test( hWnd, count++, kbuf);
+ if (!do_test( hWnd, count++, kbuf)) return FALSE;
}
}
}
@@ -285,7 +293,7 @@ static void TestASet( HWND hWnd, int nrkev, const KEV kevdwn[], const KEV kevup[
kbuf[3] = kevup[l];
kbuf[4] = kevup[m];
kbuf[5] = kevup[n];
- do_test( hWnd, count++, kbuf);
+ if (!do_test( hWnd, count++, kbuf)) return FALSE;
}
}
}
@@ -293,6 +301,7 @@ static void TestASet( HWND hWnd, int nrkev, const KEV kevdwn[], const KEV kevup[
}
}
}
+ return TRUE;
}
/* test each set specified in the global testkeyset array */
@@ -300,30 +309,13 @@ static void TestSysKeys( HWND hWnd)
{
int i;
for(i=0; testkeyset[i].nrkev;i++)
- TestASet( hWnd, testkeyset[i].nrkev, testkeyset[i].keydwn,
- testkeyset[i].keyup);
+ if (!TestASet( hWnd, testkeyset[i].nrkev, testkeyset[i].keydwn, testkeyset[i].keyup)) break;
}
static LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam,
LPARAM lParam )
{
- switch (msg) {
- case WM_USER:
- SetFocus(hWnd);
- /* window has focus, now do the test */
- if( hWnd == hWndTest) TestSysKeys( hWnd);
- /* finished :-) */
- break;
-
- case WM_DESTROY:
- PostQuitMessage( 0 );
- break;
-
- default:
- return( DefWindowProcA( hWnd, msg, wParam, lParam ) );
- }
-
- return 0;
+ return DefWindowProcA( hWnd, msg, wParam, lParam );
}
static void test_Input_whitebox(void)
@@ -336,24 +328,28 @@ static void test_Input_whitebox(void)
wclass.style = CS_HREDRAW | CS_VREDRAW;
wclass.lpfnWndProc = WndProc;
wclass.hInstance = hInstance;
- wclass.hIcon = LoadIconA( 0, (LPSTR)IDI_APPLICATION );
- wclass.hCursor = LoadCursorA( NULL, IDC_ARROW);
- wclass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1);
+ wclass.hIcon = LoadIconA( 0, IDI_APPLICATION );
+ wclass.hCursor = LoadCursorA( NULL, IDC_ARROW );
+ wclass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1 );
wclass.lpszMenuName = 0;
wclass.cbClsExtra = 0;
wclass.cbWndExtra = 0;
- assert (RegisterClassA( &wclass ));
+ RegisterClassA( &wclass );
/* create the test window that will receive the keystrokes */
- assert ( hWndTest = CreateWindowA( wclass.lpszClassName, "InputSysKeyTest",
- WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 100, 100,
- NULL, NULL, hInstance, NULL) );
+ hWndTest = CreateWindowA( wclass.lpszClassName, "InputSysKeyTest",
+ WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 100, 100,
+ NULL, NULL, hInstance, NULL);
+ assert( hWndTest );
ShowWindow( hWndTest, SW_SHOW);
+ SetWindowPos( hWndTest, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE );
+ SetForegroundWindow( hWndTest );
UpdateWindow( hWndTest);
/* flush pending messages */
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageA( &msg );
- SendMessageA(hWndTest, WM_USER, 0, 0);
+ SetFocus( hWndTest );
+ TestSysKeys( hWndTest );
DestroyWindow(hWndTest);
}
@@ -374,7 +370,6 @@ static void empty_message_queue(void)
DispatchMessage(&msg);
}
diff = time - GetTickCount();
- min_timeout = 20;
}
}
@@ -575,12 +570,15 @@ struct sendinput_test_s {
/* RMENU == LMENU */
/* 38 */
{VK_RMENU, 0, 0,
- {{VK_MENU, 0x00}, {VK_LMENU, 0x00}, {0}},
- {{WM_SYSKEYDOWN, hook|wparam, VK_RMENU},
+ {{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_SYSKEYDOWN, wparam|lparam, VK_MENU, 0}, {0}}},
{VK_RMENU, KEYEVENTF_KEYUP, 1,
- {{VK_MENU, 0x80}, {VK_LMENU, 0x80}, {0}},
- {{WM_KEYUP, hook|wparam, VK_RMENU},
+ {{VK_MENU, 0x80}, {VK_LMENU, 0x80}, {VK_CONTROL, 0x81, 1}, {VK_LCONTROL, 0x80, 1}, {0}},
+ {{WM_KEYUP, hook|wparam|optional, VK_LCONTROL},
+ {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}}},
/* LMENU | KEYEVENTF_EXTENDEDKEY == RMENU */
@@ -597,12 +595,15 @@ struct sendinput_test_s {
/* RMENU | KEYEVENTF_EXTENDEDKEY == RMENU */
/* 42 */
{VK_RMENU, KEYEVENTF_EXTENDEDKEY, 0,
- {{VK_MENU, 0x00}, {VK_RMENU, 0x00}, {0}},
- {{WM_SYSKEYDOWN, hook|wparam|lparam, VK_RMENU, LLKHF_EXTENDED},
+ {{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_SYSKEYDOWN, wparam|lparam, VK_MENU, KF_EXTENDED}, {0}}},
{VK_RMENU, KEYEVENTF_KEYUP | KEYEVENTF_EXTENDEDKEY, 1,
- {{VK_MENU, 0x80}, {VK_RMENU, 0x80}, {0}},
- {{WM_KEYUP, hook|wparam|lparam, VK_RMENU, LLKHF_UP|LLKHF_EXTENDED},
+ {{VK_MENU, 0x80}, {VK_RMENU, 0x80}, {VK_CONTROL, 0x81, 1}, {VK_LCONTROL, 0x80, 1}, {0}},
+ {{WM_KEYUP, hook|wparam|lparam|optional, VK_LCONTROL, LLKHF_UP},
+ {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}}},
/* MENU == LMENU */
@@ -619,12 +620,14 @@ struct sendinput_test_s {
/* MENU | KEYEVENTF_EXTENDEDKEY == RMENU */
/* 46 */
{VK_MENU, KEYEVENTF_EXTENDEDKEY, 0,
- {{VK_MENU, 0x00}, {VK_RMENU, 0x00}, {0}},
- {{WM_SYSKEYDOWN, hook/*|wparam*/|lparam, VK_MENU, LLKHF_EXTENDED},
+ {{VK_MENU, 0x00}, {VK_RMENU, 0x00}, {VK_CONTROL, 0x00, 1}, {VK_LCONTROL, 0x01, 1}, {0}},
+ {{WM_SYSKEYDOWN, hook|wparam|lparam|optional, VK_CONTROL, 0},
+ {WM_SYSKEYDOWN, hook/*|wparam*/|lparam, VK_MENU, LLKHF_EXTENDED},
{WM_SYSKEYDOWN, wparam|lparam, VK_MENU, KF_EXTENDED}, {0}}},
{VK_MENU, KEYEVENTF_KEYUP | KEYEVENTF_EXTENDEDKEY, 1,
- {{VK_MENU, 0x80}, {VK_RMENU, 0x80}, {0}},
- {{WM_KEYUP, hook/*|wparam*/|lparam, VK_MENU, LLKHF_UP|LLKHF_EXTENDED},
+ {{VK_MENU, 0x80}, {VK_RMENU, 0x80}, {VK_CONTROL, 0x81, 1}, {VK_LCONTROL, 0x80, 1}, {0}},
+ {{WM_KEYUP, hook|wparam|lparam|optional, VK_CONTROL, LLKHF_UP},
+ {WM_KEYUP, hook/*|wparam*/|lparam, VK_MENU, LLKHF_UP|LLKHF_EXTENDED},
{WM_SYSKEYUP, wparam|lparam, VK_MENU, KF_UP|KF_EXTENDED},
{WM_SYSCOMMAND}, {0}}},
@@ -665,7 +668,7 @@ static void compare_and_check(int id, BYTE *ks1, BYTE *ks2, struct sendinput_tes
int matched = ((ks1[t->wVk]&0x80) == (t->before_state&0x80)
&& (ks2[t->wVk]&0x80) == (~t->before_state&0x80));
- if (!matched && test->_todo_wine)
+ if (!matched && !t->optional && test->_todo_wine)
{
failcount++;
todo_wine {
@@ -701,12 +704,13 @@ static void compare_and_check(int id, BYTE *ks1, BYTE *ks2, struct sendinput_tes
if (expected->message == actual->message)
{
- 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);
-
if (expected->flags & wparam)
{
+ if ((expected->flags & optional) && (expected->wParam != actual->wParam))
+ {
+ expected++;
+ continue;
+ }
if (expected->wParam != actual->wParam && test->_todo_wine)
{
failcount++;
@@ -733,6 +737,10 @@ static void compare_and_check(int id, BYTE *ks1, BYTE *ks2, struct sendinput_tes
"%2d (%x/%x): in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n",
id, test->wVk, test->dwFlags, expected->message, expected->lParam, actual->lParam);
}
+ 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);
+
}
else if (expected->flags & optional)
{
@@ -794,12 +802,17 @@ static LRESULT CALLBACK WndProc2(HWND hWnd, UINT Msg, WPARAM wParam,
Msg != WM_NCHITTEST &&
Msg != WM_GETTEXT &&
Msg != WM_GETICON &&
+ Msg != WM_IME_SELECT &&
Msg != WM_DEVICECHANGE)
{
- sent_messages[sent_messages_cnt].message = Msg;
- sent_messages[sent_messages_cnt].flags = 0;
- sent_messages[sent_messages_cnt].wParam = wParam;
- sent_messages[sent_messages_cnt++].lParam = HIWORD(lParam) & (KF_UP|KF_EXTENDED);
+ ok(sent_messages_cnt < MAXKEYMESSAGES, "Too many messages\n");
+ if (sent_messages_cnt < MAXKEYMESSAGES)
+ {
+ sent_messages[sent_messages_cnt].message = Msg;
+ sent_messages[sent_messages_cnt].flags = 0;
+ sent_messages[sent_messages_cnt].wParam = wParam;
+ sent_messages[sent_messages_cnt++].lParam = HIWORD(lParam) & (KF_UP|KF_EXTENDED);
+ }
}
return DefWindowProc(hWnd, Msg, wParam, lParam);
}
@@ -810,10 +823,14 @@ static LRESULT CALLBACK hook_proc(int code, WPARAM wparam, LPARAM lparam)
if (code == HC_ACTION)
{
- sent_messages[sent_messages_cnt].message = wparam;
- sent_messages[sent_messages_cnt].flags = hook;
- sent_messages[sent_messages_cnt].wParam = hook_info->vkCode;
- sent_messages[sent_messages_cnt++].lParam = hook_info->flags & (LLKHF_UP|LLKHF_EXTENDED);
+ ok(sent_messages_cnt < MAXKEYMESSAGES, "Too many messages\n");
+ if (sent_messages_cnt < MAXKEYMESSAGES)
+ {
+ sent_messages[sent_messages_cnt].message = wparam;
+ sent_messages[sent_messages_cnt].flags = hook;
+ sent_messages[sent_messages_cnt].wParam = hook_info->vkCode;
+ sent_messages[sent_messages_cnt++].lParam = hook_info->flags & (LLKHF_UP|LLKHF_EXTENDED);
+ }
if(0) /* For some reason not stable on Wine */
{
@@ -838,16 +855,12 @@ static void test_Input_blackbox(void)
HWND window;
HHOOK hook;
- if (!pSendInput)
- {
- skip("SendInput is not available\n");
- return;
- }
-
window = CreateWindow("Static", NULL, WS_POPUP|WS_HSCROLL|WS_VSCROLL
|WS_VISIBLE, 0, 0, 200, 60, NULL, NULL,
NULL, NULL);
ok(window != NULL, "error: %d\n", (int) GetLastError());
+ SetWindowPos( window, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE );
+ SetForegroundWindow( window );
hook = SetWindowsHookExA(WH_KEYBOARD_LL, hook_proc, GetModuleHandleA( NULL ), 0);
@@ -872,6 +885,11 @@ 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) ))
+ {
+ win_skip( "window doesn't receive the queued input\n" );
+ break;
+ }
compare_and_check(ii, ks1, ks2, &sendinput_test[ii]);
}
@@ -1170,7 +1188,8 @@ static void test_key_map(void)
s = MapVirtualKeyEx(VK_SHIFT, MAPVK_VK_TO_VSC, kl);
ok(s != 0, "MapVirtualKeyEx(VK_SHIFT) should return non-zero\n");
sL = MapVirtualKeyEx(VK_LSHIFT, MAPVK_VK_TO_VSC, kl);
- ok(s == sL, "%x != %x\n", s, sL);
+ ok(s == sL || broken(sL == 0), /* win9x */
+ "%x != %x\n", s, sL);
kL = MapVirtualKeyEx(0x2a, MAPVK_VSC_TO_VK, kl);
ok(kL == VK_SHIFT, "Scan code -> vKey = %x (not VK_SHIFT)\n", kL);
@@ -1178,9 +1197,11 @@ static void test_key_map(void)
ok(kR == VK_SHIFT, "Scan code -> vKey = %x (not VK_SHIFT)\n", kR);
kL = MapVirtualKeyEx(0x2a, MAPVK_VSC_TO_VK_EX, kl);
- ok(kL == VK_LSHIFT, "Scan code -> vKey = %x (not VK_LSHIFT)\n", kL);
+ ok(kL == VK_LSHIFT || broken(kL == 0), /* win9x */
+ "Scan code -> vKey = %x (not VK_LSHIFT)\n", kL);
kR = MapVirtualKeyEx(0x36, MAPVK_VSC_TO_VK_EX, kl);
- ok(kR == VK_RSHIFT, "Scan code -> vKey = %x (not VK_RSHIFT)\n", kR);
+ ok(kR == VK_RSHIFT || broken(kR == 0), /* win9x */
+ "Scan code -> vKey = %x (not VK_RSHIFT)\n", kR);
/* test that MAPVK_VSC_TO_VK prefers the non-numpad vkey if there's ambiguity */
for (i = 0; i < sizeof(numpad_collisions)/sizeof(numpad_collisions[0]); i++)
@@ -1213,7 +1234,7 @@ static void test_ToUnicode(void)
ret = ToUnicode(VK_RETURN, SC_RETURN, state, wStr, 2, 0);
if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("ToUnicode is not implemented\n");
+ win_skip("ToUnicode is not implemented\n");
return;
}
@@ -1237,23 +1258,32 @@ static void test_ToUnicode(void)
todo_wine ok(ret == 0, "ToUnicode for CTRL + SHIFT + Return didn't return 0 (was %i)\n", ret);
}
+static void test_get_async_key_state(void)
+{
+ /* input value sanity checks */
+ ok(0 == GetAsyncKeyState(1000000), "GetAsyncKeyState did not return 0\n");
+ ok(0 == GetAsyncKeyState(-1000000), "GetAsyncKeyState did not return 0\n");
+}
+
START_TEST(input)
{
init_function_pointers();
- if (!pSendInput)
- skip("SendInput is not available\n");
- else
+ if (pSendInput)
+ {
+ test_Input_blackbox();
test_Input_whitebox();
+ }
+ else win_skip("SendInput is not available\n");
- test_Input_blackbox();
test_keynames();
test_mouse_ll_hook();
test_key_map();
test_ToUnicode();
+ test_get_async_key_state();
if(pGetMouseMovePointsEx)
test_GetMouseMovePointsEx();
else
- skip("GetMouseMovePointsEx is not available\n");
+ win_skip("GetMouseMovePointsEx is not available\n");
}
diff --git a/rostests/winetests/user32/listbox.c b/rostests/winetests/user32/listbox.c
index c8723576335..0aef698dbf5 100644
--- a/rostests/winetests/user32/listbox.c
+++ b/rostests/winetests/user32/listbox.c
@@ -50,7 +50,7 @@ static HWND
create_listbox (DWORD add_style, HWND parent)
{
HWND handle;
- int ctl_id=0;
+ INT_PTR ctl_id=0;
if (parent)
ctl_id=1;
handle=CreateWindow ("LISTBOX", "TestList",
@@ -59,10 +59,10 @@ create_listbox (DWORD add_style, HWND parent)
parent, (HMENU)ctl_id, NULL, 0);
assert (handle);
- SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) strings[0]);
- SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) strings[1]);
- SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) strings[2]);
- SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) strings[3]);
+ SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) strings[0]);
+ SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) strings[1]);
+ SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) strings[2]);
+ SendMessage (handle, LB_ADDSTRING, 0, (LPARAM) strings[3]);
#ifdef VISIBLE
ShowWindow (handle, SW_SHOW);
@@ -287,7 +287,7 @@ static void test_ownerdraw(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandle(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursor(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursor(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "main_window_class";
@@ -569,6 +569,7 @@ static void test_listbox_LB_DIR(void)
char pathBuffer[MAX_PATH];
char * p;
char driveletter;
+ const char *wildcard = "*";
HANDLE file;
file = CreateFileA( "wtest1.tmp.c", GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL );
@@ -587,12 +588,13 @@ static void test_listbox_LB_DIR(void)
/* Test for standard usage */
/* This should list all the files in the test directory. */
- strcpy(pathBuffer, "*");
+ strcpy(pathBuffer, wildcard);
SendMessage(hList, LB_RESETCONTENT, 0, 0);
res = SendMessage(hList, LB_DIR, 0, (LPARAM)pathBuffer);
if (res == -1) /* "*" wildcard doesn't work on win9x */
{
- strcpy(pathBuffer, "*.*");
+ wildcard = "*.*";
+ strcpy(pathBuffer, wildcard);
res = SendMessage(hList, LB_DIR, 0, (LPARAM)pathBuffer);
}
ok (res >= 0, "SendMessage(LB_DIR, 0, *) failed - 0x%08x\n", GetLastError());
@@ -647,15 +649,9 @@ static void test_listbox_LB_DIR(void)
}
/* Test DDL_DIRECTORY */
- strcpy(pathBuffer, "*");
+ strcpy(pathBuffer, wildcard);
SendMessage(hList, LB_RESETCONTENT, 0, 0);
res = SendMessage(hList, LB_DIR, DDL_DIRECTORY, (LPARAM)pathBuffer);
- if (res == -1 || res <= itemCount_allFiles) /* "*" wildcard doesn't work on win9x */
- {
- strcpy(pathBuffer, "*.*");
- SendMessage(hList, LB_RESETCONTENT, 0, 0);
- res = SendMessage(hList, LB_DIR, DDL_DIRECTORY, (LPARAM)pathBuffer);
- }
ok (res > 0, "SendMessage(LB_DIR, DDL_DIRECTORY, *) failed - 0x%08x\n", GetLastError());
/* There should be some content in the listbox.
@@ -711,7 +707,7 @@ static void test_listbox_LB_DIR(void)
/* Test DDL_DRIVES|DDL_EXCLUSIVE */
- strcpy(pathBuffer, "*");
+ strcpy(pathBuffer, wildcard);
SendMessage(hList, LB_RESETCONTENT, 0, 0);
res = SendMessage(hList, LB_DIR, DDL_DRIVES|DDL_EXCLUSIVE, (LPARAM)pathBuffer);
ok (res >= 0, "SendMessage(LB_DIR, DDL_DRIVES|DDL_EXCLUSIVE, *) failed - 0x%08x\n", GetLastError());
@@ -758,7 +754,7 @@ static void test_listbox_LB_DIR(void)
itemCount_justFiles, itemCount_justDrives);
/* Test DDL_DRIVES. */
- strcpy(pathBuffer, "*");
+ strcpy(pathBuffer, wildcard);
SendMessage(hList, LB_RESETCONTENT, 0, 0);
res = SendMessage(hList, LB_DIR, DDL_DRIVES, (LPARAM)pathBuffer);
ok (res > 0, "SendMessage(LB_DIR, DDL_DRIVES, *) failed - 0x%08x\n", GetLastError());
@@ -769,8 +765,7 @@ static void test_listbox_LB_DIR(void)
* been added.
*/
itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0);
- ok (itemCount == itemCount_justDrives + itemCount_allFiles ||
- broken(itemCount == itemCount_justDrives), /* "*" wildcard broken on win9x */
+ ok (itemCount == itemCount_justDrives + itemCount_allFiles,
"SendMessage(LB_DIR, DDL_DRIVES, *) filled with %d entries, expected %d\n",
itemCount, itemCount_justDrives + itemCount_allFiles);
ok(res + 1 == itemCount, "SendMessage(LB_DIR, DDL_DRIVES, *) returned incorrect index!\n");
@@ -822,7 +817,7 @@ static void test_listbox_LB_DIR(void)
/* Test DDL_DIRECTORY|DDL_DRIVES. This does *not* imply DDL_EXCLUSIVE */
- strcpy(pathBuffer, "*");
+ strcpy(pathBuffer, wildcard);
SendMessage(hList, LB_RESETCONTENT, 0, 0);
res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_DRIVES, (LPARAM)pathBuffer);
ok (res > 0, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES, *) failed - 0x%08x\n", GetLastError());
@@ -831,8 +826,7 @@ static void test_listbox_LB_DIR(void)
* be exactly the number of plain files, plus the number of mapped drives.
*/
itemCount = SendMessage(hList, LB_GETCOUNT, 0, 0);
- ok (itemCount == itemCount_allFiles + itemCount_justDrives + itemCount_allDirs ||
- broken(itemCount == itemCount_justDrives + itemCount_allDirs), /* "*" wildcard broken on win9x */
+ ok (itemCount == itemCount_allFiles + itemCount_justDrives + itemCount_allDirs,
"SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES) filled with %d entries, expected %d\n",
itemCount, itemCount_allFiles + itemCount_justDrives + itemCount_allDirs);
ok(res + 1 == itemCount, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES, w*.c) returned incorrect index!\n");
@@ -898,7 +892,7 @@ static void test_listbox_LB_DIR(void)
}
/* Test DDL_DIRECTORY|DDL_EXCLUSIVE. */
- strcpy(pathBuffer, "*");
+ strcpy(pathBuffer, wildcard);
SendMessage(hList, LB_RESETCONTENT, 0, 0);
res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_EXCLUSIVE, (LPARAM)pathBuffer);
ok (res != -1, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_EXCLUSIVE, *) failed err %u\n", GetLastError());
@@ -940,7 +934,7 @@ static void test_listbox_LB_DIR(void)
itemCount, 0);
/* Test DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE. */
- strcpy(pathBuffer, "*");
+ strcpy(pathBuffer, wildcard);
SendMessage(hList, LB_RESETCONTENT, 0, 0);
res = SendMessage(hList, LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE, (LPARAM)pathBuffer);
ok (res > 0, "SendMessage(LB_DIR, DDL_DIRECTORY|DDL_DRIVES|DDL_EXCLUSIVE, w*.c,) failed - 0x%08x\n", GetLastError());
diff --git a/rostests/winetests/user32/menu.c b/rostests/winetests/user32/menu.c
index adc9410d22c..4d0e7d4ad3f 100755
--- a/rostests/winetests/user32/menu.c
+++ b/rostests/winetests/user32/menu.c
@@ -169,8 +169,8 @@ static LRESULT WINAPI menu_ownerdraw_wnd_proc(HWND hwnd, UINT msg,
RECT rc;
GetMenuItemRect( hwnd, (HMENU)pdis->hwndItem, pdis->itemData ,&rc);
trace("WM_DRAWITEM received hwnd %p hmenu %p itemdata %ld item %d rc %d,%d-%d,%d itemrc: %d,%d-%d,%d\n",
- hwnd, (HMENU)pdis->hwndItem, pdis->itemData,
- pdis->itemID, pdis->rcItem.left, pdis->rcItem.top,
+ hwnd, pdis->hwndItem, pdis->itemData, pdis->itemID,
+ pdis->rcItem.left, pdis->rcItem.top,
pdis->rcItem.right,pdis->rcItem.bottom,
rc.left,rc.top,rc.right,rc.bottom);
oldpen=SelectObject( pdis->hDC, GetStockObject(
@@ -285,7 +285,7 @@ static void test_menu_ownerdraw(void)
NULL, NULL, NULL, NULL);
ok(hwnd != NULL, "CreateWindowEx failed with error %d\n", GetLastError());
if( !hwnd) return;
- SetWindowLongPtr( hwnd, GWLP_WNDPROC, (LONG)menu_ownerdraw_wnd_proc);
+ SetWindowLongPtr( hwnd, GWLP_WNDPROC, (LONG_PTR)menu_ownerdraw_wnd_proc);
hmenu = CreatePopupMenu();
ok(hmenu != NULL, "CreateMenu failed with error %d\n", GetLastError());
if( !hmenu) { DestroyWindow(hwnd);return;}
@@ -293,7 +293,7 @@ static void test_menu_ownerdraw(void)
for( j=0;j<2;j++) /* create columns */
for(i=0;i<2;i++) { /* create rows */
ret = AppendMenu( hmenu, MF_OWNERDRAW |
- (i==0 ? MF_MENUBREAK : 0), k, (LPCTSTR) k);
+ (i==0 ? MF_MENUBREAK : 0), k, MAKEINTRESOURCE(k));
k++;
ok( ret, "AppendMenu failed for %d\n", k-1);
}
@@ -444,53 +444,56 @@ static void test_mbs_help( int ispop, int hassub, int mnuopt,
DrawMenuBar( hwnd);
}
ret = GetMenuItemRect( hwnd, hmenu, 0, &rc);
- /* check menu width */
- if( ispop)
- expect = ( text || hbmp ?
- 4 + (mnuopt != 1 ? GetSystemMetrics(SM_CXMENUCHECK) : 0)
- : 0) +
- arrowwidth + MOD_avec + (hbmp ? bmpsize.cx + 2 : 0) +
- (text && hastab ? /* TAB space */
- MOD_avec + ( hastab==2 ? sc_size.cx : 0) : 0) +
- (text ? 2 + (text[0] ? size.cx :0): 0) ;
- else
- expect = !(text || hbmp) ? 0 :
- ( hbmp ? (text ? 2:0) + bmpsize.cx : 0 ) +
- (text ? 2 * MOD_avec + (text[0] ? size.cx :0): 0) ;
- ok( rc.right - rc.left == expect,
+ if (0) /* comment out menu size checks, behavior is different in almost every Windows version */
+ {
+ /* check menu width */
+ if( ispop)
+ expect = ( text || hbmp ?
+ 4 + (mnuopt != 1 ? GetSystemMetrics(SM_CXMENUCHECK) : 0)
+ : 0) +
+ arrowwidth + MOD_avec + (hbmp ? bmpsize.cx + 2 : 0) +
+ (text && hastab ? /* TAB space */
+ MOD_avec + ( hastab==2 ? sc_size.cx : 0) : 0) +
+ (text ? 2 + (text[0] ? size.cx :0): 0) ;
+ else
+ expect = !(text || hbmp) ? 0 :
+ ( hbmp ? (text ? 2:0) + bmpsize.cx : 0 ) +
+ (text ? 2 * MOD_avec + (text[0] ? size.cx :0): 0) ;
+ ok( rc.right - rc.left == expect,
"menu width wrong, got %d expected %d\n", rc.right - rc.left, expect);
- failed = failed || !(rc.right - rc.left == expect);
- /* check menu height */
- 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)));
- else
- expect = ( !(text || hbmp) ? GetSystemMetrics( SM_CYMENUSIZE)/2 :
- max( GetSystemMetrics( SM_CYMENU) - 1, (hbmp ? bmpsize.cy : 0)));
- ok( rc.bottom - rc.top == expect,
+ failed = failed || !(rc.right - rc.left == expect);
+ /* check menu height */
+ 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)));
+ else
+ expect = ( !(text || hbmp) ? GetSystemMetrics( SM_CYMENUSIZE)/2 :
+ max( GetSystemMetrics( SM_CYMENU) - 1, (hbmp ? bmpsize.cy : 0)));
+ ok( rc.bottom - rc.top == expect,
"menu height wrong, got %d expected %d (%d)\n",
rc.bottom - rc.top, expect, GetSystemMetrics( SM_CYMENU));
- failed = failed || !(rc.bottom - rc.top == expect);
- if( hbmp == HBMMENU_CALLBACK && MOD_GotDrawItemMsg) {
- /* check the position of the bitmap */
- /* horizontal */
- if (!ispop)
- expect = 3;
- else if (mnuopt == 0)
- expect = 4 + GetSystemMetrics(SM_CXMENUCHECK);
- else if (mnuopt == 1)
- expect = 4;
- else /* mnuopt == 2 */
- expect = 2;
- ok( expect == MOD_rc[0].left,
+ failed = failed || !(rc.bottom - rc.top == expect);
+ if( hbmp == HBMMENU_CALLBACK && MOD_GotDrawItemMsg) {
+ /* check the position of the bitmap */
+ /* horizontal */
+ if (!ispop)
+ expect = 3;
+ else if (mnuopt == 0)
+ expect = 4 + GetSystemMetrics(SM_CXMENUCHECK);
+ else if (mnuopt == 1)
+ expect = 4;
+ else /* mnuopt == 2 */
+ expect = 2;
+ ok( expect == MOD_rc[0].left,
"bitmap left is %d expected %d\n", MOD_rc[0].left, expect);
- failed = failed || !(expect == MOD_rc[0].left);
- /* vertical */
- expect = (rc.bottom - rc.top - MOD_rc[0].bottom + MOD_rc[0].top) / 2;
- ok( expect == MOD_rc[0].top,
+ failed = failed || !(expect == MOD_rc[0].left);
+ /* vertical */
+ expect = (rc.bottom - rc.top - MOD_rc[0].bottom + MOD_rc[0].top) / 2;
+ ok( expect == MOD_rc[0].top,
"bitmap top is %d expected %d\n", MOD_rc[0].top, expect);
- failed = failed || !(expect == MOD_rc[0].top);
+ failed = failed || !(expect == MOD_rc[0].top);
+ }
}
/* if there was a failure, report details */
if( failed) {
@@ -524,7 +527,7 @@ static void test_menu_bmp_and_string(void)
if( !pGetMenuInfo)
{
- skip("GetMenuInfo is not available\n");
+ win_skip("GetMenuInfo is not available\n");
return;
}
@@ -538,7 +541,7 @@ static void test_menu_bmp_and_string(void)
ok(hwnd != NULL, "CreateWindowEx failed with error %d\n", GetLastError());
if( !hwnd) return;
- SetWindowLongPtr( hwnd, GWLP_WNDPROC, (LONG)menu_ownerdraw_wnd_proc);
+ SetWindowLongPtr( hwnd, GWLP_WNDPROC, (LONG_PTR)menu_ownerdraw_wnd_proc);
if( winetest_debug)
trace(" check %d,%d arrow %d avechar %d\n",
@@ -552,7 +555,7 @@ static void test_menu_bmp_and_string(void)
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 };
- ok( (int)hbm, "CreateBitmap failed err %d\n", GetLastError());
+ 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 */
for( mnuopt = 0; mnuopt < 3 ; mnuopt++){ /* test MNS_NOCHECK/MNS_CHECKORBMP */
@@ -630,9 +633,9 @@ static void test_menu_add_string( void )
ok (!strcmp( strback, "Dummy string" ), "Menu text from Ansi version incorrect\n");
SetLastError(0xdeadbeef);
- ret = GetMenuStringW( hmenu, 0, (WCHAR *)strbackW, 99, MF_BYPOSITION);
+ ret = GetMenuStringW( hmenu, 0, strbackW, 99, MF_BYPOSITION );
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
- skip("GetMenuStringW is not implemented\n");
+ win_skip("GetMenuStringW is not implemented\n");
else
{
ok (ret, "GetMenuStringW on ownerdraw entry failed\n");
@@ -695,7 +698,7 @@ static void test_menu_add_string( void )
SetLastError(0xdeadbeef);
ret = GetMenuStringW( hmenu, 0, NULL, 0, MF_BYPOSITION);
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
- skip("GetMenuStringW is not implemented\n");
+ win_skip("GetMenuStringW is not implemented\n");
else
ok (!ret, "GetMenuStringW on ownerdraw entry succeeded.\n");
@@ -717,130 +720,173 @@ static WCHAR *strcpyW( WCHAR *dst, const WCHAR *src )
return dst;
}
+static void insert_menu_item( int line, HMENU hmenu, BOOL ansi, UINT mask, UINT type, UINT state, UINT id,
+ HMENU submenu, HBITMAP checked, HBITMAP unchecked, ULONG_PTR data,
+ void *type_data, UINT len, HBITMAP item, BOOL expect )
+{
+ MENUITEMINFOA info;
+ BOOL ret;
-#define DMIINFF( i, e, field)\
- ok((int)((i)->field)==(int)((e)->field) || (int)((i)->field)==(0xffff & (int)((e)->field)), \
- "%s got 0x%x expected 0x%x\n", #field, (int)((i)->field), (int)((e)->field));
+ /* magic bitmap handle to test smaller cbSize */
+ if (item == (HBITMAP)(ULONG_PTR)0xdeadbeef)
+ info.cbSize = FIELD_OFFSET(MENUITEMINFOA,hbmpItem);
+ else
+ info.cbSize = sizeof(info);
+ info.fMask = mask;
+ info.fType = type;
+ info.fState = state;
+ info.wID = id;
+ info.hSubMenu = submenu;
+ info.hbmpChecked = checked;
+ info.hbmpUnchecked = unchecked;
+ info.dwItemData = data;
+ info.dwTypeData = type_data;
+ info.cch = len;
+ info.hbmpItem = item;
+ SetLastError( 0xdeadbeef );
+ if (ansi) ret = InsertMenuItemA( hmenu, 0, TRUE, &info );
+ else ret = InsertMenuItemW( hmenu, 0, TRUE, (MENUITEMINFOW*)&info );
+ if (!expect) ok_(__FILE__, line)( !ret, "InsertMenuItem should have failed.\n" );
+ else ok_(__FILE__, line)( ret, "InsertMenuItem failed, err %u\n", GetLastError());
+}
-#define DUMPMIINF(s,i,e)\
-{\
- DMIINFF( i, e, fMask)\
- DMIINFF( i, e, fType)\
- DMIINFF( i, e, fState)\
- DMIINFF( i, e, wID)\
- DMIINFF( i, e, hSubMenu)\
- DMIINFF( i, e, hbmpChecked)\
- DMIINFF( i, e, hbmpUnchecked)\
- DMIINFF( i, e, dwItemData)\
- DMIINFF( i, e, dwTypeData)\
- DMIINFF( i, e, cch)\
- if( s==sizeof(MENUITEMINFOA)) DMIINFF( i, e, hbmpItem)\
-}
+static void check_menu_item_info( int line, HMENU hmenu, BOOL ansi, UINT mask, UINT type, UINT state,
+ UINT id, HMENU submenu, HBITMAP checked, HBITMAP unchecked,
+ ULONG_PTR data, void *type_data, UINT in_len, UINT out_len,
+ HBITMAP item, LPCSTR expname, BOOL expect, BOOL expstring )
+{
+ MENUITEMINFOA info;
+ BOOL ret;
+ WCHAR buffer[80];
-/* insert menu item */
-#define TMII_INSMI( a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,\
- eret1)\
-{\
- MENUITEMINFOA info1=a1 b1,c1,d1,e1,f1,(void*)g1,(void*)h1,(void*)i1,j1,(void*)k1,l1,(void*)m1 n1;\
- HMENU hmenu = CreateMenu();\
- BOOL ret, stop = FALSE;\
- SetLastError( 0xdeadbeef);\
- if(ansi)strcpy( string, init);\
- else strcpyW( (WCHAR*)string, (WCHAR*)init);\
- if( ansi) ret = InsertMenuItemA(hmenu, 0, TRUE, &info1 );\
- else ret = InsertMenuItemW(hmenu, 0, TRUE, (MENUITEMINFOW*)&info1 );\
- if( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)\
- {\
- skip("InsertMenuItem%s not implemented\n", ansi ? "A" : "W");\
- break;\
- }\
- if( !(eret1)) { ok( (eret1)==ret,"InsertMenuItem should have failed.\n");\
- stop = TRUE;\
- } else ok( (eret1)==ret,"InsertMenuItem failed, err %d\n",GetLastError());\
+ SetLastError( 0xdeadbeef );
+ memset( &info, 0xcc, sizeof(info) );
+ info.cbSize = sizeof(info);
+ info.fMask = mask;
+ info.dwTypeData = type_data;
+ info.cch = in_len;
+ ret = ansi ? GetMenuItemInfoA( hmenu, 0, TRUE, &info ) :
+ GetMenuItemInfoW( hmenu, 0, TRUE, (MENUITEMINFOW *)&info );
+ if (!expect)
+ {
+ ok_(__FILE__, line)( !ret, "GetMenuItemInfo should have failed.\n" );
+ return;
+ }
+ ok_(__FILE__, line)( ret, "GetMenuItemInfo failed, err %u\n", GetLastError());
+ if (mask & MIIM_TYPE)
+ ok_(__FILE__, line)( info.fType == type || info.fType == LOWORD(type),
+ "wrong type %x/%x\n", info.fType, type );
+ if (mask & MIIM_STATE)
+ ok_(__FILE__, line)( info.fState == state || info.fState == LOWORD(state),
+ "wrong state %x/%x\n", info.fState, state );
+ if (mask & MIIM_ID)
+ ok_(__FILE__, line)( info.wID == id || info.wID == LOWORD(id),
+ "wrong id %x/%x\n", info.wID, id );
+ if (mask & MIIM_SUBMENU)
+ ok_(__FILE__, line)( info.hSubMenu == submenu || (ULONG_PTR)info.hSubMenu == LOWORD(submenu),
+ "wrong submenu %p/%p\n", info.hSubMenu, submenu );
+ if (mask & MIIM_CHECKMARKS)
+ {
+ ok_(__FILE__, line)( info.hbmpChecked == checked || (ULONG_PTR)info.hbmpChecked == LOWORD(checked),
+ "wrong bmpchecked %p/%p\n", info.hbmpChecked, checked );
+ ok_(__FILE__, line)( info.hbmpUnchecked == unchecked || (ULONG_PTR)info.hbmpUnchecked == LOWORD(unchecked),
+ "wrong bmpunchecked %p/%p\n", info.hbmpUnchecked, unchecked );
+ }
+ if (mask & MIIM_DATA)
+ ok_(__FILE__, line)( info.dwItemData == data || info.dwItemData == LOWORD(data),
+ "wrong item data %lx/%lx\n", info.dwItemData, data );
+ if (mask & MIIM_BITMAP)
+ ok_(__FILE__, line)( info.hbmpItem == item || (ULONG_PTR)info.hbmpItem == LOWORD(item),
+ "wrong bmpitem %p/%p\n", info.hbmpItem, item );
+ ok_(__FILE__, line)( info.dwTypeData == type_data || (ULONG_PTR)info.dwTypeData == LOWORD(type_data),
+ "wrong type data %p/%p\n", info.dwTypeData, type_data );
+ ok_(__FILE__, line)( info.cch == out_len, "wrong len %x/%x\n", info.cch, out_len );
+ if (expname)
+ {
+ if(ansi)
+ ok_(__FILE__, line)( !strncmp( expname, info.dwTypeData, out_len ),
+ "menu item name differed from '%s' '%s'\n", expname, info.dwTypeData );
+ else
+ ok_(__FILE__, line)( !strncmpW( (WCHAR *)expname, (WCHAR *)info.dwTypeData, out_len ),
+ "menu item name wrong\n" );
+
+ SetLastError( 0xdeadbeef );
+ ret = ansi ? GetMenuStringA( hmenu, 0, (char *)buffer, 80, MF_BYPOSITION ) :
+ GetMenuStringW( hmenu, 0, buffer, 80, MF_BYPOSITION );
+ if (expstring)
+ ok_(__FILE__, line)( ret, "GetMenuString failed, err %u\n", GetLastError());
+ else
+ ok_(__FILE__, line)( !ret, "GetMenuString should have failed\n" );
+ }
+}
+
+static void modify_menu( int line, HMENU hmenu, BOOL ansi, UINT flags, UINT_PTR id, void *data )
+{
+ BOOL ret;
+
+ SetLastError( 0xdeadbeef );
+ if (ansi) ret = ModifyMenuA( hmenu, 0, flags, id, data );
+ else ret = ModifyMenuW( hmenu, 0, flags, id, data );
+ ok_(__FILE__,line)( ret, "ModifyMenuA failed, err %u\n", GetLastError());
+}
+
+static void set_menu_item_info( int line, HMENU hmenu, BOOL ansi, UINT mask, UINT type, UINT state,
+ UINT id, HMENU submenu, HBITMAP checked, HBITMAP unchecked, ULONG_PTR data,
+ void *type_data, UINT len, HBITMAP item )
+
+{
+ MENUITEMINFOA info;
+ BOOL ret;
+
+ /* magic bitmap handle to test smaller cbSize */
+ if (item == (HBITMAP)(ULONG_PTR)0xdeadbeef)
+ info.cbSize = FIELD_OFFSET(MENUITEMINFOA,hbmpItem);
+ else
+ info.cbSize = sizeof(info);
+ info.fMask = mask;
+ info.fType = type;
+ info.fState = state;
+ info.wID = id;
+ info.hSubMenu = submenu;
+ info.hbmpChecked = checked;
+ info.hbmpUnchecked = unchecked;
+ info.dwItemData = data;
+ info.dwTypeData = type_data;
+ info.cch = len;
+ info.hbmpItem = item;
+ SetLastError( 0xdeadbeef );
+ if (ansi) ret = SetMenuItemInfoA( hmenu, 0, TRUE, &info );
+ else ret = SetMenuItemInfoW( hmenu, 0, TRUE, (MENUITEMINFOW*)&info );
+ ok_(__FILE__, line)( ret, "SetMenuItemInfo failed, err %u\n", GetLastError());
+}
+
+#define TMII_INSMI( c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,eret1 )\
+ hmenu = CreateMenu();\
+ submenu = CreateMenu();\
+ if(ansi)strcpy( string, init );\
+ else strcpyW( string, init );\
+ insert_menu_item( __LINE__, hmenu, ansi, c1, d1, e1, f1, g1, h1, i1, j1, k1, l1, m1, eret1 )
/* GetMenuItemInfo + GetMenuString */
-#define TMII_GMII( a2,b2,c2,d2,e2,f2,g2,h2,i2,j2,k2,l2,m2,n2,\
- a3,b3,c3,d3,e3,f3,g3,h3,i3,j3,k3,l3,m3,n3,\
+#define TMII_GMII( c2,l2,\
+ d3,e3,f3,g3,h3,i3,j3,k3,l3,m3,\
expname, eret2, eret3)\
-{\
- MENUITEMINFOA info2A=a2 b2,c2,d2,e2,f2,(void*)g2,(void*)h2,(void*)i2,j2,(void*)k2,l2,(void*)m2 n2;\
- MENUITEMINFOA einfoA=a3 b3,c3,d3,e3,f3,(void*)g3,(void*)h3,(void*)i3,j3,(void*)k3,l3,(void*)m3 n3;\
- MENUITEMINFOA *info2 = &info2A;\
- MENUITEMINFOA *einfo = &einfoA;\
- MENUITEMINFOW *info2W = (MENUITEMINFOW *)&info2A;\
- if( !stop) {\
- SetLastError( 0xdeadbeef);\
- ret = ansi ? GetMenuItemInfoA( hmenu, 0, TRUE, info2 ) :\
- GetMenuItemInfoW( hmenu, 0, TRUE, info2W );\
- if( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)\
- {\
- skip("GetMenuItemInfo%s not implemented\n", ansi ? "A" : "W");\
- break;\
- }\
- if( !(eret2)) ok( (eret2)==ret,"GetMenuItemInfo should have failed.\n");\
- else { \
- ok( (eret2)==ret,"GetMenuItemInfo failed, err %d\n",GetLastError());\
- ret = memcmp( info2, einfo, sizeof einfoA);\
- /* ok( ret==0, "Got wrong menu item info data\n");*/\
- if( ret) DUMPMIINF(info2A.cbSize, &info2A, &einfoA)\
- if( einfo->dwTypeData == string) {\
- if(ansi) ok( !strncmp( expname, info2->dwTypeData, einfo->cch ), "menu item name differed \"%s\"\n",\
- einfo->dwTypeData ? einfo->dwTypeData: "");\
- else ok( !strncmpW( (WCHAR*)expname, (WCHAR*)info2->dwTypeData, einfo->cch ), "menu item name differed \"%s\"\n",\
- einfo->dwTypeData ? einfo->dwTypeData: "");\
- ret = ansi ? GetMenuStringA( hmenu, 0, string, 80, MF_BYPOSITION) :\
- GetMenuStringW( hmenu, 0, string, 80, MF_BYPOSITION);\
- if( (eret3)){\
- ok( ret, "GetMenuString failed, err %d\n",GetLastError());\
- }else\
- ok( !ret, "GetMenuString should have failed\n");\
- }\
- }\
- }\
-}
+ check_menu_item_info( __LINE__, hmenu, ansi, c2, d3, e3, f3, g3, h3, i3, j3, k3, l2, l3, m3, \
+ expname, eret2, eret3 )
#define TMII_DONE \
RemoveMenu(hmenu, 0, TRUE );\
DestroyMenu( hmenu );\
- DestroyMenu( submenu );\
-submenu = CreateMenu();\
-}
+ DestroyMenu( submenu );
+
/* modify menu */
-#define TMII_MODM( flags, id, data, eret )\
-if( !stop) {\
- SetLastError( 0xdeadbeef);\
- if(ansi)ret = ModifyMenuA( hmenu, 0, flags, (UINT_PTR)id, (char*)data);\
- else ret = ModifyMenuW( hmenu, 0, flags, (UINT_PTR)id, (WCHAR*)data);\
- if( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)\
- {\
- skip("ModifyMenu%s not implemented\n", ansi ? "A" : "W");\
- break;\
- }\
- if( !(eret)) ok( (eret)==ret,"ModifyMenuA should have failed.\n");\
- else ok( (eret)==ret,"ModifyMenuA failed, err %d\n",GetLastError());\
-}
+#define TMII_MODM( flags, id, data ) \
+ modify_menu( __LINE__, hmenu, ansi, flags, id, data )
/* SetMenuItemInfo */
-#define TMII_SMII( a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,\
- eret1)\
-if( !stop) {\
- MENUITEMINFOA info1=a1 b1,c1,d1,e1,f1,(void*)g1,(void*)h1,(void*)i1,j1,(void*)k1,l1,(void*)m1 n1;\
- SetLastError( 0xdeadbeef);\
- if(ansi)strcpy( string, init);\
- else strcpyW( (WCHAR*)string, (WCHAR*)init);\
- if( ansi) ret = SetMenuItemInfoA(hmenu, 0, TRUE, &info1 );\
- else ret = SetMenuItemInfoW(hmenu, 0, TRUE, (MENUITEMINFOW*)&info1 );\
- if( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)\
- {\
- skip("SetMenuItemInfo%s not implemented\n", ansi ? "A" : "W");\
- break;\
- }\
- if( !(eret1)) { ok( (eret1)==ret,"InsertMenuItem should have failed.\n");\
- stop = TRUE;\
- } else ok( (eret1)==ret,"InsertMenuItem failed, err %d\n",GetLastError());\
-}
-
+#define TMII_SMII( c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1 ) \
+ set_menu_item_info( __LINE__, hmenu, ansi, c1, d1, e1, f1, g1, h1, i1, j1, k1, l1, m1 )
#define OK 1
@@ -849,7 +895,6 @@ if( !stop) {\
static void test_menu_iteminfo( void )
{
- int S=sizeof( MENUITEMINFOA);
int ansi = TRUE;
char txtA[]="wine";
char initA[]="XYZ";
@@ -860,7 +905,8 @@ static void test_menu_iteminfo( void )
void *txt, *init, *empty, *string;
HBITMAP hbm = CreateBitmap(1,1,1,1,NULL);
char stringA[0x80];
- HMENU submenu=CreateMenu();
+ HMENU hmenu, submenu=CreateMenu();
+ HBITMAP dummy_hbm = (HBITMAP)(ULONG_PTR)0xdeadbeef;
do {
if( ansi) {txt=txtA;init=initA;empty=emptyA;string=stringA;}
@@ -868,481 +914,465 @@ static void test_menu_iteminfo( void )
trace( "%s string %p hbm %p txt %p\n", ansi ? "ANSI tests: " : "Unicode tests:", string, hbm, txt);
/* test all combinations of MFT_STRING, MFT_OWNERDRAW and MFT_BITMAP */
/* (since MFT_STRING is zero, there are four of them) */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, 0, 0, 0, 0, 0, 0, txt, 0, 0, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, 0, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING, 0, 0, 0, 0, 0, 0, txt, 0, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_STRING, 0, 0, 0, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, 0, 0, 0, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, txt, 0, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_STRING|MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ NULL, OK, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP, -1, -1, 0, 0, 0, -1, hbm, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP, 0, 0, 0, 0, 0, 0, hbm, 0, hbm,
+ NULL, OK, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, hbm, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, hbm, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP|MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, hbm, 0, hbm,
+ NULL, OK, ER );
TMII_DONE
/* not enough space for name*/
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, NULL, 0, -9, },
- {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, NULL, 4, 0, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 0,
+ MFT_STRING, 0, 0, 0, 0, 0, 0, NULL, 4, 0,
+ NULL, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 5, -9, },
- {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, 0, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 5,
+ MFT_STRING, 0, 0, 0, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 4, -9, },
- {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 3, 0, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 4,
+ MFT_STRING, 0, 0, 0, 0, 0, 0, string, 3, 0,
+ txt, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, NULL, 0, -9, },
- {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 0, 0, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_FTYPE|MIIM_STRING, MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, NULL, 0, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 0,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, NULL, 0, 0,
+ NULL, OK, ER );
TMII_DONE
/* cannot combine MIIM_TYPE with some other flags */
- TMII_INSMI( {, S, MIIM_TYPE|MIIM_STRING, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, ER)
- TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE|MIIM_STRING, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 6, 0, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE|MIIM_STRING, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- empty, ER, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE|MIIM_STRING, 80,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ NULL, ER, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE|MIIM_FTYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, ER)
- TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE|MIIM_FTYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 6, 0, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- empty, ER, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE|MIIM_FTYPE, 80,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ NULL, ER, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE|MIIM_BITMAP, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, 6, hbm, }, ER)
- TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE|MIIM_BITMAP, MFT_BITMAP, -1, -1, 0, 0, 0, -1, hbm, 6, hbm, ER );
TMII_DONE
/* but succeeds with some others */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE|MIIM_SUBMENU, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE|MIIM_SUBMENU, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, 0, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE|MIIM_SUBMENU, 80,
+ MFT_STRING, 0, 0, 0, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE|MIIM_STATE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE|MIIM_STATE, MFT_STRING, 0, -9, 0, -9, -9, -9, string, 4, 0, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE|MIIM_STATE, 80,
+ MFT_STRING, 0, 0, 0, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE|MIIM_ID, MFT_STRING, -1, 888, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE|MIIM_ID, MFT_STRING, -9, 888, 0, -9, -9, -9, string, 4, 0, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_TYPE|MIIM_ID, MFT_STRING, -1, 888, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE|MIIM_ID, 80,
+ MFT_STRING, 0, 888, 0, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING, -1, -1, -1, -1, -1, 999, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE|MIIM_DATA, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING, -9, -9, 0, -9, -9, 999, string, 4, 0, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_TYPE|MIIM_DATA, MFT_STRING, -1, -1, 0, 0, 0, 999, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE|MIIM_DATA, 80,
+ MFT_STRING, 0, 0, 0, 0, 0, 999, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
/* to be continued */
/* set text with MIIM_TYPE and retrieve with MIIM_STRING */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, -9, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_STRING|MIIM_FTYPE, 80,
+ MFT_STRING, 0, 0, 0, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
/* set text with MIIM_TYPE and retrieve with MIIM_STRING; MFT_OWNERDRAW causes an empty string */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 0, -9, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_STRING|MIIM_FTYPE, 80,
+ MFT_STRING|MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, string, 0, 0,
+ empty, OK, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_STRING|MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 0, -9, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, NULL, 0, 0, OK );
+ TMII_GMII ( MIIM_STRING|MIIM_FTYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, string, 0, 0,
+ empty, OK, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 80, -9, },
- init, OK, ER )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, NULL, 0, 0, OK );
+ TMII_GMII ( MIIM_FTYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, string, 80, 0,
+ init, OK, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK)
- TMII_GMII ( {, S, 0, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, 0, -9, -9, -9, 0, -9, -9, -9, string, 80, -9, },
- init, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 0, 0, OK );
+ TMII_GMII ( 0, 80,
+ 0, 0, 0, 0, 0, 0, 0, string, 80, 0,
+ init, OK, OK );
TMII_DONE
/* contrary to MIIM_TYPE,you can set the text for an owner draw menu */
- TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_STRING|MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 4, -9, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, txt, 0, 0, OK );
+ TMII_GMII ( MIIM_STRING|MIIM_FTYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
/* same but retrieve with MIIM_TYPE */
- TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, txt, 0, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, NULL, 4, NULL,
+ NULL, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_STRING|MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 0, -9, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, NULL, 0, 0, OK );
+ TMII_GMII ( MIIM_STRING|MIIM_FTYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, string, 0, 0,
+ empty, OK, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_STRING|MIIM_FTYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 0, -9, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_STRING|MIIM_FTYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, NULL, 0, 0, OK );
+ TMII_GMII ( MIIM_STRING|MIIM_FTYPE, 80,
+ MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, string, 0, 0,
+ empty, OK, ER );
TMII_DONE
/* How is that with bitmaps? */
- TMII_INSMI( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_BITMAP, -1, -1, -1, 0, 0, 0, -1, 0, -1, hbm, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP, 0, 0, 0, 0, 0, 0, hbm, 0, hbm,
+ NULL, OK, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_BITMAP|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_BITMAP|MIIM_FTYPE, 0, -9, -9, 0, -9, -9, -9, string, 80, hbm, },
- init, OK, ER )
+ TMII_INSMI( MIIM_BITMAP, -1, -1, -1, 0, 0, 0, -1, 0, -1, hbm, OK );
+ TMII_GMII ( MIIM_BITMAP|MIIM_FTYPE, 80,
+ 0, 0, 0, 0, 0, 0, 0, string, 80, hbm,
+ init, OK, ER );
TMII_DONE
/* MIIM_BITMAP does not like MFT_BITMAP */
- TMII_INSMI( {, S, MIIM_BITMAP|MIIM_FTYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, ER)
- TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- init, OK, OK )
+ TMII_INSMI( MIIM_BITMAP|MIIM_FTYPE, MFT_BITMAP, -1, -1, 0, 0, 0, -1, 0, -1, hbm, ER );
TMII_DONE
/* no problem with OWNERDRAWN */
- TMII_INSMI( {, S, MIIM_BITMAP|MIIM_FTYPE, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_BITMAP|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_BITMAP|MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 80, hbm, },
- init, OK, ER )
+ TMII_INSMI( MIIM_BITMAP|MIIM_FTYPE, MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, 0, -1, hbm, OK );
+ TMII_GMII ( MIIM_BITMAP|MIIM_FTYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, string, 80, hbm,
+ init, OK, ER );
TMII_DONE
/* setting MFT_BITMAP with MFT_FTYPE fails anyway */
- TMII_INSMI( {, S, MIIM_FTYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, ER)
- TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_FTYPE, MFT_BITMAP, -1, -1, 0, 0, 0, -1, 0, -1, 0, ER );
TMII_DONE
/* menu with submenu */
- TMII_INSMI( {, S, MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, submenu, -1, -1, -1, txt, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_SUBMENU, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_SUBMENU, -9, -9, -9, submenu, -9, -9, -9, string, 80, -9, },
- init, OK, ER )
+ TMII_INSMI( MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, submenu, 0, 0, -1, txt, 0, 0, OK );
+ TMII_GMII ( MIIM_SUBMENU, 80,
+ 0, 0, 0, submenu, 0, 0, 0, string, 80, 0,
+ init, OK, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, submenu, -1, -1, -1, empty, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_SUBMENU, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_SUBMENU, -9, -9, -9, submenu, -9, -9, -9, string, 80, -9, },
- init, OK, ER )
+ TMII_INSMI( MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, submenu, 0, 0, -1, empty, 0, 0, OK );
+ TMII_GMII ( MIIM_SUBMENU, 80,
+ 0, 0, 0, submenu, 0, 0, 0, string, 80, 0,
+ init, OK, ER );
TMII_DONE
/* menu with submenu, without MIIM_SUBMENU the submenufield is cleared */
- TMII_INSMI( {, S, MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, submenu, -1, -1, -1, txt, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING|MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 0, -9, },
- empty, OK, ER )
- TMII_GMII ( {, S, MIIM_SUBMENU|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_SUBMENU|MIIM_FTYPE, MFT_SEPARATOR, -9, -9, submenu, -9, -9, -9, string, 80, -9, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, submenu, 0, 0, -1, txt, 0, 0, OK );
+ TMII_GMII ( MIIM_STRING|MIIM_FTYPE, 80,
+ MFT_STRING|MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, string, 0, 0,
+ empty, OK, ER );
+ TMII_GMII ( MIIM_SUBMENU|MIIM_FTYPE, 80,
+ MFT_SEPARATOR, 0, 0, submenu, 0, 0, 0, string, 80, 0,
+ empty, OK, ER );
TMII_DONE
/* menu with invalid submenu */
- TMII_INSMI( {, S, MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, 999, -1, -1, -1, txt, 0, -1, }, ER)
- TMII_GMII ( {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- {, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, },
- init, OK, ER )
+ TMII_INSMI( MIIM_SUBMENU|MIIM_FTYPE, MFT_STRING, -1, -1, (HMENU)999, 0, 0, -1, txt, 0, 0, ER );
TMII_DONE
/* Separator */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, txt, 0, 0, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, 0, 0, 0, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_TYPE, MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, txt, 0, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ NULL, OK, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP|MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, hbm, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP|MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP|MFT_SEPARATOR, -1, -1, 0, 0, 0, -1, hbm, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP|MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, hbm, 0, hbm,
+ NULL, OK, ER );
TMII_DONE
/* SEPARATOR and STRING go well together */
/* BITMAP and STRING go well together */
- TMII_INSMI( {, S, MIIM_STRING|MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, hbm, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_STRING|MIIM_BITMAP, -1, -1, -1, 0, 0, 0, -1, txt, 6, hbm, OK );
+ TMII_GMII ( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, 80,
+ MFT_STRING, 0, 0, 0, 0, 0, 0, string, 4, hbm,
+ txt, OK, OK );
TMII_DONE
/* BITMAP, SEPARATOR and STRING go well together */
- TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 4, hbm, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, 0, 0, 0, -1, txt, 6, hbm, OK );
+ TMII_GMII ( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, 80,
+ MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, string, 4, hbm,
+ txt, OK, OK );
TMII_DONE
/* last two tests, but use MIIM_TYPE to retrieve info */
- TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING, MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_FTYPE|MIIM_STRING, MFT_SEPARATOR, -1, -1, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, NULL, 4, NULL,
+ NULL, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_STRING|MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP, -9, -9, 0, -9, -9, -9, hbm, 4, hbm, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_STRING|MIIM_BITMAP, -1, -1, -1, 0, 0, 0, -1, txt, 6, hbm, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP, 0, 0, 0, 0, 0, 0, hbm, 4, hbm,
+ NULL, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_SEPARATOR|MFT_BITMAP, -9, -9, 0, -9, -9, -9, hbm, 4, hbm, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, 0, 0, 0, -1, txt, 6, hbm, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_SEPARATOR|MFT_BITMAP, 0, 0, 0, 0, 0, 0, hbm, 4, hbm,
+ NULL, OK, OK );
TMII_DONE
/* same three with MFT_OWNERDRAW */
- TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING, MFT_SEPARATOR|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_SEPARATOR|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_FTYPE|MIIM_STRING, MFT_SEPARATOR|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, txt, 6, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_SEPARATOR|MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, NULL, 4, NULL,
+ NULL, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, hbm, 4, hbm, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, txt, 6, hbm, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP|MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, hbm, 4, hbm,
+ NULL, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_SEPARATOR|MFT_BITMAP|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, hbm, 4, hbm, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, txt, 6, hbm, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_SEPARATOR|MFT_BITMAP|MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, hbm, 4, hbm,
+ NULL, OK, OK );
TMII_DONE
- TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE|MIIM_ID, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_STRING|MIIM_FTYPE|MIIM_ID, MFT_STRING|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, txt, 0, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, NULL, 4, NULL,
+ NULL, OK, OK );
TMII_DONE
/* test with modifymenu: string is preserved after setting OWNERDRAW */
- TMII_INSMI( {, S, MIIM_STRING, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK)
- TMII_MODM( MFT_OWNERDRAW, -1, 787, OK)
- TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_DATA, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_FTYPE|MIIM_STRING|MIIM_DATA, MFT_OWNERDRAW, -9, -9, 0, -9, -9, 787, string, 4, -9, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_STRING, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 0, 0, OK );
+ TMII_MODM( MFT_OWNERDRAW, -1, (void*)787 );
+ TMII_GMII ( MIIM_FTYPE|MIIM_STRING|MIIM_DATA, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 787, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
/* same with bitmap: now the text is cleared */
- TMII_INSMI( {, S, MIIM_STRING, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK)
- TMII_MODM( MFT_BITMAP, 545, hbm, OK)
- TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, MFT_BITMAP, -9, 545, 0, -9, -9, -9, string, 0, hbm, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_STRING, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 0, 0, OK );
+ TMII_MODM( MFT_BITMAP, 545, hbm );
+ TMII_GMII ( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, 80,
+ MFT_BITMAP, 0, 545, 0, 0, 0, 0, string, 0, hbm,
+ empty, OK, ER );
TMII_DONE
/* start with bitmap: now setting text clears it (though he flag is raised) */
- TMII_INSMI( {, S, MIIM_BITMAP, MFT_STRING, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, MFT_STRING, -9, 0, 0, -9, -9, -9, string, 0, hbm, },
- empty, OK, ER )
- TMII_MODM( MFT_STRING, 545, txt, OK)
- TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, MFT_STRING, -9, 545, 0, -9, -9, -9, string, 4, 0, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_BITMAP, MFT_STRING, -1, -1, 0, 0, 0, -1, 0, -1, hbm, OK );
+ TMII_GMII ( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, 80,
+ MFT_STRING, 0, 0, 0, 0, 0, 0, string, 0, hbm,
+ empty, OK, ER );
+ TMII_MODM( MFT_STRING, 545, txt );
+ TMII_GMII ( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, 80,
+ MFT_STRING, 0, 545, 0, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
/*repeat with text NULL */
- TMII_INSMI( {, S, MIIM_BITMAP, MFT_STRING, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK)
- TMII_MODM( MFT_STRING, 545, NULL, OK)
- TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, MFT_SEPARATOR, -9, 545, 0, -9, -9, -9, string, 0, 0, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_BITMAP, MFT_STRING, -1, -1, 0, 0, 0, -1, 0, -1, hbm, OK );
+ TMII_MODM( MFT_STRING, 545, NULL );
+ TMII_GMII ( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, 80,
+ MFT_SEPARATOR, 0, 545, 0, 0, 0, 0, string, 0, 0,
+ empty, OK, ER );
TMII_DONE
/* repeat with text "" */
- TMII_INSMI( {, S, MIIM_BITMAP, -1 , -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK)
- TMII_MODM( MFT_STRING, 545, empty, OK)
- TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, MFT_STRING, -9, 545, 0, -9, -9, -9, string, 0, 0, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_BITMAP, -1 , -1, -1, 0, 0, 0, -1, 0, -1, hbm, OK );
+ TMII_MODM( MFT_STRING, 545, empty );
+ TMII_GMII ( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_ID, 80,
+ MFT_STRING, 0, 545, 0, 0, 0, 0, string, 0, 0,
+ empty, OK, ER );
TMII_DONE
/* start with bitmap: set ownerdraw */
- TMII_INSMI( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK)
- TMII_MODM( MFT_OWNERDRAW, -1, 232, OK)
- TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_DATA, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_DATA, MFT_OWNERDRAW, -9, -9, 0, -9, -9, 232, string, 0, hbm, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_BITMAP, -1, -1, -1, 0, 0, 0, -1, 0, -1, hbm, OK );
+ TMII_MODM( MFT_OWNERDRAW, -1, (void *)232 );
+ TMII_GMII ( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP|MIIM_DATA, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 232, string, 0, hbm,
+ empty, OK, ER );
TMII_DONE
/* ask nothing */
- TMII_INSMI( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK)
- TMII_GMII ( {, S, 0, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, 0, -9, -9, -9, 0, -9, -9, -9, string, 80, -9, },
- init, OK, OK )
+ TMII_INSMI( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, 0, 0, 0, -1, txt, 6, hbm, OK );
+ TMII_GMII ( 0, 80,
+ 0, 0, 0, 0, 0, 0, 0, string, 80, 0,
+ init, OK, OK );
TMII_DONE
- /* some tests with small cbSize: the hbmpItem is to be ignored */
- TMII_INSMI( {, S - 4, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, NULL, 0, NULL, },
- empty, OK, ER )
+ /* some tests with small cbSize: the hbmpItem is to be ignored */
+ TMII_INSMI( MIIM_BITMAP, -1, -1, -1, 0, 0, 0, -1, 0, -1, dummy_hbm, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
+ NULL, OK, ER );
TMII_DONE
- TMII_INSMI( {, S - 4, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_BITMAP|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_BITMAP|MIIM_FTYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 80, NULL, },
- init, OK, ER )
+ TMII_INSMI( MIIM_BITMAP, -1, -1, -1, 0, 0, 0, -1, 0, -1, dummy_hbm, OK );
+ TMII_GMII ( MIIM_BITMAP|MIIM_FTYPE, 80,
+ MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, string, 80, NULL,
+ init, OK, ER );
TMII_DONE
- TMII_INSMI( {, S - 4, MIIM_STRING|MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, NULL, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_STRING|MIIM_BITMAP, -1, -1, -1, 0, 0, 0, -1, txt, 6, dummy_hbm, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_STRING, 0, 0, 0, 0, 0, 0, string, 4, NULL,
+ txt, OK, OK );
TMII_DONE
- TMII_INSMI( {, S - 4, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR, -1, -1, 0, 0, 0, -1, txt, 6, dummy_hbm, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, NULL, 4, NULL,
+ NULL, OK, OK );
TMII_DONE
- TMII_INSMI( {, S - 4, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, txt, 6, dummy_hbm, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, NULL, 4, NULL,
+ NULL, OK, OK );
TMII_DONE
- TMII_INSMI( {, S - 4, MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR|MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, txt, 6, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_SEPARATOR|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 4, NULL, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_FTYPE|MIIM_STRING|MIIM_BITMAP, MFT_SEPARATOR|MFT_OWNERDRAW, -1, -1, 0, 0, 0, -1, txt, 6, dummy_hbm, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_SEPARATOR|MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, NULL, 4, NULL,
+ NULL, OK, OK );
TMII_DONE
/* MIIM_TYPE by itself does not get/set the dwItemData for OwnerDrawn menus */
- TMII_INSMI( {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, 343, txt, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE|MIIM_DATA, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING|MFT_OWNERDRAW, -9, -9, 0, -9, -9, 343, 0, 0, 0, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_TYPE|MIIM_DATA, MFT_STRING|MFT_OWNERDRAW, -1, -1, 0, 0, 0, 343, txt, 0, 0, OK );
+ TMII_GMII ( MIIM_TYPE|MIIM_DATA, 80,
+ MFT_STRING|MFT_OWNERDRAW, 0, 0, 0, 0, 0, 343, 0, 0, 0,
+ NULL, OK, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, 343, txt, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, 0, 0, 0, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_TYPE|MIIM_DATA, MFT_STRING|MFT_OWNERDRAW, -1, -1, 0, 0, 0, 343, txt, 0, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_STRING|MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ NULL, OK, ER );
TMII_DONE
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, -1, -1, -1, 343, txt, 0, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE|MIIM_DATA, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE|MIIM_DATA, MFT_STRING|MFT_OWNERDRAW, -9, -9, 0, -9, -9, 0, 0, 0, 0, },
- empty, OK, ER )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING|MFT_OWNERDRAW, -1, -1, 0, 0, 0, 343, txt, 0, 0, OK );
+ TMII_GMII ( MIIM_TYPE|MIIM_DATA, 80,
+ MFT_STRING|MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ NULL, OK, ER );
TMII_DONE
/* set a string menu to ownerdraw with MIIM_TYPE */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_STRING, -2, -2, -2, -2, -2, -2, txt, -2, -2, }, OK)
- TMII_SMII( {, S, MIIM_TYPE, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, -1, -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_STRING|MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, string, 4, -9, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_STRING, -2, -2, 0, 0, 0, -2, txt, -2, 0, OK );
+ TMII_SMII ( MIIM_TYPE, MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
+ TMII_GMII ( MIIM_STRING|MIIM_FTYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
/* test with modifymenu add submenu */
- TMII_INSMI( {, S, MIIM_STRING, MFT_STRING, -1, -1, -1, -1, -1, -1, txt, 0, -1, }, OK)
- TMII_MODM( MF_POPUP, submenu, txt, OK)
- TMII_GMII ( {, S, MIIM_FTYPE|MIIM_STRING|MIIM_SUBMENU, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_FTYPE|MIIM_STRING|MIIM_SUBMENU, MFT_STRING, -9, -9, submenu, -9, -9, -9, string, 4, -9, },
- txt, OK, OK )
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_TYPE, MFT_STRING, -9, -9, 0, -9, -9, -9, string, 4, 0, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_STRING, MFT_STRING, -1, -1, 0, 0, 0, -1, txt, 0, 0, OK );
+ TMII_MODM( MF_POPUP, (UINT_PTR)submenu, txt );
+ TMII_GMII ( MIIM_FTYPE|MIIM_STRING|MIIM_SUBMENU, 80,
+ MFT_STRING, 0, 0, submenu, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_STRING, 0, 0, 0, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
/* MFT_SEPARATOR bit is kept when the text is added */
- TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK)
- TMII_SMII( {, S, MIIM_STRING, -1, -1, -1, -1, -1, -1, -1, txt, -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_STRING|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_STRING|MIIM_FTYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 4, -9, },
- txt, OK, OK )
+ TMII_INSMI( MIIM_STRING|MIIM_FTYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, NULL, 0, 0, OK );
+ TMII_SMII( MIIM_STRING, 0, 0, 0, 0, 0, 0, 0, txt, 0, 0 );
+ TMII_GMII ( MIIM_STRING|MIIM_FTYPE, 80,
+ MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, string, 4, 0,
+ txt, OK, OK );
TMII_DONE
/* MFT_SEPARATOR bit is kept when bitmap is added */
- TMII_INSMI( {, S, MIIM_STRING|MIIM_FTYPE, MFT_STRING, -1, -1, -1, -1, -1, -1, NULL, 0, -1, }, OK)
- TMII_SMII( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, hbm, }, OK)
- TMII_GMII ( {, S, MIIM_BITMAP|MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, string, 80, -9, },
- {, S, MIIM_BITMAP|MIIM_FTYPE, MFT_SEPARATOR, -9, -9, 0, -9, -9, -9, string, 80, hbm, },
- init, OK, ER )
+ TMII_INSMI( MIIM_STRING|MIIM_FTYPE, MFT_STRING, -1, -1, 0, 0, 0, -1, NULL, 0, 0, OK );
+ TMII_SMII( MIIM_BITMAP, 0, 0, 0, 0, 0, 0, 0, 0, 0, hbm );
+ TMII_GMII ( MIIM_BITMAP|MIIM_FTYPE, 80,
+ MFT_SEPARATOR, 0, 0, 0, 0, 0, 0, string, 80, hbm,
+ init, OK, ER );
TMII_DONE
/* Bitmaps inserted with MIIM_TYPE and MFT_BITMAP:
Only the low word of the dwTypeData is used.
Use a magic bitmap here (Word 95 uses this to create its MDI menu buttons) */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP | MFT_RIGHTJUSTIFY, -1, -1, -1, -1, -1, -1, MAKELONG(HBMMENU_MBAR_CLOSE, 0x1234), -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP | MFT_RIGHTJUSTIFY, -9, -9, 0, -9, -9, -9, HBMMENU_MBAR_CLOSE, 0, HBMMENU_MBAR_CLOSE, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP | MFT_RIGHTJUSTIFY, -1, -1, 0, 0, 0, -1,
+ (HMENU)MAKELONG(HBMMENU_MBAR_CLOSE, 0x1234), -1, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP | MFT_RIGHTJUSTIFY, 0, 0, 0, 0, 0, 0, HBMMENU_MBAR_CLOSE, 0, HBMMENU_MBAR_CLOSE,
+ NULL, OK, OK );
TMII_DONE
/* Type flags */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, -1, -1, 0, 0, 0, -1, hbm, -1, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, 0, 0, 0, 0, 0, 0, hbm, 0, hbm,
+ NULL, OK, OK );
TMII_DONE
/* State flags */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK)
- TMII_SMII( {, S, MIIM_STATE, -1, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, -1, -1, -1, -1, -1, -1, -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_STATE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_STATE, -9, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, -9, 0, -9, -9, -9, -9, -9, -9, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP, -1, -1, 0, 0, 0, -1, hbm, -1, 0, OK );
+ TMII_SMII( MIIM_STATE, -1, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, 0, 0, 0, 0, 0, 0, 0, 0 );
+ TMII_GMII ( MIIM_STATE, 80,
+ 0, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, 0, 0, 0, 0, 0, 0, 80, 0,
+ NULL, OK, OK );
TMII_DONE
/* The style MFT_RADIOCHECK cannot be set with MIIM_CHECKMARKS only */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK)
- TMII_SMII( {, S, MIIM_CHECKMARKS, MFT_RADIOCHECK, -1, -1, -1, hbm, hbm, -1, -1, -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_CHECKMARKS | MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_CHECKMARKS | MIIM_TYPE, MFT_BITMAP, -9, -9, 0, hbm, hbm, -9, hbm, 0, hbm, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP, -1, -1, 0, 0, 0, -1, hbm, -1, 0, OK );
+ TMII_SMII( MIIM_CHECKMARKS, MFT_RADIOCHECK, 0, 0, 0, hbm, hbm, 0, 0, 0, 0 );
+ TMII_GMII ( MIIM_CHECKMARKS | MIIM_TYPE, 80,
+ MFT_BITMAP, 0, 0, 0, hbm, hbm, 0, hbm, 0, hbm,
+ NULL, OK, OK );
TMII_DONE
/* MFT_BITMAP is added automatically by GetMenuItemInfo() for MIIM_TYPE */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK)
- TMII_SMII( {, S, MIIM_FTYPE, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, 0x1234, -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, -9, -9, -9, },
- empty, OK, OK )
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP | MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, },
- empty, OK, OK )
- TMII_GMII ( {, S, MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, -9, -9, -9, },
- empty, OK, OK )
- TMII_SMII( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, NULL, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 0, NULL, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP, -1, -1, 0, 0, 0, -1, hbm, -1, 0, OK );
+ TMII_SMII( MIIM_FTYPE, MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, (HBITMAP)0x1234, 0, 0 );
+ TMII_GMII ( MIIM_FTYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+ NULL, OK, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP | MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, hbm, 0, hbm,
+ NULL, OK, OK );
+ TMII_GMII ( MIIM_FTYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+ NULL, OK, OK );
+ TMII_SMII( MIIM_BITMAP, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
+ NULL, OK, OK );
TMII_DONE
/* Bitmaps inserted with MIIM_TYPE and MFT_BITMAP:
Only the low word of the dwTypeData is used.
Use a magic bitmap here (Word 95 uses this to create its MDI menu buttons) */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP | MFT_RIGHTJUSTIFY, -1, -1, -1, -1, -1, -1, MAKELONG(HBMMENU_MBAR_CLOSE, 0x1234), -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP | MFT_RIGHTJUSTIFY, -9, -9, 0, -9, -9, -9, HBMMENU_MBAR_CLOSE, 0, HBMMENU_MBAR_CLOSE, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP | MFT_RIGHTJUSTIFY, -1, -1, 0, 0, 0, -1,
+ (HMENU)MAKELONG(HBMMENU_MBAR_CLOSE, 0x1234), -1, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP | MFT_RIGHTJUSTIFY, 0, 0, 0, 0, 0, 0, HBMMENU_MBAR_CLOSE, 0, HBMMENU_MBAR_CLOSE,
+ NULL, OK, OK );
TMII_DONE
/* Type flags */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, -1, -1, 0, 0, 0, -1, hbm, -1, 0, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP | MFT_MENUBARBREAK | MFT_RADIOCHECK | MFT_RIGHTJUSTIFY | MFT_RIGHTORDER, 0, 0, 0, 0, 0, 0, hbm, 0, hbm,
+ NULL, OK, OK );
TMII_DONE
/* State flags */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK)
- TMII_SMII( {, S, MIIM_STATE, -1, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, -1, -1, -1, -1, -1, -1, -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_STATE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_STATE, -9, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, -9, 0, -9, -9, -9, -9, -9, -9, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP, -1, -1, 0, 0, 0, -1, hbm, -1, 0, OK );
+ TMII_SMII( MIIM_STATE, -1, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, 0, 0, 0, 0, 0, 0, 0, 0 );
+ TMII_GMII ( MIIM_STATE, 80,
+ 0, MFS_CHECKED | MFS_DEFAULT | MFS_GRAYED | MFS_HILITE, 0, 0, 0, 0, 0, 0, 80, 0,
+ NULL, OK, OK );
TMII_DONE
/* The style MFT_RADIOCHECK cannot be set with MIIM_CHECKMARKS only */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK)
- TMII_SMII( {, S, MIIM_CHECKMARKS, MFT_RADIOCHECK, -1, -1, -1, hbm, hbm, -1, -1, -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_CHECKMARKS | MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_CHECKMARKS | MIIM_TYPE, MFT_BITMAP, -9, -9, 0, hbm, hbm, -9, hbm, 0, hbm, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP, -1, -1, 0, 0, 0, -1, hbm, -1, 0, OK );
+ TMII_SMII( MIIM_CHECKMARKS, MFT_RADIOCHECK, 0, 0, 0, hbm, hbm, 0, 0, 0, 0 );
+ TMII_GMII ( MIIM_CHECKMARKS | MIIM_TYPE, 80,
+ MFT_BITMAP, 0, 0, 0, hbm, hbm, 0, hbm, 0, hbm,
+ NULL, OK, OK );
TMII_DONE
/* MFT_BITMAP is added automatically by GetMenuItemInfo() for MIIM_TYPE */
- TMII_INSMI( {, S, MIIM_TYPE, MFT_BITMAP, -1, -1, -1, -1, -1, -1, hbm, -1, -1, }, OK)
- TMII_SMII( {, S, MIIM_FTYPE, MFT_OWNERDRAW, -1, -1, -1, -1, -1, -1, 0x1234, -1, -1, }, OK)
- TMII_GMII ( {, S, MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, -9, -9, -9, },
- empty, OK, OK )
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_TYPE, MFT_BITMAP | MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, hbm, 0, hbm, },
- empty, OK, OK )
- TMII_GMII ( {, S, MIIM_FTYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_FTYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, -9, -9, -9, },
- empty, OK, OK )
- TMII_SMII( {, S, MIIM_BITMAP, -1, -1, -1, -1, -1, -1, -1, -1, -1, NULL, }, OK)
- TMII_GMII ( {, S, MIIM_TYPE, -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, },
- {, S, MIIM_TYPE, MFT_OWNERDRAW, -9, -9, 0, -9, -9, -9, NULL, 0, NULL, },
- empty, OK, OK )
+ TMII_INSMI( MIIM_TYPE, MFT_BITMAP, -1, -1, 0, 0, 0, -1, hbm, -1, 0, OK );
+ TMII_SMII( MIIM_FTYPE, MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, (HBITMAP)0x1234, 0, 0 );
+ TMII_GMII ( MIIM_FTYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+ NULL, OK, OK );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_BITMAP | MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, hbm, 0, hbm,
+ NULL, OK, OK );
+ TMII_GMII ( MIIM_FTYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, 0, 80, 0,
+ NULL, OK, OK );
+ TMII_SMII( MIIM_BITMAP, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL );
+ TMII_GMII ( MIIM_TYPE, 80,
+ MFT_OWNERDRAW, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
+ NULL, OK, OK );
TMII_DONE
} while( !(ansi = !ansi) );
DeleteObject( hbm);
@@ -1607,7 +1637,7 @@ static void test_menu_search_bycommand( void )
rc = GetMenuItemInfo(hmenu, (UINT_PTR)hmenuSub2, FALSE, &info);
ok (rc, "Getting the menus info failed\n");
- ok (info.wID == (UINT)hmenuSub2, "IDs differ for popup menu\n");
+ ok (info.wID == (UINT_PTR)hmenuSub2, "IDs differ for popup menu\n");
ok (!strcmp(info.dwTypeData, "Submenu2"), "Returned item has wrong label (%s)\n", info.dwTypeData);
DestroyMenu( hmenu );
@@ -1825,9 +1855,9 @@ static void test_menu_input(void) {
wclass.style = CS_HREDRAW | CS_VREDRAW;
wclass.lpfnWndProc = WndProc;
wclass.hInstance = hInstance;
- wclass.hIcon = LoadIconA( 0, (LPSTR)IDI_APPLICATION );
- wclass.hCursor = LoadCursorA( NULL, (LPSTR)IDC_ARROW);
- wclass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1);
+ wclass.hIcon = LoadIconA( 0, IDI_APPLICATION );
+ wclass.hCursor = LoadCursorA( NULL, IDC_ARROW );
+ wclass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1 );
wclass.lpszMenuName = 0;
wclass.cbClsExtra = 0;
wclass.cbWndExtra = 0;
@@ -1872,7 +1902,7 @@ static void test_menu_flags( void )
hMenu = CreateMenu();
hPopupMenu = CreatePopupMenu();
- AppendMenu(hMenu, MF_POPUP | MF_STRING, (UINT)hPopupMenu, "Popup");
+ AppendMenu(hMenu, MF_POPUP | MF_STRING, (UINT_PTR)hPopupMenu, "Popup");
AppendMenu(hPopupMenu, MF_STRING | MF_HILITE | MF_DEFAULT, 101, "Item 1");
InsertMenu(hPopupMenu, 1, MF_BYPOSITION | MF_STRING | MF_HILITE | MF_DEFAULT, 102, "Item 2");
@@ -1906,9 +1936,9 @@ static void test_menu_hilitemenuitem( void )
wclass.style = CS_HREDRAW | CS_VREDRAW;
wclass.lpfnWndProc = WndProc;
wclass.hInstance = GetModuleHandleA( NULL );
- wclass.hIcon = LoadIconA( 0, (LPSTR)IDI_APPLICATION );
- wclass.hCursor = LoadCursorA( NULL, (LPSTR)IDC_ARROW);
- wclass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1);
+ wclass.hIcon = LoadIconA( 0, IDI_APPLICATION );
+ wclass.hCursor = LoadCursorA( NULL, IDC_ARROW );
+ wclass.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1 );
wclass.lpszMenuName = 0;
wclass.cbClsExtra = 0;
wclass.cbWndExtra = 0;
@@ -1920,7 +1950,7 @@ static void test_menu_hilitemenuitem( void )
hMenu = CreateMenu();
hPopupMenu = CreatePopupMenu();
- AppendMenu(hMenu, MF_POPUP | MF_STRING, (UINT)hPopupMenu, "Popup");
+ AppendMenu(hMenu, MF_POPUP | MF_STRING, (UINT_PTR)hPopupMenu, "Popup");
AppendMenu(hPopupMenu, MF_STRING, 101, "Item 1");
AppendMenu(hPopupMenu, MF_STRING, 102, "Item 2");
@@ -2053,7 +2083,7 @@ static void check_menu_items(HMENU hmenu, UINT checked_cmd, UINT checked_type,
#endif
if (mii.hSubMenu)
{
- ok((HMENU)mii.wID == mii.hSubMenu, "id %u: wID should be equal to hSubMenu\n", checked_cmd);
+ ok(mii.wID == (UINT_PTR)mii.hSubMenu, "id %u: wID should be equal to hSubMenu\n", checked_cmd);
check_menu_items(mii.hSubMenu, checked_cmd, checked_type, checked_state);
}
else
@@ -2218,7 +2248,7 @@ static void test_menu_resource_layout(void)
"%u: expected wID %04x, got %04x\n", i, menu_data[i].id, mii.wID);
ok(mii.cch == strlen(menu_data[i].str),
"%u: expected cch %u, got %u\n", i, (UINT)strlen(menu_data[i].str), mii.cch);
- ok(!strcmp((LPCSTR)mii.dwTypeData, menu_data[i].str),
+ ok(!strcmp(mii.dwTypeData, menu_data[i].str),
"%u: expected dwTypeData %s, got %s\n", i, menu_data[i].str, (LPCSTR)mii.dwTypeData);
}
@@ -2290,7 +2320,7 @@ static void compare_menu_data(HMENU hmenu, const struct menu_data *item, INT ite
{
ok(mii.cch == strlen(item[i].str),
"%u: expected cch %u, got %u\n", i, (UINT)strlen(item[i].str), mii.cch);
- ok(!strcmp((LPCSTR)mii.dwTypeData, item[i].str),
+ ok(!strcmp(mii.dwTypeData, item[i].str),
"%u: expected dwTypeData %s, got %s\n", i, item[i].str, (LPCSTR)mii.dwTypeData);
}
}
@@ -2398,7 +2428,7 @@ START_TEST(menu)
test_menu_bmp_and_string();
if( !pSendInput)
- skip("SendInput is not available\n");
+ win_skip("SendInput is not available\n");
else
test_menu_input();
test_menu_flags();
diff --git a/rostests/winetests/user32/monitor.c b/rostests/winetests/user32/monitor.c
index 3d0359679eb..daa303585bd 100644
--- a/rostests/winetests/user32/monitor.c
+++ b/rostests/winetests/user32/monitor.c
@@ -78,7 +78,7 @@ static void test_enumdisplaydevices(void)
if (!pEnumDisplayDevicesA)
{
- skip("EnumDisplayDevicesA is not available\n");
+ win_skip("EnumDisplayDevicesA is not available\n");
return;
}
@@ -156,7 +156,7 @@ static void test_ChangeDisplaySettingsEx(void)
if (!pChangeDisplaySettingsExA)
{
- skip("ChangeDisplaySettingsExA is not available\n");
+ win_skip("ChangeDisplaySettingsExA is not available\n");
return;
}
@@ -240,8 +240,9 @@ static void test_ChangeDisplaySettingsEx(void)
dm.dmFields = vid_modes_test[i].fields;
res = pChangeDisplaySettingsExA(NULL, &dm, NULL, CDS_TEST, NULL);
ok(vid_modes_test[i].must_succeed ?
- (res == DISP_CHANGE_SUCCESSFUL) :
- (res == DISP_CHANGE_SUCCESSFUL || res == DISP_CHANGE_BADMODE || res == DISP_CHANGE_BADPARAM),
+ (res == DISP_CHANGE_SUCCESSFUL || res == DISP_CHANGE_RESTART) :
+ (res == DISP_CHANGE_SUCCESSFUL || res == DISP_CHANGE_RESTART ||
+ res == DISP_CHANGE_BADMODE || res == DISP_CHANGE_BADPARAM),
"Unexpected ChangeDisplaySettingsEx() return code for resolution[%d]: %d\n", i, res);
if (res == DISP_CHANGE_SUCCESSFUL)
@@ -257,7 +258,7 @@ static void test_ChangeDisplaySettingsEx(void)
ok(GetClipCursor(&r), "GetClipCursor() failed\n");
ok(EqualRect(&r, &virt), "Invalid clip rect: (%d %d) x (%d %d)\n", r.left, r.top, r.right, r.bottom);
- ok(ClipCursor(NULL), "ClipCursor() failed\n");
+ if (!ClipCursor(NULL)) continue;
ok(GetClipCursor(&r), "GetClipCursor() failed\n");
ok(EqualRect(&r, &virt), "Invalid clip rect: (%d %d) x (%d %d)\n", r.left, r.top, r.right, r.bottom);
@@ -287,7 +288,7 @@ static void test_monitors(void)
if (!pMonitorFromPoint || !pMonitorFromWindow)
{
- skip("MonitorFromPoint or MonitorFromWindow are not available\n");
+ win_skip("MonitorFromPoint or MonitorFromWindow are not available\n");
return;
}
@@ -330,7 +331,7 @@ static void test_work_area(void)
if (!pEnumDisplayMonitors || !pGetMonitorInfoA)
{
- skip("EnumDisplayMonitors or GetMonitorInfoA are not available\n");
+ win_skip("EnumDisplayMonitors or GetMonitorInfoA are not available\n");
return;
}
@@ -368,7 +369,8 @@ static void test_work_area(void)
wp.rcNormalPosition.left, wp.rcNormalPosition.top,
wp.rcNormalPosition.right, wp.rcNormalPosition.bottom);
OffsetRect(&wp.rcNormalPosition, rc_work.left, rc_work.top);
- if (!EqualRect(&mi.rcMonitor, &mi.rcWork)) /* FIXME: remove once Wine is fixed */
+ if (mi.rcMonitor.left != mi.rcWork.left ||
+ mi.rcMonitor.top != mi.rcWork.top) /* FIXME: remove once Wine is fixed */
todo_wine ok(EqualRect(&rc_normal, &wp.rcNormalPosition), "normal pos is different\n");
else
ok(EqualRect(&rc_normal, &wp.rcNormalPosition), "normal pos is different\n");
diff --git a/rostests/winetests/user32/msg.c b/rostests/winetests/user32/msg.c
index 16ce1c24e30..4a6778f900f 100755
--- a/rostests/winetests/user32/msg.c
+++ b/rostests/winetests/user32/msg.c
@@ -20,6 +20,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#define _WIN32_WINNT 0x0501 /* For WM_CHANGEUISTATE,QS_RAWINPUT */
+
#include
#include
#include
@@ -76,8 +78,8 @@ typedef struct
static BOOL test_DestroyWindow_flag;
static HWINEVENTHOOK hEvent_hook;
-
-static void dump_winpos_flags(UINT flags);
+static HHOOK hCBT_hook;
+static DWORD cbt_hook_thread_id;
static const WCHAR testWindowClassW[] =
{ 'T','e','s','t','W','i','n','d','o','w','C','l','a','s','s','W',0 };
@@ -110,6 +112,19 @@ struct message {
msg_flags_t flags; /* message props */
WPARAM wParam; /* expected value of wParam */
LPARAM lParam; /* expected value of lParam */
+ WPARAM wp_mask; /* mask for wParam checks */
+ LPARAM lp_mask; /* mask for lParam checks */
+};
+
+struct recvd_message {
+ UINT message; /* the WM_* code */
+ msg_flags_t flags; /* message props */
+ HWND hwnd; /* window that received the message */
+ WPARAM wParam; /* expected value of wParam */
+ LPARAM lParam; /* expected value of lParam */
+ int line; /* source line where logged */
+ const char *descr; /* description for trace output */
+ char output[512]; /* trace output */
};
/* Empty message sequence */
@@ -167,6 +182,7 @@ static const struct message WmSWP_ShowOverlappedSeq[] = {
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
{ WM_PAINT, sent|optional },
{ WM_NCPAINT, sent|beginpaint|optional },
+ { WM_GETTEXT, sent|defwinproc|optional },
{ WM_ERASEBKGND, sent|beginpaint|optional },
{ 0 }
};
@@ -487,7 +503,7 @@ static const struct message WmShowRestoreMaxOverlappedSeq[] = {
{ WM_NCPAINT, sent|optional },
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ERASEBKGND, sent|optional },
- { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED },
+ { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED, 0, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOMOVE },
{ WM_MOVE, sent|defwinproc|optional },
{ WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED },
{ WM_NCCALCSIZE, sent|wparam|optional, TRUE },
@@ -560,6 +576,10 @@ 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_PAINT, sent|optional },
{ WM_NCPAINT, sent|beginpaint|optional },
{ WM_ERASEBKGND, sent|beginpaint|optional },
@@ -639,6 +659,8 @@ static const struct message WmCreateMaxPopupSeq[] = {
{ WM_SYNCPAINT, sent|wparam|optional, 4 },
{ WM_NCPAINT, sent|wparam|optional, 1 },
{ WM_ERASEBKGND, sent|optional },
+ { WM_NCPAINT, sent|wparam|defwinproc|optional, 1 },
+ { WM_ERASEBKGND, sent|defwinproc|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTMOVE|SWP_NOCLIENTSIZE|SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE },
{ 0 }
};
@@ -672,6 +694,9 @@ static const struct message WmShowMaxPopupResizedSeq[] = {
{ 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_NCPAINT, sent|wparam|optional, 1 },
+ { 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_ACTIVATE, sent|wparam, 1 },
@@ -713,6 +738,8 @@ static const struct message WmShowMaxPopupSeq[] = {
{ WM_SYNCPAINT, sent|wparam|optional, 4 },
{ WM_NCPAINT, sent|wparam|optional, 1 },
{ WM_ERASEBKGND, sent|optional },
+ { WM_NCPAINT, sent|wparam|defwinproc|optional, 1 },
+ { WM_ERASEBKGND, sent|defwinproc|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOMOVE|SWP_NOSIZE },
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
{ 0 }
@@ -735,6 +762,7 @@ static const struct message WmCreatePopupSeq[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
{ WM_NCPAINT, sent|wparam|optional, 1 },
{ 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_ACTIVATE, sent|wparam, 1 },
@@ -797,18 +825,18 @@ static const struct message WmCreateInvisiblePopupSeq[] = {
* for a popup window with WS_VISIBLE style set
*/
static const struct message WmShowVisiblePopupSeq_2[] = {
- { WM_WINDOWPOSCHANGING, sent|wparam, 0 },
+ { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
{ 0 }
};
/* SetWindowPos(SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE)
* for a popup window with WS_VISIBLE style set
*/
static const struct message WmShowVisiblePopupSeq_3[] = {
- { WM_WINDOWPOSCHANGING, sent|wparam, 0 },
+ { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE },
{ HCBT_ACTIVATE, hook },
{ EVENT_SYSTEM_FOREGROUND, winevent_hook|wparam|lparam, 0, 0 },
{ WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 },
- { WM_WINDOWPOSCHANGING, sent|wparam|optional, 0 },
+ { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
{ WM_NCACTIVATE, sent|wparam, 1 },
{ WM_ACTIVATE, sent|wparam, 1 },
{ HCBT_SETFOCUS, hook },
@@ -819,6 +847,7 @@ static const struct message WmShowVisiblePopupSeq_3[] = {
{ EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 },
{ WM_SETFOCUS, sent|defwinproc },
{ WM_GETTEXT, sent|optional },
+ { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ 0 }
};
/* CreateWindow (for child window, not initially visible) */
@@ -897,7 +926,7 @@ static const struct message WmHideChildSeq2[] = {
{ WM_SHOWWINDOW, sent|wparam, 0 },
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
{ EVENT_OBJECT_HIDE, winevent_hook|wparam|lparam, 0, 0 },
- { WM_ERASEBKGND, sent|parent },
+ { WM_ERASEBKGND, sent|parent|optional },
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ 0 }
};
@@ -931,11 +960,11 @@ static const struct message WmShowChildSeq_4[] = {
/* ShowWindow(SW_MINIMIZE) for child with invisible parent */
static const struct message WmShowChildInvisibleParentSeq_1[] = {
{ HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE },
- { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOCOPYBITS|SWP_STATECHANGED },
+ { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED, 0, SWP_NOACTIVATE },
{ WM_NCCALCSIZE, sent|wparam, 1 },
{ EVENT_OBJECT_SHOW, winevent_hook|wparam|lparam, 0, 0 },
{ WM_CHILDACTIVATE, sent|optional },
- { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOREDRAW|SWP_NOCOPYBITS|SWP_STATECHANGED },
+ { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_FRAMECHANGED|SWP_NOREDRAW|SWP_NOCOPYBITS|SWP_STATECHANGED, 0, SWP_NOACTIVATE },
{ WM_MOVE, sent|defwinproc },
{ WM_SIZE, sent|defwinproc|wparam, SIZE_MINIMIZED },
{ EVENT_OBJECT_LOCATIONCHANGE, winevent_hook|wparam|lparam, 0, 0 },
@@ -1190,6 +1219,7 @@ static const struct message WmCreateCustomDialogSeq[] = {
{ WM_NCACTIVATE, sent|wparam, 1 },
{ WM_GETTEXT, sent|optional|defwinproc },
{ WM_GETTEXT, sent|optional|defwinproc },
+ { WM_GETTEXT, sent|optional|defwinproc },
{ EVENT_OBJECT_DEFACTIONCHANGE, winevent_hook|wparam|lparam|optional, OBJID_CLIENT, 0 },
{ WM_ACTIVATE, sent|wparam, 1 },
{ WM_GETTEXT, sent|optional },
@@ -1414,7 +1444,7 @@ static const struct message WmSetMenuVisibleSizeChangeSeq[] = {
{ WM_NCCALCSIZE, sent|wparam, 1 },
{ 0x0093, sent|defwinproc|optional },
{ EVENT_OBJECT_REORDER, winevent_hook|wparam|lparam, 0, 0 },
- { WM_NCPAINT, sent }, /* wparam != 1 */
+ { WM_NCPAINT, sent|optional }, /* wparam != 1 */
{ 0x0093, sent|defwinproc|optional },
{ 0x0093, sent|defwinproc|optional },
{ 0x0091, sent|defwinproc|optional },
@@ -1442,7 +1472,7 @@ static const struct message WmSetMenuVisibleSizeChangeSeq[] = {
static const struct message WmSetMenuVisibleNoSizeChangeSeq[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
{ WM_NCCALCSIZE, sent|wparam, 1 },
- { WM_NCPAINT, sent }, /* wparam != 1 */
+ { WM_NCPAINT, sent|optional }, /* wparam != 1 */
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ERASEBKGND, sent|optional },
{ WM_ACTIVATE, sent|optional },
@@ -1456,7 +1486,7 @@ static const struct message WmDrawMenuBarSeq[] =
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
{ WM_NCCALCSIZE, sent|wparam, 1 },
{ 0x0093, sent|defwinproc|optional },
- { WM_NCPAINT, sent }, /* wparam != 1 */
+ { WM_NCPAINT, sent|optional }, /* wparam != 1 */
{ 0x0093, sent|defwinproc|optional },
{ 0x0093, sent|defwinproc|optional },
{ 0x0091, sent|defwinproc|optional },
@@ -1555,8 +1585,8 @@ static const struct message WmSetScrollRangeHV_NC_Seq[] =
{ WM_GETTEXT, sent|defwinproc|optional },
{ 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 },
- { WM_SIZE, sent|defwinproc|wparam, SIZE_RESTORED },
+ { 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 },
{ 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 },
@@ -1622,7 +1652,7 @@ static const struct message WmSHOWNATopInvisible[] = {
static int after_end_dialog, test_def_id;
static int sequence_cnt, sequence_size;
-static struct message* sequence;
+static struct recvd_message* sequence;
static int log_all_parent_messages;
static int paint_loop_done;
@@ -1661,24 +1691,139 @@ static void init_procs(void)
#undef GET_PROC
}
-static void add_message(const struct message *msg)
+static const char *get_winpos_flags(UINT flags)
{
+ static char buffer[300];
+
+ buffer[0] = 0;
+#define DUMP(flag) do { if (flags & flag) { strcat( buffer, "|" #flag ); flags &= ~flag; } } while(0)
+ DUMP( SWP_SHOWWINDOW );
+ DUMP( SWP_HIDEWINDOW );
+ DUMP( SWP_NOACTIVATE );
+ DUMP( SWP_FRAMECHANGED );
+ DUMP( SWP_NOCOPYBITS );
+ DUMP( SWP_NOOWNERZORDER );
+ DUMP( SWP_NOSENDCHANGING );
+ DUMP( SWP_DEFERERASE );
+ DUMP( SWP_ASYNCWINDOWPOS );
+ DUMP( SWP_NOZORDER );
+ DUMP( SWP_NOREDRAW );
+ DUMP( SWP_NOSIZE );
+ DUMP( SWP_NOMOVE );
+ DUMP( SWP_NOCLIENTSIZE );
+ DUMP( SWP_NOCLIENTMOVE );
+ if (flags) sprintf(buffer + strlen(buffer),"|0x%04x", flags);
+ return buffer + 1;
+#undef DUMP
+}
+
+
+#define add_message(msg) add_message_(__LINE__,msg);
+static void add_message_(int line, const struct recvd_message *msg)
+{
+ struct recvd_message *seq;
+
if (!sequence)
{
sequence_size = 10;
- sequence = HeapAlloc( GetProcessHeap(), 0, sequence_size * sizeof (struct message) );
+ sequence = HeapAlloc( GetProcessHeap(), 0, sequence_size * sizeof(*sequence) );
}
if (sequence_cnt == sequence_size)
{
sequence_size *= 2;
- sequence = HeapReAlloc( GetProcessHeap(), 0, sequence, sequence_size * sizeof (struct message) );
+ sequence = HeapReAlloc( GetProcessHeap(), 0, sequence, sequence_size * sizeof(*sequence) );
}
assert(sequence);
- sequence[sequence_cnt].message = msg->message;
- sequence[sequence_cnt].flags = msg->flags;
- sequence[sequence_cnt].wParam = msg->wParam;
- sequence[sequence_cnt].lParam = msg->lParam;
+ seq = &sequence[sequence_cnt];
+ seq->hwnd = msg->hwnd;
+ seq->message = msg->message;
+ seq->flags = msg->flags;
+ seq->wParam = msg->wParam;
+ seq->lParam = msg->lParam;
+ seq->line = line;
+ seq->descr = msg->descr;
+ seq->output[0] = 0;
+
+ if (msg->descr)
+ {
+ if (msg->flags & hook)
+ {
+ static const char * const CBT_code_name[10] =
+ {
+ "HCBT_MOVESIZE",
+ "HCBT_MINMAX",
+ "HCBT_QS",
+ "HCBT_CREATEWND",
+ "HCBT_DESTROYWND",
+ "HCBT_ACTIVATE",
+ "HCBT_CLICKSKIPPED",
+ "HCBT_KEYSKIPPED",
+ "HCBT_SYSCOMMAND",
+ "HCBT_SETFOCUS"
+ };
+ 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 );
+ }
+ 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 );
+ }
+ else
+ {
+ switch (msg->message)
+ {
+ case WM_WINDOWPOSCHANGING:
+ case WM_WINDOWPOSCHANGED:
+ {
+ 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",
+ msg->descr, msg->hwnd,
+ (msg->message == WM_WINDOWPOSCHANGING) ? "CHANGING" : "CHANGED",
+ msg->wParam, msg->lParam, winpos->hwndInsertAfter,
+ winpos->x, winpos->y, winpos->cx, winpos->cy,
+ get_winpos_flags(winpos->flags) );
+
+ /* Log only documented flags, win2k uses 0x1000 and 0x2000
+ * in the high word for internal purposes
+ */
+ seq->wParam = winpos->flags & 0xffff;
+ /* We are not interested in the flags that don't match under XP and Win9x */
+ seq->wParam &= ~SWP_NOZORDER;
+ break;
+ }
+
+ case WM_DRAWITEM:
+ {
+ 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);
+
+ di.u.item.type = dis->CtlType;
+ di.u.item.ctl_id = dis->CtlID;
+ di.u.item.item_id = dis->itemID;
+ di.u.item.action = dis->itemAction;
+ di.u.item.state = dis->itemState;
+
+ seq->lParam = di.u.lp;
+ break;
+ }
+ 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 );
+ }
+ }
+ }
sequence_cnt++;
}
@@ -1688,7 +1833,7 @@ static void flush_events(void)
{
MSG msg;
int diff = 200;
- int min_timeout = 50;
+ int min_timeout = 100;
DWORD time = GetTickCount() + diff;
while (diff > 0)
@@ -1696,7 +1841,6 @@ static void flush_events(void)
if (MsgWaitForMultipleObjects( 0, NULL, FALSE, min_timeout, QS_ALLINPUT ) == WAIT_TIMEOUT) break;
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg );
diff = time - GetTickCount();
- min_timeout = 20;
}
}
@@ -1707,115 +1851,227 @@ static void flush_sequence(void)
sequence_cnt = sequence_size = 0;
}
+static void dump_sequence(const struct message *expected, const char *context, const char *file, int line)
+{
+ const struct recvd_message *actual = sequence;
+ unsigned int count = 0;
+
+ trace_(file, line)("Failed sequence %s:\n", context );
+ while (expected->message && actual->message)
+ {
+ if (actual->output[0])
+ {
+ if (expected->flags & hook)
+ {
+ trace_(file, line)( " %u: expected: hook %04x - actual: %s\n",
+ count, expected->message, actual->output );
+ }
+ else if (expected->flags & winevent_hook)
+ {
+ trace_(file, line)( " %u: expected: winevent %04x - actual: %s\n",
+ count, expected->message, actual->output );
+ }
+ else
+ {
+ trace_(file, line)( " %u: expected: msg %04x - actual: %s\n",
+ count, expected->message, actual->output );
+ }
+ }
+
+ if (expected->message == actual->message)
+ {
+ if ((expected->flags & defwinproc) != (actual->flags & defwinproc) &&
+ (expected->flags & optional))
+ {
+ /* don't match messages if their defwinproc status differs */
+ expected++;
+ }
+ else
+ {
+ expected++;
+ actual++;
+ }
+ }
+ /* silently drop winevent messages if there is no support for them */
+ else if ((expected->flags & optional) || ((expected->flags & winevent_hook) && !hEvent_hook))
+ expected++;
+ else
+ {
+ expected++;
+ actual++;
+ }
+ count++;
+ }
+
+ /* optional trailing messages */
+ while (expected->message && ((expected->flags & optional) ||
+ ((expected->flags & winevent_hook) && !hEvent_hook)))
+ {
+ trace_(file, line)( " %u: expected: msg %04x - actual: nothing\n", count, expected->message );
+ expected++;
+ count++;
+ }
+
+ if (expected->message)
+ {
+ trace_(file, line)( " %u: expected: msg %04x - actual: nothing\n", count, expected->message );
+ return;
+ }
+
+ while (actual->message && actual->output[0])
+ {
+ trace_(file, line)( " %u: expected: nothing - actual: %s\n", count, actual->output );
+ actual++;
+ count++;
+ }
+}
+
#define ok_sequence( exp, contx, todo) \
ok_sequence_( (exp), (contx), (todo), __FILE__, __LINE__)
-static void ok_sequence_(const struct message *expected, const char *context, int todo,
- const char *file, int line)
+static void ok_sequence_(const struct message *expected_list, const char *context, int todo,
+ const char *file, int line)
{
- static const struct message end_of_sequence = { 0, 0, 0, 0 };
- const struct message *actual;
- int failcount = 0;
-
+ static const struct recvd_message end_of_sequence;
+ const struct message *expected = expected_list;
+ const struct recvd_message *actual;
+ int failcount = 0, dump = 0;
+ unsigned int count = 0;
+
add_message(&end_of_sequence);
actual = sequence;
while (expected->message && actual->message)
{
- trace_( file, line)("expected %04x - actual %04x\n", expected->message, actual->message);
-
if (expected->message == actual->message)
{
if (expected->flags & wparam)
{
- if (expected->wParam != actual->wParam && todo)
+ if (((expected->wParam ^ actual->wParam) & ~expected->wp_mask) && todo)
{
todo_wine {
failcount ++;
+ if (strcmp(winetest_platform, "wine")) dump++;
ok_( file, line) (FALSE,
- "%s: in msg 0x%04x expecting wParam 0x%lx got 0x%lx\n",
- context, expected->message, expected->wParam, actual->wParam);
+ "%s: %u: in msg 0x%04x expecting wParam 0x%lx got 0x%lx\n",
+ context, count, expected->message, expected->wParam, actual->wParam);
}
}
else
- ok_( file, line) (expected->wParam == actual->wParam,
- "%s: in msg 0x%04x expecting wParam 0x%lx got 0x%lx\n",
- context, expected->message, expected->wParam, actual->wParam);
+ {
+ ok_( file, line)( ((expected->wParam ^ actual->wParam) & ~expected->wp_mask) == 0,
+ "%s: %u: in msg 0x%04x expecting wParam 0x%lx got 0x%lx\n",
+ context, count, expected->message, expected->wParam, actual->wParam);
+ if ((expected->wParam ^ actual->wParam) & ~expected->wp_mask) dump++;
+ }
+
}
if (expected->flags & lparam)
{
- if (expected->lParam != actual->lParam && todo)
+ if (((expected->lParam ^ actual->lParam) & ~expected->lp_mask) && todo)
{
todo_wine {
failcount ++;
+ if (strcmp(winetest_platform, "wine")) dump++;
ok_( file, line) (FALSE,
- "%s: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n",
- context, expected->message, expected->lParam, actual->lParam);
+ "%s: %u: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n",
+ context, count, expected->message, expected->lParam, actual->lParam);
}
}
else
- ok_( file, line) (expected->lParam == actual->lParam,
- "%s: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n",
- context, expected->message, expected->lParam, actual->lParam);
+ {
+ ok_( file, line)(((expected->lParam ^ actual->lParam) & ~expected->lp_mask) == 0,
+ "%s: %u: in msg 0x%04x expecting lParam 0x%lx got 0x%lx\n",
+ context, count, expected->message, expected->lParam, actual->lParam);
+ if ((expected->lParam ^ actual->lParam) & ~expected->lp_mask) dump++;
+ }
+ }
+ if ((expected->flags & defwinproc) != (actual->flags & defwinproc) &&
+ (expected->flags & optional))
+ {
+ /* don't match messages if their defwinproc status differs */
+ expected++;
+ count++;
+ continue;
}
if ((expected->flags & defwinproc) != (actual->flags & defwinproc) && todo)
{
todo_wine {
failcount ++;
+ if (strcmp(winetest_platform, "wine")) dump++;
ok_( file, line) (FALSE,
- "%s: the msg 0x%04x should %shave been sent by DefWindowProc\n",
- context, expected->message, (expected->flags & defwinproc) ? "" : "NOT ");
+ "%s: %u: the msg 0x%04x should %shave been sent by DefWindowProc\n",
+ context, count, expected->message, (expected->flags & defwinproc) ? "" : "NOT ");
}
}
else
+ {
ok_( file, line) ((expected->flags & defwinproc) == (actual->flags & defwinproc),
- "%s: the msg 0x%04x should %shave been sent by DefWindowProc\n",
- context, expected->message, (expected->flags & defwinproc) ? "" : "NOT ");
+ "%s: %u: the msg 0x%04x should %shave been sent by DefWindowProc\n",
+ context, count, expected->message, (expected->flags & defwinproc) ? "" : "NOT ");
+ if ((expected->flags & defwinproc) != (actual->flags & defwinproc)) dump++;
+ }
+
ok_( file, line) ((expected->flags & beginpaint) == (actual->flags & beginpaint),
- "%s: the msg 0x%04x should %shave been sent by BeginPaint\n",
- context, expected->message, (expected->flags & beginpaint) ? "" : "NOT ");
+ "%s: %u: the msg 0x%04x should %shave been sent by BeginPaint\n",
+ context, count, expected->message, (expected->flags & beginpaint) ? "" : "NOT ");
+ if ((expected->flags & beginpaint) != (actual->flags & beginpaint)) dump++;
+
ok_( file, line) ((expected->flags & (sent|posted)) == (actual->flags & (sent|posted)),
- "%s: the msg 0x%04x should have been %s\n",
- context, expected->message, (expected->flags & posted) ? "posted" : "sent");
+ "%s: %u: the msg 0x%04x should have been %s\n",
+ context, count, expected->message, (expected->flags & posted) ? "posted" : "sent");
+ if ((expected->flags & (sent|posted)) != (actual->flags & (sent|posted))) dump++;
+
ok_( file, line) ((expected->flags & parent) == (actual->flags & parent),
- "%s: the msg 0x%04x was expected in %s\n",
- context, expected->message, (expected->flags & parent) ? "parent" : "child");
+ "%s: %u: the msg 0x%04x was expected in %s\n",
+ context, count, expected->message, (expected->flags & parent) ? "parent" : "child");
+ if ((expected->flags & parent) != (actual->flags & parent)) dump++;
+
ok_( file, line) ((expected->flags & hook) == (actual->flags & hook),
- "%s: the msg 0x%04x should have been sent by a hook\n",
- context, expected->message);
+ "%s: %u: the msg 0x%04x should have been sent by a hook\n",
+ context, count, expected->message);
+ if ((expected->flags & hook) != (actual->flags & hook)) dump++;
+
ok_( file, line) ((expected->flags & winevent_hook) == (actual->flags & winevent_hook),
- "%s: the msg 0x%04x should have been sent by a winevent hook\n",
- context, expected->message);
+ "%s: %u: the msg 0x%04x should have been sent by a winevent hook\n",
+ context, count, expected->message);
+ if ((expected->flags & winevent_hook) != (actual->flags & winevent_hook)) dump++;
+
expected++;
actual++;
}
- /* silently drop winevent messages if there is no support for them */
- else if ((expected->flags & optional) || ((expected->flags & winevent_hook) && !hEvent_hook))
+ /* silently drop hook messages if there is no support for them */
+ else if ((expected->flags & optional) ||
+ ((expected->flags & hook) && !hCBT_hook) ||
+ ((expected->flags & winevent_hook) && !hEvent_hook))
expected++;
else if (todo)
{
failcount++;
todo_wine {
- ok_( file, line) (FALSE, "%s: the msg 0x%04x was expected, but got msg 0x%04x instead\n",
- context, expected->message, actual->message);
+ if (strcmp(winetest_platform, "wine")) dump++;
+ ok_( file, line) (FALSE, "%s: %u: the msg 0x%04x was expected, but got msg 0x%04x instead\n",
+ context, count, expected->message, actual->message);
}
- flush_sequence();
- return;
+ goto done;
}
else
{
- ok_( file, line) (FALSE, "%s: the msg 0x%04x was expected, but got msg 0x%04x instead\n",
- context, expected->message, actual->message);
+ ok_( file, line) (FALSE, "%s: %u: the msg 0x%04x was expected, but got msg 0x%04x instead\n",
+ context, count, expected->message, actual->message);
+ dump++;
expected++;
actual++;
}
+ count++;
}
/* skip all optional trailing messages */
while (expected->message && ((expected->flags & optional) ||
- ((expected->flags & winevent_hook) && !hEvent_hook)))
+ ((expected->flags & hook) && !hCBT_hook) ||
+ ((expected->flags & winevent_hook) && !hEvent_hook)))
expected++;
if (todo)
@@ -1823,22 +2079,29 @@ static void ok_sequence_(const struct message *expected, const char *context, in
todo_wine {
if (expected->message || actual->message) {
failcount++;
- ok_( file, line) (FALSE, "%s: the msg sequence is not complete: expected %04x - actual %04x\n",
- context, expected->message, actual->message);
+ if (strcmp(winetest_platform, "wine")) dump++;
+ ok_( file, line) (FALSE, "%s: %u: the msg sequence is not complete: expected %04x - actual %04x\n",
+ context, count, expected->message, actual->message);
}
}
}
else
{
if (expected->message || actual->message)
- ok_( file, line) (FALSE, "%s: the msg sequence is not complete: expected %04x - actual %04x\n",
- context, expected->message, actual->message);
+ {
+ dump++;
+ ok_( file, line) (FALSE, "%s: %u: the msg sequence is not complete: expected %04x - actual %04x\n",
+ context, count, expected->message, actual->message);
+ }
}
if( todo && !failcount) /* succeeded yet marked todo */
todo_wine {
+ if (!strcmp(winetest_platform, "wine")) dump++;
ok_( file, line)( TRUE, "%s: marked \"todo_wine\" but succeeds\n", context);
}
+done:
+ if (dump) dump_sequence(expected_list, context, file, line);
flush_sequence();
}
@@ -1869,7 +2132,7 @@ static const struct message WmCreateMDIframeSeq[] = {
{ WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 },
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* XP */
{ WM_ACTIVATEAPP, sent|wparam|optional, 1 }, /* Win9x doesn't send it */
- { WM_NCACTIVATE, sent|wparam, 1 },
+ { WM_NCACTIVATE, sent },
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ACTIVATE, sent|wparam, 1 },
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* Win9x */
@@ -2165,23 +2428,23 @@ 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, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
+ { WM_WINDOWPOSCHANGING, sent|wparam|defwinproc|optional, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
/* Win9x: message sequence terminates here. */
- { WM_NCACTIVATE, sent|wparam|defwinproc, 1 },
- { HCBT_SETFOCUS, hook }, /* in MDI client */
+ { WM_NCACTIVATE, sent|wparam|defwinproc|optional, 1 },
+ { HCBT_SETFOCUS, hook|optional }, /* in MDI client */
{ WM_IME_SETCONTEXT, sent|wparam|optional, 1 }, /* in MDI client */
{ WM_IME_NOTIFY, sent|wparam|optional, 2 }, /* in MDI client */
{ EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 },
- { WM_SETFOCUS, sent }, /* in MDI client */
- { HCBT_SETFOCUS, hook },
- { WM_KILLFOCUS, sent }, /* in MDI client */
+ { WM_SETFOCUS, sent|optional }, /* in MDI client */
+ { HCBT_SETFOCUS, hook|optional },
+ { WM_KILLFOCUS, sent|optional }, /* in MDI client */
{ WM_IME_SETCONTEXT, sent|wparam|optional, 0 }, /* in MDI client */
{ WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
{ EVENT_OBJECT_FOCUS, winevent_hook|wparam|lparam, OBJID_CLIENT, 0 },
- { WM_SETFOCUS, sent|defwinproc },
- { WM_MDIACTIVATE, sent|defwinproc },
+ { WM_SETFOCUS, sent|defwinproc|optional },
+ { WM_MDIACTIVATE, sent|defwinproc|optional },
/* in MDI frame */
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
{ WM_NCCALCSIZE, sent|wparam, 1 },
@@ -2381,9 +2644,9 @@ static const struct message WmCreateMDIchildInvisibleMaxSeq4[] = {
{ WM_CREATE, sent },
{ EVENT_OBJECT_CREATE, winevent_hook|wparam|lparam, 0, 0 },
{ WM_SIZE, sent|wparam, SIZE_RESTORED },
- { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE|SWP_NOMOVE }, /* MDI frame */
+ { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE, 0, SWP_NOZORDER }, /* MDI frame */
{ WM_NCCALCSIZE, sent|wparam|optional, 1 }, /* MDI frame */
- { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOZORDER|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE }, /* MDI frame */
+ { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_FRAMECHANGED|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE, 0, SWP_NOZORDER }, /* MDI frame */
{ WM_MOVE, sent },
{ HCBT_MINMAX, hook|lparam, 0, SW_MAXIMIZE },
{ WM_GETMINMAXINFO, sent },
@@ -2888,7 +3151,7 @@ static WNDPROC old_mdi_client_proc;
static LRESULT WINAPI mdi_client_hook_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- struct message msg;
+ struct recvd_message msg;
/* do not log painting messages */
if (message != WM_PAINT &&
@@ -2899,37 +3162,15 @@ static LRESULT WINAPI mdi_client_hook_proc(HWND hwnd, UINT message, WPARAM wPara
message != WM_GETTEXT &&
message != WM_MDIGETACTIVE &&
message != WM_GETICON &&
+ message != WM_GETOBJECT &&
message != WM_DEVICECHANGE)
{
- trace("mdi client: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
-
- switch (message)
- {
- case WM_WINDOWPOSCHANGING:
- case WM_WINDOWPOSCHANGED:
- {
- WINDOWPOS *winpos = (WINDOWPOS *)lParam;
-
- trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x ",
- winpos->hwnd, winpos->hwndInsertAfter,
- winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
- dump_winpos_flags(winpos->flags);
-
- /* Log only documented flags, win2k uses 0x1000 and 0x2000
- * in the high word for internal purposes
- */
- wParam = winpos->flags & 0xffff;
- /* We are not interested in the flags that don't match under XP and Win9x */
- wParam &= ~(SWP_NOZORDER);
- break;
- }
- }
-
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "mdi client";
add_message(&msg);
}
@@ -2940,7 +3181,7 @@ static LRESULT WINAPI mdi_child_wnd_proc(HWND hwnd, UINT message, WPARAM wParam,
{
static long defwndproc_counter = 0;
LRESULT ret;
- struct message msg;
+ struct recvd_message msg;
/* do not log painting messages */
if (message != WM_PAINT &&
@@ -2950,32 +3191,11 @@ static LRESULT WINAPI mdi_child_wnd_proc(HWND hwnd, UINT message, WPARAM wParam,
message != WM_NCHITTEST &&
message != WM_GETTEXT &&
message != WM_GETICON &&
+ message != WM_GETOBJECT &&
message != WM_DEVICECHANGE)
{
- trace("mdi child: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
-
switch (message)
{
- case WM_WINDOWPOSCHANGING:
- case WM_WINDOWPOSCHANGED:
- {
- WINDOWPOS *winpos = (WINDOWPOS *)lParam;
-
- trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x ",
- winpos->hwnd, winpos->hwndInsertAfter,
- winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
- dump_winpos_flags(winpos->flags);
-
- /* Log only documented flags, win2k uses 0x1000 and 0x2000
- * in the high word for internal purposes
- */
- wParam = winpos->flags & 0xffff;
- /* We are not interested in the flags that don't match under XP and Win9x */
- wParam &= ~(SWP_NOZORDER);
- break;
- }
-
case WM_MDIACTIVATE:
{
HWND active, client = GetParent(hwnd);
@@ -2990,11 +3210,13 @@ static LRESULT WINAPI mdi_child_wnd_proc(HWND hwnd, UINT message, WPARAM wParam,
}
}
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "mdi child";
add_message(&msg);
}
@@ -3009,7 +3231,7 @@ static LRESULT WINAPI mdi_frame_wnd_proc(HWND hwnd, UINT message, WPARAM wParam,
{
static long defwndproc_counter = 0;
LRESULT ret;
- struct message msg;
+ struct recvd_message msg;
/* do not log painting messages */
if (message != WM_PAINT &&
@@ -3019,39 +3241,16 @@ static LRESULT WINAPI mdi_frame_wnd_proc(HWND hwnd, UINT message, WPARAM wParam,
message != WM_NCHITTEST &&
message != WM_GETTEXT &&
message != WM_GETICON &&
- message != WM_DEVICECHANGE &&
- message < 0xc000)
+ message != WM_GETOBJECT &&
+ message != WM_DEVICECHANGE)
{
- trace("mdi frame: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
-
- switch (message)
- {
- case WM_WINDOWPOSCHANGING:
- case WM_WINDOWPOSCHANGED:
- {
- WINDOWPOS *winpos = (WINDOWPOS *)lParam;
-
- trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x ",
- winpos->hwnd, winpos->hwndInsertAfter,
- winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
- dump_winpos_flags(winpos->flags);
-
- /* Log only documented flags, win2k uses 0x1000 and 0x2000
- * in the high word for internal purposes
- */
- wParam = winpos->flags & 0xffff;
- /* We are not interested in the flags that don't match under XP and Win9x */
- wParam &= ~(SWP_NOZORDER);
- break;
- }
- }
-
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "mdi frame";
add_message(&msg);
}
@@ -3072,7 +3271,7 @@ static BOOL mdi_RegisterWindowClasses(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "MDI_frame_class";
@@ -3656,51 +3855,29 @@ static void test_WM_SETREDRAW(HWND hwnd)
static INT_PTR CALLBACK TestModalDlgProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- struct message msg;
-
- trace("dialog: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
-
- /* explicitly ignore WM_GETICON message */
- if (message == WM_GETICON) return 0;
-
- /* ignore registered messages */
- if (message >= 0xc000) return 0;
+ struct recvd_message msg;
switch (message)
{
/* ignore */
+ case WM_GETICON:
+ case WM_GETOBJECT:
case WM_MOUSEMOVE:
+ case WM_NCMOUSEMOVE:
+ case WM_NCMOUSELEAVE:
case WM_SETCURSOR:
case WM_DEVICECHANGE:
return 0;
case WM_NCHITTEST:
return HTCLIENT;
-
- case WM_WINDOWPOSCHANGING:
- case WM_WINDOWPOSCHANGED:
- {
- WINDOWPOS *winpos = (WINDOWPOS *)lParam;
-
- trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x ",
- winpos->hwnd, winpos->hwndInsertAfter,
- winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
- dump_winpos_flags(winpos->flags);
-
- /* Log only documented flags, win2k uses 0x1000 and 0x2000
- * in the high word for internal purposes
- */
- wParam = winpos->flags & 0xffff;
- /* We are not interested in the flags that don't match under XP and Win9x */
- wParam &= ~(SWP_NOZORDER);
- break;
- }
}
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "dialog";
add_message(&msg);
if (message == WM_INITDIALOG) SetTimer( hwnd, 1, 100, NULL );
@@ -3910,13 +4087,11 @@ static void test_showwindow(void)
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);
- trace("done\n");
/* ShowWindow( SW_SHOWNA) for now visible top level window */
trace("calling ShowWindow( SW_SHOWNA) for now visible top level window\n");
ok( ShowWindow(hwnd, SW_SHOWNA) != FALSE, "ShowWindow: window was invisible\n" );
ok_sequence(WmSHOWNATopVisible, "ShowWindow(SW_SHOWNA) on visible top level window", FALSE);
- trace("done\n");
/* back to invisible */
ShowWindow(hchild, SW_HIDE);
ShowWindow(hwnd, SW_HIDE);
@@ -3925,21 +4100,18 @@ static void test_showwindow(void)
trace("calling ShowWindow( SW_SHOWNA) for invisible child with invisible parent\n");
ok( ShowWindow(hchild, SW_SHOWNA) == FALSE, "ShowWindow: window was visible\n" );
ok_sequence(WmSHOWNAChildInvisParInvis, "ShowWindow(SW_SHOWNA) invisible child and parent", FALSE);
- trace("done\n");
/* ShowWindow(SW_SHOWNA) with child visible and parent invisible */
ok( ShowWindow(hchild, SW_SHOW) != FALSE, "ShowWindow: window was invisible\n" );
flush_sequence();
trace("calling ShowWindow( SW_SHOWNA) for the visible child and invisible parent\n");
ok( ShowWindow(hchild, SW_SHOWNA) != FALSE, "ShowWindow: window was invisible\n" );
ok_sequence(WmSHOWNAChildVisParInvis, "ShowWindow(SW_SHOWNA) visible child and invisible parent", FALSE);
- trace("done\n");
/* ShowWindow(SW_SHOWNA) with child visible and parent visible */
ShowWindow( hwnd, SW_SHOW);
flush_sequence();
trace("calling ShowWindow( SW_SHOWNA) for the visible child and parent\n");
ok( ShowWindow(hchild, SW_SHOWNA) != FALSE, "ShowWindow: window was invisible\n" );
ok_sequence(WmSHOWNAChildVisParVis, "ShowWindow(SW_SHOWNA) for the visible child and parent", FALSE);
- trace("done\n");
/* ShowWindow(SW_SHOWNA) with child invisible and parent visible */
ShowWindow( hchild, SW_HIDE);
@@ -3947,7 +4119,6 @@ static void test_showwindow(void)
trace("calling ShowWindow( SW_SHOWNA) for the invisible child and visible parent\n");
ok( ShowWindow(hchild, SW_SHOWNA) == FALSE, "ShowWindow: window was visible\n" );
ok_sequence(WmSHOWNAChildInvisParVis, "ShowWindow(SW_SHOWNA) for the invisible child and visible parent", FALSE);
- trace("done\n");
SetCapture(hchild);
ok(GetCapture() == hchild, "wrong capture window %p\n", GetCapture());
@@ -3969,7 +4140,6 @@ static void test_showwindow(void)
ok (hwnd != 0, "Failed to create popup window\n");
ok(IsZoomed(hwnd), "window should be maximized\n");
ok_sequence(WmCreateInvisibleMaxPopupSeq, "CreateWindow(WS_MAXIMIZED):popup", FALSE);
- trace("done\n");
GetWindowRect(hwnd, &rc);
ok( rc.right-rc.left == GetSystemMetrics(SM_CXSCREEN) &&
@@ -3985,7 +4155,6 @@ static void test_showwindow(void)
ShowWindow(hwnd, SW_SHOWMAXIMIZED);
ok(IsZoomed(hwnd), "window should be maximized\n");
ok_sequence(WmShowMaxPopupResizedSeq, "ShowWindow(SW_SHOWMAXIMIZED):invisible maximized and resized popup", FALSE);
- trace("done\n");
GetWindowRect(hwnd, &rc);
ok( rc.right-rc.left == GetSystemMetrics(SM_CXSCREEN) &&
@@ -4005,13 +4174,11 @@ static void test_showwindow(void)
ok (hwnd != 0, "Failed to create popup window\n");
ok(IsZoomed(hwnd), "window should be maximized\n");
ok_sequence(WmCreateInvisibleMaxPopupSeq, "CreateWindow(WS_MAXIMIZED):popup", FALSE);
- trace("done\n");
trace("calling ShowWindow( SW_SHOWMAXIMIZE ) for invisible maximized popup window\n");
ShowWindow(hwnd, SW_SHOWMAXIMIZED);
ok(IsZoomed(hwnd), "window should be maximized\n");
ok_sequence(WmShowMaxPopupSeq, "ShowWindow(SW_SHOWMAXIMIZED):invisible maximized popup", FALSE);
- trace("done\n");
DestroyWindow(hwnd);
flush_sequence();
@@ -4024,7 +4191,6 @@ static void test_showwindow(void)
ok (hwnd != 0, "Failed to create popup window\n");
ok(IsZoomed(hwnd), "window should be maximized\n");
ok_sequence(WmCreateMaxPopupSeq, "CreateWindow(WS_MAXIMIZED):popup", FALSE);
- trace("done\n");
DestroyWindow(hwnd);
flush_sequence();
@@ -4038,13 +4204,11 @@ static void test_showwindow(void)
ok (hwnd != 0, "Failed to create popup window\n");
ok(!IsZoomed(hwnd), "window should NOT be maximized\n");
ok_sequence(WmCreatePopupSeq, "CreateWindow(WS_VISIBLE):popup", FALSE);
- trace("done\n");
trace("calling ShowWindow( SW_SHOWMAXIMIZE ) for visible popup window\n");
ShowWindow(hwnd, SW_SHOWMAXIMIZED);
ok(IsZoomed(hwnd), "window should be maximized\n");
ok_sequence(WmShowVisMaxPopupSeq, "ShowWindow(SW_SHOWMAXIMIZED):popup", FALSE);
- trace("done\n");
DestroyWindow(hwnd);
flush_sequence();
}
@@ -4166,6 +4330,14 @@ static const struct message WmInitEndSession_5[] = {
{ 0 }
};
+static const struct message WmOptionalPaint[] = {
+ { WM_PAINT, sent|optional },
+ { WM_NCPAINT, sent|beginpaint|optional },
+ { WM_GETTEXT, sent|beginpaint|defwinproc|optional },
+ { WM_ERASEBKGND, sent|beginpaint|optional },
+ { 0 }
+};
+
static const struct message WmZOrder[] = {
{ WM_WINDOWPOSCHANGING, sent|wparam, 0, 0 },
{ WM_GETMINMAXINFO, sent|defwinproc|wparam, 0, 0 },
@@ -4278,25 +4450,32 @@ static void test_messages(void)
ShowWindow(hwnd, SW_SHOWMAXIMIZED);
flush_events();
ok_sequence(WmShowMaxOverlappedSeq, "ShowWindow(SW_SHOWMAXIMIZED):overlapped", TRUE);
-
- ShowWindow(hwnd, SW_RESTORE);
- ok_sequence(WmShowRestoreMaxOverlappedSeq, "ShowWindow(SW_RESTORE):overlapped", FALSE);
- flush_events();
flush_sequence();
+ if (GetWindowLongW( hwnd, GWL_STYLE ) & WS_MAXIMIZE)
+ {
+ ShowWindow(hwnd, SW_RESTORE);
+ flush_events();
+ ok_sequence(WmShowRestoreMaxOverlappedSeq, "ShowWindow(SW_RESTORE):overlapped", TRUE);
+ flush_sequence();
+ }
+
ShowWindow(hwnd, SW_MINIMIZE);
flush_events();
ok_sequence(WmShowMinOverlappedSeq, "ShowWindow(SW_SHOWMINIMIZED):overlapped", TRUE);
flush_sequence();
- ShowWindow(hwnd, SW_RESTORE);
- flush_events();
- ok_sequence(WmShowRestoreMinOverlappedSeq, "ShowWindow(SW_RESTORE):overlapped", TRUE);
- flush_sequence();
+ if (GetWindowLongW( hwnd, GWL_STYLE ) & WS_MINIMIZE)
+ {
+ ShowWindow(hwnd, SW_RESTORE);
+ flush_events();
+ ok_sequence(WmShowRestoreMinOverlappedSeq, "ShowWindow(SW_RESTORE):overlapped", TRUE);
+ flush_sequence();
+ }
ShowWindow(hwnd, SW_SHOW);
flush_events();
- ok_sequence(WmEmptySeq, "ShowWindow(SW_SHOW):overlapped already visible", FALSE);
+ 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");
@@ -4937,25 +5116,28 @@ static LRESULT CALLBACK button_hook_proc(HWND hwnd, UINT message, WPARAM wParam,
{
static long defwndproc_counter = 0;
LRESULT ret;
- struct message msg;
+ struct recvd_message msg;
- trace("button: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
-
- /* explicitly ignore WM_GETICON message */
- if (message == WM_GETICON) return 0;
-
- /* ignore registered messages */
- if (message >= 0xc000) return 0;
-
- msg.message = message;
- msg.flags = sent|wparam|lparam;
- if (defwndproc_counter) msg.flags |= defwinproc;
- msg.wParam = wParam;
- msg.lParam = lParam;
- add_message(&msg);
-
- if (message == BM_SETSTATE)
+ switch (message)
+ {
+ case WM_GETICON:
+ case WM_GETOBJECT:
+ return 0; /* ignore them */
+ case WM_SYNCPAINT:
+ break;
+ case BM_SETSTATE:
ok(GetCapture() == hwnd, "GetCapture() = %p\n", GetCapture());
+ /* fall through */
+ default:
+ msg.hwnd = hwnd;
+ msg.message = message;
+ msg.flags = sent|wparam|lparam;
+ if (defwndproc_counter) msg.flags |= defwinproc;
+ msg.wParam = wParam;
+ msg.lParam = lParam;
+ msg.descr = "button";
+ add_message(&msg);
+ }
defwndproc_counter++;
ret = CallWindowProcA(old_button_proc, hwnd, message, wParam, lParam);
@@ -5046,8 +5228,11 @@ static void test_button_messages(void)
0, 0, 50, 14, 0, 0, 0, NULL);
ok(hwnd != 0, "Failed to create button window\n");
- SetFocus(0);
+ SetForegroundWindow(hwnd);
flush_events();
+
+ SetActiveWindow(hwnd);
+ SetFocus(0);
flush_sequence();
SendMessageA(hwnd, WM_LBUTTONDOWN, 0, 0);
@@ -5069,9 +5254,9 @@ static void test_button_messages(void)
static const struct message WmSetFontStaticSeq[] =
{
{ WM_SETFONT, sent },
- { WM_PAINT, sent|defwinproc },
+ { WM_PAINT, sent|defwinproc|optional },
{ WM_ERASEBKGND, sent|defwinproc|optional },
- { WM_CTLCOLORSTATIC, sent|defwinproc },
+ { WM_CTLCOLORSTATIC, sent|defwinproc|optional },
{ 0 }
};
@@ -5081,21 +5266,17 @@ static LRESULT CALLBACK static_hook_proc(HWND hwnd, UINT message, WPARAM wParam,
{
static long defwndproc_counter = 0;
LRESULT ret;
- struct message msg;
+ struct recvd_message msg;
- trace("static: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
-
- /* explicitly ignore WM_GETICON message */
- if (message == WM_GETICON) return 0;
-
- /* ignore registered messages */
- if (message >= 0xc000) return 0;
+ if (message == WM_GETICON || message == WM_GETOBJECT) return 0; /* ignore them */
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "static";
add_message(&msg);
defwndproc_counter++;
@@ -5180,7 +5361,7 @@ static LRESULT CALLBACK combobox_hook_proc(HWND hwnd, UINT message, WPARAM wPara
{
static long defwndproc_counter = 0;
LRESULT ret;
- struct message msg;
+ struct recvd_message msg;
/* do not log painting messages */
if (message != WM_PAINT &&
@@ -5190,15 +5371,16 @@ static LRESULT CALLBACK combobox_hook_proc(HWND hwnd, UINT message, WPARAM wPara
message != WM_NCHITTEST &&
message != WM_GETTEXT &&
message != WM_GETICON &&
+ message != WM_GETOBJECT &&
message != WM_DEVICECHANGE)
{
- trace("combo: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
-
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "combo";
add_message(&msg);
}
@@ -5284,14 +5466,14 @@ static const struct message WmImeKeydownMsgSeq_1[] =
static LRESULT WINAPI wmime_keydown_procA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- struct message msg;
-
- trace("wmime_keydown_procA: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
+ struct recvd_message msg;
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = wparam|lparam;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "wmime_keydown";
add_message(&msg);
return DefWindowProcA(hwnd, message, wParam, lParam);
@@ -5308,7 +5490,7 @@ static void register_wmime_keydown_class(void)
if (!RegisterClassA(&cls)) assert(0);
}
-void test_wmime_keydown_message(void)
+static void test_wmime_keydown_message(void)
{
HWND hwnd;
MSG msg;
@@ -5441,7 +5623,7 @@ static const struct message WmInvalidateErasePaint2[] = {
{ WM_PAINT, sent },
{ WM_NCPAINT, sent|beginpaint },
{ WM_GETTEXT, sent|beginpaint|defwinproc|optional },
- { WM_ERASEBKGND, sent|beginpaint },
+ { WM_ERASEBKGND, sent|beginpaint|optional },
{ 0 }
};
@@ -5496,7 +5678,7 @@ static const struct message WmParentPaintNc[] = {
{ WM_PAINT, sent },
{ WM_NCPAINT, sent|beginpaint },
{ WM_GETTEXT, sent|beginpaint|defwinproc|optional },
- { WM_ERASEBKGND, sent|beginpaint },
+ { WM_ERASEBKGND, sent|beginpaint|optional },
{ 0 }
};
@@ -5512,11 +5694,11 @@ static const struct message WmParentErasePaint[] = {
{ WM_PAINT, sent|parent },
{ WM_NCPAINT, sent|parent|beginpaint },
{ WM_GETTEXT, sent|parent|beginpaint|defwinproc|optional },
- { WM_ERASEBKGND, sent|parent|beginpaint },
+ { WM_ERASEBKGND, sent|parent|beginpaint|optional },
{ WM_PAINT, sent },
{ WM_NCPAINT, sent|beginpaint },
{ WM_GETTEXT, sent|beginpaint|defwinproc|optional },
- { WM_ERASEBKGND, sent|beginpaint },
+ { WM_ERASEBKGND, sent|beginpaint|optional },
{ 0 }
};
@@ -5601,13 +5783,15 @@ static void test_paint_messages(void)
*/
trace("testing ValidateRect(0, NULL)\n");
SetRectEmpty( &rect );
- ok(ValidateRect(0, &rect), "ValidateRect(0, &rc) should not fail\n");
- check_update_rgn( hwnd, hrgn );
- ok_sequence( WmInvalidateErase, "InvalidateErase", FALSE );
- flush_events();
- ok_sequence( WmPaint, "Paint", FALSE );
- RedrawWindow( hwnd, NULL, NULL, RDW_VALIDATE );
- check_update_rgn( hwnd, 0 );
+ if (ValidateRect(0, &rect)) /* not supported on Win9x */
+ {
+ check_update_rgn( hwnd, hrgn );
+ ok_sequence( WmInvalidateErase, "InvalidateErase", FALSE );
+ flush_events();
+ ok_sequence( WmPaint, "Paint", FALSE );
+ RedrawWindow( hwnd, NULL, NULL, RDW_VALIDATE );
+ check_update_rgn( hwnd, 0 );
+ }
trace("testing InvalidateRgn(0, NULL, FALSE)\n");
SetLastError(0xdeadbeef);
@@ -6077,7 +6261,7 @@ struct wnd_event
static DWORD WINAPI thread_proc(void *param)
{
MSG msg;
- struct wnd_event *wnd_event = (struct wnd_event *)param;
+ struct wnd_event *wnd_event = param;
wnd_event->hwnd = CreateWindowExA(0, "TestWindowClass", "window caption text", WS_OVERLAPPEDWINDOW,
100, 100, 200, 200, 0, 0, 0, NULL);
@@ -6110,7 +6294,7 @@ static void test_interthread_messages(void)
wnd_event.event = CreateEventW(NULL, 0, 0, NULL);
if (!wnd_event.event)
{
- trace("skipping interthread message test under win9x\n");
+ win_skip("skipping interthread message test under win9x\n");
return;
}
@@ -6284,6 +6468,8 @@ static const struct message WmCtrlAltVkN[] = {
{ HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0x20000001 }, /* XP */
{ WM_KEYDOWN, wparam|lparam, 'N', 0x20000001 },
{ WM_KEYDOWN, sent|wparam|lparam, 'N', 0x20000001 },
+ { WM_CHAR, optional },
+ { WM_CHAR, sent|optional },
{ HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xe0000001 }, /* XP */
{ WM_KEYUP, wparam|lparam, 'N', 0xe0000001 },
{ WM_KEYUP, sent|wparam|lparam, 'N', 0xe0000001 },
@@ -6372,19 +6558,19 @@ static const struct message WmAltPressRelease[] = {
{ WM_SYSKEYUP, sent|wparam|lparam, VK_MENU, 0xc0000001 },
{ 0 }
};
-static const struct message WmAltMouseButton[] = {
- { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0x20000001 }, /* XP */
- { WM_SYSKEYDOWN, wparam|lparam, VK_MENU, 0x20000001 },
- { WM_SYSKEYDOWN, sent|wparam|lparam, VK_MENU, 0x20000001 },
+static const struct message WmShiftMouseButton[] = {
+ { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_SHIFT, 1 }, /* XP */
+ { WM_KEYDOWN, wparam|lparam, VK_SHIFT, 1 },
+ { WM_KEYDOWN, sent|wparam|lparam, VK_SHIFT, 1 },
{ WM_MOUSEMOVE, wparam|optional, 0, 0 },
{ WM_MOUSEMOVE, sent|wparam|optional, 0, 0 },
- { WM_LBUTTONDOWN, wparam, MK_LBUTTON, 0 },
- { WM_LBUTTONDOWN, sent|wparam, MK_LBUTTON, 0 },
- { WM_LBUTTONUP, wparam, 0, 0 },
- { WM_LBUTTONUP, sent|wparam, 0, 0 },
- { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_MENU, 0xc0000001 }, /* XP */
- { WM_SYSKEYUP, wparam|lparam, VK_MENU, 0xc0000001 },
- { WM_SYSKEYUP, sent|wparam|lparam, VK_MENU, 0xc0000001 },
+ { WM_LBUTTONDOWN, wparam, MK_LBUTTON|MK_SHIFT, 0 },
+ { WM_LBUTTONDOWN, sent|wparam, MK_LBUTTON|MK_SHIFT, 0 },
+ { WM_LBUTTONUP, wparam, MK_SHIFT, 0 },
+ { WM_LBUTTONUP, sent|wparam, MK_SHIFT, 0 },
+ { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, VK_SHIFT, 0xc0000001 }, /* XP */
+ { WM_KEYUP, wparam|lparam, VK_SHIFT, 0xc0000001 },
+ { WM_KEYUP, sent|wparam|lparam, VK_SHIFT, 0xc0000001 },
{ 0 }
};
static const struct message WmF1Seq[] = {
@@ -6417,21 +6603,22 @@ static void pump_msg_loop(HWND hwnd, HACCEL hAccel)
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE))
{
- struct message log_msg;
-
- trace("accel: %p, %04x, %08lx, %08lx\n", msg.hwnd, msg.message, msg.wParam, msg.lParam);
+ struct recvd_message log_msg;
/* ignore some unwanted messages */
if (msg.message == WM_MOUSEMOVE ||
msg.message == WM_GETICON ||
+ msg.message == WM_GETOBJECT ||
msg.message == WM_TIMER ||
msg.message == WM_DEVICECHANGE)
continue;
+ log_msg.hwnd = msg.hwnd;
log_msg.message = msg.message;
log_msg.flags = wparam|lparam;
log_msg.wParam = msg.wParam;
log_msg.lParam = msg.lParam;
+ log_msg.descr = "accel";
add_message(&log_msg);
if (!hAccel || !TranslateAccelerator(hwnd, hAccel, &msg))
@@ -6445,6 +6632,7 @@ static void pump_msg_loop(HWND hwnd, HACCEL hAccel)
static void test_accelerators(void)
{
RECT rc;
+ POINT pt;
SHORT state;
HACCEL hAccel;
HWND hwnd = CreateWindowExA(0, "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW | WS_VISIBLE,
@@ -6476,6 +6664,11 @@ static void test_accelerators(void)
keybd_event('N', 0, 0, 0);
keybd_event('N', 0, KEYEVENTF_KEYUP, 0);
pump_msg_loop(hwnd, hAccel);
+ if (!sequence_cnt) /* we didn't get any message */
+ {
+ skip( "queuing key events not supported\n" );
+ goto done;
+ }
ok_sequence(WmVkN, "VK_N press/release", FALSE);
trace("testing Shift+VK_N press/release\n");
@@ -6593,6 +6786,7 @@ static void test_accelerators(void)
ret = DestroyAcceleratorTable(hAccel);
ok( ret, "DestroyAcceleratorTable error %d\n", GetLastError());
+ hAccel = 0;
trace("testing Alt press/release\n");
flush_sequence();
@@ -6604,23 +6798,6 @@ static void test_accelerators(void)
/* this test doesn't pass in Wine for managed windows */
ok_sequence(WmAltPressRelease, "Alt press/release", TRUE);
- trace("testing Alt+MouseButton press/release\n");
- /* first, move mouse pointer inside of the window client area */
- GetClientRect(hwnd, &rc);
- MapWindowPoints(hwnd, 0, (LPPOINT)&rc, 2);
- rc.left += (rc.right - rc.left)/2;
- rc.top += (rc.bottom - rc.top)/2;
- SetCursorPos(rc.left, rc.top);
-
- flush_events();
- flush_sequence();
- keybd_event(VK_MENU, 0, 0, 0);
- mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
- mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
- keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
- pump_msg_loop(hwnd, 0);
- ok_sequence(WmAltMouseButton, "Alt+MouseButton press/release", FALSE);
-
trace("testing VK_F1 press/release\n");
keybd_event(VK_F1, 0, 0, 0);
keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0);
@@ -6633,6 +6810,30 @@ static void test_accelerators(void)
pump_msg_loop(hwnd, 0);
ok_sequence(WmVkAppsSeq, "VK_APPS press/release", FALSE);
+ trace("testing Shift+MouseButton press/release\n");
+ /* first, move mouse pointer inside of the window client area */
+ GetClientRect(hwnd, &rc);
+ MapWindowPoints(hwnd, 0, (LPPOINT)&rc, 2);
+ rc.left += (rc.right - rc.left)/2;
+ rc.top += (rc.bottom - rc.top)/2;
+ SetCursorPos(rc.left, rc.top);
+ SetActiveWindow(hwnd);
+
+ flush_events();
+ flush_sequence();
+ GetCursorPos(&pt);
+ if (pt.x == rc.left && pt.y == rc.top)
+ {
+ 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);
+ }
+
+done:
+ if (hAccel) DestroyAcceleratorTable(hAccel);
DestroyWindow(hwnd);
}
@@ -6644,12 +6845,7 @@ static LRESULT MsgCheckProc (BOOL unicode, HWND hwnd, UINT message,
static long defwndproc_counter = 0;
static long beginpaint_counter = 0;
LRESULT ret;
- struct message msg;
-
- trace("%p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
-
- /* explicitly ignore WM_GETICON message */
- if (message == WM_GETICON) return 0;
+ struct recvd_message msg;
/* ignore registered messages */
if (message >= 0xc000) return 0;
@@ -6709,40 +6905,27 @@ static LRESULT MsgCheckProc (BOOL unicode, HWND hwnd, UINT message,
/* test_accelerators() depends on this */
case WM_NCHITTEST:
return HTCLIENT;
-
+
/* ignore */
case WM_MOUSEMOVE:
+ case WM_MOUSEACTIVATE:
+ case WM_NCMOUSEMOVE:
case WM_SETCURSOR:
+ case WM_GETICON:
+ case WM_GETOBJECT:
case WM_DEVICECHANGE:
+ case WM_IME_SELECT:
return 0;
-
- case WM_WINDOWPOSCHANGING:
- case WM_WINDOWPOSCHANGED:
- {
- WINDOWPOS *winpos = (WINDOWPOS *)lParam;
-
- trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x ",
- winpos->hwnd, winpos->hwndInsertAfter,
- winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
- dump_winpos_flags(winpos->flags);
-
- /* Log only documented flags, win2k uses 0x1000 and 0x2000
- * in the high word for internal purposes
- */
- wParam = winpos->flags & 0xffff;
- /* We are not interested in the flags that don't match under XP and Win9x */
- wParam &= ~(SWP_NOZORDER);
- break;
- }
}
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
if (beginpaint_counter) msg.flags |= beginpaint;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "MsgCheckProc";
add_message(&msg);
if (message == WM_GETMINMAXINFO && (GetWindowLongA(hwnd, GWL_STYLE) & WS_CHILD))
@@ -6798,26 +6981,26 @@ static LRESULT WINAPI PopupMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam,
{
static long defwndproc_counter = 0;
LRESULT ret;
- struct message msg;
-
- trace("popup: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
+ struct recvd_message msg;
switch (message)
{
case WM_GETICON:
- /* explicitly ignore WM_GETICON message */
- return 0;
+ case WM_GETOBJECT:
+ return 0; /* ignore them */
case WM_QUERYENDSESSION:
case WM_ENDSESSION:
lParam &= ~0x01; /* Vista adds a 0x01 flag */
break;
}
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "popup";
add_message(&msg);
if (message == WM_CREATE)
@@ -6838,18 +7021,13 @@ static LRESULT WINAPI ParentMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam
static long defwndproc_counter = 0;
static long beginpaint_counter = 0;
LRESULT ret;
- struct message msg;
- LPARAM logged_lParam;
+ struct recvd_message msg;
- trace("parent: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
-
- /* explicitly ignore WM_GETICON message */
- if (message == WM_GETICON) return 0;
+ if (message == WM_GETICON || message == WM_GETOBJECT) return 0; /* ignore them */
/* ignore registered messages */
if (message >= 0xc000) return 0;
- logged_lParam=lParam;
if (log_all_parent_messages ||
message == WM_PARENTNOTIFY || message == WM_CANCELMODE ||
message == WM_SETFOCUS || message == WM_KILLFOCUS ||
@@ -6864,6 +7042,7 @@ static LRESULT WINAPI ParentMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam
return HTCLIENT;
case WM_SETCURSOR:
case WM_MOUSEMOVE:
+ case WM_NCMOUSEMOVE:
return 0;
case WM_ERASEBKGND:
@@ -6875,53 +7054,16 @@ static LRESULT WINAPI ParentMsgCheckProcA(HWND hwnd, UINT message, WPARAM wParam
ret, rc.left, rc.top, rc.right, rc.bottom);
break;
}
-
- case WM_WINDOWPOSCHANGING:
- case WM_WINDOWPOSCHANGED:
- {
- WINDOWPOS *winpos = (WINDOWPOS *)lParam;
-
- trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x ",
- winpos->hwnd, winpos->hwndInsertAfter,
- winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
- dump_winpos_flags(winpos->flags);
-
- /* Log only documented flags, win2k uses 0x1000 and 0x2000
- * in the high word for internal purposes
- */
- wParam = winpos->flags & 0xffff;
- /* We are not interested in the flags that don't match under XP and Win9x */
- wParam &= ~(SWP_NOZORDER);
- break;
- }
-
- case WM_DRAWITEM:
- {
- /* encode DRAWITEMSTRUCT into an LPARAM */
- DRAW_ITEM_STRUCT di;
- DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT *)lParam;
-
- trace("WM_DRAWITEM: type %x, ctl_id %x, item_id %x, action %x, state %x\n",
- dis->CtlType, dis->CtlID, dis->itemID, dis->itemAction, dis->itemState);
-
- di.u.item.type = dis->CtlType;
- di.u.item.ctl_id = dis->CtlID;
- di.u.item.item_id = dis->itemID;
- di.u.item.action = dis->itemAction;
- di.u.item.state = dis->itemState;
-
- logged_lParam = di.u.lp;
- break;
- }
}
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|parent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
if (beginpaint_counter) msg.flags |= beginpaint;
msg.wParam = wParam;
- msg.lParam = logged_lParam;
+ msg.lParam = lParam;
+ msg.descr = "parent";
add_message(&msg);
}
@@ -6946,15 +7088,9 @@ static LRESULT WINAPI TestDlgProcA(HWND hwnd, UINT message, WPARAM wParam, LPARA
{
static long defwndproc_counter = 0;
LRESULT ret;
- struct message msg;
+ struct recvd_message msg;
- trace("dialog: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
-
- /* explicitly ignore WM_GETICON message */
- if (message == WM_GETICON) return 0;
-
- /* ignore registered messages */
- if (message >= 0xc000) return 0;
+ if (message == WM_GETICON || message == WM_GETOBJECT) return 0; /* ignore them */
if (test_def_id)
{
@@ -6966,34 +7102,13 @@ static LRESULT WINAPI TestDlgProcA(HWND hwnd, UINT message, WPARAM wParam, LPARA
ok(HIWORD(ret) == DC_HASDEFID, "DM_GETDEFID should return DC_HASDEFID, got %lx\n", ret);
}
- switch (message)
- {
- case WM_WINDOWPOSCHANGING:
- case WM_WINDOWPOSCHANGED:
- {
- WINDOWPOS *winpos = (WINDOWPOS *)lParam;
-
- trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x ",
- winpos->hwnd, winpos->hwndInsertAfter,
- winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
- dump_winpos_flags(winpos->flags);
-
- /* Log only documented flags, win2k uses 0x1000 and 0x2000
- * in the high word for internal purposes
- */
- wParam = winpos->flags & 0xffff;
- /* We are not interested in the flags that don't match under XP and Win9x */
- wParam &= ~(SWP_NOZORDER);
- break;
- }
- }
-
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "dialog";
add_message(&msg);
defwndproc_counter++;
@@ -7003,53 +7118,11 @@ static LRESULT WINAPI TestDlgProcA(HWND hwnd, UINT message, WPARAM wParam, LPARA
return ret;
}
-static void dump_winpos_flags(UINT flags)
-{
- if (!winetest_debug) return;
-
- if (flags & SWP_SHOWWINDOW) printf("|SWP_SHOWWINDOW");
- if (flags & SWP_HIDEWINDOW) printf("|SWP_HIDEWINDOW");
- if (flags & SWP_NOACTIVATE) printf("|SWP_NOACTIVATE");
- if (flags & SWP_FRAMECHANGED) printf("|SWP_FRAMECHANGED");
- if (flags & SWP_NOCOPYBITS) printf("|SWP_NOCOPYBITS");
- if (flags & SWP_NOOWNERZORDER) printf("|SWP_NOOWNERZORDER");
- if (flags & SWP_NOSENDCHANGING) printf("|SWP_NOSENDCHANGING");
- if (flags & SWP_DEFERERASE) printf("|SWP_DEFERERASE");
- if (flags & SWP_ASYNCWINDOWPOS) printf("|SWP_ASYNCWINDOWPOS");
- if (flags & SWP_NOZORDER) printf("|SWP_NOZORDER");
- if (flags & SWP_NOREDRAW) printf("|SWP_NOREDRAW");
- if (flags & SWP_NOSIZE) printf("|SWP_NOSIZE");
- if (flags & SWP_NOMOVE) printf("|SWP_NOMOVE");
- if (flags & SWP_NOCLIENTSIZE) printf("|SWP_NOCLIENTSIZE");
- if (flags & SWP_NOCLIENTMOVE) printf("|SWP_NOCLIENTMOVE");
-
-#define DUMPED_FLAGS \
- (SWP_NOSIZE | \
- SWP_NOMOVE | \
- SWP_NOZORDER | \
- SWP_NOREDRAW | \
- SWP_NOACTIVATE | \
- SWP_FRAMECHANGED | \
- SWP_SHOWWINDOW | \
- SWP_HIDEWINDOW | \
- SWP_NOCOPYBITS | \
- SWP_NOOWNERZORDER | \
- SWP_NOSENDCHANGING | \
- SWP_DEFERERASE | \
- SWP_ASYNCWINDOWPOS | \
- SWP_NOCLIENTSIZE | \
- SWP_NOCLIENTMOVE)
-
- if(flags & ~DUMPED_FLAGS) printf("|0x%04x", flags & ~DUMPED_FLAGS);
- printf("\n");
-#undef DUMPED_FLAGS
-}
-
static LRESULT WINAPI ShowWindowProcA(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static long defwndproc_counter = 0;
LRESULT ret;
- struct message msg;
+ struct recvd_message msg;
/* log only specific messages we are interested in */
switch (message)
@@ -7060,49 +7133,25 @@ static LRESULT WINAPI ShowWindowProcA(HWND hwnd, UINT message, WPARAM wParam, LP
case WM_KILLFOCUS:
#endif
case WM_SHOWWINDOW:
- trace("WM_SHOWWINDOW %ld\n", wParam);
- break;
case WM_SIZE:
- trace("WM_SIZE %ld\n", wParam);
- break;
case WM_MOVE:
- trace("WM_MOVE\n");
- break;
case WM_GETMINMAXINFO:
- trace("WM_GETMINMAXINFO\n");
- break;
-
case WM_WINDOWPOSCHANGING:
case WM_WINDOWPOSCHANGED:
- {
- WINDOWPOS *winpos = (WINDOWPOS *)lParam;
-
- trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n",
- winpos->hwnd, winpos->hwndInsertAfter,
- winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
- trace("flags: ");
- dump_winpos_flags(winpos->flags);
-
- /* Log only documented flags, win2k uses 0x1000 and 0x2000
- * in the high word for internal purposes
- */
- wParam = winpos->flags & 0xffff;
- /* We are not interested in the flags that don't match under XP and Win9x */
- wParam &= ~(SWP_NOZORDER);
break;
- }
default: /* ignore */
/*trace("showwindow: %p, %04x, %08x, %08lx\n", hwnd, message, wParam, lParam);*/
return DefWindowProcA(hwnd, message, wParam, lParam);
}
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "show";
add_message(&msg);
defwndproc_counter++;
@@ -7112,7 +7161,7 @@ static LRESULT WINAPI ShowWindowProcA(HWND hwnd, UINT message, WPARAM wParam, LP
return ret;
}
-LRESULT WINAPI PaintLoopProcA(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+static LRESULT WINAPI PaintLoopProcA(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
@@ -7152,7 +7201,7 @@ static BOOL RegisterWindowClasses(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "TestWindowClass";
@@ -7229,32 +7278,14 @@ static BOOL is_our_logged_class(HWND hwnd)
!lstrcmpiA(buf, "#32770") ||
!lstrcmpiA(buf, "#32768"))
return TRUE;
- trace("ignoring window class %s\n", buf);
}
return FALSE;
}
-static HHOOK hCBT_hook;
-static DWORD cbt_hook_thread_id;
-
static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam)
{
- static const char * const CBT_code_name[10] = {
- "HCBT_MOVESIZE",
- "HCBT_MINMAX",
- "HCBT_QS",
- "HCBT_CREATEWND",
- "HCBT_DESTROYWND",
- "HCBT_ACTIVATE",
- "HCBT_CLICKSKIPPED",
- "HCBT_KEYSKIPPED",
- "HCBT_SYSCOMMAND",
- "HCBT_SETFOCUS" };
- const char *code_name = (nCode >= 0 && nCode <= HCBT_SETFOCUS) ? CBT_code_name[nCode] : "Unknown";
HWND hwnd;
- trace("CBT: %d (%s), %08lx, %08lx\n", nCode, code_name, wParam, lParam);
-
ok(cbt_hook_thread_id == GetCurrentThreadId(), "we didn't ask for events from other threads\n");
if (nCode == HCBT_CLICKSKIPPED)
@@ -7265,12 +7296,14 @@ static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam)
if (nCode == HCBT_SYSCOMMAND || nCode == HCBT_KEYSKIPPED)
{
- struct message msg;
+ struct recvd_message msg;
+ msg.hwnd = 0;
msg.message = nCode;
msg.flags = hook|wparam|lparam;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "CBT";
add_message(&msg);
return CallNextHookEx(hCBT_hook, nCode, wParam, lParam);
@@ -7295,12 +7328,14 @@ static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam)
if (is_our_logged_class(hwnd))
{
- struct message msg;
+ struct recvd_message msg;
+ msg.hwnd = hwnd;
msg.message = nCode;
msg.flags = hook|wparam|lparam;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "CBT";
add_message(&msg);
}
return CallNextHookEx(hCBT_hook, nCode, wParam, lParam);
@@ -7314,9 +7349,6 @@ static void CALLBACK win_event_proc(HWINEVENTHOOK hevent,
DWORD thread_id,
DWORD event_time)
{
- trace("WEH:%p,event %08x,hwnd %p,obj %08x,id %08x,thread %08x,time %08x\n",
- hevent, event, hwnd, object_id, child_id, thread_id, event_time);
-
ok(thread_id == GetCurrentThreadId(), "we didn't ask for events from other threads\n");
/* ignore mouse cursor events */
@@ -7324,12 +7356,14 @@ static void CALLBACK win_event_proc(HWINEVENTHOOK hevent,
if (!hwnd || is_our_logged_class(hwnd))
{
- struct message msg;
+ struct recvd_message msg;
+ msg.hwnd = hwnd;
msg.message = event;
msg.flags = winevent_hook|wparam|lparam;
msg.wParam = object_id;
msg.lParam = child_id;
+ msg.descr = "WEH";
add_message(&msg);
}
}
@@ -7673,20 +7707,19 @@ static void CALLBACK win_event_global_hook_proc(HWINEVENTHOOK hevent,
{
char buf[256];
- trace("WEH_2:%p,event %08x,hwnd %p,obj %08x,id %08x,thread %08x,time %08x\n",
- hevent, event, hwnd, object_id, child_id, thread_id, event_time);
-
if (GetClassNameA(hwnd, buf, sizeof(buf)))
{
if (!lstrcmpiA(buf, "TestWindowClass") ||
!lstrcmpiA(buf, "static"))
{
- struct message msg;
+ struct recvd_message msg;
+ msg.hwnd = hwnd;
msg.message = event;
msg.flags = winevent_hook|wparam|lparam;
msg.wParam = object_id;
msg.lParam = (thread_id == GetCurrentThreadId()) ? child_id : (child_id + 2);
+ msg.descr = "WEH_2";
add_message(&msg);
}
}
@@ -7700,16 +7733,16 @@ static LRESULT CALLBACK cbt_global_hook_proc(int nCode, WPARAM wParam, LPARAM lP
HWND hwnd;
char buf[256];
- trace("CBT_2: %d, %08lx, %08lx\n", nCode, wParam, lParam);
-
if (nCode == HCBT_SYSCOMMAND)
{
- struct message msg;
+ struct recvd_message msg;
+ msg.hwnd = 0;
msg.message = nCode;
msg.flags = hook|wparam|lparam;
msg.wParam = wParam;
msg.lParam = (cbt_global_hook_thread_id == GetCurrentThreadId()) ? 1 : 2;
+ msg.descr = "CBT_2";
add_message(&msg);
return CallNextHookEx(hCBT_global_hook, nCode, wParam, lParam);
@@ -7722,11 +7755,12 @@ static LRESULT CALLBACK cbt_global_hook_proc(int nCode, WPARAM wParam, LPARAM lP
/* we can't test for real mouse events */
if (mhll->flags & LLMHF_INJECTED)
{
- struct message msg;
+ struct recvd_message msg;
memset (&msg, 0, sizeof (msg));
msg.message = wParam;
msg.flags = hook;
+ msg.descr = "CBT_2";
add_message(&msg);
}
return CallNextHookEx(hCBT_global_hook, nCode, wParam, lParam);
@@ -7740,12 +7774,14 @@ static LRESULT CALLBACK cbt_global_hook_proc(int nCode, WPARAM wParam, LPARAM lP
if (!lstrcmpiA(buf, "TestWindowClass") ||
!lstrcmpiA(buf, "static"))
{
- struct message msg;
+ struct recvd_message msg;
+ msg.hwnd = hwnd;
msg.message = nCode;
msg.flags = hook|wparam|lparam;
msg.wParam = wParam;
msg.lParam = (cbt_global_hook_thread_id == GetCurrentThreadId()) ? 1 : 2;
+ msg.descr = "CBT_2";
add_message(&msg);
}
}
@@ -7876,7 +7912,7 @@ static void test_winevents(void)
hevent = CreateEventA(NULL, 0, 0, NULL);
assert(hevent);
- hwnd2 = (HWND)hevent;
+ hwnd2 = hevent;
hthread = CreateThread(NULL, 0, cbt_global_hook_thread_proc, &hwnd2, 0, &tid);
ok(hthread != NULL, "CreateThread failed, error %d\n", GetLastError());
@@ -7929,7 +7965,7 @@ static void test_winevents(void)
ok_sequence(WmWinEventsSeq, "notify winevents", FALSE);
/****** start of event filtering test *************/
- hhook = (HWINEVENTHOOK)pSetWinEventHook(
+ hhook = pSetWinEventHook(
EVENT_OBJECT_SHOW, /* 0x8002 */
EVENT_OBJECT_LOCATIONCHANGE, /* 0x800B */
GetModuleHandleA(0), win_event_global_hook_proc,
@@ -7939,7 +7975,7 @@ static void test_winevents(void)
hevent = CreateEventA(NULL, 0, 0, NULL);
assert(hevent);
- hwnd2 = (HWND)hevent;
+ hwnd2 = hevent;
hthread = CreateThread(NULL, 0, win_event_global_thread_proc, &hwnd2, 0, &tid);
ok(hthread != NULL, "CreateThread failed, error %d\n", GetLastError());
@@ -7968,16 +8004,14 @@ static void test_winevents(void)
/****** end of event filtering test *************/
/****** start of out of context event test *************/
- hhook = (HWINEVENTHOOK)pSetWinEventHook(
- EVENT_MIN, EVENT_MAX,
- 0, win_event_global_hook_proc,
- GetCurrentProcessId(), 0,
+ hhook = pSetWinEventHook(EVENT_MIN, EVENT_MAX, 0,
+ win_event_global_hook_proc, GetCurrentProcessId(), 0,
WINEVENT_OUTOFCONTEXT);
ok(hhook != 0, "SetWinEventHook error %d\n", GetLastError());
hevent = CreateEventA(NULL, 0, 0, NULL);
assert(hevent);
- hwnd2 = (HWND)hevent;
+ hwnd2 = hevent;
flush_sequence();
@@ -8018,13 +8052,13 @@ static void test_winevents(void)
/* WH_MOUSE_LL is not supported on Win9x platforms */
if (!hCBT_global_hook)
{
- trace("Skipping WH_MOUSE_LL test on this platform\n");
+ win_skip("Skipping WH_MOUSE_LL test on this platform\n");
goto skip_mouse_ll_hook_test;
}
hevent = CreateEventA(NULL, 0, 0, NULL);
assert(hevent);
- hwnd2 = (HWND)hevent;
+ hwnd2 = hevent;
hthread = CreateThread(NULL, 0, mouse_ll_global_thread_proc, &hwnd2, 0, &tid);
ok(hthread != NULL, "CreateThread failed, error %d\n", GetLastError());
@@ -8091,8 +8125,8 @@ static void test_set_hook(void)
/* even process local incontext hooks require hmodule */
SetLastError(0xdeadbeef);
- hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(EVENT_MIN, EVENT_MAX,
- 0, win_event_proc, GetCurrentProcessId(), 0, WINEVENT_INCONTEXT);
+ hwinevent_hook = pSetWinEventHook(EVENT_MIN, EVENT_MAX, 0, win_event_proc,
+ GetCurrentProcessId(), 0, WINEVENT_INCONTEXT);
ok(!hwinevent_hook, "WINEVENT_INCONTEXT requires hModule != 0\n");
ok(GetLastError() == ERROR_HOOK_NEEDS_HMOD || /* Win2k */
GetLastError() == 0xdeadbeef, /* Win9x */
@@ -8100,8 +8134,8 @@ static void test_set_hook(void)
/* even thread local incontext hooks require hmodule */
SetLastError(0xdeadbeef);
- hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(EVENT_MIN, EVENT_MAX,
- 0, win_event_proc, GetCurrentProcessId(), GetCurrentThreadId(), WINEVENT_INCONTEXT);
+ hwinevent_hook = pSetWinEventHook(EVENT_MIN, EVENT_MAX, 0, win_event_proc,
+ GetCurrentProcessId(), GetCurrentThreadId(), WINEVENT_INCONTEXT);
ok(!hwinevent_hook, "WINEVENT_INCONTEXT requires hModule != 0\n");
ok(GetLastError() == ERROR_HOOK_NEEDS_HMOD || /* Win2k */
GetLastError() == 0xdeadbeef, /* Win9x */
@@ -8111,27 +8145,27 @@ static void test_set_hook(void)
{
/* these 3 tests don't pass under Win9x */
SetLastError(0xdeadbeef);
- hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(1, 0,
- 0, win_event_proc, GetCurrentProcessId(), 0, WINEVENT_OUTOFCONTEXT);
+ hwinevent_hook = pSetWinEventHook(1, 0, 0, win_event_proc,
+ GetCurrentProcessId(), 0, WINEVENT_OUTOFCONTEXT);
ok(!hwinevent_hook, "SetWinEventHook with invalid event range should fail\n");
ok(GetLastError() == ERROR_INVALID_HOOK_FILTER, "unexpected error %d\n", GetLastError());
SetLastError(0xdeadbeef);
- hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(-1, 1,
- 0, win_event_proc, GetCurrentProcessId(), 0, WINEVENT_OUTOFCONTEXT);
+ hwinevent_hook = pSetWinEventHook(-1, 1, 0, win_event_proc,
+ GetCurrentProcessId(), 0, WINEVENT_OUTOFCONTEXT);
ok(!hwinevent_hook, "SetWinEventHook with invalid event range should fail\n");
ok(GetLastError() == ERROR_INVALID_HOOK_FILTER, "unexpected error %d\n", GetLastError());
SetLastError(0xdeadbeef);
- hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(EVENT_MIN, EVENT_MAX,
- 0, win_event_proc, 0, 0xdeadbeef, WINEVENT_OUTOFCONTEXT);
+ hwinevent_hook = pSetWinEventHook(EVENT_MIN, EVENT_MAX, 0, win_event_proc,
+ 0, 0xdeadbeef, WINEVENT_OUTOFCONTEXT);
ok(!hwinevent_hook, "SetWinEventHook with invalid tid should fail\n");
ok(GetLastError() == ERROR_INVALID_THREAD_ID, "unexpected error %d\n", GetLastError());
}
SetLastError(0xdeadbeef);
- hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(0, 0,
- 0, win_event_proc, GetCurrentProcessId(), 0, WINEVENT_OUTOFCONTEXT);
+ hwinevent_hook = pSetWinEventHook(0, 0, 0, win_event_proc,
+ GetCurrentProcessId(), 0, WINEVENT_OUTOFCONTEXT);
ok(hwinevent_hook != 0, "SetWinEventHook error %d\n", GetLastError());
ok(GetLastError() == 0xdeadbeef, "unexpected error %d\n", GetLastError());
ret = pUnhookWinEvent(hwinevent_hook);
@@ -8141,8 +8175,8 @@ todo_wine {
/* This call succeeds under win2k SP4, but fails under Wine.
Does win2k test/use passed process id? */
SetLastError(0xdeadbeef);
- hwinevent_hook = (HWINEVENTHOOK)pSetWinEventHook(EVENT_MIN, EVENT_MAX,
- 0, win_event_proc, 0xdeadbeef, 0, WINEVENT_OUTOFCONTEXT);
+ hwinevent_hook = pSetWinEventHook(EVENT_MIN, EVENT_MAX, 0, win_event_proc,
+ 0xdeadbeef, 0, WINEVENT_OUTOFCONTEXT);
ok(hwinevent_hook != 0, "SetWinEventHook error %d\n", GetLastError());
ok(GetLastError() == 0xdeadbeef, "unexpected error %d\n", GetLastError());
ret = pUnhookWinEvent(hwinevent_hook);
@@ -8159,6 +8193,7 @@ todo_wine {
static const struct message ScrollWindowPaint1[] = {
{ WM_PAINT, sent },
{ WM_ERASEBKGND, sent|beginpaint },
+ { WM_GETTEXTLENGTH, sent|optional },
{ 0 }
};
@@ -8211,10 +8246,9 @@ static void test_scrollwindowex(void)
trace("start scroll\n");
ScrollWindowEx( hwnd, 10, 10, &rect, NULL, NULL, NULL,
SW_SCROLLCHILDREN|SW_ERASE|SW_INVALIDATE);
- todo_wine { /* wine sends WM_POSCHANGING, WM_POSCHANGED messages */
- /* windows sometimes a WM_MOVE */
- ok_sequence(WmEmptySeq, "ScrollWindowEx", 0);
- }
+ /* wine sends WM_POSCHANGING, WM_POSCHANGED messages */
+ /* windows sometimes a WM_MOVE */
+ ok_sequence(WmEmptySeq, "ScrollWindowEx", TRUE);
trace("end scroll\n");
flush_sequence();
flush_events();
@@ -8261,7 +8295,7 @@ static void test_DestroyWindow(void)
{
BOOL ret;
HWND parent, child1, child2, child3, child4, test;
- UINT child_id = WND_CHILD_ID + 1;
+ UINT_PTR child_id = WND_CHILD_ID + 1;
parent = CreateWindowExA(0, "TestWindowClass", NULL, WS_OVERLAPPEDWINDOW,
100, 100, 200, 200, 0, 0, 0, NULL);
@@ -8676,21 +8710,17 @@ static LRESULT CALLBACK edit_hook_proc(HWND hwnd, UINT message, WPARAM wParam, L
{
static long defwndproc_counter = 0;
LRESULT ret;
- struct message msg;
+ struct recvd_message msg;
- trace("edit: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
-
- /* explicitly ignore WM_GETICON message */
- if (message == WM_GETICON) return 0;
-
- /* ignore registered messages */
- if (message >= 0xc000) return 0;
+ if (message == WM_GETICON || message == WM_GETOBJECT) return 0; /* ignore them */
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "edit";
add_message(&msg);
defwndproc_counter++;
@@ -8815,11 +8845,22 @@ static const struct message WmKeyDownSkippedSeq[] =
{ HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 1 }, /* XP */
{ 0 }
};
+static const struct message WmKeyDownWasDownSkippedSeq[] =
+{
+ { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0x40000001 }, /* XP */
+ { 0 }
+};
static const struct message WmKeyUpSkippedSeq[] =
{
{ HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xc0000001 }, /* XP */
{ 0 }
};
+static const struct message WmUserKeyUpSkippedSeq[] =
+{
+ { WM_USER, sent },
+ { HCBT_KEYSKIPPED, hook|wparam|lparam|optional, 'N', 0xc0000001 }, /* XP */
+ { 0 }
+};
#define EV_STOP 0
#define EV_SENDMSG 1
@@ -8900,6 +8941,11 @@ static void test_PeekMessage(void)
qs_all_input &= ~QS_RAWINPUT;
qs_input &= ~QS_RAWINPUT;
}
+ if (qstatus & QS_POSTMESSAGE)
+ {
+ while (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) /* nothing */ ;
+ qstatus = GetQueueStatus(qs_all_input);
+ }
ok(qstatus == 0, "wrong qstatus %08x\n", qstatus);
trace("signalling to send message\n");
@@ -8931,6 +8977,11 @@ static void test_PeekMessage(void)
keybd_event('N', 0, 0, 0);
keybd_event('N', 0, KEYEVENTF_KEYUP, 0);
qstatus = GetQueueStatus(qs_all_input);
+ if (!(qstatus & MAKELONG(QS_KEY, QS_KEY)))
+ {
+ skip( "queuing key events not supported\n" );
+ goto done;
+ }
ok(qstatus == MAKELONG(QS_KEY, QS_KEY),
"wrong qstatus %08x\n", qstatus);
@@ -9234,6 +9285,7 @@ todo_wine {
ok(ret && msg.message == WM_KEYDOWN && msg.wParam == 'N',
"got %d and %04x wParam %08lx instead of TRUE and WM_KEYDOWN wParam 'N'\n",
ret, msg.message, msg.wParam);
+ ok_sequence(WmKeyDownSkippedSeq, "WmKeyDownSkippedSeq", FALSE);
qstatus = GetQueueStatus(qs_all_input);
ok(qstatus == 0, "wrong qstatus %08x\n", qstatus);
}
@@ -9252,6 +9304,7 @@ todo_wine {
ok(ret && msg.message == WM_KEYDOWN && msg.wParam == 'N',
"got %d and %04x wParam %08lx instead of TRUE and WM_KEYDOWN wParam 'N'\n",
ret, msg.message, msg.wParam);
+ ok_sequence(WmKeyDownWasDownSkippedSeq, "WmKeyDownWasDownSkippedSeq", FALSE);
qstatus = GetQueueStatus(qs_all_input);
ok(qstatus == MAKELONG(0, QS_POSTMESSAGE), "wrong qstatus %08x\n", qstatus);
}
@@ -9287,7 +9340,7 @@ todo_wine {
ok(ret && msg.message == WM_KEYUP && msg.wParam == 'N',
"got %d and %04x wParam %08lx instead of TRUE and WM_KEYDOWN wParam 'N'\n",
ret, msg.message, msg.wParam);
- ok_sequence(WmUser, "WmUser", FALSE);
+ ok_sequence(WmUserKeyUpSkippedSeq, "WmUserKeyUpSkippedSeq", FALSE);
qstatus = GetQueueStatus(qs_all_input);
ok(qstatus == MAKELONG(0, QS_POSTMESSAGE), "wrong qstatus %08x\n", qstatus);
}
@@ -9326,10 +9379,11 @@ static void wait_move_event(HWND hwnd, int x, int y)
while (GetTickCount() - time < 200 && !go) {
ret = PeekMessageA(&msg, hwnd, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_NOREMOVE);
go = ret && msg.pt.x > x && msg.pt.y > y;
+ if (!ret) MsgWaitForMultipleObjects( 0, NULL, FALSE, GetTickCount() - time, QS_ALLINPUT );
}
}
-#define STEP 20
+#define STEP 5
static void test_PeekMessage2(void)
{
HWND hwnd;
@@ -9359,11 +9413,16 @@ static void test_PeekMessage2(void)
/* Do initial mousemove, wait until we can see it
and then do our test peek with PM_NOREMOVE. */
mouse_event(MOUSEEVENTF_MOVE, STEP, STEP, 0, 0);
- wait_move_event(hwnd, 80, 80);
+ wait_move_event(hwnd, 100-STEP, 100-STEP);
ret = PeekMessageA(&msg, hwnd, WM_MOUSEMOVE, WM_MOUSEMOVE, PM_NOREMOVE);
- ok(ret, "no message available\n");
- if (ret) {
+ if (!ret)
+ {
+ skip( "queuing mouse events not supported\n" );
+ goto done;
+ }
+ else
+ {
trace("1st move event: %04x %x %d %d\n", msg.message, msg.time, msg.pt.x, msg.pt.y);
message = msg.message;
time1 = msg.time;
@@ -9377,7 +9436,7 @@ static void test_PeekMessage2(void)
* Although the previous mousemove message was never removed, the
* mousemove we now peek should reflect the recent mouse movements
* because the input queue will merge the move events. */
- Sleep(2);
+ Sleep(100);
mouse_event(MOUSEEVENTF_MOVE, STEP, STEP, 0, 0);
wait_move_event(hwnd, x1, y1);
@@ -9395,7 +9454,7 @@ static void test_PeekMessage2(void)
}
/* Have another go, to drive the point home */
- Sleep(2);
+ Sleep(100);
mouse_event(MOUSEEVENTF_MOVE, STEP, STEP, 0, 0);
wait_move_event(hwnd, x2, y2);
@@ -9412,6 +9471,7 @@ static void test_PeekMessage2(void)
ok(x3 != x2 && y3 != y2, "coords not changed: (%d %d) (%d %d)\n", x2, y2, x3, y3);
}
+done:
DestroyWindow(hwnd);
SetCursorPos(pos.x, pos.y);
flush_events();
@@ -9496,12 +9556,14 @@ static void pump_msg_loop_timeout(DWORD timeout, BOOL inject_mouse_move)
*/
if (msg.message == WM_TIMER || msg.message == WM_SYSTIMER)
{
- struct message s_msg;
+ struct recvd_message s_msg;
+ s_msg.hwnd = msg.hwnd;
s_msg.message = msg.message;
s_msg.flags = sent|wparam|lparam;
s_msg.wParam = msg.wParam;
s_msg.lParam = msg.lParam;
+ s_msg.descr = "msg_loop";
add_message(&s_msg);
}
DispatchMessage(&msg);
@@ -9647,7 +9709,24 @@ static void test_TrackMouseEvent(void)
flush_sequence();
track_hover(hwnd, 0);
- track_query(TME_HOVER, hwnd, default_hover_time);
+ tme.cbSize = sizeof(tme);
+ tme.dwFlags = TME_QUERY;
+ tme.hwndTrack = (HWND)0xdeadbeef;
+ tme.dwHoverTime = 0xdeadbeef;
+ SetLastError(0xdeadbeef);
+ ret = pTrackMouseEvent(&tme);
+ ok(ret, "TrackMouseEvent(TME_QUERY) error %d\n", GetLastError());
+ ok(tme.cbSize == sizeof(tme), "wrong tme.cbSize %u\n", tme.cbSize);
+ if (!tme.dwFlags)
+ {
+ skip( "Cursor not inside window, skipping TrackMouseEvent tests\n" );
+ DestroyWindow( hwnd );
+ return;
+ }
+ ok(tme.dwFlags == TME_HOVER, "wrong tme.dwFlags %08x, expected TME_HOVER\n", tme.dwFlags);
+ ok(tme.hwndTrack == hwnd, "wrong tme.hwndTrack %p, expected %p\n", tme.hwndTrack, hwnd);
+ ok(tme.dwHoverTime == default_hover_time, "wrong tme.dwHoverTime %u, expected %u\n",
+ tme.dwHoverTime, default_hover_time);
pump_msg_loop_timeout(default_hover_time, FALSE);
ok_sequence(WmMouseHoverSeq, "WmMouseHoverSeq", FALSE);
@@ -9663,7 +9742,7 @@ static void test_TrackMouseEvent(void)
track_query(TME_HOVER, hwnd, default_hover_time);
- pump_msg_loop_timeout(default_hover_time / 2, FALSE);
+ pump_msg_loop_timeout(default_hover_time, FALSE);
ok_sequence(WmMouseHoverSeq, "WmMouseHoverSeq", FALSE);
track_query(0, NULL, 0);
@@ -9785,9 +9864,9 @@ static const struct message WmShow[] = {
};
static const struct message WmShowNoActivate_1[] = {
{ HCBT_MINMAX, hook|lparam, 0, SW_SHOWNOACTIVATE },
- { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_STATECHANGED },
- { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_STATECHANGED },
- { WM_MOVE, sent|defwinproc },
+ { WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_STATECHANGED, 0, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOMOVE },
+ { WM_WINDOWPOSCHANGED, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|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 },
{ 0 }
};
@@ -9812,6 +9891,7 @@ static const struct message WmShowNA_1[] = {
static const struct message WmShowNA_2[] = {
{ WM_SHOWWINDOW, sent|wparam, 1 },
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_SHOWWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE },
+ { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
{ 0 }
};
static const struct message WmRestore_1[] = {
@@ -9849,18 +9929,20 @@ static const struct message WmRestore_3[] = {
{ 0 }
};
static const struct message WmRestore_4[] = {
- { HCBT_MINMAX, hook|lparam, 0, SW_RESTORE },
- { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED },
- { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED },
- { WM_MOVE, sent|defwinproc },
- { WM_SIZE, sent|wparam|defwinproc, SIZE_RESTORED },
+ { HCBT_MINMAX, hook|lparam|optional, 0, SW_RESTORE },
+ { WM_WINDOWPOSCHANGING, sent|wparam|optional, 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|optional, SIZE_RESTORED },
{ 0 }
};
static const struct message WmRestore_5[] = {
{ HCBT_MINMAX, hook|lparam, 0, SW_SHOWNORMAL },
- { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED },
- { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED },
- { WM_MOVE, sent|defwinproc },
+ { WM_WINDOWPOSCHANGING, sent|wparam, 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_MOVE, sent|defwinproc|optional },
{ WM_SIZE, sent|wparam|defwinproc, SIZE_RESTORED },
{ 0 }
};
@@ -9868,6 +9950,7 @@ static const struct message WmHide_1[] = {
{ WM_SHOWWINDOW, sent|wparam, 0 },
{ WM_WINDOWPOSCHANGING, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE },
{ WM_WINDOWPOSCHANGED, sent|wparam, SWP_HIDEWINDOW|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
+ { HCBT_ACTIVATE, hook|optional },
{ HCBT_SETFOCUS, hook|optional }, /* win2000 sends it */
{ 0 }
};
@@ -9875,6 +9958,7 @@ static const struct message WmHide_2[] = {
{ WM_SHOWWINDOW, sent|wparam, 0 },
{ WM_WINDOWPOSCHANGING, sent /*|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE*/ }, /* win2000 doesn't add SWP_NOACTIVATE */
{ WM_WINDOWPOSCHANGED, sent /*|wparam, SWP_HIDEWINDOW|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE*/ }, /* win2000 doesn't add SWP_NOACTIVATE */
+ { HCBT_ACTIVATE, hook|optional },
{ 0 }
};
static const struct message WmHide_3[] = {
@@ -9934,10 +10018,24 @@ static const struct message WmMinMax_1[] = {
};
static const struct message WmMinMax_2[] = {
{ HCBT_MINMAX, hook|lparam, 0, SW_SHOWMAXIMIZED },
+ { WM_GETMINMAXINFO, sent|optional },
+ { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_FRAMECHANGED|SWP_STATECHANGED },
+ { HCBT_ACTIVATE, hook|optional },
+ { WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE },
+ { HCBT_SETFOCUS, hook|optional },
+ { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_FRAMECHANGED|SWP_STATECHANGED, 0, SWP_NOSIZE|SWP_NOMOVE|SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE },
+ { WM_MOVE, sent|defwinproc|optional },
+ { WM_SIZE, sent|wparam|defwinproc|optional, SIZE_MAXIMIZED },
+ { HCBT_SETFOCUS, hook|optional },
{ 0 }
};
static const struct message WmMinMax_3[] = {
{ HCBT_MINMAX, hook|lparam, 0, SW_MINIMIZE },
+ { HCBT_SETFOCUS, hook|optional },
+ { 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 },
{ 0 }
};
static const struct message WmMinMax_4[] = {
@@ -9965,9 +10063,9 @@ static const struct message WmShowMaximized_2[] = {
{ WM_WINDOWPOSCHANGED, sent|optional },
{ WM_MOVE, sent|optional }, /* Win9x doesn't send it */
{ WM_SIZE, sent|wparam|optional, SIZE_MAXIMIZED }, /* Win9x doesn't send it */
- { WM_WINDOWPOSCHANGING, sent },
+ { WM_WINDOWPOSCHANGING, sent|optional },
{ HCBT_SETFOCUS, hook|optional },
- { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED },
+ { WM_WINDOWPOSCHANGED, sent|wparam|optional, SWP_FRAMECHANGED|SWP_NOCOPYBITS|SWP_STATECHANGED },
{ WM_MOVE, sent|defwinproc },
{ WM_SIZE, sent|wparam|defwinproc, SIZE_MAXIMIZED },
{ HCBT_SETFOCUS, hook|optional },
@@ -9976,12 +10074,12 @@ static const struct message WmShowMaximized_2[] = {
static const struct message WmShowMaximized_3[] = {
{ HCBT_MINMAX, hook|lparam, 0, SW_SHOWMAXIMIZED },
{ WM_GETMINMAXINFO, sent },
- { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED },
+ { WM_WINDOWPOSCHANGING, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED, 0, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOMOVE },
{ HCBT_ACTIVATE, hook|optional }, /* win2000 doesn't send it */
{ WM_WINDOWPOSCHANGING, sent|wparam|optional, SWP_NOSIZE|SWP_NOMOVE }, /* win2000 doesn't send it */
{ HCBT_SETFOCUS, hook|optional }, /* win2000 doesn't send it */
- { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED },
- { WM_MOVE, sent|defwinproc },
+ { WM_WINDOWPOSCHANGED, sent|wparam, SWP_FRAMECHANGED|SWP_STATECHANGED, 0, SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOSIZE|SWP_NOMOVE },
+ { WM_MOVE, sent|defwinproc|optional },
{ WM_SIZE, sent|wparam|defwinproc, SIZE_MAXIMIZED },
{ 0 }
};
@@ -10039,7 +10137,7 @@ static void test_ShowWindow(void)
/* 39 */ { SW_SHOWNOACTIVATE, TRUE, WS_VISIBLE, WmEmptySeq, FALSE },
/* 40 */ { SW_MINIMIZE, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinimize_2, FALSE },
/* 41 */ { SW_MINIMIZE, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinMax_3, FALSE },
-/* 42 */ { SW_SHOWMAXIMIZED, TRUE, WS_VISIBLE|WS_MAXIMIZE, WmShowMaximized_2, TRUE },
+/* 42 */ { SW_SHOWMAXIMIZED, TRUE, WS_VISIBLE|WS_MAXIMIZE, WmShowMaximized_2, FALSE },
/* 43 */ { SW_SHOWMAXIMIZED, TRUE, WS_VISIBLE|WS_MAXIMIZE, WmMinMax_2, FALSE },
/* 44 */ { SW_MINIMIZE, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinimize_1, FALSE },
/* 45 */ { SW_MINIMIZE, TRUE, WS_VISIBLE|WS_MINIMIZE, WmMinMax_3, FALSE },
@@ -10106,41 +10204,21 @@ static void test_ShowWindow(void)
static INT_PTR WINAPI test_dlg_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- struct message msg;
-
- trace("dialog: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
+ struct recvd_message msg;
switch (message)
{
- case WM_WINDOWPOSCHANGING:
- case WM_WINDOWPOSCHANGED:
- {
- WINDOWPOS *winpos = (WINDOWPOS *)lParam;
-
- trace("%s\n", (message == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x ",
- winpos->hwnd, winpos->hwndInsertAfter,
- winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
- dump_winpos_flags(winpos->flags);
-
- /* Log only documented flags, win2k uses 0x1000 and 0x2000
- * in the high word for internal purposes
- */
- wParam = winpos->flags & 0xffff;
- /* We are not interested in the flags that don't match under XP and Win9x */
- wParam &= ~(SWP_NOZORDER);
- break;
- }
-
- /* explicitly ignore WM_GETICON message */
case WM_GETICON:
- return 0;
+ case WM_GETOBJECT:
+ return 0; /* ignore them */
}
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
msg.wParam = wParam;
msg.lParam = lParam;
+ msg.descr = "dialog";
add_message(&msg);
/* calling DefDlgProc leads to a recursion under XP */
@@ -10333,23 +10411,26 @@ static void test_nullCallback(void)
/* SetActiveWindow( 0 ) hwnd visible */
static const struct message SetActiveWindowSeq0[] =
{
- { HCBT_ACTIVATE, hook },
+ { HCBT_ACTIVATE, hook|optional },
{ WM_NCACTIVATE, sent|wparam, 0 },
{ WM_GETTEXT, sent|defwinproc|optional },
{ WM_ACTIVATE, sent|wparam, 0 },
+ { WM_ACTIVATEAPP, sent|wparam|optional, 0 },
+ { WM_ACTIVATEAPP, sent|wparam|optional, 0 },
{ WM_QUERYNEWPALETTE, sent|wparam|lparam|optional, 0, 0 },
- { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE|SWP_NOACTIVATE },
- { WM_WINDOWPOSCHANGING, sent|wparam, SWP_NOSIZE|SWP_NOMOVE },
- { WM_NCACTIVATE, sent|wparam, 1 },
+ { 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, 1 },
- { HCBT_SETFOCUS, hook },
+ { WM_ACTIVATE, sent|wparam|optional, 1 },
+ { HCBT_SETFOCUS, hook|optional },
{ WM_KILLFOCUS, sent|defwinproc },
- { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 0 },
- { WM_IME_SETCONTEXT, sent|wparam|defwinproc|optional, 1 },
+ { WM_IME_SETCONTEXT, sent|defwinproc|optional },
+ { WM_IME_SETCONTEXT, sent|defwinproc|optional },
+ { WM_IME_SETCONTEXT, sent|defwinproc|optional },
{ WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 1 },
{ WM_IME_NOTIFY, sent|wparam|defwinproc|optional, 2 },
- { WM_SETFOCUS, sent|defwinproc },
+ { WM_SETFOCUS, sent|defwinproc|optional },
{ WM_GETTEXT, sent|optional },
{ 0 }
};
@@ -10444,9 +10525,8 @@ static void test_SetActiveWindow(void)
100, 100, 200, 200, hwnd, 0, 0, NULL);
ok(hwnd != 0, "Failed to create overlapped window\n");
- flush_sequence();
-
ok(popup != 0, "Failed to create popup window\n");
+ SetForegroundWindow( popup );
flush_sequence();
trace("SetActiveWindow(0)\n");
@@ -10457,11 +10537,7 @@ static void test_SetActiveWindow(void)
trace("SetActiveWindow(hwnd), hwnd visible\n");
ret = SetActiveWindow(hwnd);
- todo_wine
- {
- ok( ret == hwnd, "Failed to SetActiveWindow(hwnd), hwnd visible\n");
- }
- ok_sequence(SetActiveWindowSeq1, "SetActiveWindow(hwnd), hwnd visible", TRUE);
+ if (ret == hwnd) ok_sequence(SetActiveWindowSeq1, "SetActiveWindow(hwnd), hwnd visible", TRUE);
flush_sequence();
trace("SetActiveWindow(popup), hwnd visible, popup visible\n");
@@ -10476,7 +10552,7 @@ static void test_SetActiveWindow(void)
trace("SetActiveWindow(hwnd), hwnd not visible\n");
ret = SetActiveWindow(hwnd);
- ok( ret == NULL, "Failed to SetActiveWindow(hwnd), hwnd not visible\n");
+ ok( ret == NULL, "SetActiveWindow(hwnd), hwnd not visible, previous is %p\n", ret );
ok_sequence(SetActiveWindowSeq3, "SetActiveWindow(hwnd), hwnd not visible", TRUE);
flush_sequence();
@@ -10511,6 +10587,7 @@ static void test_SetForegroundWindow(void)
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100, 200, 200, 0, 0, 0, NULL);
ok (hwnd != 0, "Failed to create overlapped window\n");
+ SetForegroundWindow( hwnd );
flush_sequence();
trace("SetForegroundWindow( 0 )\n");
@@ -10540,7 +10617,7 @@ static void test_dbcs_wm_char(void)
if (!pGetCPInfoExA)
{
- skip("GetCPInfoExA is not available\n");
+ win_skip("GetCPInfoExA is not available\n");
return;
}
@@ -10882,7 +10959,7 @@ static LRESULT WINAPI listbox_hook_proc(HWND hwnd, UINT message, WPARAM wp, LPAR
{
static long defwndproc_counter = 0;
LRESULT ret;
- struct message msg;
+ struct recvd_message msg;
/* do not log painting messages */
if (message != WM_PAINT &&
@@ -10891,16 +10968,17 @@ static LRESULT WINAPI listbox_hook_proc(HWND hwnd, UINT message, WPARAM wp, LPAR
message != WM_ERASEBKGND &&
message != WM_NCHITTEST &&
message != WM_GETTEXT &&
+ message != WM_GETOBJECT &&
message != WM_GETICON &&
message != WM_DEVICECHANGE)
{
- trace("listbox: %p, %04x, %08lx, %08lx\n", hwnd, message, wp, lp);
-
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
if (defwndproc_counter) msg.flags |= defwinproc;
msg.wParam = wp;
msg.lParam = lp;
+ msg.descr = "listbox";
add_message(&msg);
}
@@ -11107,14 +11185,14 @@ static LRESULT WINAPI parent_menu_proc(HWND hwnd, UINT message, WPARAM wp, LPARA
message == WM_COMMAND ||
message == WM_MENUCOMMAND)
{
- struct message msg;
-
- trace("parent_menu_proc: %p, %04x, %08lx, %08lx\n", hwnd, message, wp, lp);
+ struct recvd_message msg;
+ msg.hwnd = hwnd;
msg.message = message;
msg.flags = sent|wparam|lparam;
msg.wParam = wp;
msg.lParam = lp;
+ msg.descr = "parent_menu_proc";
add_message(&msg);
}
@@ -11159,7 +11237,7 @@ static void test_menu_messages(void)
if (!pGetMenuInfo || !pSetMenuInfo)
{
- skip("GetMenuInfo and/or SetMenuInfo are not available\n");
+ win_skip("GetMenuInfo and/or SetMenuInfo are not available\n");
return;
}
cls.style = 0;
@@ -11168,7 +11246,7 @@ static void test_menu_messages(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "TestMenuClass";
@@ -11215,6 +11293,11 @@ static void test_menu_messages(void)
TranslateMessage(&msg);
DispatchMessage(&msg);
}
+ if (!sequence_cnt) /* we didn't get any message */
+ {
+ skip( "queuing key events not supported\n" );
+ goto done;
+ }
ok_sequence(wm_popup_menu_1, "popup menu command", FALSE);
/* Alt+F, Right, Enter */
@@ -11268,6 +11351,7 @@ static void test_menu_messages(void)
}
ok_sequence(wm_popup_menu_3, "submenu of a popup menu command", FALSE);
+done:
DestroyWindow(hwnd);
DestroyMenu(hmenu);
}
@@ -11297,6 +11381,22 @@ static void test_paintingloop(void)
DestroyWindow(hwnd);
}
+static void test_defwinproc(void)
+{
+ HWND hwnd;
+ MSG msg;
+ int gotwmquit = FALSE;
+ hwnd = CreateWindowExA(0, "static", "test_defwndproc", WS_POPUP, 0,0,0,0,0,0,0, NULL);
+ assert(hwnd);
+ DefWindowProcA( hwnd, WM_ENDSESSION, 1, 0);
+ while (PeekMessageA( &msg, 0, 0, 0, PM_REMOVE )) {
+ if( msg.message == WM_QUIT) gotwmquit = TRUE;
+ DispatchMessageA( &msg );
+ }
+ ok( gotwmquit == FALSE, "Unexpected WM_QUIT message!\n");
+ DestroyWindow( hwnd);
+}
+
START_TEST(msg)
{
BOOL ret;
@@ -11308,25 +11408,22 @@ START_TEST(msg)
if (pSetWinEventHook)
{
- hEvent_hook = (HWINEVENTHOOK)pSetWinEventHook(EVENT_MIN, EVENT_MAX,
- GetModuleHandleA(0),
- win_event_proc,
- 0,
- GetCurrentThreadId(),
- WINEVENT_INCONTEXT);
- assert(hEvent_hook);
-
- if (pIsWinEventHookInstalled)
+ hEvent_hook = pSetWinEventHook(EVENT_MIN, EVENT_MAX,
+ GetModuleHandleA(0), win_event_proc,
+ 0, GetCurrentThreadId(),
+ WINEVENT_INCONTEXT);
+ if (pIsWinEventHookInstalled && hEvent_hook)
{
UINT event;
for (event = EVENT_MIN; event <= EVENT_MAX; event++)
ok(pIsWinEventHookInstalled(event), "IsWinEventHookInstalled(%u) failed\n", event);
}
}
+ if (!hEvent_hook) win_skip( "no win event hook support\n" );
cbt_hook_thread_id = GetCurrentThreadId();
hCBT_hook = SetWindowsHookExA(WH_CBT, cbt_hook_proc, 0, GetCurrentThreadId());
- assert(hCBT_hook);
+ if (!hCBT_hook) win_skip( "cannot set global hook, will skip hook tests\n" );
test_winevents();
@@ -11361,7 +11458,7 @@ START_TEST(msg)
test_accelerators();
test_timers();
test_timers_no_wnd();
- test_set_hook();
+ if (hCBT_hook) test_set_hook();
test_DestroyWindow();
test_DispatchMessage();
test_SendMessageTimeout();
@@ -11370,7 +11467,7 @@ START_TEST(msg)
test_SetActiveWindow();
if (!pTrackMouseEvent)
- skip("TrackMouseEvent is not available\n");
+ win_skip("TrackMouseEvent is not available\n");
else
test_TrackMouseEvent();
@@ -11381,13 +11478,14 @@ START_TEST(msg)
test_dbcs_wm_char();
test_menu_messages();
test_paintingloop();
+ test_defwinproc();
/* keep it the last test, under Windows it tends to break the tests
* which rely on active/foreground windows being correct.
*/
test_SetForegroundWindow();
UnhookWindowsHookEx(hCBT_hook);
- if (pUnhookWinEvent)
+ if (pUnhookWinEvent && hEvent_hook)
{
ret = pUnhookWinEvent(hEvent_hook);
ok( ret, "UnhookWinEvent error %d\n", GetLastError());
@@ -11397,6 +11495,4 @@ START_TEST(msg)
GetLastError() == 0xdeadbeef, /* Win9x */
"unexpected error %d\n", GetLastError());
}
- else
- skip("UnhookWinEvent is not available\n");
}
diff --git a/rostests/winetests/user32/resource.c b/rostests/winetests/user32/resource.c
index b8e04932098..c64aff0a60e 100755
--- a/rostests/winetests/user32/resource.c
+++ b/rostests/winetests/user32/resource.c
@@ -188,29 +188,29 @@ static void test_accel1(void)
"still should be two entries in table %u/%u\n", r, n);
n=0;
- ok( ac[n].cmd == 1000, "cmd 0 not preserved\n");
- ok( ac[n].key == 'A', "key 0 not preserved\n");
- ok( ac[n].fVirt == (FVIRTKEY | FNOINVERT), "fVirt 0 not preserved\n");
+ ok( ac[n].cmd == 1000, "cmd 0 not preserved got %x\n", ac[n].cmd);
+ ok( ac[n].key == 'A', "key 0 not preserved got %x\n", ac[n].key);
+ ok( ac[n].fVirt == (FVIRTKEY | FNOINVERT), "fVirt 0 not preserved got %x\n", ac[n].fVirt);
if (++n == r) goto done;
- ok( ac[n].cmd == 0xffff, "cmd 1 not preserved\n");
- ok( ac[n].key == 0xffff, "key 1 not preserved\n");
- ok( ac[n].fVirt == 0x007f, "fVirt 1 not changed\n");
+ ok( ac[n].cmd == 0xffff, "cmd 1 not preserved got %x\n", ac[n].cmd);
+ ok( ac[n].key == 0xffff, "key 1 not preserved got %x\n", ac[n].key);
+ ok( ac[n].fVirt == 0x007f, "fVirt 1 wrong got %x\n", ac[n].fVirt);
if (++n == r) goto done;
- ok( ac[n].cmd == 0xfff0, "cmd 2 not preserved\n");
- ok( ac[n].key == 0x00ff, "key 2 not preserved\n");
- ok( ac[n].fVirt == 0x0070, "fVirt 2 not changed\n");
+ ok( ac[n].cmd == 0xfff0, "cmd 2 not preserved got %x\n", ac[n].cmd);
+ ok( (ac[n].key & 0xff) == 0xff, "key 2 not preserved got %x\n", ac[n].key);
+ ok( ac[n].fVirt == 0x0070, "fVirt 2 wrong got %x\n", ac[n].fVirt);
if (++n == r) goto done;
- ok( ac[n].cmd == 0xfff0, "cmd 3 not preserved\n");
- ok( ac[n].key == 0x00ff, "key 3 not preserved\n");
- ok( ac[n].fVirt == 0x0000, "fVirt 3 not changed\n");
+ ok( ac[n].cmd == 0xfff0, "cmd 3 not preserved got %x\n", ac[n].cmd);
+ ok( (ac[n].key & 0xff) == 0xff, "key 3 not preserved got %x\n", ac[n].key);
+ ok( ac[n].fVirt == 0x0000, "fVirt 3 wrong got %x\n", ac[n].fVirt);
if (++n == r) goto done;
- ok( ac[n].cmd == 0xfff0, "cmd 4 not preserved\n");
- ok( ac[n].key == 0xffff, "key 4 not preserved\n");
- ok( ac[n].fVirt == 0x0001, "fVirt 4 not changed\n");
+ ok( ac[n].cmd == 0xfff0, "cmd 4 not preserved got %x\n", ac[n].cmd);
+ ok( ac[n].key == 0xffff, "key 4 not preserved got %x\n", ac[n].key);
+ ok( ac[n].fVirt == 0x0001, "fVirt 4 wrong got %x\n", ac[n].fVirt);
done:
r = DestroyAcceleratorTable( hAccel );
ok( r, "destroy accelerator table\n");
diff --git a/rostests/winetests/user32/sysparams.c b/rostests/winetests/user32/sysparams.c
index d6135657c45..05f728d0b27 100755
--- a/rostests/winetests/user32/sysparams.c
+++ b/rostests/winetests/user32/sysparams.c
@@ -22,7 +22,9 @@
#include
#include
-#define SPI_SETWHEELSCROLLCHARS 109
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0600 /* For SPI_GETMOUSEHOVERWIDTH and more */
+#define _WIN32_IE 0x0700
#include "wine/test.h"
#include "windef.h"
@@ -174,8 +176,13 @@ 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 || displaychange_test_active) break;
- if( change_last_param == SPI_SETWORKAREA) {
+ if( wParam == SPI_SETWORKAREA ||
+ wParam == SPI_ICONVERTICALSPACING ||
+ displaychange_test_active)
+ break;
+ if( change_last_param == SPI_SETWORKAREA ||
+ change_last_param == SPI_ICONVERTICALSPACING)
+ {
change_last_param = wParam;
break;
}
@@ -457,6 +464,7 @@ static void test_SPI_SETBEEP( void ) /* 2 */
curr_val = TRUE;
rc=SystemParametersInfoA( SPI_SETBEEP, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETBEEP")) return;
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
test_change_message( SPI_SETBEEP, 0 );
test_reg_key( SPI_SETBEEP_REGKEY,
@@ -510,8 +518,7 @@ static const char *setmouse_valuenames[3] = {
/*
* Runs check for one setting of spi_setmouse.
*/
-static void run_spi_setmouse_test( int curr_val[], POINT *req_change, POINT *proj_change,
- int nchange )
+static BOOL run_spi_setmouse_test( int curr_val[], POINT *req_change, POINT *proj_change, int nchange )
{
BOOL rc;
INT mi[3];
@@ -540,6 +547,7 @@ static void run_spi_setmouse_test( int curr_val[], POINT *req_change, POINT *pro
/* call ascii version on even calls or if unicode is not available */
rc=SystemParametersInfoA( SPI_SETMOUSE, 0, curr_val, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
}
+ if (!test_error_msg(rc,"SPI_SETMOUSE")) return FALSE;
ok(rc!=0,"SystemParametersInfo: rc=%d err=%d\n",rc,GetLastError());
test_change_message( SPI_SETMOUSE, 0 );
@@ -581,6 +589,7 @@ static void run_spi_setmouse_test( int curr_val[], POINT *req_change, POINT *pro
ok( proj_change[i].y == mv.y, "Projected dy equals real dy. May fail under high load.\n" );
}
}
+ return TRUE;
}
static void test_SPI_SETMOUSE( void ) /* 4 */
@@ -610,7 +619,7 @@ static void test_SPI_SETMOUSE( void ) /* 4 */
if (!test_error_msg(rc,"SPI_{GET,SET}MOUSE"))
return;
- run_spi_setmouse_test( curr_val, req_change, proj_change1, nchange );
+ if (!run_spi_setmouse_test( curr_val, req_change, proj_change1, nchange )) return;
/* acceleration change */
curr_val[2] = 2;
@@ -647,7 +656,7 @@ static void test_SPI_SETMOUSE( void ) /* 4 */
ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%d\n",rc,GetLastError());
}
-static void test_setborder(UINT curr_val, int usesetborder, int dpi)
+static BOOL test_setborder(UINT curr_val, int usesetborder, int dpi)
{
BOOL rc;
UINT border, regval;
@@ -658,13 +667,15 @@ static void test_setborder(UINT curr_val, int usesetborder, int dpi)
rc=SystemParametersInfo( SPI_GETNONCLIENTMETRICS, 0, &ncm, 0);
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
if( usesetborder) {
- rc=SystemParametersInfoA( SPI_SETBORDER, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ rc=SystemParametersInfoA( SPI_SETBORDER, curr_val, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETBORDER")) return FALSE;
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
test_change_message( SPI_SETBORDER, 1 );
} else { /* set non client metrics */
ncm.iBorderWidth = curr_val;
rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, 0, &ncm, SPIF_UPDATEINIFILE|
SPIF_SENDCHANGE);
+ if (!test_error_msg(rc,"SPI_SETNONCLIENTMETRICS")) return FALSE;
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
test_change_message( SPI_SETNONCLIENTMETRICS, 1 );
}
@@ -690,6 +701,7 @@ static void test_setborder(UINT curr_val, int usesetborder, int dpi)
eq( frame, GetSystemMetrics( SM_CYFRAME ), "SM_CYFRAME", "%d" );
eq( frame, GetSystemMetrics( SM_CXSIZEFRAME ), "SM_CXSIZEFRAME", "%d" );
eq( frame, GetSystemMetrics( SM_CYSIZEFRAME ), "SM_CYSIZEFRAME", "%d" );
+ return TRUE;
}
static void test_SPI_SETBORDER( void ) /* 6 */
@@ -731,11 +743,11 @@ static void test_SPI_SETBORDER( void ) /* 6 */
* those platforms */
if( !iswin9x) {
/* win2k3 fails if you set the same border twice, or if size is 0 */
- test_setborder(2, 1, dpi);
+ if (!test_setborder(2, 1, dpi)) return;
test_setborder(1, 1, dpi);
test_setborder(3, 1, dpi);
}
- test_setborder(1, 0, dpi);
+ if (!test_setborder(1, 0, dpi)) return;
test_setborder(0, 0, dpi);
test_setborder(3, 0, dpi);
@@ -766,6 +778,7 @@ static void test_SPI_SETKEYBOARDSPEED( void ) /* 10 */
rc=SystemParametersInfoA( SPI_SETKEYBOARDSPEED, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETKEYBOARDSPEED")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETKEYBOARDSPEED, 0 );
sprintf( buf, "%d", vals[i] );
@@ -781,7 +794,7 @@ static void test_SPI_SETKEYBOARDSPEED( void ) /* 10 */
}
/* test_SPI_ICONHORIZONTALSPACING helper */
-static void dotest_spi_iconhorizontalspacing( INT curr_val)
+static BOOL dotest_spi_iconhorizontalspacing( INT curr_val)
{
BOOL rc;
INT spacing, regval;
@@ -789,6 +802,7 @@ static void dotest_spi_iconhorizontalspacing( INT curr_val)
rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, curr_val, 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
+ if (!test_error_msg(rc,"SPI_ICONHORIZONTALSPACING")) return FALSE;
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
test_change_message( SPI_ICONHORIZONTALSPACING, 0 );
if( curr_val < 32) curr_val = 32;
@@ -811,6 +825,7 @@ static void dotest_spi_iconhorizontalspacing( INT curr_val)
rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im, FALSE );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
eq( im.iHorzSpacing, curr_val, "SPI_GETICONMETRICS", "%d" );
+ return TRUE;
}
static void test_SPI_ICONHORIZONTALSPACING( void ) /* 13 */
@@ -825,7 +840,7 @@ static void test_SPI_ICONHORIZONTALSPACING( void ) /* 13 */
if (!test_error_msg(rc,"SPI_ICONHORIZONTALSPACING"))
return;
/* do not increase the value as it would upset the user's icon layout */
- dotest_spi_iconhorizontalspacing( old_spacing - 1);
+ if (!dotest_spi_iconhorizontalspacing( old_spacing - 1)) return;
dotest_spi_iconhorizontalspacing( 10); /* minimum is 32 */
/* restore */
rc=SystemParametersInfoA( SPI_ICONHORIZONTALSPACING, old_spacing, 0, SPIF_UPDATEINIFILE );
@@ -852,6 +867,7 @@ static void test_SPI_SETSCREENSAVETIMEOUT( void ) /* 14 */
rc=SystemParametersInfoA( SPI_SETSCREENSAVETIMEOUT, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETSCREENSAVETIMEOUT")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETSCREENSAVETIMEOUT, 0 );
sprintf( buf, "%d", vals[i] );
@@ -887,6 +903,7 @@ static void test_SPI_SETSCREENSAVEACTIVE( void ) /* 17 */
rc=SystemParametersInfoA( SPI_SETSCREENSAVEACTIVE, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETSCREENSAVEACTIVE")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETSCREENSAVEACTIVE, 0 );
test_reg_key( SPI_SETSCREENSAVEACTIVE_REGKEY,
@@ -927,6 +944,7 @@ static void test_SPI_SETKEYBOARDDELAY( void ) /* 23 */
rc=SystemParametersInfoA( SPI_SETKEYBOARDDELAY, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETKEYBOARDDELAY")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETKEYBOARDDELAY, 0 );
sprintf( buf, "%d", vals[i] );
@@ -944,7 +962,7 @@ static void test_SPI_SETKEYBOARDDELAY( void ) /* 23 */
/* test_SPI_ICONVERTICALSPACING helper */
-static void dotest_spi_iconverticalspacing( INT curr_val)
+static BOOL dotest_spi_iconverticalspacing( INT curr_val)
{
BOOL rc;
INT spacing, regval;
@@ -952,6 +970,7 @@ static void dotest_spi_iconverticalspacing( INT curr_val)
rc=SystemParametersInfoA( SPI_ICONVERTICALSPACING, curr_val, 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
+ if (!test_error_msg(rc,"SPI_ICONVERTICALSPACING")) return FALSE;
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
test_change_message( SPI_ICONVERTICALSPACING, 0 );
if( curr_val < 32) curr_val = 32;
@@ -974,6 +993,7 @@ static void dotest_spi_iconverticalspacing( INT curr_val)
rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im, FALSE );
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
eq( im.iVertSpacing, curr_val, "SPI_GETICONMETRICS", "%d" );
+ return TRUE;
}
static void test_SPI_ICONVERTICALSPACING( void ) /* 24 */
@@ -988,7 +1008,7 @@ static void test_SPI_ICONVERTICALSPACING( void ) /* 24 */
if (!test_error_msg(rc,"SPI_ICONVERTICALSPACING"))
return;
/* do not increase the value as it would upset the user's icon layout */
- dotest_spi_iconverticalspacing( old_spacing - 1);
+ if (!dotest_spi_iconverticalspacing( old_spacing - 1)) return;
/* same tests with a value less than the minimum 32 */
dotest_spi_iconverticalspacing( 10);
/* restore */
@@ -1026,6 +1046,7 @@ static void test_SPI_SETICONTITLEWRAP( void ) /* 26 */
rc=SystemParametersInfoA( SPI_SETICONTITLEWRAP, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETICONTITLEWRAP")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETICONTITLEWRAP, 1 );
regval = metricfromreg( SPI_SETICONTITLEWRAP_REGKEY2,
@@ -1069,6 +1090,7 @@ static void test_SPI_SETMENUDROPALIGNMENT( void ) /* 28 */
rc=SystemParametersInfoA( SPI_SETMENUDROPALIGNMENT, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETMENUDROPALIGNMENT")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETMENUDROPALIGNMENT, 0 );
test_reg_key_ex( SPI_SETMENUDROPALIGNMENT_REGKEY1,
@@ -1227,9 +1249,8 @@ static void test_SPI_SETMOUSEBUTTONSWAP( void ) /* 33 */
SetLastError(0xdeadbeef);
rc=SystemParametersInfoA( SPI_SETMOUSEBUTTONSWAP, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
- if (!test_error_msg(rc,"SPI_{GET,SET}MOUSEBUTTONSWAP"))
- break;
-
+ if (!test_error_msg(rc,"SPI_SETMOUSEBUTTONSWAP")) return;
+
test_change_message( SPI_SETMOUSEBUTTONSWAP, 0 );
test_reg_key( SPI_SETMOUSEBUTTONSWAP_REGKEY,
SPI_SETMOUSEBUTTONSWAP_VALNAME,
@@ -1284,6 +1305,7 @@ static void test_SPI_SETDRAGFULLWINDOWS( void ) /* 37 */
rc=SystemParametersInfoA( SPI_SETDRAGFULLWINDOWS, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETDRAGFULLWINDOWS")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETDRAGFULLWINDOWS, 0 );
test_reg_key( SPI_SETDRAGFULLWINDOWS_REGKEY,
@@ -1351,6 +1373,7 @@ static int get_tmheight( LOGFONTA *plf, int flag)
}
static void test_GetSystemMetrics( void);
+static UINT smcxsmsize = 999999999;
static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
{
@@ -1372,6 +1395,7 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
if (!test_error_msg(rc,"SPI_{GET,SET}NONCLIENTMETRICS"))
return;
Ncmstart = Ncmorig;
+ smcxsmsize = Ncmstart.iSmCaptionWidth;
/* SPI_GETNONCLIENTMETRICS returns some "cooked" values. For instance if
the caption font height is higher than the CaptionHeight field,
the latter is adjusted accordingly. To be able to restore these setting
@@ -1411,6 +1435,7 @@ static void test_SPI_SETNONCLIENTMETRICS( void ) /* 44 */
rc=SystemParametersInfoA( SPI_SETNONCLIENTMETRICS, 0, &Ncmnew, SPIF_UPDATEINIFILE|
SPIF_SENDCHANGE);
+ if (!test_error_msg(rc,"SPI_SETNONCLIENTMETRICS")) return;
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
test_change_message( SPI_SETNONCLIENTMETRICS, 1 );
/* get them back */
@@ -1507,6 +1532,7 @@ static void test_SPI_SETMINIMIZEDMETRICS( void ) /* 44 */
lpMm_cur.iArrange = 5;
rc=SystemParametersInfoA( SPI_SETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS),
&lpMm_cur, SPIF_UPDATEINIFILE );
+ if (!test_error_msg(rc,"SPI_SETMINIMIZEDMETRICS")) return;
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
/* read them back */
rc=SystemParametersInfoA( SPI_GETMINIMIZEDMETRICS, sizeof(MINIMIZEDMETRICS), &lpMm_new, FALSE );
@@ -1647,6 +1673,7 @@ static void test_SPI_SETICONMETRICS( void ) /* 46 */
strcpy( im_cur.lfFont.lfFaceName, "MS Sans Serif");
rc=SystemParametersInfoA( SPI_SETICONMETRICS, sizeof(ICONMETRICSA), &im_cur, SPIF_UPDATEINIFILE );
+ if (!test_error_msg(rc,"SPI_SETICONMETRICS")) return;
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
rc=SystemParametersInfoA( SPI_GETICONMETRICS, sizeof(ICONMETRICSA), &im_new, FALSE );
@@ -1734,6 +1761,7 @@ static void test_SPI_SETWORKAREA( void ) /* 47 */
curr_val.bottom = old_area.bottom-1;
rc=SystemParametersInfoA( SPI_SETWORKAREA, 0, &curr_val,
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 );
@@ -1775,6 +1803,7 @@ static void test_SPI_SETSHOWSOUNDS( void ) /* 57 */
rc=SystemParametersInfoA( SPI_SETSHOWSOUNDS, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETSHOWSOUNDS")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETSHOWSOUNDS, 1 );
test_reg_key( SPI_SETSHOWSOUNDS_REGKEY,
@@ -1811,6 +1840,7 @@ static void test_SPI_SETKEYBOARDPREF( void ) /* 69 */
rc=SystemParametersInfoA( SPI_SETKEYBOARDPREF, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETKEYBOARDPREF")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETKEYBOARDPREF, 1 );
test_reg_key_ex2( SPI_SETKEYBOARDPREF_REGKEY, SPI_SETKEYBOARDPREF_REGKEY_LEGACY,
@@ -1845,6 +1875,7 @@ static void test_SPI_SETSCREENREADER( void ) /* 71 */
rc=SystemParametersInfoA( SPI_SETSCREENREADER, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETSCREENREADER")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETSCREENREADER, 1 );
test_reg_key_ex2( SPI_SETSCREENREADER_REGKEY, SPI_SETSCREENREADER_REGKEY_LEGACY,
@@ -1880,6 +1911,7 @@ static void test_SPI_SETFONTSMOOTHING( void ) /* 75 */
rc=SystemParametersInfoA( SPI_SETFONTSMOOTHING, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETFONTSMOOTHING")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETFONTSMOOTHING, 0 );
test_reg_key( SPI_SETFONTSMOOTHING_REGKEY,
@@ -1914,6 +1946,7 @@ static void test_SPI_SETLOWPOWERACTIVE( void ) /* 85 */
rc=SystemParametersInfoA( SPI_SETLOWPOWERACTIVE, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETLOWPOWERACTIVE")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETLOWPOWERACTIVE, 1 );
test_reg_key( SPI_SETLOWPOWERACTIVE_REGKEY,
@@ -1951,6 +1984,7 @@ static void test_SPI_SETPOWEROFFACTIVE( void ) /* 86 */
rc=SystemParametersInfoA( SPI_SETPOWEROFFACTIVE, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETPOWEROFFACTIVE")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETPOWEROFFACTIVE, 1 );
test_reg_key( SPI_SETPOWEROFFACTIVE_REGKEY,
@@ -1988,6 +2022,7 @@ static void test_SPI_SETSNAPTODEFBUTTON( void ) /* 95 */
rc=SystemParametersInfoA( SPI_SETSNAPTODEFBUTTON, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETSNAPTODEFBUTTON")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETSNAPTODEFBUTTON, 0 );
test_reg_key( SPI_SETSNAPTODEFBUTTON_REGKEY,
@@ -2026,6 +2061,7 @@ static void test_SPI_SETMOUSEHOVERWIDTH( void ) /* 99 */
rc=SystemParametersInfoA( SPI_SETMOUSEHOVERWIDTH, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETMOUSEHOVERWIDTH")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETMOUSEHOVERWIDTH, 0 );
sprintf( buf, "%d", vals[i] );
@@ -2065,6 +2101,7 @@ static void test_SPI_SETMOUSEHOVERHEIGHT( void ) /* 101 */
rc=SystemParametersInfoA( SPI_SETMOUSEHOVERHEIGHT, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETMOUSEHOVERHEIGHT")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETMOUSEHOVERHEIGHT, 0 );
sprintf( buf, "%d", vals[i] );
@@ -2108,6 +2145,7 @@ static void test_SPI_SETMOUSEHOVERTIME( void ) /* 103 */
rc=SystemParametersInfoA( SPI_SETMOUSEHOVERTIME, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETMOUSEHOVERTIME")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETMOUSEHOVERTIME, 0 );
sprintf( buf, "%d", vals[i] );
@@ -2146,6 +2184,7 @@ static void test_SPI_SETWHEELSCROLLLINES( void ) /* 105 */
rc=SystemParametersInfoA( SPI_SETWHEELSCROLLLINES, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETWHEELSCROLLLINES")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETWHEELSCROLLLINES, 0 );
sprintf( buf, "%d", vals[i] );
@@ -2184,6 +2223,7 @@ static void test_SPI_SETMENUSHOWDELAY( void ) /* 107 */
rc=SystemParametersInfoA( SPI_SETMENUSHOWDELAY, vals[i], 0,
SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ if (!test_error_msg(rc,"SPI_SETMENUSHOWDELAY")) return;
ok(rc!=0,"%d: rc=%d err=%d\n",i,rc,GetLastError());
test_change_message( SPI_SETMENUSHOWDELAY, 0 );
sprintf( buf, "%d", vals[i] );
@@ -2255,6 +2295,7 @@ static void test_SPI_SETWALLPAPER( void ) /* 115 */
strcpy(newval, "");
rc=SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, newval, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
+ if (!test_error_msg(rc,"SPI_SETDESKWALLPAPER")) return;
ok(rc!=0,"SystemParametersInfoA: rc=%d err=%d\n",rc,GetLastError());
test_change_message(SPI_SETDESKWALLPAPER, 0);
@@ -2274,7 +2315,7 @@ static void test_WM_DISPLAYCHANGE(void)
if (!pChangeDisplaySettingsExA)
{
- skip("ChangeDisplaySettingsExA is not available\n");
+ win_skip("ChangeDisplaySettingsExA is not available\n");
return;
}
@@ -2303,13 +2344,16 @@ static void test_WM_DISPLAYCHANGE(void)
/* Wait quite long for the message, screen setting changes can take some time */
if(change_ret == DISP_CHANGE_SUCCESSFUL) {
wait_ret = WaitForSingleObject(displaychange_sem, 10000);
+ /* we may not get a notification if nothing changed */
+ if (wait_ret == WAIT_TIMEOUT && !last_set_bpp && start_bpp == test_bpps[i])
+ continue;
ok(wait_ret == WAIT_OBJECT_0, "Waiting for the WM_DISPLAYCHANGE message timed out\n");
}
displaychange_ok = FALSE;
if(change_ret != DISP_CHANGE_SUCCESSFUL) {
skip("Setting depth %d failed(ret = %d)\n", test_bpps[i], change_ret);
- ok(last_bpp == -1, "WM_DISPLAYCHANGE was sent with wParam %d despide mode change failure\n", last_bpp);
+ ok(last_bpp == -1, "WM_DISPLAYCHANGE was sent with wParam %d despite mode change failure\n", last_bpp);
continue;
}
@@ -2435,7 +2479,6 @@ static void get_text_metr_size( HDC hdc, LOGFONTA *plf, TEXTMETRICA * ptm, UINT
}
static int gsm_error_ctr;
-static UINT smcxsmsize = 999999999;
#define ok_gsm( i, e)\
{\
@@ -2695,9 +2738,9 @@ START_TEST(sysparams)
wc.lpfnWndProc = SysParamsTestWndProc;
wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
wc.hInstance = hInstance;
- wc.hIcon = LoadIconA( 0, (LPSTR)IDI_APPLICATION );
- wc.hCursor = LoadCursorA( 0, (LPSTR)IDC_ARROW );
- wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1 );
+ wc.hIcon = LoadIconA( 0, IDI_APPLICATION );
+ wc.hCursor = LoadCursorA( 0, IDC_ARROW );
+ wc.hbrBackground = (HBRUSH)( COLOR_WINDOW + 1 );
wc.lpszMenuName = 0;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
diff --git a/rostests/winetests/user32/text.c b/rostests/winetests/user32/text.c
index fc554ae3632..47f52743562 100755
--- a/rostests/winetests/user32/text.c
+++ b/rostests/winetests/user32/text.c
@@ -316,6 +316,23 @@ static void test_DrawTextCalcRect(void)
ok(textheight==0,"Got textheight from DrawTextExA\n");
ok(dtp.uiLengthDrawn==1337, "invalid dtp.uiLengthDrawn = %i\n",dtp.uiLengthDrawn);
+ /* Margin calculations */
+ dtp.cbSize = sizeof(dtp);
+ dtp.iLeftMargin = 0;
+ dtp.iRightMargin = 0;
+ SetRect( &rect, 0, 0, 0, 0);
+ DrawTextExA(hdc, text, -1, &rect, DT_CALCRECT, &dtp);
+ textlen = rect.right; /* Width without margin */
+ dtp.iLeftMargin = 8;
+ SetRect( &rect, 0, 0, 0, 0);
+ DrawTextExA(hdc, text, -1, &rect, DT_CALCRECT, &dtp);
+ ok(rect.right==dtp.iLeftMargin+textlen ,"Incorrect left margin calculated rc(%d,%d)\n", rect.left, rect.right);
+ dtp.iLeftMargin = 0;
+ dtp.iRightMargin = 8;
+ SetRect( &rect, 0, 0, 0, 0);
+ DrawTextExA(hdc, text, -1, &rect, DT_CALCRECT, &dtp);
+ ok(rect.right==dtp.iRightMargin+textlen ,"Incorrect right margin calculated rc(%d,%d)\n", rect.left, rect.right);
+
/* Wide char versions */
SetRect( &rect, 10,10, 100, 100);
SetLastError( 0);
diff --git a/rostests/winetests/user32/win.c b/rostests/winetests/user32/win.c
index 96a594bbbdf..33f140335fb 100644
--- a/rostests/winetests/user32/win.c
+++ b/rostests/winetests/user32/win.c
@@ -21,6 +21,7 @@
*/
/* To get ICON_SMALL2 with the MSVC headers */
+#define _WIN32_WINNT 0x0501
#include
#include
@@ -77,7 +78,7 @@ static void flush_events( BOOL remove_messages )
{
MSG msg;
int diff = 200;
- int min_timeout = 50;
+ int min_timeout = 100;
DWORD time = GetTickCount() + diff;
while (diff > 0)
@@ -86,7 +87,7 @@ static void flush_events( BOOL remove_messages )
if (remove_messages)
while (PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessage( &msg );
diff = time - GetTickCount();
- min_timeout = 10;
+ min_timeout = 50;
}
}
@@ -566,7 +567,7 @@ static LRESULT WINAPI main_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPAR
{
MINMAXINFO* minmax = (MINMAXINFO *)lparam;
- trace("hwnd %p, WM_GETMINMAXINFO, %08lx, %08lx\n", hwnd, wparam, lparam);
+ trace("WM_GETMINMAXINFO: hwnd %p, %08lx, %08lx\n", hwnd, wparam, lparam);
dump_minmax_info( minmax );
SetWindowLongPtrA(hwnd, GWLP_USERDATA, 0x20031021);
break;
@@ -575,8 +576,7 @@ static LRESULT WINAPI main_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPAR
{
BOOL is_win9x = GetWindowLongPtrW(hwnd, GWLP_WNDPROC) == 0;
WINDOWPOS *winpos = (WINDOWPOS *)lparam;
- trace("main: WM_WINDOWPOSCHANGING\n");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n",
+ trace("main: WM_WINDOWPOSCHANGING %p after %p, x %d, y %d, cx %d, cy %d flags %08x\n",
winpos->hwnd, winpos->hwndInsertAfter,
winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
if (!(winpos->flags & SWP_NOMOVE))
@@ -596,8 +596,7 @@ static LRESULT WINAPI main_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPAR
{
RECT rc1, rc2;
WINDOWPOS *winpos = (WINDOWPOS *)lparam;
- trace("main: WM_WINDOWPOSCHANGED\n");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n",
+ trace("main: WM_WINDOWPOSCHANGED %p after %p, x %d, y %d, cx %d, cy %d flags %08x\n",
winpos->hwnd, winpos->hwndInsertAfter,
winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
ok(winpos->x >= -32768 && winpos->x <= 32767, "bad winpos->x %d\n", winpos->x);
@@ -607,22 +606,21 @@ static LRESULT WINAPI main_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPAR
ok(winpos->cy >= 0 && winpos->cy <= 32767, "bad winpos->cy %d\n", winpos->cy);
GetWindowRect(hwnd, &rc1);
- trace("window: (%d,%d)-(%d,%d)\n", rc1.left, rc1.top, rc1.right, rc1.bottom);
SetRect(&rc2, winpos->x, winpos->y, winpos->x + winpos->cx, winpos->y + winpos->cy);
/* note: winpos coordinates are relative to parent */
MapWindowPoints(GetParent(hwnd), 0, (LPPOINT)&rc2, 2);
- trace("pos: (%d,%d)-(%d,%d)\n", rc2.left, rc2.top, rc2.right, rc2.bottom);
if (0)
{
/* Uncomment this once the test succeeds in all cases */
- ok(EqualRect(&rc1, &rc2), "rects do not match\n");
- }
+ ok(EqualRect(&rc1, &rc2), "rects do not match (%d,%d-%d,%d) / (%d,%d-%d,%d)\n",
+ rc1.left, rc1.top, rc1.right, rc1.bottom, rc2.left, rc2.top, rc2.right, rc2.bottom );
GetClientRect(hwnd, &rc2);
DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, (LPARAM)&rc1);
MapWindowPoints(0, hwnd, (LPPOINT)&rc1, 2);
ok(EqualRect(&rc1, &rc2), "rects do not match (%d,%d-%d,%d) / (%d,%d-%d,%d)\n",
rc1.left, rc1.top, rc1.right, rc1.bottom, rc2.left, rc2.top, rc2.right, rc2.bottom );
+ }
break;
}
case WM_NCCREATE:
@@ -695,7 +693,7 @@ static BOOL RegisterWindowClasses(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "MainWindowClass";
@@ -708,7 +706,7 @@ static BOOL RegisterWindowClasses(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "ToolWindowClass";
@@ -718,32 +716,34 @@ static BOOL RegisterWindowClasses(void)
return TRUE;
}
-static void verify_window_info(HWND hwnd, const WINDOWINFO *info)
+static void verify_window_info(const char *hook, HWND hwnd, const WINDOWINFO *info)
{
RECT rcWindow, rcClient;
DWORD status;
- ok(IsWindow(hwnd), "bad window handle\n");
+ ok(IsWindow(hwnd), "bad window handle %p in hook %s\n", hwnd, hook);
GetWindowRect(hwnd, &rcWindow);
- ok(EqualRect(&rcWindow, &info->rcWindow), "wrong rcWindow\n");
+ ok(EqualRect(&rcWindow, &info->rcWindow), "wrong rcWindow for %p in hook %s\n", hwnd, hook);
GetClientRect(hwnd, &rcClient);
/* translate to screen coordinates */
MapWindowPoints(hwnd, 0, (LPPOINT)&rcClient, 2);
- ok(EqualRect(&rcClient, &info->rcClient), "wrong rcClient\n");
+ ok(EqualRect(&rcClient, &info->rcClient), "wrong rcClient for %p in hook %s\n", hwnd, hook);
ok(info->dwStyle == (DWORD)GetWindowLongA(hwnd, GWL_STYLE),
- "wrong dwStyle: %08x != %08x\n", info->dwStyle, GetWindowLongA(hwnd, GWL_STYLE));
+ "wrong dwStyle: %08x != %08x for %p in hook %s\n",
+ info->dwStyle, GetWindowLongA(hwnd, GWL_STYLE), hwnd, hook);
/* Windows reports some undocumented exstyles in WINDOWINFO, but
* doesn't return them in GetWindowLong(hwnd, GWL_EXSTYLE).
*/
ok((info->dwExStyle & ~0xe0000800) == (DWORD)GetWindowLongA(hwnd, GWL_EXSTYLE),
- "wrong dwExStyle: %08x != %08x\n", info->dwExStyle, GetWindowLongA(hwnd, GWL_EXSTYLE));
+ "wrong dwExStyle: %08x != %08x for %p in hook %s\n",
+ info->dwExStyle, GetWindowLongA(hwnd, GWL_EXSTYLE), hwnd, hook);
status = (GetActiveWindow() == hwnd) ? WS_ACTIVECAPTION : 0;
if (GetForegroundWindow())
- ok(info->dwWindowStatus == status, "wrong dwWindowStatus: %04x != %04x active %p fg %p\n",
- info->dwWindowStatus, status, GetActiveWindow(), GetForegroundWindow());
+ ok(info->dwWindowStatus == status, "wrong dwWindowStatus: %04x != %04x active %p fg %p in hook %s\n",
+ info->dwWindowStatus, status, GetActiveWindow(), GetForegroundWindow(), hook);
/* win2k and XP return broken border info in GetWindowInfo most of
* the time, so there is no point in testing it.
@@ -756,10 +756,11 @@ static void verify_window_info(HWND hwnd, const WINDOWINFO *info)
ok(info->cyWindowBorders == border,
"wrong cyWindowBorders %d != %d\n", info->cyWindowBorders, border);
#endif
- ok(info->atomWindowType == GetClassLongA(hwnd, GCW_ATOM), "wrong atomWindowType\n");
+ ok(info->atomWindowType == GetClassLongA(hwnd, GCW_ATOM), "wrong atomWindowType for %p in hook %s\n",
+ hwnd, hook);
ok(info->wCreatorVersion == 0x0400 /* NT4, Win2000, XP, Win2003 */ ||
info->wCreatorVersion == 0x0500 /* Vista */,
- "wrong wCreatorVersion %04x\n", info->wCreatorVersion);
+ "wrong wCreatorVersion %04x for %p in hook %s\n", info->wCreatorVersion, hwnd, hook);
}
static void FixedAdjustWindowRectEx(RECT* rc, LONG style, BOOL menu, LONG exstyle)
@@ -790,9 +791,7 @@ static void test_nonclient_area(HWND hwnd)
menu = !(style & WS_CHILD) && GetMenu(hwnd) != 0;
GetWindowRect(hwnd, &rc_window);
- trace("window: (%d,%d)-(%d,%d)\n", rc_window.left, rc_window.top, rc_window.right, rc_window.bottom);
GetClientRect(hwnd, &rc_client);
- trace("client: (%d,%d)-(%d,%d)\n", rc_client.left, rc_client.top, rc_client.right, rc_client.bottom);
/* avoid some cases when things go wrong */
if (IsRectEmpty(&rc_window) || IsRectEmpty(&rc_client) ||
@@ -802,15 +801,19 @@ static void test_nonclient_area(HWND hwnd)
MapWindowPoints(hwnd, 0, (LPPOINT)&rc, 2);
FixedAdjustWindowRectEx(&rc, style, menu, exstyle);
- trace("calc window: (%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom);
- ok(EqualRect(&rc, &rc_window), "window rect does not match: style:exstyle=0x%08x:0x%08x, menu=%d\n", style, exstyle, menu);
+ ok(EqualRect(&rc, &rc_window),
+ "window rect does not match: style:exstyle=0x%08x:0x%08x, menu=%d, win=(%d,%d)-(%d,%d), calc=(%d,%d)-(%d,%d)\n",
+ style, exstyle, menu, rc_window.left, rc_window.top, rc_window.right, rc_window.bottom,
+ rc.left, rc.top, rc.right, rc.bottom);
CopyRect(&rc, &rc_window);
DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, (LPARAM)&rc);
MapWindowPoints(0, hwnd, (LPPOINT)&rc, 2);
- trace("calc client: (%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom);
- ok(EqualRect(&rc, &rc_client), "client rect does not match: style:exstyle=0x%08x:0x%08x, menu=%d\n", style, exstyle, menu);
+ ok(EqualRect(&rc, &rc_client),
+ "client rect does not match: style:exstyle=0x%08x:0x%08x, menu=%d client=(%d,%d)-(%d,%d), calc=(%d,%d)-(%d,%d)\n",
+ style, exstyle, menu, rc_client.left, rc_client.top, rc_client.right, rc_client.bottom,
+ rc.left, rc.top, rc.right, rc.bottom);
/* NULL rectangle shouldn't crash */
ret = DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, 0);
@@ -825,14 +828,14 @@ static void test_nonclient_area(HWND hwnd)
CopyRect(&rc_window, &rc_client);
MapWindowPoints(hwnd, 0, (LPPOINT)&rc_window, 2);
FixedAdjustWindowRectEx(&rc_window, style, menu, exstyle);
- trace("calc window: (%d,%d)-(%d,%d)\n",
- rc_window.left, rc_window.top, rc_window.right, rc_window.bottom);
CopyRect(&rc, &rc_window);
DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, (LPARAM)&rc);
MapWindowPoints(0, hwnd, (LPPOINT)&rc, 2);
- trace("calc client: (%d,%d)-(%d,%d)\n", rc.left, rc.top, rc.right, rc.bottom);
- ok(EqualRect(&rc, &rc_client), "synthetic rect does not match: style:exstyle=0x%08x:0x%08x, menu=%d\n", style, exstyle, menu);
+ ok(EqualRect(&rc, &rc_client),
+ "synthetic rect does not match: style:exstyle=0x%08x:0x%08x, menu=%d, client=(%d,%d)-(%d,%d), calc=(%d,%d)-(%d,%d)\n",
+ style, exstyle, menu, rc_client.left, rc_client.top, rc_client.right, rc_client.bottom,
+ rc.left, rc.top, rc.right, rc.bottom);
}
static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam)
@@ -849,13 +852,88 @@ static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam)
"HCBT_SYSCOMMAND",
"HCBT_SETFOCUS" };
const char *code_name = (nCode >= 0 && nCode <= HCBT_SETFOCUS) ? CBT_code_name[nCode] : "Unknown";
+ HWND hwnd = (HWND)wParam;
- trace("CBT: %d (%s), %08lx, %08lx\n", nCode, code_name, wParam, lParam);
-
- /* on HCBT_DESTROYWND window state is undefined */
- if (nCode != HCBT_DESTROYWND && IsWindow((HWND)wParam))
+ switch (nCode)
{
- if (pGetWindowInfo)
+ case HCBT_CREATEWND:
+ {
+ static const RECT rc_null;
+ RECT rc;
+ LONG style;
+ CBT_CREATEWNDA *createwnd = (CBT_CREATEWNDA *)lParam;
+ trace("HCBT_CREATEWND: hwnd %p, parent %p, style %08x\n",
+ hwnd, createwnd->lpcs->hwndParent, createwnd->lpcs->style);
+ ok(createwnd->hwndInsertAfter == HWND_TOP, "hwndInsertAfter should be always HWND_TOP\n");
+
+ if (pGetWindowInfo)
+ {
+ WINDOWINFO info;
+ info.cbSize = sizeof(WINDOWINFO);
+ ok(pGetWindowInfo(hwnd, &info), "GetWindowInfo should not fail\n");
+ verify_window_info(code_name, hwnd, &info);
+ }
+
+ /* WS_VISIBLE should be turned off yet */
+ style = createwnd->lpcs->style & ~WS_VISIBLE;
+ ok(style == GetWindowLongA(hwnd, GWL_STYLE),
+ "style of hwnd and style in the CREATESTRUCT do not match: %08x != %08x\n",
+ GetWindowLongA(hwnd, GWL_STYLE), style);
+
+ if (0)
+ {
+ /* Uncomment this once the test succeeds in all cases */
+ if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
+ {
+ ok(GetParent(hwnd) == hwndMessage,
+ "wrong result from GetParent %p: message window %p\n",
+ GetParent(hwnd), hwndMessage);
+ }
+ else
+ ok(!GetParent(hwnd), "GetParent should return 0 at this point\n");
+
+ ok(!GetWindow(hwnd, GW_OWNER), "GW_OWNER should be set to 0 at this point\n");
+ }
+ if (0)
+ {
+ /* while NT assigns GW_HWNDFIRST/LAST some values at this point,
+ * Win9x still has them set to 0.
+ */
+ ok(GetWindow(hwnd, GW_HWNDFIRST) != 0, "GW_HWNDFIRST should not be set to 0 at this point\n");
+ ok(GetWindow(hwnd, GW_HWNDLAST) != 0, "GW_HWNDLAST should not be set to 0 at this point\n");
+ }
+ ok(!GetWindow(hwnd, GW_HWNDPREV), "GW_HWNDPREV should be set to 0 at this point\n");
+ ok(!GetWindow(hwnd, GW_HWNDNEXT), "GW_HWNDNEXT should be set to 0 at this point\n");
+
+ if (0)
+ {
+ /* Uncomment this once the test succeeds in all cases */
+ if (pGetAncestor)
+ {
+ ok(pGetAncestor(hwnd, GA_PARENT) == hwndMessage, "GA_PARENT should be set to hwndMessage at this point\n");
+ ok(pGetAncestor(hwnd, GA_ROOT) == hwnd,
+ "GA_ROOT is set to %p, expected %p\n", pGetAncestor(hwnd, GA_ROOT), hwnd);
+
+ if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
+ ok(pGetAncestor(hwnd, GA_ROOTOWNER) == hwndMessage,
+ "GA_ROOTOWNER should be set to hwndMessage at this point\n");
+ else
+ ok(pGetAncestor(hwnd, GA_ROOTOWNER) == hwnd,
+ "GA_ROOTOWNER is set to %p, expected %p\n", pGetAncestor(hwnd, GA_ROOTOWNER), hwnd);
+ }
+
+ ok(GetWindowRect(hwnd, &rc), "GetWindowRect failed\n");
+ ok(EqualRect(&rc, &rc_null), "window rect should be set to 0 HCBT_CREATEWND\n");
+ ok(GetClientRect(hwnd, &rc), "GetClientRect failed\n");
+ ok(EqualRect(&rc, &rc_null), "client rect should be set to 0 on HCBT_CREATEWND\n");
+ }
+ break;
+ }
+ case HCBT_MOVESIZE:
+ case HCBT_MINMAX:
+ case HCBT_ACTIVATE:
+ case HCBT_SETFOCUS:
+ if (pGetWindowInfo && IsWindow(hwnd))
{
WINDOWINFO info;
@@ -864,78 +942,16 @@ static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam)
* WinXP do not check it at all.
*/
info.cbSize = sizeof(WINDOWINFO);
- ok(pGetWindowInfo((HWND)wParam, &info), "GetWindowInfo should not fail\n");
- verify_window_info((HWND)wParam, &info);
- }
- }
-
- switch (nCode)
- {
- case HCBT_CREATEWND:
- {
- static const RECT rc_null;
- RECT rc;
- LONG style;
- CBT_CREATEWNDA *createwnd = (CBT_CREATEWNDA *)lParam;
- trace("HCBT_CREATEWND: hwnd %p, parent %p, style %08x\n",
- (HWND)wParam, createwnd->lpcs->hwndParent, createwnd->lpcs->style);
- ok(createwnd->hwndInsertAfter == HWND_TOP, "hwndInsertAfter should be always HWND_TOP\n");
-
- /* WS_VISIBLE should be turned off yet */
- style = createwnd->lpcs->style & ~WS_VISIBLE;
- ok(style == GetWindowLongA((HWND)wParam, GWL_STYLE),
- "style of hwnd and style in the CREATESTRUCT do not match: %08x != %08x\n",
- GetWindowLongA((HWND)wParam, GWL_STYLE), style);
-
- if (0)
- {
- /* Uncomment this once the test succeeds in all cases */
- if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
- {
- ok(GetParent((HWND)wParam) == hwndMessage,
- "wrong result from GetParent %p: message window %p\n",
- GetParent((HWND)wParam), hwndMessage);
- }
- else
- ok(!GetParent((HWND)wParam), "GetParent should return 0 at this point\n");
-
- ok(!GetWindow((HWND)wParam, GW_OWNER), "GW_OWNER should be set to 0 at this point\n");
- }
- if (0)
- {
- /* while NT assigns GW_HWNDFIRST/LAST some values at this point,
- * Win9x still has them set to 0.
- */
- ok(GetWindow((HWND)wParam, GW_HWNDFIRST) != 0, "GW_HWNDFIRST should not be set to 0 at this point\n");
- ok(GetWindow((HWND)wParam, GW_HWNDLAST) != 0, "GW_HWNDLAST should not be set to 0 at this point\n");
- }
- ok(!GetWindow((HWND)wParam, GW_HWNDPREV), "GW_HWNDPREV should be set to 0 at this point\n");
- ok(!GetWindow((HWND)wParam, GW_HWNDNEXT), "GW_HWNDNEXT should be set to 0 at this point\n");
-
- if (0)
- {
- /* Uncomment this once the test succeeds in all cases */
- if (pGetAncestor)
- {
- ok(pGetAncestor((HWND)wParam, GA_PARENT) == hwndMessage, "GA_PARENT should be set to hwndMessage at this point\n");
- ok(pGetAncestor((HWND)wParam, GA_ROOT) == (HWND)wParam,
- "GA_ROOT is set to %p, expected %p\n", pGetAncestor((HWND)wParam, GA_ROOT), (HWND)wParam);
-
- if ((style & (WS_CHILD|WS_POPUP)) == WS_CHILD)
- ok(pGetAncestor((HWND)wParam, GA_ROOTOWNER) == hwndMessage,
- "GA_ROOTOWNER should be set to hwndMessage at this point\n");
- else
- ok(pGetAncestor((HWND)wParam, GA_ROOTOWNER) == (HWND)wParam,
- "GA_ROOTOWNER is set to %p, expected %p\n", pGetAncestor((HWND)wParam, GA_ROOTOWNER), (HWND)wParam);
- }
-
- ok(GetWindowRect((HWND)wParam, &rc), "GetWindowRect failed\n");
- ok(EqualRect(&rc, &rc_null), "window rect should be set to 0 HCBT_CREATEWND\n");
- ok(GetClientRect((HWND)wParam, &rc), "GetClientRect failed\n");
- ok(EqualRect(&rc, &rc_null), "client rect should be set to 0 on HCBT_CREATEWND\n");
- }
- break;
+ ok(pGetWindowInfo(hwnd, &info), "GetWindowInfo should not fail\n");
+ verify_window_info(code_name, hwnd, &info);
}
+ break;
+ /* on HCBT_DESTROYWND window state is undefined */
+ case HCBT_DESTROYWND:
+ trace( "HCBT_DESTROYWND: hwnd %p\n", hwnd );
+ break;
+ default:
+ break;
}
return CallNextHookEx(hhook, nCode, wParam, lParam);
@@ -970,6 +986,14 @@ static void test_shell_window(void)
DWORD pid;
HANDLE hProcess;
+ GetWindowThreadProcessId(shellWindow, &pid);
+ hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
+ if (!hProcess)
+ {
+ skip( "cannot get access to shell process\n" );
+ return;
+ }
+
SetLastError(0xdeadbeef);
ret = DestroyWindow(shellWindow);
error = GetLastError();
@@ -980,8 +1004,6 @@ static void test_shell_window(void)
"got %u after DestroyWindow(shellWindow)\n", error);
/* close old shell instance */
- GetWindowThreadProcessId(shellWindow, &pid);
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
ret = TerminateProcess(hProcess, 0);
ok(ret, "termination of previous shell process failed: GetLastError()=%d\n", GetLastError());
WaitForSingleObject(hProcess, INFINITE); /* wait for termination */
@@ -1071,10 +1093,11 @@ static void test_shell_window(void)
static char mdi_lParam_test_message[] = "just a test string";
-static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
+static void test_MDI_create(HWND parent, HWND mdi_client, INT_PTR first_id)
{
MDICREATESTRUCTA mdi_cs;
HWND mdi_child;
+ INT_PTR id;
static const WCHAR classW[] = {'M','D','I','_','c','h','i','l','d','_','C','l','a','s','s','_','1',0};
static const WCHAR titleW[] = {'M','D','I',' ','c','h','i','l','d',0};
BOOL isWin9x = FALSE;
@@ -1090,14 +1113,16 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
mdi_cs.lParam = (LPARAM)mdi_lParam_test_message;
mdi_child = (HWND)SendMessageA(mdi_client, WM_MDICREATE, 0, (LPARAM)&mdi_cs);
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
mdi_cs.style = 0x7fffffff; /* without WS_POPUP */
mdi_child = (HWND)SendMessageA(mdi_client, WM_MDICREATE, 0, (LPARAM)&mdi_cs);
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
@@ -1110,7 +1135,8 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
else
{
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
}
@@ -1131,7 +1157,8 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
}
else
{
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
}
@@ -1143,7 +1170,8 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
mdi_client, GetModuleHandle(0),
(LPARAM)mdi_lParam_test_message);
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
@@ -1154,7 +1182,8 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
mdi_client, GetModuleHandle(0),
(LPARAM)mdi_lParam_test_message);
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
@@ -1171,7 +1200,8 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
else
{
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
}
@@ -1193,7 +1223,8 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
}
else
{
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
}
@@ -1203,9 +1234,10 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
mdi_client, 0, GetModuleHandle(0),
- (LPVOID)mdi_lParam_test_message);
+ mdi_lParam_test_message);
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
@@ -1214,9 +1246,10 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
mdi_client, 0, GetModuleHandle(0),
- (LPVOID)mdi_lParam_test_message);
+ mdi_lParam_test_message);
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
@@ -1225,7 +1258,7 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
mdi_client, 0, GetModuleHandle(0),
- (LPVOID)mdi_lParam_test_message);
+ mdi_lParam_test_message);
if (GetWindowLongA(mdi_client, GWL_STYLE) & MDIS_ALLCHILDSTYLES)
{
ok(!mdi_child, "MDI child with WS_POPUP and with MDIS_ALLCHILDSTYLES should fail\n");
@@ -1233,7 +1266,8 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
else
{
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
}
@@ -1245,7 +1279,7 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
mdi_client, 0, GetModuleHandle(0),
- (LPVOID)mdi_lParam_test_message);
+ mdi_lParam_test_message);
if (!mdi_child)
{
if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
@@ -1255,7 +1289,8 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
}
else
{
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == first_id, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == first_id, "wrong child id %ld\n", id);
SendMessageA(mdi_client, WM_MDIDESTROY, (WPARAM)mdi_child, 0);
ok(!IsWindow(mdi_child), "WM_MDIDESTROY failed\n");
}
@@ -1268,7 +1303,7 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
parent, 0, GetModuleHandle(0),
- (LPVOID)mdi_lParam_test_message);
+ mdi_lParam_test_message);
ok(!mdi_child, "WS_EX_MDICHILD with a not MDIClient parent should fail\n");
}
@@ -1277,9 +1312,10 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
mdi_client, 0, GetModuleHandle(0),
- (LPVOID)mdi_lParam_test_message);
+ mdi_lParam_test_message);
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == 0, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == 0, "wrong child id %ld\n", id);
DestroyWindow(mdi_child);
mdi_child = CreateWindowExA(0, "MDI_child_Class_2", "MDI child",
@@ -1287,9 +1323,10 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
mdi_client, 0, GetModuleHandle(0),
- (LPVOID)mdi_lParam_test_message);
+ mdi_lParam_test_message);
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == 0, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == 0, "wrong child id %ld\n", id);
DestroyWindow(mdi_child);
/* maximized child */
@@ -1298,9 +1335,10 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
mdi_client, 0, GetModuleHandle(0),
- (LPVOID)mdi_lParam_test_message);
+ mdi_lParam_test_message);
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == 0, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == 0, "wrong child id %ld\n", id);
DestroyWindow(mdi_child);
trace("Creating maximized child with a caption\n");
@@ -1309,9 +1347,10 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
mdi_client, 0, GetModuleHandle(0),
- (LPVOID)mdi_lParam_test_message);
+ mdi_lParam_test_message);
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == 0, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == 0, "wrong child id %ld\n", id);
DestroyWindow(mdi_child);
trace("Creating maximized child with a caption and a thick frame\n");
@@ -1320,9 +1359,10 @@ static void test_MDI_create(HWND parent, HWND mdi_client, INT first_id)
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
mdi_client, 0, GetModuleHandle(0),
- (LPVOID)mdi_lParam_test_message);
+ mdi_lParam_test_message);
ok(mdi_child != 0, "MDI child creation failed\n");
- ok(GetWindowLongPtrA(mdi_child, GWLP_ID) == 0, "wrong child id %d\n", GetWindowLongPtrA(mdi_child, GWLP_ID));
+ id = GetWindowLongPtrA(mdi_child, GWLP_ID);
+ ok(id == 0, "wrong child id %ld\n", id);
DestroyWindow(mdi_child);
}
@@ -1360,7 +1400,7 @@ static LRESULT WINAPI mdi_child_wnd_proc_1(HWND hwnd, UINT msg, WPARAM wparam, L
case WM_CREATE:
{
CREATESTRUCTA *cs = (CREATESTRUCTA *)lparam;
- MDICREATESTRUCTA *mdi_cs = (MDICREATESTRUCTA *)cs->lpCreateParams;
+ MDICREATESTRUCTA *mdi_cs = cs->lpCreateParams;
ok(cs->dwExStyle & WS_EX_MDICHILD, "WS_EX_MDICHILD should be set\n");
ok(mdi_cs->lParam == (LPARAM)mdi_lParam_test_message, "wrong mdi_cs->lParam\n");
@@ -1475,8 +1515,8 @@ static LRESULT WINAPI mdi_child_wnd_proc_2(HWND hwnd, UINT msg, WPARAM wparam, L
{
CREATESTRUCTA *cs = (CREATESTRUCTA *)lparam;
- trace("%s\n", (msg == WM_NCCREATE) ? "WM_NCCREATE" : "WM_CREATE");
- trace("x %d, y %d, cx %d, cy %d\n", cs->x, cs->y, cs->cx, cs->cy);
+ trace("%s: x %d, y %d, cx %d, cy %d\n", (msg == WM_NCCREATE) ? "WM_NCCREATE" : "WM_CREATE",
+ cs->x, cs->y, cs->cx, cs->cy);
ok(!(cs->dwExStyle & WS_EX_MDICHILD), "WS_EX_MDICHILD should not be set\n");
ok(cs->lpCreateParams == mdi_lParam_test_message, "wrong cs->lpCreateParams\n");
@@ -1505,19 +1545,16 @@ static LRESULT WINAPI mdi_child_wnd_proc_2(HWND hwnd, UINT msg, WPARAM wparam, L
MINMAXINFO *minmax = (MINMAXINFO *)lparam;
LONG style, exstyle;
- trace("WM_GETMINMAXINFO\n");
-
style = GetWindowLongA(hwnd, GWL_STYLE);
exstyle = GetWindowLongA(hwnd, GWL_EXSTYLE);
GetClientRect(parent, &rc);
- trace("parent %p client size = (%d x %d)\n", parent, rc.right, rc.bottom);
+ trace("WM_GETMINMAXINFO: parent %p client size = (%d x %d)\n", parent, rc.right, rc.bottom);
GetClientRect(parent, &rc);
if ((style & WS_CAPTION) == WS_CAPTION)
style &= ~WS_BORDER; /* WS_CAPTION = WS_DLGFRAME | WS_BORDER */
AdjustWindowRectEx(&rc, style, 0, exstyle);
- trace("calculated max child window size = (%d x %d)\n", rc.right-rc.left, rc.bottom-rc.top);
dump_minmax_info( minmax );
ok(minmax->ptMaxSize.x == rc.right - rc.left, "default width of maximized child %d != %d\n",
@@ -1533,18 +1570,19 @@ static LRESULT WINAPI mdi_child_wnd_proc_2(HWND hwnd, UINT msg, WPARAM wparam, L
RECT rc1, rc2;
GetWindowRect(hwnd, &rc1);
- trace("window: (%d,%d)-(%d,%d)\n", rc1.left, rc1.top, rc1.right, rc1.bottom);
SetRect(&rc2, winpos->x, winpos->y, winpos->x + winpos->cx, winpos->y + winpos->cy);
/* note: winpos coordinates are relative to parent */
MapWindowPoints(GetParent(hwnd), 0, (LPPOINT)&rc2, 2);
- trace("pos: (%d,%d)-(%d,%d)\n", rc2.left, rc2.top, rc2.right, rc2.bottom);
- ok(EqualRect(&rc1, &rc2), "rects do not match\n");
-
+ ok(EqualRect(&rc1, &rc2), "rects do not match, window=(%d,%d)-(%d,%d) pos=(%d,%d)-(%d,%d)\n",
+ rc1.left, rc1.top, rc1.right, rc1.bottom,
+ rc2.left, rc2.top, rc2.right, rc2.bottom);
GetWindowRect(hwnd, &rc1);
GetClientRect(hwnd, &rc2);
DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, (LPARAM)&rc1);
MapWindowPoints(0, hwnd, (LPPOINT)&rc1, 2);
- ok(EqualRect(&rc1, &rc2), "rects do not match\n");
+ ok(EqualRect(&rc1, &rc2), "rects do not match, window=(%d,%d)-(%d,%d) client=(%d,%d)-(%d,%d)\n",
+ rc1.left, rc1.top, rc1.right, rc1.bottom,
+ rc2.left, rc2.top, rc2.right, rc2.bottom);
}
/* fall through */
case WM_WINDOWPOSCHANGING:
@@ -1552,20 +1590,18 @@ static LRESULT WINAPI mdi_child_wnd_proc_2(HWND hwnd, UINT msg, WPARAM wparam, L
WINDOWPOS *winpos = (WINDOWPOS *)lparam;
WINDOWPOS my_winpos = *winpos;
- trace("%s\n", (msg == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED");
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n",
+ trace("%s: %p after %p, x %d, y %d, cx %d, cy %d flags %08x\n",
+ (msg == WM_WINDOWPOSCHANGING) ? "WM_WINDOWPOSCHANGING" : "WM_WINDOWPOSCHANGED",
winpos->hwnd, winpos->hwndInsertAfter,
winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
DefWindowProcA(hwnd, msg, wparam, lparam);
- trace("%p after %p, x %d, y %d, cx %d, cy %d flags %08x\n",
+ ok(!memcmp(&my_winpos, winpos, sizeof(WINDOWPOS)),
+ "DefWindowProc should not change WINDOWPOS: %p after %p, x %d, y %d, cx %d, cy %d flags %08x\n",
winpos->hwnd, winpos->hwndInsertAfter,
winpos->x, winpos->y, winpos->cx, winpos->cy, winpos->flags);
- ok(!memcmp(&my_winpos, winpos, sizeof(WINDOWPOS)),
- "DefWindowProc should not change WINDOWPOS values\n");
-
return 1;
}
}
@@ -1595,7 +1631,7 @@ static LRESULT WINAPI mdi_main_wnd_procA(HWND hwnd, UINT msg, WPARAM wparam, LPA
/* tests depend on a not zero MDIClient size */
0, 0, rc.right, rc.bottom,
hwnd, 0, GetModuleHandle(0),
- (LPVOID)&client_cs);
+ &client_cs);
assert(mdi_client);
test_MDI_create(hwnd, mdi_client, client_cs.idFirstChild);
DestroyWindow(mdi_client);
@@ -1607,7 +1643,7 @@ static LRESULT WINAPI mdi_main_wnd_procA(HWND hwnd, UINT msg, WPARAM wparam, LPA
/* tests depend on a not zero MDIClient size */
0, 0, rc.right, rc.bottom,
hwnd, 0, GetModuleHandle(0),
- (LPVOID)&client_cs);
+ &client_cs);
assert(mdi_client);
test_MDI_create(hwnd, mdi_client, client_cs.idFirstChild);
DestroyWindow(mdi_client);
@@ -1673,7 +1709,7 @@ static BOOL mdi_RegisterWindowClasses(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "MDI_parent_Class";
@@ -1718,9 +1754,9 @@ static void test_icons(void)
{
WNDCLASSEXA cls;
HWND hwnd;
- HICON icon = LoadIconA(0, (LPSTR)IDI_APPLICATION);
- HICON icon2 = LoadIconA(0, (LPSTR)IDI_QUESTION);
- HICON small_icon = LoadImageA(0, (LPSTR)IDI_APPLICATION, IMAGE_ICON,
+ HICON icon = LoadIconA(0, IDI_APPLICATION);
+ HICON icon2 = LoadIconA(0, IDI_QUESTION);
+ HICON small_icon = LoadImageA(0, IDI_APPLICATION, IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_SHARED );
HICON res;
@@ -1730,9 +1766,9 @@ static void test_icons(void)
cls.cbClsExtra = 0;
cls.cbWndExtra = 0;
cls.hInstance = 0;
- cls.hIcon = LoadIconA(0, (LPSTR)IDI_HAND);
+ cls.hIcon = LoadIconA(0, IDI_HAND);
cls.hIconSm = small_icon;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "IconWindowClass";
@@ -1953,7 +1989,7 @@ static void test_SetMenu(HWND parent)
static void test_window_tree(HWND parent, const DWORD *style, const int *order, int total)
{
HWND child[5], hwnd;
- int i;
+ INT_PTR i;
assert(total <= 5);
@@ -1974,7 +2010,7 @@ static void test_window_tree(HWND parent, const DWORD *style, const int *order,
else
child[i] = CreateWindowExA(0, "static", "", style[i], 0,0,10,10,
parent, (HMENU)i, 0, NULL);
- trace("child[%d] = %p\n", i, child[i]);
+ trace("child[%ld] = %p\n", i, child[i]);
ok(child[i] != 0, "CreateWindowEx failed to create child window\n");
}
@@ -1985,8 +2021,8 @@ static void test_window_tree(HWND parent, const DWORD *style, const int *order,
for (i = 0; i < total; i++)
{
- trace("hwnd[%d] = %p\n", i, hwnd);
- ok(child[order[i]] == hwnd, "Z order of child #%d is wrong\n", i);
+ trace("hwnd[%ld] = %p\n", i, hwnd);
+ ok(child[order[i]] == hwnd, "Z order of child #%ld is wrong\n", i);
hwnd = GetWindow(hwnd, GW_HWNDNEXT);
}
@@ -2040,8 +2076,10 @@ static void check_z_order_debug(HWND hwnd, HWND next, HWND prev, HWND owner,
test = GetWindow(hwnd, GW_HWNDNEXT);
/* skip foreign windows */
- while (test && (GetWindowThreadProcessId(test, NULL) != our_pid ||
- (void *)(ULONG_PTR)(GetWindowLongPtr(test, GWLP_HINSTANCE)) != GetModuleHandle(0)))
+ while (test && test != next &&
+ (GetWindowThreadProcessId(test, NULL) != our_pid ||
+ UlongToHandle(GetWindowLongPtr(test, GWLP_HINSTANCE)) != GetModuleHandle(0) ||
+ GetWindow(test, GW_OWNER) == next))
{
/*trace("skipping next %p (%p)\n", test, UlongToHandle(GetWindowLongPtr(test, GWLP_HINSTANCE)));*/
test = GetWindow(test, GW_HWNDNEXT);
@@ -2050,8 +2088,10 @@ static void check_z_order_debug(HWND hwnd, HWND next, HWND prev, HWND owner,
test = GetWindow(hwnd, GW_HWNDPREV);
/* skip foreign windows */
- while (test && (GetWindowThreadProcessId(test, NULL) != our_pid ||
- (void *)(ULONG_PTR)(GetWindowLongPtr(test, GWLP_HINSTANCE)) != GetModuleHandle(0)))
+ while (test && test != prev &&
+ (GetWindowThreadProcessId(test, NULL) != our_pid ||
+ UlongToHandle(GetWindowLongPtr(test, GWLP_HINSTANCE)) != GetModuleHandle(0) ||
+ GetWindow(test, GW_OWNER) == hwnd))
{
/*trace("skipping prev %p (%p)\n", test, UlongToHandle(GetWindowLongPtr(test, GWLP_HINSTANCE)));*/
test = GetWindow(test, GW_HWNDPREV);
@@ -2358,7 +2398,11 @@ static void test_SetForegroundWindow(HWND hwnd)
check_wnd_state(0, 0, 0, 0);
ret = SetForegroundWindow(hwnd);
- ok(ret, "SetForegroundWindow returned FALSE instead of TRUE\n");
+ if (!ret)
+ {
+ skip( "SetForegroundWindow not working\n" );
+ return;
+ }
check_wnd_state(hwnd, hwnd, hwnd, 0);
SetLastError(0xdeadbeef);
@@ -2594,9 +2638,16 @@ static void test_keyboard_input(HWND hwnd)
flush_events( TRUE );
PostMessageA(hwnd, WM_KEYDOWN, 0, 0);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ do
+ {
+ ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
+ ok( ret, "no message available\n");
+ }
+ while (ret && msg.message >= 0xc000);
ok(msg.hwnd == hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
- ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
+ do
+ ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
+ while (ret && (msg.message == WM_TIMER || msg.message >= 0xc000));
ok( !ret, "message %04x available\n", msg.message);
ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus());
@@ -2610,7 +2661,12 @@ static void test_keyboard_input(HWND hwnd)
ok(GetFocus() == hwnd, "wrong focus window %p\n", GetFocus());
keybd_event(VK_SPACE, 0, 0, 0);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
+ if (!ret)
+ {
+ skip( "keybd_event didn't work, skipping keyboard test\n" );
+ return;
+ }
ok(msg.hwnd == hwnd && msg.message == WM_KEYDOWN, "hwnd %p message %04x\n", msg.hwnd, msg.message);
ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
ok( !ret, "message %04x available\n", msg.message);
@@ -2643,6 +2699,24 @@ static void test_keyboard_input(HWND hwnd)
ok( !ret, "message %04x available\n", msg.message);
}
+static BOOL wait_for_message( MSG *msg )
+{
+ BOOL ret;
+
+ for (;;)
+ {
+ ret = PeekMessageA(msg, 0, 0, 0, PM_REMOVE);
+ if (ret)
+ {
+ if (msg->message == WM_PAINT) DispatchMessage(msg);
+ else if (msg->message < 0xc000) break; /* skip registered messages */
+ }
+ else if (MsgWaitForMultipleObjects( 0, NULL, FALSE, 100, QS_ALLINPUT ) == WAIT_TIMEOUT) break;
+ }
+ if (!ret) msg->message = 0;
+ return ret;
+}
+
static void test_mouse_input(HWND hwnd)
{
RECT rc;
@@ -2655,6 +2729,7 @@ static void test_mouse_input(HWND hwnd)
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
+ SetWindowPos( hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE );
GetWindowRect(hwnd, &rc);
trace("main window %p: (%d,%d)-(%d,%d)\n", hwnd, rc.left, rc.top, rc.right, rc.bottom);
@@ -2665,6 +2740,7 @@ static void test_mouse_input(HWND hwnd)
assert(popup != 0);
ShowWindow(popup, SW_SHOW);
UpdateWindow(popup);
+ SetWindowPos( popup, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE );
GetWindowRect(popup, &rc);
trace("popup window %p: (%d,%d)-(%d,%d)\n", popup, rc.left, rc.top, rc.right, rc.bottom);
@@ -2675,7 +2751,11 @@ static void test_mouse_input(HWND hwnd)
SetCursorPos(x, y);
GetCursorPos(&pt);
- ok(x == pt.x && y == pt.y, "wrong cursor pos (%d,%d), expected (%d,%d)\n", pt.x, pt.y, x, y);
+ if (x != pt.x || y != pt.y)
+ {
+ skip( "failed to set mouse position, skipping mouse input tests\n" );
+ goto done;
+ }
flush_events( TRUE );
@@ -2701,10 +2781,11 @@ static void test_mouse_input(HWND hwnd)
msg.message = 0;
mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);
+ flush_events( FALSE );
/* FIXME: SetCursorPos in Wine generates additional WM_MOUSEMOVE message */
while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE))
{
- if (msg.message >= 0xc000) continue; /* skip registered messages */
+ if (msg.message == WM_TIMER || msg.message >= 0xc000) continue; /* skip registered messages */
ok(msg.hwnd == popup && msg.message == WM_MOUSEMOVE,
"hwnd %p message %04x\n", msg.hwnd, msg.message);
}
@@ -2713,25 +2794,24 @@ static void test_mouse_input(HWND hwnd)
mouse_event(MOUSEEVENTF_MOVE, -1, -1, 0, 0);
ShowWindow(popup, SW_HIDE);
- do
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
- while (msg.message >= 0xc000); /* skip registered messages */
- ok(msg.hwnd == hwnd && msg.message == WM_MOUSEMOVE, "hwnd %p message %04x\n", msg.hwnd, msg.message);
+ ret = wait_for_message( &msg );
+ if (ret)
+ ok(msg.hwnd == hwnd && msg.message == WM_MOUSEMOVE, "hwnd %p message %04x\n", msg.hwnd, msg.message);
flush_events( TRUE );
mouse_event(MOUSEEVENTF_MOVE, 1, 1, 0, 0);
ShowWindow(hwnd, SW_HIDE);
- do
- ret = PeekMessageA(&msg, 0, 0, 0, PM_REMOVE);
- while (ret && msg.message >= 0xc000); /* skip registered messages */
+ ret = wait_for_message( &msg );
ok( !ret, "message %04x available\n", msg.message);
flush_events( TRUE );
/* test mouse clicks */
ShowWindow(hwnd, SW_SHOW);
+ SetWindowPos( hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE );
flush_events( TRUE );
ShowWindow(popup, SW_SHOW);
+ SetWindowPos( popup, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE );
flush_events( TRUE );
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
@@ -2739,31 +2819,33 @@ static void test_mouse_input(HWND hwnd)
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
- ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n");
- ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n",
- msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ if (!ret)
+ {
+ skip( "simulating mouse click doesn't work, skipping mouse button tests\n" );
+ goto done;
+ }
+ if (msg.message == WM_MOUSEMOVE) /* win2k has an extra WM_MOUSEMOVE here */
+ {
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
+ }
+
ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n",
msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n");
- ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
- msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n");
- ok(msg.hwnd == popup && msg.message == WM_LBUTTONDBLCLK, "hwnd %p/%p message %04x\n",
- msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONDBLCLK, "hwnd %p/%p message %04x\n",
msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, 0), "no message available\n");
- ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
- msg.hwnd, popup, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
msg.hwnd, popup, msg.message);
@@ -2778,10 +2860,12 @@ static void test_mouse_input(HWND hwnd)
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == hwnd && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n",
msg.hwnd, hwnd, msg.message);
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == hwnd && msg.message == WM_LBUTTONUP, "hwnd %p/%p message %04x\n",
msg.hwnd, hwnd, msg.message);
@@ -2789,9 +2873,8 @@ static void test_mouse_input(HWND hwnd)
SendMessageA(hwnd, WM_COMMAND, (WPARAM)popup, 0);
test_lbuttondown_flag = FALSE;
- do
- ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
- while (msg.message >= 0xc000); /* skip registered messages */
+ ret = wait_for_message( &msg );
+ ok(ret, "no message available\n");
ok(msg.hwnd == popup && msg.message == WM_LBUTTONDOWN, "hwnd %p/%p message %04x\n",
msg.hwnd, popup, msg.message);
ok(PeekMessageA(&msg, 0, 0, 0, PM_REMOVE), "no message available\n");
@@ -2829,6 +2912,7 @@ static void test_mouse_input(HWND hwnd)
TEST_MOUSEACTIVATE(HTCLOSE,MA_ACTIVATE);
TEST_MOUSEACTIVATE(HTHELP,MA_ACTIVATE);
+done:
/* Clear any messages left behind by WM_MOUSEACTIVATE tests */
flush_events( TRUE );
@@ -2874,13 +2958,13 @@ static void test_validatergn(HWND hwnd)
static void nccalchelper(HWND hwnd, INT x, INT y, RECT *prc)
{
+ RECT rc;
MoveWindow( hwnd, 0, 0, x, y, 0);
GetWindowRect( hwnd, prc);
- trace("window rect is %d,%d - %d,%d\n",
- prc->left,prc->top,prc->right,prc->bottom);
+ rc = *prc;
DefWindowProcA(hwnd, WM_NCCALCSIZE, 0, (LPARAM)prc);
- trace("nccalc rect is %d,%d - %d,%d\n",
- prc->left,prc->top,prc->right,prc->bottom);
+ trace("window rect is %d,%d - %d,%d, nccalc rect is %d,%d - %d,%d\n",
+ rc.left,rc.top,rc.right,rc.bottom, prc->left,prc->top,prc->right,prc->bottom);
}
static void test_nccalcscroll(HWND parent)
@@ -3019,7 +3103,7 @@ static LRESULT WINAPI StyleCheckProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM
case WM_NCCREATE:
case WM_CREATE:
lpcs = (LPCREATESTRUCT)lparam;
- lpss = (LPSTYLESTRUCT)lpcs->lpCreateParams;
+ lpss = lpcs->lpCreateParams;
if (lpss)
{
if ((lpcs->dwExStyle & WS_EX_DLGMODALFRAME) ||
@@ -3356,8 +3440,6 @@ static void test_scrolldc( HWND parent)
SetRectRgn( tmprgn, 25, 35, 35, 75);
CombineRgn(exprgn, exprgn, tmprgn, RGN_OR);
ok(EqualRgn(exprgn, hrgn), "wrong update region\n");
- colr = GetPixel( hdc, 80, 80);
- ok ( colr == 0, "pixel should be black, color is %08x\n", colr);
trace("update rect: %d,%d - %d,%d\n",
rcu.left, rcu.top, rcu.right, rcu.bottom);
if (winetest_debug > 0) dump_region(hrgn);
@@ -3393,10 +3475,12 @@ static void test_params(void)
0, 0, 100, 100,
NULL, (HMENU)1, NULL, 0);
- ok(!hwnd, "CreateWindow with invalid menu handle should fail\n");
- ok(GetLastError() == ERROR_INVALID_MENU_HANDLE || /* NT */
- GetLastError() == 0xdeadbeef, /* Win9x */
- "wrong last error value %d\n", GetLastError());
+ ok(!hwnd || broken(hwnd != NULL), /* w2k3 sp2 */
+ "CreateWindow with invalid menu handle should fail\n");
+ if (!hwnd)
+ ok(GetLastError() == ERROR_INVALID_MENU_HANDLE || /* NT */
+ GetLastError() == 0xdeadbeef, /* Win9x */
+ "wrong last error value %d\n", GetLastError());
}
static void test_AWRwindow(LPCSTR class, LONG style, LONG exStyle, BOOL menu)
@@ -3548,7 +3632,7 @@ static void test_redrawnow(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "RedrawWindowClass";
@@ -3565,7 +3649,8 @@ static void test_redrawnow(void)
ShowWindow(hwndMain, SW_SHOW);
ok( WMPAINT_count == 0, "Multiple unexpected WM_PAINT calls %d\n", WMPAINT_count);
RedrawWindow(hwndMain, NULL,NULL,RDW_UPDATENOW | RDW_ALLCHILDREN);
- ok( WMPAINT_count == 1, "Multiple unexpected WM_PAINT calls %d\n", WMPAINT_count);
+ ok( WMPAINT_count == 1 || broken(WMPAINT_count == 0), /* sometimes on win9x */
+ "Multiple unexpected WM_PAINT calls %d\n", WMPAINT_count);
redrawComplete = TRUE;
ok( WMPAINT_count < 10, "RedrawWindow (RDW_UPDATENOW) never completed (%d)\n", WMPAINT_count);
@@ -3595,18 +3680,19 @@ static LRESULT WINAPI parentdc_window_procA(HWND hwnd, UINT msg, WPARAM wparam,
switch (msg)
{
case WM_PAINT:
- trace("doing WM_PAINT on %p\n", hwnd);
GetClientRect(hwnd, &rc);
CopyRect(&t->client, &rc);
- trace("client rect (%d, %d)-(%d, %d)\n", rc.left, rc.top, rc.right, rc.bottom);
GetWindowRect(hwnd, &rc);
- trace("window rect (%d, %d)-(%d, %d)\n", rc.left, rc.top, rc.right, rc.bottom);
+ trace("WM_PAINT: hwnd %p, client rect (%d,%d)-(%d,%d), window rect (%d,%d)-(%d,%d)\n", hwnd,
+ t->client.left, t->client.top, t->client.right, t->client.bottom,
+ rc.left, rc.top, rc.right, rc.bottom);
BeginPaint(hwnd, &ps);
CopyRect(&t->paint, &ps.rcPaint);
GetClipBox(ps.hdc, &rc);
CopyRect(&t->clip, &rc);
- trace("clip rect (%d, %d)-(%d, %d)\n", rc.left, rc.top, rc.right, rc.bottom);
- trace("paint rect (%d, %d)-(%d, %d)\n", ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom);
+ trace("clip rect (%d,%d)-(%d,%d), paint rect (%d,%d)-(%d,%d)\n",
+ rc.left, rc.top, rc.right, rc.bottom,
+ ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom);
EndPaint(hwnd, &ps);
return 0;
}
@@ -3717,7 +3803,7 @@ static void test_csparentdc(void)
clsMain.cbWndExtra = 0;
clsMain.hInstance = GetModuleHandleA(0);
clsMain.hIcon = 0;
- clsMain.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ clsMain.hCursor = LoadCursorA(0, IDC_ARROW);
clsMain.hbrBackground = GetStockObject(WHITE_BRUSH);
clsMain.lpszMenuName = NULL;
clsMain.lpszClassName = "ParentDcMainWindowClass";
@@ -3733,7 +3819,7 @@ static void test_csparentdc(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "ParentDcWindowClass";
@@ -3757,6 +3843,7 @@ static void test_csparentdc(void)
ShowWindow(hwndMain, SW_SHOW);
ShowWindow(hwnd1, SW_SHOW);
ShowWindow(hwnd2, SW_SHOW);
+ SetWindowPos(hwndMain, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE);
flush_events( TRUE );
zero_parentdc_test(&test_answer);
@@ -4024,10 +4111,10 @@ static void test_CreateWindow(void)
ok(GetMenu(window) == (HMENU)menu, "GetMenu error %d\n", GetLastError())
#define expect_style(window, style)\
- ok(GetWindowLong(window, GWL_STYLE) == (style), "expected style %x != %x\n", (LONG)(style), GetWindowLong(window, GWL_STYLE))
+ ok((ULONG)GetWindowLong(window, GWL_STYLE) == (style), "expected style %x != %x\n", (LONG)(style), GetWindowLong(window, GWL_STYLE))
#define expect_ex_style(window, ex_style)\
- ok(GetWindowLong(window, GWL_EXSTYLE) == (ex_style), "expected ex_style %x != %x\n", (LONG)(ex_style), GetWindowLong(window, GWL_EXSTYLE))
+ ok((ULONG)GetWindowLong(window, GWL_EXSTYLE) == (ex_style), "expected ex_style %x != %x\n", (LONG)(ex_style), GetWindowLong(window, GWL_EXSTYLE))
#define expect_gle_broken_9x(gle)\
ok(GetLastError() == gle ||\
@@ -4230,7 +4317,7 @@ static void test_CreateWindow(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandle(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "MinMax_WndClass";
@@ -4641,7 +4728,7 @@ static void test_GetUpdateRect(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = classNameA;
@@ -4761,7 +4848,7 @@ static void test_GetWindowModuleFileName(void)
if (!pGetWindowModuleFileNameA)
{
- skip("GetWindowModuleFileNameA is not available\n");
+ win_skip("GetWindowModuleFileNameA is not available\n");
return;
}
@@ -4779,11 +4866,14 @@ static void test_GetWindowModuleFileName(void)
buf2[0] = 0;
SetLastError(0xdeadbeef);
ret2 = pGetWindowModuleFileNameA(hwnd, buf2, sizeof(buf2));
- ok(ret2, "GetWindowModuleFileNameA error %u\n", GetLastError());
-
- ok(ret1 == ret2 || broken(ret2 == ret1 + 1), /* win98 */ "%u != %u\n", ret1, ret2);
- ok(!strcmp(buf1, buf2), "%s != %s\n", buf1, buf2);
+ ok(ret2 || broken(!ret2), /* nt4 sp 3 */
+ "GetWindowModuleFileNameA error %u\n", GetLastError());
+ if (ret2)
+ {
+ ok(ret1 == ret2 || broken(ret2 == ret1 + 1), /* win98 */ "%u != %u\n", ret1, ret2);
+ ok(!strcmp(buf1, buf2), "%s != %s\n", buf1, buf2);
+ }
hinst = GetModuleHandle(0);
SetLastError(0xdeadbeef);
@@ -4803,7 +4893,7 @@ static void test_GetWindowModuleFileName(void)
SetLastError(0xdeadbeef);
ret2 = pGetWindowModuleFileNameA(hwnd, buf2, ret1 - 2);
- ok(ret2 == ret1 - 2 || broken(ret2 == ret1 - 3), /* win98 */
+ ok(ret2 == ret1 - 2 || broken(ret2 == ret1 - 3) /* win98 */ || broken(!ret2), /* nt4 sp3 */
"expected %u, got %u\n", ret1 - 2, ret2);
ok(GetLastError() == 0xdeadbeef /* XP */ ||
GetLastError() == ERROR_INSUFFICIENT_BUFFER, /* win2k3, vista */
@@ -4827,7 +4917,7 @@ static void test_GetWindowModuleFileName(void)
"expected ERROR_INVALID_WINDOW_HANDLE, got %u\n", GetLastError());
hwnd = FindWindow("Shell_TrayWnd", NULL);
- ok(IsWindow(hwnd), "got invalid tray window %p\n", hwnd);
+ ok(IsWindow(hwnd) || broken(!hwnd), "got invalid tray window %p\n", hwnd);
SetLastError(0xdeadbeef);
ret1 = pGetWindowModuleFileNameA(hwnd, buf1, sizeof(buf1));
ok(!ret1 || broken(ret1), /* win98 */ "expected 0, got %u\n", ret1);
@@ -4873,8 +4963,8 @@ static void test_hwnd_message(void)
ok(parent != desktop, "GetAncestor(GA_PARENT) should not return desktop for message windows\n");
root = pGetAncestor(hwnd, GA_ROOT);
ok(root == hwnd, "GetAncestor(GA_ROOT) should return hwnd for message windows\n");
- ok( !pGetAncestor(parent, GA_PARENT), "parent shouldn't have parent %p\n",
- pGetAncestor(parent, GA_PARENT) );
+ ok( !pGetAncestor(parent, GA_PARENT) || broken(pGetAncestor(parent, GA_PARENT) != 0), /* win2k */
+ "parent shouldn't have parent %p\n", pGetAncestor(parent, GA_PARENT) );
trace("parent %p root %p desktop %p\n", parent, root, desktop);
if (!GetClassNameA( parent, buffer, sizeof(buffer) )) buffer[0] = 0;
ok( !lstrcmpi( buffer, "Message" ), "wrong parent class '%s'\n", buffer );
@@ -4939,7 +5029,7 @@ static void test_layered_window(void)
ok( ret, "SetLayeredWindowAttributes should succeed on layered window\n" );
ret = pGetLayeredWindowAttributes( hwnd, &key, &alpha, &flags );
ok( ret, "GetLayeredWindowAttributes should succeed on layered window\n" );
- ok( key == 0x123456, "wrong color key %x\n", key );
+ ok( key == 0x123456 || key == 0, "wrong color key %x\n", key );
ok( alpha == 44, "wrong alpha %u\n", alpha );
ok( flags == LWA_ALPHA, "wrong flags %x\n", flags );
@@ -4968,24 +5058,24 @@ static void test_layered_window(void)
ok( alpha == 22 || alpha == 33, "wrong alpha %u\n", alpha );
ok( flags == LWA_COLORKEY, "wrong flags %x\n", flags );
- /* color key always changed */
+ /* color key may or may not be changed without LWA_COLORKEY */
ret = pSetLayeredWindowAttributes( hwnd, 0x999999, 44, 0 );
ok( ret, "SetLayeredWindowAttributes should succeed on layered window\n" );
alpha = 0;
ret = pGetLayeredWindowAttributes( hwnd, &key, &alpha, &flags );
ok( ret, "GetLayeredWindowAttributes should succeed on layered window\n" );
- ok( key == 0x999999, "wrong color key %x\n", key );
+ ok( key == 0x888888 || key == 0x999999, "wrong color key %x\n", key );
ok( alpha == 22 || alpha == 44, "wrong alpha %u\n", alpha );
ok( flags == 0, "wrong flags %x\n", flags );
- /* default alpha is 0 */
+ /* default alpha and color key is 0 */
SetWindowLong( hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) & ~WS_EX_LAYERED );
SetWindowLong( hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED );
ret = pSetLayeredWindowAttributes( hwnd, 0x222222, 55, 0 );
ok( ret, "SetLayeredWindowAttributes should succeed on layered window\n" );
ret = pGetLayeredWindowAttributes( hwnd, &key, &alpha, &flags );
ok( ret, "GetLayeredWindowAttributes should succeed on layered window\n" );
- ok( key == 0x222222, "wrong color key %x\n", key );
+ ok( key == 0 || key == 0x222222, "wrong color key %x\n", key );
ok( alpha == 0 || alpha == 55, "wrong alpha %u\n", alpha );
ok( flags == 0, "wrong flags %x\n", flags );
@@ -5064,7 +5154,7 @@ static void test_fullscreen(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandle(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "fullscreen_class";
@@ -5141,16 +5231,11 @@ static void test_fullscreen(void)
/* Windows makes a maximized window slightly larger (to hide the borders?) */
fixup = min(abs(rc.left), abs(rc.top));
InflateRect(&rc, -fixup, -fixup);
- /* FIXME: this doesn't work correctly in Wine for child windows yet */
- if (style & WS_CHILD)
- todo_wine
ok(rc.left >= mi.rcWork.left && rc.top <= mi.rcWork.top &&
rc.right <= mi.rcWork.right && rc.bottom <= mi.rcWork.bottom,
- "%#x/%#x: window rect %d,%d-%d,%d\n", ex_style, style, rc.left, rc.top, rc.right, rc.bottom);
- else
- ok(rc.left >= mi.rcWork.left && rc.top <= mi.rcWork.top &&
- rc.right <= mi.rcWork.right && rc.bottom <= mi.rcWork.bottom,
- "%#x/%#x: window rect %d,%d-%d,%d\n", ex_style, style, rc.left, rc.top, rc.right, rc.bottom);
+ "%#x/%#x: window rect %d,%d-%d,%d must be in %d,%d-%d,%d\n",
+ ex_style, style, rc.left, rc.top, rc.right, rc.bottom,
+ mi.rcWork.left, mi.rcWork.top, mi.rcWork.right, mi.rcWork.bottom);
DestroyWindow(hwnd);
style = t_style[i] | WS_MAXIMIZE | WS_MAXIMIZEBOX;
@@ -5179,18 +5264,15 @@ static void test_fullscreen(void)
}
static BOOL test_thick_child_got_minmax;
-
-static int getExpectedThickChildInc(void)
-{
- const int outer = 2;
- int resizeBorder = GetSystemMetrics(SM_CXFRAME) - GetSystemMetrics(SM_CXDLGFRAME);
- return (outer + resizeBorder);
-}
+static const char * test_thick_child_name;
+static LONG test_thick_child_style;
+static LONG test_thick_child_exStyle;
static LRESULT WINAPI test_thick_child_size_winproc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
MINMAXINFO* minmax;
- int expectedMinTrack;
+ int expectedMinTrackX;
+ int expectedMinTrackY;
int actualMinTrackX;
int actualMinTrackY;
int expectedMaxTrackX;
@@ -5205,6 +5287,7 @@ static LRESULT WINAPI test_thick_child_size_winproc(HWND hwnd, UINT msg, WPARAM
int expectedPosY;
int actualPosX;
int actualPosY;
+ LONG adjustedStyle;
RECT rect;
switch (msg)
{
@@ -5216,40 +5299,59 @@ static LRESULT WINAPI test_thick_child_size_winproc(HWND hwnd, UINT msg, WPARAM
test_thick_child_got_minmax = TRUE;
- expectedMinTrack = 2* getExpectedThickChildInc();
+
+ adjustedStyle = test_thick_child_style;
+ if ((adjustedStyle & WS_CAPTION) == WS_CAPTION)
+ adjustedStyle &= ~WS_BORDER; /* WS_CAPTION = WS_DLGFRAME | WS_BORDER */
+ GetClientRect(GetParent(hwnd), &rect);
+ AdjustWindowRectEx(&rect, adjustedStyle, FALSE, test_thick_child_exStyle);
+
+ if (test_thick_child_style & (WS_DLGFRAME | WS_BORDER))
+ {
+ expectedMinTrackX = GetSystemMetrics(SM_CXMINTRACK);
+ expectedMinTrackY = GetSystemMetrics(SM_CYMINTRACK);
+ }
+ else
+ {
+ expectedMinTrackX = -2 * rect.left;
+ expectedMinTrackY = -2 * rect.top;
+ }
actualMinTrackX = minmax->ptMinTrackSize.x;
actualMinTrackY = minmax->ptMinTrackSize.y;
- todo_wine
- ok(actualMinTrackX == expectedMinTrack && actualMinTrackY == expectedMinTrack,
- "expected minTrack %dx%d, actual minTrack %dx%d\n",
- expectedMinTrack, expectedMinTrack, actualMinTrackX, actualMinTrackY);
+
+ ok(actualMinTrackX == expectedMinTrackX && actualMinTrackY == expectedMinTrackY,
+ "expected minTrack %dx%d, actual minTrack %dx%d for %s\n",
+ expectedMinTrackX, expectedMinTrackY, actualMinTrackX, actualMinTrackY,
+ test_thick_child_name);
actualMaxTrackX = minmax->ptMaxTrackSize.x;
actualMaxTrackY = minmax->ptMaxTrackSize.y;
expectedMaxTrackX = GetSystemMetrics(SM_CXMAXTRACK);
expectedMaxTrackY = GetSystemMetrics(SM_CYMAXTRACK);
ok(actualMaxTrackX == expectedMaxTrackX && actualMaxTrackY == expectedMaxTrackY,
- "expected maxTrack %dx%d, actual maxTrack %dx%d\n",
- expectedMaxTrackX, expectedMaxTrackY, actualMaxTrackX, actualMaxTrackY);
+ "expected maxTrack %dx%d, actual maxTrack %dx%d for %s\n",
+ expectedMaxTrackX, expectedMaxTrackY, actualMaxTrackX, actualMaxTrackY,
+ test_thick_child_name);
- GetClientRect(GetParent(hwnd), &rect);
- AdjustWindowRectEx(&rect, WS_CHILD | WS_VISIBLE | WS_THICKFRAME, FALSE, 0);
expectedMaxSizeX = rect.right - rect.left;
expectedMaxSizeY = rect.bottom - rect.top;
actualMaxSizeX = minmax->ptMaxSize.x;
actualMaxSizeY = minmax->ptMaxSize.y;
- ok(actualMaxSizeX == expectedMaxSizeX && actualMaxSizeY == expectedMaxSizeY,
- "expected maxTrack %dx%d, actual maxTrack %dx%d\n",
- expectedMaxSizeX, expectedMaxSizeY, actualMaxSizeX, actualMaxSizeY);
- expectedPosX = - getExpectedThickChildInc();
- expectedPosY = expectedPosX;
+ ok(actualMaxSizeX == expectedMaxSizeX && actualMaxSizeY == expectedMaxSizeY,
+ "expected maxSize %dx%d, actual maxSize %dx%d for %s\n",
+ expectedMaxSizeX, expectedMaxSizeY, actualMaxSizeX, actualMaxSizeY,
+ test_thick_child_name);
+
+
+ expectedPosX = rect.left;
+ expectedPosY = rect.top;
actualPosX = minmax->ptMaxPosition.x;
actualPosY = minmax->ptMaxPosition.y;
- todo_wine
- ok(actualPosX == expectedPosX && actualPosY == expectedPosY,
- "expected maxPosition (%d/%d), actual maxPosition (%d/%d)\n",
- expectedPosX, expectedPosY, actualPosX, actualPosY);
+ ok(actualPosX == expectedPosX && actualPosY == expectedPosY,
+ "expected maxPosition (%d/%d), actual maxPosition (%d/%d) for %s\n",
+ expectedPosX, expectedPosY, actualPosX, actualPosY, test_thick_child_name);
+
break;
}
}
@@ -5257,19 +5359,76 @@ static LRESULT WINAPI test_thick_child_size_winproc(HWND hwnd, UINT msg, WPARAM
return DefWindowProcA(hwnd, msg, wparam, lparam);
}
+#define NUMBER_OF_THICK_CHILD_TESTS 16
static void test_thick_child_size(HWND parentWindow)
{
BOOL success;
RECT childRect;
+ RECT adjustedParentRect;
HWND childWindow;
LONG childWidth;
LONG childHeight;
+ LONG expectedWidth;
+ LONG expectedHeight;
WNDCLASSA cls;
LPCTSTR className = "THICK_CHILD_CLASS";
- LONG style = WS_CHILD | WS_VISIBLE | WS_THICKFRAME;
- LONG exStyle = 0;
- int expectedSize = 2*getExpectedThickChildInc();
+ int i;
+ LONG adjustedStyle;
+ static const LONG styles[NUMBER_OF_THICK_CHILD_TESTS] = {
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER,
+ WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER,
+ };
+ static const LONG exStyles[NUMBER_OF_THICK_CHILD_TESTS] = {
+ 0,
+ 0,
+ 0,
+ 0,
+ WS_EX_DLGMODALFRAME,
+ WS_EX_DLGMODALFRAME,
+ WS_EX_DLGMODALFRAME,
+ WS_EX_DLGMODALFRAME,
+ WS_EX_STATICEDGE,
+ WS_EX_STATICEDGE,
+ WS_EX_STATICEDGE,
+ WS_EX_STATICEDGE,
+ WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME,
+ WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME,
+ WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME,
+ WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME,
+ };
+ static const char *styleName[NUMBER_OF_THICK_CHILD_TESTS] = {
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME, exstyle= WS_EX_DLGMODALFRAME",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME exstyle= WS_EX_DLGMODALFRAME",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER exstyle= WS_EX_DLGMODALFRAME",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER exstyle= WS_EX_DLGMODALFRAME",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME exstyle= WS_EX_STATICEDGE",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME exstyle= WS_EX_STATICEDGE",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER exstyle= WS_EX_STATICEDGE",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER exstyle= WS_EX_STATICEDGE",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME, exstyle= WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME exstyle= WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_DLGFRAME | WS_BORDER exstyle= WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME",
+ "style=WS_CHILD | WS_VISIBLE | WS_THICKFRAME | WS_BORDER exstyle= WS_EX_STATICEDGE | WS_EX_DLGMODALFRAME",
+ };
cls.style = 0;
cls.lpfnWndProc = test_thick_child_size_winproc;
@@ -5277,39 +5436,98 @@ static void test_thick_child_size(HWND parentWindow)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = className;
SetLastError(0xdeadbeef);
ok(RegisterClassA(&cls),"RegisterClassA failed, error: %u\n", GetLastError());
- test_thick_child_got_minmax = FALSE;
+ for(i = 0; i < NUMBER_OF_THICK_CHILD_TESTS; i++)
+ {
+ test_thick_child_name = styleName[i];
+ test_thick_child_style = styles[i];
+ test_thick_child_exStyle = exStyles[i];
+ test_thick_child_got_minmax = FALSE;
- SetLastError(0xdeadbeef);
- childWindow = CreateWindowEx( exStyle, className, "", style, 0, 0, 0, 0, parentWindow, 0, GetModuleHandleA(0), NULL );
- ok(childWindow != NULL, "Failed to create child window, error: %u\n", GetLastError());
+ SetLastError(0xdeadbeef);
+ childWindow = CreateWindowEx( exStyles[i], className, "", styles[i], 0, 0, 0, 0, parentWindow, 0, GetModuleHandleA(0), NULL );
+ ok(childWindow != NULL, "Failed to create child window, error: %u\n", GetLastError());
- ok(test_thick_child_got_minmax, "Got no WM_GETMINMAXINFO\n");
+ ok(test_thick_child_got_minmax, "Got no WM_GETMINMAXINFO\n");
- SetLastError(0xdeadbeef);
- success = GetWindowRect(childWindow, &childRect);
- ok(success,"GetWindowRect call failed, error: %u\n", GetLastError());
- childWidth = childRect.right - childRect.left;
- childHeight = childRect.bottom - childRect.top;
+ SetLastError(0xdeadbeef);
+ success = GetWindowRect(childWindow, &childRect);
+ ok(success,"GetWindowRect call failed, error: %u\n", GetLastError());
+ childWidth = childRect.right - childRect.left;
+ childHeight = childRect.bottom - childRect.top;
- todo_wine
- ok( (childWidth == expectedSize) && (childHeight == expectedSize),
- "size of window with style WS_CHILD | WS_VISIBLE | WS_THICKFRAME is wrong: expected size %dx%d != actual size %dx%d\n",
- expectedSize, expectedSize, childWidth, childHeight);
+ adjustedStyle = styles[i];
+ if ((adjustedStyle & WS_CAPTION) == WS_CAPTION)
+ adjustedStyle &= ~WS_BORDER; /* WS_CAPTION = WS_DLGFRAME | WS_BORDER */
+ GetClientRect(GetParent(childWindow), &adjustedParentRect);
+ AdjustWindowRectEx(&adjustedParentRect, adjustedStyle, FALSE, test_thick_child_exStyle);
- SetLastError(0xdeadbeef);
- success = DestroyWindow(childWindow);
- ok(success,"DestroyWindow call failed, error: %u\n", GetLastError());
+ if (test_thick_child_style & (WS_DLGFRAME | WS_BORDER))
+ {
+ expectedWidth = GetSystemMetrics(SM_CXMINTRACK);
+ expectedHeight = GetSystemMetrics(SM_CYMINTRACK);
+ }
+ else
+ {
+ expectedWidth = -2 * adjustedParentRect.left;
+ expectedHeight = -2 * adjustedParentRect.top;
+ }
+
+ ok((childWidth == expectedWidth) && (childHeight == expectedHeight),
+ "size of window (%s) is wrong: expected size %dx%d != actual size %dx%d\n",
+ test_thick_child_name, expectedWidth, expectedHeight, childWidth, childHeight);
+
+ SetLastError(0xdeadbeef);
+ success = DestroyWindow(childWindow);
+ ok(success,"DestroyWindow call failed, error: %u\n", GetLastError());
+ }
ok(UnregisterClass(className, GetModuleHandleA(0)),"UnregisterClass call failed\n");
}
+static void test_handles( HWND full_hwnd )
+{
+ HWND hwnd = full_hwnd;
+ BOOL ret;
+ RECT rect;
+
+ SetLastError( 0xdeadbeef );
+ ret = GetWindowRect( hwnd, &rect );
+ ok( ret, "GetWindowRect failed for %p err %u\n", hwnd, GetLastError() );
+
+#ifdef _WIN64
+ if ((ULONG_PTR)full_hwnd >> 32)
+ hwnd = (HWND)((ULONG_PTR)full_hwnd & ~0u);
+ else
+ hwnd = (HWND)((ULONG_PTR)full_hwnd | ((ULONG_PTR)~0u << 32));
+ SetLastError( 0xdeadbeef );
+ ret = GetWindowRect( hwnd, &rect );
+ ok( ret, "GetWindowRect failed for %p err %u\n", hwnd, GetLastError() );
+
+ hwnd = (HWND)(((ULONG_PTR)full_hwnd & ~0u) | ((ULONG_PTR)0x1234 << 32));
+ SetLastError( 0xdeadbeef );
+ ret = GetWindowRect( hwnd, &rect );
+ ok( ret, "GetWindowRect failed for %p err %u\n", hwnd, GetLastError() );
+
+ hwnd = (HWND)(((ULONG_PTR)full_hwnd & 0xffff) | ((ULONG_PTR)0x9876 << 16));
+ SetLastError( 0xdeadbeef );
+ ret = GetWindowRect( hwnd, &rect );
+ ok( !ret, "GetWindowRect succeeded for %p\n", hwnd );
+ ok( GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "wrong error %u\n", GetLastError() );
+
+ hwnd = (HWND)(((ULONG_PTR)full_hwnd & 0xffff) | ((ULONG_PTR)0x12345678 << 16));
+ SetLastError( 0xdeadbeef );
+ ret = GetWindowRect( hwnd, &rect );
+ ok( !ret, "GetWindowRect succeeded for %p\n", hwnd );
+ ok( GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "wrong error %u\n", GetLastError() );
+#endif
+}
START_TEST(win)
{
@@ -5325,7 +5543,7 @@ START_TEST(win)
if (!RegisterWindowClasses()) assert(0);
hhook = SetWindowsHookExA(WH_CBT, cbt_hook_proc, 0, GetCurrentThreadId());
- assert(hhook);
+ if (!hhook) win_skip( "Cannot set CBT hook, skipping some tests\n" );
hwndMain = CreateWindowExA(/*WS_EX_TOOLWINDOW*/ 0, "MainWindowClass", "Main window",
WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX |
@@ -5389,7 +5607,11 @@ START_TEST(win)
test_SetForegroundWindow(hwndMain);
test_shell_window();
+ test_handles( hwndMain );
/* add the tests above this line */
- UnhookWindowsHookEx(hhook);
+ if (hhook) UnhookWindowsHookEx(hhook);
+
+ DestroyWindow(hwndMain2);
+ DestroyWindow(hwndMain);
}
diff --git a/rostests/winetests/user32/winstation.c b/rostests/winetests/user32/winstation.c
index efc122a32dc..596e9ffd8d6 100755
--- a/rostests/winetests/user32/winstation.c
+++ b/rostests/winetests/user32/winstation.c
@@ -53,7 +53,7 @@ static void register_class(void)
cls.cbWndExtra = 0;
cls.hInstance = GetModuleHandleA(0);
cls.hIcon = 0;
- cls.hCursor = LoadCursorA(0, (LPSTR)IDC_ARROW);
+ cls.hCursor = LoadCursorA(0, IDC_ARROW);
cls.hbrBackground = GetStockObject(WHITE_BRUSH);
cls.lpszMenuName = NULL;
cls.lpszClassName = "WinStationClass";
diff --git a/rostests/winetests/user32/wsprintf.c b/rostests/winetests/user32/wsprintf.c
index c0ca1c6703a..bca16bd9f86 100755
--- a/rostests/winetests/user32/wsprintf.c
+++ b/rostests/winetests/user32/wsprintf.c
@@ -45,7 +45,7 @@ static void wsprintfWTest(void)
rc=wsprintfW(buf, fmt, -1);
if (rc==0 && GetLastError()==ERROR_CALL_NOT_IMPLEMENTED)
{
- skip("wsprintfW is not implemented\n");
+ win_skip("wsprintfW is not implemented\n");
return;
}
ok(rc == 10, "wsPrintfW length failure: rc=%d error=%d\n",rc,GetLastError());
@@ -59,12 +59,12 @@ static void wsprintfWTest(void)
static void CharUpperTest(void)
{
- int i,out,failed;
+ INT_PTR i,out,failed;
failed = 0;
for (i=0;i<256;i++)
{
- out = (int) CharUpper((LPTSTR)i);
+ out = (INT_PTR)CharUpper((LPTSTR)i);
/* printf("%0x ",out); */
if ((out >> 16) != 0)
{
@@ -72,17 +72,17 @@ static void CharUpperTest(void)
break;
}
}
- ok(!failed,"CharUpper failed - 16bit input (0x%0x) returned 32bit result (0x%0x)\n",i,out);
+ ok(!failed,"CharUpper failed - 16bit input (0x%0lx) returned 32bit result (0x%0lx)\n",i,out);
}
static void CharLowerTest(void)
{
- int i,out,failed;
+ INT_PTR i,out,failed;
failed = 0;
for (i=0;i<256;i++)
{
- out = (int) CharLower((LPTSTR)i);
+ out = (INT_PTR)CharLower((LPTSTR)i);
/* printf("%0x ",out); */
if ((out >> 16) != 0)
{
@@ -90,7 +90,7 @@ static void CharLowerTest(void)
break;
}
}
- ok(!failed,"CharLower failed - 16bit input (0x%0x) returned 32bit result (0x%0x)\n",i,out);
+ ok(!failed,"CharLower failed - 16bit input (0x%0lx) returned 32bit result (0x%0lx)\n",i,out);
}
diff --git a/rostests/winetests/usp10/usp10.c b/rostests/winetests/usp10/usp10.c
index c63c6c8a70c..1dba6829ac7 100644
--- a/rostests/winetests/usp10/usp10.c
+++ b/rostests/winetests/usp10/usp10.c
@@ -1382,6 +1382,87 @@ static void test_ScriptGetProperties(void)
ok(hr == S_OK, "ScriptGetProperties failed: 0x%08x\n", hr);
}
+static void test_ScriptBreak(void)
+{
+ static const WCHAR test[] = {' ','\r','\n',0};
+ SCRIPT_ITEM items[4];
+ SCRIPT_LOGATTR la;
+ HRESULT hr;
+
+ hr = ScriptItemize(test, 3, 4, NULL, NULL, items, NULL);
+ ok(!hr, "ScriptItemize should return S_OK not %08x\n", hr);
+
+ memset(&la, 0, sizeof(la));
+ hr = ScriptBreak(test, 1, &items[0].a, &la);
+ ok(!hr, "ScriptBreak should return S_OK not %08x\n", hr);
+
+ ok(!la.fSoftBreak, "fSoftBreak set\n");
+ ok(la.fWhiteSpace, "fWhiteSpace not set\n");
+ ok(la.fCharStop, "fCharStop not set\n");
+ ok(!la.fWordStop, "fWordStop set\n");
+ ok(!la.fInvalid, "fInvalid set\n");
+ ok(!la.fReserved, "fReserved set\n");
+
+ memset(&la, 0, sizeof(la));
+ hr = ScriptBreak(test + 1, 1, &items[1].a, &la);
+ ok(!hr, "ScriptBreak should return S_OK not %08x\n", hr);
+
+ ok(!la.fSoftBreak, "fSoftBreak set\n");
+ ok(!la.fWhiteSpace, "fWhiteSpace set\n");
+ ok(la.fCharStop, "fCharStop not set\n");
+ ok(!la.fWordStop, "fWordStop set\n");
+ ok(!la.fInvalid, "fInvalid set\n");
+ ok(!la.fReserved, "fReserved set\n");
+
+ memset(&la, 0, sizeof(la));
+ hr = ScriptBreak(test + 2, 1, &items[2].a, &la);
+ ok(!hr, "ScriptBreak should return S_OK not %08x\n", hr);
+
+ ok(!la.fSoftBreak, "fSoftBreak set\n");
+ ok(!la.fWhiteSpace, "fWhiteSpace set\n");
+ ok(la.fCharStop, "fCharStop not set\n");
+ ok(!la.fWordStop, "fWordStop set\n");
+ ok(!la.fInvalid, "fInvalid set\n");
+ ok(!la.fReserved, "fReserved set\n");
+}
+
+static void test_newlines(void)
+{
+ static const WCHAR test1[] = {'t','e','x','t','\r','t','e','x','t',0};
+ static const WCHAR test2[] = {'t','e','x','t','\n','t','e','x','t',0};
+ static const WCHAR test3[] = {'t','e','x','t','\r','\n','t','e','x','t',0};
+ static const WCHAR test4[] = {'t','e','x','t','\n','\r','t','e','x','t',0};
+ static const WCHAR test5[] = {'1','2','3','4','\n','\r','1','2','3','4',0};
+ SCRIPT_ITEM items[5];
+ HRESULT hr;
+ int count;
+
+ count = 0;
+ hr = ScriptItemize(test1, lstrlenW(test1), 5, NULL, NULL, items, &count);
+ ok(hr == S_OK, "ScriptItemize failed: 0x%08x\n", hr);
+ ok(count == 3, "got %d expected 3\n", count);
+
+ count = 0;
+ hr = ScriptItemize(test2, lstrlenW(test2), 5, NULL, NULL, items, &count);
+ ok(hr == S_OK, "ScriptItemize failed: 0x%08x\n", hr);
+ ok(count == 3, "got %d expected 3\n", count);
+
+ count = 0;
+ hr = ScriptItemize(test3, lstrlenW(test3), 5, NULL, NULL, items, &count);
+ ok(hr == S_OK, "ScriptItemize failed: 0x%08x\n", hr);
+ ok(count == 4, "got %d expected 4\n", count);
+
+ count = 0;
+ hr = ScriptItemize(test4, lstrlenW(test4), 5, NULL, NULL, items, &count);
+ ok(hr == S_OK, "ScriptItemize failed: 0x%08x\n", hr);
+ ok(count == 4, "got %d expected 4\n", count);
+
+ count = 0;
+ hr = ScriptItemize(test5, lstrlenW(test5), 5, NULL, NULL, items, &count);
+ ok(hr == S_OK, "ScriptItemize failed: 0x%08x\n", hr);
+ ok(count == 4, "got %d expected 4\n", count);
+}
+
START_TEST(usp10)
{
HWND hwnd;
@@ -1426,6 +1507,8 @@ START_TEST(usp10)
test_ScriptLayout();
test_digit_substitution();
test_ScriptGetProperties();
+ test_ScriptBreak();
+ test_newlines();
ReleaseDC(hwnd, hdc);
DestroyWindow(hwnd);
diff --git a/rostests/winetests/uxtheme/system.c b/rostests/winetests/uxtheme/system.c
index ef9c08a2522..ad277a08192 100644
--- a/rostests/winetests/uxtheme/system.c
+++ b/rostests/winetests/uxtheme/system.c
@@ -85,10 +85,6 @@ static void test_IsThemed(void)
SetLastError(0xdeadbeef);
bThemeActive = pIsThemeActive();
trace("Theming is %s\n", (bThemeActive) ? "active" : "inactive");
- todo_wine
- ok( GetLastError() == ERROR_SUCCESS,
- "Expected ERROR_SUCCESS, got 0x%08x\n",
- GetLastError());
/* This test is not themed */
SetLastError(0xdeadbeef);
@@ -101,10 +97,9 @@ static void test_IsThemed(void)
/* Although Wine currently returns FALSE, the logic behind it is wrong. It is not a todo_wine though in the testing sense */
ok( bAppThemed == FALSE, "Expected FALSE as this test executable is not (yet) themed.\n");
- todo_wine
- ok( GetLastError() == ERROR_SUCCESS,
- "Expected ERROR_SUCCESS, got 0x%08x\n",
- GetLastError());
+ ok( GetLastError() == ERROR_SUCCESS,
+ "Expected ERROR_SUCCESS, got 0x%08x\n",
+ GetLastError());
SetLastError(0xdeadbeef);
bTPDefined = pIsThemePartDefined(NULL, 0 , 0);
@@ -260,7 +255,7 @@ static void test_OpenThemeData(void)
ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
"Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
GetLastError());
- trace("No active theme, skipping rest of OpenThemeData tests\n");
+ skip("No active theme, skipping rest of OpenThemeData tests\n");
return;
}
@@ -382,7 +377,7 @@ static void test_GetCurrentThemeName(void)
hRes = pGetCurrentThemeName(currentTheme, 2, NULL, 0, NULL, 0);
if (bThemeActive)
todo_wine
- ok( LOWORD(hRes) == ERROR_INSUFFICIENT_BUFFER, "Expected 0x8007007A, got 0x%08x\n", hRes);
+ ok(hRes == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), "Expected HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), got 0x%08x\n", hRes);
else
ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
ok( GetLastError() == 0xdeadbeef,
@@ -396,7 +391,7 @@ static void test_GetCurrentThemeName(void)
currentSize, sizeof(currentSize) / sizeof(WCHAR));
if (bThemeActive)
todo_wine
- ok( LOWORD(hRes) == ERROR_INSUFFICIENT_BUFFER, "Expected 0x8007007A, got 0x%08x\n", hRes);
+ ok(hRes == HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), "Expected HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), got 0x%08x\n", hRes);
else
ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
ok( GetLastError() == 0xdeadbeef,
diff --git a/rostests/winetests/version/info.c b/rostests/winetests/version/info.c
index a4f969ecb90..edf607c9120 100644
--- a/rostests/winetests/version/info.c
+++ b/rostests/winetests/version/info.c
@@ -383,7 +383,7 @@ static void test_32bit_win(void)
if (is_unicode_enabled)
{
- VS_VERSION_INFO_STRUCT32 *vvis = (VS_VERSION_INFO_STRUCT32 *)pVersionInfoW;
+ VS_VERSION_INFO_STRUCT32 *vvis = pVersionInfoW;
ok ( retvalW == ((vvis->wLength * 2) + 4) || retvalW == (vvis->wLength * 1.5),
"Structure is not of the correct size\n");
}
diff --git a/rostests/winetests/winhttp/notification.c b/rostests/winetests/winhttp/notification.c
index da605b024ad..de8508adc90 100644
--- a/rostests/winetests/winhttp/notification.c
+++ b/rostests/winetests/winhttp/notification.c
@@ -34,6 +34,9 @@ enum api
winhttp_open_request,
winhttp_send_request,
winhttp_receive_response,
+ winhttp_query_data,
+ winhttp_read_data,
+ winhttp_write_data,
winhttp_close_handle
};
@@ -42,6 +45,7 @@ struct notification
enum api function; /* api responsible for notification */
unsigned int status; /* status received */
int todo;
+ int ignore;
};
struct info
@@ -50,10 +54,13 @@ struct info
const struct notification *test;
unsigned int count;
unsigned int index;
+ HANDLE wait;
+ unsigned int line;
};
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 = info->index;
@@ -64,17 +71,24 @@ static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DW
}
ok(i < info->count, "unexpected notification 0x%08x\n", status);
if (i >= info->count) return;
- if (!info->test[i].todo)
+
+ status_ok = (info->test[i].status == status);
+ function_ok = (info->test[i].function == info->function);
+ if (!info->test[i].ignore && !info->test[i].todo)
{
- ok(info->test[i].status == status, "expected status 0x%08x got 0x%08x\n", info->test[i].status, status);
- ok(info->test[i].function == info->function, "expected function %u got %u\n", info->test[i].function, info->function);
+ ok(status_ok, "%u: expected status 0x%08x got 0x%08x\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);
}
- else todo_wine
+ else if (!info->test[i].ignore)
{
- ok(info->test[i].status == status, "expected status 0x%08x got 0x%08x\n", info->test[i].status, status);
- ok(info->test[i].function == info->function, "expected function %u got %u\n", info->test[i].function, info->function);
+ todo_wine ok(status_ok, "%u: expected status 0x%08x got 0x%08x\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);
+ }
}
- info->index++;
+ if (status_ok) info->index++;
+ if (status & WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS) SetEvent( info->wait );
}
static const struct notification cache_test[] =
@@ -96,6 +110,12 @@ static const struct notification cache_test[] =
{ winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 1 }
};
+static void setup_test( struct info *info, enum api function, unsigned int line )
+{
+ info->function = function;
+ info->line = line;
+}
+
static void test_connection_cache( void )
{
static const WCHAR codeweavers[] = {'w','w','w','.','c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0};
@@ -108,28 +128,29 @@ static void test_connection_cache( void )
info.test = cache_test;
info.count = sizeof(cache_test) / sizeof(cache_test[0]);
info.index = 0;
+ info.wait = NULL;
ses = WinHttpOpen( user_agent, 0, NULL, NULL, 0 );
ok(ses != NULL, "failed to open session %u\n", GetLastError());
- WinHttpSetStatusCallback( ses, check_notification, WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS | WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS, 0 );
+ WinHttpSetStatusCallback( ses, check_notification, WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS, 0 );
ret = WinHttpSetOption( ses, WINHTTP_OPTION_CONTEXT_VALUE, &context, sizeof(struct info *) );
ok(ret, "failed to set context value %u\n", GetLastError());
- info.function = winhttp_connect;
+ setup_test( &info, winhttp_connect, __LINE__ );
con = WinHttpConnect( ses, codeweavers, 0, 0 );
ok(con != NULL, "failed to open a connection %u\n", GetLastError());
- info.function = winhttp_open_request;
+ setup_test( &info, winhttp_open_request, __LINE__ );
req = WinHttpOpenRequest( con, NULL, NULL, NULL, NULL, NULL, 0 );
ok(req != NULL, "failed to open a request %u\n", GetLastError());
- info.function = winhttp_send_request;
+ setup_test( &info, winhttp_send_request, __LINE__ );
ret = WinHttpSendRequest( req, NULL, 0, NULL, 0, 0, 0 );
ok(ret, "failed to send request %u\n", GetLastError());
- info.function = winhttp_receive_response;
+ setup_test( &info, winhttp_receive_response, __LINE__ );
ret = WinHttpReceiveResponse( req, NULL );
ok(ret, "failed to receive response %u\n", GetLastError());
@@ -138,7 +159,7 @@ static void test_connection_cache( void )
ok(ret, "failed unexpectedly %u\n", GetLastError());
ok(status == 200, "request failed unexpectedly %u\n", status);
- info.function = winhttp_close_handle;
+ setup_test( &info, winhttp_close_handle, __LINE__ );
WinHttpCloseHandle( req );
WinHttpCloseHandle( con );
WinHttpCloseHandle( ses );
@@ -150,27 +171,27 @@ static void test_connection_cache( void )
ses = WinHttpOpen( user_agent, 0, NULL, NULL, 0 );
ok(ses != NULL, "failed to open session %u\n", GetLastError());
- WinHttpSetStatusCallback( ses, check_notification, WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS | WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS, 0 );
+ WinHttpSetStatusCallback( ses, check_notification, WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS, 0 );
ret = WinHttpSetOption( ses, WINHTTP_OPTION_CONTEXT_VALUE, &context, sizeof(struct info *) );
ok(ret, "failed to set context value %u\n", GetLastError());
- info.function = winhttp_connect;
+ setup_test( &info, winhttp_connect, __LINE__ );
con = WinHttpConnect( ses, codeweavers, 0, 0 );
ok(con != NULL, "failed to open a connection %u\n", GetLastError());
- info.function = winhttp_open_request;
+ setup_test( &info, winhttp_open_request, __LINE__ );
req = WinHttpOpenRequest( con, NULL, NULL, NULL, NULL, NULL, 0 );
ok(req != NULL, "failed to open a request %u\n", GetLastError());
ret = WinHttpSetOption( req, WINHTTP_OPTION_CONTEXT_VALUE, &context, sizeof(struct info *) );
ok(ret, "failed to set context value %u\n", GetLastError());
- info.function = winhttp_send_request;
+ setup_test( &info, winhttp_send_request, __LINE__ );
ret = WinHttpSendRequest( req, NULL, 0, NULL, 0, 0, 0 );
ok(ret, "failed to send request %u\n", GetLastError());
- info.function = winhttp_receive_response;
+ setup_test( &info, winhttp_receive_response, __LINE__ );
ret = WinHttpReceiveResponse( req, NULL );
ok(ret, "failed to receive response %u\n", GetLastError());
@@ -179,7 +200,7 @@ static void test_connection_cache( void )
ok(ret, "failed unexpectedly %u\n", GetLastError());
ok(status == 200, "request failed unexpectedly %u\n", status);
- info.function = winhttp_close_handle;
+ setup_test( &info, winhttp_close_handle, __LINE__ );
WinHttpCloseHandle( req );
WinHttpCloseHandle( con );
WinHttpCloseHandle( ses );
@@ -225,27 +246,28 @@ static void test_redirect( void )
info.test = redirect_test;
info.count = sizeof(redirect_test) / sizeof(redirect_test[0]);
info.index = 0;
+ info.wait = NULL;
ses = WinHttpOpen( user_agent, 0, NULL, NULL, 0 );
ok(ses != NULL, "failed to open session %u\n", GetLastError());
- WinHttpSetStatusCallback( ses, check_notification, WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS | WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS, 0 );
+ WinHttpSetStatusCallback( ses, check_notification, WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS, 0 );
ret = WinHttpSetOption( ses, WINHTTP_OPTION_CONTEXT_VALUE, &context, sizeof(struct info *) );
ok(ret, "failed to set context value %u\n", GetLastError());
- info.function = winhttp_connect;
+ setup_test( &info, winhttp_connect, __LINE__ );
con = WinHttpConnect( ses, codeweavers, 0, 0 );
ok(con != NULL, "failed to open a connection %u\n", GetLastError());
- info.function = winhttp_open_request;
+ setup_test( &info, winhttp_open_request, __LINE__ );
req = WinHttpOpenRequest( con, NULL, NULL, NULL, NULL, NULL, 0 );
ok(req != NULL, "failed to open a request %u\n", GetLastError());
- info.function = winhttp_send_request;
+ setup_test( &info, winhttp_send_request, __LINE__ );
ret = WinHttpSendRequest( req, NULL, 0, NULL, 0, 0, 0 );
- info.function = winhttp_receive_response;
+ setup_test( &info, winhttp_receive_response, __LINE__ );
ret = WinHttpReceiveResponse( req, NULL );
ok(ret, "failed to receive response %u\n", GetLastError());
@@ -254,14 +276,117 @@ static void test_redirect( void )
ok(ret, "failed unexpectedly %u\n", GetLastError());
ok(status == 200, "request failed unexpectedly %u\n", status);
- info.function = winhttp_close_handle;
+ setup_test( &info, winhttp_close_handle, __LINE__ );
WinHttpCloseHandle( req );
WinHttpCloseHandle( con );
WinHttpCloseHandle( ses );
}
+static const struct notification async_test[] =
+{
+ { winhttp_connect, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED, 0 },
+ { winhttp_open_request, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED, 0 },
+ { winhttp_send_request, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, 0 },
+ { winhttp_send_request, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, 0 },
+ { winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0 },
+ { winhttp_send_request, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0 },
+ { winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, 0 },
+ { winhttp_send_request, WINHTTP_CALLBACK_STATUS_REQUEST_SENT, 0 },
+ { winhttp_send_request, WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REDIRECT, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REQUEST_SENT, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0 },
+ { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE, 0 },
+ { winhttp_query_data, WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE, 0 },
+ { winhttp_read_data, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0, 1 },
+ { winhttp_read_data, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0, 1 },
+ { winhttp_read_data, WINHTTP_CALLBACK_STATUS_READ_COMPLETE, 0, 1 },
+ { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION, 0 },
+ { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, 0 },
+ { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 0 },
+ { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 1 },
+ { winhttp_close_handle, WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING, 1 }
+};
+
+static void test_async( void )
+{
+ static const WCHAR codeweavers[] = {'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0};
+
+ HANDLE ses, con, req;
+ DWORD size, status;
+ BOOL ret;
+ struct info info, *context = &info;
+ char buffer[1024];
+
+ info.test = async_test;
+ info.count = sizeof(async_test) / sizeof(async_test[0]);
+ info.index = 0;
+ info.wait = CreateEvent( NULL, FALSE, FALSE, NULL );
+
+ ses = WinHttpOpen( user_agent, 0, NULL, NULL, WINHTTP_FLAG_ASYNC );
+ ok(ses != NULL, "failed to open session %u\n", GetLastError());
+
+ WinHttpSetStatusCallback( ses, check_notification, WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS, 0 );
+
+ ret = WinHttpSetOption( ses, WINHTTP_OPTION_CONTEXT_VALUE, &context, sizeof(struct info *) );
+ ok(ret, "failed to set context value %u\n", GetLastError());
+
+ setup_test( &info, winhttp_connect, __LINE__ );
+ con = WinHttpConnect( ses, codeweavers, 0, 0 );
+ ok(con != NULL, "failed to open a connection %u\n", GetLastError());
+
+ setup_test( &info, winhttp_open_request, __LINE__ );
+ req = WinHttpOpenRequest( con, NULL, NULL, NULL, NULL, NULL, 0 );
+ ok(req != NULL, "failed to open a request %u\n", GetLastError());
+
+ setup_test( &info, winhttp_send_request, __LINE__ );
+ ret = WinHttpSendRequest( req, NULL, 0, NULL, 0, 0, 0 );
+ ok(ret, "failed to send request %u\n", GetLastError());
+
+ WaitForSingleObject( info.wait, INFINITE );
+
+ setup_test( &info, winhttp_receive_response, __LINE__ );
+ ret = WinHttpReceiveResponse( req, NULL );
+ ok(ret, "failed to receive response %u\n", GetLastError());
+
+ WaitForSingleObject( info.wait, INFINITE );
+
+ size = sizeof(status);
+ ret = WinHttpQueryHeaders( req, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, NULL, &status, &size, NULL );
+ ok(ret, "failed unexpectedly %u\n", GetLastError());
+ ok(status == 200, "request failed unexpectedly %u\n", status);
+
+ setup_test( &info, winhttp_query_data, __LINE__ );
+ ret = WinHttpQueryDataAvailable( req, NULL );
+ ok(ret, "failed to query data available %u\n", GetLastError());
+
+ WaitForSingleObject( info.wait, INFINITE );
+
+ setup_test( &info, winhttp_read_data, __LINE__ );
+ ret = WinHttpReadData( req, buffer, sizeof(buffer), NULL );
+ ok(ret, "failed to query data available %u\n", GetLastError());
+
+ WaitForSingleObject( info.wait, INFINITE );
+
+ setup_test( &info, winhttp_close_handle, __LINE__ );
+ WinHttpCloseHandle( req );
+ WinHttpCloseHandle( con );
+ WinHttpCloseHandle( ses );
+ CloseHandle( info.wait );
+}
+
START_TEST (notification)
{
test_connection_cache();
test_redirect();
+ Sleep(2000); /* make sure previous connection is evicted from cache */
+ test_async();
}
diff --git a/rostests/winetests/winhttp/testlist.c b/rostests/winetests/winhttp/testlist.c
index 0830226693f..36f226a2bfb 100644
--- a/rostests/winetests/winhttp/testlist.c
+++ b/rostests/winetests/winhttp/testlist.c
@@ -7,9 +7,13 @@
#include "wine/test.h"
extern void func_winhttp(void);
+extern void func_notification(void);
+extern void func_url(void);
const struct test winetest_testlist[] =
{
{ "winhttp", func_winhttp },
+ { "notification", func_notification },
+ { "url", func_url },
{ 0, 0 }
};
diff --git a/rostests/winetests/winhttp/url.c b/rostests/winetests/winhttp/url.c
new file mode 100644
index 00000000000..da149b07f60
--- /dev/null
+++ b/rostests/winetests/winhttp/url.c
@@ -0,0 +1,581 @@
+/*
+ * Copyright 2008 Hans Leidekker
+ *
+ * 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 "windef.h"
+#include "winbase.h"
+#include "winnls.h"
+#include "winhttp.h"
+
+#include "wine/test.h"
+
+#define ICU_ESCAPE 0x80000000
+
+static WCHAR empty[] = {0};
+static WCHAR ftp[] = {'f','t','p',0};
+static WCHAR http[] = {'h','t','t','p',0};
+static WCHAR winehq[] = {'w','w','w','.','w','i','n','e','h','q','.','o','r','g',0};
+static WCHAR username[] = {'u','s','e','r','n','a','m','e',0};
+static WCHAR password[] = {'p','a','s','s','w','o','r','d',0};
+static WCHAR about[] = {'/','s','i','t','e','/','a','b','o','u','t',0};
+static WCHAR query[] = {'?','q','u','e','r','y',0};
+static WCHAR escape[] = {' ','!','"','#','$','%','&','\'','(',')','*','+',',','-','.','/',':',';','<','=','>','?','@','[','\\',']','^','_','`','{','|','}','~',0};
+
+static const WCHAR url1[] =
+ {'h','t','t','p',':','/','/','u','s','e','r','n','a','m','e',':','p','a','s','s','w','o','r','d',
+ '@','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/','s','i','t','e','/','a','b','o','u','t','?','q','u','e','r','y',0};
+static const WCHAR url2[] =
+ {'h','t','t','p',':','/','/','u','s','e','r','n','a','m','e',
+ '@','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/','s','i','t','e','/','a','b','o','u','t','?','q','u','e','r','y',0};
+static const WCHAR url3[] = {'h','t','t','p',':','/','/','u','s','e','r','n','a','m','e',':',0};
+static const WCHAR url4[] =
+ {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/','s','i','t','e','/','a','b','o','u','t','?','q','u','e','r','y',0};
+static const WCHAR url5[] = {'h','t','t','p',':','/','/',0};
+static const WCHAR url6[] =
+ {'f','t','p',':','/','/','u','s','e','r','n','a','m','e',':','p','a','s','s','w','o','r','d',
+ '@','w','w','w','.','w','i','n','e','h','q','.','o','r','g',':','8','0','/','s','i','t','e','/','a','b','o','u','t','?','q','u','e','r','y',0};
+static const WCHAR url7[] =
+ {'h','t','t','p',':','/','/','u','s','e','r','n','a','m','e',':','p','a','s','s','w','o','r','d',
+ '@','w','w','w','.','w','i','n','e','h','q','.','o','r','g',':','4','2','/','s','i','t','e','/','a','b','o','u','t','?','q','u','e','r','y',0};
+static const WCHAR url8[] =
+ {'h','t','t','p',':','/','/','u','s','e','r','n','a','m','e',':','p','a','s','s','w','o','r','d',
+ '@','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/','s','i','t','e','/','a','b','o','u','t',
+ '%','2','0','!','%','2','2','%','2','3','$','%','2','5','&','\'','(',')','*','+',',','-','.','/',':',';','%','3','C','=','%','3','E','?','@','%',
+ '5','B','%','5','C','%','5','D','%','5','E','_','%','6','0','%','7','B','%','7','C','%','7','D','%','7','E',0};
+static const WCHAR url9[] =
+ {'h','t','t','p',':','/','/','u','s','e','r','n','a','m','e',':','p','a','s','s','w','o','r','d',
+ '@','w','w','w','.','w','i','n','e','h','q','.','o','r','g',':','0','/','s','i','t','e','/','a','b','o','u','t','?','q','u','e','r','y',0};
+static const WCHAR url10[] =
+ {'h','t','t','p',':','/','/','u','s','e','r','n','a','m','e',':','p','a','s','s','w','o','r','d',
+ '@','w','w','w','.','w','i','n','e','h','q','.','o','r','g',':','8','0','/','s','i','t','e','/','a','b','o','u','t','?','q','u','e','r','y',0};
+static const WCHAR url11[] =
+ {'h','t','t','p','s',':','/','/','u','s','e','r','n','a','m','e',':','p','a','s','s','w','o','r','d',
+ '@','w','w','w','.','w','i','n','e','h','q','.','o','r','g',':','4','4','3','/','s','i','t','e','/','a','b','o','u','t','?','q','u','e','r','y',0};
+
+
+
+static const WCHAR url_k1[] =
+ {'h','t','t','p',':','/','/','u','s','e','r','n','a','m','e',':','p','a','s','s','w','o','r','d',
+ '@','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/','s','i','t','e','/','a','b','o','u','t',0};
+static const WCHAR url_k2[] =
+ {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g',0};
+static const WCHAR url_k3[] =
+ {'h','t','t','p','s',':','/','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g','/','p','o','s','t','?',0};
+static const WCHAR url_k4[] =
+ {'H','T','T','P',':','w','w','w','.','w','i','n','e','h','q','.','o','r','g',0};
+static const WCHAR url_k5[] =
+ {'h','t','t','p',':','/','w','w','w','.','w','i','n','e','h','q','.','o','r','g',0};
+static const WCHAR url_k6[] =
+ {'w','w','w','.','w','i','n','e','h','q','.','o','r','g',0};
+static const WCHAR url_k7[] =
+ {'w','w','w',0};
+static const WCHAR url_k8[] =
+ {'h','t','t','p',0};
+static const WCHAR url_k9[] =
+ {'h','t','t','p',':','/','/','w','i','n','e','h','q','?',0};
+static const WCHAR url_k10[] =
+ {'h','t','t','p',':','/','/','w','i','n','e','h','q','/','p','o','s','t',';','a',0};
+
+static const char *debugstr_w(LPCWSTR str)
+{
+ static char buf[1024];
+ WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL);
+ return buf;
+}
+
+static void fill_url_components( URL_COMPONENTS *uc )
+{
+ uc->dwStructSize = sizeof(URL_COMPONENTS);
+ uc->lpszScheme = http;
+ uc->dwSchemeLength = lstrlenW( uc->lpszScheme );
+ uc->nScheme = INTERNET_SCHEME_HTTP;
+ uc->lpszHostName = winehq;
+ uc->dwHostNameLength = lstrlenW( uc->lpszHostName );
+ uc->nPort = 80;
+ uc->lpszUserName = username;
+ uc->dwUserNameLength = lstrlenW( uc->lpszUserName );
+ uc->lpszPassword = password;
+ uc->dwPasswordLength = lstrlenW( uc->lpszPassword );
+ uc->lpszUrlPath = about;
+ uc->dwUrlPathLength = lstrlenW( uc->lpszUrlPath );
+ uc->lpszExtraInfo = query;
+ uc->dwExtraInfoLength = lstrlenW( uc->lpszExtraInfo );
+}
+
+static void WinHttpCreateUrl_test( void )
+{
+ URL_COMPONENTS uc;
+ WCHAR *url;
+ DWORD len;
+ BOOL ret;
+
+ /* NULL components */
+ len = ~0u;
+ SetLastError( 0xdeadbeef );
+ ret = WinHttpCreateUrl( NULL, 0, NULL, &len );
+ ok( !ret, "expected failure\n" );
+ ok( GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", GetLastError() );
+ ok( len == ~0u, "expected len ~0u got %u\n", len );
+
+ /* zero'ed components */
+ memset( &uc, 0, sizeof(URL_COMPONENTS) );
+ SetLastError( 0xdeadbeef );
+ ret = WinHttpCreateUrl( &uc, 0, NULL, &len );
+ ok( !ret, "expected failure\n" );
+ ok( GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", GetLastError() );
+ ok( len == ~0u, "expected len ~0u got %u\n", len );
+
+ /* valid components, NULL url, NULL length */
+ fill_url_components( &uc );
+ SetLastError( 0xdeadbeef );
+ ret = WinHttpCreateUrl( &uc, 0, NULL, NULL );
+ ok( !ret, "expected failure\n" );
+ ok( GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", GetLastError() );
+ ok( len == ~0u, "expected len ~0u got %u\n", len );
+
+ /* valid components, NULL url */
+ SetLastError( 0xdeadbeef );
+ ret = WinHttpCreateUrl( &uc, 0, NULL, &len );
+ ok( !ret, "expected failure\n" );
+ ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER, "expected ERROR_INSUFFICIENT_BUFFER got %u\n", GetLastError() );
+ ok( len == 57, "expected len 57 got %u\n", len );
+
+ /* correct size, NULL url */
+ fill_url_components( &uc );
+ SetLastError( 0xdeadbeef );
+ ret = WinHttpCreateUrl( &uc, 0, NULL, &len );
+ ok( !ret, "expected failure\n" );
+ ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER, "expected ERROR_INSUFFICIENT_BUFFER got %u\n", GetLastError() );
+ ok( len == 57, "expected len 57 got %u\n", len );
+
+ /* valid components, allocated url, short length */
+ SetLastError( 0xdeadbeef );
+ url = HeapAlloc( GetProcessHeap(), 0, 256 * sizeof(WCHAR) );
+ url[0] = 0;
+ len = 2;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( !ret, "expected failure\n" );
+ ok( GetLastError() == ERROR_INSUFFICIENT_BUFFER, "expected ERROR_INSUFFICIENT_BUFFER got %u\n", GetLastError() );
+ ok( len == 57, "expected len 57 got %u\n", len );
+
+ /* allocated url, NULL scheme */
+ uc.lpszScheme = NULL;
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( ret, "expected success\n" );
+ ok( len == 56, "expected len 56 got %u\n", len );
+ ok( !lstrcmpW( url, url1 ), "url doesn't match\n" );
+
+ /* allocated url, 0 scheme */
+ fill_url_components( &uc );
+ uc.nScheme = 0;
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( ret, "expected success\n" );
+ ok( len == 56, "expected len 56 got %u\n", len );
+
+ /* valid components, allocated url */
+ fill_url_components( &uc );
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( ret, "expected success\n" );
+ ok( len == 56, "expected len 56 got %d\n", len );
+ ok( !lstrcmpW( url, url1 ), "url doesn't match\n" );
+
+ /* valid username, NULL password */
+ fill_url_components( &uc );
+ uc.lpszPassword = NULL;
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( ret, "expected success\n" );
+
+ /* valid username, empty password */
+ fill_url_components( &uc );
+ uc.lpszPassword = empty;
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( ret, "expected success\n" );
+ ok( len == 56, "expected len 56 got %u\n", len );
+ ok( !lstrcmpW( url, url3 ), "url doesn't match\n" );
+
+ /* valid password, NULL username */
+ fill_url_components( &uc );
+ SetLastError( 0xdeadbeef );
+ uc.lpszUserName = NULL;
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( !ret, "expected failure\n" );
+ ok( GetLastError() == ERROR_INVALID_PARAMETER, "expected ERROR_INVALID_PARAMETER got %u\n", GetLastError() );
+
+ /* valid password, empty username */
+ fill_url_components( &uc );
+ uc.lpszUserName = empty;
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( ret, "expected success\n");
+
+ /* NULL username, NULL password */
+ fill_url_components( &uc );
+ uc.lpszUserName = NULL;
+ uc.lpszPassword = NULL;
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( ret, "expected success\n" );
+ ok( len == 38, "expected len 38 got %u\n", len );
+ ok( !lstrcmpW( url, url4 ), "url doesn't match\n" );
+
+ /* empty username, empty password */
+ fill_url_components( &uc );
+ uc.lpszUserName = empty;
+ uc.lpszPassword = empty;
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( ret, "expected success\n" );
+ ok( len == 56, "expected len 56 got %u\n", len );
+ ok( !lstrcmpW( url, url5 ), "url doesn't match\n" );
+
+ /* nScheme has lower precedence than lpszScheme */
+ fill_url_components( &uc );
+ uc.lpszScheme = ftp;
+ uc.dwSchemeLength = lstrlenW( uc.lpszScheme );
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( ret, "expected success\n" );
+ ok( len == lstrlenW( url6 ), "expected len %d got %u\n", lstrlenW( url6 ) + 1, len );
+ ok( !lstrcmpW( url, url6 ), "url doesn't match\n" );
+
+ /* non-standard port */
+ uc.lpszScheme = http;
+ uc.dwSchemeLength = lstrlenW( uc.lpszScheme );
+ uc.nPort = 42;
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( ret, "expected success\n" );
+ ok( len == 59, "expected len 59 got %u\n", len );
+ ok( !lstrcmpW( url, url7 ), "url doesn't match\n" );
+
+ /* escape extra info */
+ fill_url_components( &uc );
+ uc.lpszExtraInfo = escape;
+ uc.dwExtraInfoLength = lstrlenW( uc.lpszExtraInfo );
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, ICU_ESCAPE, url, &len );
+ ok( ret, "expected success\n" );
+ ok( len == 113, "expected len 113 got %u\n", len );
+ ok( !lstrcmpW( url, url8 ), "url doesn't match\n" );
+
+ /* NULL lpszScheme, 0 nScheme and nPort */
+ fill_url_components( &uc );
+ uc.lpszScheme = NULL;
+ uc.dwSchemeLength = 0;
+ uc.nScheme = 0;
+ uc.nPort = 0;
+ url[0] = 0;
+ len = 256;
+ ret = WinHttpCreateUrl( &uc, 0, url, &len );
+ ok( ret, "expected success\n" );
+ ok( len == 58, "expected len 58 got %u\n", len );
+ ok( !lstrcmpW( url, url9 ), "url doesn't match\n" );
+
+ HeapFree( GetProcessHeap(), 0, url );
+}
+
+static void reset_url_components( URL_COMPONENTS *uc )
+{
+ memset( uc, 0, sizeof(URL_COMPONENTS) );
+ uc->dwStructSize = sizeof(URL_COMPONENTS);
+ uc->dwSchemeLength = ~0u;
+ uc->dwHostNameLength = ~0u;
+ uc->nPort = 0;
+ uc->dwUserNameLength = ~0u;
+ uc->dwPasswordLength = ~0u;
+ uc->dwUrlPathLength = ~0u;
+ uc->dwExtraInfoLength = ~0u;
+}
+
+static void WinHttpCrackUrl_test( void )
+{
+ URL_COMPONENTSW uc;
+ WCHAR scheme[20], user[20], pass[20], host[20], path[40], extra[20];
+ DWORD error;
+ BOOL ret;
+
+ /* buffers of sufficient length */
+ scheme[0] = 0;
+ user[0] = 0;
+ pass[0] = 0;
+ host[0] = 0;
+ path[0] = 0;
+ extra[0] = 0;
+
+ uc.dwStructSize = sizeof(URL_COMPONENTS);
+ uc.nScheme = 0;
+ uc.lpszScheme = scheme;
+ uc.dwSchemeLength = 20;
+ uc.lpszUserName = user;
+ uc.dwUserNameLength = 20;
+ uc.lpszPassword = pass;
+ uc.dwPasswordLength = 20;
+ uc.lpszHostName = host;
+ uc.dwHostNameLength = 20;
+ uc.nPort = 0;
+ uc.lpszUrlPath = path;
+ uc.dwUrlPathLength = 40;
+ uc.lpszExtraInfo = extra;
+ uc.dwExtraInfoLength = 20;
+
+ ret = WinHttpCrackUrl( url1, 0, 0, &uc );
+ ok( ret, "WinHttpCrackUrl failed\n" );
+ ok( uc.nScheme == INTERNET_SCHEME_HTTP, "unexpected scheme\n" );
+ ok( !memcmp( uc.lpszScheme, http, sizeof(http) ), "unexpected scheme\n" );
+ ok( uc.dwSchemeLength == 4, "unexpected scheme length\n" );
+ ok( !memcmp( uc.lpszUserName, username, sizeof(username) ), "unexpected username\n" );
+ ok( uc.dwUserNameLength == 8, "unexpected username length\n" );
+ ok( !memcmp( uc.lpszPassword, password, sizeof(password) ), "unexpected password\n" );
+ ok( uc.dwPasswordLength == 8, "unexpected password length\n" );
+ ok( !memcmp( uc.lpszHostName, winehq, sizeof(winehq) ), "unexpected hostname\n" );
+ ok( uc.dwHostNameLength == 14, "unexpected hostname length\n" );
+ ok( uc.nPort == 80, "unexpected port: %u\n", uc.nPort );
+ ok( !memcmp( uc.lpszUrlPath, about, sizeof(about) ), "unexpected path\n" );
+ ok( uc.dwUrlPathLength == 11, "unexpected path length\n" );
+ ok( !memcmp( uc.lpszExtraInfo, query, sizeof(query) ), "unexpected extra info\n" );
+ ok( uc.dwExtraInfoLength == 6, "unexpected extra info length\n" );
+
+ /* buffer of insufficient length */
+ scheme[0] = 0;
+ uc.dwSchemeLength = 1;
+
+ SetLastError( 0xdeadbeef );
+ ret = WinHttpCrackUrl( url1, 0, 0, &uc );
+ error = GetLastError();
+ ok( !ret, "WinHttpCrackUrl failed\n" );
+ ok( error == ERROR_INSUFFICIENT_BUFFER, "WinHttpCrackUrl failed\n" );
+ ok( uc.dwSchemeLength == 5, "unexpected scheme length: %u\n", uc.dwSchemeLength );
+
+ /* no buffers */
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url_k1, 0, 0,&uc);
+
+ ok( ret, "WinHttpCrackUrl failed\n" );
+ ok( uc.nScheme == INTERNET_SCHEME_HTTP, "unexpected scheme\n" );
+ ok( uc.lpszScheme == url_k1,"unexpected scheme\n" );
+ ok( uc.dwSchemeLength == 4, "unexpected scheme length\n" );
+ ok( uc.lpszUserName == url_k1 + 7, "unexpected username\n" );
+ ok( uc.dwUserNameLength == 8, "unexpected username length\n" );
+ ok( uc.lpszPassword == url_k1 + 16, "unexpected password\n" );
+ ok( uc.dwPasswordLength == 8, "unexpected password length\n" );
+ ok( uc.lpszHostName == url_k1 + 25, "unexpected hostname\n" );
+ ok( uc.dwHostNameLength == 14, "unexpected hostname length\n" );
+ ok( uc.nPort == 80, "unexpected port: %u\n", uc.nPort );
+ ok( uc.lpszUrlPath == url_k1 + 39, "unexpected path\n" );
+ ok( uc.dwUrlPathLength == 11, "unexpected path length\n" );
+ ok( uc.lpszExtraInfo == url_k1 + 50, "unexpected extra info\n" );
+ ok( uc.dwExtraInfoLength == 0, "unexpected extra info length\n" );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url_k2, 0, 0,&uc);
+
+ ok( ret, "WinHttpCrackUrl failed\n" );
+ ok( uc.nScheme == INTERNET_SCHEME_HTTP, "unexpected scheme\n" );
+ ok( uc.lpszScheme == url_k2, "unexpected scheme\n" );
+ ok( uc.dwSchemeLength == 4, "unexpected scheme length\n" );
+ ok( uc.lpszUserName == NULL ,"unexpected username\n" );
+ ok( uc.dwUserNameLength == 0, "unexpected username length\n" );
+ ok( uc.lpszPassword == NULL, "unexpected password\n" );
+ ok( uc.dwPasswordLength == 0, "unexpected password length\n" );
+ ok( uc.lpszHostName == url_k2 + 7, "unexpected hostname\n" );
+ ok( uc.dwHostNameLength == 14, "unexpected hostname length\n" );
+ ok( uc.nPort == 80, "unexpected port: %u\n", uc.nPort );
+ ok( uc.lpszUrlPath == url_k2 + 21, "unexpected path\n" );
+ ok( uc.dwUrlPathLength == 0, "unexpected path length\n" );
+ ok( uc.lpszExtraInfo == url_k2 + 21, "unexpected extra info\n" );
+ ok( uc.dwExtraInfoLength == 0, "unexpected extra info length\n" );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url_k3, 0, 0, &uc );
+
+ ok( ret, "WinHttpCrackUrl failed\n" );
+ ok( uc.nScheme == INTERNET_SCHEME_HTTPS, "unexpected scheme\n" );
+ ok( uc.lpszScheme == url_k3, "unexpected scheme\n" );
+ ok( uc.dwSchemeLength == 5, "unexpected scheme length\n" );
+ ok( uc.lpszUserName == NULL, "unexpected username\n" );
+ ok( uc.dwUserNameLength == 0, "unexpected username length\n" );
+ ok( uc.lpszPassword == NULL, "unexpected password\n" );
+ ok( uc.dwPasswordLength == 0, "unexpected password length\n" );
+ ok( uc.lpszHostName == url_k3 + 8, "unexpected hostname\n" );
+ ok( uc.dwHostNameLength == 14, "unexpected hostname length\n" );
+ ok( uc.nPort == 443, "unexpected port: %u\n", uc.nPort );
+ ok( uc.lpszUrlPath == url_k3 + 22, "unexpected path\n" );
+ ok( uc.dwUrlPathLength == 5, "unexpected path length\n" );
+ ok( uc.lpszExtraInfo == url_k3 + 27, "unexpected extra info\n" );
+ ok( uc.dwExtraInfoLength == 1, "unexpected extra info length\n" );
+
+ /* bad parameters */
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url_k4, 0, 0, &uc );
+ ok( !ret, "WinHttpCrackUrl failed\n" );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url_k5, 0, 0, &uc );
+ ok( !ret, "WinHttpCrackUrl failed\n" );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url_k6, 0, 0, &uc );
+ ok( !ret, "WinHttpCrackUrl failed\n" );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url_k7, 0, 0, &uc );
+ ok( !ret, "WinHttpCrackUrl failed\n" );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url_k8, 0, 0, &uc );
+ ok( !ret, "WinHttpCrackUrl failed\n" );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url_k9, 0, 0, &uc );
+ ok( ret, "WinHttpCrackUrl failed\n" );
+ ok( uc.lpszUrlPath == url_k9 + 14, "unexpected path\n" );
+ ok( uc.dwUrlPathLength == 0, "unexpected path length\n" );
+ ok( uc.lpszExtraInfo == url_k9 + 14, "unexpected extra info\n" );
+ ok( uc.dwExtraInfoLength == 0, "unexpected extra info length\n" );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url_k10, 0, 0, &uc );
+ ok( ret, "WinHttpCrackUrl failed\n" );
+ ok( uc.lpszUrlPath == url_k10 + 13, "unexpected path\n" );
+ ok( uc.dwUrlPathLength == 7, "unexpected path length\n" );
+ ok( uc.lpszExtraInfo == url_k10 + 20, "unexpected extra info\n" );
+ ok( uc.dwExtraInfoLength == 0, "unexpected extra info length\n" );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url5, 0, 0, &uc );
+ ok( !ret, "WinHttpCrackUrl failed\n" );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( empty, 0, 0, &uc );
+ ok( !ret, "WinHttpCrackUrl failed\n" );
+
+ ret = WinHttpCrackUrl( url1, 0, 0, NULL );
+ ok( !ret, "WinHttpCrackUrl failed\n" );
+
+ ret = WinHttpCrackUrl( NULL, 0, 0, &uc );
+ ok( !ret, "WinHttpCrackUrl failed\n" );
+
+ /* decoding without buffers */
+ reset_url_components( &uc );
+ SetLastError(0xdeadbeef);
+ ret = WinHttpCrackUrl( url8, 0, ICU_DECODE, &uc );
+ error = GetLastError();
+ ok( !ret, "WinHttpCrackUrl failed\n" );
+ ok( error == ERROR_INVALID_PARAMETER, "WinHttpCrackUrl failed\n" );
+
+ /* decoding with buffers */
+ uc.lpszScheme = scheme;
+ uc.dwSchemeLength = 20;
+ uc.lpszUserName = user;
+ uc.dwUserNameLength = 20;
+ uc.lpszPassword = pass;
+ uc.dwPasswordLength = 20;
+ uc.lpszHostName = host;
+ uc.dwHostNameLength = 20;
+ uc.nPort = 0;
+ uc.lpszUrlPath = path;
+ uc.dwUrlPathLength = 40;
+ uc.lpszExtraInfo = extra;
+ uc.dwExtraInfoLength = 20;
+ path[0] = 0;
+
+ ret = WinHttpCrackUrl( url8, 0, ICU_DECODE, &uc );
+ ok( ret, "WinHttpCrackUrl failed\n" );
+ ok( !memcmp( uc.lpszUrlPath + 11, escape, 21 * sizeof(WCHAR) ), "unexpected path\n" );
+ ok( uc.dwUrlPathLength == 32, "unexpected path length\n" );
+ ok( !memcmp( uc.lpszExtraInfo, escape + 21, 12 * sizeof(WCHAR) ), "unexpected extra info\n" );
+ ok( uc.dwExtraInfoLength == 12, "unexpected extra info length\n" );
+
+ /* Urls with specified port numbers */
+ /* decoding with buffers */
+ uc.lpszScheme = scheme;
+ uc.dwSchemeLength = 20;
+ uc.lpszUserName = user;
+ uc.dwUserNameLength = 20;
+ uc.lpszPassword = pass;
+ uc.dwPasswordLength = 20;
+ uc.lpszHostName = host;
+ uc.dwHostNameLength = 20;
+ uc.nPort = 0;
+ uc.lpszUrlPath = path;
+ uc.dwUrlPathLength = 40;
+ uc.lpszExtraInfo = extra;
+ uc.dwExtraInfoLength = 20;
+ path[0] = 0;
+
+ ret = WinHttpCrackUrl( url7, 0, 0, &uc );
+ ok( ret, "WinHttpCrackUrl failed\n" );
+ ok( !memcmp( uc.lpszHostName, winehq, sizeof(winehq) ), "unexpected host name: %s\n", debugstr_w(uc.lpszHostName) );
+ ok( uc.dwHostNameLength == 14, "unexpected host name length: %d\n", uc.dwHostNameLength );
+ ok( uc.nPort == 42, "unexpected port: %u\n", uc.nPort );
+
+ /* decoding without buffers */
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url9, 0, 0, &uc );
+ ok( ret, "WinHttpCrackUrl failed\n" );
+ ok( uc.nPort == 0, "unexpected port: %u\n", uc.nPort );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url10, 0, 0, &uc );
+ ok( ret, "WinHttpCrackUrl failed\n" );
+ ok( uc.nPort == 80, "unexpected port: %u\n", uc.nPort );
+
+ reset_url_components( &uc );
+ ret = WinHttpCrackUrl( url11, 0, 0, &uc );
+ ok( ret, "WinHttpCrackUrl failed\n" );
+ ok( uc.nPort == 443, "unexpected port: %u\n", uc.nPort );
+
+ reset_url_components( &uc );
+ SetLastError( 0xdeadbeef );
+ ret = WinHttpCrackUrl( empty, 0, 0, &uc );
+ error = GetLastError();
+ ok( !ret, "WinHttpCrackUrl succeeded\n" );
+ ok( error == ERROR_WINHTTP_UNRECOGNIZED_SCHEME, "got %u, expected ERROR_WINHTTP_UNRECOGNIZED_SCHEME\n", error );
+
+ reset_url_components( &uc );
+ SetLastError( 0xdeadbeef );
+ ret = WinHttpCrackUrl( http, 0, 0, &uc );
+ error = GetLastError();
+ ok( !ret, "WinHttpCrackUrl succeeded\n" );
+ ok( error == ERROR_WINHTTP_UNRECOGNIZED_SCHEME, "got %u, expected ERROR_WINHTTP_UNRECOGNIZED_SCHEME\n", error );
+}
+
+START_TEST (url)
+{
+ WinHttpCreateUrl_test();
+ WinHttpCrackUrl_test();
+}
diff --git a/rostests/winetests/winhttp/winhttp.c b/rostests/winetests/winhttp/winhttp.c
index 71e4efa788c..74e1c9a12ec 100644
--- a/rostests/winetests/winhttp/winhttp.c
+++ b/rostests/winetests/winhttp/winhttp.c
@@ -23,6 +23,7 @@
#include
#include
#include
+#include
#include "wine/test.h"
@@ -30,6 +31,154 @@ static const WCHAR test_useragent[] =
{'W','i','n','e',' ','R','e','g','r','e','s','s','i','o','n',' ','T','e','s','t',0};
static const WCHAR test_server[] = {'w','i','n','e','h','q','.','o','r','g',0};
+static void test_QueryOption(void)
+{
+ BOOL ret;
+ HINTERNET session, request, connection;
+ DWORD feature, size;
+
+ SetLastError(0xdeadbeef);
+ session = WinHttpOpen(test_useragent, 0, 0, 0, 0);
+ ok(session != NULL, "WinHttpOpen failed to open session, error %u\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = WinHttpQueryOption(session, WINHTTP_OPTION_REDIRECT_POLICY, NULL, NULL);
+ ok(!ret, "should fail to set redirect policy %u\n", GetLastError());
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
+ "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
+
+ size = 0xdeadbeef;
+ SetLastError(0xdeadbeef);
+ ret = WinHttpQueryOption(session, WINHTTP_OPTION_REDIRECT_POLICY, NULL, &size);
+ ok(!ret, "should fail to query option\n");
+ ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+ "expected ERROR_INSUFFICIENT_BUFFER, got %u\n", GetLastError());
+ ok(size == 4, "expected 4, got %u\n", size);
+
+ feature = 0xdeadbeef;
+ size = sizeof(feature) - 1;
+ SetLastError(0xdeadbeef);
+ ret = WinHttpQueryOption(session, WINHTTP_OPTION_REDIRECT_POLICY, &feature, &size);
+ ok(!ret, "should fail to query option\n");
+ ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+ "expected ERROR_INSUFFICIENT_BUFFER, got %u\n", GetLastError());
+ ok(size == 4, "expected 4, got %u\n", size);
+
+ feature = 0xdeadbeef;
+ size = sizeof(feature) + 1;
+ SetLastError(0xdeadbeef);
+ ret = WinHttpQueryOption(session, WINHTTP_OPTION_REDIRECT_POLICY, &feature, &size);
+ ok(ret, "failed to query option %u\n", GetLastError());
+ ok(size == sizeof(feature), "WinHttpQueryOption should set the size: %u\n", size);
+ ok(feature == WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP,
+ "expected WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP, got %#x\n", feature);
+
+ SetLastError(0xdeadbeef);
+ ret = WinHttpSetOption(session, WINHTTP_OPTION_REDIRECT_POLICY, NULL, sizeof(feature));
+ ok(!ret, "should fail to set redirect policy %u\n", GetLastError());
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
+ "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
+
+ feature = WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS;
+ SetLastError(0xdeadbeef);
+ ret = WinHttpSetOption(session, WINHTTP_OPTION_REDIRECT_POLICY, &feature, sizeof(feature) - 1);
+ ok(!ret, "should fail to set redirect policy %u\n", GetLastError());
+ ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+ "expected ERROR_INSUFFICIENT_BUFFER, got %u\n", GetLastError());
+
+ feature = WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS;
+ SetLastError(0xdeadbeef);
+ ret = WinHttpSetOption(session, WINHTTP_OPTION_REDIRECT_POLICY, &feature, sizeof(feature) + 1);
+ ok(!ret, "should fail to set redirect policy %u\n", GetLastError());
+ ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER,
+ "expected ERROR_INSUFFICIENT_BUFFER, got %u\n", GetLastError());
+
+ feature = WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS;
+ SetLastError(0xdeadbeef);
+ ret = WinHttpSetOption(session, WINHTTP_OPTION_REDIRECT_POLICY, &feature, sizeof(feature));
+ ok(ret, "failed to set redirect policy %u\n", GetLastError());
+
+ feature = 0xdeadbeef;
+ size = sizeof(feature);
+ SetLastError(0xdeadbeef);
+ ret = WinHttpQueryOption(session, WINHTTP_OPTION_REDIRECT_POLICY, &feature, &size);
+ ok(ret, "failed to query option %u\n", GetLastError());
+ ok(feature == WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS,
+ "expected WINHTTP_OPTION_REDIRECT_POLICY_ALWAYS, got %#x\n", feature);
+
+ feature = WINHTTP_DISABLE_COOKIES;
+ SetLastError(0xdeadbeef);
+ ret = WinHttpSetOption(session, WINHTTP_OPTION_DISABLE_FEATURE, &feature, sizeof(feature));
+ ok(!ret, "should fail to set disable feature for a session\n");
+ ok(GetLastError() == ERROR_WINHTTP_INCORRECT_HANDLE_TYPE,
+ "expected ERROR_WINHTTP_INCORRECT_HANDLE_TYPE, got %u\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ connection = WinHttpConnect(session, test_server, INTERNET_DEFAULT_HTTP_PORT, 0);
+ ok(connection != NULL, "WinHttpConnect failed to open a connection, error: %u\n", GetLastError());
+
+ feature = WINHTTP_DISABLE_COOKIES;
+ SetLastError(0xdeadbeef);
+ ret = WinHttpSetOption(connection, WINHTTP_OPTION_DISABLE_FEATURE, &feature, sizeof(feature));
+ ok(!ret, "should fail to set disable feature for a connection\n");
+ ok(GetLastError() == ERROR_WINHTTP_INCORRECT_HANDLE_TYPE,
+ "expected ERROR_WINHTTP_INCORRECT_HANDLE_TYPE, got %u\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ request = WinHttpOpenRequest(connection, NULL, NULL, NULL, WINHTTP_NO_REFERER,
+ WINHTTP_DEFAULT_ACCEPT_TYPES, 0);
+ if (request == NULL && GetLastError() == ERROR_WINHTTP_NAME_NOT_RESOLVED)
+ {
+ skip("Network unreachable, skipping the test\n");
+ goto done;
+ }
+
+ feature = 0xdeadbeef;
+ size = sizeof(feature);
+ SetLastError(0xdeadbeef);
+ ret = WinHttpQueryOption(request, WINHTTP_OPTION_DISABLE_FEATURE, &feature, &size);
+ ok(!ret, "should fail to query disable feature for a request\n");
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
+ "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
+
+ feature = 0;
+ size = sizeof(feature);
+ SetLastError(0xdeadbeef);
+ ret = WinHttpSetOption(request, WINHTTP_OPTION_DISABLE_FEATURE, &feature, sizeof(feature));
+ ok(ret, "failed to set feature %u\n", GetLastError());
+
+ feature = 0xffffffff;
+ size = sizeof(feature);
+ SetLastError(0xdeadbeef);
+ ret = WinHttpSetOption(request, WINHTTP_OPTION_DISABLE_FEATURE, &feature, sizeof(feature));
+ ok(ret, "failed to set feature %u\n", GetLastError());
+
+ feature = WINHTTP_DISABLE_COOKIES;
+ size = sizeof(feature);
+ SetLastError(0xdeadbeef);
+ ret = WinHttpSetOption(request, WINHTTP_OPTION_DISABLE_FEATURE, &feature, sizeof(feature));
+ ok(ret, "failed to set feature %u\n", GetLastError());
+
+ size = 0;
+ SetLastError(0xdeadbeef);
+ ret = WinHttpQueryOption(request, WINHTTP_OPTION_DISABLE_FEATURE, NULL, &size);
+ ok(!ret, "should fail to query disable feature for a request\n");
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
+ "expected ERROR_INVALID_PARAMETER, got %u\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ ret = WinHttpCloseHandle(request);
+ ok(ret, "WinHttpCloseHandle failed on closing request: %u\n", GetLastError());
+
+done:
+ SetLastError(0xdeadbeef);
+ ret = WinHttpCloseHandle(connection);
+ ok(ret, "WinHttpCloseHandle failed on closing connection: %u\n", GetLastError());
+ SetLastError(0xdeadbeef);
+ ret = WinHttpCloseHandle(session);
+ ok(ret, "WinHttpCloseHandle failed on closing session: %u\n", GetLastError());
+}
+
static void test_OpenRequest (void)
{
BOOL ret;
@@ -272,6 +421,7 @@ static void test_WinHttpAddHeaders(void)
*/
index = 0;
len = 5*sizeof(WCHAR);
+ memset(check_buffer, 0xab, sizeof(check_buffer));
memcpy(buffer, check_buffer, sizeof(buffer));
ret = WinHttpQueryHeaders(request, WINHTTP_QUERY_CUSTOM | WINHTTP_QUERY_FLAG_REQUEST_HEADERS,
test_header_name, buffer, &len, &index);
@@ -515,22 +665,22 @@ static void test_WinHttpAddHeaders(void)
test_header_name, buffer, &len, &index);
ok(ret == FALSE, "WinHttpQueryHeaders succeeded unexpectedly, found third header.\n");
- ret = WinHttpAddRequestHeaders(request, test_headers[8], ~0UL, WINHTTP_ADDREQ_FLAG_ADD);
+ ret = WinHttpAddRequestHeaders(request, test_headers[8], ~0u, WINHTTP_ADDREQ_FLAG_ADD);
ok(!ret, "WinHttpAddRequestHeaders failed\n");
- ret = WinHttpAddRequestHeaders(request, test_headers[9], ~0UL, WINHTTP_ADDREQ_FLAG_ADD);
+ ret = WinHttpAddRequestHeaders(request, test_headers[9], ~0u, WINHTTP_ADDREQ_FLAG_ADD);
ok(ret, "WinHttpAddRequestHeaders failed\n");
- ret = WinHttpAddRequestHeaders(request, test_headers[10], ~0UL, WINHTTP_ADDREQ_FLAG_ADD);
+ ret = WinHttpAddRequestHeaders(request, test_headers[10], ~0u, WINHTTP_ADDREQ_FLAG_ADD);
ok(!ret, "WinHttpAddRequestHeaders failed\n");
- ret = WinHttpAddRequestHeaders(request, test_headers[11], ~0UL, WINHTTP_ADDREQ_FLAG_ADD);
+ ret = WinHttpAddRequestHeaders(request, test_headers[11], ~0u, WINHTTP_ADDREQ_FLAG_ADD);
ok(!ret, "WinHttpAddRequestHeaders failed\n");
- ret = WinHttpAddRequestHeaders(request, test_headers[12], ~0UL, WINHTTP_ADDREQ_FLAG_ADD);
+ ret = WinHttpAddRequestHeaders(request, test_headers[12], ~0u, WINHTTP_ADDREQ_FLAG_ADD);
ok(!ret, "WinHttpAddRequestHeaders failed\n");
- ret = WinHttpAddRequestHeaders(request, test_headers[13], ~0UL, WINHTTP_ADDREQ_FLAG_ADD);
+ ret = WinHttpAddRequestHeaders(request, test_headers[13], ~0u, WINHTTP_ADDREQ_FLAG_ADD);
ok(ret, "WinHttpAddRequestHeaders failed\n");
index = 0;
@@ -556,8 +706,9 @@ static void test_secure_connection(void)
static const WCHAR google[] = {'w','w','w','.','g','o','o','g','l','e','.','c','o','m',0};
HANDLE ses, con, req;
- DWORD size, status, policy;
+ DWORD size, status, policy, bitness;
BOOL ret;
+ CERT_CONTEXT *cert;
ses = WinHttpOpen(test_useragent, 0, NULL, NULL, 0);
ok(ses != NULL, "failed to open session %u\n", GetLastError());
@@ -591,6 +742,14 @@ static void test_secure_connection(void)
ret = WinHttpSendRequest(req, NULL, 0, NULL, 0, 0, 0);
ok(ret, "failed to send request %u\n", GetLastError());
+ size = sizeof(cert);
+ ret = WinHttpQueryOption(req, WINHTTP_OPTION_SERVER_CERT_CONTEXT, &cert, &size );
+ ok(ret, "failed to retrieve certificate context %u\n", GetLastError());
+
+ size = sizeof(bitness);
+ ret = WinHttpQueryOption(req, WINHTTP_OPTION_SECURITY_KEY_BITNESS, &bitness, &size );
+ ok(ret, "failed to retrieve key bitness %u\n", GetLastError());
+
ret = WinHttpReceiveResponse(req, NULL);
ok(ret, "failed to receive response %u\n", GetLastError());
@@ -667,4 +826,5 @@ START_TEST (winhttp)
test_WinHttpAddHeaders();
test_secure_connection();
test_request_parameter_defaults();
+ test_QueryOption();
}
diff --git a/rostests/winetests/winhttp/winhttp.rbuild b/rostests/winetests/winhttp/winhttp.rbuild
index a49b528e5c2..a08973191e2 100644
--- a/rostests/winetests/winhttp/winhttp.rbuild
+++ b/rostests/winetests/winhttp/winhttp.rbuild
@@ -7,6 +7,7 @@
notification.c
testlist.c
+ url.c
winhttp.c
wine
winhttp
diff --git a/rostests/winetests/wininet/ftp.c b/rostests/winetests/wininet/ftp.c
index 992bce99feb..a785fa983f4 100644
--- a/rostests/winetests/wininet/ftp.c
+++ b/rostests/winetests/wininet/ftp.c
@@ -25,7 +25,6 @@
* TODO:
* Add W-function tests.
* Add missing function tests:
- * FtpFindFirstFile
* FtpGetFileSize
* FtpSetCurrentDirectory
*/
@@ -66,6 +65,8 @@ static void test_connect(HINTERNET hInternet)
* anonymous : NULL
* NULL : IEUser@
* NULL : NULL
+ * "" : IEUser@
+ * "" : NULL
*/
SetLastError(0xdeadbeef);
@@ -85,6 +86,13 @@ static void test_connect(HINTERNET hInternet)
ok ( GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+ SetLastError(0xdeadbeef);
+ hFtp = InternetConnect(hInternet, "ftp.winehq.org", INTERNET_DEFAULT_FTP_PORT, "", "IEUser@",
+ INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
+ ok(!hFtp, "Expected InternetConnect to fail\n");
+ ok(GetLastError() == ERROR_INVALID_PARAMETER,
+ "Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
+
/* Using a NULL username and password will be interpreted as anonymous ftp. The username will be 'anonymous' the password
* is created via some simple heuristics (see dlls/wininet/ftp.c).
* On Wine this registry key is not set by default so (NULL, NULL) will result in anonymous ftp with an (most likely) not
@@ -103,6 +111,20 @@ static void test_connect(HINTERNET hInternet)
ok ( hFtp != NULL, "InternetConnect failed : %d\n", GetLastError());
ok ( GetLastError() == ERROR_SUCCESS,
"ERROR_SUCCESS, got %d\n", GetLastError());
+
+ SetLastError(0xdeadbeef);
+ hFtp = InternetConnect(hInternet, "ftp.winehq.org", INTERNET_DEFAULT_FTP_PORT, "", NULL,
+ INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
+ if (!hFtp)
+ {
+ ok(GetLastError() == ERROR_INTERNET_LOGIN_FAILURE,
+ "Expected ERROR_INTERNET_LOGIN_FAILURE, got %d\n", GetLastError());
+ }
+ else
+ {
+ ok(GetLastError() == ERROR_SUCCESS,
+ "Expected ERROR_SUCCESS, got %d\n", GetLastError());
+ }
}
static void test_createdir(HINTERNET hFtp, HINTERNET hConnect)
@@ -259,7 +281,6 @@ static void test_getfile(HINTERNET hFtp, HINTERNET hConnect)
ok ( GetLastError() == ERROR_INTERNET_EXTENDED_ERROR,
"Expected ERROR_INTERNET_EXTENDED_ERROR, got %d\n", GetLastError());
/* Currently Wine always creates the local file (even on failure) which is not correct, hence the test */
- todo_wine
ok (GetFileAttributesA("should_also_be_non_existing_deadbeef") == INVALID_FILE_ATTRIBUTES,
"Local file should not have been created\n");
@@ -280,7 +301,6 @@ static void test_getfile(HINTERNET hFtp, HINTERNET hConnect)
ok ( GetLastError() == ERROR_INTERNET_EXTENDED_ERROR,
"Expected ERROR_INTERNET_EXTENDED_ERROR, got %d\n", GetLastError());
/* Currently Wine always creates the local file (even on failure) which is not correct, hence the test */
- todo_wine
ok (GetFileAttributesA("should_also_be_non_existing_deadbeef") == INVALID_FILE_ATTRIBUTES,
"Local file should not have been created\n");
@@ -387,7 +407,9 @@ static void test_openfile(HINTERNET hFtp, HINTERNET hConnect)
SetLastError(0xdeadbeef);
hOpenFile = FtpOpenFileA(hFtp, "welcome.msg", GENERIC_READ, FTP_TRANSFER_TYPE_ASCII, 0);
ok ( hOpenFile != NULL, "Expected FtpOpenFileA to succeed\n");
- ok ( GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", GetLastError());
+ ok ( GetLastError() == ERROR_SUCCESS ||
+ broken(GetLastError() == ERROR_FILE_NOT_FOUND), /* Win98 */
+ "Expected ERROR_SUCCESS, got %u\n", GetLastError());
if (hOpenFile)
{
@@ -700,6 +722,89 @@ static void test_command(HINTERNET hFtp, HINTERNET hConnect)
}
}
+static void test_find_first_file(HINTERNET hFtp, HINTERNET hConnect)
+{
+ WIN32_FIND_DATA findData;
+ HINTERNET hSearch;
+ HINTERNET hSearch2;
+ HINTERNET hOpenFile;
+
+ /* NULL as the search file ought to return the first file in the directory */
+ SetLastError(0xdeadbeef);
+ hSearch = FtpFindFirstFileA(hFtp, NULL, &findData, 0, 0);
+ ok ( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" );
+
+ /* This should fail as the previous handle wasn't closed */
+ SetLastError(0xdeadbeef);
+ hSearch2 = FtpFindFirstFileA(hFtp, "welcome.msg", &findData, 0, 0);
+ todo_wine ok ( hSearch2 == NULL, "Expected FtpFindFirstFileA to fail\n" );
+ todo_wine ok ( GetLastError() == ERROR_FTP_TRANSFER_IN_PROGRESS,
+ "Expected ERROR_FTP_TRANSFER_IN_PROGRESS, got %d\n", GetLastError() );
+ InternetCloseHandle(hSearch2); /* Just in case */
+
+ InternetCloseHandle(hSearch);
+
+ /* Try a valid filename in a subdirectory search */
+ SetLastError(0xdeadbeef);
+ hSearch = FtpFindFirstFileA(hFtp, "pub/wine", &findData, 0, 0);
+ todo_wine ok ( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" );
+ InternetCloseHandle(hSearch);
+
+ /* Try a valid filename in a subdirectory wildcard search */
+ SetLastError(0xdeadbeef);
+ hSearch = FtpFindFirstFileA(hFtp, "pub/w*", &findData, 0, 0);
+ todo_wine ok ( hSearch != NULL, "Expected FtpFindFirstFileA to pass\n" );
+ InternetCloseHandle(hSearch);
+
+ /* Try an invalid wildcard search */
+ SetLastError(0xdeadbeef);
+ hSearch = FtpFindFirstFileA(hFtp, "*/w*", &findData, 0, 0);
+ ok ( hSearch == NULL, "Expected FtpFindFirstFileA to fail\n" );
+ InternetCloseHandle(hSearch); /* Just in case */
+
+ /* Try FindFirstFile between FtpOpenFile and InternetCloseHandle */
+ SetLastError(0xdeadbeef);
+ hOpenFile = FtpOpenFileA(hFtp, "welcome.msg", GENERIC_READ, FTP_TRANSFER_TYPE_ASCII, 0);
+ ok ( hOpenFile != NULL, "Expected FtpOpenFileA to succeed\n" );
+ ok ( GetLastError() == ERROR_SUCCESS ||
+ broken(GetLastError() == ERROR_FILE_NOT_FOUND), /* Win98 */
+ "Expected ERROR_SUCCESS, got %u\n", GetLastError() );
+
+ /* This should fail as the OpenFile handle wasn't closed */
+ SetLastError(0xdeadbeef);
+ hSearch = FtpFindFirstFileA(hFtp, "welcome.msg", &findData, 0, 0);
+ ok ( hSearch == NULL, "Expected FtpFindFirstFileA to fail\n" );
+ ok ( GetLastError() == ERROR_FTP_TRANSFER_IN_PROGRESS,
+ "Expected ERROR_FTP_TRANSFER_IN_PROGRESS, got %d\n", GetLastError() );
+ InternetCloseHandle(hSearch); /* Just in case */
+
+ InternetCloseHandle(hOpenFile);
+
+ /* Test using a nonexistent filename */
+ SetLastError(0xdeadbeef);
+ hSearch = FtpFindFirstFileA(hFtp, "this_file_should_not_exist", &findData, 0, 0);
+ ok ( hSearch == NULL, "Expected FtpFindFirstFileA to fail\n" );
+ todo_wine ok ( GetLastError() == ERROR_INTERNET_EXTENDED_ERROR,
+ "Expected ERROR_INTERNET_EXTENDED_ERROR, got %d\n", GetLastError() );
+ InternetCloseHandle(hSearch); /* Just in case */
+
+ /* Test using a nonexistent filename and a wildcard */
+ SetLastError(0xdeadbeef);
+ hSearch = FtpFindFirstFileA(hFtp, "this_file_should_not_exist*", &findData, 0, 0);
+ ok ( hSearch == NULL, "Expected FtpFindFirstFileA to fail\n" );
+ todo_wine ok ( GetLastError() == ERROR_NO_MORE_FILES,
+ "Expected ERROR_NO_MORE_FILES, got %d\n", GetLastError() );
+ InternetCloseHandle(hSearch); /* Just in case */
+
+ /* Test using an invalid handle type */
+ SetLastError(0xdeadbeef);
+ hSearch = FtpFindFirstFileA(hConnect, "welcome.msg", &findData, 0, 0);
+ ok ( hSearch == NULL, "Expected FtpFindFirstFileA to fail\n" );
+ ok ( GetLastError() == ERROR_INTERNET_INCORRECT_HANDLE_TYPE,
+ "Expected ERROR_INTERNET_INCORRECT_HANDLE_TYPE, got %d\n", GetLastError() );
+ InternetCloseHandle(hSearch); /* Just in case */
+}
+
static void test_get_current_dir(HINTERNET hFtp, HINTERNET hConnect)
{
BOOL bRet;
@@ -830,6 +935,7 @@ START_TEST(ftp)
test_removedir(hFtp, hHttp);
test_renamefile(hFtp, hHttp);
test_command(hFtp, hHttp);
+ test_find_first_file(hFtp, hHttp);
test_get_current_dir(hFtp, hHttp);
InternetCloseHandle(hHttp);
diff --git a/rostests/winetests/wininet/generated.c b/rostests/winetests/wininet/generated.c
index e88b3bfeb13..ceb21deb869 100644
--- a/rostests/winetests/wininet/generated.c
+++ b/rostests/winetests/wininet/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. */
/*
@@ -31,22 +31,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
@@ -63,857 +55,1275 @@
* 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_GOPHER_ABSTRACT_ATTRIBUTE_TYPEA(void)
{
/* GOPHER_ABSTRACT_ATTRIBUTE_TYPEA (pack 4) */
- TEST_TYPE(GOPHER_ABSTRACT_ATTRIBUTE_TYPEA, 8, 4);
- TEST_FIELD(GOPHER_ABSTRACT_ATTRIBUTE_TYPEA, LPCSTR, ShortAbstract, 0, 4, 4);
- TEST_FIELD(GOPHER_ABSTRACT_ATTRIBUTE_TYPEA, LPCSTR, AbstractFile, 4, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_ABSTRACT_ATTRIBUTE_TYPEA, 8)
+ TEST_TYPE_ALIGN (GOPHER_ABSTRACT_ATTRIBUTE_TYPEA, 4)
+ TEST_FIELD_SIZE (GOPHER_ABSTRACT_ATTRIBUTE_TYPEA, ShortAbstract, 4)
+ TEST_FIELD_ALIGN (GOPHER_ABSTRACT_ATTRIBUTE_TYPEA, ShortAbstract, 4)
+ TEST_FIELD_OFFSET(GOPHER_ABSTRACT_ATTRIBUTE_TYPEA, ShortAbstract, 0)
+ TEST_FIELD_SIZE (GOPHER_ABSTRACT_ATTRIBUTE_TYPEA, AbstractFile, 4)
+ TEST_FIELD_ALIGN (GOPHER_ABSTRACT_ATTRIBUTE_TYPEA, AbstractFile, 4)
+ TEST_FIELD_OFFSET(GOPHER_ABSTRACT_ATTRIBUTE_TYPEA, AbstractFile, 4)
}
static void test_pack_GOPHER_ABSTRACT_ATTRIBUTE_TYPEW(void)
{
/* GOPHER_ABSTRACT_ATTRIBUTE_TYPEW (pack 4) */
- TEST_TYPE(GOPHER_ABSTRACT_ATTRIBUTE_TYPEW, 8, 4);
- TEST_FIELD(GOPHER_ABSTRACT_ATTRIBUTE_TYPEW, LPCWSTR, ShortAbstract, 0, 4, 4);
- TEST_FIELD(GOPHER_ABSTRACT_ATTRIBUTE_TYPEW, LPCWSTR, AbstractFile, 4, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_ABSTRACT_ATTRIBUTE_TYPEW, 8)
+ TEST_TYPE_ALIGN (GOPHER_ABSTRACT_ATTRIBUTE_TYPEW, 4)
+ TEST_FIELD_SIZE (GOPHER_ABSTRACT_ATTRIBUTE_TYPEW, ShortAbstract, 4)
+ TEST_FIELD_ALIGN (GOPHER_ABSTRACT_ATTRIBUTE_TYPEW, ShortAbstract, 4)
+ TEST_FIELD_OFFSET(GOPHER_ABSTRACT_ATTRIBUTE_TYPEW, ShortAbstract, 0)
+ TEST_FIELD_SIZE (GOPHER_ABSTRACT_ATTRIBUTE_TYPEW, AbstractFile, 4)
+ TEST_FIELD_ALIGN (GOPHER_ABSTRACT_ATTRIBUTE_TYPEW, AbstractFile, 4)
+ TEST_FIELD_OFFSET(GOPHER_ABSTRACT_ATTRIBUTE_TYPEW, AbstractFile, 4)
}
static void test_pack_GOPHER_ADMIN_ATTRIBUTE_TYPEA(void)
{
/* GOPHER_ADMIN_ATTRIBUTE_TYPEA (pack 4) */
- TEST_TYPE(GOPHER_ADMIN_ATTRIBUTE_TYPEA, 8, 4);
- TEST_FIELD(GOPHER_ADMIN_ATTRIBUTE_TYPEA, LPCSTR, Comment, 0, 4, 4);
- TEST_FIELD(GOPHER_ADMIN_ATTRIBUTE_TYPEA, LPCSTR, EmailAddress, 4, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_ADMIN_ATTRIBUTE_TYPEA, 8)
+ TEST_TYPE_ALIGN (GOPHER_ADMIN_ATTRIBUTE_TYPEA, 4)
+ TEST_FIELD_SIZE (GOPHER_ADMIN_ATTRIBUTE_TYPEA, Comment, 4)
+ TEST_FIELD_ALIGN (GOPHER_ADMIN_ATTRIBUTE_TYPEA, Comment, 4)
+ TEST_FIELD_OFFSET(GOPHER_ADMIN_ATTRIBUTE_TYPEA, Comment, 0)
+ TEST_FIELD_SIZE (GOPHER_ADMIN_ATTRIBUTE_TYPEA, EmailAddress, 4)
+ TEST_FIELD_ALIGN (GOPHER_ADMIN_ATTRIBUTE_TYPEA, EmailAddress, 4)
+ TEST_FIELD_OFFSET(GOPHER_ADMIN_ATTRIBUTE_TYPEA, EmailAddress, 4)
}
static void test_pack_GOPHER_ADMIN_ATTRIBUTE_TYPEW(void)
{
/* GOPHER_ADMIN_ATTRIBUTE_TYPEW (pack 4) */
- TEST_TYPE(GOPHER_ADMIN_ATTRIBUTE_TYPEW, 8, 4);
- TEST_FIELD(GOPHER_ADMIN_ATTRIBUTE_TYPEW, LPCWSTR, Comment, 0, 4, 4);
- TEST_FIELD(GOPHER_ADMIN_ATTRIBUTE_TYPEW, LPCWSTR, EmailAddress, 4, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_ADMIN_ATTRIBUTE_TYPEW, 8)
+ TEST_TYPE_ALIGN (GOPHER_ADMIN_ATTRIBUTE_TYPEW, 4)
+ TEST_FIELD_SIZE (GOPHER_ADMIN_ATTRIBUTE_TYPEW, Comment, 4)
+ TEST_FIELD_ALIGN (GOPHER_ADMIN_ATTRIBUTE_TYPEW, Comment, 4)
+ TEST_FIELD_OFFSET(GOPHER_ADMIN_ATTRIBUTE_TYPEW, Comment, 0)
+ TEST_FIELD_SIZE (GOPHER_ADMIN_ATTRIBUTE_TYPEW, EmailAddress, 4)
+ TEST_FIELD_ALIGN (GOPHER_ADMIN_ATTRIBUTE_TYPEW, EmailAddress, 4)
+ TEST_FIELD_OFFSET(GOPHER_ADMIN_ATTRIBUTE_TYPEW, EmailAddress, 4)
}
static void test_pack_GOPHER_ASK_ATTRIBUTE_TYPEA(void)
{
/* GOPHER_ASK_ATTRIBUTE_TYPEA (pack 4) */
- TEST_TYPE(GOPHER_ASK_ATTRIBUTE_TYPEA, 8, 4);
- TEST_FIELD(GOPHER_ASK_ATTRIBUTE_TYPEA, LPCSTR, QuestionType, 0, 4, 4);
- TEST_FIELD(GOPHER_ASK_ATTRIBUTE_TYPEA, LPCSTR, QuestionText, 4, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_ASK_ATTRIBUTE_TYPEA, 8)
+ TEST_TYPE_ALIGN (GOPHER_ASK_ATTRIBUTE_TYPEA, 4)
+ TEST_FIELD_SIZE (GOPHER_ASK_ATTRIBUTE_TYPEA, QuestionType, 4)
+ TEST_FIELD_ALIGN (GOPHER_ASK_ATTRIBUTE_TYPEA, QuestionType, 4)
+ TEST_FIELD_OFFSET(GOPHER_ASK_ATTRIBUTE_TYPEA, QuestionType, 0)
+ TEST_FIELD_SIZE (GOPHER_ASK_ATTRIBUTE_TYPEA, QuestionText, 4)
+ TEST_FIELD_ALIGN (GOPHER_ASK_ATTRIBUTE_TYPEA, QuestionText, 4)
+ TEST_FIELD_OFFSET(GOPHER_ASK_ATTRIBUTE_TYPEA, QuestionText, 4)
}
static void test_pack_GOPHER_ASK_ATTRIBUTE_TYPEW(void)
{
/* GOPHER_ASK_ATTRIBUTE_TYPEW (pack 4) */
- TEST_TYPE(GOPHER_ASK_ATTRIBUTE_TYPEW, 8, 4);
- TEST_FIELD(GOPHER_ASK_ATTRIBUTE_TYPEW, LPCWSTR, QuestionType, 0, 4, 4);
- TEST_FIELD(GOPHER_ASK_ATTRIBUTE_TYPEW, LPCWSTR, QuestionText, 4, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_ASK_ATTRIBUTE_TYPEW, 8)
+ TEST_TYPE_ALIGN (GOPHER_ASK_ATTRIBUTE_TYPEW, 4)
+ TEST_FIELD_SIZE (GOPHER_ASK_ATTRIBUTE_TYPEW, QuestionType, 4)
+ TEST_FIELD_ALIGN (GOPHER_ASK_ATTRIBUTE_TYPEW, QuestionType, 4)
+ TEST_FIELD_OFFSET(GOPHER_ASK_ATTRIBUTE_TYPEW, QuestionType, 0)
+ TEST_FIELD_SIZE (GOPHER_ASK_ATTRIBUTE_TYPEW, QuestionText, 4)
+ TEST_FIELD_ALIGN (GOPHER_ASK_ATTRIBUTE_TYPEW, QuestionText, 4)
+ TEST_FIELD_OFFSET(GOPHER_ASK_ATTRIBUTE_TYPEW, QuestionText, 4)
}
static void test_pack_GOPHER_ATTRIBUTE_ENUMERATORA(void)
{
/* GOPHER_ATTRIBUTE_ENUMERATORA */
- TEST_TYPE(GOPHER_ATTRIBUTE_ENUMERATORA, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_ATTRIBUTE_ENUMERATORA, 4)
+ TEST_TYPE_ALIGN (GOPHER_ATTRIBUTE_ENUMERATORA, 4)
}
static void test_pack_GOPHER_ATTRIBUTE_ENUMERATORW(void)
{
/* GOPHER_ATTRIBUTE_ENUMERATORW */
- TEST_TYPE(GOPHER_ATTRIBUTE_ENUMERATORW, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_ATTRIBUTE_ENUMERATORW, 4)
+ TEST_TYPE_ALIGN (GOPHER_ATTRIBUTE_ENUMERATORW, 4)
}
static void test_pack_GOPHER_ATTRIBUTE_TYPEA(void)
{
/* GOPHER_ATTRIBUTE_TYPEA (pack 4) */
- TEST_FIELD(GOPHER_ATTRIBUTE_TYPEA, DWORD, CategoryId, 0, 4, 4);
- TEST_FIELD(GOPHER_ATTRIBUTE_TYPEA, DWORD, AttributeId, 4, 4, 4);
+ TEST_FIELD_SIZE (GOPHER_ATTRIBUTE_TYPEA, CategoryId, 4)
+ TEST_FIELD_ALIGN (GOPHER_ATTRIBUTE_TYPEA, CategoryId, 4)
+ TEST_FIELD_OFFSET(GOPHER_ATTRIBUTE_TYPEA, CategoryId, 0)
+ TEST_FIELD_SIZE (GOPHER_ATTRIBUTE_TYPEA, AttributeId, 4)
+ TEST_FIELD_ALIGN (GOPHER_ATTRIBUTE_TYPEA, AttributeId, 4)
+ TEST_FIELD_OFFSET(GOPHER_ATTRIBUTE_TYPEA, AttributeId, 4)
}
static void test_pack_GOPHER_ATTRIBUTE_TYPEW(void)
{
/* GOPHER_ATTRIBUTE_TYPEW (pack 4) */
- TEST_FIELD(GOPHER_ATTRIBUTE_TYPEW, DWORD, CategoryId, 0, 4, 4);
- TEST_FIELD(GOPHER_ATTRIBUTE_TYPEW, DWORD, AttributeId, 4, 4, 4);
+ TEST_FIELD_SIZE (GOPHER_ATTRIBUTE_TYPEW, CategoryId, 4)
+ TEST_FIELD_ALIGN (GOPHER_ATTRIBUTE_TYPEW, CategoryId, 4)
+ TEST_FIELD_OFFSET(GOPHER_ATTRIBUTE_TYPEW, CategoryId, 0)
+ TEST_FIELD_SIZE (GOPHER_ATTRIBUTE_TYPEW, AttributeId, 4)
+ TEST_FIELD_ALIGN (GOPHER_ATTRIBUTE_TYPEW, AttributeId, 4)
+ TEST_FIELD_OFFSET(GOPHER_ATTRIBUTE_TYPEW, AttributeId, 4)
}
static void test_pack_GOPHER_FIND_DATAA(void)
{
/* GOPHER_FIND_DATAA (pack 4) */
- TEST_TYPE(GOPHER_FIND_DATAA, 808, 4);
- TEST_FIELD(GOPHER_FIND_DATAA, CHAR[MAX_GOPHER_DISPLAY_TEXT + 1], DisplayString, 0, 129, 1);
- TEST_FIELD(GOPHER_FIND_DATAA, DWORD, GopherType, 132, 4, 4);
- TEST_FIELD(GOPHER_FIND_DATAA, DWORD, SizeLow, 136, 4, 4);
- TEST_FIELD(GOPHER_FIND_DATAA, DWORD, SizeHigh, 140, 4, 4);
- TEST_FIELD(GOPHER_FIND_DATAA, FILETIME, LastModificationTime, 144, 8, 4);
- TEST_FIELD(GOPHER_FIND_DATAA, CHAR[MAX_GOPHER_LOCATOR_LENGTH + 1], Locator, 152, 654, 1);
+ TEST_TYPE_SIZE (GOPHER_FIND_DATAA, 808)
+ TEST_TYPE_ALIGN (GOPHER_FIND_DATAA, 4)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAA, DisplayString, 129)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAA, DisplayString, 1)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAA, DisplayString, 0)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAA, GopherType, 4)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAA, GopherType, 4)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAA, GopherType, 132)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAA, SizeLow, 4)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAA, SizeLow, 4)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAA, SizeLow, 136)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAA, SizeHigh, 4)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAA, SizeHigh, 4)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAA, SizeHigh, 140)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAA, LastModificationTime, 8)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAA, LastModificationTime, 4)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAA, LastModificationTime, 144)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAA, Locator, 654)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAA, Locator, 1)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAA, Locator, 152)
}
static void test_pack_GOPHER_FIND_DATAW(void)
{
/* GOPHER_FIND_DATAW (pack 4) */
- TEST_TYPE(GOPHER_FIND_DATAW, 1588, 4);
- TEST_FIELD(GOPHER_FIND_DATAW, WCHAR[MAX_GOPHER_DISPLAY_TEXT + 1], DisplayString, 0, 258, 2);
- TEST_FIELD(GOPHER_FIND_DATAW, DWORD, GopherType, 260, 4, 4);
- TEST_FIELD(GOPHER_FIND_DATAW, DWORD, SizeLow, 264, 4, 4);
- TEST_FIELD(GOPHER_FIND_DATAW, DWORD, SizeHigh, 268, 4, 4);
- TEST_FIELD(GOPHER_FIND_DATAW, FILETIME, LastModificationTime, 272, 8, 4);
- TEST_FIELD(GOPHER_FIND_DATAW, WCHAR[MAX_GOPHER_LOCATOR_LENGTH + 1], Locator, 280, 1308, 2);
+ TEST_TYPE_SIZE (GOPHER_FIND_DATAW, 1588)
+ TEST_TYPE_ALIGN (GOPHER_FIND_DATAW, 4)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAW, DisplayString, 258)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAW, DisplayString, 2)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAW, DisplayString, 0)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAW, GopherType, 4)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAW, GopherType, 4)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAW, GopherType, 260)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAW, SizeLow, 4)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAW, SizeLow, 4)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAW, SizeLow, 264)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAW, SizeHigh, 4)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAW, SizeHigh, 4)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAW, SizeHigh, 268)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAW, LastModificationTime, 8)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAW, LastModificationTime, 4)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAW, LastModificationTime, 272)
+ TEST_FIELD_SIZE (GOPHER_FIND_DATAW, Locator, 1308)
+ TEST_FIELD_ALIGN (GOPHER_FIND_DATAW, Locator, 2)
+ TEST_FIELD_OFFSET(GOPHER_FIND_DATAW, Locator, 280)
}
static void test_pack_GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE(void)
{
/* GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE (pack 4) */
- TEST_TYPE(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, 24, 4);
- TEST_FIELD(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, INT, DegreesNorth, 0, 4, 4);
- TEST_FIELD(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, INT, MinutesNorth, 4, 4, 4);
- TEST_FIELD(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, INT, SecondsNorth, 8, 4, 4);
- TEST_FIELD(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, INT, DegreesEast, 12, 4, 4);
- TEST_FIELD(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, INT, MinutesEast, 16, 4, 4);
- TEST_FIELD(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, INT, SecondsEast, 20, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, 24)
+ TEST_TYPE_ALIGN (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, 4)
+ TEST_FIELD_SIZE (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, DegreesNorth, 4)
+ TEST_FIELD_ALIGN (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, DegreesNorth, 4)
+ TEST_FIELD_OFFSET(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, DegreesNorth, 0)
+ TEST_FIELD_SIZE (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, MinutesNorth, 4)
+ TEST_FIELD_ALIGN (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, MinutesNorth, 4)
+ TEST_FIELD_OFFSET(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, MinutesNorth, 4)
+ TEST_FIELD_SIZE (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, SecondsNorth, 4)
+ TEST_FIELD_ALIGN (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, SecondsNorth, 4)
+ TEST_FIELD_OFFSET(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, SecondsNorth, 8)
+ TEST_FIELD_SIZE (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, DegreesEast, 4)
+ TEST_FIELD_ALIGN (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, DegreesEast, 4)
+ TEST_FIELD_OFFSET(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, DegreesEast, 12)
+ TEST_FIELD_SIZE (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, MinutesEast, 4)
+ TEST_FIELD_ALIGN (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, MinutesEast, 4)
+ TEST_FIELD_OFFSET(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, MinutesEast, 16)
+ TEST_FIELD_SIZE (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, SecondsEast, 4)
+ TEST_FIELD_ALIGN (GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, SecondsEast, 4)
+ TEST_FIELD_OFFSET(GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, SecondsEast, 20)
}
static void test_pack_GOPHER_LOCATION_ATTRIBUTE_TYPEA(void)
{
/* GOPHER_LOCATION_ATTRIBUTE_TYPEA (pack 4) */
- TEST_TYPE(GOPHER_LOCATION_ATTRIBUTE_TYPEA, 4, 4);
- TEST_FIELD(GOPHER_LOCATION_ATTRIBUTE_TYPEA, LPCSTR, Location, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_LOCATION_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (GOPHER_LOCATION_ATTRIBUTE_TYPEA, 4)
+ TEST_FIELD_SIZE (GOPHER_LOCATION_ATTRIBUTE_TYPEA, Location, 4)
+ TEST_FIELD_ALIGN (GOPHER_LOCATION_ATTRIBUTE_TYPEA, Location, 4)
+ TEST_FIELD_OFFSET(GOPHER_LOCATION_ATTRIBUTE_TYPEA, Location, 0)
}
static void test_pack_GOPHER_LOCATION_ATTRIBUTE_TYPEW(void)
{
/* GOPHER_LOCATION_ATTRIBUTE_TYPEW (pack 4) */
- TEST_TYPE(GOPHER_LOCATION_ATTRIBUTE_TYPEW, 4, 4);
- TEST_FIELD(GOPHER_LOCATION_ATTRIBUTE_TYPEW, LPCWSTR, Location, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_LOCATION_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (GOPHER_LOCATION_ATTRIBUTE_TYPEW, 4)
+ TEST_FIELD_SIZE (GOPHER_LOCATION_ATTRIBUTE_TYPEW, Location, 4)
+ TEST_FIELD_ALIGN (GOPHER_LOCATION_ATTRIBUTE_TYPEW, Location, 4)
+ TEST_FIELD_OFFSET(GOPHER_LOCATION_ATTRIBUTE_TYPEW, Location, 0)
}
static void test_pack_GOPHER_MOD_DATE_ATTRIBUTE_TYPE(void)
{
/* GOPHER_MOD_DATE_ATTRIBUTE_TYPE (pack 4) */
- TEST_TYPE(GOPHER_MOD_DATE_ATTRIBUTE_TYPE, 8, 4);
- TEST_FIELD(GOPHER_MOD_DATE_ATTRIBUTE_TYPE, FILETIME, DateAndTime, 0, 8, 4);
+ TEST_TYPE_SIZE (GOPHER_MOD_DATE_ATTRIBUTE_TYPE, 8)
+ TEST_TYPE_ALIGN (GOPHER_MOD_DATE_ATTRIBUTE_TYPE, 4)
+ TEST_FIELD_SIZE (GOPHER_MOD_DATE_ATTRIBUTE_TYPE, DateAndTime, 8)
+ TEST_FIELD_ALIGN (GOPHER_MOD_DATE_ATTRIBUTE_TYPE, DateAndTime, 4)
+ TEST_FIELD_OFFSET(GOPHER_MOD_DATE_ATTRIBUTE_TYPE, DateAndTime, 0)
}
static void test_pack_GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA(void)
{
/* GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA (pack 4) */
- TEST_TYPE(GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, 4, 4);
- TEST_FIELD(GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, LPCSTR, Organization, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, 4)
+ TEST_FIELD_SIZE (GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, Organization, 4)
+ TEST_FIELD_ALIGN (GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, Organization, 4)
+ TEST_FIELD_OFFSET(GOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, Organization, 0)
}
static void test_pack_GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW(void)
{
/* GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW (pack 4) */
- TEST_TYPE(GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, 4, 4);
- TEST_FIELD(GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, LPCWSTR, Organization, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, 4)
+ TEST_FIELD_SIZE (GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, Organization, 4)
+ TEST_FIELD_ALIGN (GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, Organization, 4)
+ TEST_FIELD_OFFSET(GOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, Organization, 0)
}
static void test_pack_GOPHER_PROVIDER_ATTRIBUTE_TYPEA(void)
{
/* GOPHER_PROVIDER_ATTRIBUTE_TYPEA (pack 4) */
- TEST_TYPE(GOPHER_PROVIDER_ATTRIBUTE_TYPEA, 4, 4);
- TEST_FIELD(GOPHER_PROVIDER_ATTRIBUTE_TYPEA, LPCSTR, Provider, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_PROVIDER_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (GOPHER_PROVIDER_ATTRIBUTE_TYPEA, 4)
+ TEST_FIELD_SIZE (GOPHER_PROVIDER_ATTRIBUTE_TYPEA, Provider, 4)
+ TEST_FIELD_ALIGN (GOPHER_PROVIDER_ATTRIBUTE_TYPEA, Provider, 4)
+ TEST_FIELD_OFFSET(GOPHER_PROVIDER_ATTRIBUTE_TYPEA, Provider, 0)
}
static void test_pack_GOPHER_PROVIDER_ATTRIBUTE_TYPEW(void)
{
/* GOPHER_PROVIDER_ATTRIBUTE_TYPEW (pack 4) */
- TEST_TYPE(GOPHER_PROVIDER_ATTRIBUTE_TYPEW, 4, 4);
- TEST_FIELD(GOPHER_PROVIDER_ATTRIBUTE_TYPEW, LPCWSTR, Provider, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_PROVIDER_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (GOPHER_PROVIDER_ATTRIBUTE_TYPEW, 4)
+ TEST_FIELD_SIZE (GOPHER_PROVIDER_ATTRIBUTE_TYPEW, Provider, 4)
+ TEST_FIELD_ALIGN (GOPHER_PROVIDER_ATTRIBUTE_TYPEW, Provider, 4)
+ TEST_FIELD_OFFSET(GOPHER_PROVIDER_ATTRIBUTE_TYPEW, Provider, 0)
}
static void test_pack_GOPHER_SCORE_ATTRIBUTE_TYPE(void)
{
/* GOPHER_SCORE_ATTRIBUTE_TYPE (pack 4) */
- TEST_TYPE(GOPHER_SCORE_ATTRIBUTE_TYPE, 4, 4);
- TEST_FIELD(GOPHER_SCORE_ATTRIBUTE_TYPE, INT, Score, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_SCORE_ATTRIBUTE_TYPE, 4)
+ TEST_TYPE_ALIGN (GOPHER_SCORE_ATTRIBUTE_TYPE, 4)
+ TEST_FIELD_SIZE (GOPHER_SCORE_ATTRIBUTE_TYPE, Score, 4)
+ TEST_FIELD_ALIGN (GOPHER_SCORE_ATTRIBUTE_TYPE, Score, 4)
+ TEST_FIELD_OFFSET(GOPHER_SCORE_ATTRIBUTE_TYPE, Score, 0)
}
static void test_pack_GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE(void)
{
/* GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE (pack 4) */
- TEST_TYPE(GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, 8, 4);
- TEST_FIELD(GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, INT, LowerBound, 0, 4, 4);
- TEST_FIELD(GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, INT, UpperBound, 4, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, 8)
+ TEST_TYPE_ALIGN (GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, 4)
+ TEST_FIELD_SIZE (GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, LowerBound, 4)
+ TEST_FIELD_ALIGN (GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, LowerBound, 4)
+ TEST_FIELD_OFFSET(GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, LowerBound, 0)
+ TEST_FIELD_SIZE (GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, UpperBound, 4)
+ TEST_FIELD_ALIGN (GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, UpperBound, 4)
+ TEST_FIELD_OFFSET(GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, UpperBound, 4)
}
static void test_pack_GOPHER_SITE_ATTRIBUTE_TYPEA(void)
{
/* GOPHER_SITE_ATTRIBUTE_TYPEA (pack 4) */
- TEST_TYPE(GOPHER_SITE_ATTRIBUTE_TYPEA, 4, 4);
- TEST_FIELD(GOPHER_SITE_ATTRIBUTE_TYPEA, LPCSTR, Site, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_SITE_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (GOPHER_SITE_ATTRIBUTE_TYPEA, 4)
+ TEST_FIELD_SIZE (GOPHER_SITE_ATTRIBUTE_TYPEA, Site, 4)
+ TEST_FIELD_ALIGN (GOPHER_SITE_ATTRIBUTE_TYPEA, Site, 4)
+ TEST_FIELD_OFFSET(GOPHER_SITE_ATTRIBUTE_TYPEA, Site, 0)
}
static void test_pack_GOPHER_SITE_ATTRIBUTE_TYPEW(void)
{
/* GOPHER_SITE_ATTRIBUTE_TYPEW (pack 4) */
- TEST_TYPE(GOPHER_SITE_ATTRIBUTE_TYPEW, 4, 4);
- TEST_FIELD(GOPHER_SITE_ATTRIBUTE_TYPEW, LPCWSTR, Site, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_SITE_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (GOPHER_SITE_ATTRIBUTE_TYPEW, 4)
+ TEST_FIELD_SIZE (GOPHER_SITE_ATTRIBUTE_TYPEW, Site, 4)
+ TEST_FIELD_ALIGN (GOPHER_SITE_ATTRIBUTE_TYPEW, Site, 4)
+ TEST_FIELD_OFFSET(GOPHER_SITE_ATTRIBUTE_TYPEW, Site, 0)
}
static void test_pack_GOPHER_TIMEZONE_ATTRIBUTE_TYPE(void)
{
/* GOPHER_TIMEZONE_ATTRIBUTE_TYPE (pack 4) */
- TEST_TYPE(GOPHER_TIMEZONE_ATTRIBUTE_TYPE, 4, 4);
- TEST_FIELD(GOPHER_TIMEZONE_ATTRIBUTE_TYPE, INT, Zone, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_TIMEZONE_ATTRIBUTE_TYPE, 4)
+ TEST_TYPE_ALIGN (GOPHER_TIMEZONE_ATTRIBUTE_TYPE, 4)
+ TEST_FIELD_SIZE (GOPHER_TIMEZONE_ATTRIBUTE_TYPE, Zone, 4)
+ TEST_FIELD_ALIGN (GOPHER_TIMEZONE_ATTRIBUTE_TYPE, Zone, 4)
+ TEST_FIELD_OFFSET(GOPHER_TIMEZONE_ATTRIBUTE_TYPE, Zone, 0)
}
static void test_pack_GOPHER_TTL_ATTRIBUTE_TYPE(void)
{
/* GOPHER_TTL_ATTRIBUTE_TYPE (pack 4) */
- TEST_TYPE(GOPHER_TTL_ATTRIBUTE_TYPE, 4, 4);
- TEST_FIELD(GOPHER_TTL_ATTRIBUTE_TYPE, DWORD, Ttl, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_TTL_ATTRIBUTE_TYPE, 4)
+ TEST_TYPE_ALIGN (GOPHER_TTL_ATTRIBUTE_TYPE, 4)
+ TEST_FIELD_SIZE (GOPHER_TTL_ATTRIBUTE_TYPE, Ttl, 4)
+ TEST_FIELD_ALIGN (GOPHER_TTL_ATTRIBUTE_TYPE, Ttl, 4)
+ TEST_FIELD_OFFSET(GOPHER_TTL_ATTRIBUTE_TYPE, Ttl, 0)
}
static void test_pack_GOPHER_UNKNOWN_ATTRIBUTE_TYPEA(void)
{
/* GOPHER_UNKNOWN_ATTRIBUTE_TYPEA (pack 4) */
- TEST_TYPE(GOPHER_UNKNOWN_ATTRIBUTE_TYPEA, 4, 4);
- TEST_FIELD(GOPHER_UNKNOWN_ATTRIBUTE_TYPEA, LPCSTR, Text, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_UNKNOWN_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (GOPHER_UNKNOWN_ATTRIBUTE_TYPEA, 4)
+ TEST_FIELD_SIZE (GOPHER_UNKNOWN_ATTRIBUTE_TYPEA, Text, 4)
+ TEST_FIELD_ALIGN (GOPHER_UNKNOWN_ATTRIBUTE_TYPEA, Text, 4)
+ TEST_FIELD_OFFSET(GOPHER_UNKNOWN_ATTRIBUTE_TYPEA, Text, 0)
}
static void test_pack_GOPHER_UNKNOWN_ATTRIBUTE_TYPEW(void)
{
/* GOPHER_UNKNOWN_ATTRIBUTE_TYPEW (pack 4) */
- TEST_TYPE(GOPHER_UNKNOWN_ATTRIBUTE_TYPEW, 4, 4);
- TEST_FIELD(GOPHER_UNKNOWN_ATTRIBUTE_TYPEW, LPCWSTR, Text, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_UNKNOWN_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (GOPHER_UNKNOWN_ATTRIBUTE_TYPEW, 4)
+ TEST_FIELD_SIZE (GOPHER_UNKNOWN_ATTRIBUTE_TYPEW, Text, 4)
+ TEST_FIELD_ALIGN (GOPHER_UNKNOWN_ATTRIBUTE_TYPEW, Text, 4)
+ TEST_FIELD_OFFSET(GOPHER_UNKNOWN_ATTRIBUTE_TYPEW, Text, 0)
}
static void test_pack_GOPHER_VERONICA_ATTRIBUTE_TYPE(void)
{
/* GOPHER_VERONICA_ATTRIBUTE_TYPE (pack 4) */
- TEST_TYPE(GOPHER_VERONICA_ATTRIBUTE_TYPE, 4, 4);
- TEST_FIELD(GOPHER_VERONICA_ATTRIBUTE_TYPE, BOOL, TreeWalk, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_VERONICA_ATTRIBUTE_TYPE, 4)
+ TEST_TYPE_ALIGN (GOPHER_VERONICA_ATTRIBUTE_TYPE, 4)
+ TEST_FIELD_SIZE (GOPHER_VERONICA_ATTRIBUTE_TYPE, TreeWalk, 4)
+ TEST_FIELD_ALIGN (GOPHER_VERONICA_ATTRIBUTE_TYPE, TreeWalk, 4)
+ TEST_FIELD_OFFSET(GOPHER_VERONICA_ATTRIBUTE_TYPE, TreeWalk, 0)
}
static void test_pack_GOPHER_VERSION_ATTRIBUTE_TYPEA(void)
{
/* GOPHER_VERSION_ATTRIBUTE_TYPEA (pack 4) */
- TEST_TYPE(GOPHER_VERSION_ATTRIBUTE_TYPEA, 4, 4);
- TEST_FIELD(GOPHER_VERSION_ATTRIBUTE_TYPEA, LPCSTR, Version, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_VERSION_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (GOPHER_VERSION_ATTRIBUTE_TYPEA, 4)
+ TEST_FIELD_SIZE (GOPHER_VERSION_ATTRIBUTE_TYPEA, Version, 4)
+ TEST_FIELD_ALIGN (GOPHER_VERSION_ATTRIBUTE_TYPEA, Version, 4)
+ TEST_FIELD_OFFSET(GOPHER_VERSION_ATTRIBUTE_TYPEA, Version, 0)
}
static void test_pack_GOPHER_VERSION_ATTRIBUTE_TYPEW(void)
{
/* GOPHER_VERSION_ATTRIBUTE_TYPEW (pack 4) */
- TEST_TYPE(GOPHER_VERSION_ATTRIBUTE_TYPEW, 4, 4);
- TEST_FIELD(GOPHER_VERSION_ATTRIBUTE_TYPEW, LPCWSTR, Version, 0, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_VERSION_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (GOPHER_VERSION_ATTRIBUTE_TYPEW, 4)
+ TEST_FIELD_SIZE (GOPHER_VERSION_ATTRIBUTE_TYPEW, Version, 4)
+ TEST_FIELD_ALIGN (GOPHER_VERSION_ATTRIBUTE_TYPEW, Version, 4)
+ TEST_FIELD_OFFSET(GOPHER_VERSION_ATTRIBUTE_TYPEW, Version, 0)
}
static void test_pack_GOPHER_VIEW_ATTRIBUTE_TYPEA(void)
{
/* GOPHER_VIEW_ATTRIBUTE_TYPEA (pack 4) */
- TEST_TYPE(GOPHER_VIEW_ATTRIBUTE_TYPEA, 12, 4);
- TEST_FIELD(GOPHER_VIEW_ATTRIBUTE_TYPEA, LPCSTR, ContentType, 0, 4, 4);
- TEST_FIELD(GOPHER_VIEW_ATTRIBUTE_TYPEA, LPCSTR, Language, 4, 4, 4);
- TEST_FIELD(GOPHER_VIEW_ATTRIBUTE_TYPEA, DWORD, Size, 8, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_VIEW_ATTRIBUTE_TYPEA, 12)
+ TEST_TYPE_ALIGN (GOPHER_VIEW_ATTRIBUTE_TYPEA, 4)
+ TEST_FIELD_SIZE (GOPHER_VIEW_ATTRIBUTE_TYPEA, ContentType, 4)
+ TEST_FIELD_ALIGN (GOPHER_VIEW_ATTRIBUTE_TYPEA, ContentType, 4)
+ TEST_FIELD_OFFSET(GOPHER_VIEW_ATTRIBUTE_TYPEA, ContentType, 0)
+ TEST_FIELD_SIZE (GOPHER_VIEW_ATTRIBUTE_TYPEA, Language, 4)
+ TEST_FIELD_ALIGN (GOPHER_VIEW_ATTRIBUTE_TYPEA, Language, 4)
+ TEST_FIELD_OFFSET(GOPHER_VIEW_ATTRIBUTE_TYPEA, Language, 4)
+ TEST_FIELD_SIZE (GOPHER_VIEW_ATTRIBUTE_TYPEA, Size, 4)
+ TEST_FIELD_ALIGN (GOPHER_VIEW_ATTRIBUTE_TYPEA, Size, 4)
+ TEST_FIELD_OFFSET(GOPHER_VIEW_ATTRIBUTE_TYPEA, Size, 8)
}
static void test_pack_GOPHER_VIEW_ATTRIBUTE_TYPEW(void)
{
/* GOPHER_VIEW_ATTRIBUTE_TYPEW (pack 4) */
- TEST_TYPE(GOPHER_VIEW_ATTRIBUTE_TYPEW, 12, 4);
- TEST_FIELD(GOPHER_VIEW_ATTRIBUTE_TYPEW, LPCWSTR, ContentType, 0, 4, 4);
- TEST_FIELD(GOPHER_VIEW_ATTRIBUTE_TYPEW, LPCWSTR, Language, 4, 4, 4);
- TEST_FIELD(GOPHER_VIEW_ATTRIBUTE_TYPEW, DWORD, Size, 8, 4, 4);
+ TEST_TYPE_SIZE (GOPHER_VIEW_ATTRIBUTE_TYPEW, 12)
+ TEST_TYPE_ALIGN (GOPHER_VIEW_ATTRIBUTE_TYPEW, 4)
+ TEST_FIELD_SIZE (GOPHER_VIEW_ATTRIBUTE_TYPEW, ContentType, 4)
+ TEST_FIELD_ALIGN (GOPHER_VIEW_ATTRIBUTE_TYPEW, ContentType, 4)
+ TEST_FIELD_OFFSET(GOPHER_VIEW_ATTRIBUTE_TYPEW, ContentType, 0)
+ TEST_FIELD_SIZE (GOPHER_VIEW_ATTRIBUTE_TYPEW, Language, 4)
+ TEST_FIELD_ALIGN (GOPHER_VIEW_ATTRIBUTE_TYPEW, Language, 4)
+ TEST_FIELD_OFFSET(GOPHER_VIEW_ATTRIBUTE_TYPEW, Language, 4)
+ TEST_FIELD_SIZE (GOPHER_VIEW_ATTRIBUTE_TYPEW, Size, 4)
+ TEST_FIELD_ALIGN (GOPHER_VIEW_ATTRIBUTE_TYPEW, Size, 4)
+ TEST_FIELD_OFFSET(GOPHER_VIEW_ATTRIBUTE_TYPEW, Size, 8)
}
static void test_pack_GROUPID(void)
{
/* GROUPID */
- TEST_TYPE(GROUPID, 8, 8);
- TEST_TYPE_SIGNED(GROUPID);
+ TEST_TYPE_SIZE (GROUPID, 8)
+ TEST_TYPE_ALIGN (GROUPID, 8)
+ TEST_TYPE_SIGNED(GROUPID)
}
static void test_pack_HINTERNET(void)
{
/* HINTERNET */
- TEST_TYPE(HINTERNET, 4, 4);
+ TEST_TYPE_SIZE (HINTERNET, 4)
+ TEST_TYPE_ALIGN (HINTERNET, 4)
}
static void test_pack_HTTP_VERSION_INFO(void)
{
/* HTTP_VERSION_INFO (pack 4) */
- TEST_TYPE(HTTP_VERSION_INFO, 8, 4);
- TEST_FIELD(HTTP_VERSION_INFO, DWORD, dwMajorVersion, 0, 4, 4);
- TEST_FIELD(HTTP_VERSION_INFO, DWORD, dwMinorVersion, 4, 4, 4);
+ TEST_TYPE_SIZE (HTTP_VERSION_INFO, 8)
+ TEST_TYPE_ALIGN (HTTP_VERSION_INFO, 4)
+ TEST_FIELD_SIZE (HTTP_VERSION_INFO, dwMajorVersion, 4)
+ TEST_FIELD_ALIGN (HTTP_VERSION_INFO, dwMajorVersion, 4)
+ TEST_FIELD_OFFSET(HTTP_VERSION_INFO, dwMajorVersion, 0)
+ TEST_FIELD_SIZE (HTTP_VERSION_INFO, dwMinorVersion, 4)
+ TEST_FIELD_ALIGN (HTTP_VERSION_INFO, dwMinorVersion, 4)
+ TEST_FIELD_OFFSET(HTTP_VERSION_INFO, dwMinorVersion, 4)
}
static void test_pack_INTERNET_ASYNC_RESULT(void)
{
/* INTERNET_ASYNC_RESULT (pack 4) */
- TEST_TYPE(INTERNET_ASYNC_RESULT, 8, 4);
- TEST_FIELD(INTERNET_ASYNC_RESULT, DWORD, dwResult, 0, 4, 4);
- TEST_FIELD(INTERNET_ASYNC_RESULT, DWORD, dwError, 4, 4, 4);
+ TEST_TYPE_SIZE (INTERNET_ASYNC_RESULT, 8)
+ TEST_TYPE_ALIGN (INTERNET_ASYNC_RESULT, 4)
+ TEST_FIELD_SIZE (INTERNET_ASYNC_RESULT, dwResult, 4)
+ TEST_FIELD_ALIGN (INTERNET_ASYNC_RESULT, dwResult, 4)
+ TEST_FIELD_OFFSET(INTERNET_ASYNC_RESULT, dwResult, 0)
+ TEST_FIELD_SIZE (INTERNET_ASYNC_RESULT, dwError, 4)
+ TEST_FIELD_ALIGN (INTERNET_ASYNC_RESULT, dwError, 4)
+ TEST_FIELD_OFFSET(INTERNET_ASYNC_RESULT, dwError, 4)
}
static void test_pack_INTERNET_AUTH_NOTIFY_DATA(void)
{
/* INTERNET_AUTH_NOTIFY_DATA (pack 4) */
- TEST_TYPE(INTERNET_AUTH_NOTIFY_DATA, 16, 4);
- TEST_FIELD(INTERNET_AUTH_NOTIFY_DATA, DWORD, cbStruct, 0, 4, 4);
- TEST_FIELD(INTERNET_AUTH_NOTIFY_DATA, DWORD, dwOptions, 4, 4, 4);
- TEST_FIELD(INTERNET_AUTH_NOTIFY_DATA, PFN_AUTH_NOTIFY, pfnNotify, 8, 4, 4);
- TEST_FIELD(INTERNET_AUTH_NOTIFY_DATA, DWORD, dwContext, 12, 4, 4);
+ TEST_TYPE_SIZE (INTERNET_AUTH_NOTIFY_DATA, 16)
+ TEST_TYPE_ALIGN (INTERNET_AUTH_NOTIFY_DATA, 4)
+ TEST_FIELD_SIZE (INTERNET_AUTH_NOTIFY_DATA, cbStruct, 4)
+ TEST_FIELD_ALIGN (INTERNET_AUTH_NOTIFY_DATA, cbStruct, 4)
+ TEST_FIELD_OFFSET(INTERNET_AUTH_NOTIFY_DATA, cbStruct, 0)
+ TEST_FIELD_SIZE (INTERNET_AUTH_NOTIFY_DATA, dwOptions, 4)
+ TEST_FIELD_ALIGN (INTERNET_AUTH_NOTIFY_DATA, dwOptions, 4)
+ TEST_FIELD_OFFSET(INTERNET_AUTH_NOTIFY_DATA, dwOptions, 4)
+ TEST_FIELD_SIZE (INTERNET_AUTH_NOTIFY_DATA, pfnNotify, 4)
+ TEST_FIELD_ALIGN (INTERNET_AUTH_NOTIFY_DATA, pfnNotify, 4)
+ TEST_FIELD_OFFSET(INTERNET_AUTH_NOTIFY_DATA, pfnNotify, 8)
+ TEST_FIELD_SIZE (INTERNET_AUTH_NOTIFY_DATA, dwContext, 4)
+ TEST_FIELD_ALIGN (INTERNET_AUTH_NOTIFY_DATA, dwContext, 4)
+ TEST_FIELD_OFFSET(INTERNET_AUTH_NOTIFY_DATA, dwContext, 12)
}
static void test_pack_INTERNET_BUFFERSA(void)
{
/* INTERNET_BUFFERSA (pack 4) */
- TEST_TYPE(INTERNET_BUFFERSA, 40, 4);
- TEST_FIELD(INTERNET_BUFFERSA, DWORD, dwStructSize, 0, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSA, struct _INTERNET_BUFFERSA *, Next, 4, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSA, LPCSTR, lpcszHeader, 8, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSA, DWORD, dwHeadersLength, 12, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSA, DWORD, dwHeadersTotal, 16, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSA, LPVOID, lpvBuffer, 20, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSA, DWORD, dwBufferLength, 24, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSA, DWORD, dwBufferTotal, 28, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSA, DWORD, dwOffsetLow, 32, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSA, DWORD, dwOffsetHigh, 36, 4, 4);
+ TEST_TYPE_SIZE (INTERNET_BUFFERSA, 40)
+ TEST_TYPE_ALIGN (INTERNET_BUFFERSA, 4)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSA, dwStructSize, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSA, dwStructSize, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSA, dwStructSize, 0)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSA, Next, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSA, Next, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSA, Next, 4)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSA, lpcszHeader, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSA, lpcszHeader, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSA, lpcszHeader, 8)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSA, dwHeadersLength, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSA, dwHeadersLength, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSA, dwHeadersLength, 12)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSA, dwHeadersTotal, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSA, dwHeadersTotal, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSA, dwHeadersTotal, 16)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSA, lpvBuffer, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSA, lpvBuffer, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSA, lpvBuffer, 20)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSA, dwBufferLength, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSA, dwBufferLength, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSA, dwBufferLength, 24)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSA, dwBufferTotal, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSA, dwBufferTotal, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSA, dwBufferTotal, 28)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSA, dwOffsetLow, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSA, dwOffsetLow, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSA, dwOffsetLow, 32)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSA, dwOffsetHigh, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSA, dwOffsetHigh, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSA, dwOffsetHigh, 36)
}
static void test_pack_INTERNET_BUFFERSW(void)
{
/* INTERNET_BUFFERSW (pack 4) */
- TEST_TYPE(INTERNET_BUFFERSW, 40, 4);
- TEST_FIELD(INTERNET_BUFFERSW, DWORD, dwStructSize, 0, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSW, struct _INTERNET_BUFFERSW *, Next, 4, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSW, LPCWSTR, lpcszHeader, 8, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSW, DWORD, dwHeadersLength, 12, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSW, DWORD, dwHeadersTotal, 16, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSW, LPVOID, lpvBuffer, 20, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSW, DWORD, dwBufferLength, 24, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSW, DWORD, dwBufferTotal, 28, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSW, DWORD, dwOffsetLow, 32, 4, 4);
- TEST_FIELD(INTERNET_BUFFERSW, DWORD, dwOffsetHigh, 36, 4, 4);
+ TEST_TYPE_SIZE (INTERNET_BUFFERSW, 40)
+ TEST_TYPE_ALIGN (INTERNET_BUFFERSW, 4)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSW, dwStructSize, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSW, dwStructSize, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSW, dwStructSize, 0)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSW, Next, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSW, Next, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSW, Next, 4)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSW, lpcszHeader, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSW, lpcszHeader, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSW, lpcszHeader, 8)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSW, dwHeadersLength, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSW, dwHeadersLength, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSW, dwHeadersLength, 12)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSW, dwHeadersTotal, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSW, dwHeadersTotal, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSW, dwHeadersTotal, 16)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSW, lpvBuffer, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSW, lpvBuffer, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSW, lpvBuffer, 20)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSW, dwBufferLength, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSW, dwBufferLength, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSW, dwBufferLength, 24)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSW, dwBufferTotal, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSW, dwBufferTotal, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSW, dwBufferTotal, 28)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSW, dwOffsetLow, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSW, dwOffsetLow, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSW, dwOffsetLow, 32)
+ TEST_FIELD_SIZE (INTERNET_BUFFERSW, dwOffsetHigh, 4)
+ TEST_FIELD_ALIGN (INTERNET_BUFFERSW, dwOffsetHigh, 4)
+ TEST_FIELD_OFFSET(INTERNET_BUFFERSW, dwOffsetHigh, 36)
}
static void test_pack_INTERNET_CACHE_ENTRY_INFOA(void)
{
/* INTERNET_CACHE_ENTRY_INFOA (pack 4) */
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, DWORD, dwStructSize, 0, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, LPSTR, lpszSourceUrlName, 4, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, LPSTR, lpszLocalFileName, 8, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, DWORD, CacheEntryType, 12, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, DWORD, dwUseCount, 16, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, DWORD, dwHitRate, 20, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, DWORD, dwSizeLow, 24, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, DWORD, dwSizeHigh, 28, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, FILETIME, LastModifiedTime, 32, 8, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, FILETIME, ExpireTime, 40, 8, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, FILETIME, LastAccessTime, 48, 8, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, FILETIME, LastSyncTime, 56, 8, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, LPBYTE, lpHeaderInfo, 64, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, DWORD, dwHeaderInfoSize, 68, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOA, LPSTR, lpszFileExtension, 72, 4, 4);
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, dwStructSize, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, dwStructSize, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, dwStructSize, 0)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, lpszSourceUrlName, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, lpszSourceUrlName, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, lpszSourceUrlName, 4)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, lpszLocalFileName, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, lpszLocalFileName, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, lpszLocalFileName, 8)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, CacheEntryType, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, CacheEntryType, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, CacheEntryType, 12)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, dwUseCount, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, dwUseCount, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, dwUseCount, 16)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, dwHitRate, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, dwHitRate, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, dwHitRate, 20)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, dwSizeLow, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, dwSizeLow, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, dwSizeLow, 24)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, dwSizeHigh, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, dwSizeHigh, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, dwSizeHigh, 28)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, LastModifiedTime, 8)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, LastModifiedTime, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, LastModifiedTime, 32)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, ExpireTime, 8)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, ExpireTime, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, ExpireTime, 40)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, LastAccessTime, 8)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, LastAccessTime, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, LastAccessTime, 48)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, LastSyncTime, 8)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, LastSyncTime, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, LastSyncTime, 56)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, lpHeaderInfo, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, lpHeaderInfo, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, lpHeaderInfo, 64)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, dwHeaderInfoSize, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, dwHeaderInfoSize, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, dwHeaderInfoSize, 68)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOA, lpszFileExtension, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOA, lpszFileExtension, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOA, lpszFileExtension, 72)
}
static void test_pack_INTERNET_CACHE_ENTRY_INFOW(void)
{
/* INTERNET_CACHE_ENTRY_INFOW (pack 4) */
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, DWORD, dwStructSize, 0, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, LPWSTR, lpszSourceUrlName, 4, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, LPWSTR, lpszLocalFileName, 8, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, DWORD, CacheEntryType, 12, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, DWORD, dwUseCount, 16, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, DWORD, dwHitRate, 20, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, DWORD, dwSizeLow, 24, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, DWORD, dwSizeHigh, 28, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, FILETIME, LastModifiedTime, 32, 8, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, FILETIME, ExpireTime, 40, 8, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, FILETIME, LastAccessTime, 48, 8, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, FILETIME, LastSyncTime, 56, 8, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, LPBYTE, lpHeaderInfo, 64, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, DWORD, dwHeaderInfoSize, 68, 4, 4);
- TEST_FIELD(INTERNET_CACHE_ENTRY_INFOW, LPWSTR, lpszFileExtension, 72, 4, 4);
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, dwStructSize, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, dwStructSize, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, dwStructSize, 0)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, lpszSourceUrlName, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, lpszSourceUrlName, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, lpszSourceUrlName, 4)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, lpszLocalFileName, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, lpszLocalFileName, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, lpszLocalFileName, 8)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, CacheEntryType, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, CacheEntryType, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, CacheEntryType, 12)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, dwUseCount, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, dwUseCount, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, dwUseCount, 16)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, dwHitRate, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, dwHitRate, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, dwHitRate, 20)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, dwSizeLow, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, dwSizeLow, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, dwSizeLow, 24)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, dwSizeHigh, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, dwSizeHigh, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, dwSizeHigh, 28)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, LastModifiedTime, 8)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, LastModifiedTime, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, LastModifiedTime, 32)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, ExpireTime, 8)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, ExpireTime, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, ExpireTime, 40)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, LastAccessTime, 8)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, LastAccessTime, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, LastAccessTime, 48)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, LastSyncTime, 8)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, LastSyncTime, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, LastSyncTime, 56)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, lpHeaderInfo, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, lpHeaderInfo, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, lpHeaderInfo, 64)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, dwHeaderInfoSize, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, dwHeaderInfoSize, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, dwHeaderInfoSize, 68)
+ TEST_FIELD_SIZE (INTERNET_CACHE_ENTRY_INFOW, lpszFileExtension, 4)
+ TEST_FIELD_ALIGN (INTERNET_CACHE_ENTRY_INFOW, lpszFileExtension, 4)
+ TEST_FIELD_OFFSET(INTERNET_CACHE_ENTRY_INFOW, lpszFileExtension, 72)
}
static void test_pack_INTERNET_CERTIFICATE_INFOA(void)
{
/* INTERNET_CERTIFICATE_INFOA (pack 4) */
- TEST_TYPE(INTERNET_CERTIFICATE_INFOA, 40, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOA, FILETIME, ftExpiry, 0, 8, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOA, FILETIME, ftStart, 8, 8, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOA, LPSTR, lpszSubjectInfo, 16, 4, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOA, LPSTR, lpszIssuerInfo, 20, 4, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOA, LPSTR, lpszProtocolName, 24, 4, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOA, LPSTR, lpszSignatureAlgName, 28, 4, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOA, LPSTR, lpszEncryptionAlgName, 32, 4, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOA, DWORD, dwKeySize, 36, 4, 4);
+ TEST_TYPE_SIZE (INTERNET_CERTIFICATE_INFOA, 40)
+ TEST_TYPE_ALIGN (INTERNET_CERTIFICATE_INFOA, 4)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOA, ftExpiry, 8)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOA, ftExpiry, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOA, ftExpiry, 0)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOA, ftStart, 8)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOA, ftStart, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOA, ftStart, 8)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOA, lpszSubjectInfo, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOA, lpszSubjectInfo, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOA, lpszSubjectInfo, 16)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOA, lpszIssuerInfo, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOA, lpszIssuerInfo, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOA, lpszIssuerInfo, 20)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOA, lpszProtocolName, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOA, lpszProtocolName, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOA, lpszProtocolName, 24)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOA, lpszSignatureAlgName, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOA, lpszSignatureAlgName, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOA, lpszSignatureAlgName, 28)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOA, lpszEncryptionAlgName, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOA, lpszEncryptionAlgName, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOA, lpszEncryptionAlgName, 32)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOA, dwKeySize, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOA, dwKeySize, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOA, dwKeySize, 36)
}
static void test_pack_INTERNET_CERTIFICATE_INFOW(void)
{
/* INTERNET_CERTIFICATE_INFOW (pack 4) */
- TEST_TYPE(INTERNET_CERTIFICATE_INFOW, 40, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOW, FILETIME, ftExpiry, 0, 8, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOW, FILETIME, ftStart, 8, 8, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOW, LPWSTR, lpszSubjectInfo, 16, 4, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOW, LPWSTR, lpszIssuerInfo, 20, 4, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOW, LPWSTR, lpszProtocolName, 24, 4, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOW, LPWSTR, lpszSignatureAlgName, 28, 4, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOW, LPWSTR, lpszEncryptionAlgName, 32, 4, 4);
- TEST_FIELD(INTERNET_CERTIFICATE_INFOW, DWORD, dwKeySize, 36, 4, 4);
+ TEST_TYPE_SIZE (INTERNET_CERTIFICATE_INFOW, 40)
+ TEST_TYPE_ALIGN (INTERNET_CERTIFICATE_INFOW, 4)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOW, ftExpiry, 8)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOW, ftExpiry, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOW, ftExpiry, 0)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOW, ftStart, 8)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOW, ftStart, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOW, ftStart, 8)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOW, lpszSubjectInfo, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOW, lpszSubjectInfo, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOW, lpszSubjectInfo, 16)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOW, lpszIssuerInfo, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOW, lpszIssuerInfo, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOW, lpszIssuerInfo, 20)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOW, lpszProtocolName, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOW, lpszProtocolName, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOW, lpszProtocolName, 24)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOW, lpszSignatureAlgName, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOW, lpszSignatureAlgName, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOW, lpszSignatureAlgName, 28)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOW, lpszEncryptionAlgName, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOW, lpszEncryptionAlgName, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOW, lpszEncryptionAlgName, 32)
+ TEST_FIELD_SIZE (INTERNET_CERTIFICATE_INFOW, dwKeySize, 4)
+ TEST_FIELD_ALIGN (INTERNET_CERTIFICATE_INFOW, dwKeySize, 4)
+ TEST_FIELD_OFFSET(INTERNET_CERTIFICATE_INFOW, dwKeySize, 36)
}
static void test_pack_INTERNET_CONNECTED_INFO(void)
{
/* INTERNET_CONNECTED_INFO (pack 4) */
- TEST_TYPE(INTERNET_CONNECTED_INFO, 8, 4);
- TEST_FIELD(INTERNET_CONNECTED_INFO, DWORD, dwConnectedState, 0, 4, 4);
- TEST_FIELD(INTERNET_CONNECTED_INFO, DWORD, dwFlags, 4, 4, 4);
+ TEST_TYPE_SIZE (INTERNET_CONNECTED_INFO, 8)
+ TEST_TYPE_ALIGN (INTERNET_CONNECTED_INFO, 4)
+ TEST_FIELD_SIZE (INTERNET_CONNECTED_INFO, dwConnectedState, 4)
+ TEST_FIELD_ALIGN (INTERNET_CONNECTED_INFO, dwConnectedState, 4)
+ TEST_FIELD_OFFSET(INTERNET_CONNECTED_INFO, dwConnectedState, 0)
+ TEST_FIELD_SIZE (INTERNET_CONNECTED_INFO, dwFlags, 4)
+ TEST_FIELD_ALIGN (INTERNET_CONNECTED_INFO, dwFlags, 4)
+ TEST_FIELD_OFFSET(INTERNET_CONNECTED_INFO, dwFlags, 4)
}
static void test_pack_INTERNET_PORT(void)
{
/* INTERNET_PORT */
- TEST_TYPE(INTERNET_PORT, 2, 2);
- TEST_TYPE_UNSIGNED(INTERNET_PORT);
+ TEST_TYPE_SIZE (INTERNET_PORT, 2)
+ TEST_TYPE_ALIGN (INTERNET_PORT, 2)
+ TEST_TYPE_UNSIGNED(INTERNET_PORT)
}
static void test_pack_INTERNET_PROXY_INFOA(void)
{
/* INTERNET_PROXY_INFOA (pack 4) */
- TEST_TYPE(INTERNET_PROXY_INFOA, 12, 4);
- TEST_FIELD(INTERNET_PROXY_INFOA, DWORD, dwAccessType, 0, 4, 4);
- TEST_FIELD(INTERNET_PROXY_INFOA, LPCSTR, lpszProxy, 4, 4, 4);
- TEST_FIELD(INTERNET_PROXY_INFOA, LPCSTR, lpszProxyBypass, 8, 4, 4);
+ TEST_TYPE_SIZE (INTERNET_PROXY_INFOA, 12)
+ TEST_TYPE_ALIGN (INTERNET_PROXY_INFOA, 4)
+ TEST_FIELD_SIZE (INTERNET_PROXY_INFOA, dwAccessType, 4)
+ TEST_FIELD_ALIGN (INTERNET_PROXY_INFOA, dwAccessType, 4)
+ TEST_FIELD_OFFSET(INTERNET_PROXY_INFOA, dwAccessType, 0)
+ TEST_FIELD_SIZE (INTERNET_PROXY_INFOA, lpszProxy, 4)
+ TEST_FIELD_ALIGN (INTERNET_PROXY_INFOA, lpszProxy, 4)
+ TEST_FIELD_OFFSET(INTERNET_PROXY_INFOA, lpszProxy, 4)
+ TEST_FIELD_SIZE (INTERNET_PROXY_INFOA, lpszProxyBypass, 4)
+ TEST_FIELD_ALIGN (INTERNET_PROXY_INFOA, lpszProxyBypass, 4)
+ TEST_FIELD_OFFSET(INTERNET_PROXY_INFOA, lpszProxyBypass, 8)
}
static void test_pack_INTERNET_PROXY_INFOW(void)
{
/* INTERNET_PROXY_INFOW (pack 4) */
- TEST_TYPE(INTERNET_PROXY_INFOW, 12, 4);
- TEST_FIELD(INTERNET_PROXY_INFOW, DWORD, dwAccessType, 0, 4, 4);
- TEST_FIELD(INTERNET_PROXY_INFOW, LPCWSTR, lpszProxy, 4, 4, 4);
- TEST_FIELD(INTERNET_PROXY_INFOW, LPCWSTR, lpszProxyBypass, 8, 4, 4);
+ TEST_TYPE_SIZE (INTERNET_PROXY_INFOW, 12)
+ TEST_TYPE_ALIGN (INTERNET_PROXY_INFOW, 4)
+ TEST_FIELD_SIZE (INTERNET_PROXY_INFOW, dwAccessType, 4)
+ TEST_FIELD_ALIGN (INTERNET_PROXY_INFOW, dwAccessType, 4)
+ TEST_FIELD_OFFSET(INTERNET_PROXY_INFOW, dwAccessType, 0)
+ TEST_FIELD_SIZE (INTERNET_PROXY_INFOW, lpszProxy, 4)
+ TEST_FIELD_ALIGN (INTERNET_PROXY_INFOW, lpszProxy, 4)
+ TEST_FIELD_OFFSET(INTERNET_PROXY_INFOW, lpszProxy, 4)
+ TEST_FIELD_SIZE (INTERNET_PROXY_INFOW, lpszProxyBypass, 4)
+ TEST_FIELD_ALIGN (INTERNET_PROXY_INFOW, lpszProxyBypass, 4)
+ TEST_FIELD_OFFSET(INTERNET_PROXY_INFOW, lpszProxyBypass, 8)
}
static void test_pack_INTERNET_STATUS_CALLBACK(void)
{
/* INTERNET_STATUS_CALLBACK */
- TEST_TYPE(INTERNET_STATUS_CALLBACK, 4, 4);
+ TEST_TYPE_SIZE (INTERNET_STATUS_CALLBACK, 4)
+ TEST_TYPE_ALIGN (INTERNET_STATUS_CALLBACK, 4)
}
static void test_pack_INTERNET_VERSION_INFO(void)
{
/* INTERNET_VERSION_INFO (pack 4) */
- TEST_TYPE(INTERNET_VERSION_INFO, 8, 4);
- TEST_FIELD(INTERNET_VERSION_INFO, DWORD, dwMajorVersion, 0, 4, 4);
- TEST_FIELD(INTERNET_VERSION_INFO, DWORD, dwMinorVersion, 4, 4, 4);
+ TEST_TYPE_SIZE (INTERNET_VERSION_INFO, 8)
+ TEST_TYPE_ALIGN (INTERNET_VERSION_INFO, 4)
+ TEST_FIELD_SIZE (INTERNET_VERSION_INFO, dwMajorVersion, 4)
+ TEST_FIELD_ALIGN (INTERNET_VERSION_INFO, dwMajorVersion, 4)
+ TEST_FIELD_OFFSET(INTERNET_VERSION_INFO, dwMajorVersion, 0)
+ TEST_FIELD_SIZE (INTERNET_VERSION_INFO, dwMinorVersion, 4)
+ TEST_FIELD_ALIGN (INTERNET_VERSION_INFO, dwMinorVersion, 4)
+ TEST_FIELD_OFFSET(INTERNET_VERSION_INFO, dwMinorVersion, 4)
}
static void test_pack_LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA(void)
{
/* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA */
- TEST_TYPE(LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA, 8, 4);
+ TEST_TYPE_SIZE (LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_SIZE (LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA, 8)
+ TEST_TARGET_ALIGN(LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEA, 4)
}
static void test_pack_LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW(void)
{
/* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW */
- TEST_TYPE(LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW, 8, 4);
+ TEST_TYPE_SIZE (LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_SIZE (LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW, 8)
+ TEST_TARGET_ALIGN(LPGOPHER_ABSTRACT_ATTRIBUTE_TYPEW, 4)
}
static void test_pack_LPGOPHER_ADMIN_ATTRIBUTE_TYPEA(void)
{
/* LPGOPHER_ADMIN_ATTRIBUTE_TYPEA */
- TEST_TYPE(LPGOPHER_ADMIN_ATTRIBUTE_TYPEA, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_ADMIN_ATTRIBUTE_TYPEA, 8, 4);
+ TEST_TYPE_SIZE (LPGOPHER_ADMIN_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_ADMIN_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_SIZE (LPGOPHER_ADMIN_ATTRIBUTE_TYPEA, 8)
+ TEST_TARGET_ALIGN(LPGOPHER_ADMIN_ATTRIBUTE_TYPEA, 4)
}
static void test_pack_LPGOPHER_ADMIN_ATTRIBUTE_TYPEW(void)
{
/* LPGOPHER_ADMIN_ATTRIBUTE_TYPEW */
- TEST_TYPE(LPGOPHER_ADMIN_ATTRIBUTE_TYPEW, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_ADMIN_ATTRIBUTE_TYPEW, 8, 4);
+ TEST_TYPE_SIZE (LPGOPHER_ADMIN_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_ADMIN_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_SIZE (LPGOPHER_ADMIN_ATTRIBUTE_TYPEW, 8)
+ TEST_TARGET_ALIGN(LPGOPHER_ADMIN_ATTRIBUTE_TYPEW, 4)
}
static void test_pack_LPGOPHER_ASK_ATTRIBUTE_TYPEA(void)
{
/* LPGOPHER_ASK_ATTRIBUTE_TYPEA */
- TEST_TYPE(LPGOPHER_ASK_ATTRIBUTE_TYPEA, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_ASK_ATTRIBUTE_TYPEA, 8, 4);
+ TEST_TYPE_SIZE (LPGOPHER_ASK_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_ASK_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_SIZE (LPGOPHER_ASK_ATTRIBUTE_TYPEA, 8)
+ TEST_TARGET_ALIGN(LPGOPHER_ASK_ATTRIBUTE_TYPEA, 4)
}
static void test_pack_LPGOPHER_ASK_ATTRIBUTE_TYPEW(void)
{
/* LPGOPHER_ASK_ATTRIBUTE_TYPEW */
- TEST_TYPE(LPGOPHER_ASK_ATTRIBUTE_TYPEW, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_ASK_ATTRIBUTE_TYPEW, 8, 4);
+ TEST_TYPE_SIZE (LPGOPHER_ASK_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_ASK_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_SIZE (LPGOPHER_ASK_ATTRIBUTE_TYPEW, 8)
+ TEST_TARGET_ALIGN(LPGOPHER_ASK_ATTRIBUTE_TYPEW, 4)
}
static void test_pack_LPGOPHER_ATTRIBUTE_TYPEA(void)
{
/* LPGOPHER_ATTRIBUTE_TYPEA */
- TEST_TYPE(LPGOPHER_ATTRIBUTE_TYPEA, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_ATTRIBUTE_TYPEA, 4)
}
static void test_pack_LPGOPHER_ATTRIBUTE_TYPEW(void)
{
/* LPGOPHER_ATTRIBUTE_TYPEW */
- TEST_TYPE(LPGOPHER_ATTRIBUTE_TYPEW, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_ATTRIBUTE_TYPEW, 4)
}
static void test_pack_LPGOPHER_FIND_DATAA(void)
{
/* LPGOPHER_FIND_DATAA */
- TEST_TYPE(LPGOPHER_FIND_DATAA, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_FIND_DATAA, 808, 4);
+ TEST_TYPE_SIZE (LPGOPHER_FIND_DATAA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_FIND_DATAA, 4)
+ TEST_TARGET_SIZE (LPGOPHER_FIND_DATAA, 808)
+ TEST_TARGET_ALIGN(LPGOPHER_FIND_DATAA, 4)
}
static void test_pack_LPGOPHER_FIND_DATAW(void)
{
/* LPGOPHER_FIND_DATAW */
- TEST_TYPE(LPGOPHER_FIND_DATAW, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_FIND_DATAW, 1588, 4);
+ TEST_TYPE_SIZE (LPGOPHER_FIND_DATAW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_FIND_DATAW, 4)
+ TEST_TARGET_SIZE (LPGOPHER_FIND_DATAW, 1588)
+ TEST_TARGET_ALIGN(LPGOPHER_FIND_DATAW, 4)
}
static void test_pack_LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE(void)
{
/* LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE */
- TEST_TYPE(LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, 24, 4);
+ TEST_TYPE_SIZE (LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, 4)
+ TEST_TARGET_SIZE (LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, 24)
+ TEST_TARGET_ALIGN(LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE, 4)
}
static void test_pack_LPGOPHER_LOCATION_ATTRIBUTE_TYPEA(void)
{
/* LPGOPHER_LOCATION_ATTRIBUTE_TYPEA */
- TEST_TYPE(LPGOPHER_LOCATION_ATTRIBUTE_TYPEA, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_LOCATION_ATTRIBUTE_TYPEA, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_LOCATION_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_LOCATION_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_SIZE (LPGOPHER_LOCATION_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_LOCATION_ATTRIBUTE_TYPEA, 4)
}
static void test_pack_LPGOPHER_LOCATION_ATTRIBUTE_TYPEW(void)
{
/* LPGOPHER_LOCATION_ATTRIBUTE_TYPEW */
- TEST_TYPE(LPGOPHER_LOCATION_ATTRIBUTE_TYPEW, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_LOCATION_ATTRIBUTE_TYPEW, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_LOCATION_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_LOCATION_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_SIZE (LPGOPHER_LOCATION_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_LOCATION_ATTRIBUTE_TYPEW, 4)
}
static void test_pack_LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE(void)
{
/* LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE */
- TEST_TYPE(LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE, 8, 4);
+ TEST_TYPE_SIZE (LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE, 4)
+ TEST_TARGET_SIZE (LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE, 8)
+ TEST_TARGET_ALIGN(LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE, 4)
}
static void test_pack_LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA(void)
{
/* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA */
- TEST_TYPE(LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_SIZE (LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEA, 4)
}
static void test_pack_LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW(void)
{
/* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW */
- TEST_TYPE(LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_SIZE (LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPEW, 4)
}
static void test_pack_LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA(void)
{
/* LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA */
- TEST_TYPE(LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_SIZE (LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_PROVIDER_ATTRIBUTE_TYPEA, 4)
}
static void test_pack_LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW(void)
{
/* LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW */
- TEST_TYPE(LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_SIZE (LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_PROVIDER_ATTRIBUTE_TYPEW, 4)
}
static void test_pack_LPGOPHER_SCORE_ATTRIBUTE_TYPE(void)
{
/* LPGOPHER_SCORE_ATTRIBUTE_TYPE */
- TEST_TYPE(LPGOPHER_SCORE_ATTRIBUTE_TYPE, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_SCORE_ATTRIBUTE_TYPE, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_SCORE_ATTRIBUTE_TYPE, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_SCORE_ATTRIBUTE_TYPE, 4)
+ TEST_TARGET_SIZE (LPGOPHER_SCORE_ATTRIBUTE_TYPE, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_SCORE_ATTRIBUTE_TYPE, 4)
}
static void test_pack_LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE(void)
{
/* LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE */
- TEST_TYPE(LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, 8, 4);
+ TEST_TYPE_SIZE (LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, 4)
+ TEST_TARGET_SIZE (LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, 8)
+ TEST_TARGET_ALIGN(LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE, 4)
}
static void test_pack_LPGOPHER_SITE_ATTRIBUTE_TYPEA(void)
{
/* LPGOPHER_SITE_ATTRIBUTE_TYPEA */
- TEST_TYPE(LPGOPHER_SITE_ATTRIBUTE_TYPEA, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_SITE_ATTRIBUTE_TYPEA, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_SITE_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_SITE_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_SIZE (LPGOPHER_SITE_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_SITE_ATTRIBUTE_TYPEA, 4)
}
static void test_pack_LPGOPHER_SITE_ATTRIBUTE_TYPEW(void)
{
/* LPGOPHER_SITE_ATTRIBUTE_TYPEW */
- TEST_TYPE(LPGOPHER_SITE_ATTRIBUTE_TYPEW, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_SITE_ATTRIBUTE_TYPEW, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_SITE_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_SITE_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_SIZE (LPGOPHER_SITE_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_SITE_ATTRIBUTE_TYPEW, 4)
}
static void test_pack_LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE(void)
{
/* LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE */
- TEST_TYPE(LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE, 4)
+ TEST_TARGET_SIZE (LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE, 4)
}
static void test_pack_LPGOPHER_TTL_ATTRIBUTE_TYPE(void)
{
/* LPGOPHER_TTL_ATTRIBUTE_TYPE */
- TEST_TYPE(LPGOPHER_TTL_ATTRIBUTE_TYPE, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_TTL_ATTRIBUTE_TYPE, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_TTL_ATTRIBUTE_TYPE, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_TTL_ATTRIBUTE_TYPE, 4)
+ TEST_TARGET_SIZE (LPGOPHER_TTL_ATTRIBUTE_TYPE, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_TTL_ATTRIBUTE_TYPE, 4)
}
static void test_pack_LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA(void)
{
/* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA */
- TEST_TYPE(LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_SIZE (LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEA, 4)
}
static void test_pack_LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW(void)
{
/* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW */
- TEST_TYPE(LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_SIZE (LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_UNKNOWN_ATTRIBUTE_TYPEW, 4)
}
static void test_pack_LPGOPHER_VERONICA_ATTRIBUTE_TYPE(void)
{
/* LPGOPHER_VERONICA_ATTRIBUTE_TYPE */
- TEST_TYPE(LPGOPHER_VERONICA_ATTRIBUTE_TYPE, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_VERONICA_ATTRIBUTE_TYPE, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_VERONICA_ATTRIBUTE_TYPE, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_VERONICA_ATTRIBUTE_TYPE, 4)
+ TEST_TARGET_SIZE (LPGOPHER_VERONICA_ATTRIBUTE_TYPE, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_VERONICA_ATTRIBUTE_TYPE, 4)
}
static void test_pack_LPGOPHER_VERSION_ATTRIBUTE_TYPEA(void)
{
/* LPGOPHER_VERSION_ATTRIBUTE_TYPEA */
- TEST_TYPE(LPGOPHER_VERSION_ATTRIBUTE_TYPEA, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_VERSION_ATTRIBUTE_TYPEA, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_VERSION_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_VERSION_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_SIZE (LPGOPHER_VERSION_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_VERSION_ATTRIBUTE_TYPEA, 4)
}
static void test_pack_LPGOPHER_VERSION_ATTRIBUTE_TYPEW(void)
{
/* LPGOPHER_VERSION_ATTRIBUTE_TYPEW */
- TEST_TYPE(LPGOPHER_VERSION_ATTRIBUTE_TYPEW, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_VERSION_ATTRIBUTE_TYPEW, 4, 4);
+ TEST_TYPE_SIZE (LPGOPHER_VERSION_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_VERSION_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_SIZE (LPGOPHER_VERSION_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_ALIGN(LPGOPHER_VERSION_ATTRIBUTE_TYPEW, 4)
}
static void test_pack_LPGOPHER_VIEW_ATTRIBUTE_TYPEA(void)
{
/* LPGOPHER_VIEW_ATTRIBUTE_TYPEA */
- TEST_TYPE(LPGOPHER_VIEW_ATTRIBUTE_TYPEA, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_VIEW_ATTRIBUTE_TYPEA, 12, 4);
+ TEST_TYPE_SIZE (LPGOPHER_VIEW_ATTRIBUTE_TYPEA, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_VIEW_ATTRIBUTE_TYPEA, 4)
+ TEST_TARGET_SIZE (LPGOPHER_VIEW_ATTRIBUTE_TYPEA, 12)
+ TEST_TARGET_ALIGN(LPGOPHER_VIEW_ATTRIBUTE_TYPEA, 4)
}
static void test_pack_LPGOPHER_VIEW_ATTRIBUTE_TYPEW(void)
{
/* LPGOPHER_VIEW_ATTRIBUTE_TYPEW */
- TEST_TYPE(LPGOPHER_VIEW_ATTRIBUTE_TYPEW, 4, 4);
- TEST_TYPE_POINTER(LPGOPHER_VIEW_ATTRIBUTE_TYPEW, 12, 4);
+ TEST_TYPE_SIZE (LPGOPHER_VIEW_ATTRIBUTE_TYPEW, 4)
+ TEST_TYPE_ALIGN (LPGOPHER_VIEW_ATTRIBUTE_TYPEW, 4)
+ TEST_TARGET_SIZE (LPGOPHER_VIEW_ATTRIBUTE_TYPEW, 12)
+ TEST_TARGET_ALIGN(LPGOPHER_VIEW_ATTRIBUTE_TYPEW, 4)
}
static void test_pack_LPHINTERNET(void)
{
/* LPHINTERNET */
- TEST_TYPE(LPHINTERNET, 4, 4);
- TEST_TYPE_POINTER(LPHINTERNET, 4, 4);
+ TEST_TYPE_SIZE (LPHINTERNET, 4)
+ TEST_TYPE_ALIGN (LPHINTERNET, 4)
+ TEST_TARGET_SIZE (LPHINTERNET, 4)
+ TEST_TARGET_ALIGN(LPHINTERNET, 4)
}
static void test_pack_LPHTTP_VERSION_INFO(void)
{
/* LPHTTP_VERSION_INFO */
- TEST_TYPE(LPHTTP_VERSION_INFO, 4, 4);
- TEST_TYPE_POINTER(LPHTTP_VERSION_INFO, 8, 4);
+ TEST_TYPE_SIZE (LPHTTP_VERSION_INFO, 4)
+ TEST_TYPE_ALIGN (LPHTTP_VERSION_INFO, 4)
+ TEST_TARGET_SIZE (LPHTTP_VERSION_INFO, 8)
+ TEST_TARGET_ALIGN(LPHTTP_VERSION_INFO, 4)
}
static void test_pack_LPINTERNET_ASYNC_RESULT(void)
{
/* LPINTERNET_ASYNC_RESULT */
- TEST_TYPE(LPINTERNET_ASYNC_RESULT, 4, 4);
- TEST_TYPE_POINTER(LPINTERNET_ASYNC_RESULT, 8, 4);
+ TEST_TYPE_SIZE (LPINTERNET_ASYNC_RESULT, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_ASYNC_RESULT, 4)
+ TEST_TARGET_SIZE (LPINTERNET_ASYNC_RESULT, 8)
+ TEST_TARGET_ALIGN(LPINTERNET_ASYNC_RESULT, 4)
}
static void test_pack_LPINTERNET_BUFFERSA(void)
{
/* LPINTERNET_BUFFERSA */
- TEST_TYPE(LPINTERNET_BUFFERSA, 4, 4);
- TEST_TYPE_POINTER(LPINTERNET_BUFFERSA, 40, 4);
+ TEST_TYPE_SIZE (LPINTERNET_BUFFERSA, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_BUFFERSA, 4)
+ TEST_TARGET_SIZE (LPINTERNET_BUFFERSA, 40)
+ TEST_TARGET_ALIGN(LPINTERNET_BUFFERSA, 4)
}
static void test_pack_LPINTERNET_BUFFERSW(void)
{
/* LPINTERNET_BUFFERSW */
- TEST_TYPE(LPINTERNET_BUFFERSW, 4, 4);
- TEST_TYPE_POINTER(LPINTERNET_BUFFERSW, 40, 4);
+ TEST_TYPE_SIZE (LPINTERNET_BUFFERSW, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_BUFFERSW, 4)
+ TEST_TARGET_SIZE (LPINTERNET_BUFFERSW, 40)
+ TEST_TARGET_ALIGN(LPINTERNET_BUFFERSW, 4)
}
static void test_pack_LPINTERNET_CACHE_ENTRY_INFOA(void)
{
/* LPINTERNET_CACHE_ENTRY_INFOA */
- TEST_TYPE(LPINTERNET_CACHE_ENTRY_INFOA, 4, 4);
+ TEST_TYPE_SIZE (LPINTERNET_CACHE_ENTRY_INFOA, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_CACHE_ENTRY_INFOA, 4)
}
static void test_pack_LPINTERNET_CACHE_ENTRY_INFOW(void)
{
/* LPINTERNET_CACHE_ENTRY_INFOW */
- TEST_TYPE(LPINTERNET_CACHE_ENTRY_INFOW, 4, 4);
+ TEST_TYPE_SIZE (LPINTERNET_CACHE_ENTRY_INFOW, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_CACHE_ENTRY_INFOW, 4)
}
static void test_pack_LPINTERNET_CERTIFICATE_INFOA(void)
{
/* LPINTERNET_CERTIFICATE_INFOA */
- TEST_TYPE(LPINTERNET_CERTIFICATE_INFOA, 4, 4);
- TEST_TYPE_POINTER(LPINTERNET_CERTIFICATE_INFOA, 40, 4);
+ TEST_TYPE_SIZE (LPINTERNET_CERTIFICATE_INFOA, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_CERTIFICATE_INFOA, 4)
+ TEST_TARGET_SIZE (LPINTERNET_CERTIFICATE_INFOA, 40)
+ TEST_TARGET_ALIGN(LPINTERNET_CERTIFICATE_INFOA, 4)
}
static void test_pack_LPINTERNET_CERTIFICATE_INFOW(void)
{
/* LPINTERNET_CERTIFICATE_INFOW */
- TEST_TYPE(LPINTERNET_CERTIFICATE_INFOW, 4, 4);
- TEST_TYPE_POINTER(LPINTERNET_CERTIFICATE_INFOW, 40, 4);
+ TEST_TYPE_SIZE (LPINTERNET_CERTIFICATE_INFOW, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_CERTIFICATE_INFOW, 4)
+ TEST_TARGET_SIZE (LPINTERNET_CERTIFICATE_INFOW, 40)
+ TEST_TARGET_ALIGN(LPINTERNET_CERTIFICATE_INFOW, 4)
}
static void test_pack_LPINTERNET_CONNECTED_INFO(void)
{
/* LPINTERNET_CONNECTED_INFO */
- TEST_TYPE(LPINTERNET_CONNECTED_INFO, 4, 4);
- TEST_TYPE_POINTER(LPINTERNET_CONNECTED_INFO, 8, 4);
+ TEST_TYPE_SIZE (LPINTERNET_CONNECTED_INFO, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_CONNECTED_INFO, 4)
+ TEST_TARGET_SIZE (LPINTERNET_CONNECTED_INFO, 8)
+ TEST_TARGET_ALIGN(LPINTERNET_CONNECTED_INFO, 4)
}
static void test_pack_LPINTERNET_PORT(void)
{
/* LPINTERNET_PORT */
- TEST_TYPE(LPINTERNET_PORT, 4, 4);
- TEST_TYPE_POINTER(LPINTERNET_PORT, 2, 2);
+ TEST_TYPE_SIZE (LPINTERNET_PORT, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_PORT, 4)
+ TEST_TARGET_SIZE (LPINTERNET_PORT, 2)
+ TEST_TARGET_ALIGN(LPINTERNET_PORT, 2)
}
static void test_pack_LPINTERNET_PROXY_INFOA(void)
{
/* LPINTERNET_PROXY_INFOA */
- TEST_TYPE(LPINTERNET_PROXY_INFOA, 4, 4);
- TEST_TYPE_POINTER(LPINTERNET_PROXY_INFOA, 12, 4);
+ TEST_TYPE_SIZE (LPINTERNET_PROXY_INFOA, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_PROXY_INFOA, 4)
+ TEST_TARGET_SIZE (LPINTERNET_PROXY_INFOA, 12)
+ TEST_TARGET_ALIGN(LPINTERNET_PROXY_INFOA, 4)
}
static void test_pack_LPINTERNET_PROXY_INFOW(void)
{
/* LPINTERNET_PROXY_INFOW */
- TEST_TYPE(LPINTERNET_PROXY_INFOW, 4, 4);
- TEST_TYPE_POINTER(LPINTERNET_PROXY_INFOW, 12, 4);
+ TEST_TYPE_SIZE (LPINTERNET_PROXY_INFOW, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_PROXY_INFOW, 4)
+ TEST_TARGET_SIZE (LPINTERNET_PROXY_INFOW, 12)
+ TEST_TARGET_ALIGN(LPINTERNET_PROXY_INFOW, 4)
}
static void test_pack_LPINTERNET_STATUS_CALLBACK(void)
{
/* LPINTERNET_STATUS_CALLBACK */
- TEST_TYPE(LPINTERNET_STATUS_CALLBACK, 4, 4);
- TEST_TYPE_POINTER(LPINTERNET_STATUS_CALLBACK, 4, 4);
+ TEST_TYPE_SIZE (LPINTERNET_STATUS_CALLBACK, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_STATUS_CALLBACK, 4)
+ TEST_TARGET_SIZE (LPINTERNET_STATUS_CALLBACK, 4)
+ TEST_TARGET_ALIGN(LPINTERNET_STATUS_CALLBACK, 4)
}
static void test_pack_LPINTERNET_VERSION_INFO(void)
{
/* LPINTERNET_VERSION_INFO */
- TEST_TYPE(LPINTERNET_VERSION_INFO, 4, 4);
- TEST_TYPE_POINTER(LPINTERNET_VERSION_INFO, 8, 4);
+ TEST_TYPE_SIZE (LPINTERNET_VERSION_INFO, 4)
+ TEST_TYPE_ALIGN (LPINTERNET_VERSION_INFO, 4)
+ TEST_TARGET_SIZE (LPINTERNET_VERSION_INFO, 8)
+ TEST_TARGET_ALIGN(LPINTERNET_VERSION_INFO, 4)
}
static void test_pack_LPURL_COMPONENTSA(void)
{
/* LPURL_COMPONENTSA */
- TEST_TYPE(LPURL_COMPONENTSA, 4, 4);
+ TEST_TYPE_SIZE (LPURL_COMPONENTSA, 4)
+ TEST_TYPE_ALIGN (LPURL_COMPONENTSA, 4)
}
static void test_pack_LPURL_COMPONENTSW(void)
{
/* LPURL_COMPONENTSW */
- TEST_TYPE(LPURL_COMPONENTSW, 4, 4);
+ TEST_TYPE_SIZE (LPURL_COMPONENTSW, 4)
+ TEST_TYPE_ALIGN (LPURL_COMPONENTSW, 4)
}
static void test_pack_PFN_AUTH_NOTIFY(void)
{
/* PFN_AUTH_NOTIFY */
- TEST_TYPE(PFN_AUTH_NOTIFY, 4, 4);
+ TEST_TYPE_SIZE (PFN_AUTH_NOTIFY, 4)
+ TEST_TYPE_ALIGN (PFN_AUTH_NOTIFY, 4)
}
static void test_pack_PFN_DIAL_HANDLER(void)
{
/* PFN_DIAL_HANDLER */
- TEST_TYPE(PFN_DIAL_HANDLER, 4, 4);
+ TEST_TYPE_SIZE (PFN_DIAL_HANDLER, 4)
+ TEST_TYPE_ALIGN (PFN_DIAL_HANDLER, 4)
}
static void test_pack_URL_COMPONENTSA(void)
{
/* URL_COMPONENTSA (pack 4) */
- TEST_FIELD(URL_COMPONENTSA, DWORD, dwStructSize, 0, 4, 4);
- TEST_FIELD(URL_COMPONENTSA, LPSTR, lpszScheme, 4, 4, 4);
- TEST_FIELD(URL_COMPONENTSA, DWORD, dwSchemeLength, 8, 4, 4);
+ TEST_FIELD_SIZE (URL_COMPONENTSA, dwStructSize, 4)
+ TEST_FIELD_ALIGN (URL_COMPONENTSA, dwStructSize, 4)
+ TEST_FIELD_OFFSET(URL_COMPONENTSA, dwStructSize, 0)
+ TEST_FIELD_SIZE (URL_COMPONENTSA, lpszScheme, 4)
+ TEST_FIELD_ALIGN (URL_COMPONENTSA, lpszScheme, 4)
+ TEST_FIELD_OFFSET(URL_COMPONENTSA, lpszScheme, 4)
+ TEST_FIELD_SIZE (URL_COMPONENTSA, dwSchemeLength, 4)
+ TEST_FIELD_ALIGN (URL_COMPONENTSA, dwSchemeLength, 4)
+ TEST_FIELD_OFFSET(URL_COMPONENTSA, dwSchemeLength, 8)
}
static void test_pack_URL_COMPONENTSW(void)
{
/* URL_COMPONENTSW (pack 4) */
- TEST_FIELD(URL_COMPONENTSW, DWORD, dwStructSize, 0, 4, 4);
- TEST_FIELD(URL_COMPONENTSW, LPWSTR, lpszScheme, 4, 4, 4);
- TEST_FIELD(URL_COMPONENTSW, DWORD, dwSchemeLength, 8, 4, 4);
+ TEST_FIELD_SIZE (URL_COMPONENTSW, dwStructSize, 4)
+ TEST_FIELD_ALIGN (URL_COMPONENTSW, dwStructSize, 4)
+ TEST_FIELD_OFFSET(URL_COMPONENTSW, dwStructSize, 0)
+ TEST_FIELD_SIZE (URL_COMPONENTSW, lpszScheme, 4)
+ TEST_FIELD_ALIGN (URL_COMPONENTSW, lpszScheme, 4)
+ TEST_FIELD_OFFSET(URL_COMPONENTSW, lpszScheme, 4)
+ TEST_FIELD_SIZE (URL_COMPONENTSW, dwSchemeLength, 4)
+ TEST_FIELD_ALIGN (URL_COMPONENTSW, dwSchemeLength, 4)
+ TEST_FIELD_OFFSET(URL_COMPONENTSW, dwSchemeLength, 8)
}
static void test_pack(void)
@@ -1024,5 +1434,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/wininet/http.c b/rostests/winetests/wininet/http.c
index 705fcac6020..5fd45d5d069 100644
--- a/rostests/winetests/wininet/http.c
+++ b/rostests/winetests/wininet/http.c
@@ -31,7 +31,7 @@
#include "wine/test.h"
-#define TEST_URL "http://www.winehq.org/site/about"
+#define TEST_URL "http://test.winehq.org/hello.html"
static BOOL first_connection_to_test_url = TRUE;
@@ -43,6 +43,12 @@ static BOOL first_connection_to_test_url = TRUE;
#define SET_EXPECT(status) \
SET_EXPECT2(status, 1)
+#define SET_OPTIONAL2(status, num) \
+ optional[status] = num
+
+#define SET_OPTIONAL(status) \
+ SET_OPTIONAL2(status, 1)
+
/* SET_WINE_ALLOW's should be used with an appropriate
* todo_wine CHECK_NOTIFIED at a later point in the code */
#define SET_WINE_ALLOW2(status, num) \
@@ -53,7 +59,7 @@ static BOOL first_connection_to_test_url = TRUE;
#define CHECK_EXPECT(status) \
do { \
- if (!expect[status] && wine_allow[status]) \
+ if (!expect[status] && !optional[status] && wine_allow[status]) \
{ \
todo_wine ok(expect[status], "unexpected status %d (%s)\n", status, \
status < MAX_INTERNET_STATUS && status_string[status][0] != 0 ? \
@@ -62,10 +68,11 @@ static BOOL first_connection_to_test_url = TRUE;
} \
else \
{ \
- ok(expect[status], "unexpected status %d (%s)\n", status, \
+ ok(expect[status] || optional[status], "unexpected status %d (%s)\n", status, \
status < MAX_INTERNET_STATUS && status_string[status][0] != 0 ? \
status_string[status] : "unknown"); \
- expect[status]--; \
+ if (expect[status]) expect[status]--; \
+ else optional[status]--; \
} \
notified[status]++; \
}while(0)
@@ -73,7 +80,7 @@ static BOOL first_connection_to_test_url = TRUE;
/* CLEAR_NOTIFIED used in cases when notification behavior
* differs between Windows versions */
#define CLEAR_NOTIFIED(status) \
- expect[status] = wine_allow[status] = notified[status] = 0;
+ expect[status] = optional[status] = wine_allow[status] = notified[status] = 0;
#define CHECK_NOTIFIED2(status, num) \
do { \
@@ -91,17 +98,13 @@ static BOOL first_connection_to_test_url = TRUE;
#define MAX_INTERNET_STATUS (INTERNET_STATUS_COOKIE_HISTORY+1)
#define MAX_STATUS_NAME 50
-static int expect[MAX_INTERNET_STATUS], wine_allow[MAX_INTERNET_STATUS],
- notified[MAX_INTERNET_STATUS];
+static int expect[MAX_INTERNET_STATUS], optional[MAX_INTERNET_STATUS],
+ wine_allow[MAX_INTERNET_STATUS], notified[MAX_INTERNET_STATUS];
static CHAR status_string[MAX_INTERNET_STATUS][MAX_STATUS_NAME];
static HANDLE hCompleteEvent;
static INTERNET_STATUS_CALLBACK (WINAPI *pInternetSetStatusCallbackA)(HINTERNET ,INTERNET_STATUS_CALLBACK);
-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);
-static BOOL (WINAPI *pInternetTimeToSystemTimeW)(LPCWSTR ,SYSTEMTIME *,DWORD);
static VOID WINAPI callback(
@@ -238,7 +241,6 @@ static VOID WINAPI callback(
static void InternetReadFile_test(int flags)
{
BOOL res;
- DWORD rc;
CHAR buffer[4000];
DWORD length;
DWORD out;
@@ -261,7 +263,7 @@ static void InternetReadFile_test(int flags)
SET_EXPECT(INTERNET_STATUS_HANDLE_CREATED);
trace("InternetConnectA <--\n");
- hic=InternetConnectA(hi, "www.winehq.org", INTERNET_INVALID_PORT_NUMBER,
+ hic=InternetConnectA(hi, "test.winehq.org", INTERNET_INVALID_PORT_NUMBER,
NULL, NULL, INTERNET_SERVICE_HTTP, 0x0, 0xdeadbeef);
ok((hic != 0x0),"InternetConnect failed with error %u\n", GetLastError());
trace("InternetConnectA -->\n");
@@ -270,11 +272,9 @@ static void InternetReadFile_test(int flags)
CHECK_NOTIFIED(INTERNET_STATUS_HANDLE_CREATED);
SET_EXPECT(INTERNET_STATUS_HANDLE_CREATED);
- SET_WINE_ALLOW(INTERNET_STATUS_RESOLVING_NAME);
- SET_WINE_ALLOW(INTERNET_STATUS_NAME_RESOLVED);
trace("HttpOpenRequestA <--\n");
- hor = HttpOpenRequestA(hic, "GET", "/about/", NULL, NULL, types,
+ hor = HttpOpenRequestA(hic, "GET", "/testredirect", NULL, NULL, types,
INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_RESYNCHRONIZE,
0xdeadbead);
if (hor == 0x0 && GetLastError() == ERROR_INTERNET_NAME_NOT_RESOLVED) {
@@ -294,23 +294,28 @@ static void InternetReadFile_test(int flags)
length = sizeof(buffer);
res = InternetQueryOptionA(hor, INTERNET_OPTION_URL, buffer, &length);
ok(res, "InternetQueryOptionA(INTERNET_OPTION_URL) failed: %u\n", GetLastError());
- ok(!strcmp(buffer, "http://www.winehq.org/about/"), "Wrong URL %s\n", buffer);
+ ok(!strcmp(buffer, "http://test.winehq.org/testredirect"), "Wrong URL %s\n", buffer);
+
+ length = sizeof(buffer);
+ res = HttpQueryInfoA(hor, HTTP_QUERY_RAW_HEADERS, buffer, &length, 0x0);
+ ok(res, "HttpQueryInfoA(HTTP_QUERY_RAW_HEADERS) failed with error %d\n", GetLastError());
+ ok(length == 0, "HTTP_QUERY_RAW_HEADERS: expected length 0, but got %d\n", length);
+ ok(!strcmp(buffer, ""), "HTTP_QUERY_RAW_HEADERS: expected string \"\", but got \"%s\"\n", buffer);
CHECK_NOTIFIED(INTERNET_STATUS_HANDLE_CREATED);
- todo_wine
- {
- CHECK_NOT_NOTIFIED(INTERNET_STATUS_RESOLVING_NAME);
- CHECK_NOT_NOTIFIED(INTERNET_STATUS_NAME_RESOLVED);
- }
+ CHECK_NOT_NOTIFIED(INTERNET_STATUS_RESOLVING_NAME);
+ CHECK_NOT_NOTIFIED(INTERNET_STATUS_NAME_RESOLVED);
if (first_connection_to_test_url)
{
SET_EXPECT(INTERNET_STATUS_RESOLVING_NAME);
SET_EXPECT(INTERNET_STATUS_NAME_RESOLVED);
+ SET_WINE_ALLOW(INTERNET_STATUS_RESOLVING_NAME);
+ SET_WINE_ALLOW(INTERNET_STATUS_NAME_RESOLVED);
}
else
{
- SET_WINE_ALLOW(INTERNET_STATUS_RESOLVING_NAME);
- SET_WINE_ALLOW(INTERNET_STATUS_NAME_RESOLVED);
+ SET_WINE_ALLOW2(INTERNET_STATUS_RESOLVING_NAME,2);
+ SET_WINE_ALLOW2(INTERNET_STATUS_NAME_RESOLVED,2);
}
SET_WINE_ALLOW(INTERNET_STATUS_CONNECTING_TO_SERVER);
SET_EXPECT(INTERNET_STATUS_CONNECTING_TO_SERVER);
@@ -320,7 +325,11 @@ static void InternetReadFile_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_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);
if (flags & INTERNET_FLAG_ASYNC)
SET_EXPECT(INTERNET_STATUS_REQUEST_COMPLETE);
else
@@ -328,24 +337,24 @@ static void InternetReadFile_test(int flags)
trace("HttpSendRequestA -->\n");
SetLastError(0xdeadbeef);
- rc = HttpSendRequestA(hor, "", -1, NULL, 0);
+ res = HttpSendRequestA(hor, "", -1, NULL, 0);
if (flags & INTERNET_FLAG_ASYNC)
- ok(((rc == 0)&&(GetLastError() == ERROR_IO_PENDING)),
+ ok(!res && (GetLastError() == ERROR_IO_PENDING),
"Asynchronous HttpSendRequest NOT returning 0 with error ERROR_IO_PENDING\n");
else
- ok((rc != 0) || GetLastError() == ERROR_INTERNET_NAME_NOT_RESOLVED,
+ ok(res || (GetLastError() == ERROR_INTERNET_NAME_NOT_RESOLVED),
"Synchronous HttpSendRequest returning 0, error %u\n", GetLastError());
trace("HttpSendRequestA <--\n");
if (flags & INTERNET_FLAG_ASYNC)
WaitForSingleObject(hCompleteEvent, INFINITE);
- if (first_connection_to_test_url)
+ todo_wine if (first_connection_to_test_url)
{
CHECK_NOTIFIED(INTERNET_STATUS_RESOLVING_NAME);
CHECK_NOTIFIED(INTERNET_STATUS_NAME_RESOLVED);
}
- else todo_wine
+ else
{
CHECK_NOT_NOTIFIED(INTERNET_STATUS_RESOLVING_NAME);
CHECK_NOT_NOTIFIED(INTERNET_STATUS_NAME_RESOLVED);
@@ -358,41 +367,41 @@ static void InternetReadFile_test(int flags)
if (flags & INTERNET_FLAG_ASYNC)
CHECK_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
else
- todo_wine CHECK_NOT_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
+ CHECK_NOT_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
/* Sent on WinXP only if first_connection_to_test_url is TRUE, on Win98 always sent */
CLEAR_NOTIFIED(INTERNET_STATUS_CONNECTING_TO_SERVER);
CLEAR_NOTIFIED(INTERNET_STATUS_CONNECTED_TO_SERVER);
length = 4;
- rc = InternetQueryOptionA(hor,INTERNET_OPTION_REQUEST_FLAGS,&out,&length);
- trace("Option 0x17 -> %i %i\n",rc,out);
+ res = InternetQueryOptionA(hor,INTERNET_OPTION_REQUEST_FLAGS,&out,&length);
+ ok(res, "InternetQueryOptionA(INTERNET_OPTION_REQUEST) failed with error %d\n", GetLastError());
length = 100;
- rc = InternetQueryOptionA(hor,INTERNET_OPTION_URL,buffer,&length);
- trace("Option 0x22 -> %i %s\n",rc,buffer);
+ res = InternetQueryOptionA(hor,INTERNET_OPTION_URL,buffer,&length);
+ ok(res, "InternetQueryOptionA(INTERNET_OPTION_URL) failed with error %d\n", GetLastError());
- length = 4000;
- rc = HttpQueryInfoA(hor,HTTP_QUERY_RAW_HEADERS,buffer,&length,0x0);
+ length = sizeof(buffer);
+ res = HttpQueryInfoA(hor,HTTP_QUERY_RAW_HEADERS,buffer,&length,0x0);
+ ok(res, "HttpQueryInfoA(HTTP_QUERY_RAW_HEADERS) failed with error %d\n", GetLastError());
buffer[length]=0;
- trace("Option 0x16 -> %i %s\n",rc,buffer);
length = sizeof(buffer);
res = InternetQueryOptionA(hor, INTERNET_OPTION_URL, buffer, &length);
ok(res, "InternetQueryOptionA(INTERNET_OPTION_URL) failed: %u\n", GetLastError());
- ok(!strcmp(buffer, "http://www.winehq.org/site/about"), "Wrong URL %s\n", buffer);
+ ok(!strcmp(buffer, "http://test.winehq.org/hello.html"), "Wrong URL %s\n", buffer);
length = 16;
- rc = HttpQueryInfoA(hor,HTTP_QUERY_CONTENT_LENGTH,&buffer,&length,0x0);
- trace("Option 0x5 -> %i %s (%u)\n",rc,buffer,GetLastError());
+ res = HttpQueryInfoA(hor,HTTP_QUERY_CONTENT_LENGTH,&buffer,&length,0x0);
+ trace("Option 0x5 -> %i %s (%u)\n",res,buffer,GetLastError());
length = 100;
- rc = HttpQueryInfoA(hor,HTTP_QUERY_CONTENT_TYPE,buffer,&length,0x0);
+ res = HttpQueryInfoA(hor,HTTP_QUERY_CONTENT_TYPE,buffer,&length,0x0);
buffer[length]=0;
- trace("Option 0x1 -> %i %s\n",rc,buffer);
+ trace("Option 0x1 -> %i %s\n",res,buffer);
SetLastError(0xdeadbeef);
- rc = InternetReadFile(NULL, buffer, 100, &length);
- ok(!rc, "InternetReadFile should have failed\n");
+ res = InternetReadFile(NULL, buffer, 100, &length);
+ ok(!res, "InternetReadFile should have failed\n");
ok(GetLastError() == ERROR_INVALID_HANDLE,
"InternetReadFile should have set last error to ERROR_INVALID_HANDLE instead of %u\n",
GetLastError());
@@ -400,19 +409,17 @@ static void InternetReadFile_test(int flags)
length = 100;
trace("Entering Query loop\n");
- SET_EXPECT(INTERNET_STATUS_CLOSING_CONNECTION);
- SET_EXPECT(INTERNET_STATUS_CONNECTION_CLOSED);
while (TRUE)
{
if (flags & INTERNET_FLAG_ASYNC)
SET_EXPECT(INTERNET_STATUS_REQUEST_COMPLETE);
- rc = InternetQueryDataAvailable(hor,&length,0x0,0x0);
- ok(!(rc == 0 && length != 0),"InternetQueryDataAvailable failed with non-zero length\n");
- ok(rc != 0 || ((flags & INTERNET_FLAG_ASYNC) && GetLastError() == ERROR_IO_PENDING),
+ res = InternetQueryDataAvailable(hor,&length,0x0,0x0);
+ ok(!(!res && length != 0),"InternetQueryDataAvailable failed with non-zero length\n");
+ ok(res || ((flags & INTERNET_FLAG_ASYNC) && GetLastError() == ERROR_IO_PENDING),
"InternetQueryDataAvailable failed, error %d\n", GetLastError());
if (flags & INTERNET_FLAG_ASYNC)
{
- if (rc != 0)
+ if (res)
{
CHECK_NOT_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
}
@@ -428,31 +435,32 @@ static void InternetReadFile_test(int flags)
char *buffer;
buffer = HeapAlloc(GetProcessHeap(),0,length+1);
- rc = InternetReadFile(hor,buffer,length,&length);
+ res = InternetReadFile(hor,buffer,length,&length);
buffer[length]=0;
- trace("ReadFile -> %i %i\n",rc,length);
+ trace("ReadFile -> %s %i\n",res?"TRUE":"FALSE",length);
HeapFree(GetProcessHeap(),0,buffer);
}
if (length == 0)
break;
}
- /* WinXP does not send, but Win98 does */
- CLEAR_NOTIFIED(INTERNET_STATUS_CLOSING_CONNECTION);
- CLEAR_NOTIFIED(INTERNET_STATUS_CONNECTION_CLOSED);
+ todo_wine CHECK_NOTIFIED2(INTERNET_STATUS_CLOSING_CONNECTION, 2);
+ todo_wine CHECK_NOTIFIED2(INTERNET_STATUS_CONNECTION_CLOSED, 2);
abort:
+ trace("aborting\n");
SET_EXPECT2(INTERNET_STATUS_HANDLE_CLOSING, (hor != 0x0) + (hic != 0x0));
if (hor != 0x0) {
SET_WINE_ALLOW(INTERNET_STATUS_CLOSING_CONNECTION);
SET_WINE_ALLOW(INTERNET_STATUS_CONNECTION_CLOSED);
SetLastError(0xdeadbeef);
- rc = InternetCloseHandle(hor);
- ok ((rc != 0), "InternetCloseHandle of handle opened by HttpOpenRequestA failed\n");
+ trace("closing\n");
+ res = InternetCloseHandle(hor);
+ ok (res, "InternetCloseHandle of handle opened by HttpOpenRequestA failed\n");
SetLastError(0xdeadbeef);
- rc = InternetCloseHandle(hor);
- ok ((rc == 0), "Double close of handle opened by HttpOpenRequestA succeeded\n");
+ res = InternetCloseHandle(hor);
+ ok (!res, "Double close of handle opened by HttpOpenRequestA succeeded\n");
ok (GetLastError() == ERROR_INVALID_HANDLE,
"Double close of handle should have set ERROR_INVALID_HANDLE instead of %u\n",
GetLastError());
@@ -463,8 +471,9 @@ abort:
* INTERNET_STATUS_HANDLE_CLOSING notifications matches the number expected. */
if (hi != 0x0) {
SET_WINE_ALLOW(INTERNET_STATUS_HANDLE_CLOSING);
- rc = InternetCloseHandle(hi);
- ok ((rc != 0), "InternetCloseHandle of handle opened by InternetOpenA failed\n");
+ trace("closing 2\n");
+ res = InternetCloseHandle(hi);
+ ok (res, "InternetCloseHandle of handle opened by InternetOpenA failed\n");
if (flags & INTERNET_FLAG_ASYNC)
Sleep(100);
}
@@ -507,7 +516,7 @@ static void InternetReadFileExA_test(int flags)
SET_EXPECT(INTERNET_STATUS_HANDLE_CREATED);
trace("InternetConnectA <--\n");
- hic=InternetConnectA(hi, "www.winehq.org", INTERNET_INVALID_PORT_NUMBER,
+ hic=InternetConnectA(hi, "test.winehq.org", INTERNET_INVALID_PORT_NUMBER,
NULL, NULL, INTERNET_SERVICE_HTTP, 0x0, 0xdeadbeef);
ok((hic != 0x0),"InternetConnect failed with error %u\n", GetLastError());
trace("InternetConnectA -->\n");
@@ -516,11 +525,9 @@ static void InternetReadFileExA_test(int flags)
CHECK_NOTIFIED(INTERNET_STATUS_HANDLE_CREATED);
SET_EXPECT(INTERNET_STATUS_HANDLE_CREATED);
- SET_WINE_ALLOW(INTERNET_STATUS_RESOLVING_NAME);
- SET_WINE_ALLOW(INTERNET_STATUS_NAME_RESOLVED);
trace("HttpOpenRequestA <--\n");
- hor = HttpOpenRequestA(hic, "GET", "/about/", NULL, NULL, types,
+ hor = HttpOpenRequestA(hic, "GET", "/testredirect", NULL, NULL, types,
INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_RESYNCHRONIZE,
0xdeadbead);
if (hor == 0x0 && GetLastError() == ERROR_INTERNET_NAME_NOT_RESOLVED) {
@@ -538,20 +545,19 @@ static void InternetReadFileExA_test(int flags)
if (hor == 0x0) goto abort;
CHECK_NOTIFIED(INTERNET_STATUS_HANDLE_CREATED);
- todo_wine
- {
- CHECK_NOT_NOTIFIED(INTERNET_STATUS_RESOLVING_NAME);
- CHECK_NOT_NOTIFIED(INTERNET_STATUS_NAME_RESOLVED);
- }
+ CHECK_NOT_NOTIFIED(INTERNET_STATUS_RESOLVING_NAME);
+ CHECK_NOT_NOTIFIED(INTERNET_STATUS_NAME_RESOLVED);
if (first_connection_to_test_url)
{
SET_EXPECT(INTERNET_STATUS_RESOLVING_NAME);
SET_EXPECT(INTERNET_STATUS_NAME_RESOLVED);
+ SET_WINE_ALLOW(INTERNET_STATUS_RESOLVING_NAME);
+ SET_WINE_ALLOW(INTERNET_STATUS_NAME_RESOLVED);
}
else
{
- SET_WINE_ALLOW(INTERNET_STATUS_RESOLVING_NAME);
- SET_WINE_ALLOW(INTERNET_STATUS_NAME_RESOLVED);
+ SET_WINE_ALLOW2(INTERNET_STATUS_RESOLVING_NAME,2);
+ SET_WINE_ALLOW2(INTERNET_STATUS_NAME_RESOLVED,2);
}
SET_WINE_ALLOW(INTERNET_STATUS_CONNECTING_TO_SERVER);
SET_EXPECT(INTERNET_STATUS_CONNECTING_TO_SERVER);
@@ -561,7 +567,11 @@ 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_EXPECT(INTERNET_STATUS_REDIRECT);
+ SET_OPTIONAL(INTERNET_STATUS_CONNECTING_TO_SERVER);
+ SET_OPTIONAL(INTERNET_STATUS_CONNECTED_TO_SERVER);
if (flags & INTERNET_FLAG_ASYNC)
SET_EXPECT(INTERNET_STATUS_REQUEST_COMPLETE);
else
@@ -595,6 +605,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_NOTIFIED(INTERNET_STATUS_REDIRECT);
if (flags & INTERNET_FLAG_ASYNC)
CHECK_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
@@ -626,10 +638,13 @@ static void InternetReadFileExA_test(int flags)
inetbuffers.lpvBuffer = NULL;
inetbuffers.dwOffsetHigh = 1234;
inetbuffers.dwOffsetLow = 5678;
- SET_WINE_ALLOW(INTERNET_STATUS_RECEIVING_RESPONSE);
- SET_WINE_ALLOW(INTERNET_STATUS_RESPONSE_RECEIVED);
+ SET_EXPECT(INTERNET_STATUS_RECEIVING_RESPONSE);
+ SET_EXPECT(INTERNET_STATUS_RESPONSE_RECEIVED);
+ SET_EXPECT(INTERNET_STATUS_CLOSING_CONNECTION);
+ SET_EXPECT(INTERNET_STATUS_CONNECTION_CLOSED);
rc = InternetReadFileEx(hor, &inetbuffers, 0, 0xdeadcafe);
ok(rc, "InternetReadFileEx failed with error %u\n", GetLastError());
+ trace("read %i bytes\n", inetbuffers.dwBufferLength);
todo_wine
{
CHECK_NOT_NOTIFIED(INTERNET_STATUS_RECEIVING_RESPONSE);
@@ -654,9 +669,11 @@ static void InternetReadFileExA_test(int flags)
inetbuffers.dwOffsetHigh = 1234;
inetbuffers.dwOffsetLow = 5678;
- SET_EXPECT(INTERNET_STATUS_RECEIVING_RESPONSE);
+ SET_WINE_ALLOW(INTERNET_STATUS_RECEIVING_RESPONSE);
+ SET_WINE_ALLOW(INTERNET_STATUS_RESPONSE_RECEIVED);
+ SET_EXPECT(INTERNET_STATUS_CLOSING_CONNECTION);
+ SET_EXPECT(INTERNET_STATUS_CONNECTION_CLOSED);
SET_EXPECT(INTERNET_STATUS_REQUEST_COMPLETE);
- SET_EXPECT(INTERNET_STATUS_RESPONSE_RECEIVED);
rc = InternetReadFileExA(hor, &inetbuffers, IRF_ASYNC | IRF_USE_CONTEXT, 0xcafebabe);
if (!rc)
{
@@ -682,8 +699,10 @@ static void InternetReadFileExA_test(int flags)
CHECK_NOT_NOTIFIED(INTERNET_STATUS_REQUEST_COMPLETE);
if (inetbuffers.dwBufferLength)
{
- CHECK_NOTIFIED(INTERNET_STATUS_RECEIVING_RESPONSE);
- CHECK_NOTIFIED(INTERNET_STATUS_RESPONSE_RECEIVED);
+ todo_wine {
+ CHECK_NOT_NOTIFIED(INTERNET_STATUS_RECEIVING_RESPONSE);
+ CHECK_NOT_NOTIFIED(INTERNET_STATUS_RESPONSE_RECEIVED);
+ }
}
else
{
@@ -735,16 +754,8 @@ abort:
Sleep(100);
CHECK_NOTIFIED2(INTERNET_STATUS_HANDLE_CLOSING, (hor != 0x0) + (hic != 0x0));
}
- if (hor != 0x0) todo_wine
- {
- CHECK_NOT_NOTIFIED(INTERNET_STATUS_CLOSING_CONNECTION);
- CHECK_NOT_NOTIFIED(INTERNET_STATUS_CONNECTION_CLOSED);
- }
- else
- {
- CHECK_NOT_NOTIFIED(INTERNET_STATUS_CLOSING_CONNECTION);
- CHECK_NOT_NOTIFIED(INTERNET_STATUS_CONNECTION_CLOSED);
- }
+ CHECK_NOT_NOTIFIED(INTERNET_STATUS_CLOSING_CONNECTION);
+ CHECK_NOT_NOTIFIED(INTERNET_STATUS_CONNECTION_CLOSED);
CloseHandle(hCompleteEvent);
first_connection_to_test_url = FALSE;
}
@@ -779,91 +790,6 @@ static void InternetOpenUrlA_test(void)
InternetCloseHandle(myhinternet);
}
-static void InternetTimeFromSystemTimeA_test(void)
-{
- BOOL ret;
- static const SYSTEMTIME time = { 2005, 1, 5, 7, 12, 6, 35, 0 };
- char string[INTERNET_RFC1123_BUFSIZE];
- static const char expect[] = "Fri, 07 Jan 2005 12:06:35 GMT";
-
- ret = pInternetTimeFromSystemTimeA( &time, INTERNET_RFC1123_FORMAT, string, sizeof(string) );
- ok( ret, "InternetTimeFromSystemTimeA failed (%u)\n", GetLastError() );
-
- ok( !memcmp( string, expect, sizeof(expect) ),
- "InternetTimeFromSystemTimeA failed (%u)\n", GetLastError() );
-}
-
-static void InternetTimeFromSystemTimeW_test(void)
-{
- BOOL ret;
- static const SYSTEMTIME time = { 2005, 1, 5, 7, 12, 6, 35, 0 };
- WCHAR string[INTERNET_RFC1123_BUFSIZE + 1];
- static const WCHAR expect[] = { 'F','r','i',',',' ','0','7',' ','J','a','n',' ','2','0','0','5',' ',
- '1','2',':','0','6',':','3','5',' ','G','M','T',0 };
-
- ret = pInternetTimeFromSystemTimeW( &time, INTERNET_RFC1123_FORMAT, string, sizeof(string) );
- ok( ret, "InternetTimeFromSystemTimeW failed (%u)\n", GetLastError() );
-
- ok( !memcmp( string, expect, sizeof(expect) ),
- "InternetTimeFromSystemTimeW failed (%u)\n", GetLastError() );
-}
-
-static void InternetTimeToSystemTimeA_test(void)
-{
- BOOL ret;
- SYSTEMTIME time;
- static const SYSTEMTIME expect = { 2005, 1, 5, 7, 12, 6, 35, 0 };
- static const char string[] = "Fri, 07 Jan 2005 12:06:35 GMT";
- static const char string2[] = " fri 7 jan 2005 12 06 35";
-
- ret = pInternetTimeToSystemTimeA( string, &time, 0 );
- ok( ret, "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
- ok( !memcmp( &time, &expect, sizeof(expect) ),
- "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
-
- ret = pInternetTimeToSystemTimeA( string2, &time, 0 );
- ok( ret, "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
- ok( !memcmp( &time, &expect, sizeof(expect) ),
- "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
-}
-
-static void InternetTimeToSystemTimeW_test(void)
-{
- BOOL ret;
- SYSTEMTIME time;
- static const SYSTEMTIME expect = { 2005, 1, 5, 7, 12, 6, 35, 0 };
- static const WCHAR string[] = { 'F','r','i',',',' ','0','7',' ','J','a','n',' ','2','0','0','5',' ',
- '1','2',':','0','6',':','3','5',' ','G','M','T',0 };
- static const WCHAR string2[] = { ' ','f','r','i',' ','7',' ','j','a','n',' ','2','0','0','5',' ',
- '1','2',' ','0','6',' ','3','5',0 };
- static const WCHAR string3[] = { 'F','r',0 };
-
- ret = pInternetTimeToSystemTimeW( NULL, NULL, 0 );
- ok( !ret, "InternetTimeToSystemTimeW succeeded (%u)\n", GetLastError() );
-
- ret = pInternetTimeToSystemTimeW( NULL, &time, 0 );
- ok( !ret, "InternetTimeToSystemTimeW succeeded (%u)\n", GetLastError() );
-
- ret = pInternetTimeToSystemTimeW( string, NULL, 0 );
- ok( !ret, "InternetTimeToSystemTimeW succeeded (%u)\n", GetLastError() );
-
- ret = pInternetTimeToSystemTimeW( string, &time, 0 );
- ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
-
- ret = pInternetTimeToSystemTimeW( string, &time, 0 );
- ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
- ok( !memcmp( &time, &expect, sizeof(expect) ),
- "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
-
- ret = pInternetTimeToSystemTimeW( string2, &time, 0 );
- ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
- ok( !memcmp( &time, &expect, sizeof(expect) ),
- "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
-
- ret = pInternetTimeToSystemTimeW( string3, &time, 0 );
- ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
-}
-
static void HttpSendRequestEx_test(void)
{
HINTERNET hSession;
@@ -891,7 +817,7 @@ static void HttpSendRequestEx_test(void)
NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);
if (!hRequest && GetLastError() == ERROR_INTERNET_NAME_NOT_RESOLVED)
{
- trace( "Network unreachable, skipping test\n" );
+ skip( "Network unreachable, skipping test\n" );
goto done;
}
ok( hRequest != NULL, "Failed to open request handle err %u\n", GetLastError());
@@ -951,14 +877,14 @@ static void InternetOpenRequest_test(void)
ok(connect == NULL, "InternetConnectA should have failed\n");
ok(GetLastError() == ERROR_INVALID_PARAMETER, "InternetConnectA with blank server named should have failed with ERROR_INVALID_PARAMETER instead of %d\n", GetLastError());
- connect = InternetConnectA(session, "winehq.org", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL,
+ connect = InternetConnectA(session, "test.winehq.org", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL,
INTERNET_SERVICE_HTTP, 0, 0);
- ok(connect != NULL, "Unable to connect to http://winehq.org with error %d\n", GetLastError());
+ ok(connect != NULL, "Unable to connect to http://test.winehq.org with error %d\n", GetLastError());
request = HttpOpenRequestA(connect, NULL, "/", NULL, NULL, types, INTERNET_FLAG_NO_CACHE_WRITE, 0);
if (!request && GetLastError() == ERROR_INTERNET_NAME_NOT_RESOLVED)
{
- trace( "Network unreachable, skipping test\n" );
+ skip( "Network unreachable, skipping test\n" );
goto done;
}
ok(request != NULL, "Failed to open request handle err %u\n", GetLastError());
@@ -993,14 +919,14 @@ static void test_http_cache(void)
session = InternetOpenA("Wine Regression Test", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
ok(session != NULL ,"Unable to open Internet session\n");
- connect = InternetConnectA(session, "www.winehq.org", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL,
+ connect = InternetConnectA(session, "test.winehq.org", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL,
INTERNET_SERVICE_HTTP, 0, 0);
- ok(connect != NULL, "Unable to connect to http://winehq.org with error %d\n", GetLastError());
+ ok(connect != NULL, "Unable to connect to http://test.winehq.org with error %d\n", GetLastError());
- request = HttpOpenRequestA(connect, NULL, "/site/about", NULL, NULL, types, INTERNET_FLAG_NEED_FILE, 0);
+ request = HttpOpenRequestA(connect, NULL, "/hello.html", NULL, NULL, types, INTERNET_FLAG_NEED_FILE, 0);
if (!request && GetLastError() == ERROR_INTERNET_NAME_NOT_RESOLVED)
{
- trace( "Network unreachable, skipping test\n" );
+ skip( "Network unreachable, skipping test\n" );
ok(InternetCloseHandle(connect), "Close connect handle failed\n");
ok(InternetCloseHandle(session), "Close session handle failed\n");
@@ -1012,7 +938,7 @@ static void test_http_cache(void)
size = sizeof(url);
ret = InternetQueryOptionA(request, INTERNET_OPTION_URL, url, &size);
ok(ret, "InternetQueryOptionA(INTERNET_OPTION_url) failed: %u\n", GetLastError());
- ok(!strcmp(url, "http://www.winehq.org/site/about"), "Wrong URL %s\n", url);
+ ok(!strcmp(url, "http://test.winehq.org/hello.html"), "Wrong URL %s\n", url);
size = sizeof(file_name);
ret = InternetQueryOptionA(request, INTERNET_OPTION_DATAFILE_NAME, file_name, &size);
@@ -1031,26 +957,28 @@ static void test_http_cache(void)
FILE_ATTRIBUTE_NORMAL, NULL);
ok(file != INVALID_HANDLE_VALUE, "Could not create file: %u\n", GetLastError());
file_size = GetFileSize(file, NULL);
- ok(file_size == 0, "file size=%d\n", file_size);
+ todo_wine ok(file_size == 106, "file size = %u\n", file_size);
+ size = sizeof(buf);
ret = InternetReadFile(request, buf, sizeof(buf), &size);
ok(ret, "InternetReadFile failed: %u\n", GetLastError());
- ok(size == sizeof(buf), "size=%d\n", size);
+ ok(size == 100, "size = %u\n", size);
file_size = GetFileSize(file, NULL);
- ok(file_size == sizeof(buf), "file size=%d\n", file_size);
+ todo_wine ok(file_size == 106, "file size = %u\n", file_size);
CloseHandle(file);
ok(InternetCloseHandle(request), "Close request handle failed\n");
file = CreateFile(file_name, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
- ok(file == INVALID_HANDLE_VALUE, "CreateFile succeeded\n");
- ok(GetLastError() == ERROR_FILE_NOT_FOUND, "GetLastError()=%u, expected ERROR_FILE_NOT_FOUND\n", GetLastError());
+ todo_wine ok(file != INVALID_HANDLE_VALUE, "CreateFile succeeded\n");
+ CloseHandle(file);
request = HttpOpenRequestA(connect, NULL, "/", NULL, NULL, types, INTERNET_FLAG_NO_CACHE_WRITE, 0);
ok(request != NULL, "Failed to open request handle err %u\n", GetLastError());
+ size = sizeof(file_name);
ret = InternetQueryOptionA(request, INTERNET_OPTION_DATAFILE_NAME, file_name, &size);
ok(!ret, "InternetQueryOptionA(INTERNET_OPTION_DATAFILE_NAME) succeeded\n");
ok(GetLastError() == ERROR_INTERNET_ITEM_NOT_FOUND, "GetLastError()=%u\n", GetLastError());
@@ -1061,17 +989,14 @@ static void test_http_cache(void)
size = sizeof(file_name);
ret = InternetQueryOptionA(request, INTERNET_OPTION_DATAFILE_NAME, file_name, &size);
- ok(!ret, "InternetQueryOptionA(INTERNET_OPTION_DATAFILE_NAME) succeeded\n");
- ok(GetLastError() == ERROR_INTERNET_ITEM_NOT_FOUND, "GetLastError()=%u\n", GetLastError());
- ok(!size, "size = %d\n", size);
+ todo_wine ok(ret, "InternetQueryOptionA(INTERNET_OPTION_DATAFILE_NAME) failed %u\n", GetLastError());
file = CreateFile(file_name, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
- ok(file == INVALID_HANDLE_VALUE, "CreateFile succeeded\n");
- ok(GetLastError() == ERROR_FILE_NOT_FOUND, "GetLastError()=%u, expected ERROR_FILE_NOT_FOUND\n", GetLastError());
+ todo_wine ok(file != INVALID_HANDLE_VALUE, "CreateFile succeeded\n");
+ CloseHandle(file);
ok(InternetCloseHandle(request), "Close request handle failed\n");
-
ok(InternetCloseHandle(connect), "Close connect handle failed\n");
ok(InternetCloseHandle(session), "Close session handle failed\n");
}
@@ -1082,7 +1007,9 @@ static void HttpHeaders_test(void)
HINTERNET hConnect;
HINTERNET hRequest;
CHAR buffer[256];
+ WCHAR wbuffer[256];
DWORD len = 256;
+ DWORD oldlen;
DWORD index = 0;
hSession = InternetOpen("Wine Regression Test",
@@ -1096,7 +1023,7 @@ static void HttpHeaders_test(void)
NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);
if (!hRequest && GetLastError() == ERROR_INTERNET_NAME_NOT_RESOLVED)
{
- trace( "Network unreachable, skipping test\n" );
+ skip( "Network unreachable, skipping test\n" );
goto done;
}
ok( hRequest != NULL, "Failed to open request handle\n");
@@ -1160,19 +1087,57 @@ static void HttpHeaders_test(void)
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Unexpected last error: %d\n", GetLastError());
ok(len > 40, "Invalid length (exp. more than 40, got %d)\n", len);
ok(index == 0, "Index was incremented\n");
+ oldlen = len; /* bytes; at least long enough to hold buffer & nul */
/* a working query */
index = 0;
len = sizeof(buffer);
+ memset(buffer, 'x', sizeof(buffer));
ok(HttpQueryInfo(hRequest,HTTP_QUERY_RAW_HEADERS_CRLF|HTTP_QUERY_FLAG_REQUEST_HEADERS,
buffer,&len,&index),"Unable to query header\n");
+ ok(len + sizeof(CHAR) <= oldlen, "Result longer than advertised\n");
+ ok((len < sizeof(buffer)-sizeof(CHAR)) && (buffer[len/sizeof(CHAR)] == 0),"No NUL at end\n");
+ ok(len == strlen(buffer) * sizeof(CHAR), "Length wrong\n");
/* what's in the middle differs between Wine and Windows so currently we check only the beginning and the end */
ok(strncmp(buffer, "POST /posttest.php HTTP/1", 25)==0, "Invalid beginning of headers string\n");
ok(strcmp(buffer + strlen(buffer) - 4, "\r\n\r\n")==0, "Invalid end of headers string\n");
ok(index == 0, "Index was incremented\n");
+ /* Like above two tests, but for W version */
+ index = 0;
+ len = 0;
+ SetLastError(0xdeadbeef);
+ ok(HttpQueryInfoW(hRequest,HTTP_QUERY_RAW_HEADERS_CRLF|HTTP_QUERY_FLAG_REQUEST_HEADERS,
+ NULL,&len,&index) == FALSE,"Query worked\n");
+ ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "Unexpected last error: %d\n", GetLastError());
+ ok(len > 80, "Invalid length (exp. more than 80, got %d)\n", len);
+ ok(index == 0, "Index was incremented\n");
+ oldlen = len; /* bytes; at least long enough to hold buffer & nul */
+
+ /* a working query */
+ index = 0;
+ len = sizeof(wbuffer);
+ memset(wbuffer, 'x', sizeof(wbuffer));
+ ok(HttpQueryInfoW(hRequest,HTTP_QUERY_RAW_HEADERS_CRLF|HTTP_QUERY_FLAG_REQUEST_HEADERS,
+ wbuffer,&len,&index),"Unable to query header\n");
+ ok(len + sizeof(WCHAR) <= oldlen, "Result longer than advertised\n");
+ ok(len == lstrlenW(wbuffer) * sizeof(WCHAR), "Length wrong\n");
+ ok((len < sizeof(wbuffer)-sizeof(WCHAR)) && (wbuffer[len/sizeof(WCHAR)] == 0),"No NUL at end\n");
+ ok(index == 0, "Index was incremented\n");
+
+ /* end of W version tests */
+
+ /* Without HTTP_QUERY_FLAG_REQUEST_HEADERS */
+ index = 0;
+ len = sizeof(buffer);
+ memset(buffer, 'x', sizeof(buffer));
+ ok(HttpQueryInfo(hRequest,HTTP_QUERY_RAW_HEADERS_CRLF,
+ buffer,&len,&index) == TRUE,"Query failed\n");
+ ok(len == 2, "Expected 2, got %d\n", len);
+ ok(strcmp(buffer, "\r\n") == 0, "Expected CRLF, got '%s'\n", buffer);
+ ok(index == 0, "Index was incremented\n");
ok(HttpAddRequestHeaders(hRequest,"Warning:test2",-1,HTTP_ADDREQ_FLAG_ADD),
"Failed to add duplicate header using HTTP_ADDREQ_FLAG_ADD\n");
@@ -1319,6 +1284,15 @@ static const char okmsg[] =
"Server: winetest\r\n"
"\r\n";
+static const char okmsg2[] =
+"HTTP/1.1 200 OK\r\n"
+"Date: Mon, 01 Dec 2008 13:44:34 GMT\r\n"
+"Server: winetest\r\n"
+"Content-Length: 0\r\n"
+"Set-Cookie: one\r\n"
+"Set-Cookie: two\r\n"
+"\r\n";
+
static const char notokmsg[] =
"HTTP/1.1 400 Bad Request\r\n"
"Server: winetest\r\n"
@@ -1327,6 +1301,8 @@ static const char notokmsg[] =
static const char noauthmsg[] =
"HTTP/1.1 401 Unauthorized\r\n"
"Server: winetest\r\n"
+"Connection: close\r\n"
+"WWW-Authenticate: Basic realm=\"placebo\"\r\n"
"\r\n";
static const char proxymsg[] =
@@ -1356,6 +1332,8 @@ static DWORD CALLBACK server_thread(LPVOID param)
char buffer[0x100];
WSADATA wsaData;
int last_request = 0;
+ char host_header[22];
+ static int test_b = 0;
WSAStartup(MAKEWORD(1,1), &wsaData);
@@ -1379,6 +1357,8 @@ static DWORD CALLBACK server_thread(LPVOID param)
SetEvent(si->hEvent);
+ sprintf(host_header, "Host: localhost:%d", si->port);
+
do
{
c = accept(s, NULL, NULL);
@@ -1394,7 +1374,6 @@ static DWORD CALLBACK server_thread(LPVOID param)
buffer[i-3] == '\r' && buffer[i-1] == '\r')
break;
}
-
if (strstr(buffer, "GET /test1"))
{
if (!strstr(buffer, "Content-Length: 0"))
@@ -1405,7 +1384,6 @@ static DWORD CALLBACK server_thread(LPVOID param)
else
send(c, notokmsg, sizeof notokmsg-1, 0);
}
-
if (strstr(buffer, "/test2"))
{
if (strstr(buffer, "Proxy-Authorization: Basic bWlrZToxMTAx"))
@@ -1416,7 +1394,6 @@ static DWORD CALLBACK server_thread(LPVOID param)
else
send(c, proxymsg, sizeof proxymsg-1, 0);
}
-
if (strstr(buffer, "/test3"))
{
if (strstr(buffer, "Authorization: Basic dXNlcjpwd2Q="))
@@ -1424,7 +1401,6 @@ static DWORD CALLBACK server_thread(LPVOID param)
else
send(c, noauthmsg, sizeof noauthmsg-1, 0);
}
-
if (strstr(buffer, "/test4"))
{
if (strstr(buffer, "Connection: Close"))
@@ -1432,8 +1408,9 @@ static DWORD CALLBACK server_thread(LPVOID param)
else
send(c, notokmsg, sizeof notokmsg-1, 0);
}
-
- if (strstr(buffer, "POST /test5"))
+ if (strstr(buffer, "POST /test5") ||
+ strstr(buffer, "RPC_IN_DATA /test5") ||
+ strstr(buffer, "RPC_OUT_DATA /test5"))
{
if (strstr(buffer, "Content-Length: 0"))
{
@@ -1443,7 +1420,6 @@ static DWORD CALLBACK server_thread(LPVOID param)
else
send(c, notokmsg, sizeof notokmsg-1, 0);
}
-
if (strstr(buffer, "GET /test6"))
{
send(c, contmsg, sizeof contmsg-1, 0);
@@ -1451,7 +1427,67 @@ static DWORD CALLBACK server_thread(LPVOID param)
send(c, okmsg, sizeof okmsg-1, 0);
send(c, page1, sizeof page1-1, 0);
}
-
+ if (strstr(buffer, "POST /test7"))
+ {
+ if (strstr(buffer, "Content-Length: 100"))
+ {
+ send(c, okmsg, sizeof okmsg-1, 0);
+ send(c, page1, sizeof page1-1, 0);
+ }
+ else
+ send(c, notokmsg, sizeof notokmsg-1, 0);
+ }
+ if (strstr(buffer, "/test8"))
+ {
+ if (!strstr(buffer, "Connection: Close") &&
+ strstr(buffer, "Connection: Keep-Alive") &&
+ !strstr(buffer, "Cache-Control: no-cache") &&
+ !strstr(buffer, "Pragma: no-cache") &&
+ strstr(buffer, host_header))
+ send(c, okmsg, sizeof okmsg-1, 0);
+ else
+ send(c, notokmsg, sizeof notokmsg-1, 0);
+ }
+ if (strstr(buffer, "/test9"))
+ {
+ if (!strstr(buffer, "Connection: Close") &&
+ !strstr(buffer, "Connection: Keep-Alive") &&
+ !strstr(buffer, "Cache-Control: no-cache") &&
+ !strstr(buffer, "Pragma: no-cache") &&
+ strstr(buffer, host_header))
+ send(c, okmsg, sizeof okmsg-1, 0);
+ else
+ send(c, notokmsg, sizeof notokmsg-1, 0);
+ }
+ if (strstr(buffer, "/testA"))
+ {
+ if (!strstr(buffer, "Connection: Close") &&
+ !strstr(buffer, "Connection: Keep-Alive") &&
+ (strstr(buffer, "Cache-Control: no-cache") ||
+ strstr(buffer, "Pragma: no-cache")) &&
+ strstr(buffer, host_header))
+ send(c, okmsg, sizeof okmsg-1, 0);
+ else
+ send(c, notokmsg, sizeof notokmsg-1, 0);
+ }
+ if (!test_b && strstr(buffer, "/testB HTTP/1.1"))
+ {
+ test_b = 1;
+ send(c, okmsg, sizeof okmsg-1, 0);
+ recvfrom(c, buffer, sizeof buffer, 0, NULL, NULL);
+ send(c, okmsg, sizeof okmsg-1, 0);
+ }
+ if (strstr(buffer, "/testC"))
+ {
+ if (strstr(buffer, "Cookie: cookie=biscuit"))
+ send(c, okmsg, sizeof okmsg-1, 0);
+ else
+ send(c, notokmsg, sizeof notokmsg-1, 0);
+ }
+ if (strstr(buffer, "/testD"))
+ {
+ send(c, okmsg2, sizeof okmsg2-1, 0);
+ }
if (strstr(buffer, "GET /quit"))
{
send(c, okmsg, sizeof okmsg-1, 0);
@@ -1569,7 +1605,7 @@ static void test_proxy_direct(int port)
ok(hi != NULL, "open failed\n");
/* try connect without authorization */
- hc = InternetConnect(hi, "www.winehq.org/", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
+ hc = InternetConnect(hi, "test.winehq.org/", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
ok(hc != NULL, "connect failed\n");
hr = HttpOpenRequest(hc, NULL, "/test2", NULL, NULL, NULL, 0, 0);
@@ -1627,7 +1663,7 @@ static void test_header_handling_order(int port)
request = HttpOpenRequest(connect, NULL, "/test3", NULL, NULL, types, INTERNET_FLAG_KEEP_CONNECTION, 0);
ok(request != NULL, "HttpOpenRequest failed\n");
- ret = HttpAddRequestHeaders(request, authorization, ~0UL, HTTP_ADDREQ_FLAG_ADD);
+ ret = HttpAddRequestHeaders(request, authorization, ~0u, HTTP_ADDREQ_FLAG_ADD);
ok(ret, "HttpAddRequestHeaders failed\n");
ret = HttpSendRequest(request, NULL, 0, NULL, 0);
@@ -1644,9 +1680,232 @@ static void test_header_handling_order(int port)
request = HttpOpenRequest(connect, NULL, "/test4", NULL, NULL, types, INTERNET_FLAG_KEEP_CONNECTION, 0);
ok(request != NULL, "HttpOpenRequest failed\n");
- ret = HttpSendRequest(request, connection, ~0UL, NULL, 0);
+ ret = HttpSendRequest(request, connection, ~0u, NULL, 0);
ok(ret, "HttpSendRequest failed\n");
+ 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 == 200 || status == 400 /* IE6 */, "got status %u, expected 200 or 400\n", status);
+
+ InternetCloseHandle(request);
+
+ request = HttpOpenRequest(connect, "POST", "/test7", NULL, NULL, types, INTERNET_FLAG_KEEP_CONNECTION, 0);
+ ok(request != NULL, "HttpOpenRequest failed\n");
+
+ ret = HttpAddRequestHeaders(request, "Content-Length: 100\r\n", ~0u, HTTP_ADDREQ_FLAG_ADD_IF_NEW);
+ ok(ret, "HttpAddRequestHeaders failed\n");
+
+ ret = HttpSendRequest(request, connection, ~0u, NULL, 0);
+ ok(ret, "HttpSendRequest failed\n");
+
+ 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 == 200 || status == 400 /* IE6 */, "got status %u, expected 200 or 400\n", status);
+
+ InternetCloseHandle(request);
+ InternetCloseHandle(connect);
+ InternetCloseHandle(session);
+}
+
+static void test_connection_header(int port)
+{
+ HINTERNET ses, con, req;
+ DWORD size, status;
+ BOOL ret;
+
+ ses = InternetOpen("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
+ ok(ses != NULL, "InternetOpen failed\n");
+
+ con = InternetConnect(ses, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
+ ok(con != NULL, "InternetConnect failed\n");
+
+ req = HttpOpenRequest(con, NULL, "/test8", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
+ ok(req != NULL, "HttpOpenRequest failed\n");
+
+ ret = HttpSendRequest(req, NULL, 0, NULL, 0);
+ ok(ret, "HttpSendRequest failed\n");
+
+ status = 0;
+ size = sizeof(status);
+ ret = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL);
+ ok(ret, "HttpQueryInfo failed\n");
+ ok(status == 200, "request failed with status %u\n", status);
+
+ InternetCloseHandle(req);
+
+ req = HttpOpenRequest(con, NULL, "/test9", NULL, NULL, NULL, 0, 0);
+ ok(req != NULL, "HttpOpenRequest failed\n");
+
+ ret = HttpSendRequest(req, NULL, 0, NULL, 0);
+ ok(ret, "HttpSendRequest failed\n");
+
+ status = 0;
+ size = sizeof(status);
+ ret = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL);
+ ok(ret, "HttpQueryInfo failed\n");
+ ok(status == 200, "request failed with status %u\n", status);
+
+ InternetCloseHandle(req);
+
+ req = HttpOpenRequest(con, NULL, "/test9", NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);
+ ok(req != NULL, "HttpOpenRequest failed\n");
+
+ ret = HttpSendRequest(req, NULL, 0, NULL, 0);
+ ok(ret, "HttpSendRequest failed\n");
+
+ status = 0;
+ size = sizeof(status);
+ ret = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL);
+ ok(ret, "HttpQueryInfo failed\n");
+ ok(status == 200, "request failed with status %u\n", status);
+
+ InternetCloseHandle(req);
+
+ req = HttpOpenRequest(con, "POST", "/testA", NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);
+ ok(req != NULL, "HttpOpenRequest failed\n");
+
+ ret = HttpSendRequest(req, NULL, 0, NULL, 0);
+ ok(ret, "HttpSendRequest failed\n");
+
+ status = 0;
+ size = sizeof(status);
+ ret = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL);
+ ok(ret, "HttpQueryInfo failed\n");
+ ok(status == 200, "request failed with status %u\n", status);
+
+ InternetCloseHandle(req);
+ InternetCloseHandle(con);
+ InternetCloseHandle(ses);
+}
+
+static void test_http1_1(int port)
+{
+ HINTERNET ses, con, req;
+ BOOL ret;
+
+ ses = InternetOpen("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
+ ok(ses != NULL, "InternetOpen failed\n");
+
+ con = InternetConnect(ses, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
+ ok(con != NULL, "InternetConnect failed\n");
+
+ req = HttpOpenRequest(con, NULL, "/testB", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
+ ok(req != NULL, "HttpOpenRequest failed\n");
+
+ ret = HttpSendRequest(req, NULL, 0, NULL, 0);
+ if (ret)
+ {
+ InternetCloseHandle(req);
+
+ req = HttpOpenRequest(con, NULL, "/testB", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
+ ok(req != NULL, "HttpOpenRequest failed\n");
+
+ ret = HttpSendRequest(req, NULL, 0, NULL, 0);
+ todo_wine
+ ok(ret, "HttpSendRequest failed\n");
+ }
+
+ InternetCloseHandle(req);
+ InternetCloseHandle(con);
+ InternetCloseHandle(ses);
+}
+
+static void test_HttpSendRequestW(int port)
+{
+ static const WCHAR header[] = {'U','A','-','C','P','U',':',' ','x','8','6',0};
+ HINTERNET ses, con, req;
+ DWORD error;
+ BOOL ret;
+
+ ses = InternetOpen("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, INTERNET_FLAG_ASYNC);
+ ok(ses != NULL, "InternetOpen failed\n");
+
+ con = InternetConnect(ses, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
+ ok(con != NULL, "InternetConnect failed\n");
+
+ req = HttpOpenRequest(con, NULL, "/test1", NULL, NULL, NULL, 0, 0);
+ ok(req != NULL, "HttpOpenRequest failed\n");
+
+ SetLastError(0xdeadbeef);
+ 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 */
+ "got %u expected ERROR_IO_PENDING\n", error);
+
+ InternetCloseHandle(req);
+ InternetCloseHandle(con);
+ InternetCloseHandle(ses);
+}
+
+static void test_cookie_header(int port)
+{
+ HINTERNET ses, con, req;
+ DWORD size, status, error;
+ BOOL ret;
+ char buffer[64];
+
+ ses = InternetOpen("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
+ ok(ses != NULL, "InternetOpen failed\n");
+
+ con = InternetConnect(ses, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
+ ok(con != NULL, "InternetConnect failed\n");
+
+ InternetSetCookie("http://localhost", "cookie", "biscuit");
+
+ req = HttpOpenRequest(con, NULL, "/testC", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
+ ok(req != NULL, "HttpOpenRequest failed\n");
+
+ buffer[0] = 0;
+ size = sizeof(buffer);
+ SetLastError(0xdeadbeef);
+ ret = HttpQueryInfo(req, HTTP_QUERY_COOKIE | HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &size, NULL);
+ error = GetLastError();
+ ok(!ret, "HttpQueryInfo succeeded\n");
+ ok(error == ERROR_HTTP_HEADER_NOT_FOUND, "got %u expected ERROR_HTTP_HEADER_NOT_FOUND\n", error);
+
+ ret = HttpSendRequest(req, NULL, 0, NULL, 0);
+ ok(ret, "HttpSendRequest failed: %u\n", GetLastError());
+
+ status = 0;
+ size = sizeof(status);
+ ret = HttpQueryInfo(req, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &status, &size, NULL);
+ ok(ret, "HttpQueryInfo failed\n");
+ ok(status == 200, "request failed with status %u\n", status);
+
+ 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=biscuit"), "got '%s' expected \'cookie=biscuit\'\n", buffer);
+
+ InternetCloseHandle(req);
+ InternetCloseHandle(con);
+ InternetCloseHandle(ses);
+}
+
+static void test_basic_authentication(int port)
+{
+ HINTERNET session, connect, request;
+ DWORD size, status;
+ BOOL ret;
+
+ session = InternetOpen("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
+ ok(session != NULL, "InternetOpen failed\n");
+
+ connect = InternetConnect(session, "localhost", port, "user", "pwd", INTERNET_SERVICE_HTTP, 0, 0);
+ ok(connect != NULL, "InternetConnect failed\n");
+
+ request = HttpOpenRequest(connect, NULL, "/test3", 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 );
@@ -1658,6 +1917,110 @@ static void test_header_handling_order(int port)
InternetCloseHandle(session);
}
+static void test_HttpQueryInfo(int port)
+{
+ HINTERNET hi, hc, hr;
+ DWORD size, index;
+ char buffer[1024];
+ BOOL ret;
+
+ hi = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
+ ok(hi != NULL, "InternetOpen failed\n");
+
+ hc = InternetConnect(hi, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
+ ok(hc != NULL, "InternetConnect failed\n");
+
+ hr = HttpOpenRequest(hc, NULL, "/testD", NULL, NULL, NULL, 0, 0);
+ ok(hr != NULL, "HttpOpenRequest failed\n");
+
+ ret = HttpSendRequest(hr, NULL, 0, NULL, 0);
+ ok(ret, "HttpSendRequest failed\n");
+
+ index = 0;
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_HOST | HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 1, "expected 1 got %u\n", index);
+
+ index = 0;
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_DATE | HTTP_QUERY_FLAG_SYSTEMTIME, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 1, "expected 1 got %u\n", index);
+
+ index = 0;
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_RAW_HEADERS, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 0, "expected 0 got %u\n", index);
+
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_RAW_HEADERS, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 0, "expected 0 got %u\n", index);
+
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_RAW_HEADERS_CRLF, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 0, "expected 0 got %u\n", index);
+
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_STATUS_TEXT, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 0, "expected 0 got %u\n", index);
+
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_VERSION, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 0, "expected 0 got %u\n", index);
+
+ index = 0;
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_STATUS_CODE, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 0, "expected 0 got %u\n", index);
+
+ index = 0;
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 0, "expected 0 got %u\n", index);
+
+ index = 0xdeadbeef;
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_FORWARDED, buffer, &size, &index);
+ ok(!ret, "HttpQueryInfo succeeded\n");
+ ok(index == 0xdeadbeef, "expected 0xdeadbeef got %u\n", index);
+
+ index = 0;
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_SERVER, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 1, "expected 1 got %u\n", index);
+
+ index = 0;
+ size = sizeof(buffer);
+ strcpy(buffer, "Server");
+ ret = HttpQueryInfo(hr, HTTP_QUERY_CUSTOM, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 1, "expected 1 got %u\n", index);
+
+ index = 0;
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_SET_COOKIE, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 1, "expected 1 got %u\n", index);
+
+ size = sizeof(buffer);
+ ret = HttpQueryInfo(hr, HTTP_QUERY_SET_COOKIE, buffer, &size, &index);
+ ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
+ ok(index == 2, "expected 2 got %u\n", index);
+
+ InternetCloseHandle(hr);
+ InternetCloseHandle(hc);
+ InternetCloseHandle(hi);
+}
+
static void test_http_connection(void)
{
struct server_info si;
@@ -1680,7 +2043,15 @@ static void test_http_connection(void)
test_proxy_direct(si.port);
test_header_handling_order(si.port);
test_basic_request(si.port, "POST", "/test5");
+ test_basic_request(si.port, "RPC_IN_DATA", "/test5");
+ test_basic_request(si.port, "RPC_OUT_DATA", "/test5");
test_basic_request(si.port, "GET", "/test6");
+ test_connection_header(si.port);
+ test_http1_1(si.port);
+ test_cookie_header(si.port);
+ test_basic_authentication(si.port);
+ test_HttpQueryInfo(si.port);
+ test_HttpSendRequestW(si.port);
/* send the basic request again to shutdown the server thread */
test_basic_request(si.port, "GET", "/quit");
@@ -1700,10 +2071,10 @@ static void test_user_agent_header(void)
ses = InternetOpen("Gizmo5", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
ok(ses != NULL, "InternetOpen failed\n");
- con = InternetConnect(ses, "www.winehq.org", 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
+ con = InternetConnect(ses, "test.winehq.org", 80, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
ok(con != NULL, "InternetConnect failed\n");
- req = HttpOpenRequest(con, "GET", "/", "HTTP/1.0", NULL, NULL, 0, 0);
+ req = HttpOpenRequest(con, "GET", "/hello.html", "HTTP/1.0", NULL, NULL, 0, 0);
ok(req != NULL, "HttpOpenRequest failed\n");
size = sizeof(buffer);
@@ -1712,7 +2083,7 @@ static void test_user_agent_header(void)
ok(!ret, "HttpQueryInfo succeeded\n");
ok(err == ERROR_HTTP_HEADER_NOT_FOUND, "expected ERROR_HTTP_HEADER_NOT_FOUND, got %u\n", err);
- ret = HttpAddRequestHeaders(req, "User-Agent: Gizmo Project\r\n", ~0UL, HTTP_ADDREQ_FLAG_ADD_IF_NEW);
+ ret = HttpAddRequestHeaders(req, "User-Agent: Gizmo Project\r\n", ~0u, HTTP_ADDREQ_FLAG_ADD_IF_NEW);
ok(ret, "HttpAddRequestHeaders succeeded\n");
size = sizeof(buffer);
@@ -1732,7 +2103,7 @@ static void test_user_agent_header(void)
ok(!ret, "HttpQueryInfo succeeded\n");
ok(err == ERROR_HTTP_HEADER_NOT_FOUND, "expected ERROR_HTTP_HEADER_NOT_FOUND, got %u\n", err);
- ret = HttpAddRequestHeaders(req, "Accept: audio/*, image/*, text/*\r\nUser-Agent: Gizmo Project\r\n", ~0UL, HTTP_ADDREQ_FLAG_ADD_IF_NEW);
+ ret = HttpAddRequestHeaders(req, "Accept: audio/*, image/*, text/*\r\nUser-Agent: Gizmo Project\r\n", ~0u, HTTP_ADDREQ_FLAG_ADD_IF_NEW);
ok(ret, "HttpAddRequestHeaders failed\n");
buffer[0] = 0;
@@ -1749,7 +2120,7 @@ static void test_user_agent_header(void)
static void test_bogus_accept_types_array(void)
{
HINTERNET ses, con, req;
- static const char *types[] = { (const char *)6240, "*/*", "%p", "", "*/*", NULL };
+ static const char *types[] = { (const char *)6240, "*/*", "%p", "", (const char *)0xffffffff, "*/*", NULL };
DWORD size;
char buffer[32];
BOOL ret;
@@ -1764,13 +2135,97 @@ static void test_bogus_accept_types_array(void)
size = sizeof(buffer);
ret = HttpQueryInfo(req, HTTP_QUERY_ACCEPT | HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &size, NULL);
ok(ret, "HttpQueryInfo failed: %u\n", GetLastError());
- ok(!strcmp(buffer, "*/*, %p, */*"), "got '%s' expected '*/*, %%p, */*'\n", buffer);
+ ok(!strcmp(buffer, ", */*, %p, , , */*") || /* IE6 */
+ !strcmp(buffer, "*/*, %p, */*"),
+ "got '%s' expected '*/*, %%p, */*' or ', */*, %%p, , , */*'\n", buffer);
InternetCloseHandle(req);
InternetCloseHandle(con);
InternetCloseHandle(ses);
}
+struct context
+{
+ HANDLE event;
+ HINTERNET req;
+};
+
+static void WINAPI cb(HINTERNET handle, DWORD_PTR context, DWORD status, LPVOID info, DWORD size)
+{
+ INTERNET_ASYNC_RESULT *result = info;
+ struct context *ctx = (struct context *)context;
+
+ trace("%p 0x%08lx %u %p 0x%08x\n", handle, context, status, info, size);
+
+ if (status == INTERNET_STATUS_REQUEST_COMPLETE)
+ {
+ trace("request handle: 0x%08lx\n", result->dwResult);
+ ctx->req = (HINTERNET)result->dwResult;
+ SetEvent(ctx->event);
+ }
+ if (status == INTERNET_STATUS_HANDLE_CLOSING)
+ {
+ DWORD type = INTERNET_HANDLE_TYPE_CONNECT_HTTP, size = sizeof(type);
+
+ if (InternetQueryOption(handle, INTERNET_OPTION_HANDLE_TYPE, &type, &size))
+ ok(type != INTERNET_HANDLE_TYPE_CONNECT_HTTP, "unexpected callback\n");
+ SetEvent(ctx->event);
+ }
+}
+
+static void test_open_url_async(void)
+{
+ BOOL ret;
+ HINTERNET ses, req;
+ DWORD size, error;
+ struct context ctx;
+ ULONG type;
+
+ ctx.req = NULL;
+ ctx.event = CreateEvent(NULL, TRUE, FALSE, "Z:_home_hans_jaman-installer.exe_ev1");
+
+ ses = InternetOpen("AdvancedInstaller", 0, NULL, NULL, INTERNET_FLAG_ASYNC);
+ ok(ses != NULL, "InternetOpen failed\n");
+
+ SetLastError(0xdeadbeef);
+ ret = InternetSetOptionA(NULL, INTERNET_OPTION_CALLBACK, &cb, sizeof(DWORD_PTR));
+ error = GetLastError();
+ ok(!ret, "InternetSetOptionA succeeded\n");
+ ok(error == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "got %u expected ERROR_INTERNET_INCORRECT_HANDLE_TYPE\n", error);
+
+ ret = InternetSetOptionA(ses, INTERNET_OPTION_CALLBACK, &cb, sizeof(DWORD_PTR));
+ error = GetLastError();
+ ok(!ret, "InternetSetOptionA failed\n");
+ ok(error == ERROR_INTERNET_OPTION_NOT_SETTABLE, "got %u expected ERROR_INTERNET_OPTION_NOT_SETTABLE\n", error);
+
+ pInternetSetStatusCallbackA(ses, cb);
+ ResetEvent(ctx.event);
+
+ req = InternetOpenUrl(ses, "http://test.winehq.org", NULL, 0, 0, (DWORD_PTR)&ctx);
+ ok(!req && GetLastError() == ERROR_IO_PENDING, "InternetOpenUrl failed\n");
+
+ WaitForSingleObject(ctx.event, INFINITE);
+
+ type = 0;
+ size = sizeof(type);
+ ret = InternetQueryOption(ctx.req, INTERNET_OPTION_HANDLE_TYPE, &type, &size);
+ ok(ret, "InternetQueryOption failed: %u\n", GetLastError());
+ ok(type == INTERNET_HANDLE_TYPE_HTTP_REQUEST,
+ "expected INTERNET_HANDLE_TYPE_HTTP_REQUEST, got %u\n", type);
+
+ size = 0;
+ ret = HttpQueryInfo(ctx.req, HTTP_QUERY_RAW_HEADERS_CRLF, NULL, &size, NULL);
+ ok(!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER, "HttpQueryInfo failed\n");
+ ok(size > 0, "expected size > 0\n");
+
+ ResetEvent(ctx.event);
+ InternetCloseHandle(ctx.req);
+ WaitForSingleObject(ctx.event, INFINITE);
+
+ InternetCloseHandle(ses);
+ CloseHandle(ctx.event);
+}
+
#define STATUS_STRING(status) \
memcpy(status_string[status], #status, sizeof(CHAR) * \
(strlen(#status) < MAX_STATUS_NAME ? \
@@ -1779,6 +2234,7 @@ static void test_bogus_accept_types_array(void)
static void init_status_tests(void)
{
memset(expect, 0, sizeof(expect));
+ memset(optional, 0, sizeof(optional));
memset(wine_allow, 0, sizeof(wine_allow));
memset(notified, 0, sizeof(notified));
memset(status_string, 0, sizeof(status_string));
@@ -1816,10 +2272,6 @@ START_TEST(http)
HMODULE hdll;
hdll = GetModuleHandleA("wininet.dll");
pInternetSetStatusCallbackA = (void*)GetProcAddress(hdll, "InternetSetStatusCallbackA");
- pInternetTimeFromSystemTimeA = (void*)GetProcAddress(hdll, "InternetTimeFromSystemTimeA");
- pInternetTimeFromSystemTimeW = (void*)GetProcAddress(hdll, "InternetTimeFromSystemTimeW");
- pInternetTimeToSystemTimeA = (void*)GetProcAddress(hdll, "InternetTimeToSystemTimeA");
- pInternetTimeToSystemTimeW = (void*)GetProcAddress(hdll, "InternetTimeToSystemTimeW");
if (!pInternetSetStatusCallbackA)
skip("skipping the InternetReadFile tests\n");
@@ -1829,19 +2281,11 @@ START_TEST(http)
InternetReadFile_test(INTERNET_FLAG_ASYNC);
InternetReadFile_test(0);
InternetReadFileExA_test(INTERNET_FLAG_ASYNC);
+ test_open_url_async();
}
InternetOpenRequest_test();
test_http_cache();
InternetOpenUrlA_test();
- if (!pInternetTimeFromSystemTimeA)
- skip("skipping the InternetTime tests\n");
- else
- {
- InternetTimeFromSystemTimeA_test();
- InternetTimeFromSystemTimeW_test();
- InternetTimeToSystemTimeA_test();
- InternetTimeToSystemTimeW_test();
- }
HttpSendRequestEx_test();
HttpHeaders_test();
test_http_connection();
diff --git a/rostests/winetests/wininet/internet.c b/rostests/winetests/wininet/internet.c
index 15495db514d..fe3f4778f3a 100644
--- a/rostests/winetests/wininet/internet.c
+++ b/rostests/winetests/wininet/internet.c
@@ -27,6 +27,12 @@
#include "wine/test.h"
+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);
+static BOOL (WINAPI *pInternetTimeToSystemTimeW)(LPCWSTR ,SYSTEMTIME *,DWORD);
+static BOOL (WINAPI *pIsDomainLegalCookieDomainW)(LPCWSTR, LPCWSTR);
+
/* ############################### */
static void test_InternetCanonicalizeUrlA(void)
@@ -73,6 +79,16 @@ static void test_InternetCanonicalizeUrlA(void)
"got %u and %u with size %u for '%s' (%d)\n",
res, GetLastError(), dwSize, buffer, lstrlenA(buffer));
+ memset(buffer, '#', sizeof(buffer)-1);
+ buffer[sizeof(buffer)-1] = '\0';
+ dwSize = sizeof(buffer);
+ SetLastError(0xdeadbeef);
+ res = InternetCanonicalizeUrlA("file:///C:/Program%20Files/Atmel/AVR%20Tools/STK500/STK500.xml", buffer, &dwSize, ICU_DECODE | ICU_NO_ENCODE);
+ ok(res, "InternetCanonicalizeUrlA failed %u\n", GetLastError());
+ ok(dwSize == lstrlenA(buffer), "got %d expected %d\n", dwSize, lstrlenA(buffer));
+ todo_wine ok(!lstrcmpA("file://C:\\Program Files\\Atmel\\AVR Tools\\STK500\\STK500.xml", buffer),
+ "got %s expected 'file://C:\\Program Files\\Atmel\\AVR Tools\\STK500\\STK500.xml'\n", buffer);
+
/* buffer is larger as the required size */
memset(buffer, '#', sizeof(buffer)-1);
buffer[sizeof(buffer)-1] = '\0';
@@ -113,6 +129,12 @@ static void test_InternetCanonicalizeUrlA(void)
"got %u and %u with size %u for '%s' (%d)\n",
res, GetLastError(), dwSize, buffer, lstrlenA(buffer));
+ /* test with trailing space */
+ dwSize = 256;
+ res = InternetCanonicalizeUrlA("http://www.winehq.org/index.php?x= ", buffer, &dwSize, ICU_BROWSER_MODE);
+ ok(res == 1, "InternetCanonicalizeUrlA failed\n");
+ ok(!strcmp(buffer, "http://www.winehq.org/index.php?x="), "Trailing space should have been stripped even in ICU_BROWSER_MODE (%s)\n", buffer);
+
res = InternetSetOptionA(NULL, 0xdeadbeef, buffer, sizeof(buffer));
ok(!res, "InternetSetOptionA succeeded\n");
ok(GetLastError() == ERROR_INTERNET_INVALID_OPTION,
@@ -133,23 +155,29 @@ static void test_InternetQueryOptionA(void)
hinet = InternetOpenA(useragent,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL, 0);
ok((hinet != 0x0),"InternetOpen Failed\n");
+ SetLastError(0xdeadbeef);
+ retval=InternetQueryOptionA(NULL,INTERNET_OPTION_USER_AGENT,NULL,&len);
+ err=GetLastError();
+ ok(retval == 0,"Got wrong return value %d\n",retval);
+ ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code%d\n",err);
+
SetLastError(0xdeadbeef);
len=strlen(useragent)+1;
retval=InternetQueryOptionA(hinet,INTERNET_OPTION_USER_AGENT,NULL,&len);
err=GetLastError();
ok(len == strlen(useragent)+1,"Got wrong user agent length %d instead of %d\n",len,lstrlenA(useragent));
ok(retval == 0,"Got wrong return value %d\n",retval);
- todo_wine ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code%d\n",err);
+ ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code %d\n",err);
SetLastError(0xdeadbeef);
len=strlen(useragent)+1;
buffer=HeapAlloc(GetProcessHeap(),0,len);
retval=InternetQueryOptionA(hinet,INTERNET_OPTION_USER_AGENT,buffer,&len);
err=GetLastError();
- todo_wine ok(retval == 1,"Got wrong return value %d\n",retval);
+ ok(retval == 1,"Got wrong return value %d\n",retval);
if (retval)
{
- todo_wine ok(!strcmp(useragent,buffer),"Got wrong user agent string %s instead of %s\n",buffer,useragent);
+ ok(!strcmp(useragent,buffer),"Got wrong user agent string %s instead of %s\n",buffer,useragent);
todo_wine ok(len == strlen(useragent),"Got wrong user agent length %d instead of %d\n",len,lstrlenA(useragent));
}
ok(err == 0xdeadbeef, "Got wrong error code %d\n",err);
@@ -160,9 +188,9 @@ static void test_InternetQueryOptionA(void)
buffer=HeapAlloc(GetProcessHeap(),0,100);
retval=InternetQueryOptionA(hinet,INTERNET_OPTION_USER_AGENT,buffer,&len);
err=GetLastError();
- todo_wine ok(len == strlen(useragent) + 1,"Got wrong user agent length %d instead of %d\n", len, lstrlenA(useragent) + 1);
+ ok(len == strlen(useragent) + 1,"Got wrong user agent length %d instead of %d\n", len, lstrlenA(useragent) + 1);
ok(!retval, "Got wrong return value %d\n", retval);
- todo_wine ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code %d\n", err);
+ 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);
@@ -173,7 +201,7 @@ static void test_InternetQueryOptionA(void)
err=GetLastError();
ok(len == 0,"Got wrong user agent length %d instead of 0\n",len);
ok(retval == 0,"Got wrong return value %d\n",retval);
- todo_wine ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code %d\n",err);
+ ok(err == ERROR_INTERNET_INCORRECT_HANDLE_TYPE, "Got wrong error code %d\n",err);
InternetCloseHandle(hurl);
InternetCloseHandle(hinet);
@@ -185,9 +213,9 @@ static void test_InternetQueryOptionA(void)
len=0;
retval=InternetQueryOptionA(hinet,INTERNET_OPTION_USER_AGENT,NULL,&len);
err=GetLastError();
- todo_wine ok(len == 1,"Got wrong user agent length %d instead of %d\n",len,1);
+ ok(len == 1,"Got wrong user agent length %d instead of %d\n",len,1);
ok(retval == 0,"Got wrong return value %d\n",retval);
- todo_wine ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code%d\n",err);
+ ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code%d\n",err);
InternetCloseHandle(hinet);
@@ -199,7 +227,7 @@ static void test_InternetQueryOptionA(void)
err=GetLastError();
todo_wine ok(len == 1,"Got wrong user agent length %d instead of %d\n",len,1);
ok(retval == 0,"Got wrong return value %d\n",retval);
- todo_wine ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code%d\n",err);
+ ok(err == ERROR_INSUFFICIENT_BUFFER, "Got wrong error code%d\n",err);
InternetCloseHandle(hinet);
}
@@ -216,6 +244,102 @@ static void test_get_cookie(void)
ret ? "TRUE" : "FALSE", GetLastError());
}
+
+static void test_complicated_cookie(void)
+{
+ DWORD len;
+ BOOL ret;
+
+ CHAR buffer[1024];
+
+ ret = InternetSetCookie("http://www.example.com/bar",NULL,"A=B; domain=.example.com");
+ ok(ret == TRUE,"InternetSetCookie failed\n");
+ ret = InternetSetCookie("http://www.example.com/bar",NULL,"C=D; domain=.example.com; path=/");
+ ok(ret == TRUE,"InternetSetCookie failed\n");
+
+ /* Technically illegal! domain should require 2 dots, but native wininet accepts it */
+ ret = InternetSetCookie("http://www.example.com",NULL,"E=F; domain=example.com");
+ ok(ret == TRUE,"InternetSetCookie failed\n");
+ ret = InternetSetCookie("http://www.example.com",NULL,"G=H; domain=.example.com; path=/foo");
+ ok(ret == TRUE,"InternetSetCookie failed\n");
+ ret = InternetSetCookie("http://www.example.com/bar.html",NULL,"I=J; domain=.example.com");
+ ok(ret == TRUE,"InternetSetCookie failed\n");
+ ret = InternetSetCookie("http://www.example.com/bar/",NULL,"K=L; domain=.example.com");
+ 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");
+
+ len = 1024;
+ ret = InternetGetCookie("http://testing.example.com", NULL, buffer, &len);
+ ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
+ ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
+ ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
+ ok(strstr(buffer,"G=H")==NULL,"G=H present\n");
+ 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");
+
+ len = 1024;
+ ret = InternetGetCookie("http://testing.example.com/foobar", NULL, buffer, &len);
+ ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
+ ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
+ ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
+ ok(strstr(buffer,"G=H")==NULL,"G=H present\n");
+ 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");
+
+ len = 1024;
+ ret = InternetGetCookie("http://testing.example.com/foobar/", NULL, buffer, &len);
+ ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
+ ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
+ ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
+ ok(strstr(buffer,"G=H")!=NULL,"G=H missing\n");
+ 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");
+
+ len = 1024;
+ ret = InternetGetCookie("http://testing.example.com/foo/bar", NULL, buffer, &len);
+ ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
+ ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
+ ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
+ ok(strstr(buffer,"G=H")!=NULL,"G=H missing\n");
+ 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");
+
+ len = 1024;
+ ret = InternetGetCookie("http://testing.example.com/barfoo", NULL, buffer, &len);
+ ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
+ ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
+ ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
+ ok(strstr(buffer,"G=H")==NULL,"G=H present\n");
+ 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");
+
+ len = 1024;
+ ret = InternetGetCookie("http://testing.example.com/barfoo/", NULL, buffer, &len);
+ ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
+ ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
+ ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
+ ok(strstr(buffer,"G=H")==NULL,"G=H present\n");
+ 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");
+
+ len = 1024;
+ ret = InternetGetCookie("http://testing.example.com/bar/foo", NULL, buffer, &len);
+ ok(strstr(buffer,"A=B")!=NULL,"A=B missing\n");
+ ok(strstr(buffer,"C=D")!=NULL,"C=D missing\n");
+ ok(strstr(buffer,"E=F")!=NULL,"E=F missing\n");
+ ok(strstr(buffer,"G=H")==NULL,"G=H present\n");
+ 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");
+}
+
static void test_null(void)
{
HINTERNET hi, hc;
@@ -248,7 +372,8 @@ static void test_null(void)
ok(hc == NULL, "connect failed\n");
hc = InternetOpenUrlW(hi, NULL, NULL, 0, 0, 0);
- ok(GetLastError() == ERROR_INVALID_PARAMETER, "wrong error\n");
+ ok(GetLastError() == ERROR_INVALID_PARAMETER ||
+ GetLastError() == ERROR_INTERNET_UNRECOGNIZED_SCHEME, "wrong error\n");
ok(hc == NULL, "connect failed\n");
hc = InternetOpenUrlW(hi, szServer, NULL, 0, 0, 0);
@@ -339,13 +464,336 @@ static void test_version(void)
ok(version.dwMinorVersion == 2, "dwMinorVersion=%d, expected 2\n", version.dwMinorVersion);
}
+static void InternetTimeFromSystemTimeA_test(void)
+{
+ BOOL ret;
+ static const SYSTEMTIME time = { 2005, 1, 5, 7, 12, 6, 35, 0 };
+ char string[INTERNET_RFC1123_BUFSIZE];
+ static const char expect[] = "Fri, 07 Jan 2005 12:06:35 GMT";
+ DWORD error;
+
+ ret = pInternetTimeFromSystemTimeA( &time, INTERNET_RFC1123_FORMAT, string, sizeof(string) );
+ ok( ret, "InternetTimeFromSystemTimeA failed (%u)\n", GetLastError() );
+
+ ok( !memcmp( string, expect, sizeof(expect) ),
+ "InternetTimeFromSystemTimeA failed (%u)\n", GetLastError() );
+
+ /* test NULL time parameter */
+ SetLastError(0xdeadbeef);
+ ret = pInternetTimeFromSystemTimeA( NULL, INTERNET_RFC1123_FORMAT, string, sizeof(string) );
+ error = GetLastError();
+ ok( !ret, "InternetTimeFromSystemTimeA should have returned FALSE\n" );
+ ok( error == ERROR_INVALID_PARAMETER,
+ "InternetTimeFromSystemTimeA failed with ERROR_INVALID_PARAMETER instead of %u\n",
+ error );
+
+ /* test NULL string parameter */
+ SetLastError(0xdeadbeef);
+ ret = pInternetTimeFromSystemTimeA( &time, INTERNET_RFC1123_FORMAT, NULL, sizeof(string) );
+ error = GetLastError();
+ ok( !ret, "InternetTimeFromSystemTimeA should have returned FALSE\n" );
+ ok( error == ERROR_INVALID_PARAMETER,
+ "InternetTimeFromSystemTimeA failed with ERROR_INVALID_PARAMETER instead of %u\n",
+ error );
+
+ /* test invalid format parameter */
+ SetLastError(0xdeadbeef);
+ ret = pInternetTimeFromSystemTimeA( &time, INTERNET_RFC1123_FORMAT + 1, string, sizeof(string) );
+ error = GetLastError();
+ ok( !ret, "InternetTimeFromSystemTimeA should have returned FALSE\n" );
+ ok( error == ERROR_INVALID_PARAMETER,
+ "InternetTimeFromSystemTimeA failed with ERROR_INVALID_PARAMETER instead of %u\n",
+ error );
+
+ /* test too small buffer size */
+ SetLastError(0xdeadbeef);
+ ret = pInternetTimeFromSystemTimeA( &time, INTERNET_RFC1123_FORMAT, string, 0 );
+ error = GetLastError();
+ ok( !ret, "InternetTimeFromSystemTimeA should have returned FALSE\n" );
+ ok( error == ERROR_INSUFFICIENT_BUFFER,
+ "InternetTimeFromSystemTimeA failed with ERROR_INSUFFICIENT_BUFFER instead of %u\n",
+ error );
+}
+
+static void InternetTimeFromSystemTimeW_test(void)
+{
+ BOOL ret;
+ static const SYSTEMTIME time = { 2005, 1, 5, 7, 12, 6, 35, 0 };
+ WCHAR string[INTERNET_RFC1123_BUFSIZE + 1];
+ static const WCHAR expect[] = { 'F','r','i',',',' ','0','7',' ','J','a','n',' ','2','0','0','5',' ',
+ '1','2',':','0','6',':','3','5',' ','G','M','T',0 };
+ DWORD error;
+
+ ret = pInternetTimeFromSystemTimeW( &time, INTERNET_RFC1123_FORMAT, string, sizeof(string) );
+ ok( ret, "InternetTimeFromSystemTimeW failed (%u)\n", GetLastError() );
+
+ ok( !memcmp( string, expect, sizeof(expect) ),
+ "InternetTimeFromSystemTimeW failed (%u)\n", GetLastError() );
+
+ /* test NULL time parameter */
+ SetLastError(0xdeadbeef);
+ ret = pInternetTimeFromSystemTimeW( NULL, INTERNET_RFC1123_FORMAT, string, sizeof(string) );
+ error = GetLastError();
+ ok( !ret, "InternetTimeFromSystemTimeW should have returned FALSE\n" );
+ ok( error == ERROR_INVALID_PARAMETER,
+ "InternetTimeFromSystemTimeW failed with ERROR_INVALID_PARAMETER instead of %u\n",
+ error );
+
+ /* test NULL string parameter */
+ SetLastError(0xdeadbeef);
+ ret = pInternetTimeFromSystemTimeW( &time, INTERNET_RFC1123_FORMAT, NULL, sizeof(string) );
+ error = GetLastError();
+ ok( !ret, "InternetTimeFromSystemTimeW should have returned FALSE\n" );
+ ok( error == ERROR_INVALID_PARAMETER,
+ "InternetTimeFromSystemTimeW failed with ERROR_INVALID_PARAMETER instead of %u\n",
+ error );
+
+ /* test invalid format parameter */
+ SetLastError(0xdeadbeef);
+ ret = pInternetTimeFromSystemTimeW( &time, INTERNET_RFC1123_FORMAT + 1, string, sizeof(string) );
+ error = GetLastError();
+ ok( !ret, "InternetTimeFromSystemTimeW should have returned FALSE\n" );
+ ok( error == ERROR_INVALID_PARAMETER,
+ "InternetTimeFromSystemTimeW failed with ERROR_INVALID_PARAMETER instead of %u\n",
+ error );
+
+ /* test too small buffer size */
+ SetLastError(0xdeadbeef);
+ ret = pInternetTimeFromSystemTimeW( &time, INTERNET_RFC1123_FORMAT, string, sizeof(string)/sizeof(string[0]) );
+ error = GetLastError();
+ ok( !ret, "InternetTimeFromSystemTimeW should have returned FALSE\n" );
+ ok( error == ERROR_INSUFFICIENT_BUFFER,
+ "InternetTimeFromSystemTimeW failed with ERROR_INSUFFICIENT_BUFFER instead of %u\n",
+ error );
+}
+
+static void InternetTimeToSystemTimeA_test(void)
+{
+ BOOL ret;
+ SYSTEMTIME time;
+ static const SYSTEMTIME expect = { 2005, 1, 5, 7, 12, 6, 35, 0 };
+ static const char string[] = "Fri, 07 Jan 2005 12:06:35 GMT";
+ static const char string2[] = " fri 7 jan 2005 12 06 35";
+
+ ret = pInternetTimeToSystemTimeA( string, &time, 0 );
+ ok( ret, "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
+ ok( !memcmp( &time, &expect, sizeof(expect) ),
+ "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
+
+ ret = pInternetTimeToSystemTimeA( string2, &time, 0 );
+ ok( ret, "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
+ ok( !memcmp( &time, &expect, sizeof(expect) ),
+ "InternetTimeToSystemTimeA failed (%u)\n", GetLastError() );
+}
+
+static void InternetTimeToSystemTimeW_test(void)
+{
+ BOOL ret;
+ SYSTEMTIME time;
+ static const SYSTEMTIME expect = { 2005, 1, 5, 7, 12, 6, 35, 0 };
+ static const WCHAR string[] = { 'F','r','i',',',' ','0','7',' ','J','a','n',' ','2','0','0','5',' ',
+ '1','2',':','0','6',':','3','5',' ','G','M','T',0 };
+ static const WCHAR string2[] = { ' ','f','r','i',' ','7',' ','j','a','n',' ','2','0','0','5',' ',
+ '1','2',' ','0','6',' ','3','5',0 };
+ static const WCHAR string3[] = { 'F','r',0 };
+
+ ret = pInternetTimeToSystemTimeW( NULL, NULL, 0 );
+ ok( !ret, "InternetTimeToSystemTimeW succeeded (%u)\n", GetLastError() );
+
+ ret = pInternetTimeToSystemTimeW( NULL, &time, 0 );
+ ok( !ret, "InternetTimeToSystemTimeW succeeded (%u)\n", GetLastError() );
+
+ ret = pInternetTimeToSystemTimeW( string, NULL, 0 );
+ ok( !ret, "InternetTimeToSystemTimeW succeeded (%u)\n", GetLastError() );
+
+ ret = pInternetTimeToSystemTimeW( string, &time, 0 );
+ ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
+
+ ret = pInternetTimeToSystemTimeW( string, &time, 0 );
+ ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
+ ok( !memcmp( &time, &expect, sizeof(expect) ),
+ "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
+
+ ret = pInternetTimeToSystemTimeW( string2, &time, 0 );
+ ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
+ ok( !memcmp( &time, &expect, sizeof(expect) ),
+ "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
+
+ ret = pInternetTimeToSystemTimeW( string3, &time, 0 );
+ ok( ret, "InternetTimeToSystemTimeW failed (%u)\n", GetLastError() );
+}
+
+static void test_IsDomainLegalCookieDomainW(void)
+{
+ BOOL ret;
+ DWORD error;
+ static const WCHAR empty[] = {0};
+ static const WCHAR dot[] = {'.',0};
+ static const WCHAR uk[] = {'u','k',0};
+ static const WCHAR com[] = {'c','o','m',0};
+ static const WCHAR dot_com[] = {'.','c','o','m',0};
+ static const WCHAR gmail_com[] = {'g','m','a','i','l','.','c','o','m',0};
+ static const WCHAR dot_gmail_com[] = {'.','g','m','a','i','l','.','c','o','m',0};
+ static const WCHAR mail_gmail_com[] = {'m','a','i','l','.','g','m','a','i','l','.','c','o','m',0};
+ static const WCHAR gmail_co_uk[] = {'g','m','a','i','l','.','c','o','.','u','k',0};
+ static const WCHAR co_uk[] = {'c','o','.','u','k',0};
+ static const WCHAR dot_co_uk[] = {'.','c','o','.','u','k',0};
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(NULL, NULL);
+ error = GetLastError();
+ ok(!ret ||
+ broken(ret), /* Win98, NT4, W2K, XP (some) */
+ "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMETER\n", error);
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(com, NULL);
+ error = GetLastError();
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMETER\n", error);
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(NULL, gmail_com);
+ error = GetLastError();
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMETER\n", error);
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(empty, gmail_com);
+ error = GetLastError();
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == ERROR_INVALID_NAME ||
+ broken(error == ERROR_INVALID_PARAMETER), /* Win98, NT4, W2K, XP (some) */
+ "got %u expected ERROR_INVALID_NAME\n", error);
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(com, empty);
+ error = GetLastError();
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == ERROR_INVALID_NAME ||
+ broken(error == ERROR_INVALID_PARAMETER), /* Win98, NT4, W2K, XP (some) */
+ "got %u expected ERROR_INVALID_NAME\n", error);
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(gmail_com, dot);
+ error = GetLastError();
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == ERROR_INVALID_NAME ||
+ broken(error == 0xdeadbeef), /* Win98, NT4, W2K, XP (some) */
+ "got %u expected ERROR_INVALID_NAME\n", error);
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(dot, gmail_com);
+ error = GetLastError();
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == ERROR_INVALID_NAME ||
+ broken(error == 0xdeadbeef), /* Win98, NT4, W2K, XP (some) */
+ "got %u expected ERROR_INVALID_NAME\n", error);
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(com, com);
+ error = GetLastError();
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == 0xdeadbeef, "got %u expected 0xdeadbeef\n", error);
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(com, dot_com);
+ error = GetLastError();
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == ERROR_INVALID_NAME ||
+ broken(error == 0xdeadbeef), /* Win98, NT4, W2K, XP (some) */
+ "got %u expected ERROR_INVALID_NAME\n", error);
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(dot_com, com);
+ error = GetLastError();
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == ERROR_INVALID_NAME ||
+ broken(error == 0xdeadbeef), /* Win98, NT4, W2K, XP (some) */
+ "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);
+
+ ret = pIsDomainLegalCookieDomainW(gmail_com, gmail_com);
+ ok(ret, "IsDomainLegalCookieDomainW failed\n");
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(gmail_co_uk, co_uk);
+ error = GetLastError();
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == 0xdeadbeef, "got %u expected 0xdeadbeef\n", error);
+
+ ret = pIsDomainLegalCookieDomainW(uk, co_uk);
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+
+ ret = pIsDomainLegalCookieDomainW(gmail_co_uk, dot_co_uk);
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+
+ ret = pIsDomainLegalCookieDomainW(gmail_co_uk, gmail_co_uk);
+ ok(ret, "IsDomainLegalCookieDomainW failed\n");
+
+ ret = pIsDomainLegalCookieDomainW(gmail_com, com);
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+
+ SetLastError(0xdeadbeef);
+ ret = pIsDomainLegalCookieDomainW(dot_gmail_com, mail_gmail_com);
+ error = GetLastError();
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+ ok(error == ERROR_INVALID_NAME ||
+ broken(error == 0xdeadbeef), /* Win98, NT4, W2K, XP (some) */
+ "got %u expected ERROR_INVALID_NAME\n", error);
+
+ ret = pIsDomainLegalCookieDomainW(gmail_com, mail_gmail_com);
+ ok(ret, "IsDomainLegalCookieDomainW failed\n");
+
+ ret = pIsDomainLegalCookieDomainW(mail_gmail_com, gmail_com);
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+
+ ret = pIsDomainLegalCookieDomainW(mail_gmail_com, com);
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+
+ ret = pIsDomainLegalCookieDomainW(dot_gmail_com, mail_gmail_com);
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+
+ ret = pIsDomainLegalCookieDomainW(mail_gmail_com, dot_gmail_com);
+ ok(!ret, "IsDomainLegalCookieDomainW succeeded\n");
+}
+
/* ############################### */
START_TEST(internet)
{
- test_InternetCanonicalizeUrlA();
- test_InternetQueryOptionA();
- test_get_cookie();
- test_version();
- test_null();
+ HMODULE hdll;
+ hdll = GetModuleHandleA("wininet.dll");
+ pInternetTimeFromSystemTimeA = (void*)GetProcAddress(hdll, "InternetTimeFromSystemTimeA");
+ pInternetTimeFromSystemTimeW = (void*)GetProcAddress(hdll, "InternetTimeFromSystemTimeW");
+ pInternetTimeToSystemTimeA = (void*)GetProcAddress(hdll, "InternetTimeToSystemTimeA");
+ pInternetTimeToSystemTimeW = (void*)GetProcAddress(hdll, "InternetTimeToSystemTimeW");
+ pIsDomainLegalCookieDomainW = (void*)GetProcAddress(hdll, (LPCSTR)117);
+
+ test_InternetCanonicalizeUrlA();
+ test_InternetQueryOptionA();
+ test_get_cookie();
+ test_complicated_cookie();
+ test_version();
+ test_null();
+
+ if (!pInternetTimeFromSystemTimeA)
+ skip("skipping the InternetTime tests\n");
+ else
+ {
+ InternetTimeFromSystemTimeA_test();
+ InternetTimeFromSystemTimeW_test();
+ InternetTimeToSystemTimeA_test();
+ InternetTimeToSystemTimeW_test();
+ }
+ if (!pIsDomainLegalCookieDomainW)
+ skip("skipping IsDomainLegalCookieDomainW tests\n");
+ else
+ test_IsDomainLegalCookieDomainW();
}
diff --git a/rostests/winetests/wininet/url.c b/rostests/winetests/wininet/url.c
index ccc56076bad..c848f6bc90d 100644
--- a/rostests/winetests/wininet/url.c
+++ b/rostests/winetests/wininet/url.c
@@ -52,6 +52,7 @@
#define CREATE_URL10 "about://host/blank"
#define CREATE_URL11 "about:"
#define CREATE_URL12 "http://www.winehq.org:65535"
+#define CREATE_URL13 "http://localhost/?test=123"
static void copy_compsA(
URL_COMPONENTSA *src,
@@ -268,6 +269,7 @@ static void InternetCrackUrlW_test(void)
'=','I','D','E','&','A','C','T','I','O','N','=','I','D','E','_','D','E','F','A',
'U','L','T', 0 };
static const WCHAR url2[] = { '.','.','/','R','i','t','z','.','x','m','l',0 };
+ static const WCHAR url3[] = { 'h','t','t','p',':','/','/','x','.','o','r','g',0 };
URL_COMPONENTSW comp;
WCHAR scheme[20], host[20], user[20], pwd[20], urlpart[50], extra[50];
DWORD error;
@@ -389,6 +391,32 @@ static void InternetCrackUrlW_test(void)
"InternetCrackUrl should have failed with error ERROR_INTERNET_UNRECOGNIZED_SCHEME instead of error %d\n",
GetLastError());
}
+
+ /* Test to see whether cracking a URL without a filename initializes urlpart */
+ urlpart[0]=0xba;
+ scheme[0]=0;
+ extra[0]=0;
+ host[0]=0;
+ user[0]=0;
+ pwd[0]=0;
+ memset(&comp, 0, sizeof comp);
+ comp.dwStructSize = sizeof comp;
+ comp.lpszScheme = scheme;
+ comp.dwSchemeLength = sizeof scheme;
+ comp.lpszHostName = host;
+ comp.dwHostNameLength = sizeof host;
+ comp.lpszUserName = user;
+ comp.dwUserNameLength = sizeof user;
+ comp.lpszPassword = pwd;
+ comp.dwPasswordLength = sizeof pwd;
+ comp.lpszUrlPath = urlpart;
+ comp.dwUrlPathLength = sizeof urlpart;
+ comp.lpszExtraInfo = extra;
+ comp.dwExtraInfoLength = sizeof extra;
+ r = InternetCrackUrlW(url3, 0, 0, &comp );
+ ok( r, "InternetCrackUrlW failed unexpectedly\n");
+ ok( host[0] == 'x', "host should be x.org\n");
+ ok( urlpart[0] == 0, "urlpart should be empty\n");
}
static void fill_url_components(LPURL_COMPONENTS lpUrlComponents)
@@ -428,9 +456,12 @@ static void InternetCreateUrlA_test(void)
http[] = "http",
https[] = "https",
winehq[] = "www.winehq.org",
+ localhost[] = "localhost",
username[] = "username",
password[] = "password",
+ root[] = "/",
site_about[] = "/site/about",
+ extra_info[] = "?test=123",
about[] = "about",
blank[] = "blank",
host[] = "host";
@@ -744,6 +775,26 @@ static void InternetCreateUrlA_test(void)
ok(!strcmp(szUrl, CREATE_URL12), "Expected %s, got %s\n", CREATE_URL12, szUrl);
HeapFree(GetProcessHeap(), 0, szUrl);
+
+ memset(&urlComp, 0, sizeof(urlComp));
+ urlComp.dwStructSize = sizeof(URL_COMPONENTS);
+ urlComp.lpszScheme = http;
+ urlComp.dwSchemeLength = strlen(urlComp.lpszScheme);
+ urlComp.lpszHostName = localhost;
+ urlComp.dwHostNameLength = strlen(urlComp.lpszHostName);
+ urlComp.nPort = 80;
+ urlComp.lpszUrlPath = root;
+ urlComp.dwUrlPathLength = strlen(urlComp.lpszUrlPath);
+ urlComp.lpszExtraInfo = extra_info;
+ urlComp.dwExtraInfoLength = strlen(urlComp.lpszExtraInfo);
+ len = 256;
+ szUrl = HeapAlloc(GetProcessHeap(), 0, len);
+ InternetCreateUrlA(&urlComp, ICU_ESCAPE, szUrl, &len);
+ ok(ret, "Expected success\n");
+ ok(len == strlen(CREATE_URL13), "Got len %u\n", len);
+ ok(!strcmp(szUrl, CREATE_URL13), "Expected \"%s\", got \"%s\"\n", CREATE_URL13, szUrl);
+
+ HeapFree(GetProcessHeap(), 0, szUrl);
}
START_TEST(url)
diff --git a/rostests/winetests/wininet/urlcache.c b/rostests/winetests/wininet/urlcache.c
index 6570d5a9eba..d13597626de 100644
--- a/rostests/winetests/wininet/urlcache.c
+++ b/rostests/winetests/wininet/urlcache.c
@@ -30,6 +30,9 @@
#define TEST_URL "http://urlcachetest.winehq.org/index.html"
+static BOOL (WINAPI *pDeleteUrlCacheEntryA)(LPCSTR);
+static BOOL (WINAPI *pUnlockUrlCacheEntryFileA)(LPCSTR,DWORD);
+
static char filenameA[MAX_PATH + 1];
static void check_cache_entry_infoA(const char *returnedfrom, LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo)
@@ -109,9 +112,42 @@ static void test_GetUrlCacheEntryInfoExA(void)
check_cache_entry_infoA("GetUrlCacheEntryInfoEx", lpCacheEntryInfo);
+ cbCacheEntryInfo = 100000;
+ SetLastError(0xdeadbeef);
+ ret = GetUrlCacheEntryInfoEx(TEST_URL, NULL, &cbCacheEntryInfo, NULL, NULL, NULL, 0);
+ ok(!ret, "GetUrlCacheEntryInfoEx with zero-length buffer should fail\n");
+ ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "GetUrlCacheEntryInfoEx should have set last error to ERROR_INSUFFICIENT_BUFFER instead of %d\n", GetLastError());
+
HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo);
}
+static void test_RetrieveUrlCacheEntryA(void)
+{
+ BOOL ret;
+ DWORD cbCacheEntryInfo;
+
+ cbCacheEntryInfo = 0;
+ SetLastError(0xdeadbeef);
+ ret = RetrieveUrlCacheEntryFile(NULL, NULL, &cbCacheEntryInfo, 0);
+ ok(!ret, "RetrieveUrlCacheEntryFile should have failed\n");
+ ok(GetLastError() == ERROR_INVALID_PARAMETER, "RetrieveUrlCacheEntryFile should have set last error to ERROR_INVALID_PARAMETER instead of %d\n", GetLastError());
+
+ if (0)
+ {
+ /* Crashes on Win9x, NT4 and W2K */
+ SetLastError(0xdeadbeef);
+ ret = RetrieveUrlCacheEntryFile(TEST_URL, NULL, NULL, 0);
+ ok(!ret, "RetrieveUrlCacheEntryFile should have failed\n");
+ ok(GetLastError() == ERROR_INVALID_PARAMETER, "RetrieveUrlCacheEntryFile should have set last error to ERROR_INVALID_PARAMETER instead of %d\n", GetLastError());
+ }
+
+ SetLastError(0xdeadbeef);
+ cbCacheEntryInfo = 100000;
+ ret = RetrieveUrlCacheEntryFile(NULL, NULL, &cbCacheEntryInfo, 0);
+ ok(!ret, "RetrieveUrlCacheEntryFile should have failed\n");
+ ok(GetLastError() == ERROR_INVALID_PARAMETER, "RetrieveUrlCacheEntryFile should have set last error to ERROR_INVALID_PARAMETER instead of %d\n", GetLastError());
+}
+
static void test_urlcacheA(void)
{
BOOL ret;
@@ -150,23 +186,45 @@ static void test_urlcacheA(void)
HeapFree(GetProcessHeap(), 0, lpCacheEntryInfo);
- ret = UnlockUrlCacheEntryFile(TEST_URL, 0);
- ok(ret, "UnlockUrlCacheEntryFile failed with error %d\n", GetLastError());
+ if (pUnlockUrlCacheEntryFileA)
+ {
+ ret = pUnlockUrlCacheEntryFileA(TEST_URL, 0);
+ ok(ret, "UnlockUrlCacheEntryFileA failed with error %d\n", GetLastError());
+ }
/* test Find*UrlCacheEntry functions */
test_find_url_cache_entriesA();
test_GetUrlCacheEntryInfoExA();
+ test_RetrieveUrlCacheEntryA();
- ret = DeleteUrlCacheEntry(TEST_URL);
- ok(ret, "DeleteUrlCacheEntry failed with error %d\n", GetLastError());
+ if (pDeleteUrlCacheEntryA)
+ {
+ ret = pDeleteUrlCacheEntryA(TEST_URL);
+ ok(ret, "DeleteUrlCacheEntryA failed with error %d\n", GetLastError());
+ }
ret = DeleteFile(filenameA);
todo_wine
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND, "local file should no longer exist\n");
}
+static void test_FindCloseUrlCache(void)
+{
+ BOOL r;
+ DWORD err;
+ r = FindCloseUrlCache(NULL);
+ err = GetLastError();
+ ok(0 == r, "expected 0, got %d\n", r);
+ ok(ERROR_INVALID_HANDLE == err, "expected %d, got %d\n", ERROR_INVALID_HANDLE, err);
+}
+
START_TEST(urlcache)
{
+ HMODULE hdll;
+ hdll = GetModuleHandleA("wininet.dll");
+ pDeleteUrlCacheEntryA = (void*)GetProcAddress(hdll, "DeleteUrlCacheEntryA");
+ pUnlockUrlCacheEntryFileA = (void*)GetProcAddress(hdll, "UnlockUrlCacheEntryFileA");
test_urlcacheA();
+ test_FindCloseUrlCache();
}
diff --git a/rostests/winetests/wintrust/crypt.c b/rostests/winetests/wintrust/crypt.c
index 64211f18394..9129fa9da78 100644
--- a/rostests/winetests/wintrust/crypt.c
+++ b/rostests/winetests/wintrust/crypt.c
@@ -469,13 +469,13 @@ static void test_CryptCATAdminAddRemoveCatalog(void)
hcatinfo = pCryptCATAdminAddCatalog(NULL, NULL, NULL, 0);
error = GetLastError();
ok(hcatinfo == NULL, "CryptCATAdminAddCatalog succeeded\n");
- ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMTER\n", GetLastError());
+ ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMETER\n", GetLastError());
SetLastError(0xdeadbeef);
hcatinfo = pCryptCATAdminAddCatalog(hcatadmin, NULL, NULL, 0);
error = GetLastError();
ok(hcatinfo == NULL, "CryptCATAdminAddCatalog succeeded\n");
- ok(error == ERROR_INVALID_PARAMETER, "got %u expected INVALID_PARAMTER\n", GetLastError());
+ ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMETER\n", GetLastError());
MultiByteToWideChar(0, 0, tmpfile, -1, tmpfileW, MAX_PATH);
@@ -491,7 +491,7 @@ static void test_CryptCATAdminAddRemoveCatalog(void)
hcatinfo = pCryptCATAdminAddCatalog(hcatadmin, tmpfileW, basenameW, 1);
error = GetLastError();
ok(hcatinfo == NULL, "CryptCATAdminAddCatalog succeeded\n");
- ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMTER\n", GetLastError());
+ ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMETER\n", GetLastError());
SetLastError(0xdeadbeef);
hcatinfo = pCryptCATAdminAddCatalog(hcatadmin, tmpfileW, NULL, 0);
@@ -740,7 +740,7 @@ static void test_create_catalog_file(void)
ok(attrcount == 2, "Expected 2 attributes, got %d\n", attrcount);
pCryptCATCDFClose(catcdf);
- /* Eventhough the resulting catalogfile shows the attributes, they will not be enumerated */
+ /* Even though the resulting catalog file shows the attributes, they will not be enumerated */
test_catalog_properties(catfileA, 0, 0);
DeleteFileA(catfileA);
@@ -904,7 +904,7 @@ static void test_cdf_parsing(void)
todo_wine
ok(DeleteFileA(catfileA), "Expected a catalog file to be created\n");
- /* Header and non-existing member */
+ /* Header and nonexistent member */
lstrcpyA(cdf_contents, "[CatalogHeader]\r\n");
lstrcatA(cdf_contents, "Name=tempfile.cat\r\n");
lstrcatA(cdf_contents, "[CatalogFiles]\r\n");
@@ -1079,7 +1079,7 @@ START_TEST(crypt)
{
int myARGC;
char** myARGV;
- char windir[MAX_PATH];
+ char sysdir[MAX_PATH];
InitFunctionPtrs();
@@ -1089,11 +1089,11 @@ START_TEST(crypt)
return;
}
- GetWindowsDirectoryA(windir, MAX_PATH);
- lstrcpyA(catroot, windir);
- lstrcatA(catroot, "\\system32\\CatRoot");
- lstrcpyA(catroot2, windir);
- lstrcatA(catroot2, "\\system32\\CatRoot2");
+ GetSystemDirectoryA(sysdir, MAX_PATH);
+ lstrcpyA(catroot, sysdir);
+ lstrcatA(catroot, "\\CatRoot");
+ lstrcpyA(catroot2, sysdir);
+ lstrcatA(catroot2, "\\CatRoot2");
myARGC = winetest_get_mainargs(&myARGV);
strcpy(selfname, myARGV[0]);
@@ -1106,7 +1106,7 @@ START_TEST(crypt)
test_CryptCATCDF_params();
/* Test the parsing of a cdf file */
test_cdf_parsing();
- /* Create a catalogfile out of our own catalog definition file */
+ /* Create a catalog file out of our own catalog definition file */
test_create_catalog_file();
test_CryptCATAdminAddRemoveCatalog();
}
diff --git a/rostests/winetests/wintrust/register.c b/rostests/winetests/wintrust/register.c
index 81be1042cd0..8a6675cbdb4 100644
--- a/rostests/winetests/wintrust/register.c
+++ b/rostests/winetests/wintrust/register.c
@@ -120,8 +120,10 @@ static void test_AddRem_ActionID(void)
SetLastError(0xdeadbeef);
ret = pWintrustAddActionID(&ActionID, 0, &ActionIDFunctions);
ok (ret, "Expected WintrustAddActionID to succeed.\n");
- ok (GetLastError() == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %u.\n", GetLastError());
+ ok (GetLastError() == ERROR_INVALID_PARAMETER ||
+ GetLastError() == ERROR_ACCESS_DENIED,
+ "Expected ERROR_INVALID_PARAMETER or ERROR_ACCESS_DENIED, got %u.\n",
+ GetLastError());
/* All OK and all functions are correctly defined. The DLL and entrypoints
* are not present.
@@ -139,8 +141,9 @@ static void test_AddRem_ActionID(void)
SetLastError(0xdeadbeef);
ret = pWintrustAddActionID(&ActionID, 0, &ActionIDFunctions);
ok (ret, "Expected WintrustAddActionID to succeed.\n");
- ok (GetLastError() == 0xdeadbeef,
- "Expected 0xdeadbeef, got %u.\n", GetLastError());
+ ok (GetLastError() == 0xdeadbeef || GetLastError() == ERROR_ACCESS_DENIED,
+ "Expected 0xdeadbeef or ERROR_ACCESS_DENIED, got %u.\n",
+ GetLastError());
SetLastError(0xdeadbeef);
ret = pWintrustRemoveActionID(&ActionID);
@@ -165,12 +168,10 @@ static void test_AddRem_ActionID(void)
static void test_AddDefaultForUsage(void)
{
BOOL ret;
- LONG res;
static GUID ActionID = { 0xdeadbeef, 0xdead, 0xbeef, { 0xde,0xad,0xbe,0xef,0xde,0xad,0xbe,0xef }};
static WCHAR DummyDllW[] = {'d','e','a','d','b','e','e','f','.','d','l','l',0 };
static CHAR DummyFunction[] = "dummyfunction";
static const CHAR oid[] = "1.2.3.4.5.6.7.8.9.10";
- static const CHAR Usages[] = "SOFTWARE\\Microsoft\\Cryptography\\Providers\\Trust\\Usages\\1.2.3.4.5.6.7.8.9.10";
static CRYPT_PROVIDER_REGDEFUSAGE DefUsage;
if (!pWintrustAddDefaultForUsage)
@@ -206,27 +207,6 @@ static void test_AddDefaultForUsage(void)
ok (GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %u.\n", GetLastError());
- /* Just the ActionID */
- memset(&DefUsage, 0 , sizeof(CRYPT_PROVIDER_REGDEFUSAGE));
- DefUsage.cbStruct = sizeof(CRYPT_PROVIDER_REGDEFUSAGE);
- DefUsage.pgActionID = &ActionID;
- SetLastError(0xdeadbeef);
- ret = pWintrustAddDefaultForUsage(oid, &DefUsage);
- ok ( ret, "Expected WintrustAddDefaultForUsage to succeed\n");
- ok (GetLastError() == 0xdeadbeef,
- "Last error should not have been changed: %u\n", GetLastError());
-
- /* No ActionID */
- memset(&DefUsage, 0 , sizeof(CRYPT_PROVIDER_REGDEFUSAGE));
- DefUsage.cbStruct = sizeof(CRYPT_PROVIDER_REGDEFUSAGE);
- DefUsage.pwszDllName = DummyDllW;
- DefUsage.pwszLoadCallbackDataFunctionName = DummyFunction;
- DefUsage.pwszFreeCallbackDataFunctionName = DummyFunction;
- ret = pWintrustAddDefaultForUsage(oid, &DefUsage);
- ok (!ret, "Expected WintrustAddDefaultForUsage to fail.\n");
- ok (GetLastError() == ERROR_INVALID_PARAMETER,
- "Expected ERROR_INVALID_PARAMETER, got %u.\n", GetLastError());
-
/* cbStruct set to 0 */
memset(&DefUsage, 0 , sizeof(CRYPT_PROVIDER_REGDEFUSAGE));
DefUsage.cbStruct = 0;
@@ -239,28 +219,6 @@ static void test_AddDefaultForUsage(void)
ok (!ret, "Expected WintrustAddDefaultForUsage to fail.\n");
ok (GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %u.\n", GetLastError());
-
- /* All OK */
- memset(&DefUsage, 0 , sizeof(CRYPT_PROVIDER_REGDEFUSAGE));
- DefUsage.cbStruct = sizeof(CRYPT_PROVIDER_REGDEFUSAGE);
- DefUsage.pgActionID = &ActionID;
- DefUsage.pwszDllName = DummyDllW;
- DefUsage.pwszLoadCallbackDataFunctionName = DummyFunction;
- DefUsage.pwszFreeCallbackDataFunctionName = DummyFunction;
- SetLastError(0xdeadbeef);
- ret = pWintrustAddDefaultForUsage(oid, &DefUsage);
- ok ( ret, "Expected WintrustAddDefaultForUsage to succeed\n");
- ok (GetLastError() == 0xdeadbeef,
- "Last error should not have been changed: %u\n", GetLastError());
-
- /* There is no corresponding remove for WintrustAddDefaultForUsage
- * so we delete the registry key manually.
- */
- if (ret)
- {
- res = RegDeleteKeyA(HKEY_LOCAL_MACHINE, Usages);
- ok (res == ERROR_SUCCESS, "Key delete failed : 0x%08x\n", res);
- }
}
static void test_LoadFunctionPointers(void)
@@ -332,9 +290,9 @@ static void test_RegPolicyFlags(void)
size = sizeof(flags1);
r = RegQueryValueExA(key, State, NULL, NULL, (LPBYTE)&flags1, &size);
- ok(!r, "RegQueryValueEx failed: %d\n", r);
-
- ok(flags1 == flags2, "Got %08x flags instead of %08x\n", flags1, flags2);
+ ok(!r || r == ERROR_FILE_NOT_FOUND, "RegQueryValueEx failed: %d\n", r);
+ if (!r)
+ ok(flags1 == flags2, "Got %08x flags instead of %08x\n", flags1, flags2);
flags3 = flags2 | 1;
ret = pWintrustSetRegPolicyFlags(flags3);
diff --git a/rostests/winetests/wintrust/softpub.c b/rostests/winetests/wintrust/softpub.c
index 5c5d892d45d..3e4347d80d3 100644
--- a/rostests/winetests/wintrust/softpub.c
+++ b/rostests/winetests/wintrust/softpub.c
@@ -303,12 +303,20 @@ static void testObjTrust(SAFE_PROVIDER_FUNCTIONS *funcs, GUID *actionID)
ret = funcs->pfnObjectTrust(&data);
ok(ret == S_FALSE, "Expected S_FALSE, got %08x\n", ret);
ok(data.padwTrustStepErrors[TRUSTERROR_STEP_FINAL_OBJPROV] ==
- TRUST_E_NOSIGNATURE, "Expected TRUST_E_NOSIGNATURE, got %08x\n",
+ TRUST_E_NOSIGNATURE ||
+ data.padwTrustStepErrors[TRUSTERROR_STEP_FINAL_OBJPROV] ==
+ TRUST_E_SUBJECT_FORM_UNKNOWN,
+ "Expected TRUST_E_NOSIGNATURE or TRUST_E_SUBJECT_FORM_UNKNOWN, got %08x\n",
data.padwTrustStepErrors[TRUSTERROR_STEP_FINAL_OBJPROV]);
- ok(!memcmp(&provDataSIP.gSubject, &unknown, sizeof(unknown)),
- "Unexpected subject GUID\n");
- ok(provDataSIP.pSip != NULL, "Expected a SIP\n");
- ok(provDataSIP.psSipSubjectInfo != NULL, "Expected a subject info\n");
+ if (data.padwTrustStepErrors[TRUSTERROR_STEP_FINAL_OBJPROV] ==
+ TRUST_E_NOSIGNATURE)
+ {
+ ok(!memcmp(&provDataSIP.gSubject, &unknown, sizeof(unknown)),
+ "Unexpected subject GUID\n");
+ ok(provDataSIP.pSip != NULL, "Expected a SIP\n");
+ ok(provDataSIP.psSipSubjectInfo != NULL,
+ "Expected a subject info\n");
+ }
funcs->pfnFree(data.padwTrustStepErrors);
}
}
@@ -444,10 +452,11 @@ static void test_wintrust(void)
getNotepadPath(notepadPathW, MAX_PATH);
file.pcwszFilePath = notepadPathW;
r = WinVerifyTrust(INVALID_HANDLE_VALUE, &generic_action_v2, &wtd);
- ok(r == TRUST_E_NOSIGNATURE, "expected TRUST_E_NOSIGNATURE, got %08x\n", r);
+ ok(r == TRUST_E_NOSIGNATURE || r == CRYPT_E_FILE_ERROR,
+ "expected TRUST_E_NOSIGNATURE or CRYPT_E_FILE_ERROR, got %08x\n", r);
hr = WinVerifyTrustEx(INVALID_HANDLE_VALUE, &generic_action_v2, &wtd);
- ok(hr == TRUST_E_NOSIGNATURE, "expected TRUST_E_NOSIGNATURE, got %08x\n",
- hr);
+ ok(hr == TRUST_E_NOSIGNATURE || r == CRYPT_E_FILE_ERROR,
+ "expected TRUST_E_NOSIGNATURE or CRYPT_E_FILE_ERROR, got %08x\n", hr);
}
static BOOL (WINAPI * pWTHelperGetKnownUsages)(DWORD action, PCCRYPT_OID_INFO **usages);
diff --git a/rostests/winetests/ws2_32/sock.c b/rostests/winetests/ws2_32/sock.c
index 0b5cb88becc..22455ef0c3e 100644
--- a/rostests/winetests/ws2_32/sock.c
+++ b/rostests/winetests/ws2_32/sock.c
@@ -852,7 +852,8 @@ static void Exit (void)
ok ( ret == 0, "WSACleanup failed ret = %d GetLastError is %d\n", ret, err);
ret = WSACleanup();
err = WSAGetLastError();
- ok ( ret == SOCKET_ERROR && err == WSANOTINITIALISED,
+ ok ( (ret == SOCKET_ERROR && err == WSANOTINITIALISED) ||
+ broken(ret == 0), /* WinME */
"WSACleanup returned %d GetLastError is %d\n", ret, err);
}