12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 'use strict';
- var test = require('tape');
- var inspect = require('object-inspect');
- var v = require('es-value-fixtures');
- var forEach = require('for-each');
- var has = require('has');
- var shimUnscopables = require('../');
- var sortSymbols = function (a, b) {
- return inspect(a).localeCompare(inspect(b));
- };
- test('shimUnscopables', function (t) {
- t.equal(typeof shimUnscopables, 'function', 'is a function');
- forEach(v.nonStrings, function (notNonEmptyString) {
- t['throws'](
- function () { shimUnscopables(notNonEmptyString); },
- TypeError,
- inspect(notNonEmptyString) + ' is not a non-empty String'
- );
- });
- t['throws'](
- function () { shimUnscopables('x'); },
- TypeError,
- inspect('x') + ' is not on Array.prototype'
- );
- t.test('no symbols', { skip: typeof Symbol === 'function' }, function (st) {
- st.doesNotThrow(function () { shimUnscopables('forEach'); });
- st.end();
- });
- t.test('symbols, no unscopables', { skip: typeof Symbol !== 'function' || Symbol.unscopables }, function (st) {
- st.deepEqual(Object.getOwnPropertySymbols(Array.prototype), [Symbol.iterator]);
- shimUnscopables('forEach');
- st.deepEqual(Object.getOwnPropertySymbols(Array.prototype), [Symbol.iterator]);
- st.end();
- });
- t.test('Symbol.unscopables', { skip: typeof Symbol !== 'function' || !Symbol.unscopables }, function (st) {
- st.deepEqual(
- Object.getOwnPropertySymbols(Array.prototype).sort(sortSymbols),
- [Symbol.iterator, Symbol.unscopables]
- );
- st.notOk(has(Array.prototype[Symbol.unscopables], 'forEach'), 'unscopables map lacks forEach');
- shimUnscopables('forEach');
- st.deepEqual(
- Object.getOwnPropertySymbols(Array.prototype).sort(sortSymbols),
- [Symbol.iterator, Symbol.unscopables]
- );
- st.equal(Array.prototype[Symbol.unscopables].forEach, true, 'unscopables map has forEach');
- st.end();
- });
- t.end();
- });
|