[3/6] oleaut32/tests: Update the typelib test generator to match existing data.
Dmitry Timoshkov
dmitry at baikal.ru
Mon Oct 5 07:36:13 CDT 2015
Someone changed the autogenerated data but forgot to update the generator.
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/oleaut32/tests/typelib.c | 152 ++++++++++++++++++++++++++++++++----------
1 file changed, 118 insertions(+), 34 deletions(-)
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 0c3ab84..b8904a3 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -28,6 +28,7 @@
#include <wine/test.h>
#include <stdarg.h>
#include <stdio.h>
+#include <assert.h>
#include "windef.h"
#include "winbase.h"
@@ -44,7 +45,7 @@
#define expect_int(expr, value) expect_eq(expr, (int)(value), int, "%d")
#define expect_hex(expr, value) expect_eq(expr, (int)(value), int, "0x%x")
#define expect_null(expr) expect_eq(expr, NULL, const void *, "%p")
-#define expect_guid(expected, guid) { ok(IsEqualGUID(expected, guid), "got wrong guid\n"); }
+#define expect_guid(expected, guid) { ok(IsEqualGUID(expected, guid), "got wrong guid %s\n", wine_dbgstr_guid(guid)); }
#define expect_wstr_acpval(expr, value) \
{ \
@@ -3665,11 +3666,9 @@ static void test_CreateTypeLib(SYSKIND sys) {
static char *dump_string(LPWSTR wstr)
{
- int size = lstrlenW(wstr)+3;
+ int size = lstrlenW(wstr)+1;
char *out = CoTaskMemAlloc(size);
- WideCharToMultiByte(20127, 0, wstr, -1, out+1, size, NULL, NULL);
- out[0] = '\"';
- strcat(out, "\"");
+ WideCharToMultiByte(20127, 0, wstr, -1, out, size, NULL, NULL);
return out;
}
@@ -3710,6 +3709,19 @@ static const struct map_entry invkind_map[] = {
{0, NULL}
};
+static const struct map_entry callconv_map[] = {
+ MAP_ENTRY(CC_FASTCALL),
+ MAP_ENTRY(CC_CDECL),
+ MAP_ENTRY(CC_PASCAL),
+ MAP_ENTRY(CC_MACPASCAL),
+ MAP_ENTRY(CC_STDCALL),
+ MAP_ENTRY(CC_FPFASTCALL),
+ MAP_ENTRY(CC_SYSCALL),
+ MAP_ENTRY(CC_MPWCDECL),
+ MAP_ENTRY(CC_MPWPASCAL),
+ {0, NULL}
+};
+
#undef MAP_ENTRY
static const char *map_value(DWORD val, const struct map_entry *map)
@@ -3730,6 +3742,66 @@ static const char *map_value(DWORD val, const struct map_entry *map)
return buf;
}
+static const char *dump_type_flags(DWORD flags)
+{
+ static char buf[256];
+
+ if (!flags) return "0";
+
+ buf[0] = 0;
+
+#define ADD_FLAG(x) if (flags & x) { if (buf[0]) strcat(buf, "|"); strcat(buf, #x); flags &= ~x; }
+ ADD_FLAG(TYPEFLAG_FPROXY)
+ ADD_FLAG(TYPEFLAG_FREVERSEBIND)
+ ADD_FLAG(TYPEFLAG_FDISPATCHABLE)
+ ADD_FLAG(TYPEFLAG_FREPLACEABLE)
+ ADD_FLAG(TYPEFLAG_FAGGREGATABLE)
+ ADD_FLAG(TYPEFLAG_FRESTRICTED)
+ ADD_FLAG(TYPEFLAG_FOLEAUTOMATION)
+ ADD_FLAG(TYPEFLAG_FNONEXTENSIBLE)
+ ADD_FLAG(TYPEFLAG_FDUAL)
+ ADD_FLAG(TYPEFLAG_FCONTROL)
+ ADD_FLAG(TYPEFLAG_FHIDDEN)
+ ADD_FLAG(TYPEFLAG_FPREDECLID)
+ ADD_FLAG(TYPEFLAG_FLICENSED)
+ ADD_FLAG(TYPEFLAG_FCANCREATE)
+ ADD_FLAG(TYPEFLAG_FAPPOBJECT)
+#undef ADD_FLAG
+
+ assert(!flags);
+ assert(strlen(buf) < sizeof(buf));
+
+ return buf;
+}
+
+static char *print_size(BSTR name, TYPEATTR *attr)
+{
+ static char buf[256];
+
+ switch (attr->typekind)
+ {
+ case TKIND_DISPATCH:
+ case TKIND_INTERFACE:
+ sprintf(buf, "sizeof(%s*)", dump_string(name));
+ break;
+
+ case TKIND_RECORD:
+ sprintf(buf, "sizeof(struct %s)", dump_string(name));
+ break;
+
+ case TKIND_ENUM:
+ case TKIND_ALIAS:
+ sprintf(buf, "4");
+ break;
+
+ default:
+ assert(0);
+ return NULL;
+ }
+
+ return buf;
+}
+
static void test_dump_typelib(const char *name)
{
WCHAR wszString[260];
@@ -3740,8 +3812,10 @@ static void test_dump_typelib(const char *name)
MultiByteToWideChar(CP_ACP, 0, name, -1, wszString, 260);
OLE_CHECK(LoadTypeLib(wszString, &lib));
+
+ printf("/*** Autogenerated data. Do not edit, change the generator above instead. ***/\n");
+
count = ITypeLib_GetTypeInfoCount(lib);
- printf("/* interfaces count: %d */\n", count);
for (i = 0; i < count; i++)
{
TYPEATTR *attr;
@@ -3750,17 +3824,22 @@ static void test_dump_typelib(const char *name)
OLE_CHECK(ITypeLib_GetDocumentation(lib, i, &name, NULL, NULL, NULL));
printf("{\n"
- " %s,\n", dump_string(name));
- SysFreeString(name);
+ " \"%s\",\n", dump_string(name));
OLE_CHECK(ITypeLib_GetTypeInfo(lib, i, &info));
- ITypeInfo_GetTypeAttr(info, &attr);
- printf(" /*kind*/ %s, /*flags*/ 0x%x, /*align*/ %d, /*size*/ %d,\n"
- " /*#vtbl*/ %d, /*#func*/ %d,\n"
- " {\n",
- map_value(attr->typekind, tkind_map), attr->wTypeFlags, attr->cbAlignment, attr->cbSizeInstance, attr->cbSizeVft,
+ OLE_CHECK(ITypeInfo_GetTypeAttr(info, &attr));
+
+ printf(" \"%s\",\n", wine_dbgstr_guid(&attr->guid));
+
+ printf(" /*kind*/ %s, /*flags*/ %s, /*align*/ %d, /*size*/ %s,\n"
+ " /*#vtbl*/ %d, /*#func*/ %d",
+ map_value(attr->typekind, tkind_map), dump_type_flags(attr->wTypeFlags),
+ attr->cbAlignment, print_size(name, attr), attr->cbSizeVft/sizeof(void*),
attr->cFuncs);
- ITypeInfo_ReleaseTypeAttr(info, attr);
+
+ if (attr->cFuncs) printf(",\n {\n");
+ else printf("\n");
+
while (1)
{
FUNCDESC *desc;
@@ -3771,11 +3850,11 @@ static void test_dump_typelib(const char *name)
if (FAILED(ITypeInfo_GetFuncDesc(info, f, &desc)))
break;
printf(" {\n"
- " 0x%x, /*func*/ %s, /*inv*/ %s, /*call*/ 0x%x,\n",
+ " /*id*/ 0x%x, /*func*/ %s, /*inv*/ %s, /*call*/ %s,\n",
desc->memid, map_value(desc->funckind, funckind_map), map_value(desc->invkind, invkind_map),
- desc->callconv);
+ map_value(desc->callconv, callconv_map));
printf(" /*#param*/ %d, /*#opt*/ %d, /*vtbl*/ %d, /*#scodes*/ %d, /*flags*/ 0x%x,\n",
- desc->cParams, desc->cParamsOpt, desc->oVft, desc->cScodes, desc->wFuncFlags);
+ desc->cParams, desc->cParamsOpt, desc->oVft/sizeof(void*), desc->cScodes, desc->wFuncFlags);
printf(" {%d, %x}, /* ret */\n", desc->elemdescFunc.tdesc.vt, U(desc->elemdescFunc).paramdesc.wParamFlags);
printf(" { /* params */\n");
for (p = 0; p < desc->cParams; p++)
@@ -3789,7 +3868,7 @@ static void test_dump_typelib(const char *name)
OLE_CHECK(ITypeInfo_GetNames(info, desc->memid, tab, 256, &cNames));
for (p = 0; p < cNames; p++)
{
- printf(" %s,\n", dump_string(tab[p]));
+ printf(" \"%s\",\n", dump_string(tab[p]));
SysFreeString(tab[p]);
}
printf(" NULL,\n");
@@ -3798,9 +3877,11 @@ static void test_dump_typelib(const char *name)
ITypeInfo_ReleaseFuncDesc(info, desc);
f++;
}
- printf(" }\n");
+ if (attr->cFuncs) printf(" }\n");
printf("},\n");
+ ITypeInfo_ReleaseTypeAttr(info, attr);
ITypeInfo_Release(info);
+ SysFreeString(name);
}
ITypeLib_Release(lib);
}
@@ -3843,14 +3924,15 @@ typedef struct _type_info
} type_info;
static const type_info info[] = {
+/*** Autogenerated data. Do not edit, change the generator above instead. ***/
{
"IDualIface",
"{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}",
- /*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL, /*align*/ 4, /*size*/ sizeof(void*),
+ /*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL, /*align*/ 4, /*size*/ sizeof(IDualIface*),
/*#vtbl*/ 7, /*#func*/ 8,
{
{
- 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0x1,
{24, 0}, /* ret */
{ /* params */
@@ -3866,7 +3948,7 @@ static const type_info info[] = {
},
},
{
- 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*id*/ 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ 0x1,
{19, 0}, /* ret */
{ /* params */
@@ -3878,7 +3960,7 @@ static const type_info info[] = {
},
},
{
- 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*id*/ 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ 0x1,
{19, 0}, /* ret */
{ /* params */
@@ -3890,7 +3972,7 @@ static const type_info info[] = {
},
},
{
- 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*id*/ 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0x1,
{24, 0}, /* ret */
{ /* params */
@@ -3904,7 +3986,7 @@ static const type_info info[] = {
},
},
{
- 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*id*/ 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ 0x1,
{24, 0}, /* ret */
{ /* params */
@@ -3922,7 +4004,7 @@ static const type_info info[] = {
},
},
{
- 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*id*/ 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 5, /*#scodes*/ 0, /*flags*/ 0x1,
{24, 0}, /* ret */
{ /* params */
@@ -3944,7 +4026,7 @@ static const type_info info[] = {
},
},
{
- 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*id*/ 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 6, /*#scodes*/ 0, /*flags*/ 0x1,
{24, 0}, /* ret */
{ /* params */
@@ -3972,7 +4054,7 @@ static const type_info info[] = {
},
},
{
- 0x60020000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*id*/ 0x60020000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0x0,
{24, 0}, /* ret */
{ /* params */
@@ -3988,11 +4070,11 @@ static const type_info info[] = {
{
"ISimpleIface",
"{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac009}",
- /*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ 4, /*size*/ sizeof(void*),
+ /*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ 4, /*size*/ sizeof(ISimpleIface*),
/*#vtbl*/ 8, /*#func*/ 1,
{
{
- 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
/*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0x0,
{25, 0}, /* ret */
{ /* params */
@@ -4008,12 +4090,14 @@ static const type_info info[] = {
{
"test_struct",
"{4029f190-ca4a-4611-aeb9-673983cb96dd}",
- /* kind */ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct test_struct)
+ /*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct test_struct),
+ /*#vtbl*/ 0, /*#func*/ 0
},
{
"test_struct2",
"{4029f190-ca4a-4611-aeb9-673983cb96de}",
- /* kind */ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct test_struct)
+ /*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct test_struct2),
+ /*#vtbl*/ 0, /*#func*/ 0
}
};
@@ -4068,8 +4152,8 @@ static void test_dump_typelib(const char *name)
/* check that it's possible to search using this uuid */
typeinfo2 = NULL;
hr = ITypeLib_GetTypeInfoOfGuid(typelib, &guid, &typeinfo2);
- ok(hr == S_OK, "got 0x%08x\n", hr);
- ITypeInfo_Release(typeinfo2);
+ ok(hr == S_OK || (IsEqualGUID(&guid, &IID_NULL) && hr == TYPE_E_ELEMENTNOTFOUND), "got 0x%08x\n", hr);
+ if (hr == S_OK) ITypeInfo_Release(typeinfo2);
}
for (func = 0; func < typeattr->cFuncs; func++)
--
2.6.0
More information about the wine-patches
mailing list