Jacek Caban : jscript: Throw type error fot Array.toString with wrong 'this ' call.
Alexandre Julliard
julliard at winehq.org
Thu Sep 24 10:54:58 CDT 2009
Module: wine
Branch: master
Commit: c168918d7534e641f71e1972eaf2ca54be72b137
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c168918d7534e641f71e1972eaf2ca54be72b137
Author: Jacek Caban <jacek at 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);
}
More information about the wine-cvs
mailing list