|
1 /* |
|
2 * Any copyright is dedicated to the Public Domain. |
|
3 * http://creativecommons.org/licenses/publicdomain/ |
|
4 * Contributor: |
|
5 * Jeff Walden <jwalden+code@mit.edu> |
|
6 */ |
|
7 |
|
8 //----------------------------------------------------------------------------- |
|
9 print("ES5: Array.prototype.join"); |
|
10 |
|
11 /************** |
|
12 * BEGIN TEST * |
|
13 **************/ |
|
14 |
|
15 var count; |
|
16 var stringifyCounter = { toString: function() { count++; return "obj"; } }; |
|
17 |
|
18 var arr = [1, 2, 3, 4, 5]; |
|
19 assertEq(arr.join(), "1,2,3,4,5"); |
|
20 assertEq(arr.join(","), "1,2,3,4,5"); |
|
21 assertEq(arr.join(undefined), "1,2,3,4,5"); |
|
22 assertEq(arr.join(4), "142434445"); |
|
23 assertEq(arr.join(""), "12345"); |
|
24 |
|
25 count = 0; |
|
26 assertEq(arr.join(stringifyCounter), "1obj2obj3obj4obj5"); |
|
27 assertEq(count, 1); |
|
28 |
|
29 var holey = [1, 2, , 4, 5]; |
|
30 assertEq(holey.join(), "1,2,,4,5"); |
|
31 assertEq(holey.join(","), "1,2,,4,5"); |
|
32 assertEq(holey.join(undefined), "1,2,,4,5"); |
|
33 assertEq(holey.join(4), "14244445"); |
|
34 |
|
35 count = 0; |
|
36 assertEq(holey.join(stringifyCounter), "1obj2objobj4obj5"); |
|
37 assertEq(count, 1); |
|
38 |
|
39 var nully = [1, 2, 3, null, 5]; |
|
40 assertEq(nully.join(), "1,2,3,,5"); |
|
41 assertEq(nully.join(","), "1,2,3,,5"); |
|
42 assertEq(nully.join(undefined), "1,2,3,,5"); |
|
43 assertEq(nully.join(4), "14243445"); |
|
44 |
|
45 count = 0; |
|
46 assertEq(nully.join(stringifyCounter), "1obj2obj3objobj5"); |
|
47 assertEq(count, 1); |
|
48 |
|
49 var undefiney = [1, undefined, 3, 4, 5]; |
|
50 assertEq(undefiney.join(), "1,,3,4,5"); |
|
51 assertEq(undefiney.join(","), "1,,3,4,5"); |
|
52 assertEq(undefiney.join(undefined), "1,,3,4,5"); |
|
53 assertEq(undefiney.join(4), "14434445"); |
|
54 |
|
55 count = 0; |
|
56 assertEq(undefiney.join(stringifyCounter), "1objobj3obj4obj5"); |
|
57 assertEq(count, 1); |
|
58 |
|
59 var log = ''; |
|
60 arr = {length: {valueOf: function () { log += "L"; return 2; }}, |
|
61 0: "x", 1: "z"}; |
|
62 var sep = {toString: function () { log += "S"; return "y"; }}; |
|
63 assertEq(Array.prototype.join.call(arr, sep), "xyz"); |
|
64 assertEq(log, "LS"); |
|
65 |
|
66 var funky = |
|
67 { |
|
68 toString: function() |
|
69 { |
|
70 Array.prototype[1] = "chorp"; |
|
71 Object.prototype[3] = "fnord"; |
|
72 return "funky"; |
|
73 } |
|
74 }; |
|
75 var trailingHoles = [0, funky, /* 2 */, /* 3 */,]; |
|
76 assertEq(trailingHoles.join(""), "0funkyfnord"); |
|
77 |
|
78 /******************************************************************************/ |
|
79 |
|
80 if (typeof reportCompare === "function") |
|
81 reportCompare(true, true); |
|
82 |
|
83 print("Tests complete"); |