1// Copyright JS Foundation and other contributors, http://js.foundation 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15var res = "".split(); 16assert (res[0] === ""); 17 18res = "foo".split(); 19assert (res[0] === "foo"); 20 21var str = "foo//bar/baz//foo"; 22res = str.split(""); 23 24assert (res.length === 17); 25for (var i = 0; i < res.length; i++) 26{ 27 assert (res[i] === str[i]); 28} 29 30res = str.split("", "foo"); 31assert (res.length === 0); 32 33res = str.split("", "4"); 34assert (res.length === 4); 35for (var i = 0; i < res.length; i++) 36{ 37 assert (res[i] === str[i]); 38} 39 40res = str.split(undefined, undefined) 41assert (res.length === 1); 42assert (res[0] === "foo//bar/baz//foo"); 43 44res = str.split("a", false); 45assert (res.length === 0); 46 47res = str.split("a", true); 48assert (res.length === 1); 49assert (res[0] === "foo//b"); 50 51res = str.split("a", NaN); 52assert (res.length === 0); 53 54res = str.split(["o"]) 55assert (res.length === 5); 56assert (res[0] === "f"); 57assert (res[1] === ""); 58assert (res[2] === "//bar/baz//f"); 59assert (res[3] === ""); 60assert (res[4] === ""); 61 62res = str.split(["o", "/"]); 63assert (res.length === 1); 64assert (res[0] === "foo//bar/baz//foo"); 65 66res = str.split("a", ["2"]); 67assert (res.length === 2); 68assert (res[0] === "foo//b"); 69assert (res[1] === "r/b"); 70 71res = str.split("a", ["2", "3"]); 72assert (res.length === 0); 73 74var obj = {x: 12, b: undefined}; 75res = str.split(obj, 4); 76assert (res.length === 1); 77assert (res[0] === "foo//bar/baz//foo"); 78 79res = str.split("o", obj); 80assert (res.length === 0); 81 82res = str.split(false, true); 83assert (res.length === 1); 84assert (res[0] === "foo//bar/baz//foo"); 85 86res = str.split(/\/\//); 87assert (res.length === 3); 88assert (res[0] === "foo"); 89assert (res[1] === "bar/baz"); 90assert (res[2] === "foo"); 91 92res = str.split(/\/\//, 1); 93assert (res.length === 1); 94assert (res[0] === "foo"); 95 96str = "fo123o12bar"; 97res = str.split(12, undefined); 98assert (res.length === 3); 99assert (res[0] === "fo"); 100assert (res[1] === "3o"); 101assert (res[2] === "bar"); 102 103str = "aaabababaab"; 104res = str.split(/aa+/); 105assert (res.length === 3); 106assert (res[0] === ""); 107assert (res[1] === "babab"); 108assert (res[2] === "b"); 109 110str = "A<B>bold</B>and<CODE>coded</CODE>"; 111res = str.split(/<(\/)?([^<>]+)>/); 112assert (res.length === 13); 113var expected = ["A", undefined, "B", "bold", "/", "B", "and", undefined, "CODE", "coded", "/", "CODE", ""]; 114for (var i = 0; i < res.length; i++) 115{ 116 assert (res[i] === expected[i]); 117} 118 119/* Check Object coercible */ 120try { 121 String.prototype.split.call(undefined, ""); 122 assert (false); 123} 124catch (e) 125{ 126 assert (e instanceof TypeError); 127} 128 129/* Check toString conversion */ 130try { 131 var obj = { toString: function() { throw new ReferenceError("foo"); } }; 132 String.prototype.split.call(obj, ""); 133 assert (false); 134} 135catch (e) 136{ 137 assert (e instanceof ReferenceError); 138 assert (e.message === "foo"); 139} 140 141/* Check Invalid RegExp */ 142try { 143 var obj = { toString: function() { throw new ReferenceError("foo"); } }; 144 "".split(obj); 145 assert (false); 146} 147catch (e) 148{ 149 assert (e instanceof ReferenceError); 150 assert (e.message === "foo"); 151} 152