mirror of https://github.com/tc39/test262.git
69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
let nullSymbol = Symbol();
|
|
|
|
let propKeys = [
|
|
"foo", "", undefined, null, true, false, 0, 10, 1234.567,
|
|
Symbol("foo"), Symbol(""), nullSymbol,
|
|
];
|
|
|
|
function toKeyString(x) {
|
|
if (typeof x === "string")
|
|
return '"' + x + '"';
|
|
if (typeof x === "symbol")
|
|
return x.toString();
|
|
return "" + x;
|
|
}
|
|
|
|
function toFuncName(x) {
|
|
if (typeof x === "symbol") {
|
|
if (x !== nullSymbol) {
|
|
let str = x.toString();
|
|
let key = str.slice(7, str.length - 1);
|
|
return "[" + key + "]";
|
|
}
|
|
return "";
|
|
}
|
|
return "" + x;
|
|
}
|
|
|
|
function shouldBe(title, actual, expected) {
|
|
if (actual !== expected)
|
|
throw Error(title + ": actual:" + actual + " expected:" + expected);
|
|
}
|
|
|
|
function makeObj(propKey, classMethodName) {
|
|
return {
|
|
[propKey]: class { static [classMethodName](){} },
|
|
};
|
|
}
|
|
noInline(makeObj);
|
|
|
|
for (var i = 0; i < 1000; i++) {
|
|
for (var k = 0; k < propKeys.length; k++) {
|
|
let key = propKeys[k];
|
|
let o = makeObj(key, "prop");
|
|
shouldBe("typeof o[" + toKeyString(key) + "].name", typeof o[key].name, "string");
|
|
shouldBe("o[" + toKeyString(key) + "].name", o[key].name, toFuncName(key));
|
|
}
|
|
|
|
for (var k = 0; k < propKeys.length; k++) {
|
|
let key = propKeys[k];
|
|
let o = makeObj(key, "name");
|
|
shouldBe("typeof o[" + toKeyString(key) + "].name", typeof o[key], "function");
|
|
}
|
|
|
|
for (var k = 0; k < propKeys.length; k++) {
|
|
let key = propKeys[k];
|
|
let prop = { toString() { return "prop" } };
|
|
let o = makeObj(key, prop);
|
|
shouldBe("typeof o[" + toKeyString(key) + "].name", typeof o[key].name, "string");
|
|
shouldBe("o[" + toKeyString(key) + "].name", o[key].name, toFuncName(key));
|
|
}
|
|
|
|
for (var k = 0; k < propKeys.length; k++) {
|
|
let key = propKeys[k];
|
|
let prop = { toString() { return "name" } };
|
|
let o = makeObj(key, prop);
|
|
shouldBe("typeof o[" + toKeyString(key) + "].name", typeof o[key], "function");
|
|
}
|
|
}
|