mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 05:22:57 +00:00
sync jscript winetest with wine 1.1.28
svn path=/trunk/; revision=42850
This commit is contained in:
parent
d125c45fff
commit
a41cdb8eae
3 changed files with 272 additions and 17 deletions
|
@ -77,6 +77,14 @@ ok(tmp.f() === "[object RegExp]", "tmp.f() = " + tmp.f());
|
||||||
(tmp = new String).f = Object.prototype.toString;
|
(tmp = new String).f = Object.prototype.toString;
|
||||||
ok(tmp.f() === "[object String]", "tmp.f() = " + tmp.f());
|
ok(tmp.f() === "[object String]", "tmp.f() = " + tmp.f());
|
||||||
|
|
||||||
|
var obj = new Object();
|
||||||
|
obj.toString = function (x) {
|
||||||
|
ok(arguments.length === 0, "arguments.length = " + arguments.length);
|
||||||
|
return "test";
|
||||||
|
};
|
||||||
|
ok((tmp = obj.toLocaleString()) === "test", "obj.toLocaleString() = " + tmp);
|
||||||
|
ok((tmp = obj.toLocaleString(1)) === "test", "obj.toLocaleString(1) = " + tmp);
|
||||||
|
|
||||||
ok("".length === 0, "\"\".length = " + "".length);
|
ok("".length === 0, "\"\".length = " + "".length);
|
||||||
ok(getVT("".length) == "VT_I4", "\"\".length = " + "".length);
|
ok(getVT("".length) == "VT_I4", "\"\".length = " + "".length);
|
||||||
ok("abc".length === 3, "\"abc\".length = " + "abc".length);
|
ok("abc".length === 3, "\"abc\".length = " + "abc".length);
|
||||||
|
@ -1345,4 +1353,203 @@ exception_test(function() {eval("while(")}, "SyntaxError", -2146827286);
|
||||||
exception_test(function() {eval("if(")}, "SyntaxError", -2146827286);
|
exception_test(function() {eval("if(")}, "SyntaxError", -2146827286);
|
||||||
exception_test(function() {eval("'unterminated")}, "SyntaxError", -2146827273);
|
exception_test(function() {eval("'unterminated")}, "SyntaxError", -2146827273);
|
||||||
|
|
||||||
|
function testObjectInherit(obj, ts, tls, vo) {
|
||||||
|
ok(obj.hasOwnProperty === Object.prototype.hasOwnProperty,
|
||||||
|
"obj.hasOwnProperty !== Object.prototype.hasOwnProprty");
|
||||||
|
ok(obj.isPrototypeOf === Object.prototype.isPrototypeOf,
|
||||||
|
"obj.isPrototypeOf !== Object.prototype.isPrototypeOf");
|
||||||
|
ok(obj.propertyIsEnumerable === Object.prototype.propertyIsEnumerable,
|
||||||
|
"obj.propertyIsEnumerable !== Object.prototype.propertyIsEnumerable");
|
||||||
|
|
||||||
|
if(ts)
|
||||||
|
ok(obj.toString === Object.prototype.toString,
|
||||||
|
"obj.toString !== Object.prototype.toString");
|
||||||
|
else
|
||||||
|
ok(obj.toString != Object.prototype.toString,
|
||||||
|
"obj.toString == Object.prototype.toString");
|
||||||
|
|
||||||
|
if(tls)
|
||||||
|
ok(obj.toLocaleString === Object.prototype.toLocaleString,
|
||||||
|
"obj.toLocaleString !== Object.prototype.toLocaleString");
|
||||||
|
else
|
||||||
|
ok(obj.toLocaleString != Object.prototype.toLocaleString,
|
||||||
|
"obj.toLocaleString == Object.prototype.toLocaleString");
|
||||||
|
|
||||||
|
if(vo)
|
||||||
|
ok(obj.valueOf === Object.prototype.valueOf,
|
||||||
|
"obj.valueOf !== Object.prototype.valueOf");
|
||||||
|
else
|
||||||
|
ok(obj.valueOf != Object.prototype.valueOf,
|
||||||
|
"obj.valueOf == Object.prototype.valueOf");
|
||||||
|
|
||||||
|
ok(obj._test === "test", "obj.test = " + obj._test);
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.prototype._test = "test";
|
||||||
|
testObjectInherit(new String("test"), false, true, false);
|
||||||
|
testObjectInherit(/test/g, false, true, true);
|
||||||
|
testObjectInherit(new Number(1), false, false, false);
|
||||||
|
testObjectInherit(new Date(), false, false, false);
|
||||||
|
testObjectInherit(new Boolean(true), false, true, false);
|
||||||
|
testObjectInherit(new Array(), false, false, true);
|
||||||
|
testObjectInherit(new Error(), false, true, true);
|
||||||
|
testObjectInherit(testObjectInherit, false, true, true);
|
||||||
|
testObjectInherit(Math, true, true, true);
|
||||||
|
|
||||||
|
function testFunctions(obj, arr) {
|
||||||
|
var l;
|
||||||
|
|
||||||
|
for(var i=0; i<arr.length; i++) {
|
||||||
|
l = obj[arr[i][0]].length;
|
||||||
|
ok(l === arr[i][1], arr[i][0] + ".length = " + l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
testFunctions(Boolean.prototype, [
|
||||||
|
["valueOf", 0],
|
||||||
|
["toString", 0]
|
||||||
|
]);
|
||||||
|
|
||||||
|
testFunctions(Number.prototype, [
|
||||||
|
["valueOf", 0],
|
||||||
|
["toString", 1],
|
||||||
|
["toExponential", 1],
|
||||||
|
["toLocaleString", 0],
|
||||||
|
["toPrecision", 1]
|
||||||
|
]);
|
||||||
|
|
||||||
|
testFunctions(String.prototype, [
|
||||||
|
["valueOf", 0],
|
||||||
|
["toString", 0],
|
||||||
|
["anchor", 1],
|
||||||
|
["big", 0],
|
||||||
|
["blink", 0],
|
||||||
|
["bold", 0],
|
||||||
|
["charAt", 1],
|
||||||
|
["charCodeAt", 1],
|
||||||
|
["concat", 1],
|
||||||
|
["fixed", 0],
|
||||||
|
["fontcolor", 1],
|
||||||
|
["fontsize", 1],
|
||||||
|
["indexOf", 2],
|
||||||
|
["italics", 0],
|
||||||
|
["lastIndexOf", 2],
|
||||||
|
["link", 1],
|
||||||
|
["localeCompare", 1],
|
||||||
|
["match", 1],
|
||||||
|
["replace", 1],
|
||||||
|
["search", 0],
|
||||||
|
["slice", 0],
|
||||||
|
["small", 0],
|
||||||
|
["split", 2],
|
||||||
|
["strike", 0],
|
||||||
|
["sub", 0],
|
||||||
|
["substr", 2],
|
||||||
|
["substring", 2],
|
||||||
|
["sup", 0],
|
||||||
|
["toLocaleLowerCase", 0],
|
||||||
|
["toLocaleUpperCase", 0],
|
||||||
|
["toLowerCase", 0],
|
||||||
|
["toUpperCase", 0]
|
||||||
|
]);
|
||||||
|
|
||||||
|
testFunctions(RegExp.prototype, [
|
||||||
|
["toString", 0],
|
||||||
|
["exec", 1],
|
||||||
|
["test", 1]
|
||||||
|
]);
|
||||||
|
|
||||||
|
testFunctions(Date.prototype, [
|
||||||
|
["getDate", 0],
|
||||||
|
["getDay", 0],
|
||||||
|
["getFullYear", 0],
|
||||||
|
["getHours", 0],
|
||||||
|
["getMilliseconds", 0],
|
||||||
|
["getMinutes", 0],
|
||||||
|
["getMonth", 0],
|
||||||
|
["getSeconds", 0],
|
||||||
|
["getTime", 0],
|
||||||
|
["getTimezoneOffset", 0],
|
||||||
|
["getUTCDate", 0],
|
||||||
|
["getUTCDay", 0],
|
||||||
|
["getUTCFullYear", 0],
|
||||||
|
["getUTCHours", 0],
|
||||||
|
["getUTCMilliseconds", 0],
|
||||||
|
["getUTCMinutes", 0],
|
||||||
|
["getUTCMonth", 0],
|
||||||
|
["getUTCSeconds", 0],
|
||||||
|
["setDate", 1],
|
||||||
|
["setFullYear", 3],
|
||||||
|
["setHours", 4],
|
||||||
|
["setMilliseconds", 1],
|
||||||
|
["setMinutes", 3],
|
||||||
|
["setMonth", 2],
|
||||||
|
["setSeconds", 2],
|
||||||
|
["setTime", 1],
|
||||||
|
["setUTCDate", 1],
|
||||||
|
["setUTCFullYear", 3],
|
||||||
|
["setUTCHours", 4],
|
||||||
|
["setUTCMilliseconds", 1],
|
||||||
|
["setUTCMinutes", 3],
|
||||||
|
["setUTCMonth", 2],
|
||||||
|
["setUTCSeconds", 2],
|
||||||
|
["toDateString", 0],
|
||||||
|
["toLocaleDateString", 0],
|
||||||
|
["toLocaleString", 0],
|
||||||
|
["toLocaleTimeString", 0],
|
||||||
|
["toString", 0],
|
||||||
|
["toTimeString", 0],
|
||||||
|
["toUTCString", 0],
|
||||||
|
["valueOf", 0]
|
||||||
|
]);
|
||||||
|
|
||||||
|
testFunctions(Array.prototype, [
|
||||||
|
["concat", 1],
|
||||||
|
["join", 1],
|
||||||
|
["push", 1],
|
||||||
|
["pop", 0],
|
||||||
|
["reverse", 0],
|
||||||
|
["shift", 0],
|
||||||
|
["slice", 2],
|
||||||
|
["sort", 1],
|
||||||
|
["splice", 2],
|
||||||
|
["toLocaleString", 0],
|
||||||
|
["toString", 0],
|
||||||
|
["unshift", 1]
|
||||||
|
]);
|
||||||
|
|
||||||
|
testFunctions(Error.prototype, [
|
||||||
|
["toString", 0]
|
||||||
|
]);
|
||||||
|
|
||||||
|
testFunctions(Math, [
|
||||||
|
["abs", 1],
|
||||||
|
["acos", 1],
|
||||||
|
["asin", 1],
|
||||||
|
["atan", 1],
|
||||||
|
["atan2", 2],
|
||||||
|
["ceil", 1],
|
||||||
|
["cos", 1],
|
||||||
|
["exp", 1],
|
||||||
|
["floor", 1],
|
||||||
|
["log", 1],
|
||||||
|
["max", 2],
|
||||||
|
["min", 2],
|
||||||
|
["pow", 2],
|
||||||
|
["random", 0],
|
||||||
|
["round", 1],
|
||||||
|
["sin", 1],
|
||||||
|
["sqrt", 1],
|
||||||
|
["tan", 1]
|
||||||
|
]);
|
||||||
|
|
||||||
|
testFunctions(Object.prototype, [
|
||||||
|
["hasOwnProperty", 1],
|
||||||
|
["isPrototypeOf", 1],
|
||||||
|
["propertyIsEnumerable", 1],
|
||||||
|
["toLocaleString", 0],
|
||||||
|
["toString", 0],
|
||||||
|
["valueOf", 0]
|
||||||
|
]);
|
||||||
|
|
||||||
reportSuccess();
|
reportSuccess();
|
||||||
|
|
|
@ -158,6 +158,39 @@ function replaceFunc2(m, subm, off, str) {
|
||||||
r = "[test1] [test2]".replace(/\[([^\[]+)\]/g, replaceFunc2);
|
r = "[test1] [test2]".replace(/\[([^\[]+)\]/g, replaceFunc2);
|
||||||
ok(r === "r0 r1", "r = '" + r + "' expected 'r0 r1'");
|
ok(r === "r0 r1", "r = '" + r + "' expected 'r0 r1'");
|
||||||
|
|
||||||
|
r = "$1,$2".replace(/(\$(\d))/g, "$$1-$1$2");
|
||||||
|
ok(r === "$1-$11,$1-$22", "r = '" + r + "' expected '$1-$11,$1-$22'");
|
||||||
|
|
||||||
|
r = "abc &1 123".replace(/(\&(\d))/g, "$&");
|
||||||
|
ok(r === "abc &1 123", "r = '" + r + "' expected 'abc &1 123'");
|
||||||
|
|
||||||
|
r = "abc &1 123".replace(/(\&(\d))/g, "$'");
|
||||||
|
ok(r === "abc 123 123", "r = '" + r + "' expected 'abc 123 123'");
|
||||||
|
|
||||||
|
r = "abc &1 123".replace(/(\&(\d))/g, "$`");
|
||||||
|
ok(r === "abc abc 123", "r = '" + r + "' expected 'abc abc 123'");
|
||||||
|
|
||||||
|
r = "abc &1 123".replace(/(\&(\d))/g, "$3");
|
||||||
|
ok(r === "abc $3 123", "r = '" + r + "' expected 'abc $3 123'");
|
||||||
|
|
||||||
|
r = "abc &1 123".replace(/(\&(\d))/g, "$");
|
||||||
|
ok(r === "abc $ 123", "r = '" + r + "' expected 'abc $ 123'");
|
||||||
|
|
||||||
|
r = "abc &1 123".replace(/(\&(\d))/g, "$a");
|
||||||
|
ok(r === "abc $a 123", "r = '" + r + "' expected 'abc $a 123'");
|
||||||
|
|
||||||
|
r = "abc &1 123".replace(/(\&(\d))/g, "$11");
|
||||||
|
ok(r === "abc &11 123", "r = '" + r + "' expected 'abc &11 123'");
|
||||||
|
|
||||||
|
r = "abc &1 123".replace(/(\&(\d))/g, "$0");
|
||||||
|
ok(r === "abc $0 123", "r = '" + r + "' expected 'abc $0 123'");
|
||||||
|
|
||||||
|
r = "1 2 3".replace("2", "$&");
|
||||||
|
ok(r === "1 $& 3", "r = '" + r + "' expected '1 $& 3'");
|
||||||
|
|
||||||
|
r = "1 2 3".replace("2", "$'");
|
||||||
|
ok(r === "1 $' 3", "r = '" + r + "' expected '1 $' 3'");
|
||||||
|
|
||||||
r = "1,,2,3".split(/,+/g);
|
r = "1,,2,3".split(/,+/g);
|
||||||
ok(r.length === 3, "r.length = " + r.length);
|
ok(r.length === 3, "r.length = " + r.length);
|
||||||
ok(r[0] === "1", "r[0] = " + r[0]);
|
ok(r[0] === "1", "r[0] = " + r[0]);
|
||||||
|
@ -175,4 +208,12 @@ ok(r.length === 2, "r.length = " + r.length);
|
||||||
ok(r[0] === "1", "r[0] = " + r[0]);
|
ok(r[0] === "1", "r[0] = " + r[0]);
|
||||||
ok(r[1] === "2", "r[1] = " + r[1]);
|
ok(r[1] === "2", "r[1] = " + r[1]);
|
||||||
|
|
||||||
|
var re;
|
||||||
|
|
||||||
|
re = /abc[^d]/g;
|
||||||
|
ok(re.source === "abc[^d]", "re.source = '" + re.source + "', expected 'abc[^d]'");
|
||||||
|
|
||||||
|
re = /a\bc[^d]/g;
|
||||||
|
ok(re.source === "a\\bc[^d]", "re.source = '" + re.source + "', expected 'a\\bc[^d]'");
|
||||||
|
|
||||||
reportSuccess();
|
reportSuccess();
|
||||||
|
|
|
@ -63,6 +63,7 @@ DEFINE_EXPECT(global_propput_d);
|
||||||
DEFINE_EXPECT(global_propput_i);
|
DEFINE_EXPECT(global_propput_i);
|
||||||
DEFINE_EXPECT(global_success_d);
|
DEFINE_EXPECT(global_success_d);
|
||||||
DEFINE_EXPECT(global_success_i);
|
DEFINE_EXPECT(global_success_i);
|
||||||
|
DEFINE_EXPECT(global_notexists_d);
|
||||||
DEFINE_EXPECT(testobj_delete);
|
DEFINE_EXPECT(testobj_delete);
|
||||||
DEFINE_EXPECT(GetItemInfo_testVal);
|
DEFINE_EXPECT(GetItemInfo_testVal);
|
||||||
|
|
||||||
|
@ -83,17 +84,6 @@ static const CHAR test_valA[] = "testVal";
|
||||||
static BOOL strict_dispid_check;
|
static BOOL strict_dispid_check;
|
||||||
static const char *test_name = "(null)";
|
static const char *test_name = "(null)";
|
||||||
|
|
||||||
static const char *debugstr_w(LPCWSTR str)
|
|
||||||
{
|
|
||||||
static char buf[1024];
|
|
||||||
|
|
||||||
if(!str)
|
|
||||||
return "(null)";
|
|
||||||
|
|
||||||
WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL);
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
static BSTR a2bstr(const char *str)
|
static BSTR a2bstr(const char *str)
|
||||||
{
|
{
|
||||||
BSTR ret;
|
BSTR ret;
|
||||||
|
@ -168,7 +158,7 @@ static HRESULT WINAPI DispatchEx_Invoke(IDispatchEx *iface, DISPID dispIdMember,
|
||||||
|
|
||||||
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
|
static HRESULT WINAPI DispatchEx_DeleteMemberByName(IDispatchEx *iface, BSTR bstrName, DWORD grfdex)
|
||||||
{
|
{
|
||||||
ok(0, "unexpected call %s %x\n", debugstr_w(bstrName), grfdex);
|
ok(0, "unexpected call %s %x\n", wine_dbgstr_w(bstrName), grfdex);
|
||||||
return E_NOTIMPL;
|
return E_NOTIMPL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +209,7 @@ static HRESULT WINAPI testObj_DeleteMemberByName(IDispatchEx *iface, BSTR bstrNa
|
||||||
{
|
{
|
||||||
CHECK_EXPECT(testobj_delete);
|
CHECK_EXPECT(testobj_delete);
|
||||||
|
|
||||||
ok(!strcmp_wa(bstrName, "deleteTest"), "unexpected name %s\n", debugstr_w(bstrName));
|
ok(!strcmp_wa(bstrName, "deleteTest"), "unexpected name %s\n", wine_dbgstr_w(bstrName));
|
||||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
@ -288,9 +278,14 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD
|
||||||
*pid = DISPID_GLOBAL_NULL_BSTR;
|
*pid = DISPID_GLOBAL_NULL_BSTR;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
if(!strcmp_wa(bstrName, "notExists")) {
|
||||||
|
CHECK_EXPECT(global_notexists_d);
|
||||||
|
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||||
|
return DISP_E_UNKNOWNNAME;
|
||||||
|
}
|
||||||
|
|
||||||
if(strict_dispid_check)
|
if(strict_dispid_check)
|
||||||
ok(0, "unexpected call %s\n", debugstr_w(bstrName));
|
ok(0, "unexpected call %s\n", wine_dbgstr_w(bstrName));
|
||||||
return DISP_E_UNKNOWNNAME;
|
return DISP_E_UNKNOWNNAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,7 +308,7 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid,
|
||||||
|
|
||||||
ok(V_VT(pdp->rgvarg) == VT_BSTR, "V_VT(psp->rgvargs) = %d\n", V_VT(pdp->rgvarg));
|
ok(V_VT(pdp->rgvarg) == VT_BSTR, "V_VT(psp->rgvargs) = %d\n", V_VT(pdp->rgvarg));
|
||||||
ok(V_VT(pdp->rgvarg+1) == VT_BOOL, "V_VT(psp->rgvargs+1) = %d\n", V_VT(pdp->rgvarg));
|
ok(V_VT(pdp->rgvarg+1) == VT_BOOL, "V_VT(psp->rgvargs+1) = %d\n", V_VT(pdp->rgvarg));
|
||||||
ok(V_BOOL(pdp->rgvarg+1), "%s: %s\n", test_name, debugstr_w(V_BSTR(pdp->rgvarg)));
|
ok(V_BOOL(pdp->rgvarg+1), "%s: %s\n", test_name, wine_dbgstr_w(V_BSTR(pdp->rgvarg)));
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
||||||
|
@ -329,7 +324,7 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid,
|
||||||
|
|
||||||
ok(V_VT(pdp->rgvarg) == VT_BSTR, "V_VT(psp->rgvargs) = %d\n", V_VT(pdp->rgvarg));
|
ok(V_VT(pdp->rgvarg) == VT_BSTR, "V_VT(psp->rgvargs) = %d\n", V_VT(pdp->rgvarg));
|
||||||
if(V_VT(pdp->rgvarg) == VT_BSTR)
|
if(V_VT(pdp->rgvarg) == VT_BSTR)
|
||||||
trace("%s: %s\n", test_name, debugstr_w(V_BSTR(pdp->rgvarg)));
|
trace("%s: %s\n", test_name, wine_dbgstr_w(V_BSTR(pdp->rgvarg)));
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|
||||||
|
@ -507,7 +502,7 @@ static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface, LPC
|
||||||
if(!strcmp_wa(pstrName, test_valA))
|
if(!strcmp_wa(pstrName, test_valA))
|
||||||
CHECK_EXPECT(GetItemInfo_testVal);
|
CHECK_EXPECT(GetItemInfo_testVal);
|
||||||
else if(strcmp_wa(pstrName, testA))
|
else if(strcmp_wa(pstrName, testA))
|
||||||
ok(0, "unexpected pstrName %s\n", debugstr_w(pstrName));
|
ok(0, "unexpected pstrName %s\n", wine_dbgstr_w(pstrName));
|
||||||
|
|
||||||
*ppiunkItem = (IUnknown*)&Global;
|
*ppiunkItem = (IUnknown*)&Global;
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -835,6 +830,18 @@ static void run_tests(void)
|
||||||
|
|
||||||
parse_script_a("ok(typeof(test) === 'object', \"typeof(test) != 'object'\");");
|
parse_script_a("ok(typeof(test) === 'object', \"typeof(test) != 'object'\");");
|
||||||
|
|
||||||
|
parse_script_a("function reportSuccess() {}; reportSuccess();");
|
||||||
|
|
||||||
|
SET_EXPECT(global_propget_d);
|
||||||
|
parse_script_a("var testPropGet");
|
||||||
|
CHECK_CALLED(global_propget_d);
|
||||||
|
|
||||||
|
SET_EXPECT(global_notexists_d);
|
||||||
|
parse_script_a("var notExists; notExists = 1;");
|
||||||
|
CHECK_CALLED(global_notexists_d);
|
||||||
|
|
||||||
|
parse_script_a("function f() { var testPropGet; }");
|
||||||
|
|
||||||
run_from_res("lang.js");
|
run_from_res("lang.js");
|
||||||
run_from_res("api.js");
|
run_from_res("api.js");
|
||||||
run_from_res("regexp.js");
|
run_from_res("regexp.js");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue