Module: wine Branch: master Commit: c168918d7534e641f71e1972eaf2ca54be72b137 URL: http://source.winehq.org/git/wine.git/?a=commit;h=c168918d7534e641f71e1972ea...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Sep 24 00:45:00 2009 +0200
jscript: Throw type error fot Array.toString with wrong 'this' call.
---
dlls/jscript/array.c | 6 +--- dlls/jscript/jscript_En.rc | 1 + dlls/jscript/resource.h | 1 + dlls/jscript/tests/api.js | 63 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+), 4 deletions(-)
diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c index 1fa20fe..941e414 100644 --- a/dlls/jscript/array.c +++ b/dlls/jscript/array.c @@ -936,10 +936,8 @@ static HRESULT Array_toString(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DI TRACE("\n");
array = array_this(jsthis); - if(!array) { - FIXME("not Array object\n"); - return E_FAIL; - } + if(!array) + return throw_type_error(ctx, ei, IDS_ARRAY_EXPECTED, NULL);
return array_join(ctx, &array->dispex, array->length, default_separatorW, retv, ei, sp); } diff --git a/dlls/jscript/jscript_En.rc b/dlls/jscript/jscript_En.rc index 79921b4..7962ad3 100644 --- a/dlls/jscript/jscript_En.rc +++ b/dlls/jscript/jscript_En.rc @@ -41,4 +41,5 @@ STRINGTABLE DISCARDABLE IDS_JSCRIPT_EXPECTED "JScript object expected" IDS_REGEXP_SYNTAX_ERROR "Syntax error in regular expression" IDS_INVALID_LENGTH "Array length must be a finite positive integer" + IDS_ARRAY_EXPECTED "Array object expected" } diff --git a/dlls/jscript/resource.h b/dlls/jscript/resource.h index 81cd74d..fcebcb9 100644 --- a/dlls/jscript/resource.h +++ b/dlls/jscript/resource.h @@ -37,3 +37,4 @@ #define IDS_JSCRIPT_EXPECTED 0x1396 #define IDS_REGEXP_SYNTAX_ERROR 0x1399 #define IDS_INVALID_LENGTH 0x13A5 +#define IDS_ARRAY_EXPECTED 0x13A7 diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index 1c2f56b..aed26ec 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -1621,6 +1621,69 @@ exception_test(function() {eval("'unterminated")}, "SyntaxError", -2146827273); exception_test(function() {eval("nonexistingfunc()")}, "TypeError", -2146823281); exception_test(function() {RegExp(/a/, "g");}, "RegExpError", -2146823271);
+function testThisExcept(func, number) { + exception_test(function() {func.call(new Object())}, "TypeError", number); +} + +function testBoolThis(func) { + testThisExcept(Boolean.prototype[func], -2146823278); +} + +testBoolThis("toString"); +testBoolThis("valueOf"); + +function testDateThis(func) { + testThisExcept(Date.prototype[func], -2146823282); +} + +testDateThis("getDate"); +testDateThis("getDay"); +testDateThis("getFullYear"); +testDateThis("getHours"); +testDateThis("getMilliseconds"); +testDateThis("getMinutes"); +testDateThis("getMonth"); +testDateThis("getSeconds"); +testDateThis("getTime"); +testDateThis("getTimezoneOffset"); +testDateThis("getUTCDate"); +testDateThis("getUTCDay"); +testDateThis("getUTCFullYear"); +testDateThis("getUTCHours"); +testDateThis("getUTCMilliseconds"); +testDateThis("getUTCMinutes"); +testDateThis("getUTCMonth"); +testDateThis("getUTCSeconds"); +testDateThis("setDate"); +testDateThis("setFullYear"); +testDateThis("setHours"); +testDateThis("setMilliseconds"); +testDateThis("setMinutes"); +testDateThis("setMonth"); +testDateThis("setSeconds"); +testDateThis("setTime"); +testDateThis("setUTCDate"); +testDateThis("setUTCFullYear"); +testDateThis("setUTCHours"); +testDateThis("setUTCMilliseconds"); +testDateThis("setUTCMinutes"); +testDateThis("setUTCMonth"); +testDateThis("setUTCSeconds"); +testDateThis("toDateString"); +testDateThis("toLocaleDateString"); +testDateThis("toLocaleString"); +testDateThis("toLocaleTimeString"); +testDateThis("toString"); +testDateThis("toTimeString"); +testDateThis("toUTCString"); +testDateThis("valueOf"); + +function testArrayThis(func) { + testThisExcept(Array.prototype[func], -2146823257); +} + +testArrayThis("toString"); + function testArrayHostThis(func) { exception_test(function() { Array.prototype[func].call(testObj); }, "TypeError", -2146823274); }