mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 05:15:41 +00:00
[JSCRIPT_WINETEST]
sync jscript_winetest to wine 1.1.39 svn path=/trunk/; revision=45767
This commit is contained in:
parent
86405be2d6
commit
c6658bfc85
8 changed files with 1782 additions and 68 deletions
1096
rostests/winetests/jscript/activex.c
Normal file
1096
rostests/winetests/jscript/activex.c
Normal file
File diff suppressed because it is too large
Load diff
|
@ -58,6 +58,47 @@ ok(tmp === "undefined", "encodeURI() = " + tmp);
|
|||
tmp = encodeURI("abc", "test");
|
||||
ok(tmp === "abc", "encodeURI('abc') = " + tmp);
|
||||
|
||||
tmp = encodeURIComponent("abc");
|
||||
ok(tmp === "abc", "encodeURIComponent('abc') = " + tmp);
|
||||
dec = decodeURIComponent(tmp);
|
||||
ok(dec === "abc", "decodeURIComponent('" + tmp + "') = " + dec);
|
||||
tmp = encodeURIComponent("{abc}");
|
||||
ok(tmp === "%7Babc%7D", "encodeURIComponent('{abc}') = " + tmp);
|
||||
dec = decodeURIComponent(tmp);
|
||||
ok(dec === "{abc}", "decodeURIComponent('" + tmp + "') = " + dec);
|
||||
tmp = encodeURIComponent("");
|
||||
ok(tmp === "", "encodeURIComponent('') = " + tmp);
|
||||
dec = decodeURIComponent(tmp);
|
||||
ok(dec === "", "decodeURIComponent('" + tmp + "') = " + dec);
|
||||
tmp = encodeURIComponent("\01\02\03\04");
|
||||
ok(tmp === "%01%02%03%04", "encodeURIComponent('\\01\\02\\03\\04') = " + tmp);
|
||||
dec = decodeURIComponent(tmp);
|
||||
ok(dec === "\01\02\03\04", "decodeURIComponent('" + tmp + "') = " + dec);
|
||||
tmp = encodeURIComponent("{#@}");
|
||||
ok(tmp === "%7B%23%40%7D", "encodeURIComponent('{#@}') = " + tmp);
|
||||
dec = decodeURIComponent(tmp);
|
||||
ok(dec === "{#@}", "decodeURIComponent('" + tmp + "') = " + dec);
|
||||
tmp = encodeURIComponent("\xa1 ");
|
||||
ok(tmp === "%C2%A1%20", "encodeURIComponent(\\xa1 ) = " + tmp);
|
||||
dec = decodeURIComponent(tmp);
|
||||
ok(dec === "\xa1 ", "decodeURIComponent('" + tmp + "') = " + dec);
|
||||
tmp = encodeURIComponent("\xffff");
|
||||
ok(tmp.length === 8, "encodeURIComponent('\\xffff').length = " + tmp.length);
|
||||
dec = decodeURIComponent(tmp);
|
||||
ok(dec === "\xffff", "decodeURIComponent('" + tmp + "') = " + dec);
|
||||
tmp = encodeURIComponent("abcABC123;/?:@&=+$,-_.!~*'()");
|
||||
ok(tmp === "abcABC123%3B%2F%3F%3A%40%26%3D%2B%24%2C-_.!~*'()", "encodeURIComponent('abcABC123;/?:@&=+$,-_.!~*'()') = " + tmp);
|
||||
dec = decodeURIComponent(tmp);
|
||||
ok(dec === "abcABC123;/?:@&=+$,-_.!~*'()", "decodeURIComponent('" + tmp + "') = " + dec);
|
||||
tmp = encodeURIComponent();
|
||||
ok(tmp === "undefined", "encodeURIComponent() = " + tmp);
|
||||
tmp = encodeURIComponent("abc", "test");
|
||||
ok(tmp === "abc", "encodeURIComponent('abc') = " + tmp);
|
||||
dec = decodeURIComponent();
|
||||
ok(dec === "undefined", "decodeURIComponent() = " + dec);
|
||||
dec = decodeURIComponent("abc", "test");
|
||||
ok(dec === "abc", "decodeURIComponent('abc') = " + dec);
|
||||
|
||||
tmp = escape("abc");
|
||||
ok(tmp === "abc", "escape('abc') = " + tmp);
|
||||
tmp = escape("");
|
||||
|
@ -190,6 +231,8 @@ tmp = "abc".charAt(-1);
|
|||
ok(tmp === "", "'abc',charAt(-1) = " + tmp);
|
||||
tmp = "abc".charAt(0,2);
|
||||
ok(tmp === "a", "'abc',charAt(0.2) = " + tmp);
|
||||
tmp = "abc".charAt(NaN);
|
||||
ok(tmp === "a", "'abc',charAt(NaN) = " + tmp);
|
||||
|
||||
tmp = "abc".charCodeAt(0);
|
||||
ok(tmp === 0x61, "'abc'.charCodeAt(0) = " + tmp);
|
||||
|
@ -575,6 +618,12 @@ ok(arr.push(true, 'b', false) === 10, "arr.push(true, 'b', false) !== 10");
|
|||
ok(arr[8] === "b", "arr[8] != 'b'");
|
||||
ok(arr.length === 10, "arr.length != 10");
|
||||
|
||||
arr.pop = Array.prototype.pop;
|
||||
ok(arr.pop() === false, "arr.pop() !== false");
|
||||
ok(arr[8] === "b", "arr[8] !== 'b'");
|
||||
ok(arr.pop() === 'b', "arr.pop() !== 'b'");
|
||||
ok(arr[8] === undefined, "arr[8] !== undefined");
|
||||
|
||||
arr = [3,4,5];
|
||||
tmp = arr.pop();
|
||||
ok(arr.length === 2, "arr.length = " + arr.length);
|
||||
|
@ -590,6 +639,11 @@ for(tmp in arr)
|
|||
tmp = arr.pop();
|
||||
ok(arr.length === 0, "arr.length = " + arr.length);
|
||||
ok(tmp === undefined, "tmp = " + tmp);
|
||||
arr = new Object();
|
||||
arr.pop = Array.prototype.pop;
|
||||
tmp = arr.pop();
|
||||
ok(arr.length === 0, "arr.length = " + arr.length);
|
||||
ok(tmp === undefined, "tmp = " + tmp);
|
||||
arr = [,,,,,];
|
||||
tmp = arr.pop();
|
||||
ok(arr.length === 5, "arr.length = " + arr.length);
|
||||
|
@ -611,6 +665,16 @@ ok(tmp === "1,2,,false,,,a", "arr.toString() = " + tmp);
|
|||
tmp = arr.toString("test");
|
||||
ok(tmp === "1,2,,false,,,a", "arr.toString() = " + tmp);
|
||||
|
||||
arr = new Object();
|
||||
arr.length = 3;
|
||||
arr[0] = "aa";
|
||||
arr[2] = 2;
|
||||
arr[7] = 3;
|
||||
arr.join = Array.prototype.join;
|
||||
tmp = arr.join(",");
|
||||
ok(arr.length === 3, "arr.length = " + arr.length);
|
||||
ok(tmp === "aa,,2", "tmp = " + tmp);
|
||||
|
||||
arr = [5,true,2,-1,3,false,"2.5"];
|
||||
tmp = arr.sort(function(x,y) { return y-x; });
|
||||
ok(tmp === arr, "tmp !== arr");
|
||||
|
@ -631,6 +695,15 @@ ok(arr.sort() === arr, "arr.sort() !== arr");
|
|||
for(var i=0; i < arr.length; i++)
|
||||
ok(arr[i] === tmp[i], "arr[" + i + "] = " + arr[i] + " expected " + tmp[i]);
|
||||
|
||||
arr = new Object();
|
||||
arr.length = 3;
|
||||
arr[0] = 1;
|
||||
arr[2] = "aa";
|
||||
arr.sort = Array.prototype.sort;
|
||||
tmp = arr.sort();
|
||||
ok(arr === tmp, "tmp !== arr");
|
||||
ok(arr[0]===1 && arr[1]==="aa" && arr[2]===undefined, "arr is sorted incorectly");
|
||||
|
||||
arr = ["1", "2", "3"];
|
||||
arr.length = 1;
|
||||
ok(arr.length === 1, "arr.length = " + arr.length);
|
||||
|
@ -644,9 +717,34 @@ ok(arr.toString() === "a,b,c", "arr.toString() = " + arr.toString());
|
|||
ok(arr.valueOf === Object.prototype.valueOf, "arr.valueOf !== Object.prototype.valueOf");
|
||||
ok(arr === arr.valueOf(), "arr !== arr.valueOf");
|
||||
|
||||
arr = [1,2,3];
|
||||
tmp = arr.reverse();
|
||||
ok(tmp === arr, "tmp !== arr");
|
||||
ok(arr.length === 3, "arr.length = " + arr.length);
|
||||
ok(arr.toString() === "3,2,1", "arr.toString() = " + arr.toString());
|
||||
|
||||
arr = [];
|
||||
arr[3] = 5;
|
||||
arr[5] = 1;
|
||||
tmp = arr.reverse();
|
||||
ok(tmp === arr, "tmp !== arr");
|
||||
ok(arr.length === 6, "arr.length = " + arr.length);
|
||||
ok(arr.toString() === "1,,5,,,", "arr.toString() = " + arr.toString());
|
||||
|
||||
arr = new Object();
|
||||
arr.length = 3;
|
||||
arr[0] = "aa";
|
||||
arr[2] = 2;
|
||||
arr[7] = 3;
|
||||
arr.reverse = Array.prototype.reverse;
|
||||
tmp = arr.reverse();
|
||||
ok(tmp === arr, "tmp !== arr");
|
||||
ok(arr.length === 3, "arr.length = " + arr.length);
|
||||
ok(arr[0] === 2 && arr[1] === undefined && arr[2] === "aa", "unexpected array");
|
||||
|
||||
arr = [1,2,3];
|
||||
tmp = arr.unshift(0);
|
||||
ok(tmp === undefined, "[1,2,3].unshift(0) returned " +tmp);
|
||||
ok(tmp === (invokeVersion < 2 ? undefined : 4), "[1,2,3].unshift(0) returned " +tmp);
|
||||
ok(arr.length === 4, "arr.length = " + arr.length);
|
||||
ok(arr.toString() === "0,1,2,3", "arr.toString() = " + arr.toString());
|
||||
|
||||
|
@ -654,13 +752,13 @@ arr = new Array(3);
|
|||
arr[0] = 1;
|
||||
arr[2] = 3;
|
||||
tmp = arr.unshift(-1,0);
|
||||
ok(tmp === undefined, "unshift returned " +tmp);
|
||||
ok(tmp === (invokeVersion < 2 ? undefined : 5), "unshift returned " +tmp);
|
||||
ok(arr.length === 5, "arr.length = " + arr.length);
|
||||
ok(arr.toString() === "-1,0,1,,3", "arr.toString() = " + arr.toString());
|
||||
|
||||
arr = [1,2,3];
|
||||
tmp = arr.unshift();
|
||||
ok(tmp === undefined, "unshift returned " +tmp);
|
||||
ok(tmp === (invokeVersion < 2 ? undefined : 3), "unshift returned " +tmp);
|
||||
ok(arr.length === 3, "arr.length = " + arr.length);
|
||||
ok(arr.toString() === "1,2,3", "arr.toString() = " + arr.toString());
|
||||
|
||||
|
@ -669,7 +767,7 @@ arr.length = 2;
|
|||
arr[0] = 1;
|
||||
arr[1] = 2;
|
||||
tmp = Array.prototype.unshift.call(arr, 0);
|
||||
ok(tmp === undefined, "unshift returned " +tmp);
|
||||
ok(tmp === (invokeVersion < 2 ? undefined : 3), "unshift returned " +tmp);
|
||||
ok(arr.length === 3, "arr.length = " + arr.length);
|
||||
ok(arr[0] === 0 && arr[1] === 1 && arr[2] === 2, "unexpected array");
|
||||
|
||||
|
@ -1374,14 +1472,65 @@ callTest2.apply(tmp);
|
|||
(function () { callTest2.apply(tmp, arguments); })();
|
||||
|
||||
function callTest3() {
|
||||
testThis(this);
|
||||
ok(arguments.length === 0, "arguments.length = " + arguments.length + " expected 0");
|
||||
}
|
||||
|
||||
callTest3.call();
|
||||
callTest3.call(undefined);
|
||||
callTest3.call(null);
|
||||
callTest3.apply();
|
||||
callTest3.apply(undefined);
|
||||
callTest3.apply(null);
|
||||
|
||||
tmp = Number.prototype.toString.call(3);
|
||||
ok(tmp === "3", "Number.prototype.toString.call(3) = " + tmp);
|
||||
|
||||
var func = new Function("return 3;");
|
||||
|
||||
tmp = func();
|
||||
ok(tmp === 3, "func() = " + tmp);
|
||||
ok(func.call() === 3, "func.call() = " + tmp);
|
||||
ok(func.length === 0, "func.length = " + func.length);
|
||||
tmp = func.toString();
|
||||
ok(tmp === "function anonymous() {\nreturn 3;\n}", "func.toString() = " + tmp);
|
||||
|
||||
func = new Function("x", "return x+2;");
|
||||
tmp = func(1);
|
||||
ok(tmp === 3, "func(1) = " + tmp);
|
||||
tmp = func.toString();
|
||||
ok(tmp === "function anonymous(x) {\nreturn x+2;\n}", "func.toString() = " + tmp);
|
||||
|
||||
tmp = (new Function("x ", "return x+2;")).toString();
|
||||
ok(tmp === "function anonymous(x ) {\nreturn x+2;\n}", "func.toString() = " + tmp);
|
||||
|
||||
func = new Function("x", "y", "return x+y");
|
||||
tmp = func(1,3);
|
||||
ok(tmp === 4, "func(1,3) = " + tmp);
|
||||
tmp = func.toString();
|
||||
ok(tmp === "function anonymous(x, y) {\nreturn x+y\n}", "func.toString() = " + tmp);
|
||||
|
||||
func = new Function(" x, \ty", "\tz", "return x+y+z;");
|
||||
tmp = func(1,3,2);
|
||||
ok(tmp === 6, "func(1,3,2) = " + tmp);
|
||||
ok(func.length === 3, "func.length = " + func.length);
|
||||
tmp = func.toString();
|
||||
ok(tmp === "function anonymous( x, \ty, \tz) {\nreturn x+y+z;\n}", "func.toString() = " + tmp);
|
||||
|
||||
func = new Function();
|
||||
tmp = func();
|
||||
ok(tmp === undefined, "func() = " + tmp);
|
||||
tmp = func.toString();
|
||||
ok(tmp == "function anonymous() {\n\n}", "func.toString() = " + tmp);
|
||||
|
||||
func = (function() {
|
||||
var tmp = 3;
|
||||
return new Function("return tmp;");
|
||||
})();
|
||||
tmp = 2;
|
||||
tmp = func();
|
||||
ok(tmp === 2, "func() = " + tmp);
|
||||
|
||||
var date = new Date();
|
||||
|
||||
date = new Date(100);
|
||||
|
@ -1566,7 +1715,7 @@ ok(Error.prototype.name === "Error", "Error.prototype.name = " + Error.prototype
|
|||
ok(err.name === "Error", "err.name = " + err.name);
|
||||
EvalError.prototype.message = "test";
|
||||
ok(err.toString !== Object.prototype.toString, "err.toString === Object.prototype.toString");
|
||||
ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
|
||||
ok(err.toString() === (invokeVersion < 2 ? "[object Error]" : "Error"), "err.toString() = " + err.toString());
|
||||
err = new EvalError();
|
||||
ok(EvalError.prototype.name === "EvalError", "EvalError.prototype.name = " + EvalError.prototype.name);
|
||||
ok(err.name === "EvalError", "err.name = " + err.name);
|
||||
|
@ -1574,31 +1723,32 @@ ok(err.toString === Error.prototype.toString, "err.toString !== Error.prototype.
|
|||
ok(err.message === "", "err.message != ''");
|
||||
err.message = date;
|
||||
ok(err.message === date, "err.message != date");
|
||||
ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
|
||||
ok(err.toString() === (invokeVersion < 2 ? "[object Error]" : "EvalError: "+err.message),
|
||||
"err.toString() = " + err.toString());
|
||||
ok(err.toString !== Object.prototype.toString, "err.toString === Object.prototype.toString");
|
||||
err = new RangeError();
|
||||
ok(RangeError.prototype.name === "RangeError", "RangeError.prototype.name = " + RangeError.prototype.name);
|
||||
ok(err.name === "RangeError", "err.name = " + err.name);
|
||||
ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
|
||||
ok(err.toString() === (invokeVersion < 2 ? "[object Error]" : "RangeError"), "err.toString() = " + err.toString());
|
||||
err = new ReferenceError();
|
||||
ok(ReferenceError.prototype.name === "ReferenceError", "ReferenceError.prototype.name = " + ReferenceError.prototype.name);
|
||||
ok(err.name === "ReferenceError", "err.name = " + err.name);
|
||||
ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
|
||||
ok(err.toString() === (invokeVersion < 2 ? "[object Error]" : "ReferenceError"), "err.toString() = " + err.toString());
|
||||
err = new SyntaxError();
|
||||
ok(SyntaxError.prototype.name === "SyntaxError", "SyntaxError.prototype.name = " + SyntaxError.prototype.name);
|
||||
ok(err.name === "SyntaxError", "err.name = " + err.name);
|
||||
ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
|
||||
ok(err.toString() === (invokeVersion < 2 ? "[object Error]" : "SyntaxError"), "err.toString() = " + err.toString());
|
||||
err = new TypeError();
|
||||
ok(TypeError.prototype.name === "TypeError", "TypeError.prototype.name = " + TypeError.prototype.name);
|
||||
ok(err.name === "TypeError", "err.name = " + err.name);
|
||||
ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
|
||||
ok(err.toString() === (invokeVersion < 2 ? "[object Error]" : "TypeError"), "err.toString() = " + err.toString());
|
||||
err = new URIError();
|
||||
ok(URIError.prototype.name === "URIError", "URIError.prototype.name = " + URIError.prototype.name);
|
||||
ok(err.name === "URIError", "err.name = " + err.name);
|
||||
ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
|
||||
ok(err.toString() === (invokeVersion < 2 ? "[object Error]" : "URIError"), "err.toString() = " + err.toString());
|
||||
err = new Error("message");
|
||||
ok(err.message === "message", "err.message !== 'message'");
|
||||
ok(err.toString() === "[object Error]", "err.toString() = " + err.toString());
|
||||
ok(err.toString() === (invokeVersion < 2 ? "[object Error]" : "Error: message"), "err.toString() = " + err.toString());
|
||||
err = new Error(123);
|
||||
ok(err.number === 123, "err.number = " + err.number);
|
||||
err = new Error(0, "message");
|
||||
|
@ -1606,6 +1756,35 @@ ok(err.number === 0, "err.number = " + err.number);
|
|||
ok(err.message === "message", "err.message = " + err.message);
|
||||
ok(err.description === "message", "err.description = " + err.description);
|
||||
|
||||
tmp = new Object();
|
||||
tmp.toString = function() { return "test"; };
|
||||
|
||||
tmp = Error.prototype.toString.call(tmp);
|
||||
ok(tmp === "[object Error]", "Error.prototype.toString.call(tmp) = " + tmp);
|
||||
|
||||
err = new Error();
|
||||
err.name = null;
|
||||
ok(err.name === null, "err.name = " + err.name + " expected null");
|
||||
if(invokeVersion >= 2)
|
||||
ok(err.toString() === "null", "err.toString() = " + err.toString());
|
||||
|
||||
err = new Error();
|
||||
err.message = false;
|
||||
ok(err.message === false, "err.message = " + err.message + " expected false");
|
||||
if(invokeVersion >= 2)
|
||||
ok(err.toString() === "Error: false", "err.toString() = " + err.toString());
|
||||
|
||||
err = new Error();
|
||||
err.message = new Object();
|
||||
err.message.toString = function() { return ""; };
|
||||
if(invokeVersion >= 2)
|
||||
ok(err.toString() === "Error", "err.toString() = " + err.toString());
|
||||
|
||||
err = new Error();
|
||||
err.message = undefined;
|
||||
if(invokeVersion >= 2)
|
||||
ok(err.toString() === "Error", "err.toString() = " + err.toString());
|
||||
|
||||
function exception_test(func, type, number) {
|
||||
ret = "";
|
||||
num = "";
|
||||
|
@ -1648,6 +1827,7 @@ exception_test(function() {eval("if(")}, "SyntaxError", -2146827286);
|
|||
exception_test(function() {eval("'unterminated")}, "SyntaxError", -2146827273);
|
||||
exception_test(function() {eval("nonexistingfunc()")}, "TypeError", -2146823281);
|
||||
exception_test(function() {RegExp(/a/, "g");}, "RegExpError", -2146823271);
|
||||
exception_test(function() {encodeURI('\udcaa');}, "URIError", -2146823264);
|
||||
|
||||
function testThisExcept(func, number) {
|
||||
exception_test(function() {func.call(new Object())}, "TypeError", number);
|
||||
|
@ -1729,6 +1909,10 @@ testArrayHostThis("shift");
|
|||
testArrayHostThis("slice");
|
||||
testArrayHostThis("splice");
|
||||
testArrayHostThis("unshift");
|
||||
testArrayHostThis("reverse");
|
||||
testArrayHostThis("join");
|
||||
testArrayHostThis("pop");
|
||||
testArrayHostThis("sort");
|
||||
|
||||
function testObjectInherit(obj, constr, ts, tls, vo) {
|
||||
ok(obj instanceof Object, "obj is not instance of Object");
|
||||
|
@ -1941,4 +2125,43 @@ testFunctions(Function.prototype, [
|
|||
["toString", 0]
|
||||
]);
|
||||
|
||||
ok(ActiveXObject.length == 1, "ActiveXObject.length = " + ActiveXObject.length);
|
||||
ok(Array.length == 1, "Array.length = " + Array.length);
|
||||
ok(Boolean.length == 1, "Boolean.length = " + Boolean.length);
|
||||
ok(CollectGarbage.length == 0, "CollectGarbage.length = " + CollectGarbage.length);
|
||||
//ok(Date.length == 7, "Date.length = " + Date.length);
|
||||
ok(Enumerator.length == 7, "Enumerator.length = " + Enumerator.length);
|
||||
ok(Error.length == 1, "Error.length = " + Error.length);
|
||||
ok(EvalError.length == 1, "EvalError.length = " + EvalError.length);
|
||||
ok(Function.length == 1, "Function.length = " + Function.length);
|
||||
ok(GetObject.length == 2, "GetObject.length = " + GetObject.length);
|
||||
ok(Number.length == 1, "Number.length = " + Number.length);
|
||||
ok(Object.length == 0, "Object.length = " + Object.length);
|
||||
ok(RangeError.length == 1, "RangeError.length = " + RangeError.length);
|
||||
ok(ReferenceError.length == 1, "ReferenceError.length = " + ReferenceError.length);
|
||||
ok(RegExp.length == 2, "RegExp.length = " + RegExp.length);
|
||||
ok(ScriptEngine.length == 0, "ScriptEngine.length = " + ScriptEngine.length);
|
||||
ok(ScriptEngineBuildVersion.length == 0,
|
||||
"ScriptEngineBuildVersion.length = " + ScriptEngineBuildVersion.length);
|
||||
ok(ScriptEngineMajorVersion.length == 0,
|
||||
"ScriptEngineMajorVersion.length = " + ScriptEngineMajorVersion.length);
|
||||
ok(ScriptEngineMinorVersion.length == 0,
|
||||
"ScriptEngineMinorVersion.length = " + ScriptEngineMinorVersion.length);
|
||||
//ok(String.length == 1, "String.length = " + String.length);
|
||||
ok(SyntaxError.length == 1, "SyntaxError.length = " + SyntaxError.length);
|
||||
ok(TypeError.length == 1, "TypeError.length = " + TypeError.length);
|
||||
ok(URIError.length == 1, "URIError.length = " + URIError.length);
|
||||
ok(VBArray.length == 1, "VBArray.length = " + VBArray.length);
|
||||
ok(decodeURI.length == 1, "decodeURI.length = " + decodeURI.length);
|
||||
ok(decodeURIComponent.length == 1, "decodeURIComponent.length = " + decodeURIComponent.length);
|
||||
ok(encodeURI.length == 1, "encodeURI.length = " + encodeURI.length);
|
||||
ok(encodeURIComponent.length == 1, "encodeURIComponent.length = " + encodeURIComponent.length);
|
||||
ok(escape.length == 1, "escape.length = " + escape.length);
|
||||
ok(eval.length == 1, "eval.length = " + eval.length);
|
||||
ok(isFinite.length == 1, "isFinite.length = " + isFinite.length);
|
||||
ok(isNaN.length == 1, "isNaN.length = " + isNaN.length);
|
||||
ok(parseFloat.length == 1, "parseFloat.length = " + parseFloat.length);
|
||||
ok(parseInt.length == 2, "parseInt.length = " + parseInt.length);
|
||||
ok(unescape.length == 1, "unescape.length = " + unescape.length);
|
||||
|
||||
reportSuccess();
|
||||
|
|
|
@ -203,37 +203,70 @@ static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl = {
|
|||
|
||||
static IActiveScriptSite ActiveScriptSite = { &ActiveScriptSiteVtbl };
|
||||
|
||||
static void test_script_dispatch(IActiveScript *script, BOOL initialized)
|
||||
static void test_script_dispatch(IDispatchEx *dispex)
|
||||
{
|
||||
IDispatchEx *dispex;
|
||||
IDispatch *disp;
|
||||
DISPPARAMS dp = {NULL,NULL,0,0};
|
||||
EXCEPINFO ei;
|
||||
BSTR str;
|
||||
DISPID id;
|
||||
VARIANT v;
|
||||
HRESULT hres;
|
||||
|
||||
disp = (void*)0xdeadbeef;
|
||||
hres = IActiveScript_GetScriptDispatch(script, NULL, &disp);
|
||||
if(!initialized) {
|
||||
ok(hres == E_UNEXPECTED, "hres = %08x, expected E_UNEXPECTED\n", hres);
|
||||
ok(!disp, "disp != NULL\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ok(hres == S_OK, "GetScriptDispatch failed: %08x\n", hres);
|
||||
if(FAILED(hres))
|
||||
return;
|
||||
|
||||
ok(disp != NULL, "disp == NULL\n");
|
||||
hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
|
||||
IDispatch_Release(disp);
|
||||
ok(hres == S_OK, "Could not get IDispatchEx interface: %08x\n", hres);
|
||||
|
||||
str = a2bstr("ActiveXObject");
|
||||
hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &id);
|
||||
SysFreeString(str);
|
||||
ok(hres == S_OK, "GetDispID failed: %08x\n", hres);
|
||||
|
||||
IDispatchEx_Release(dispex);
|
||||
str = a2bstr("Math");
|
||||
hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &id);
|
||||
SysFreeString(str);
|
||||
ok(hres == S_OK, "GetDispID failed: %08x\n", hres);
|
||||
|
||||
memset(&ei, 0, sizeof(ei));
|
||||
hres = IDispatchEx_InvokeEx(dispex, id, 0, DISPATCH_PROPERTYGET, &dp, &v, &ei, NULL);
|
||||
ok(hres == S_OK, "InvokeEx failed: %08x\n", hres);
|
||||
ok(V_VT(&v) == VT_DISPATCH, "V_VT(v) = %d\n", V_VT(&v));
|
||||
ok(V_DISPATCH(&v) != NULL, "V_DISPATCH(v) = NULL\n");
|
||||
VariantClear(&v);
|
||||
|
||||
str = a2bstr("String");
|
||||
hres = IDispatchEx_GetDispID(dispex, str, fdexNameCaseSensitive, &id);
|
||||
SysFreeString(str);
|
||||
ok(hres == S_OK, "GetDispID failed: %08x\n", hres);
|
||||
|
||||
memset(&ei, 0, sizeof(ei));
|
||||
hres = IDispatchEx_InvokeEx(dispex, id, 0, DISPATCH_PROPERTYGET, &dp, &v, &ei, NULL);
|
||||
ok(hres == S_OK, "InvokeEx failed: %08x\n", hres);
|
||||
ok(V_VT(&v) == VT_DISPATCH, "V_VT(v) = %d\n", V_VT(&v));
|
||||
ok(V_DISPATCH(&v) != NULL, "V_DISPATCH(v) = NULL\n");
|
||||
VariantClear(&v);
|
||||
}
|
||||
|
||||
static IDispatchEx *get_script_dispatch(IActiveScript *script)
|
||||
{
|
||||
IDispatchEx *dispex;
|
||||
IDispatch *disp;
|
||||
HRESULT hres;
|
||||
|
||||
disp = (void*)0xdeadbeef;
|
||||
hres = IActiveScript_GetScriptDispatch(script, NULL, &disp);
|
||||
ok(hres == S_OK, "GetScriptDispatch failed: %08x\n", hres);
|
||||
|
||||
IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex);
|
||||
IDispatch_Release(disp);
|
||||
ok(hres == S_OK, "Could not get IDispatch iface: %08x\n", hres);
|
||||
return dispex;
|
||||
}
|
||||
|
||||
static void test_no_script_dispatch(IActiveScript *script)
|
||||
{
|
||||
IDispatch *disp;
|
||||
HRESULT hres;
|
||||
|
||||
disp = (void*)0xdeadbeef;
|
||||
hres = IActiveScript_GetScriptDispatch(script, NULL, &disp);
|
||||
ok(hres == E_UNEXPECTED, "hres = %08x, expected E_UNEXPECTED\n", hres);
|
||||
ok(!disp, "disp != NULL\n");
|
||||
}
|
||||
|
||||
static void test_safety(IUnknown *unk)
|
||||
|
@ -295,10 +328,54 @@ static void test_safety(IUnknown *unk)
|
|||
IObjectSafety_Release(safety);
|
||||
}
|
||||
|
||||
static HRESULT set_script_prop(IActiveScript *engine, DWORD property, VARIANT *val)
|
||||
{
|
||||
IActiveScriptProperty *script_prop;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptProperty,
|
||||
(void**)&script_prop);
|
||||
ok(hres == S_OK, "Could not get IActiveScriptProperty iface: %08x\n", hres);
|
||||
|
||||
hres = IActiveScriptProperty_SetProperty(script_prop, property, NULL, val);
|
||||
IActiveScriptProperty_Release(script_prop);
|
||||
return hres;
|
||||
}
|
||||
|
||||
static void test_invoke_versioning(IActiveScript *script)
|
||||
{
|
||||
VARIANT v;
|
||||
HRESULT hres;
|
||||
|
||||
V_VT(&v) = VT_NULL;
|
||||
hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
|
||||
if(hres == E_NOTIMPL) {
|
||||
win_skip("SCRIPTPROP_INVOKESTRING not supported\n");
|
||||
return;
|
||||
}
|
||||
ok(hres == E_INVALIDARG, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08x\n", hres);
|
||||
|
||||
V_VT(&v) = VT_I2;
|
||||
V_I2(&v) = 0;
|
||||
hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
|
||||
ok(hres == E_INVALIDARG, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08x\n", hres);
|
||||
|
||||
V_VT(&v) = VT_I4;
|
||||
V_I4(&v) = 16;
|
||||
hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
|
||||
ok(hres == E_INVALIDARG, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08x\n", hres);
|
||||
|
||||
V_VT(&v) = VT_I4;
|
||||
V_I4(&v) = 2;
|
||||
hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
|
||||
ok(hres == S_OK, "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08x\n", hres);
|
||||
}
|
||||
|
||||
static void test_jscript(void)
|
||||
{
|
||||
IActiveScriptParse *parse;
|
||||
IActiveScript *script;
|
||||
IDispatchEx *dispex;
|
||||
IUnknown *unk;
|
||||
ULONG ref;
|
||||
HRESULT hres;
|
||||
|
@ -322,6 +399,7 @@ static void test_jscript(void)
|
|||
|
||||
test_state(script, SCRIPTSTATE_UNINITIALIZED);
|
||||
test_safety(unk);
|
||||
test_invoke_versioning(script);
|
||||
|
||||
hres = IActiveScriptParse64_InitNew(parse);
|
||||
ok(hres == S_OK, "InitNew failed: %08x\n", hres);
|
||||
|
@ -333,7 +411,7 @@ static void test_jscript(void)
|
|||
ok(hres == E_POINTER, "SetScriptSite failed: %08x, expected E_POINTER\n", hres);
|
||||
|
||||
test_state(script, SCRIPTSTATE_UNINITIALIZED);
|
||||
test_script_dispatch(script, FALSE);
|
||||
test_no_script_dispatch(script);
|
||||
|
||||
SET_EXPECT(GetLCID);
|
||||
SET_EXPECT(OnStateChange_INITIALIZED);
|
||||
|
@ -347,7 +425,8 @@ static void test_jscript(void)
|
|||
hres = IActiveScript_SetScriptSite(script, &ActiveScriptSite);
|
||||
ok(hres == E_UNEXPECTED, "SetScriptSite failed: %08x, expected E_UNEXPECTED\n", hres);
|
||||
|
||||
test_script_dispatch(script, TRUE);
|
||||
dispex = get_script_dispatch(script);
|
||||
test_script_dispatch(dispex);
|
||||
|
||||
SET_EXPECT(OnStateChange_STARTED);
|
||||
hres = IActiveScript_SetScriptState(script, SCRIPTSTATE_STARTED);
|
||||
|
@ -362,7 +441,9 @@ static void test_jscript(void)
|
|||
CHECK_CALLED(OnStateChange_CLOSED);
|
||||
|
||||
test_state(script, SCRIPTSTATE_CLOSED);
|
||||
test_script_dispatch(script, FALSE);
|
||||
test_no_script_dispatch(script);
|
||||
test_script_dispatch(dispex);
|
||||
IDispatchEx_Release(dispex);
|
||||
|
||||
IUnknown_Release(parse);
|
||||
IActiveScript_Release(script);
|
||||
|
@ -430,7 +511,7 @@ static void test_jscript2(void)
|
|||
CHECK_CALLED(OnStateChange_CLOSED);
|
||||
|
||||
test_state(script, SCRIPTSTATE_CLOSED);
|
||||
test_script_dispatch(script, FALSE);
|
||||
test_no_script_dispatch(script);
|
||||
|
||||
IUnknown_Release(parse);
|
||||
IActiveScript_Release(script);
|
||||
|
|
|
@ -3,13 +3,15 @@
|
|||
<group>
|
||||
<module name="jscript_winetest" type="win32cui" installbase="bin" installname="jscript_winetest.exe" allowwarnings="true">
|
||||
<include base="jscript_winetest">.</include>
|
||||
<define name="__ROS_LONG64__" />
|
||||
<define name="__ROS_LONG64__" />
|
||||
<file>activex.c</file>
|
||||
<file>jscript.c</file>
|
||||
<file>run.c</file>
|
||||
<file>testlist.c</file>
|
||||
<file>rsrc.rc</file>
|
||||
<library>wine</library>
|
||||
<library>ole32</library>
|
||||
<library>advapi32</library>
|
||||
<library>oleaut32</library>
|
||||
<library>ntdll</library>
|
||||
</module>
|
||||
|
|
|
@ -109,8 +109,14 @@ ok(typeof(this) === "object", "typeof(this) is not object");
|
|||
|
||||
ok(testFunc1(true, "test") === true, "testFunc1 not returned true");
|
||||
|
||||
tmp = (function() {1;})();
|
||||
ok(tmp === undefined, "tmp = " + tmp);
|
||||
tmp = eval("1;");
|
||||
ok(tmp === 1, "tmp = " + tmp);
|
||||
|
||||
var obj1 = new Object();
|
||||
ok(typeof(obj1) === "object", "typeof(obj1) is not object");
|
||||
ok(obj1.constructor === Object, "unexpected obj1.constructor");
|
||||
obj1.test = true;
|
||||
obj1.func = function () {
|
||||
ok(this === obj1, "this is not obj1");
|
||||
|
@ -139,6 +145,7 @@ testConstr1.prototype.pvar = 1;
|
|||
|
||||
var obj2 = new testConstr1(true);
|
||||
ok(typeof(obj2) === "object", "typeof(obj2) is not object");
|
||||
ok(obj2.constructor === testConstr1, "unexpected obj2.constructor");
|
||||
ok(obj2.pvar === 1, "obj2.pvar is not 1");
|
||||
|
||||
testConstr1.prototype.pvar = 2;
|
||||
|
@ -148,6 +155,21 @@ obj2.pvar = 3;
|
|||
testConstr1.prototype.pvar = 1;
|
||||
ok(obj2.pvar === 3, "obj2.pvar is not 3");
|
||||
|
||||
obj1 = new Object();
|
||||
function testConstr3() {
|
||||
return obj1;
|
||||
}
|
||||
|
||||
obj2 = new testConstr3();
|
||||
ok(obj1 === obj2, "obj1 != obj2");
|
||||
|
||||
function testConstr4() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
obj2 = new testConstr3();
|
||||
ok(typeof(obj2) === "object", "typeof(obj2) = " + typeof(obj2));
|
||||
|
||||
var obj3 = new Object;
|
||||
ok(typeof(obj3) === "object", "typeof(obj3) is not object");
|
||||
|
||||
|
@ -189,6 +211,7 @@ if(false) {
|
|||
var obj3 = { prop1: 1, prop2: typeof(false) };
|
||||
ok(obj3.prop1 === 1, "obj3.prop1 is not 1");
|
||||
ok(obj3.prop2 === "boolean", "obj3.prop2 is not \"boolean\"");
|
||||
ok(obj3.constructor === Object, "unexpected obj3.constructor");
|
||||
|
||||
{
|
||||
var blockVar = 1;
|
||||
|
@ -326,6 +349,15 @@ tmp = -3.5 | 0;
|
|||
ok(tmp === -3, "-3.5 | 0 !== -3");
|
||||
ok(getVT(tmp) === "VT_I4", "getVT(3.5|0) = " + getVT(tmp));
|
||||
|
||||
tmp = 0 | NaN;
|
||||
ok(tmp === 0, "0 | NaN = " + tmp);
|
||||
|
||||
tmp = 0 | Infinity;
|
||||
ok(tmp === 0, "0 | NaN = " + tmp);
|
||||
|
||||
tmp = 0 | (-Infinity);
|
||||
ok(tmp === 0, "0 | NaN = " + tmp);
|
||||
|
||||
tmp = 10;
|
||||
ok((tmp |= 0x10) === 26, "tmp(10) |= 0x10 !== 26");
|
||||
ok(getVT(tmp) === "VT_I4", "getVT(tmp |= 10) = " + getVT(tmp));
|
||||
|
@ -360,6 +392,9 @@ ok(tmp === 2, "8 >> 2 = " + tmp);
|
|||
tmp = -64 >>> 4;
|
||||
ok(tmp === 0x0ffffffc, "-64 >>> 4 = " + tmp);
|
||||
|
||||
tmp = 4 >>> NaN;
|
||||
ok(tmp === 4, "4 >>> NaN = " + tmp);
|
||||
|
||||
tmp = 10;
|
||||
ok((tmp &= 8) === 8, "tmp(10) &= 8 !== 8");
|
||||
ok(getVT(tmp) === "VT_I4", "getVT(tmp &= 8) = " + getVT(tmp));
|
||||
|
@ -390,8 +425,10 @@ ok(+"3e3" === 3000, "+'3e3' !== 3000");
|
|||
|
||||
tmp = new Number(1);
|
||||
ok(+tmp === 1, "+(new Number(1)) = " + (+tmp));
|
||||
ok(tmp.constructor === Number, "unexpected tmp.constructor");
|
||||
tmp = new String("1");
|
||||
ok(+tmp === 1, "+(new String('1')) = " + (+tmp));
|
||||
ok(tmp.constructor === String, "unexpected tmp.constructor");
|
||||
|
||||
ok("" + 0 === "0", "\"\" + 0 !== \"0\"");
|
||||
ok("" + 123 === "123", "\"\" + 123 !== \"123\"");
|
||||
|
@ -831,6 +868,13 @@ ok(("1" in obj) === false, "1 is in obj");
|
|||
obj = [1,2,3];
|
||||
ok((1 in obj) === true, "1 is not in obj");
|
||||
|
||||
obj = new Object();
|
||||
try {
|
||||
obj.prop["test"];
|
||||
ok(false, "expected exception");
|
||||
}catch(e) {}
|
||||
ok(!("prop" in obj), "prop in obj");
|
||||
|
||||
ok(isNaN(NaN) === true, "isNaN(NaN) !== true");
|
||||
ok(isNaN(0.5) === false, "isNaN(0.5) !== false");
|
||||
ok(isNaN(Infinity) === false, "isNaN(Infinity) !== false");
|
||||
|
@ -934,6 +978,11 @@ ok((function (){return 1;})() === 1, "(function (){return 1;})() = " + (function
|
|||
var re = /=(\?|%3F)/g;
|
||||
ok(re.source === "=(\\?|%3F)", "re.source = " + re.source);
|
||||
|
||||
tmp = new Array();
|
||||
for(var i=0; i<2; i++)
|
||||
tmp[i] = /b/;
|
||||
ok(tmp[0] != tmp[1], "tmp[0] == tmp [1]");
|
||||
|
||||
ok(createNullBSTR() === '', "createNullBSTR() !== ''");
|
||||
|
||||
ok(getVT(nullDisp) === "VT_DISPATCH", "getVT(nullDisp) = " + getVT(nullDisp));
|
||||
|
@ -969,4 +1018,10 @@ ok(typeof(doesnotexist) === "undefined", "typeof(doesnotexist) = " + typeof(does
|
|||
(function() { newValue = 1; })();
|
||||
ok(newValue === 1, "newValue = " + newValue);
|
||||
|
||||
obj = {undefined: 3};
|
||||
|
||||
/* Keep this test in the end of file */
|
||||
undefined = 6;
|
||||
ok(undefined === 6, "undefined = " + undefined);
|
||||
|
||||
reportSuccess();
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
*/
|
||||
|
||||
|
||||
var m, re, b;
|
||||
var m, re, b, i, obj;
|
||||
|
||||
re = /a+/;
|
||||
ok(re.lastIndex === 0, "re.lastIndex = " + re.lastIndex);
|
||||
|
@ -71,6 +71,11 @@ m = re.exec();
|
|||
ok(m === null, "m is not null");
|
||||
ok(re.lastIndex === 0, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
m = /(a|b)+|(c)/.exec("aa");
|
||||
ok(m[0] === "aa", "m[0] = " + m[0]);
|
||||
ok(m[1] === "a", "m[1] = " + m[1]);
|
||||
ok(m[2] === "", "m[2] = " + m[2]);
|
||||
|
||||
b = re.test(" a ");
|
||||
ok(b === true, "re.test(' a ') returned " + b);
|
||||
ok(re.lastIndex === 3, "re.lastIndex = " + re.lastIndex);
|
||||
|
@ -91,10 +96,12 @@ ok(m[1] === "test", "m[1] = " + m[1]);
|
|||
b = /a*/.test();
|
||||
ok(b === true, "/a*/.test() returned " + b);
|
||||
|
||||
m = "abcabc".match(/ca/);
|
||||
m = "abcabc".match(re = /ca/);
|
||||
ok(typeof(m) === "object", "typeof m is not object");
|
||||
ok(m.length === 1, "m.length is not 1");
|
||||
ok(m["0"] === "ca", "m[0] is not \"ca\"");
|
||||
ok(m.constructor === Array, "unexpected m.constructor");
|
||||
ok(re.lastIndex === 4, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
m = "abcabc".match(/ab/);
|
||||
ok(typeof(m) === "object", "typeof m is not object");
|
||||
|
@ -160,8 +167,9 @@ ok(m["0"] === "ab", "m[0] is not \"ab\"");
|
|||
m = "abcabc".match();
|
||||
ok(m === null, "m is not null");
|
||||
|
||||
r = "- [test] -".replace(/\[([^\[]+)\]/g, "success");
|
||||
r = "- [test] -".replace(re = /\[([^\[]+)\]/g, "success");
|
||||
ok(r === "- success -", "r = " + r + " expected '- success -'");
|
||||
ok(re.lastIndex === 8, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
r = "[test] [test]".replace(/\[([^\[]+)\]/g, "aa");
|
||||
ok(r === "aa aa", "r = " + r + "aa aa");
|
||||
|
@ -280,6 +288,41 @@ ok(r.length === 2, "r.length = " + r.length);
|
|||
ok(r[0] === "1", "r[0] = " + r[0]);
|
||||
ok(r[1] === "2", "r[1] = " + r[1]);
|
||||
|
||||
re = /,+/;
|
||||
r = "1,,2,".split(re);
|
||||
ok(r.length === 2, "r.length = " + r.length);
|
||||
ok(r[0] === "1", "r[0] = " + r[0]);
|
||||
ok(r[1] === "2", "r[1] = " + r[1]);
|
||||
ok(re.lastIndex === 5, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
re = /,+/g;
|
||||
r = "1,,2,".split(re);
|
||||
ok(r.length === 2, "r.length = " + r.length);
|
||||
ok(r[0] === "1", "r[0] = " + r[0]);
|
||||
ok(r[1] === "2", "r[1] = " + r[1]);
|
||||
ok(re.lastIndex === 5, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
r = "1 12 \t3".split(re = /\s+/).join(";");
|
||||
ok(r === "1;12;3", "r = " + r);
|
||||
ok(re.lastIndex === 6, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
r = "123".split(re = /\s+/).join(";");
|
||||
ok(r === "123", "r = " + r);
|
||||
ok(re.lastIndex === 0, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
/* another standard violation */
|
||||
r = "1 12 \t3".split(re = /(\s)+/g).join(";");
|
||||
ok(r === "1;12;3", "r = " + r);
|
||||
ok(re.lastIndex === 6, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
re = /,+/;
|
||||
re.lastIndex = 4;
|
||||
r = "1,,2,".split(re);
|
||||
ok(r.length === 2, "r.length = " + r.length);
|
||||
ok(r[0] === "1", "r[0] = " + r[0]);
|
||||
ok(r[1] === "2", "r[1] = " + r[1]);
|
||||
ok(re.lastIndex === 5, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
re = /abc[^d]/g;
|
||||
ok(re.source === "abc[^d]", "re.source = '" + re.source + "', expected 'abc[^d]'");
|
||||
|
||||
|
@ -298,4 +341,117 @@ ok(re === RegExp(re, undefined), "re !== RegExp(re, undefined)");
|
|||
re = /abc/;
|
||||
ok(re === RegExp(re, undefined, 1), "re !== RegExp(re, undefined, 1)");
|
||||
|
||||
re = /a/g;
|
||||
ok(re.lastIndex === 0, "re.lastIndex = " + re.lastIndex + " expected 0");
|
||||
|
||||
m = re.exec(" a ");
|
||||
ok(re.lastIndex === 2, "re.lastIndex = " + re.lastIndex + " expected 2");
|
||||
ok(m.index === 1, "m.index = " + m.index + " expected 1");
|
||||
|
||||
m = re.exec(" a ");
|
||||
ok(re.lastIndex === 0, "re.lastIndex = " + re.lastIndex + " expected 0");
|
||||
ok(m === null, "m = " + m + " expected null");
|
||||
|
||||
re.lastIndex = 2;
|
||||
m = re.exec(" a a ");
|
||||
ok(re.lastIndex === 4, "re.lastIndex = " + re.lastIndex + " expected 4");
|
||||
ok(m.index === 3, "m.index = " + m.index + " expected 3");
|
||||
|
||||
re.lastIndex = "2";
|
||||
ok(re.lastIndex === "2", "re.lastIndex = " + re.lastIndex + " expected '2'");
|
||||
m = re.exec(" a a ");
|
||||
ok(re.lastIndex === 4, "re.lastIndex = " + re.lastIndex + " expected 4");
|
||||
ok(m.index === 3, "m.index = " + m.index + " expected 3");
|
||||
|
||||
var li = 0;
|
||||
var obj = new Object();
|
||||
obj.valueOf = function() { return li; };
|
||||
|
||||
re.lastIndex = obj;
|
||||
ok(re.lastIndex === obj, "re.lastIndex = " + re.lastIndex + " expected obj");
|
||||
li = 2;
|
||||
m = re.exec(" a a ");
|
||||
ok(re.lastIndex === 2, "re.lastIndex = " + re.lastIndex + " expected 2");
|
||||
ok(m.index === 1, "m.index = " + m.index + " expected 1");
|
||||
|
||||
re.lastIndex = 3;
|
||||
re.lastIndex = "test";
|
||||
ok(re.lastIndex === "test", "re.lastIndex = " + re.lastIndex + " expected 'test'");
|
||||
m = re.exec(" a a ");
|
||||
ok(re.lastIndex === 2 || re.lastIndex === 0, "re.lastIndex = " + re.lastIndex + " expected 2 or 0");
|
||||
if(re.lastIndex != 0)
|
||||
ok(m.index === 1, "m.index = " + m.index + " expected 1");
|
||||
else
|
||||
ok(m === null, "m = " + m + " expected null");
|
||||
|
||||
re.lastIndex = 0;
|
||||
re.lastIndex = 3.9;
|
||||
ok(re.lastIndex === 3.9, "re.lastIndex = " + re.lastIndex + " expected 3.9");
|
||||
m = re.exec(" a a ");
|
||||
ok(re.lastIndex === 4, "re.lastIndex = " + re.lastIndex + " expected 4");
|
||||
ok(m.index === 3, "m.index = " + m.index + " expected 3");
|
||||
|
||||
obj.valueOf = function() { throw 0; }
|
||||
re.lastIndex = obj;
|
||||
ok(re.lastIndex === obj, "unexpected re.lastIndex");
|
||||
m = re.exec(" a a ");
|
||||
ok(re.lastIndex === 2, "re.lastIndex = " + re.lastIndex + " expected 2");
|
||||
ok(m.index === 1, "m.index = " + m.index + " expected 1");
|
||||
|
||||
re.lastIndex = -3;
|
||||
ok(re.lastIndex === -3, "re.lastIndex = " + re.lastIndex + " expected -3");
|
||||
m = re.exec(" a a ");
|
||||
ok(re.lastIndex === 0, "re.lastIndex = " + re.lastIndex + " expected 0");
|
||||
ok(m === null, "m = " + m + " expected null");
|
||||
|
||||
re.lastIndex = -1;
|
||||
ok(re.lastIndex === -1, "re.lastIndex = " + re.lastIndex + " expected -1");
|
||||
m = re.exec(" ");
|
||||
ok(re.lastIndex === 0, "re.lastIndex = " + re.lastIndex + " expected 0");
|
||||
ok(m === null, "m = " + m + " expected null");
|
||||
|
||||
re = /aa/g;
|
||||
i = 'baacd'.search(re);
|
||||
ok(i === 1, "'baacd'.search(re) = " + i);
|
||||
ok(re.lastIndex === 3, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
re.lastIndex = 2;
|
||||
i = 'baacdaa'.search(re);
|
||||
ok(i === 1, "'baacd'.search(re) = " + i);
|
||||
ok(re.lastIndex === 3, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
re = /aa/;
|
||||
i = 'baacd'.search(re);
|
||||
ok(i === 1, "'baacd'.search(re) = " + i);
|
||||
ok(re.lastIndex === 3, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
re.lastIndex = 2;
|
||||
i = 'baacdaa'.search(re);
|
||||
ok(i === 1, "'baacd'.search(re) = " + i);
|
||||
ok(re.lastIndex === 3, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
re = /d/g;
|
||||
re.lastIndex = 1;
|
||||
i = 'abc'.search(re);
|
||||
ok(i === -1, "'abc'.search(/d/g) = " + i);
|
||||
ok(re.lastIndex === 0, "re.lastIndex = " + re.lastIndex);
|
||||
|
||||
i = 'abcdde'.search(/[df]/);
|
||||
ok(i === 3, "'abc'.search(/[df]/) = " + i);
|
||||
|
||||
i = 'abcdde'.search(/[df]/, "a");
|
||||
ok(i === 3, "'abc'.search(/[df]/) = " + i);
|
||||
|
||||
i = 'abcdde'.search("[df]");
|
||||
ok(i === 3, "'abc'.search(/d*/) = " + i);
|
||||
|
||||
obj = {
|
||||
toString: function() { return "abc"; }
|
||||
};
|
||||
i = String.prototype.search.call(obj, "b");
|
||||
ok(i === 1, "String.prototype.seatch.apply(obj, 'b') = " + i);
|
||||
|
||||
i = " undefined ".search();
|
||||
ok(i === null, "' undefined '.search() = " + i);
|
||||
|
||||
reportSuccess();
|
||||
|
|
|
@ -81,6 +81,7 @@ DEFINE_EXPECT(GetItemInfo_testVal);
|
|||
#define DISPID_GLOBAL_NULL_DISP 0x1008
|
||||
#define DISPID_GLOBAL_TESTTHIS 0x1009
|
||||
#define DISPID_GLOBAL_TESTTHIS2 0x100a
|
||||
#define DISPID_GLOBAL_INVOKEVERSION 0x100b
|
||||
|
||||
#define DISPID_TESTOBJ_PROP 0x2000
|
||||
|
||||
|
@ -92,6 +93,7 @@ static const CHAR test_valA[] = "testVal";
|
|||
static BOOL strict_dispid_check;
|
||||
static const char *test_name = "(null)";
|
||||
static IDispatch *script_disp;
|
||||
static int invoke_version;
|
||||
|
||||
static BSTR a2bstr(const char *str)
|
||||
{
|
||||
|
@ -112,6 +114,13 @@ static int strcmp_wa(LPCWSTR strw, const char *stra)
|
|||
return lstrcmpA(buf, stra);
|
||||
}
|
||||
|
||||
#define test_grfdex(a,b) _test_grfdex(__LINE__,a,b)
|
||||
static void _test_grfdex(unsigned line, DWORD grfdex, DWORD expect)
|
||||
{
|
||||
expect |= invoke_version << 28;
|
||||
ok_(__FILE__,line)(grfdex == expect, "grfdex = %x, expected %x\n", grfdex, expect);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI DispatchEx_QueryInterface(IDispatchEx *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
*ppv = NULL;
|
||||
|
@ -205,13 +214,13 @@ static HRESULT WINAPI testObj_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD
|
|||
{
|
||||
if(!strcmp_wa(bstrName, "prop")) {
|
||||
CHECK_EXPECT(testobj_prop_d);
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
*pid = DISPID_TESTOBJ_PROP;
|
||||
return S_OK;
|
||||
}
|
||||
if(!strcmp_wa(bstrName, "noprop")) {
|
||||
CHECK_EXPECT(testobj_noprop_d);
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
return DISP_E_UNKNOWNNAME;
|
||||
}
|
||||
|
||||
|
@ -250,7 +259,7 @@ static HRESULT WINAPI testObj_DeleteMemberByName(IDispatchEx *iface, BSTR bstrNa
|
|||
CHECK_EXPECT(testobj_delete);
|
||||
|
||||
ok(!strcmp_wa(bstrName, "deleteTest"), "unexpected name %s\n", wine_dbgstr_w(bstrName));
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
@ -277,40 +286,40 @@ static IDispatchEx testObj = { &testObjVtbl };
|
|||
static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
|
||||
{
|
||||
if(!strcmp_wa(bstrName, "ok")) {
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
*pid = DISPID_GLOBAL_OK;
|
||||
return S_OK;
|
||||
}
|
||||
if(!strcmp_wa(bstrName, "trace")) {
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
*pid = DISPID_GLOBAL_TRACE;
|
||||
return S_OK;
|
||||
}
|
||||
if(!strcmp_wa(bstrName, "reportSuccess")) {
|
||||
CHECK_EXPECT(global_success_d);
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
*pid = DISPID_GLOBAL_REPORTSUCCESS;
|
||||
return S_OK;
|
||||
}
|
||||
if(!strcmp_wa(bstrName, "testPropGet")) {
|
||||
CHECK_EXPECT(global_propget_d);
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
*pid = DISPID_GLOBAL_TESTPROPGET;
|
||||
return S_OK;
|
||||
}
|
||||
if(!strcmp_wa(bstrName, "testPropPut")) {
|
||||
CHECK_EXPECT(global_propput_d);
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
*pid = DISPID_GLOBAL_TESTPROPPUT;
|
||||
return S_OK;
|
||||
}
|
||||
if(!strcmp_wa(bstrName, "getVT")) {
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
*pid = DISPID_GLOBAL_GETVT;
|
||||
return S_OK;
|
||||
}
|
||||
if(!strcmp_wa(bstrName, "testObj")) {
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
*pid = DISPID_GLOBAL_TESTOBJ;
|
||||
return S_OK;
|
||||
}
|
||||
|
@ -324,22 +333,28 @@ static HRESULT WINAPI Global_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD
|
|||
}
|
||||
if(!strcmp_wa(bstrName, "notExists")) {
|
||||
CHECK_EXPECT(global_notexists_d);
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
return DISP_E_UNKNOWNNAME;
|
||||
}
|
||||
|
||||
if(!strcmp_wa(bstrName, "testThis")) {
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
*pid = DISPID_GLOBAL_TESTTHIS;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if(!strcmp_wa(bstrName, "testThis2")) {
|
||||
ok(grfdex == fdexNameCaseSensitive, "grfdex = %x\n", grfdex);
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
*pid = DISPID_GLOBAL_TESTTHIS2;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if(!strcmp_wa(bstrName, "invokeVersion")) {
|
||||
test_grfdex(grfdex, fdexNameCaseSensitive);
|
||||
*pid = DISPID_GLOBAL_INVOKEVERSION;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if(strict_dispid_check)
|
||||
ok(0, "unexpected call %s\n", wine_dbgstr_w(bstrName));
|
||||
return DISP_E_UNKNOWNNAME;
|
||||
|
@ -536,6 +551,23 @@ static HRESULT WINAPI Global_InvokeEx(IDispatchEx *iface, DISPID id, LCID lcid,
|
|||
ok(V_DISPATCH(pdp->rgvarg) == script_disp, "disp != script_disp\n");
|
||||
|
||||
return S_OK;
|
||||
|
||||
case DISPID_GLOBAL_INVOKEVERSION:
|
||||
ok(wFlags == INVOKE_PROPERTYGET, "wFlags = %x\n", wFlags);
|
||||
ok(pdp != NULL, "pdp == NULL\n");
|
||||
ok(!pdp->rgvarg, "rgvarg != NULL\n");
|
||||
ok(!pdp->rgdispidNamedArgs, "rgdispidNamedArgs != NULL\n");
|
||||
ok(!pdp->cArgs, "cArgs = %d\n", pdp->cArgs);
|
||||
ok(!pdp->cNamedArgs, "cNamedArgs = %d\n", pdp->cNamedArgs);
|
||||
ok(pvarRes != NULL, "pvarRes == NULL\n");
|
||||
ok(V_VT(pvarRes) == VT_EMPTY, "V_VT(pvarRes) = %d\n", V_VT(pvarRes));
|
||||
ok(pei != NULL, "pei == NULL\n");
|
||||
|
||||
V_VT(pvarRes) = VT_I4;
|
||||
V_I4(pvarRes) = invoke_version;
|
||||
|
||||
return S_OK;
|
||||
|
||||
}
|
||||
|
||||
ok(0, "unexpected call %x\n", id);
|
||||
|
@ -657,19 +689,44 @@ static const IActiveScriptSiteVtbl ActiveScriptSiteVtbl = {
|
|||
|
||||
static IActiveScriptSite ActiveScriptSite = { &ActiveScriptSiteVtbl };
|
||||
|
||||
static HRESULT set_script_prop(IActiveScript *engine, DWORD property, VARIANT *val)
|
||||
{
|
||||
IActiveScriptProperty *script_prop;
|
||||
HRESULT hres;
|
||||
|
||||
hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptProperty,
|
||||
(void**)&script_prop);
|
||||
ok(hres == S_OK, "Could not get IActiveScriptProperty iface: %08x\n", hres);
|
||||
|
||||
hres = IActiveScriptProperty_SetProperty(script_prop, property, NULL, val);
|
||||
IActiveScriptProperty_Release(script_prop);
|
||||
|
||||
return hres;
|
||||
}
|
||||
|
||||
static IActiveScript *create_script(void)
|
||||
{
|
||||
IActiveScript *script;
|
||||
VARIANT v;
|
||||
HRESULT hres;
|
||||
|
||||
hres = CoCreateInstance(&CLSID_JScript, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
|
||||
&IID_IActiveScript, (void**)&script);
|
||||
ok(hres == S_OK, "CoCreateInstance failed: %08x\n", hres);
|
||||
|
||||
V_VT(&v) = VT_I4;
|
||||
V_I4(&v) = invoke_version;
|
||||
hres = set_script_prop(script, SCRIPTPROP_INVOKEVERSIONING, &v);
|
||||
ok(hres == S_OK || broken(hres == E_NOTIMPL), "SetProperty(SCRIPTPROP_INVOKEVERSIONING) failed: %08x\n", hres);
|
||||
if(invoke_version && FAILED(hres)) {
|
||||
IActiveScript_Release(script);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return script;
|
||||
}
|
||||
|
||||
static void parse_script(DWORD flags, BSTR script_str)
|
||||
static HRESULT parse_script(DWORD flags, BSTR script_str)
|
||||
{
|
||||
IActiveScriptParse *parser;
|
||||
IActiveScript *engine;
|
||||
|
@ -677,14 +734,14 @@ static void parse_script(DWORD flags, BSTR script_str)
|
|||
|
||||
engine = create_script();
|
||||
if(!engine)
|
||||
return;
|
||||
return S_OK;
|
||||
|
||||
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;
|
||||
return hres;
|
||||
}
|
||||
|
||||
hres = IActiveScriptParse64_InitNew(parser);
|
||||
|
@ -706,11 +763,12 @@ static void parse_script(DWORD flags, BSTR script_str)
|
|||
ok(script_disp != (IDispatch*)&Global, "script_disp == Global\n");
|
||||
|
||||
hres = IActiveScriptParse64_ParseScriptText(parser, script_str, NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
|
||||
ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
|
||||
|
||||
IDispatch_Release(script_disp);
|
||||
IActiveScript_Release(engine);
|
||||
IUnknown_Release(parser);
|
||||
|
||||
return hres;
|
||||
}
|
||||
|
||||
static HRESULT parse_htmlscript(BSTR script_str)
|
||||
|
@ -756,9 +814,13 @@ static HRESULT parse_htmlscript(BSTR script_str)
|
|||
|
||||
static void parse_script_af(DWORD flags, const char *src)
|
||||
{
|
||||
BSTR tmp = a2bstr(src);
|
||||
parse_script(flags, tmp);
|
||||
BSTR tmp;
|
||||
HRESULT hres;
|
||||
|
||||
tmp = a2bstr(src);
|
||||
hres = parse_script(flags, tmp);
|
||||
SysFreeString(tmp);
|
||||
ok(hres == S_OK, "parse_script failed: %08x\n", hres);
|
||||
}
|
||||
|
||||
static void parse_script_a(const char *src)
|
||||
|
@ -816,14 +878,17 @@ static BSTR get_script_from_file(const char *filename)
|
|||
|
||||
static void run_from_file(const char *filename)
|
||||
{
|
||||
BSTR script_str = get_script_from_file(filename);
|
||||
BSTR script_str;
|
||||
HRESULT hres;
|
||||
|
||||
script_str = get_script_from_file(filename);
|
||||
if(!script_str)
|
||||
return;
|
||||
|
||||
strict_dispid_check = FALSE;
|
||||
|
||||
if(script_str)
|
||||
parse_script(SCRIPTITEM_GLOBALMEMBERS, script_str);
|
||||
|
||||
hres = parse_script(SCRIPTITEM_GLOBALMEMBERS, script_str);
|
||||
SysFreeString(script_str);
|
||||
ok(hres == S_OK, "parse_script failed: %08x\n", hres);
|
||||
}
|
||||
|
||||
static void run_from_res(const char *name)
|
||||
|
@ -832,6 +897,7 @@ static void run_from_res(const char *name)
|
|||
DWORD size, len;
|
||||
BSTR str;
|
||||
HRSRC src;
|
||||
HRESULT hres;
|
||||
|
||||
strict_dispid_check = FALSE;
|
||||
test_name = name;
|
||||
|
@ -848,10 +914,11 @@ static void run_from_res(const char *name)
|
|||
|
||||
SET_EXPECT(global_success_d);
|
||||
SET_EXPECT(global_success_i);
|
||||
parse_script(SCRIPTITEM_GLOBALMEMBERS, str);
|
||||
hres = parse_script(SCRIPTITEM_GLOBALMEMBERS, str);
|
||||
CHECK_CALLED(global_success_d);
|
||||
CHECK_CALLED(global_success_i);
|
||||
|
||||
ok(hres == S_OK, "parse_script failed: %08x\n", hres);
|
||||
SysFreeString(str);
|
||||
}
|
||||
|
||||
|
@ -912,6 +979,17 @@ static void run_tests(void)
|
|||
{
|
||||
HRESULT hres;
|
||||
|
||||
if(invoke_version) {
|
||||
IActiveScript *script;
|
||||
|
||||
script = create_script();
|
||||
if(!script) {
|
||||
win_skip("Could not create script\n");
|
||||
return;
|
||||
}
|
||||
IActiveScript_Release(script);
|
||||
}
|
||||
|
||||
strict_dispid_check = TRUE;
|
||||
|
||||
parse_script_a("");
|
||||
|
@ -1010,6 +1088,18 @@ static void run_tests(void)
|
|||
ok(hres != S_OK, "ParseScriptText have not failed\n");
|
||||
}
|
||||
|
||||
static BOOL check_jscript(void)
|
||||
{
|
||||
BSTR str;
|
||||
HRESULT hres;
|
||||
|
||||
str = a2bstr("if(!('localeCompare' in String.prototype)) throw 1;");
|
||||
hres = parse_script(0, str);
|
||||
SysFreeString(str);
|
||||
|
||||
return hres == S_OK;
|
||||
}
|
||||
|
||||
START_TEST(run)
|
||||
{
|
||||
int argc;
|
||||
|
@ -1019,10 +1109,19 @@ START_TEST(run)
|
|||
|
||||
CoInitialize(NULL);
|
||||
|
||||
if(argc > 2)
|
||||
if(!check_jscript()) {
|
||||
win_skip("Broken engine, probably too old\n");
|
||||
}else if(argc > 2) {
|
||||
run_from_file(argv[2]);
|
||||
else
|
||||
}else {
|
||||
trace("invoke version 0\n");
|
||||
invoke_version = 0;
|
||||
run_tests();
|
||||
|
||||
trace("invoke version 2\n");
|
||||
invoke_version = 2;
|
||||
run_tests();
|
||||
}
|
||||
|
||||
CoUninitialize();
|
||||
}
|
||||
|
|
|
@ -6,11 +6,13 @@
|
|||
#define STANDALONE
|
||||
#include "wine/test.h"
|
||||
|
||||
extern void func_activex(void);
|
||||
extern void func_jscript(void);
|
||||
extern void func_run(void);
|
||||
|
||||
const struct test winetest_testlist[] =
|
||||
{
|
||||
{ "activex", func_activex },
|
||||
{ "jscript", func_jscript },
|
||||
{ "run", func_run },
|
||||
{ 0, 0 }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue