object-get-own-property-symbols.js   [plain text]


// This tests Object.getOwnPropertySymbols.

var global = (Function("return this")());

// private names for privileged code should not be exposed.
if (Object.getOwnPropertySymbols(global).length !== 0)
    throw "Error: bad value " + Object.getOwnPropertySymbols(global).length;

var object = {};
var symbol = Symbol("Cocoa");
object[symbol] = "Cappuccino";
if (Object.getOwnPropertyNames(object).length !== 0)
    throw "Error: bad value " + Object.getOwnPropertyNames(object).length;
if (Object.getOwnPropertySymbols(object).length !== 1)
    throw "Error: bad value " + Object.getOwnPropertySymbols(object).length;
if (Object.getOwnPropertySymbols(object)[0] !== symbol)
    throw "Error: bad value " + String(Object.getOwnPropertySymbols(object)[0]);

function forIn(obj) {
    var array = [];
    // Symbol should not be enumerated.
    for (var key in obj) array.push(key);
    return array;
}

if (forIn(object).length !== 0)
    throw "Error: bad value " + forIn(object).length;
if (Object.keys(object).length !== 0)
    throw "Error: bad value " + Object.keys(object).length;

delete object[symbol];
if (Object.getOwnPropertyNames(object).length !== 0)
    throw "Error: bad value " + Object.getOwnPropertyNames(object).length;
if (Object.getOwnPropertySymbols(object).length !== 0)
    throw "Error: bad value " + Object.getOwnPropertySymbols(object).length;