DEFINE_EXPECT(testobj_delete_test);
DEFINE_EXPECT(testobj_delete_nodelete);
DEFINE_EXPECT(testobj_value);
+DEFINE_EXPECT(testobj_construct);
DEFINE_EXPECT(testobj_prop_d);
DEFINE_EXPECT(testobj_withprop_d);
DEFINE_EXPECT(testobj_withprop_i);
DEFINE_EXPECT(testobj_noprop_d);
DEFINE_EXPECT(testobj_onlydispid_d);
DEFINE_EXPECT(testobj_onlydispid_i);
+DEFINE_EXPECT(testobj_notexists_d);
DEFINE_EXPECT(GetItemInfo_testVal);
DEFINE_EXPECT(ActiveScriptSite_OnScriptError);
DEFINE_EXPECT(invoke_func);
*pid = DISPID_TESTOBJ_ONLYDISPID;
return S_OK;
}
+ if(!strcmp_wa(bstrName, "notExists")) {
+ CHECK_EXPECT(testobj_notexists_d);
+ test_grfdex(grfdex, fdexNameCaseSensitive);
+ return DISP_E_UNKNOWNNAME;
+ }
ok(0, "unexpected name %s\n", wine_dbgstr_w(bstrName));
return E_NOTIMPL;
case INVOKE_FUNC|INVOKE_PROPERTYGET:
ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs);
break;
+ case DISPATCH_CONSTRUCT:
+ CHECK_EXPECT(testobj_construct);
+ ok(pdp->cArgs == 1, "cArgs = %d\n", pdp->cArgs);
+ break;
default:
ok(0, "invalid flag (%x)\n", wFlags);
}
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);
hres = parse_script_expr("reportSuccess(); return true", &v);
ok(hres == 0x800a03fa, "parse_script_expr failed: %08x\n", hres);
+ SET_EXPECT(global_success_d);
+ SET_EXPECT(global_success_i);
+ hres = parse_script_expr("reportSuccess(); true", NULL);
+ ok(hres == S_OK, "parse_script_expr failed: %08x\n", hres);
+ CHECK_CALLED(global_success_d);
+ CHECK_CALLED(global_success_i);
+
testing_expr = FALSE;
}
parse_script_a("var notExists; notExists = 1;");
CHECK_CALLED(global_notexists_d);
+ SET_EXPECT(testobj_notexists_d);
+ parse_script_a("testObj.notExists;");
+ CHECK_CALLED(testobj_notexists_d);
+
parse_script_a("function f() { var testPropGet; }");
parse_script_a("(function () { var testPropGet; })();");
parse_script_a("(function () { eval('var testPropGet;'); })();");
parse_script_a("ok(String.prototype.concat.call(testObj, ' OK') === '1 OK', 'wrong concat result');");
CHECK_CALLED(testobj_value);
+ SET_EXPECT(testobj_construct);
+ parse_script_a("var t = new testObj(1);");
+ CHECK_CALLED(testobj_construct);
+
SET_EXPECT(global_propget_d);
SET_EXPECT(global_propget_i);
parse_script_a("this.testPropGet;");
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();