//------------------------------------------------------------------------------------------------------- // Copyright (C) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. //------------------------------------------------------------------------------------------------------- var echo = WScript.Echo; function guarded_call(func) { try { func(); } catch (e) { echo(e.name + " : " + e.message); } } var testCount = 0; function scenario(title) { if (testCount > 0) { echo("\n"); } echo((testCount++) + ".", title); } scenario("Array: default"); var arr = [1, 2, , 3]; echo(arr); scenario("Array: Replaced Array.prototype.join"); Array.prototype.join = function () { return "replaced Array.prototype.join" }; echo(arr); scenario("Array: Replaced non-callable Array.prototype.join"); Array.prototype.join = 1234; // non-callable echo(arr); scenario("Object: no join"); var o = {}; guarded_call(function () { echo(Array.prototype.toString.apply(o)); }); scenario("Object: has join"); var o = { join: function () { return "o join"; } }; guarded_call(function () { echo(Array.prototype.toString.apply(o)); }); scenario("Object: non-callable join"); var o = { join: 1234 }; guarded_call(function () { echo(Array.prototype.toString.apply(o)); }); scenario("Object: no join, replaced Object.prototype.toString"); var o = {}; Object.prototype.toString = function () { return "replaced Object.prototype.toString"; } guarded_call(function () { echo(Array.prototype.toString.apply(o)); });