michael@0: /* michael@0: * Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/licenses/publicdomain/ michael@0: * Contributor: michael@0: * Jeff Walden michael@0: */ michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: print("ES5: Array.prototype.join"); michael@0: michael@0: /************** michael@0: * BEGIN TEST * michael@0: **************/ michael@0: michael@0: var count; michael@0: var stringifyCounter = { toString: function() { count++; return "obj"; } }; michael@0: michael@0: var arr = [1, 2, 3, 4, 5]; michael@0: assertEq(arr.join(), "1,2,3,4,5"); michael@0: assertEq(arr.join(","), "1,2,3,4,5"); michael@0: assertEq(arr.join(undefined), "1,2,3,4,5"); michael@0: assertEq(arr.join(4), "142434445"); michael@0: assertEq(arr.join(""), "12345"); michael@0: michael@0: count = 0; michael@0: assertEq(arr.join(stringifyCounter), "1obj2obj3obj4obj5"); michael@0: assertEq(count, 1); michael@0: michael@0: var holey = [1, 2, , 4, 5]; michael@0: assertEq(holey.join(), "1,2,,4,5"); michael@0: assertEq(holey.join(","), "1,2,,4,5"); michael@0: assertEq(holey.join(undefined), "1,2,,4,5"); michael@0: assertEq(holey.join(4), "14244445"); michael@0: michael@0: count = 0; michael@0: assertEq(holey.join(stringifyCounter), "1obj2objobj4obj5"); michael@0: assertEq(count, 1); michael@0: michael@0: var nully = [1, 2, 3, null, 5]; michael@0: assertEq(nully.join(), "1,2,3,,5"); michael@0: assertEq(nully.join(","), "1,2,3,,5"); michael@0: assertEq(nully.join(undefined), "1,2,3,,5"); michael@0: assertEq(nully.join(4), "14243445"); michael@0: michael@0: count = 0; michael@0: assertEq(nully.join(stringifyCounter), "1obj2obj3objobj5"); michael@0: assertEq(count, 1); michael@0: michael@0: var undefiney = [1, undefined, 3, 4, 5]; michael@0: assertEq(undefiney.join(), "1,,3,4,5"); michael@0: assertEq(undefiney.join(","), "1,,3,4,5"); michael@0: assertEq(undefiney.join(undefined), "1,,3,4,5"); michael@0: assertEq(undefiney.join(4), "14434445"); michael@0: michael@0: count = 0; michael@0: assertEq(undefiney.join(stringifyCounter), "1objobj3obj4obj5"); michael@0: assertEq(count, 1); michael@0: michael@0: var log = ''; michael@0: arr = {length: {valueOf: function () { log += "L"; return 2; }}, michael@0: 0: "x", 1: "z"}; michael@0: var sep = {toString: function () { log += "S"; return "y"; }}; michael@0: assertEq(Array.prototype.join.call(arr, sep), "xyz"); michael@0: assertEq(log, "LS"); michael@0: michael@0: var funky = michael@0: { michael@0: toString: function() michael@0: { michael@0: Array.prototype[1] = "chorp"; michael@0: Object.prototype[3] = "fnord"; michael@0: return "funky"; michael@0: } michael@0: }; michael@0: var trailingHoles = [0, funky, /* 2 */, /* 3 */,]; michael@0: assertEq(trailingHoles.join(""), "0funkyfnord"); michael@0: michael@0: /******************************************************************************/ michael@0: michael@0: if (typeof reportCompare === "function") michael@0: reportCompare(true, true); michael@0: michael@0: print("Tests complete");