[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