[runtime] Replace %to_string_fun with %_ToString.
[platform/upstream/v8.git] / test / mjsunit / messages.js
1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Flags: --stack-size=100 --harmony --harmony-reflect --harmony-regexps
6 // Flags: --harmony-simd --strong-mode
7
8 function test(f, expected, type) {
9   try {
10     f();
11   } catch (e) {
12     assertInstanceof(e, type);
13     assertEquals(expected, e.message);
14     return;
15   }
16   assertUnreachable("Exception expected");
17 }
18
19 // === Error ===
20
21 // kCyclicProto
22 test(function() {
23   var o = {};
24   o.__proto__ = o;
25 }, "Cyclic __proto__ value", Error);
26
27
28 // === TypeError ===
29
30 // kApplyNonFunction
31 test(function() {
32   Function.prototype.apply.call(1, []);
33 }, "Function.prototype.apply was called on 1, which is a number " +
34    "and not a function", TypeError);
35
36 // kArrayFunctionsOnFrozen
37 test(function() {
38   var a = [1, 2];
39   Object.freeze(a);
40   a.splice(1, 1, [1]);
41 }, "Cannot modify frozen array elements", TypeError);
42
43 // kArrayFunctionsOnSealed
44 test(function() {
45   var a = [1];
46   Object.seal(a);
47   a.shift();
48 }, "Cannot add/remove sealed array elements", TypeError);
49
50 // kCalledNonCallable
51 test(function() {
52   [].forEach(1);
53 }, "1 is not a function", TypeError);
54
55 // kCalledOnNonObject
56 test(function() {
57   Object.defineProperty(1, "x", {});
58 }, "Object.defineProperty called on non-object", TypeError);
59
60 // kCalledOnNullOrUndefined
61 test(function() {
62   Array.prototype.shift.call(null);
63 }, "Array.prototype.shift called on null or undefined", TypeError);
64
65 // kCannotPreventExtExternalArray
66 test(function() {
67   Object.preventExtensions(new Uint16Array(1));
68 }, "Cannot prevent extension of an object with external array elements", TypeError);
69
70 // kConstAssign
71 test(function() {
72   "use strict";
73   const a = 1;
74   a = 2;
75 }, "Assignment to constant variable.", TypeError);
76
77 // kCannotConvertToPrimitive
78 test(function() {
79   var o = { toString: function() { return this } };
80   [].join(o);
81 }, "Cannot convert object to primitive value", TypeError);
82
83 // kCircularStructure
84 test(function() {
85   var o = {};
86   o.o = o;
87   JSON.stringify(o);
88 }, "Converting circular structure to JSON", TypeError);
89
90 // kConstructorNotFunction
91 test(function() {
92   Uint16Array(1);
93 }, "Constructor Uint16Array requires 'new'", TypeError);
94
95 // kDataViewNotArrayBuffer
96 test(function() {
97   new DataView(1);
98 }, "First argument to DataView constructor must be an ArrayBuffer", TypeError);
99
100 // kDateType
101 test(function() {
102   Date.prototype.setYear.call({}, 1);
103 }, "this is not a Date object.", TypeError);
104
105 // kDefineDisallowed
106 test(function() {
107   "use strict";
108   var o = {};
109   Object.preventExtensions(o);
110   Object.defineProperty(o, "x", { value: 1 });
111 }, "Cannot define property:x, object is not extensible.", TypeError);
112
113 // kFirstArgumentNotRegExp
114 test(function() {
115   "a".startsWith(/a/);
116 }, "First argument to String.prototype.startsWith " +
117    "must not be a regular expression", TypeError);
118
119 // kFlagsGetterNonObject
120 test(function() {
121   Object.getOwnPropertyDescriptor(RegExp.prototype, "flags").get.call(1);
122 }, "RegExp.prototype.flags getter called on non-object 1", TypeError);
123
124 // kFunctionBind
125 test(function() {
126   Function.prototype.bind.call(1);
127 }, "Bind must be called on a function", TypeError);
128
129 // kGeneratorRunning
130 test(function() {
131   var iter;
132   function* generator() { yield iter.next(); }
133   var iter = generator();
134   iter.next();
135 }, "Generator is already running", TypeError);
136
137 // kIncompatibleMethodReceiver
138 test(function() {
139   RegExp.prototype.compile.call(RegExp.prototype);
140 }, "Method RegExp.prototype.compile called on incompatible receiver " +
141    "[object RegExp]", TypeError);
142
143 // kInstanceofFunctionExpected
144 test(function() {
145   1 instanceof 1;
146 }, "Expecting a function in instanceof check, but got 1", TypeError);
147
148 // kInstanceofNonobjectProto
149 test(function() {
150   function f() {}
151   var o = new f();
152   f.prototype = 1;
153   o instanceof f;
154 }, "Function has non-object prototype '1' in instanceof check", TypeError);
155
156 // kInvalidInOperatorUse
157 test(function() {
158   1 in 1;
159 }, "Cannot use 'in' operator to search for '1' in 1", TypeError);
160
161 // kIteratorResultNotAnObject
162 test(function() {
163   var obj = {};
164   obj[Symbol.iterator] = function() { return { next: function() { return 1 }}};
165   Array.from(obj);
166 }, "Iterator result 1 is not an object", TypeError);
167
168 // kIteratorValueNotAnObject
169 test(function() {
170   new Map([1]);
171 }, "Iterator value 1 is not an entry object", TypeError);
172
173 // kNotAPromise
174 test(function() {
175   Promise.prototype.chain.call(1);
176 }, "1 is not a promise", TypeError);
177
178 // kNotConstructor
179 test(function() {
180   new Symbol();
181 }, "Symbol is not a constructor", TypeError);
182
183 // kNotDateObject
184 test(function() {
185   Date.prototype.setHours.call(1);
186 }, "this is not a Date object.", TypeError);
187
188 // kNotGeneric
189 test(function() {
190   String.prototype.toString.call(1);
191 }, "String.prototype.toString is not generic", TypeError);
192
193 test(function() {
194   String.prototype.valueOf.call(1);
195 }, "String.prototype.valueOf is not generic", TypeError);
196
197 test(function() {
198   Boolean.prototype.toString.call(1);
199 }, "Boolean.prototype.toString is not generic", TypeError);
200
201 test(function() {
202   Boolean.prototype.valueOf.call(1);
203 }, "Boolean.prototype.valueOf is not generic", TypeError);
204
205 test(function() {
206   Number.prototype.toString.call({});
207 }, "Number.prototype.toString is not generic", TypeError);
208
209 test(function() {
210   Number.prototype.valueOf.call({});
211 }, "Number.prototype.valueOf is not generic", TypeError);
212
213 test(function() {
214   Function.prototype.toString.call(1);
215 }, "Function.prototype.toString is not generic", TypeError);
216
217 // kNotTypedArray
218 test(function() {
219   Uint16Array.prototype.forEach.call(1);
220 }, "this is not a typed array.", TypeError);
221
222 // kObjectGetterExpectingFunction
223 test(function() {
224   ({}).__defineGetter__("x", 0);
225 }, "Object.prototype.__defineGetter__: Expecting function", TypeError);
226
227 // kObjectGetterCallable
228 test(function() {
229   Object.defineProperty({}, "x", { get: 1 });
230 }, "Getter must be a function: 1", TypeError);
231
232 // kObjectNotExtensible
233 test(function() {
234   "use strict";
235   var o = {};
236   Object.freeze(o);
237   o.a = 1;
238 }, "Can't add property a, object is not extensible", TypeError);
239
240 // kObjectSetterExpectingFunction
241 test(function() {
242   ({}).__defineSetter__("x", 0);
243 }, "Object.prototype.__defineSetter__: Expecting function", TypeError);
244
245 // kObjectSetterCallable
246 test(function() {
247   Object.defineProperty({}, "x", { set: 1 });
248 }, "Setter must be a function: 1", TypeError);
249
250 // kPropertyDescObject
251 test(function() {
252   Object.defineProperty({}, "x", 1);
253 }, "Property description must be an object: 1", TypeError);
254
255 // kPropertyNotFunction
256 test(function() {
257   Set.prototype.add = 0;
258   new Set(1);
259 }, "Property 'add' of object #<Set> is not a function", TypeError);
260
261 // kProtoObjectOrNull
262 test(function() {
263   Object.setPrototypeOf({}, 1);
264 }, "Object prototype may only be an Object or null: 1", TypeError);
265
266 // kRedefineDisallowed
267 test(function() {
268   "use strict";
269   var o = {};
270   Object.defineProperty(o, "x", { value: 1, configurable: false });
271   Object.defineProperty(o, "x", { value: 2 });
272 }, "Cannot redefine property: x", TypeError);
273
274 // kReduceNoInitial
275 test(function() {
276   [].reduce(function() {});
277 }, "Reduce of empty array with no initial value", TypeError);
278
279 // kResolverNotAFunction
280 test(function() {
281   new Promise(1);
282 }, "Promise resolver 1 is not a function", TypeError);
283
284 // kStrictDeleteProperty
285 test(function() {
286   "use strict";
287   var o = {};
288   Object.defineProperty(o, "p", { value: 1, writable: false });
289   delete o.p;
290 }, "Cannot delete property 'p' of #<Object>", TypeError);
291
292 // kStrictPoisonPill
293 test(function() {
294   "use strict";
295   arguments.callee;
296 }, "'caller', 'callee', and 'arguments' properties may not be accessed on " +
297    "strict mode functions or the arguments objects for calls to them",
298    TypeError);
299
300 // kStrictReadOnlyProperty
301 test(function() {
302   "use strict";
303   (1).a = 1;
304 }, "Cannot assign to read only property 'a' of 1", TypeError);
305
306 // kStrongImplicitCast
307 test(function() {
308   "use strong";
309   "a" + 1;
310 }, "In strong mode, implicit conversions are deprecated", TypeError);
311
312 // kSymbolToString
313 test(function() {
314   "" + Symbol();
315 }, "Cannot convert a Symbol value to a string", TypeError);
316
317 // kSymbolToNumber
318 test(function() {
319   1 + Symbol();
320 }, "Cannot convert a Symbol value to a number", TypeError);
321
322 // kSimdToNumber
323 test(function() {
324   1 + SIMD.Float32x4(1, 2, 3, 4);
325 }, "Cannot convert a SIMD value to a number", TypeError);
326
327 // kUndefinedOrNullToObject
328 test(function() {
329   Array.prototype.toString.call(null);
330 }, "Cannot convert undefined or null to object", TypeError);
331
332 // kValueAndAccessor
333 test(function() {
334   Object.defineProperty({}, "x", { get: function(){}, value: 1});
335 }, "Invalid property.  A property cannot both have accessors and be " +
336    "writable or have a value, #<Object>", TypeError);
337
338 // kWithExpression
339 test(function() {
340   with (null) {}
341 }, "null has no properties", TypeError);
342
343 // kWrongArgs
344 test(function() {
345   (function() {}).apply({}, 1);
346 }, "Function.prototype.apply: Arguments list has wrong type", TypeError);
347
348 test(function() {
349   Reflect.apply(function() {}, {}, 1);
350 }, "Reflect.apply: Arguments list has wrong type", TypeError);
351
352 test(function() {
353   Reflect.construct(function() {}, 1);
354 }, "Reflect.construct: Arguments list has wrong type", TypeError);
355
356
357 // === SyntaxError ===
358
359 // kInvalidRegExpFlags
360 test(function() {
361   /a/x.test("a");
362 }, "Invalid flags supplied to RegExp constructor 'x'", SyntaxError);
363
364 // kMalformedRegExp
365 test(function() {
366   /(/.test("a");
367 }, "Invalid regular expression: /(/: Unterminated group", SyntaxError);
368
369 // kParenthesisInArgString
370 test(function() {
371   new Function(")", "");
372 }, "Function arg string contains parenthesis", SyntaxError);
373
374 // kUnexpectedEOS
375 test(function() {
376   JSON.parse("{")
377 }, "Unexpected end of input", SyntaxError);
378
379 // kUnexpectedToken
380 test(function() {
381   JSON.parse("/")
382 }, "Unexpected token /", SyntaxError);
383
384 // kUnexpectedTokenNumber
385 test(function() {
386   JSON.parse("{ 1")
387 }, "Unexpected number", SyntaxError);
388
389 // kUnexpectedTokenString
390 test(function() {
391   JSON.parse('"""')
392 }, "Unexpected string", SyntaxError);
393
394
395 // === ReferenceError ===
396
397 // kNotDefined
398 test(function() {
399   "use strict";
400   o;
401 }, "o is not defined", ReferenceError);
402
403 // === RangeError ===
404
405 // kArrayLengthOutOfRange
406 test(function() {
407   "use strict";
408   Object.defineProperty([], "length", { value: 1E100 });
409 }, "Invalid array length", RangeError);
410
411 // kInvalidArrayBufferLength
412 test(function() {
413   new ArrayBuffer(-1);
414 }, "Invalid array buffer length", RangeError);
415
416 // kInvalidArrayLength
417 test(function() {
418   [].length = -1;
419 }, "Invalid array length", RangeError);
420
421 // kInvalidCodePoint
422 test(function() {
423   String.fromCodePoint(-1);
424 }, "Invalid code point -1", RangeError);
425
426 // kInvalidCountValue
427 test(function() {
428   "a".repeat(-1);
429 }, "Invalid count value", RangeError);
430
431 // kInvalidArrayBufferLength
432 test(function() {
433   new Uint16Array(-1);
434 }, "Invalid typed array length", RangeError);
435
436 // kNormalizationForm
437 test(function() {
438   "".normalize("ABC");
439 }, "The normalization form should be one of NFC, NFD, NFKC, NFKD.", RangeError);
440
441 // kNumberFormatRange
442 test(function() {
443   Number(1).toFixed(100);
444 }, "toFixed() digits argument must be between 0 and 20", RangeError);
445
446 test(function() {
447   Number(1).toExponential(100);
448 }, "toExponential() argument must be between 0 and 20", RangeError);
449
450 // kStackOverflow
451 test(function() {
452   function f() { f(Array(1000)); }
453   f();
454 }, "Maximum call stack size exceeded", RangeError);
455
456 // kToPrecisionFormatRange
457 test(function() {
458   Number(1).toPrecision(100);
459 }, "toPrecision() argument must be between 1 and 21", RangeError);
460
461 // kToPrecisionFormatRange
462 test(function() {
463   Number(1).toString(100);
464 }, "toString() radix argument must be between 2 and 36", RangeError);
465
466
467 // === URIError ===
468
469 // kURIMalformed
470 test(function() {
471   decodeURI("%%");
472 }, "URI malformed", URIError);