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