[6/6] oleaut32/tests: Add a bunch of new tests for typelib generation.
Dmitry Timoshkov
dmitry at baikal.ru
Thu Oct 15 07:47:22 CDT 2015
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/oleaut32/tests/test_tlb.idl | 31 +++++++++
dlls/oleaut32/tests/typelib.c | 144 +++++++++++++++++++++++++++++++++++++--
2 files changed, 171 insertions(+), 4 deletions(-)
diff --git a/dlls/oleaut32/tests/test_tlb.idl b/dlls/oleaut32/tests/test_tlb.idl
index 8275c37..135f2d0 100644
--- a/dlls/oleaut32/tests/test_tlb.idl
+++ b/dlls/oleaut32/tests/test_tlb.idl
@@ -28,6 +28,16 @@ library Test
{
importlib("stdole2.tlb");
+ [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753900),restricted,hidden]
+ typedef struct _m { int m1; } m;
+
+ [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753901),restricted]
+ struct _n { int n1; };
+ [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753902),hidden]
+ typedef struct _n n;
+ [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753903)]
+ typedef struct _n nn;
+
[dual,uuid(b14b6bb5-904e-4ff9-b247-bd361f7aaedd)]
interface IDualIface : IDispatch
{
@@ -59,6 +69,9 @@ library Test
BSTR bstr;
};
+ typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396a),restricted]
+ int t_INT;
+
typedef [public] enum _a { a1, a2 } a;
typedef [public] enum aa { aa1, aa2 } aa;
typedef enum _b { b1, b2 } b;
@@ -66,11 +79,29 @@ library Test
typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396b)] enum _c { c1, c2 } c;
typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396c)] enum cc { cc1, cc2 } cc;
+ typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396d),restricted,hidden]
+ enum _d { d1, d2 } d;
+ typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396e),restricted,hidden]
+ enum dd { dd1, dd2 } dd;
+
+ typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753970),restricted,hidden]
+ struct _e { int e1; } e;
+ typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753971),restricted,hidden]
+ struct ee { int ee1; } ee;
+
+ typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753972),restricted,hidden]
+ union _f { int f1; BSTR *f2; } f;
+ typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753973),restricted,hidden]
+ union ff { int ff1; BSTR *ff2; } ff;
+
[uuid(ec5dfcd6-eeb0-4cd6-b51e-8030e1dac00a)]
interface ITestIface : IDispatch
{
HRESULT test1(a value);
HRESULT test2(b value);
HRESULT test3(c value);
+ HRESULT test4(d value);
+ HRESULT test5(e value);
+ HRESULT test6(f value);
}
}
diff --git a/dlls/oleaut32/tests/typelib.c b/dlls/oleaut32/tests/typelib.c
index 1d13b89..7bca01a 100644
--- a/dlls/oleaut32/tests/typelib.c
+++ b/dlls/oleaut32/tests/typelib.c
@@ -2,7 +2,7 @@
* ITypeLib and ITypeInfo test
*
* Copyright 2004 Jacek Caban
- * Copyright 2006 Dmitry Timoshkov
+ * Copyright 2006,2015 Dmitry Timoshkov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -3862,6 +3862,10 @@ static char *print_size(BSTR name, TYPEATTR *attr)
sprintf(buf, "sizeof(struct %s)", dump_string(name));
break;
+ case TKIND_UNION:
+ sprintf(buf, "sizeof(union %s)", dump_string(name));
+ break;
+
case TKIND_ENUM:
case TKIND_ALIAS:
sprintf(buf, "4");
@@ -4080,6 +4084,36 @@ typedef struct _type_info
static const type_info info[] = {
/*** Autogenerated data. Do not edit, change the generator above instead. ***/
{
+ "m",
+ "{016fe2ec-b2c8-45f8-b23b-39e53a753900}",
+ /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "_m",
+ "{00000000-0000-0000-0000-000000000000}",
+ /*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ sizeof(struct _m),
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "_n",
+ "{016fe2ec-b2c8-45f8-b23b-39e53a753903}",
+ /*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct _n),
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "n",
+ "{016fe2ec-b2c8-45f8-b23b-39e53a753902}",
+ /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "nn",
+ "{00000000-0000-0000-0000-000000000000}",
+ /*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
"IDualIface",
"{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}",
/*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL, /*align*/ 4, /*size*/ sizeof(IDualIface*),
@@ -4254,6 +4288,12 @@ static const type_info info[] = {
/*#vtbl*/ 0, /*#func*/ 0
},
{
+ "t_INT",
+ "{016fe2ec-b2c8-45f8-b23b-39e53a75396a}",
+ /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED, /*align*/ 4, /*size*/ 4,
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
"a",
"{00000000-0000-0000-0000-000000000000}",
/*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
@@ -4297,15 +4337,69 @@ static const type_info info[] = {
},
{
"cc",
- "{00000000-0000-0000-0000-000000000000}",
+ "{016fe2ec-b2c8-45f8-b23b-39e53a75396c}",
/*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4,
/*#vtbl*/ 0, /*#func*/ 0
},
{
+ "d",
+ "{016fe2ec-b2c8-45f8-b23b-39e53a75396d}",
+ /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "_d",
+ "{00000000-0000-0000-0000-000000000000}",
+ /*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "dd",
+ "{016fe2ec-b2c8-45f8-b23b-39e53a75396e}",
+ /*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "e",
+ "{016fe2ec-b2c8-45f8-b23b-39e53a753970}",
+ /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "_e",
+ "{00000000-0000-0000-0000-000000000000}",
+ /*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ sizeof(struct _e),
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "ee",
+ "{016fe2ec-b2c8-45f8-b23b-39e53a753971}",
+ /*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ sizeof(struct ee),
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "f",
+ "{016fe2ec-b2c8-45f8-b23b-39e53a753972}",
+ /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4,
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "_f",
+ "{00000000-0000-0000-0000-000000000000}",
+ /*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ sizeof(union _f),
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
+ "ff",
+ "{016fe2ec-b2c8-45f8-b23b-39e53a753973}",
+ /*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ sizeof(union ff),
+ /*#vtbl*/ 0, /*#func*/ 0
+},
+{
"ITestIface",
"{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac00a}",
/*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ 4, /*size*/ sizeof(ITestIface*),
- /*#vtbl*/ 10, /*#func*/ 3,
+ /*#vtbl*/ 13, /*#func*/ 6,
{
{
/*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
@@ -4349,6 +4443,48 @@ static const type_info info[] = {
NULL,
},
},
+ {
+ /*id*/ 0x60020003, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0,
+ {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ { /* params */
+ {VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test4",
+ "value",
+ NULL,
+ },
+ },
+ {
+ /*id*/ 0x60020004, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0,
+ {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ { /* params */
+ {VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test5",
+ "value",
+ NULL,
+ },
+ },
+ {
+ /*id*/ 0x60020005, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL,
+ /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0,
+ {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */
+ { /* params */
+ {VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE},
+ {-1, 0, 0}
+ },
+ { /* names */
+ "test6",
+ "value",
+ NULL,
+ },
+ },
}
}
};
@@ -4385,7 +4521,7 @@ static void test_dump_typelib(const char *name)
expect_int(typeattr->typekind, ti->type);
expect_hex(typeattr->wTypeFlags, ti->wTypeFlags);
/* FIXME: remove once widl is fixed */
- if (typeattr->typekind == TKIND_ALIAS)
+ if (typeattr->typekind == TKIND_ALIAS && typeattr->cbAlignment != ti->cbAlignment)
{
todo_wine /* widl generates broken typelib and typeattr just reflects that */
ok(typeattr->cbAlignment == ti->cbAlignment || broken(typeattr->cbAlignment == 1),
--
2.6.1
More information about the wine-patches
mailing list