Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/jscript/function.c | 2 +- dlls/jscript/tests/api.js | 45 +++++++++++++++++++++++++++++++++ dlls/mshtml/tests/es5.js | 53 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 1 deletion(-)
diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c index fd1380d..e0b7310 100644 --- a/dlls/jscript/function.c +++ b/dlls/jscript/function.c @@ -599,7 +599,7 @@ static HRESULT NativeFunction_call(script_ctx_t *ctx, FunctionInstance *func, ID if(this_disp) vthis = jsval_disp(this_disp); else - vthis = jsval_disp(lookup_global_host(ctx)); + vthis = jsval_null();
return function->proc(ctx, vthis, flags & ~DISPATCH_JSCRIPT_INTERNAL_MASK, argc, argv, r); } diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index d5d8e7d..44e0eaa 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -16,6 +16,15 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+var JS_E_NUMBER_EXPECTED = 0x800a1389; +var JS_E_FUNCTION_EXPECTED = 0x800a138a; +var JS_E_DATE_EXPECTED = 0x800a138e; +var JS_E_OBJECT_EXPECTED = 0x800a138f; +var JS_E_BOOLEAN_EXPECTED = 0x800a1392; +var JS_E_VBARRAY_EXPECTED = 0x800a1395; +var JS_E_ENUMERATOR_EXPECTED = 0x800a1397; +var JS_E_REGEXP_EXPECTED = 0x800a1398; + var tmp, i;
var bigInt = Math.pow(2,40); @@ -3061,6 +3070,42 @@ ok(unescape.length == 1, "unescape.length = " + unescape.length); String.length = 3; ok(String.length == 1, "String.length = " + String.length);
+(function() { + var tests = [ + [ "Array.sort", JS_E_OBJECT_EXPECTED, function(ctx) { Array.prototype.sort.call(ctx); } ], + [ "Boolean.valueOf", JS_E_BOOLEAN_EXPECTED, function(ctx) { Boolean.prototype.valueOf.call(ctx); } ], + [ "Date.getYear", JS_E_DATE_EXPECTED, function(ctx) { Date.prototype.getYear.call(ctx); } ], + [ "Enumerator.atEnd", JS_E_ENUMERATOR_EXPECTED, function(ctx) { Enumerator.prototype.atEnd.call(ctx); } ], + [ "Function.apply", JS_E_FUNCTION_EXPECTED, function(ctx) { Function.prototype.apply.call(ctx, [ function() {} ]); } ], + [ "Number.toExponential", JS_E_NUMBER_EXPECTED, function(ctx) { Number.prototype.toExponential.call(ctx); } ], + [ "Object.hasOwnProperty", JS_E_OBJECT_EXPECTED, function(ctx) { Object.prototype.hasOwnProperty.call(ctx, "toString"); } ], + [ "RegExp.test", JS_E_REGEXP_EXPECTED, function(ctx) { RegExp.prototype.test.call(ctx, "foobar"); } ], + [ "VBArray.lbound", JS_E_VBARRAY_EXPECTED, function(ctx) { VBArray.prototype.lbound.call(ctx); } ] + ]; + + for(var i = 0; i < tests.length; i++) { + try { + tests[i][2](null); + ok(false, "expected exception calling " + tests[i][0] + " with null context"); + }catch(ex) { + var n = ex.number >>> 0; /* make it unsigned like HRESULT */ + ok(n === tests[i][1], tests[i][0] + " with null context exception code = " + n); + } + try { + tests[i][2](undefined); + ok(false, "expected exception calling " + tests[i][0] + " with undefined context"); + }catch(ex) { + var n = ex.number >>> 0; + ok(n === tests[i][1], tests[i][0] + " with undefined context exception code = " + n); + } + } + + var r = Error.prototype.toString.call(undefined); + ok(r === "[object Error]", "Error.toString with undefined context returned " + r); + r = String.prototype.slice.call(null, 1, 3); + ok(r === "ul", "String.slice with null context returned " + r); +})(); + var tmp = createArray(); ok(getVT(tmp) == "VT_ARRAY|VT_VARIANT", "getVT(createArray()) = " + getVT(tmp)); ok(getVT(VBArray(tmp)) == "VT_ARRAY|VT_VARIANT", "getVT(VBArray(tmp)) = " + getVT(VBArray(tmp))); diff --git a/dlls/mshtml/tests/es5.js b/dlls/mshtml/tests/es5.js index 58b0d43..0fa6f7f 100644 --- a/dlls/mshtml/tests/es5.js +++ b/dlls/mshtml/tests/es5.js @@ -17,6 +17,14 @@ */
var JS_E_PROP_DESC_MISMATCH = 0x800a01bd; +var JS_E_NUMBER_EXPECTED = 0x800a1389; +var JS_E_FUNCTION_EXPECTED = 0x800a138a; +var JS_E_DATE_EXPECTED = 0x800a138e; +var JS_E_OBJECT_EXPECTED = 0x800a138f; +var JS_E_BOOLEAN_EXPECTED = 0x800a1392; +var JS_E_VBARRAY_EXPECTED = 0x800a1395; +var JS_E_ENUMERATOR_EXPECTED = 0x800a1397; +var JS_E_REGEXP_EXPECTED = 0x800a1398; var JS_E_INVALID_WRITABLE_PROP_DESC = 0x800a13ac; var JS_E_NONCONFIGURABLE_REDEFINED = 0x800a13d6; var JS_E_NONWRITABLE_MODIFIED = 0x800a13d7; @@ -1222,6 +1230,51 @@ sync_test("isFrozen", function() { ok(Object.isExtensible(o) === false, "o is extensible"); });
+sync_test("builtin_context", function() { + var tests = [ + [ "Array.map", JS_E_OBJECT_EXPECTED, function(ctx) { Array.prototype.map.call(ctx, function(a, b) {}); } ], + [ "Array.sort", JS_E_OBJECT_EXPECTED, function(ctx) { Array.prototype.sort.call(ctx); } ], + [ "Boolean.toString", JS_E_BOOLEAN_EXPECTED, function(ctx) { Boolean.prototype.toString.call(ctx); } ], + [ "Date.getTime", JS_E_DATE_EXPECTED, function(ctx) { Date.prototype.getTime.call(ctx); } ], + [ "Date.toGMTString", JS_E_DATE_EXPECTED, function(ctx) { Date.prototype.toGMTString.call(ctx); } ], + [ "Enumerator.item", JS_E_ENUMERATOR_EXPECTED, function(ctx) { Enumerator.prototype.item.call(ctx); } ], + [ "Error.toString", JS_E_OBJECT_EXPECTED, function(ctx) { Error.prototype.toString.call(ctx); } ], + [ "Function.call", JS_E_FUNCTION_EXPECTED, function(ctx) { Function.prototype.call.call(ctx, function() {}); } ], + [ "Map.clear", JS_E_OBJECT_EXPECTED, function(ctx) { Map.prototype.clear.call(ctx); } ], + [ "Number.toFixed", JS_E_NUMBER_EXPECTED, function(ctx) { Number.prototype.toFixed.call(ctx); } ], + [ "Object.isPrototypeOf", JS_E_OBJECT_EXPECTED, function(ctx) { Object.prototype.isPrototypeOf.call(ctx, Object); } ], + [ "RegExp.exec", JS_E_REGEXP_EXPECTED, function(ctx) { RegExp.prototype.exec.call(ctx, "foobar"); } ], + [ "String.search", JS_E_OBJECT_EXPECTED, function(ctx) { String.prototype.search.call(ctx, /foobar/g); } ], + [ "String.trim", JS_E_OBJECT_EXPECTED, function(ctx) { String.prototype.trim.call(ctx); } ], + [ "VBArray.dimensions", JS_E_VBARRAY_EXPECTED, function(ctx) { VBArray.prototype.dimensions.call(ctx); } ] + ]; + + /* make global object suitable for some calls */ + window[0] = "foo"; + window[1] = "bar"; + window.length = 2; + + for(var i = 0; i < tests.length; i++) { + try { + tests[i][2](null); + ok(false, "expected exception calling " + tests[i][0] + " with null context"); + }catch(ex) { + var n = ex.number >>> 0; /* make it unsigned like HRESULT */ + ok(n === tests[i][1], tests[i][0] + " with null context exception code = " + n); + } + try { + tests[i][2](undefined); + ok(false, "expected exception calling " + tests[i][0] + " with undefined context"); + }catch(ex) { + var n = ex.number >>> 0; + ok(n === tests[i][1], tests[i][0] + " with undefined context exception code = " + n); + } + } + + var obj = (function() { return this; }).call(null); + ok(obj === window, "obj = " + obj); +}); + sync_test("head_setter", function() { document.head = ""; ok(typeof(document.head) === "object", "typeof(document.head) = " + typeof(document.head));
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/jscript/object.c | 5 ++++- dlls/mshtml/tests/documentmode.js | 2 +- dlls/mshtml/tests/es5.js | 1 - 3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/jscript/object.c b/dlls/jscript/object.c index 3b5a1f8..0f5f2c1 100644 --- a/dlls/jscript/object.c +++ b/dlls/jscript/object.c @@ -57,7 +57,10 @@ static HRESULT Object_toString(script_ctx_t *ctx, jsval_t vthis, WORD flags, uns TRACE("\n");
if(is_undefined(vthis) || is_null(vthis)) { - str = L"[object Object]"; + if(ctx->version < SCRIPTLANGUAGEVERSION_ES5) + str = L"[object Object]"; + else + str = is_null(vthis) ? L"[object Null]" : L"[object Object]"; goto set_output; }
diff --git a/dlls/mshtml/tests/documentmode.js b/dlls/mshtml/tests/documentmode.js index ddcb738..243a8fa 100644 --- a/dlls/mshtml/tests/documentmode.js +++ b/dlls/mshtml/tests/documentmode.js @@ -1243,7 +1243,7 @@ sync_test("elem_attr", function() { r = elem.removeAttribute("ondblclick"); ok(r === (v < 8 ? false : (v < 9 ? true : undefined)), "ondblclick removeAttribute returned " + r); r = Object.prototype.toString.call(elem.ondblclick); - todo_wine_if(v >= 9). + todo_wine_if(v >= 11). ok(r === (v < 8 ? "[object Array]" : (v < 9 ? "[object Object]" : (v < 11 ? "[object Null]" : "[object Function]"))), "removed ondblclick Object.toString returned " + r);
diff --git a/dlls/mshtml/tests/es5.js b/dlls/mshtml/tests/es5.js index 0fa6f7f..98d1430 100644 --- a/dlls/mshtml/tests/es5.js +++ b/dlls/mshtml/tests/es5.js @@ -805,7 +805,6 @@ sync_test("toString", function() { todo_wine. ok(tmp === "[object Window]", "toString.call(null) = " + tmp); tmp = Object.prototype.toString.call(null); - todo_wine. ok(tmp === "[object Null]", "toString.call(null) = " + tmp); tmp = Object.prototype.toString.call(undefined); todo_wine.
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=110737
Your paranoid android.
=== w10pro64 (testbot log) ===
WineRunTask.pl:error: The previous 1 run(s) terminated abnormally
Signed-off-by: Jacek Caban jacek@codeweavers.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com ---
For ES5 and above, we convert it to object in InterpretedFunction_call, because we don't support strict mode yet. For earlier versions, conversion is done in apply/call themselves, as quoted above.
dlls/jscript/function.c | 70 +++++++++++++++++++++++---------------- dlls/jscript/tests/api.js | 8 +++++ dlls/mshtml/tests/es5.js | 4 +++ 3 files changed, 54 insertions(+), 28 deletions(-)
diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c index e0b7310..fc8a85c 100644 --- a/dlls/jscript/function.c +++ b/dlls/jscript/function.c @@ -35,7 +35,7 @@ typedef struct { } FunctionInstance;
struct _function_vtbl_t { - HRESULT (*call)(script_ctx_t*,FunctionInstance*,IDispatch*,unsigned,unsigned,jsval_t*,jsval_t*); + HRESULT (*call)(script_ctx_t*,FunctionInstance*,jsval_t,unsigned,unsigned,jsval_t*,jsval_t*); HRESULT (*toString)(FunctionInstance*,jsstr_t**); function_code_t* (*get_code)(FunctionInstance*); void (*destructor)(FunctionInstance*); @@ -256,7 +256,7 @@ HRESULT Function_invoke(jsdisp_t *func_this, IDispatch *jsthis, WORD flags, unsi assert(is_class(func_this, JSCLASS_FUNCTION)); function = function_from_jsdisp(func_this);
- return function->vtbl->call(function->dispex.ctx, function, jsthis, flags, argc, argv, r); + return function->vtbl->call(function->dispex.ctx, function, jsval_disp(jsthis), flags, argc, argv, r); }
static HRESULT Function_get_length(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) @@ -328,10 +328,10 @@ static HRESULT array_to_args(script_ctx_t *ctx, jsdisp_t *arg_array, unsigned *a
static HRESULT Function_apply(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r) { + jsval_t this_val = jsval_undefined(); FunctionInstance *function; jsval_t *args = NULL; unsigned i, cnt = 0; - IDispatch *this_obj = NULL; HRESULT hres = S_OK;
TRACE("\n"); @@ -340,10 +340,16 @@ static HRESULT Function_apply(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsi return JS_E_FUNCTION_EXPECTED;
if(argc) { - if(!is_undefined(argv[0]) && !is_null(argv[0])) { + if(ctx->version < SCRIPTLANGUAGEVERSION_ES5 && !is_undefined(argv[0]) && !is_null(argv[0])) { + IDispatch *this_obj; hres = to_object(ctx, argv[0], &this_obj); if(FAILED(hres)) return hres; + this_val = jsval_disp(this_obj); + }else { + hres = jsval_copy(argv[0], &this_val); + if(FAILED(hres)) + return hres; } }
@@ -370,10 +376,11 @@ static HRESULT Function_apply(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsi
if(SUCCEEDED(hres)) { if(function) { - hres = function->vtbl->call(ctx, function, this_obj, flags, cnt, args, r); + hres = function->vtbl->call(ctx, function, this_val, flags, cnt, args, r); }else { jsval_t res; - hres = disp_call_value(ctx, get_object(vthis), this_obj, DISPATCH_METHOD, cnt, args, &res); + hres = disp_call_value(ctx, get_object(vthis), is_object_instance(this_val) ? get_object(this_val) : NULL, + DISPATCH_METHOD, cnt, args, &res); if(SUCCEEDED(hres)) { if(r) *r = res; @@ -383,8 +390,7 @@ static HRESULT Function_apply(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsi } }
- if(this_obj) - IDispatch_Release(this_obj); + jsval_release(this_val); for(i=0; i < cnt; i++) jsval_release(args[i]); heap_free(args); @@ -394,8 +400,8 @@ static HRESULT Function_apply(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsi static HRESULT Function_call(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned argc, jsval_t *argv, jsval_t *r) { + jsval_t this_val = jsval_undefined(); FunctionInstance *function; - IDispatch *this_obj = NULL; unsigned cnt = 0; HRESULT hres;
@@ -405,19 +411,23 @@ static HRESULT Function_call(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsig return JS_E_FUNCTION_EXPECTED;
if(argc) { - if(!is_undefined(argv[0]) && !is_null(argv[0])) { + if(ctx->version < SCRIPTLANGUAGEVERSION_ES5 && !is_undefined(argv[0]) && !is_null(argv[0])) { + IDispatch *this_obj; hres = to_object(ctx, argv[0], &this_obj); if(FAILED(hres)) return hres; + this_val = jsval_disp(this_obj); + }else { + hres = jsval_copy(argv[0], &this_val); + if(FAILED(hres)) + return hres; } - cnt = argc-1; }
- hres = function->vtbl->call(ctx, function, this_obj, flags, cnt, argv + 1, r); + hres = function->vtbl->call(ctx, function, this_val, flags, cnt, argv + 1, r);
- if(this_obj) - IDispatch_Release(this_obj); + jsval_release(this_val); return hres; }
@@ -469,7 +479,7 @@ HRESULT Function_value(script_ctx_t *ctx, jsval_t vthis, WORD flags, unsigned ar return E_FAIL; }
- return function->vtbl->call(ctx, function, NULL, flags, argc, argv, r); + return function->vtbl->call(ctx, function, vthis, flags, argc, argv, r); }
HRESULT Function_get_value(script_ctx_t *ctx, jsdisp_t *jsthis, jsval_t *r) @@ -590,16 +600,10 @@ static HRESULT create_function(script_ctx_t *ctx, const builtin_info_t *builtin_ return S_OK; }
-static HRESULT NativeFunction_call(script_ctx_t *ctx, FunctionInstance *func, IDispatch *this_disp, unsigned flags, +static HRESULT NativeFunction_call(script_ctx_t *ctx, FunctionInstance *func, jsval_t vthis, unsigned flags, unsigned argc, jsval_t *argv, jsval_t *r) { NativeFunction *function = (NativeFunction*)func; - jsval_t vthis; - - if(this_disp) - vthis = jsval_disp(this_disp); - else - vthis = jsval_null();
return function->proc(ctx, vthis, flags & ~DISPATCH_JSCRIPT_INTERNAL_MASK, argc, argv, r); } @@ -698,12 +702,13 @@ HRESULT create_builtin_constructor(script_ctx_t *ctx, builtin_invoke_t value_pro return S_OK; }
-static HRESULT InterpretedFunction_call(script_ctx_t *ctx, FunctionInstance *func, IDispatch *this_obj, unsigned flags, +static HRESULT InterpretedFunction_call(script_ctx_t *ctx, FunctionInstance *func, jsval_t vthis, unsigned flags, unsigned argc, jsval_t *argv, jsval_t *r) { InterpretedFunction *function = (InterpretedFunction*)func; - jsdisp_t *new_obj = NULL; + IDispatch *this_obj = NULL; DWORD exec_flags = 0; + jsdisp_t *new_obj; HRESULT hres;
TRACE("%p\n", function); @@ -718,6 +723,14 @@ static HRESULT InterpretedFunction_call(script_ctx_t *ctx, FunctionInstance *fun if(FAILED(hres)) return hres; this_obj = to_disp(new_obj); + }else if(is_object_instance(vthis)) { + this_obj = get_object(vthis); + if(this_obj) + IDispatch_AddRef(this_obj); + }else if(ctx->version >= SCRIPTLANGUAGEVERSION_ES5 && !is_undefined(vthis) && !is_null(vthis)) { + hres = to_object(ctx, vthis, &this_obj); + if(FAILED(hres)) + return hres; }
if(flags & DISPATCH_JSCRIPT_CALLEREXECSSOURCE) @@ -726,8 +739,8 @@ static HRESULT InterpretedFunction_call(script_ctx_t *ctx, FunctionInstance *fun exec_flags |= EXEC_CONSTRUCTOR; hres = exec_source(ctx, exec_flags, function->code, function->func_code, function->scope_chain, this_obj, &function->function.dispex, argc, argv, r); - if(new_obj) - jsdisp_release(new_obj); + if(this_obj) + IDispatch_Release(this_obj); return hres; }
@@ -801,7 +814,7 @@ HRESULT create_source_function(script_ctx_t *ctx, bytecode_t *code, function_cod return S_OK; }
-static HRESULT BindFunction_call(script_ctx_t *ctx, FunctionInstance *func, IDispatch *this_obj, unsigned flags, +static HRESULT BindFunction_call(script_ctx_t *ctx, FunctionInstance *func, jsval_t vthis, unsigned flags, unsigned argc, jsval_t *argv, jsval_t *r) { BindFunction *function = (BindFunction*)func; @@ -823,7 +836,8 @@ static HRESULT BindFunction_call(script_ctx_t *ctx, FunctionInstance *func, IDis memcpy(call_args + function->argc, argv, argc * sizeof(*call_args)); }
- hres = function->target->vtbl->call(ctx, function->target, function->this, flags, call_argc, call_args, r); + hres = function->target->vtbl->call(ctx, function->target, jsval_disp(function->this), + flags, call_argc, call_args, r);
heap_free(call_args); return hres; diff --git a/dlls/jscript/tests/api.js b/dlls/jscript/tests/api.js index 44e0eaa..8e2b0d6 100644 --- a/dlls/jscript/tests/api.js +++ b/dlls/jscript/tests/api.js @@ -3104,6 +3104,14 @@ ok(String.length == 1, "String.length = " + String.length); ok(r === "[object Error]", "Error.toString with undefined context returned " + r); r = String.prototype.slice.call(null, 1, 3); ok(r === "ul", "String.slice with null context returned " + r); + r = String.prototype.slice.call(undefined, 2, 5); + ok(r === "def", "String.slice with undefined context returned " + r); + r = (function() { return this; }).call(null); + ok(r === test, "wrong 'this' of function with null context"); + r = (function() { return this; }).call(undefined); + ok(r === test, "wrong 'this' of function with undefined context"); + r = (function() { return this; }).call(42); + ok(r.valueOf() === 42, "'this' of function with 42 context = " + r); })();
var tmp = createArray(); diff --git a/dlls/mshtml/tests/es5.js b/dlls/mshtml/tests/es5.js index 98d1430..857d47d 100644 --- a/dlls/mshtml/tests/es5.js +++ b/dlls/mshtml/tests/es5.js @@ -1272,6 +1272,10 @@ sync_test("builtin_context", function() {
var obj = (function() { return this; }).call(null); ok(obj === window, "obj = " + obj); + var obj = (function() { return this; }).call(undefined); + ok(obj === window, "obj = " + obj); + obj = (function() { return this; }).call(42); + ok(obj.valueOf() === 42, "obj = " + obj); });
sync_test("head_setter", function() {
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=110738
Your paranoid android.
=== w10pro64_ja (64 bit report) ===
mshtml: htmldoc.c:2541: Test failed: unexpected call UpdateUI htmldoc.c:2853: Test failed: unexpected call Exec_UPDATECOMMANDS
=== w10pro64_zh_CN (64 bit report) ===
mshtml: htmldoc.c:2541: Test failed: unexpected call UpdateUI htmldoc.c:2853: Test failed: unexpected call Exec_UPDATECOMMANDS htmldoc.c:350: Test failed: expected Exec_SETTITLE htmldoc.c:2859: Test failed: unexpected call Exec_SETTITLE
Signed-off-by: Jacek Caban jacek@codeweavers.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/jscript/object.c | 2 +- dlls/mshtml/tests/es5.js | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/dlls/jscript/object.c b/dlls/jscript/object.c index 0f5f2c1..c01fbcc 100644 --- a/dlls/jscript/object.c +++ b/dlls/jscript/object.c @@ -60,7 +60,7 @@ static HRESULT Object_toString(script_ctx_t *ctx, jsval_t vthis, WORD flags, uns if(ctx->version < SCRIPTLANGUAGEVERSION_ES5) str = L"[object Object]"; else - str = is_null(vthis) ? L"[object Null]" : L"[object Object]"; + str = is_null(vthis) ? L"[object Null]" : L"[object Undefined]"; goto set_output; }
diff --git a/dlls/mshtml/tests/es5.js b/dlls/mshtml/tests/es5.js index 857d47d..6e92fb6 100644 --- a/dlls/mshtml/tests/es5.js +++ b/dlls/mshtml/tests/es5.js @@ -807,10 +807,8 @@ sync_test("toString", function() { tmp = Object.prototype.toString.call(null); ok(tmp === "[object Null]", "toString.call(null) = " + tmp); tmp = Object.prototype.toString.call(undefined); - todo_wine. ok(tmp === "[object Undefined]", "toString.call(undefined) = " + tmp); tmp = Object.prototype.toString.call(); - todo_wine. ok(tmp === "[object Undefined]", "toString.call() = " + tmp);
obj = Object.create(null);
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=110739
Your paranoid android.
=== w1064_tsign (32 bit report) ===
mshtml: htmldoc.c:2541: Test failed: unexpected call UpdateUI htmldoc.c:2853: Test failed: unexpected call Exec_UPDATECOMMANDS htmldoc.c:350: Test failed: expected Exec_SETTITLE htmldoc.c:2859: Test failed: unexpected call Exec_SETTITLE
=== w10pro64_ar (testbot log) ===
WineRunTask.pl:error: The previous 1 run(s) terminated abnormally
=== w10pro64_he (64 bit report) ===
mshtml: htmldoc.c:2541: Test failed: unexpected call UpdateUI htmldoc.c:2853: Test failed: unexpected call Exec_UPDATECOMMANDS
Signed-off-by: Jacek Caban jacek@codeweavers.com