iterator-names.js   [plain text]


function test(object, name) {
    return {
        object,
        name: '[object ' + name + ']'
    };
}

function iter(object) {
    return object[Symbol.iterator]();
}

var tests = [
    test(iter([]), "Array Iterator"),
    test(iter(new Array), "Array Iterator"),
    test([].keys(), "Array Iterator"),
    test([].entries(), "Array Iterator"),
    test(iter(new Map), "Map Iterator"),
    test((new Map()).keys(), "Map Iterator"),
    test((new Map()).entries(), "Map Iterator"),
    test(iter(new Set), "Set Iterator"),
    test((new Set()).keys(), "Set Iterator"),
    test((new Set()).entries(), "Set Iterator"),
    test(iter(new String("")), "String Iterator"),
    test(iter(""), "String Iterator"),
];

function check(actual, expected) {
    if (actual !== expected)
        throw new Error('bad value: ' + actual);
}

for (var { object, name } of tests) {
    check(object.toString(), name);
    check(Object.prototype.toString.call(object), name);
}