1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_5/Array/join-01.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,83 @@ 1.4 +/* 1.5 + * Any copyright is dedicated to the Public Domain. 1.6 + * http://creativecommons.org/licenses/publicdomain/ 1.7 + * Contributor: 1.8 + * Jeff Walden <jwalden+code@mit.edu> 1.9 + */ 1.10 + 1.11 +//----------------------------------------------------------------------------- 1.12 +print("ES5: Array.prototype.join"); 1.13 + 1.14 +/************** 1.15 + * BEGIN TEST * 1.16 + **************/ 1.17 + 1.18 +var count; 1.19 +var stringifyCounter = { toString: function() { count++; return "obj"; } }; 1.20 + 1.21 +var arr = [1, 2, 3, 4, 5]; 1.22 +assertEq(arr.join(), "1,2,3,4,5"); 1.23 +assertEq(arr.join(","), "1,2,3,4,5"); 1.24 +assertEq(arr.join(undefined), "1,2,3,4,5"); 1.25 +assertEq(arr.join(4), "142434445"); 1.26 +assertEq(arr.join(""), "12345"); 1.27 + 1.28 +count = 0; 1.29 +assertEq(arr.join(stringifyCounter), "1obj2obj3obj4obj5"); 1.30 +assertEq(count, 1); 1.31 + 1.32 +var holey = [1, 2, , 4, 5]; 1.33 +assertEq(holey.join(), "1,2,,4,5"); 1.34 +assertEq(holey.join(","), "1,2,,4,5"); 1.35 +assertEq(holey.join(undefined), "1,2,,4,5"); 1.36 +assertEq(holey.join(4), "14244445"); 1.37 + 1.38 +count = 0; 1.39 +assertEq(holey.join(stringifyCounter), "1obj2objobj4obj5"); 1.40 +assertEq(count, 1); 1.41 + 1.42 +var nully = [1, 2, 3, null, 5]; 1.43 +assertEq(nully.join(), "1,2,3,,5"); 1.44 +assertEq(nully.join(","), "1,2,3,,5"); 1.45 +assertEq(nully.join(undefined), "1,2,3,,5"); 1.46 +assertEq(nully.join(4), "14243445"); 1.47 + 1.48 +count = 0; 1.49 +assertEq(nully.join(stringifyCounter), "1obj2obj3objobj5"); 1.50 +assertEq(count, 1); 1.51 + 1.52 +var undefiney = [1, undefined, 3, 4, 5]; 1.53 +assertEq(undefiney.join(), "1,,3,4,5"); 1.54 +assertEq(undefiney.join(","), "1,,3,4,5"); 1.55 +assertEq(undefiney.join(undefined), "1,,3,4,5"); 1.56 +assertEq(undefiney.join(4), "14434445"); 1.57 + 1.58 +count = 0; 1.59 +assertEq(undefiney.join(stringifyCounter), "1objobj3obj4obj5"); 1.60 +assertEq(count, 1); 1.61 + 1.62 +var log = ''; 1.63 +arr = {length: {valueOf: function () { log += "L"; return 2; }}, 1.64 + 0: "x", 1: "z"}; 1.65 +var sep = {toString: function () { log += "S"; return "y"; }}; 1.66 +assertEq(Array.prototype.join.call(arr, sep), "xyz"); 1.67 +assertEq(log, "LS"); 1.68 + 1.69 +var funky = 1.70 + { 1.71 + toString: function() 1.72 + { 1.73 + Array.prototype[1] = "chorp"; 1.74 + Object.prototype[3] = "fnord"; 1.75 + return "funky"; 1.76 + } 1.77 + }; 1.78 +var trailingHoles = [0, funky, /* 2 */, /* 3 */,]; 1.79 +assertEq(trailingHoles.join(""), "0funkyfnord"); 1.80 + 1.81 +/******************************************************************************/ 1.82 + 1.83 +if (typeof reportCompare === "function") 1.84 + reportCompare(true, true); 1.85 + 1.86 +print("Tests complete");