• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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