mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 22:40:28 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
126 lines
2.6 KiB
JavaScript
126 lines
2.6 KiB
JavaScript
function test(actual, expected) {
|
|
if (actual !== expected)
|
|
throw new Error("bad value: " + actual);
|
|
}
|
|
|
|
(function () {
|
|
var hello = Symbol("Hello");
|
|
var proto = Symbol("__proto__");
|
|
|
|
for (var sym of [ hello, proto, Symbol.iterator ]) {
|
|
var key = Symbol.keyFor(sym);
|
|
test(key, undefined);
|
|
// twice
|
|
var key = Symbol.keyFor(sym);
|
|
test(key, undefined);
|
|
}
|
|
}());
|
|
|
|
(function () {
|
|
var keys = [
|
|
"Hello",
|
|
"__proto__",
|
|
"Symbol.iterator",
|
|
'',
|
|
null,
|
|
undefined,
|
|
42,
|
|
20.5,
|
|
-42,
|
|
-20.5,
|
|
true,
|
|
false,
|
|
{},
|
|
function () {},
|
|
[],
|
|
];
|
|
for (var key of keys) {
|
|
var sym = Symbol.for(key);
|
|
test(typeof sym, "symbol");
|
|
test(sym.toString(), "Symbol(" + String(key) + ")");
|
|
|
|
var sym2 = Symbol.for(key);
|
|
test(sym === sym2, true);
|
|
|
|
var key = Symbol.keyFor(sym);
|
|
test(key, key);
|
|
var key = Symbol.keyFor(sym2);
|
|
test(key, key);
|
|
}
|
|
}());
|
|
|
|
(function () {
|
|
var error = null;
|
|
try {
|
|
var key = {
|
|
toString() {
|
|
throw new Error('toString');
|
|
}
|
|
};
|
|
Symbol.for(key);
|
|
} catch (e) {
|
|
error = e;
|
|
}
|
|
if (!error)
|
|
throw new Error('not thrown');
|
|
if (String(error) !== 'Error: toString')
|
|
throw new Error('bad error: ' + String(error));
|
|
}());
|
|
|
|
(function () {
|
|
var elements = [
|
|
null,
|
|
undefined,
|
|
42,
|
|
20.5,
|
|
true,
|
|
false,
|
|
'string',
|
|
{},
|
|
function () {},
|
|
[],
|
|
];
|
|
for (var item of elements) {
|
|
var error = null;
|
|
try {
|
|
Symbol.keyFor(item);
|
|
} catch (e) {
|
|
error = e;
|
|
}
|
|
if (!error)
|
|
throw new Error('not thrown');
|
|
if (String(error) !== 'TypeError: Symbol.keyFor requires that the first argument be a symbol')
|
|
throw new Error('bad error: ' + String(error));
|
|
}
|
|
}());
|
|
|
|
(function () {
|
|
for (var i = 0; i < 10000; ++i)
|
|
Symbol.for(i);
|
|
gc();
|
|
}());
|
|
|
|
(function () {
|
|
for (var i = 0; i < 100; ++i) {
|
|
var symbol = Symbol.for(i);
|
|
test(String(symbol), "Symbol(" + i + ")");
|
|
test(symbol, Symbol.for(i));
|
|
gc();
|
|
}
|
|
gc();
|
|
}());
|
|
|
|
(function () {
|
|
var symbols = [];
|
|
for (var i = 0; i < 100; ++i) {
|
|
var symbol = Symbol.for(i);
|
|
symbols.push(symbol);
|
|
}
|
|
|
|
for (var i = 0; i < 100; ++i)
|
|
test(Symbol.for(i), symbols[i]);
|
|
|
|
for (var i = 0; i < 100; ++i)
|
|
test(Symbol.keyFor(Symbol(i)), undefined);
|
|
}());
|