OLD | NEW |
1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 2008 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 26 matching lines...) Expand all Loading... |
37 // Create a cycle. | 37 // Create a cycle. |
38 a.push(a); | 38 a.push(a); |
39 assertEquals('1,2345,6', a.join('')); | 39 assertEquals('1,2345,6', a.join('')); |
40 assertEquals('1,2*3*4*5,6*', a.join('*')); | 40 assertEquals('1,2*3*4*5,6*', a.join('*')); |
41 assertEquals('1,2**3**4**5,6**', a.join('**')); | 41 assertEquals('1,2**3**4**5,6**', a.join('**')); |
42 assertEquals('1,2****3****4****5,6****', a.join('****')); | 42 assertEquals('1,2****3****4****5,6****', a.join('****')); |
43 assertEquals('1,2********3********4********5,6********', a.join('********')); | 43 assertEquals('1,2********3********4********5,6********', a.join('********')); |
44 assertEquals('1,2**********3**********4**********5,6**********', a.join('*******
***')); | 44 assertEquals('1,2**********3**********4**********5,6**********', a.join('*******
***')); |
45 | 45 |
46 // Replace array.prototype.toString. | 46 // Replace array.prototype.toString. |
47 Array.prototype.toString = function() { return "array"; } | 47 var oldToString = Array.prototype.toString; |
| 48 Array.prototype.toString = function() { return "array"; }; |
48 assertEquals('array34arrayarray', a.join('')); | 49 assertEquals('array34arrayarray', a.join('')); |
49 assertEquals('array*3*4*array*array', a.join('*')); | 50 assertEquals('array*3*4*array*array', a.join('*')); |
50 assertEquals('array**3**4**array**array', a.join('**')); | 51 assertEquals('array**3**4**array**array', a.join('**')); |
51 assertEquals('array****3****4****array****array', a.join('****')); | 52 assertEquals('array****3****4****array****array', a.join('****')); |
52 assertEquals('array********3********4********array********array', a.join('******
**')); | 53 assertEquals('array********3********4********array********array', a.join('******
**')); |
53 assertEquals('array**********3**********4**********array**********array', a.join
('**********')); | 54 assertEquals('array**********3**********4**********array**********array', a.join
('**********')); |
54 | 55 |
55 Array.prototype.toString = function() { throw 42; } | 56 Array.prototype.toString = function() { throw 42; }; |
56 assertThrows("a.join('')"); | 57 assertThrows("a.join('')"); |
57 assertThrows("a.join('*')"); | 58 assertThrows("a.join('*')"); |
58 assertThrows("a.join('**')"); | 59 assertThrows("a.join('**')"); |
59 assertThrows("a.join('****')"); | 60 assertThrows("a.join('****')"); |
60 assertThrows("a.join('********')"); | 61 assertThrows("a.join('********')"); |
61 assertThrows("a.join('**********')"); | 62 assertThrows("a.join('**********')"); |
62 | 63 |
63 Array.prototype.toString = function() { return "array"; } | 64 Array.prototype.toString = function() { return "array"; }; |
64 assertEquals('array34arrayarray', a.join('')); | 65 assertEquals('array34arrayarray', a.join('')); |
65 assertEquals('array*3*4*array*array', a.join('*')); | 66 assertEquals('array*3*4*array*array', a.join('*')); |
66 assertEquals('array**3**4**array**array', a.join('**')); | 67 assertEquals('array**3**4**array**array', a.join('**')); |
67 assertEquals('array****3****4****array****array', a.join('****')); | 68 assertEquals('array****3****4****array****array', a.join('****')); |
68 assertEquals('array********3********4********array********array', a.join('******
**')); | 69 assertEquals('array********3********4********array********array', a.join('******
**')); |
69 assertEquals('array**********3**********4**********array**********array', a.join
('**********')); | 70 assertEquals('array**********3**********4**********array**********array', a.join
('**********')); |
70 | 71 |
| 72 // Restore original toString. |
| 73 delete Array.prototype.toString; |
| 74 if (Array.prototype.toString != oldToString) { |
| 75 Array.prototype.toString = oldToString; |
| 76 } |
| 77 |
| 78 var a = new Array(123123123); |
| 79 assertEquals(123123122, String(a).length); |
| 80 assertEquals(123123122, a.join(",").length); |
| 81 assertEquals(246246244, a.join("oo").length); |
| 82 |
| 83 a = new Array(Math.pow(2,32) - 1); // Max length. |
| 84 assertEquals("", a.join("")); |
| 85 a[123123123] = "o"; |
| 86 a[1255215215] = "p"; |
| 87 assertEquals("op", a.join("")); |
| 88 |
| 89 a = new Array(100001); |
| 90 for (var i = 0; i < a.length; i++) a[i] = undefined; |
| 91 a[5] = "ab"; |
| 92 a[90000] = "cd"; |
| 93 assertEquals("abcd", a.join("")); // Must not throw. |
OLD | NEW |