Skip to content

Commit eeca647

Browse files
committed
[Tests] add tests from tc39/test262#4390
1 parent e32b965 commit eeca647

2 files changed

Lines changed: 139 additions & 0 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
"eslint": "=8.8.0",
6868
"evalmd": "^0.0.19",
6969
"functions-have-names": "^1.2.3",
70+
"has-symbols": "^1.1.0",
7071
"in-publish": "^2.0.1",
7172
"npmignore": "^0.3.1",
7273
"nyc": "^10.3.2",

test/tests.js

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
var functionsHaveNames = require('functions-have-names')();
44
var boundFunctionsHaveNames = require('functions-have-names').boundFunctionsHaveNames();
55
var hasPropertyDescriptors = require('has-property-descriptors')();
6+
var hasSymbols = require('has-symbols/shams')();
67

78
module.exports = function (SuppressedError, t) {
89
t.test('constructor', function (st) {
@@ -65,4 +66,141 @@ module.exports = function (SuppressedError, t) {
6566

6667
st.end();
6768
});
69+
70+
t.test('test262: test/built-ins/NativeErrors/SuppressedError/message-method-prop-cast', function (st) {
71+
/* eslint no-restricted-syntax: 0 */
72+
73+
var case1 = new SuppressedError(undefined, undefined, 42);
74+
st.equal(case1.message, '42', 'message is "42"');
75+
for (var k in case1) { st.fail(k + ' is enumerable'); }
76+
77+
var case2 = new SuppressedError(undefined, undefined, false);
78+
st.equal(case2.message, 'false', 'message is "false"');
79+
for (k in case2) { st.fail(k + ' is enumerable'); }
80+
81+
var case3 = new SuppressedError(undefined, undefined, true);
82+
st.equal(case3.message, 'true', 'message is "true"');
83+
for (k in case3) { st.fail(k + ' is enumerable'); }
84+
85+
var case4 = new SuppressedError(undefined, undefined, { toString: function () { return 'string'; } });
86+
st.equal(case4.message, 'string', 'message is "string"');
87+
for (k in case4) { st.fail(k + ' is enumerable'); }
88+
89+
var case5 = new SuppressedError(undefined, undefined, null);
90+
st.equal(case5.message, 'null', 'message is "null"');
91+
for (k in case5) { st.fail(k + ' is enumerable'); }
92+
93+
st.end();
94+
});
95+
96+
t.test('test262: test/built-ins/NativeErrors/SuppressedError/message-method-prop', function (st) {
97+
/* eslint no-restricted-syntax: 0 */
98+
99+
var obj = new SuppressedError(undefined, undefined, '42');
100+
st.equal(obj.message, '42', 'message is "42"');
101+
for (var k in obj) { st.fail(k + ' is enumerable'); }
102+
103+
st.end();
104+
});
105+
106+
t.test('test262: test/built-ins/NativeErrors/SuppressedError/message-tostring-abrupt-symbol', { skip: !hasSymbols || !Symbol.toPrimitive }, function (st) {
107+
var case1 = Symbol();
108+
109+
st['throws'](function () { return new SuppressedError(undefined, undefined, case1); }, TypeError, 'toPrimitive');
110+
111+
var case2 = {
112+
toString: function () {
113+
throw new EvalError();
114+
},
115+
valueOf: function () {
116+
throw new EvalError();
117+
}
118+
};
119+
120+
case2[Symbol.toPrimitive] = function () {
121+
return Symbol();
122+
};
123+
124+
st['throws'](function () { return new SuppressedError(undefined, undefined, case2); }, TypeError, 'from ToPrimitive');
125+
126+
st.end();
127+
});
128+
129+
t.test('test262: test/built-ins/NativeErrors/SuppressedError/message-tostring-abrupt', function (st) {
130+
/* eslint no-throw-literal: 0 */
131+
132+
if (hasSymbols && Symbol.toPrimitive) {
133+
var case1 = {
134+
toString: function () {
135+
throw 'toString called';
136+
},
137+
valueOf: function () {
138+
throw 'valueOf called';
139+
}
140+
};
141+
case1[Symbol.toPrimitive] = function () {
142+
throw new EvalError();
143+
};
144+
145+
st['throws'](function () { return new SuppressedError(undefined, undefined, case1); }, EvalError, 'toPrimitive');
146+
}
147+
148+
var case2 = {
149+
toString: function () {
150+
throw new EvalError();
151+
},
152+
valueOf: function () {
153+
throw 'valueOf called';
154+
}
155+
};
156+
157+
st['throws'](function () { return new SuppressedError(undefined, undefined, case2); }, EvalError, 'toString');
158+
159+
var case3 = {
160+
toString: undefined,
161+
valueOf: function () {
162+
throw new EvalError();
163+
}
164+
};
165+
166+
st['throws'](function () { return new SuppressedError(undefined, undefined, case3); }, EvalError, 'valueOf');
167+
168+
st.end();
169+
});
170+
171+
t.test('test262: test/built-ins/NativeErrors/SuppressedError/newtarget-is-undefined', function (st) {
172+
var obj = SuppressedError();
173+
174+
st.ok(Object.prototype.isPrototypeOf.call(SuppressedError.prototype, obj));
175+
st.ok(obj instanceof SuppressedError);
176+
177+
st.end();
178+
});
179+
180+
t.test('test262: test/built-ins/NativeErrors/SuppressedError/order-of-args-evaluation', function (st) {
181+
var messageStringified = false;
182+
var message = {
183+
toString: function () {
184+
messageStringified = true;
185+
return '';
186+
}
187+
};
188+
var error = {};
189+
var suppressed = {};
190+
191+
var e = new SuppressedError(error, suppressed, message);
192+
193+
st.equal(messageStringified, true);
194+
var keys = Object.getOwnPropertyNames(e);
195+
st.deepEqual(keys, ['stack', 'message', 'error', 'suppressed']);
196+
197+
st.end();
198+
});
199+
200+
t.test('test262: test/built-ins/NativeErrors/SuppressedError/prototype/errors-absent-on-prototype', function (st) {
201+
st.equal(Object.prototype.hasOwnProperty.call(SuppressedError.prototype, 'error'), false);
202+
st.equal(Object.prototype.hasOwnProperty.call(SuppressedError.prototype, 'suppressed'), false);
203+
204+
st.end();
205+
});
68206
};

0 commit comments

Comments
 (0)