jscript: Throw type error fot Array.toString with wrong 'this' call.

This commit is contained in:
Jacek Caban 2009-09-24 00:45:00 +02:00 committed by Alexandre Julliard
parent a8c7e97d0a
commit c168918d75
4 changed files with 67 additions and 4 deletions

View File

@ -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);
}

View File

@ -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"
}

View File

@ -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

View File

@ -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);
}