Bug 1892041 - Part 2: Update test262. r=spidermonkey-reviewers,dminor
[gecko.git] / js / src / tests / test262 / built-ins / BigInt / asIntN / bigint-tobigint-errors.js
blobec4b9c273fb403a413456430293ee9384b017acb
1 // Copyright (C) 2017 Josh Wolfe. All rights reserved.
2 // This code is governed by the BSD license found in the LICENSE file.
3 /*---
4 description: BigInt.asIntN type coercion for bigint parameter
5 esid: sec-bigint.asintn
6 info: |
7   BigInt.asIntN ( bits, bigint )
9   2. Let bigint ? ToBigInt(bigint).
10 features: [BigInt, computed-property-names, Symbol, Symbol.toPrimitive]
11 ---*/
12 assert.sameValue(typeof BigInt, 'function');
13 assert.sameValue(typeof BigInt.asIntN, 'function');
15 assert.throws(TypeError, function () {
16   BigInt.asIntN();
17 }, "ToBigInt: no argument => undefined => TypeError");
18 assert.throws(TypeError, function () {
19   BigInt.asIntN(0);
20 }, "ToBigInt: no argument => undefined => TypeError");
22 assert.throws(TypeError, function() {
23   BigInt.asIntN(0, undefined);
24 }, "ToBigInt: undefined => TypeError");
25 assert.throws(TypeError, function() {
26   BigInt.asIntN(0, {
27     [Symbol.toPrimitive]: function() {
28       return undefined;
29     }
30   });
31 }, "ToBigInt: @@toPrimitive => undefined => TypeError");
32 assert.throws(TypeError, function() {
33   BigInt.asIntN(0, {
34     valueOf: function() {
35       return undefined;
36     }
37   });
38 }, "ToBigInt: valueOf => undefined => TypeError");
39 assert.throws(TypeError, function() {
40   BigInt.asIntN(0, {
41     toString: function() {
42       return undefined;
43     }
44   });
45 }, "ToBigInt: toString => undefined => TypeError");
46 assert.throws(TypeError, function() {
47   BigInt.asIntN(0, null);
48 }, "ToBigInt: null => TypeError");
49 assert.throws(TypeError, function() {
50   BigInt.asIntN(0, {
51     [Symbol.toPrimitive]: function() {
52       return null;
53     }
54   });
55 }, "ToBigInt: @@toPrimitive => null => TypeError");
56 assert.throws(TypeError, function() {
57   BigInt.asIntN(0, {
58     valueOf: function() {
59       return null;
60     }
61   });
62 }, "ToBigInt: valueOf => null => TypeError");
63 assert.throws(TypeError, function() {
64   BigInt.asIntN(0, {
65     toString: function() {
66       return null;
67     }
68   });
69 }, "ToBigInt: toString => null => TypeError");
70 assert.throws(TypeError, function() {
71   BigInt.asIntN(0, 0);
72 }, "ToBigInt: Number => TypeError");
73 assert.throws(TypeError, function() {
74   BigInt.asIntN(0, Object(0));
75 }, "ToBigInt: unbox object with internal slot => Number => TypeError");
76 assert.throws(TypeError, function() {
77   BigInt.asIntN(0, {
78     [Symbol.toPrimitive]: function() {
79       return 0;
80     }
81   });
82 }, "ToBigInt: @@toPrimitive => Number => TypeError");
83 assert.throws(TypeError, function() {
84   BigInt.asIntN(0, {
85     valueOf: function() {
86       return 0;
87     }
88   });
89 }, "ToBigInt: valueOf => Number => TypeError");
90 assert.throws(TypeError, function() {
91   BigInt.asIntN(0, {
92     toString: function() {
93       return 0;
94     }
95   });
96 }, "ToBigInt: toString => Number => TypeError");
97 assert.throws(TypeError, function() {
98   BigInt.asIntN(0, NaN);
99 }, "ToBigInt: Number => TypeError");
100 assert.throws(TypeError, function() {
101   BigInt.asIntN(0, Infinity);
102 }, "ToBigInt: Number => TypeError");
103 assert.throws(TypeError, function() {
104   BigInt.asIntN(0, Symbol("1"));
105 }, "ToBigInt: Symbol => TypeError");
106 assert.throws(TypeError, function() {
107   BigInt.asIntN(0, Object(Symbol("1")));
108 }, "ToBigInt: unbox object with internal slot => Symbol => TypeError");
109 assert.throws(TypeError, function() {
110   BigInt.asIntN(0, {
111     [Symbol.toPrimitive]: function() {
112       return Symbol("1");
113     }
114   });
115 }, "ToBigInt: @@toPrimitive => Symbol => TypeError");
116 assert.throws(TypeError, function() {
117   BigInt.asIntN(0, {
118     valueOf: function() {
119       return Symbol("1");
120     }
121   });
122 }, "ToBigInt: valueOf => Symbol => TypeError");
123 assert.throws(TypeError, function() {
124   BigInt.asIntN(0, {
125     toString: function() {
126       return Symbol("1");
127     }
128   });
129 }, "ToBigInt: toString => Symbol => TypeError");
130 assert.throws(SyntaxError, function() {
131   BigInt.asIntN(0, "a");
132 }, "ToBigInt: unparseable BigInt");
133 assert.throws(SyntaxError, function() {
134   BigInt.asIntN(0, "0b2");
135 }, "ToBigInt: unparseable BigInt binary");
136 assert.throws(SyntaxError, function() {
137   BigInt.asIntN(0, Object("0b2"));
138 }, "ToBigInt: unbox object with internal slot => unparseable BigInt binary");
139 assert.throws(SyntaxError, function() {
140   BigInt.asIntN(0, {
141     [Symbol.toPrimitive]: function() {
142       return "0b2";
143     }
144   });
145 }, "ToBigInt: @@toPrimitive => unparseable BigInt binary");
146 assert.throws(SyntaxError, function() {
147   BigInt.asIntN(0, {
148     valueOf: function() {
149       return "0b2";
150     }
151   });
152 }, "ToBigInt: valueOf => unparseable BigInt binary");
153 assert.throws(SyntaxError, function() {
154   BigInt.asIntN(0, {
155     toString: function() {
156       return "0b2";
157     }
158   });
159 }, "ToBigInt: toString => unparseable BigInt binary");
160 assert.throws(SyntaxError, function() {
161   BigInt.asIntN(0, "   0b2   ");
162 }, "ToBigInt: unparseable BigInt with leading/trailing whitespace");
163 assert.throws(SyntaxError, function() {
164   BigInt.asIntN(0, "0o8");
165 }, "ToBigInt: unparseable BigInt octal");
166 assert.throws(SyntaxError, function() {
167   BigInt.asIntN(0, "0xg");
168 }, "ToBigInt: unparseable BigInt hex");
169 assert.throws(SyntaxError, function() {
170   BigInt.asIntN(0, "1n");
171 }, "ToBigInt: unparseable BigInt due to literal suffix");
173 reportCompare(0, 0);