[PATCH 12/12] vbscript/tests: Add tests for the script TypeInfo's TypeLib.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Mon Jan 27 09:33:07 CST 2020
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/vbscript/tests/vbscript.c | 158 +++++++++++++++++++++++++++++++++
1 file changed, 158 insertions(+)
diff --git a/dlls/vbscript/tests/vbscript.c b/dlls/vbscript/tests/vbscript.c
index f0b75ad..5b35ca8 100644
--- a/dlls/vbscript/tests/vbscript.c
+++ b/dlls/vbscript/tests/vbscript.c
@@ -51,6 +51,7 @@
#endif
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
+DEFINE_GUID(IID_IScriptTypeLib, 0xc59c6b11, 0xf6c1, 0x11cf, 0x88,0x35, 0x00,0xa0,0xc9,0x11,0xe8,0xb2);
DEFINE_GUID(IID_IScriptTypeInfo, 0xc59c6b12, 0xf6c1, 0x11cf, 0x88,0x35, 0x00,0xa0,0xc9,0x11,0xe8,0xb2);
#define DEFINE_EXPECT(func) \
@@ -892,13 +893,18 @@ static void test_script_typeinfo(void)
IActiveScript *vbscript;
FUNCDESC *funcdesc;
VARDESC *vardesc;
+ ITypeLib *typelib;
+ TLIBATTR *libattr;
DESCKIND desckind;
+ TYPEKIND typekind;
INT implTypeFlags;
UINT count, index;
HREFTYPE reftype;
BINDPTR bindptr;
MEMBERID memid;
TYPEATTR *attr;
+ USHORT found;
+ BOOL boolean;
HRESULT hr;
WCHAR str[64], *names = str;
BSTR bstr, bstrs[5];
@@ -1254,6 +1260,158 @@ static void test_script_typeinfo(void)
ITypeComp_Release(typecomp);
+ /* Check the TypeLib */
+ hr = IDispatchEx_QueryInterface(script_disp, &IID_ITypeLib, (void**)&typelib);
+ ok(hr == E_NOINTERFACE, "QueryInterface(IID_ITypeLib) returned: %08x\n", hr);
+ hr = ITypeInfo_GetContainingTypeLib(typeinfo, NULL, &index);
+ ok(hr == S_OK, "GetContainingTypeLib failed: %08x\n", hr);
+ ok(index == 0, "Unexpected index %u\n", index);
+ hr = ITypeInfo_GetContainingTypeLib(typeinfo, &typelib, NULL);
+ ok(hr == S_OK, "GetContainingTypeLib failed: %08x\n", hr);
+
+ hr = ITypeLib_GetDocumentation(typelib, 1337, NULL, NULL, NULL, NULL);
+ ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetDocumentation(1337) returned: %08x\n", hr);
+ hr = ITypeLib_GetDocumentation(typelib, -1, &bstr, NULL, NULL, NULL);
+ ok(hr == S_OK, "GetDocumentation(-1) failed: %08x\n", hr);
+ ok(!lstrcmpW(bstr, L"VBScriptTypeLib"), "Unexpected TypeLib name %s\n", wine_dbgstr_w(bstr));
+ SysFreeString(bstr);
+ hr = ITypeLib_GetDocumentation(typelib, 0, &bstr, NULL, NULL, NULL);
+ ok(hr == S_OK, "GetDocumentation(0) failed: %08x\n", hr);
+ ok(!lstrcmpW(bstr, L"VBScriptTypeInfo"), "Unexpected TypeInfo name %s\n", wine_dbgstr_w(bstr));
+ SysFreeString(bstr);
+
+ hr = ITypeLib_GetLibAttr(typelib, NULL);
+ ok(hr == E_INVALIDARG, "GetLibAttr returned: %08x\n", hr);
+ hr = ITypeLib_GetLibAttr(typelib, &libattr);
+ ok(hr == S_OK, "GetLibAttr failed: %08x\n", hr);
+ ok(IsEqualGUID(&libattr->guid, &IID_IScriptTypeLib), "Unexpected GUID %s\n", wine_dbgstr_guid(&libattr->guid));
+ ok(libattr->lcid == LOCALE_USER_DEFAULT, "Unexpected LCID %u\n", libattr->lcid);
+ ok(libattr->syskind == SYS_WIN32, "Unexpected syskind %u\n", libattr->syskind);
+ ok(libattr->wLibFlags == 0, "Unexpected wLibFlags 0x%x\n", libattr->wLibFlags);
+ ITypeLib_ReleaseTLibAttr(typelib, libattr);
+
+ hr = ITypeLib_GetTypeInfoType(typelib, index, NULL);
+ ok(hr == E_INVALIDARG, "GetTypeInfoType returned: %08x\n", hr);
+ hr = ITypeLib_GetTypeInfoType(typelib, 1337, &typekind);
+ ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetTypeInfoType returned: %08x\n", hr);
+ hr = ITypeLib_GetTypeInfoType(typelib, index, &typekind);
+ ok(hr == S_OK, "GetTypeInfoType failed: %08x\n", hr);
+ ok(typekind == TKIND_DISPATCH, "Unexpected typekind %u\n", typekind);
+
+ count = ITypeLib_GetTypeInfoCount(typelib);
+ ok(count == 1, "Unexpected TypeInfo count %u\n", count);
+
+ ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IScriptTypeInfo, NULL);
+ ok(hr == S_OK, "GetTypeInfoOfGuid failed: %08x\n", hr);
+ typeinfo2 = (ITypeInfo*)0xdeadbeef;
+ ITypeLib_GetTypeInfoOfGuid(typelib, &GUID_NULL, &typeinfo2);
+ ok(hr == S_OK, "GetTypeInfoOfGuid returned: %08x\n", hr);
+ ok(!typeinfo2, "Unexpected TypeInfo %p\n", typeinfo2);
+ ITypeLib_GetTypeInfoOfGuid(typelib, &IID_IScriptTypeInfo, &typeinfo2);
+ ok(hr == S_OK, "GetTypeInfoOfGuid failed: %08x\n", hr);
+ ok(typeinfo == typeinfo2, "Unexpected TypeInfo %p (expected %p)\n", typeinfo2, typeinfo);
+ ITypeInfo_Release(typeinfo2);
+
+ hr = ITypeLib_GetTypeInfo(typelib, index, NULL);
+ ok(hr == E_INVALIDARG, "GetTypeInfo returned: %08x\n", hr);
+ hr = ITypeLib_GetTypeInfo(typelib, 1337, &typeinfo2);
+ ok(hr == TYPE_E_ELEMENTNOTFOUND, "GetTypeInfo returned: %08x\n", hr);
+ hr = ITypeLib_GetTypeInfo(typelib, index, &typeinfo2);
+ ok(hr == S_OK, "GetTypeInfo failed: %08x\n", hr);
+ ok(typeinfo == typeinfo2, "Unexpected TypeInfo %p (expected %p)\n", typeinfo2, typeinfo);
+ ITypeInfo_Release(typeinfo2);
+
+ found = 1;
+ wcscpy(str, L"not_found");
+ hr = ITypeLib_FindName(typelib, NULL, 0, &typeinfo2, &memid, &found);
+ ok(hr == E_INVALIDARG, "FindName(not_found, null name) returned: %08x\n", hr);
+ hr = ITypeLib_FindName(typelib, str, 0, NULL, &memid, &found);
+ ok(hr == E_INVALIDARG, "FindName(not_found, null param) returned: %08x\n", hr);
+ hr = ITypeLib_FindName(typelib, str, 0, &typeinfo2, NULL, &found);
+ ok(hr == E_INVALIDARG, "FindName(not_found, null param) returned: %08x\n", hr);
+ hr = ITypeLib_FindName(typelib, str, 0, &typeinfo2, &memid, NULL);
+ ok(hr == E_INVALIDARG, "FindName(not_found, null param) returned: %08x\n", hr);
+ found = 1;
+ hr = ITypeLib_FindName(typelib, str, 0, &typeinfo2, &memid, &found);
+ ok(hr == S_OK, "FindName(not_found) failed: %08x\n", hr);
+ ok(found == 0, "Unexpected found %u\n", found);
+ hr = ITypeLib_IsName(typelib, NULL, 0, &boolean);
+ ok(hr == E_INVALIDARG, "IsName(not_found, null name) returned: %08x\n", hr);
+ hr = ITypeLib_IsName(typelib, str, 0, NULL);
+ ok(hr == E_INVALIDARG, "IsName(not_found, null out) returned: %08x\n", hr);
+ hr = ITypeLib_IsName(typelib, str, 0, &boolean);
+ ok(hr == S_OK, "IsName(not_found) failed: %08x\n", hr);
+ ok(boolean == FALSE, "Unexpected IsName BOOL return %d\n", boolean);
+ found = 1;
+ wcscpy(str, L"Global_VAR");
+ hr = ITypeLib_FindName(typelib, str, 0, &typeinfo2, &memid, &found);
+ ok(hr == S_OK, "FindName(Global_VAR) failed: %08x\n", hr);
+ ok(found == 1, "Unexpected found %u\n", found);
+ ok(memid != MEMBERID_NIL, "Unexpected MEMBERID_NIL memid\n");
+ ok(typeinfo == typeinfo2, "Unexpected TypeInfo %p (expected %p)\n", typeinfo2, typeinfo);
+ ok(!lstrcmpW(str, var[0].name), "Unexpected string %s\n", wine_dbgstr_w(str));
+ ITypeInfo_Release(typeinfo2);
+ wcscpy(str, L"gloBAL_vaR");
+ hr = ITypeLib_IsName(typelib, str, 0, &boolean);
+ ok(hr == S_OK, "IsName(gloBAL_vaR) failed: %08x\n", hr);
+ ok(boolean == TRUE, "Unexpected IsName BOOL return %d\n", boolean);
+ ok(!lstrcmpW(str, var[0].name), "Unexpected string %s\n", wine_dbgstr_w(str));
+ found = 1;
+ wcscpy(str, L"IDispatch");
+ hr = ITypeLib_FindName(typelib, str, 0, &typeinfo2, &memid, &found);
+ ok(hr == S_OK, "FindName(IDispatch) failed: %08x\n", hr);
+ ok(found == 0, "Unexpected found %u\n", found);
+ wcscpy(str, L"Invoke");
+ hr = ITypeLib_IsName(typelib, str, 0, &boolean);
+ ok(hr == S_OK, "IsName(Invoke) failed: %08x\n", hr);
+ ok(boolean == FALSE, "Unexpected IsName BOOL return %d\n", boolean);
+
+ hr = ITypeLib_QueryInterface(typelib, &IID_ITypeComp, (void**)&typecomp);
+ ok(hr == S_OK, "QueryInterface(IID_ITypeComp) failed: %08x\n", hr);
+ hr = ITypeLib_GetTypeComp(typelib, NULL);
+ ok(hr == E_INVALIDARG, "GetTypeComp returned: %08x\n", hr);
+ hr = ITypeLib_GetTypeComp(typelib, &typecomp2);
+ ok(hr == S_OK, "GetTypeComp failed: %08x\n", hr);
+ ok(typecomp == typecomp2, "QueryInterface(IID_ITypeComp) and GetTypeComp returned different TypeComps\n");
+ ITypeComp_Release(typecomp2);
+
+ wcscpy(str, var[0].name);
+ hr = ITypeComp_Bind(typecomp, NULL, 0, 0, &typeinfo2, &desckind, &bindptr);
+ ok(hr == E_INVALIDARG, "Bind returned: %08x\n", hr);
+ hr = ITypeComp_Bind(typecomp, str, 0, 0, NULL, &desckind, &bindptr);
+ ok(hr == E_INVALIDARG, "Bind returned: %08x\n", hr);
+ hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, NULL, &bindptr);
+ ok(hr == E_INVALIDARG, "Bind returned: %08x\n", hr);
+ hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, &desckind, NULL);
+ ok(hr == E_INVALIDARG, "Bind returned: %08x\n", hr);
+ hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, &desckind, &bindptr);
+ ok(hr == S_OK, "Bind failed: %08x\n", hr);
+ ok(desckind == DESCKIND_NONE, "Unexpected desckind %u\n", desckind);
+ wcscpy(str, L"vbscriptTypeInfo");
+ hr = ITypeComp_Bind(typecomp, str, 0, 0, &typeinfo2, &desckind, &bindptr);
+ ok(hr == S_OK, "Bind failed: %08x\n", hr);
+ ok(desckind == DESCKIND_NONE, "Unexpected desckind %u\n", desckind);
+ hr = ITypeComp_BindType(typecomp, NULL, 0, &typeinfo2, &typecomp2);
+ ok(hr == E_INVALIDARG, "BindType returned: %08x\n", hr);
+ hr = ITypeComp_BindType(typecomp, str, 0, NULL, &typecomp2);
+ ok(hr == E_INVALIDARG, "BindType returned: %08x\n", hr);
+ hr = ITypeComp_BindType(typecomp, str, 0, &typeinfo2, NULL);
+ ok(hr == E_INVALIDARG, "BindType returned: %08x\n", hr);
+ hr = ITypeComp_BindType(typecomp, str, 0, &typeinfo2, &typecomp2);
+ ok(hr == S_OK, "BindType failed: %08x\n", hr);
+ ok(typeinfo == typeinfo2, "Unexpected TypeInfo %p (expected %p)\n", typeinfo2, typeinfo);
+ ok(!typecomp2, "Unexpected TypeComp %p (expected null)\n", typecomp2);
+ ok(!lstrcmpW(str, L"vbscriptTypeInfo"), "Unexpected string %s\n", wine_dbgstr_w(str));
+ ITypeInfo_Release(typeinfo2);
+ wcscpy(str, L"IDispatch");
+ hr = ITypeComp_BindType(typecomp, str, 0, &typeinfo2, &typecomp2);
+ ok(hr == S_OK, "BindType failed: %08x\n", hr);
+ ok(!typeinfo2, "Unexpected TypeInfo %p (expected null)\n", typeinfo2);
+ ok(!typecomp2, "Unexpected TypeComp %p (expected null)\n", typecomp2);
+
+ ITypeComp_Release(typecomp);
+ ITypeLib_Release(typelib);
+
/* Updating the script won't update the typeinfo obtained before,
but it will be reflected in any typeinfo obtained afterwards. */
parse_script(parser,
--
2.21.0
More information about the wine-devel
mailing list