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