1040{
1041 static struct
1042 {
1047 {
1052 };
1053 static struct
1054 {
1057 {
1062 };
1065 IActiveScriptParse *
parser;
1068 FUNCDESC *funcdesc;
1069 VARDESC *vardesc;
1070 DESCKIND desckind;
1073 HREFTYPE reftype;
1074 BINDPTR bindptr;
1075 MEMBERID memid;
1079 BSTR bstr, bstrs[5];
1082
1084
1085 hr = IActiveScript_QueryInterface(vbscript, &IID_IActiveScriptParse, (
void**)&
parser);
1086 ok(
hr ==
S_OK,
"Could not get IActiveScriptParse iface: %08lx\n",
hr);
1087
1090 ok(
hr ==
S_OK,
"SetScriptSite failed: %08lx\n",
hr);
1092
1095 ok(
hr ==
S_OK,
"InitNew failed: %08lx\n",
hr);
1097
1100 ok(
hr ==
S_OK,
"SetScriptState(SCRIPTSTATE_CONNECTED) failed: %08lx\n",
hr);
1102
1105 "const const_var = 1337\n"
1106
1107 "function foobar\n"
1108 " foobar = \"foobar\"\n"
1109 "end function\n"
1110
1111 "sub test\nend sub\n"
1112 "private sub private_sub\nend sub\n"
1113
1114 "function subtract(byref x, byval y)\n"
1115 " subtract = x - y\n"
1116 "end function\n"
1117
1118 "function emptyfn\nend function\n"
1119
1120 "class C\n"
1121 " dim x\n"
1122 " public sub method\nend sub\n"
1123 " private function strret\n"
1124 " strret = \"ret\"\n"
1125 " end function\n"
1126 "end class\n"
1127
1128 "implicit = 10\n"
1129 "dim obj\nset obj = new C\n");
1130
1137 ok(
hr ==
S_OK,
"GetTypeInfo failed: %08lx\n",
hr);
1139 ok(
hr ==
S_OK,
"GetTypeInfo failed: %08lx\n",
hr);
1140 ok(
typeinfo != typeinfo2,
"TypeInfo was not supposed to be shared.\n");
1141 ITypeInfo_Release(typeinfo2);
1142
1143 obj = (
void*)0xdeadbeef;
1150 ok(!
obj,
"Unexpected non-null obj %p.\n",
obj);
1151
1153 ok(
hr ==
S_OK,
"GetDocumentation(MEMBERID_NIL) failed: %08lx\n",
hr);
1156
1158 ok(
hr ==
S_OK,
"GetTypeAttr failed: %08lx\n",
hr);
1161 ok(
attr->memidConstructor ==
MEMBERID_NIL,
"Unexpected constructor memid %lu\n",
attr->memidConstructor);
1163 ok(
attr->cbSizeInstance == 4,
"Unexpected cbSizeInstance %lu\n",
attr->cbSizeInstance);
1167 ok(
attr->cImplTypes == 1,
"Unexpected cImplTypes %u\n",
attr->cImplTypes);
1168 ok(
attr->cbSizeVft ==
sizeof(IDispatchVtbl),
"Unexpected cbSizeVft %u\n",
attr->cbSizeVft);
1169 ok(
attr->cbAlignment == 4,
"Unexpected cbAlignment %u\n",
attr->cbAlignment);
1170 ok(
attr->wTypeFlags == TYPEFLAG_FDISPATCHABLE,
"Unexpected wTypeFlags 0x%x\n",
attr->wTypeFlags);
1171 ok(
attr->tdescAlias.vt ==
VT_EMPTY,
"Unexpected tdescAlias.vt %d\n",
attr->tdescAlias.vt);
1172 ok(
attr->idldescType.wIDLFlags == IDLFLAG_NONE,
"Unexpected idldescType.wIDLFlags 0x%x\n",
attr->idldescType.wIDLFlags);
1174
1175
1178 hr = ITypeInfo_GetImplTypeFlags(
typeinfo, 1, &implTypeFlags);
1180 hr = ITypeInfo_GetImplTypeFlags(
typeinfo, -1, &implTypeFlags);
1182 hr = ITypeInfo_GetImplTypeFlags(
typeinfo, 0, &implTypeFlags);
1183 ok(
hr ==
S_OK,
"GetImplTypeFlags failed: %08lx\n",
hr);
1184 ok(implTypeFlags == 0,
"Unexpected implTypeFlags 0x%x\n", implTypeFlags);
1185
1188 hr = ITypeInfo_GetRefTypeOfImplType(
typeinfo, 1, &reftype);
1190 hr = ITypeInfo_GetRefTypeOfImplType(
typeinfo, -1, &reftype);
1192 hr = ITypeInfo_GetRefTypeOfImplType(
typeinfo, 0, &reftype);
1193 ok(
hr ==
S_OK,
"GetRefTypeOfImplType failed: %08lx\n",
hr);
1194 ok(reftype == 1,
"Unexpected reftype %ld\n", reftype);
1195
1198 hr = ITypeInfo_GetRefTypeInfo(
typeinfo, -1, &typeinfo2);
1200 hr = ITypeInfo_GetRefTypeInfo(
typeinfo, 4, &typeinfo2);
1201 ok(
hr ==
E_FAIL,
"GetRefTypeInfo returned: %08lx\n",
hr);
1202 hr = ITypeInfo_GetRefTypeInfo(
typeinfo, 0, &typeinfo2);
1203 ok(
hr ==
S_OK,
"GetRefTypeInfo failed: %08lx\n",
hr);
1204 ok(
typeinfo == typeinfo2,
"Unexpected TypeInfo %p (expected %p)\n", typeinfo2,
typeinfo);
1205 ITypeInfo_Release(typeinfo2);
1206 hr = ITypeInfo_GetRefTypeInfo(
typeinfo, reftype, &typeinfo2);
1207 ok(
hr ==
S_OK,
"GetRefTypeInfo failed: %08lx\n",
hr);
1209 ok(
hr ==
S_OK,
"GetDocumentation(MEMBERID_NIL) failed: %08lx\n",
hr);
1211 ITypeInfo_Release(typeinfo2);
1213
1214
1223 ok(
hr ==
S_OK,
"GetIDsOfNames failed: %08lx\n",
hr);
1230 ok(
hr ==
S_OK,
"GetIDsOfNames failed: %08lx\n",
hr);
1232
1238 ok(
hr ==
S_OK,
"GetNames failed: %08lx\n",
hr);
1241 ok(
hr ==
S_OK,
"GetNames failed: %08lx\n",
hr);
1247
1250 hr = ITypeInfo_GetMops(
typeinfo, memid, &bstr);
1251 ok(
hr ==
S_OK,
"GetMops failed: %08lx\n",
hr);
1254 ok(
hr ==
S_OK,
"GetMops failed: %08lx\n",
hr);
1256
1257
1258 obj = (
void*)0xdeadbeef;
1259 hr = ITypeInfo_AddressOfMember(
typeinfo, memid, INVOKE_FUNC,
NULL);
1261 hr = ITypeInfo_AddressOfMember(
typeinfo, memid, INVOKE_FUNC, &
obj);
1263 ok(!
obj,
"Unexpected non-null obj %p.\n",
obj);
1264 bstr = (
BSTR)0xdeadbeef;
1267 ok(!bstr,
"Unexpected non-null str %p.\n", bstr);
1270 ok(
hr ==
S_OK,
"GetIDsOfNames failed: %08lx\n",
hr);
1271 obj = (
void*)0xdeadbeef;
1272 hr = ITypeInfo_AddressOfMember(
typeinfo, memid, INVOKE_FUNC, &
obj);
1274 ok(!
obj,
"Unexpected non-null obj %p.\n",
obj);
1275 bstr = (
BSTR)0xdeadbeef;
1278 ok(!bstr,
"Unexpected non-null str %p.\n", bstr);
1279
1280
1283 hr = ITypeInfo_GetVarDesc(
typeinfo, 1337, &vardesc);
1286 {
1288 ok(
hr ==
S_OK,
"GetVarDesc(%u) failed: %08lx\n",
i,
hr);
1289 hr = ITypeInfo_GetDocumentation(
typeinfo, vardesc->memid, &bstr, &bstrs[0],
NULL,
NULL);
1290 ok(
hr ==
S_OK,
"[%u] GetDocumentation failed: %08lx\n",
i,
hr);
1293 ok(!bstrs[0],
"[%u] Unexpected doc string %s\n",
i,
wine_dbgstr_w(bstrs[0]));
1295 ok(vardesc->lpstrSchema ==
NULL,
"[%u] Unexpected lpstrSchema %p\n",
i, vardesc->lpstrSchema);
1296 ok(vardesc->oInst == 0,
"[%u] Unexpected oInst %lu\n",
i, vardesc->oInst);
1297 ok(vardesc->varkind == VAR_DISPATCH,
"[%u] Unexpected varkind %d\n",
i, vardesc->varkind);
1298 ok(vardesc->wVarFlags == 0,
"[%u] Unexpected wVarFlags 0x%x\n",
i, vardesc->wVarFlags);
1300 "[%u] Unexpected variable type vt %d (expected %d)\n",
i, vardesc->elemdescVar.tdesc.vt, 0);
1301 ok(vardesc->elemdescVar.paramdesc.pparamdescex ==
NULL,
1302 "[%u] Unexpected variable type pparamdescex %p\n",
i, vardesc->elemdescVar.paramdesc.pparamdescex);
1303 ok(vardesc->elemdescVar.paramdesc.wParamFlags == PARAMFLAG_NONE,
1304 "[%u] Unexpected variable type wParamFlags 0x%x\n",
i, vardesc->elemdescVar.paramdesc.wParamFlags);
1305 ITypeInfo_ReleaseVarDesc(
typeinfo, vardesc);
1306 }
1307
1308
1311 hr = ITypeInfo_GetFuncDesc(
typeinfo, 1337, &funcdesc);
1314 {
1315 hr = ITypeInfo_GetFuncDesc(
typeinfo,
i, &funcdesc);
1316 ok(
hr ==
S_OK,
"GetFuncDesc(%u) failed: %08lx\n",
i,
hr);
1317 hr = ITypeInfo_GetDocumentation(
typeinfo, funcdesc->memid, &bstr, &bstrs[0],
NULL,
NULL);
1318 ok(
hr ==
S_OK,
"[%u] GetDocumentation failed: %08lx\n",
i,
hr);
1321 ok(!bstrs[0],
"[%u] Unexpected doc string %s\n",
i,
wine_dbgstr_w(bstrs[0]));
1323 ok(funcdesc->lprgscode ==
NULL,
"[%u] Unexpected lprgscode %p\n",
i, funcdesc->lprgscode);
1324 ok(
func[
i].num_args ? (funcdesc->lprgelemdescParam !=
NULL) : (funcdesc->lprgelemdescParam ==
NULL),
1325 "[%u] Unexpected lprgelemdescParam %p\n",
i, funcdesc->lprgelemdescParam);
1326 ok(funcdesc->funckind == FUNC_DISPATCH,
"[%u] Unexpected funckind %u\n",
i, funcdesc->funckind);
1327 ok(funcdesc->invkind == INVOKE_FUNC,
"[%u] Unexpected invkind %u\n",
i, funcdesc->invkind);
1328 ok(funcdesc->callconv ==
CC_STDCALL,
"[%u] Unexpected callconv %u\n",
i, funcdesc->callconv);
1329 ok(funcdesc->cParams ==
func[
i].num_args,
"[%u] Unexpected cParams %d (expected %d)\n",
1330 i, funcdesc->cParams,
func[
i].num_args);
1331 ok(funcdesc->cParamsOpt == 0,
"[%u] Unexpected cParamsOpt %d\n",
i, funcdesc->cParamsOpt);
1332 ok(funcdesc->cScodes == 0,
"[%u] Unexpected cScodes %d\n",
i, funcdesc->cScodes);
1333 ok(funcdesc->wFuncFlags == 0,
"[%u] Unexpected wFuncFlags 0x%x\n",
i, funcdesc->wFuncFlags);
1334 ok(funcdesc->elemdescFunc.tdesc.vt ==
func[
i].ret_type,
1335 "[%u] Unexpected return type vt %d (expected %d)\n",
i, funcdesc->elemdescFunc.tdesc.vt,
func[
i].ret_type);
1336 ok(funcdesc->elemdescFunc.paramdesc.pparamdescex ==
NULL,
1337 "[%u] Unexpected return type pparamdescex %p\n",
i, funcdesc->elemdescFunc.paramdesc.pparamdescex);
1338 ok(funcdesc->elemdescFunc.paramdesc.wParamFlags == PARAMFLAG_NONE,
1339 "[%u] Unexpected return type wParamFlags 0x%x\n",
i, funcdesc->elemdescFunc.paramdesc.wParamFlags);
1340 if (funcdesc->lprgelemdescParam)
1342 {
1344 "[%u] Unexpected parameter %u vt %d\n",
i,
index, funcdesc->lprgelemdescParam[
index].tdesc.vt);
1345 ok(funcdesc->lprgelemdescParam[
index].paramdesc.pparamdescex ==
NULL,
1346 "[%u] Unexpected parameter %u pparamdescex %p\n",
i,
index, funcdesc->lprgelemdescParam[
index].paramdesc.pparamdescex);
1347 ok(funcdesc->lprgelemdescParam[
index].paramdesc.wParamFlags == PARAMFLAG_NONE,
1348 "[%u] Unexpected parameter %u wParamFlags 0x%x\n",
i,
index, funcdesc->lprgelemdescParam[
index].paramdesc.wParamFlags);
1349 }
1350 ITypeInfo_ReleaseFuncDesc(
typeinfo, funcdesc);
1351 }
1352
1353
1354 hr = ITypeInfo_QueryInterface(
typeinfo, &IID_ITypeComp, (
void**)&typecomp);
1355 ok(
hr ==
S_OK,
"QueryInterface(IID_ITypeComp) failed: %08lx\n",
hr);
1358 hr = ITypeInfo_GetTypeComp(
typeinfo, &typecomp2);
1359 ok(
hr ==
S_OK,
"GetTypeComp failed: %08lx\n",
hr);
1360 ok(typecomp == typecomp2,
"QueryInterface(IID_ITypeComp) and GetTypeComp returned different TypeComps\n");
1361 ITypeComp_Release(typecomp2);
1363 hr = ITypeComp_Bind(typecomp,
NULL, 0, 0, &typeinfo2, &desckind, &bindptr);
1365 hr = ITypeComp_Bind(typecomp,
str, 0, 0,
NULL, &desckind, &bindptr);
1367 hr = ITypeComp_Bind(typecomp,
str, 0, 0, &typeinfo2,
NULL, &bindptr);
1369 hr = ITypeComp_Bind(typecomp,
str, 0, 0, &typeinfo2, &desckind,
NULL);
1371
1372 hr = ITypeComp_Bind(typecomp,
str, 0, 0, &typeinfo2, &desckind, &bindptr);
1374 ok(desckind == DESCKIND_NONE,
"Unexpected desckind %u\n", desckind);
1376 hr = ITypeComp_Bind(typecomp,
str, 0, INVOKE_FUNC, &typeinfo2, &desckind, &bindptr);
1380 hr = ITypeComp_Bind(typecomp,
str, 0, 0, &typeinfo2, &desckind, &bindptr);
1382 ok(desckind == DESCKIND_NONE,
"Unexpected desckind %u\n", desckind);
1384 hr = ITypeComp_Bind(typecomp,
str, 0, 0, &typeinfo2, &desckind, &bindptr);
1386 ok(desckind == DESCKIND_FUNCDESC,
"Unexpected desckind %u\n", desckind);
1388 ITypeInfo_ReleaseFuncDesc(typeinfo2, bindptr.lpfuncdesc);
1389 ITypeInfo_Release(typeinfo2);
1391 {
1393 hr = ITypeComp_Bind(typecomp,
str, 0, INVOKE_PROPERTYGET, &typeinfo2, &desckind, &bindptr);
1395 ok(desckind == DESCKIND_VARDESC,
"Unexpected desckind %u\n", desckind);
1396 ITypeInfo_ReleaseVarDesc(typeinfo2, bindptr.lpvardesc);
1397 ITypeInfo_Release(typeinfo2);
1398 }
1400 {
1402 hr = ITypeComp_Bind(typecomp,
str, 0, INVOKE_FUNC, &typeinfo2, &desckind, &bindptr);
1404 ok(desckind == DESCKIND_FUNCDESC,
"Unexpected desckind %u\n", desckind);
1405 ITypeInfo_ReleaseFuncDesc(typeinfo2, bindptr.lpfuncdesc);
1406 ITypeInfo_Release(typeinfo2);
1407 }
1409 hr = ITypeComp_BindType(typecomp,
NULL, 0, &typeinfo2, &typecomp2);
1411 hr = ITypeComp_BindType(typecomp,
str, 0,
NULL, &typecomp2);
1413 hr = ITypeComp_BindType(typecomp,
str, 0, &typeinfo2,
NULL);
1415 hr = ITypeComp_BindType(typecomp,
str, 0, &typeinfo2, &typecomp2);
1416 ok(
hr ==
S_OK,
"BindType failed: %08lx\n",
hr);
1417 ok(!typeinfo2,
"Unexpected TypeInfo %p (expected null)\n", typeinfo2);
1418 ok(!typecomp2,
"Unexpected TypeComp %p (expected null)\n", typecomp2);
1420 hr = ITypeComp_BindType(typecomp,
str, 0, &typeinfo2, &typecomp2);
1421 ok(
hr ==
S_OK,
"BindType failed: %08lx\n",
hr);
1422 ok(!typeinfo2,
"Unexpected TypeInfo %p (expected null)\n", typeinfo2);
1423 ok(!typecomp2,
"Unexpected TypeComp %p (expected null)\n", typecomp2);
1425 hr = ITypeComp_BindType(typecomp,
str, 0, &typeinfo2, &typecomp2);
1426 ok(
hr ==
S_OK,
"BindType failed: %08lx\n",
hr);
1427 ok(!typeinfo2,
"Unexpected TypeInfo %p (expected null)\n", typeinfo2);
1428 ok(!typecomp2,
"Unexpected TypeComp %p (expected null)\n", typecomp2);
1429
1430 ITypeComp_Release(typecomp);
1431
1432
1433
1435 L"dim new_var\nnew_var = 10\n"
1436 "sub new_sub\nend sub\n"
1437
1438
1439 "function foobar(x, y, z)\nend function\n");
1440
1442 ok(
hr ==
S_OK,
"GetTypeInfo failed: %08lx\n",
hr);
1444 ok(
hr ==
S_OK,
"GetTypeAttr failed: %08lx\n",
hr);
1448 hr = ITypeInfo_GetTypeAttr(typeinfo2, &
attr);
1449 ok(
hr ==
S_OK,
"GetTypeAttr failed: %08lx\n",
hr);
1452 ITypeInfo_ReleaseTypeAttr(typeinfo2,
attr);
1454 ok(
hr ==
S_OK,
"GetVarDesc failed: %08lx\n",
hr);
1455 hr = ITypeInfo_GetDocumentation(typeinfo2, vardesc->memid, &bstr, &bstrs[0],
NULL,
NULL);
1456 ok(
hr ==
S_OK,
"GetDocumentation failed: %08lx\n",
hr);
1459 ITypeInfo_ReleaseVarDesc(typeinfo2, vardesc);
1461 hr = ITypeInfo_GetFuncDesc(
typeinfo, 0, &funcdesc);
1462 ok(
hr ==
S_OK,
"GetFuncDesc failed: %08lx\n",
hr);
1463 ok(funcdesc->cParams == 0,
"Unexpected cParams %d\n", funcdesc->cParams);
1464 ITypeInfo_ReleaseFuncDesc(
typeinfo, funcdesc);
1465 hr = ITypeInfo_GetFuncDesc(typeinfo2, 0, &funcdesc);
1466 ok(
hr ==
S_OK,
"GetFuncDesc failed: %08lx\n",
hr);
1467 ok(funcdesc->cParams == 3,
"Unexpected cParams %d\n", funcdesc->cParams);
1468 ITypeInfo_ReleaseFuncDesc(typeinfo2, funcdesc);
1469 ITypeInfo_Release(typeinfo2);
1470
1474
1478 hr = IActiveScript_Close(vbscript);
1483
1484 IActiveScript_Release(vbscript);
1485}
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
#define LOCALE_USER_DEFAULT
static __inline const char * wine_dbgstr_guid(const GUID *id)
#define TYPE_E_BADMODULEKIND
#define TYPE_E_ELEMENTNOTFOUND
#define TYPE_E_TYPEMISMATCH