object-get-own-property-descriptor-perform-to-object.js   [plain text]


var primitives = [
    ["string", 6],
    [42, undefined],
    [Symbol("symbol"), undefined],
    [true, undefined],
    [false, undefined]
];

for (var [primitive, expected] of primitives) {
    var ret = Object.getOwnPropertyDescriptor(primitive, 'length');
    if (expected === undefined) {
        if (ret !== expected)
            throw new Error("bad value for " + String(primitive) + ": " + String(ret));
    } else if (ret.value !== expected)
        throw new Error("bad value for " + String(primitive) + ": " + String(ret));
}

function canary() {
    return {
        called: false,
        toString() {
            this.called = true;
            throw new Error("out");
        }
    };
}

[
    [ null, "TypeError: null is not an object (evaluating 'Object.getOwnPropertyDescriptor(value, property)')" ],
    [ undefined, "TypeError: undefined is not an object (evaluating 'Object.getOwnPropertyDescriptor(value, property)')" ]
].forEach(function ([value, message]) {
    var property = canary();
    var error = null;
    try {
        Object.getOwnPropertyDescriptor(value, property);
    } catch (e) {
        error = e;
    }
    if (!error)
        throw new Error("error not thrown");
    if (String(error) !== message)
        throw new Error("bad error: " + String(error));
});