return S_OK;
case DISPID_GLOBAL_TESTARGTYPES: {
- VARIANT args[3];
+ VARIANT args[4];
DISPPARAMS dp = {args, NULL, sizeof(args)/sizeof(*args), 0};
HRESULT hres;
V_INT(args+1) = 22;
V_VT(args+2) = VT_UNKNOWN;
V_UNKNOWN(args+2) = (IUnknown*)&testObj;
+ V_VT(args+3) = VT_UNKNOWN;
+ V_UNKNOWN(args+3) = NULL;
hres = IDispatch_Invoke(V_DISPATCH(pdp->rgvarg), DISPID_VALUE, &IID_NULL, 0, DISPATCH_METHOD, &dp, NULL, NULL, NULL);
ok(hres == S_OK, "Invoke failed: %08x\n", hres);
size = GetFileSize(file, NULL);
- map = CreateFileMapping(file, NULL, PAGE_READONLY, 0, 0, NULL);
+ map = CreateFileMappingW(file, NULL, PAGE_READONLY, 0, 0, NULL);
CloseHandle(file);
if(map == INVALID_HANDLE_VALUE) {
trace("Could not create file mapping: %u\n", GetLastError());
ok(hres == S_OK, "parse_script failed: %08x\n", hres);
}
-static void run_from_res(const char *name)
+static BSTR load_res(const char *name)
{
const char *data;
DWORD size, len;
BSTR str;
HRSRC src;
- HRESULT hres;
strict_dispid_check = FALSE;
test_name = name;
str = SysAllocStringLen(NULL, len);
MultiByteToWideChar(CP_ACP, 0, data, size, str, len);
+ return str;
+}
+
+static void run_from_res(const char *name)
+{
+ BSTR str;
+ HRESULT hres;
+
+ str = load_res(name);
+
SET_EXPECT(global_success_d);
SET_EXPECT(global_success_i);
hres = parse_script(SCRIPTITEM_GLOBALMEMBERS, str);
CHECK_CALLED(global_propargput_i);
SET_EXPECT(global_testargtypes_i);
- parse_script_a("testArgTypes(dispUnk, intProp(), intProp, getShort(), shortProp, function(d,i,s) {"
+ parse_script_a("testArgTypes(dispUnk, intProp(), intProp, getShort(), shortProp, function(nullunk,d,i,s) {"
" ok(getVT(i) === 'VT_I4', 'getVT(i) = ' + getVT(i));"
" ok(getVT(s) === 'VT_I4', 'getVT(s) = ' + getVT(s));"
" ok(getVT(d) === 'VT_DISPATCH', 'getVT(d) = ' + getVT(d));"
+ " ok(getVT(nullunk) === 'VT_DISPATCH', 'getVT(nullunk) = ' + getVT(nullunk));"
+ " ok(nullunk === null, 'nullunk !== null');"
"});");
CHECK_CALLED(global_testargtypes_i);
ok(hres == JS_E_INVALID_CHAR, "parse_script failed %08x\n", hres);
}
+static void run_benchmark(const char *script_name)
+{
+ IActiveScriptParse *parser;
+ IActiveScript *engine;
+ ULONG start, end;
+ BSTR src;
+ HRESULT hres;
+
+ engine = create_script();
+ if(!engine)
+ return;
+
+ hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptParse, (void**)&parser);
+ ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
+ if (FAILED(hres)) {
+ IActiveScript_Release(engine);
+ return;
+ }
+
+ hres = IActiveScriptParse_InitNew(parser);
+ ok(hres == S_OK, "InitNew failed: %08x\n", hres);
+
+ hres = IActiveScript_SetScriptSite(engine, &ActiveScriptSite);
+ ok(hres == S_OK, "SetScriptSite failed: %08x\n", hres);
+
+ hres = IActiveScript_AddNamedItem(engine, testW,
+ SCRIPTITEM_ISVISIBLE|SCRIPTITEM_ISSOURCE);
+ ok(hres == S_OK, "AddNamedItem failed: %08x\n", hres);
+
+ hres = IActiveScript_SetScriptState(engine, SCRIPTSTATE_STARTED);
+ ok(hres == S_OK, "SetScriptState(SCRIPTSTATE_STARTED) failed: %08x\n", hres);
+
+ src = load_res(script_name);
+
+ start = GetTickCount();
+ hres = IActiveScriptParse_ParseScriptText(parser, src, NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
+ end = GetTickCount();
+ ok(hres == S_OK, "%s: ParseScriptText failed: %08x\n", script_name, hres);
+
+ trace("%s ran in %u ms\n", script_name, end-start);
+
+ IActiveScript_Release(engine);
+ IActiveScriptParse_Release(parser);
+ SysFreeString(src);
+}
+
+static void run_benchmarks(void)
+{
+ trace("Running benchmarks...\n");
+
+ run_benchmark("dna.js");
+ run_benchmark("base64.js");
+ run_benchmark("validateinput.js");
+}
+
static BOOL check_jscript(void)
{
IActiveScriptProperty *script_prop;
trace("ParseProcedureText tests...\n");
test_parse_proc();
}
+
+ if(winetest_interactive)
+ run_benchmarks();
}
CoUninitialize();