From: Jacek Caban Date: Wed, 23 Sep 2009 14:24:11 +0000 (+0200) Subject: jscript: Throw correct error in get_length. X-Git-Tag: wine-1.1.30~82 X-Git-Url: http://git.etersoft.ru/projects/?a=commitdiff_plain;h=bb4050d79280dc83e4f3159eb121cb88d84721e9;p=wine%2Feterwine.git jscript: Throw correct error in get_length. --- diff --git a/dlls/jscript/array.c b/dlls/jscript/array.c index b3dc780273..1fa20fe8cb 100644 --- a/dlls/jscript/array.c +++ b/dlls/jscript/array.c @@ -69,10 +69,8 @@ static HRESULT get_length(script_ctx_t *ctx, vdisp_t *vdisp, jsexcept_t *ei, Dis return S_OK; } - if(!is_jsdisp(vdisp)) { - FIXME("Not JScript object\n"); - return E_FAIL; - } + if(!is_jsdisp(vdisp)) + return throw_type_error(ctx, ei, IDS_JSCRIPT_EXPECTED, NULL); hres = jsdisp_propget_name(vdisp->u.jsdisp, lengthW, &var, ei, NULL/*FIXME*/); if(FAILED(hres)) diff --git a/dlls/jscript/jscript_En.rc b/dlls/jscript/jscript_En.rc index b7f8744d4f..79921b46e8 100644 --- a/dlls/jscript/jscript_En.rc +++ b/dlls/jscript/jscript_En.rc @@ -38,6 +38,7 @@ STRINGTABLE DISCARDABLE IDS_ILLEGAL_ASSIGN "Illegal assignment" IDS_UNDEFINED "'|' is undefined" IDS_NOT_BOOL "Boolean object expected" + 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" } diff --git a/dlls/jscript/resource.h b/dlls/jscript/resource.h index 9e33ebc9bc..81cd74dfa1 100644 --- a/dlls/jscript/resource.h +++ b/dlls/jscript/resource.h @@ -34,5 +34,6 @@ #define IDS_ILLEGAL_ASSIGN 0x1390 #define IDS_UNDEFINED 0x1391 #define IDS_NOT_BOOL 0x1392 +#define IDS_JSCRIPT_EXPECTED 0x1396 #define IDS_REGEXP_SYNTAX_ERROR 0x1399 #define IDS_INVALID_LENGTH 0x13A5 diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index ee3a058439..1c2f56b9a2 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -1621,6 +1621,16 @@ exception_test(function() {eval("'unterminated")}, "SyntaxError", -2146827273); exception_test(function() {eval("nonexistingfunc()")}, "TypeError", -2146823281); exception_test(function() {RegExp(/a/, "g");}, "RegExpError", -2146823271); +function testArrayHostThis(func) { + exception_test(function() { Array.prototype[func].call(testObj); }, "TypeError", -2146823274); +} + +testArrayHostThis("push"); +testArrayHostThis("shift"); +testArrayHostThis("slice"); +testArrayHostThis("splice"); +testArrayHostThis("unshift"); + function testObjectInherit(obj, constr, ts, tls, vo) { ok(obj instanceof Object, "obj is not instance of Object"); ok(obj instanceof constr, "obj is not instance of its constructor");