index.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. 'use strict';
  2. var test = require('tape');
  3. var inspect = require('object-inspect');
  4. var v = require('es-value-fixtures');
  5. var forEach = require('for-each');
  6. var hasOwn = require('hasown');
  7. var shimUnscopables = require('../');
  8. /** @type {(a: symbol, b: symbol) => number} */
  9. var sortSymbols = function (a, b) {
  10. return inspect(a).localeCompare(inspect(b));
  11. };
  12. test('shimUnscopables', function (t) {
  13. t.equal(typeof shimUnscopables, 'function', 'is a function');
  14. forEach(v.nonStrings, function (notNonEmptyString) {
  15. t['throws'](
  16. // @ts-expect-error
  17. function () { shimUnscopables(notNonEmptyString); },
  18. TypeError,
  19. inspect(notNonEmptyString) + ' is not a non-empty String'
  20. );
  21. });
  22. t['throws'](
  23. // @ts-expect-error
  24. function () { shimUnscopables('x'); },
  25. TypeError,
  26. inspect('x') + ' is not on Array.prototype'
  27. );
  28. t.test('no symbols', { skip: typeof Symbol === 'function' }, function (st) {
  29. st.doesNotThrow(function () { shimUnscopables('forEach'); });
  30. st.end();
  31. });
  32. t.test('symbols, no unscopables', { skip: typeof Symbol !== 'function' || !!Symbol.unscopables }, function (st) {
  33. st.deepEqual(Object.getOwnPropertySymbols(Array.prototype), [Symbol.iterator]);
  34. shimUnscopables('forEach');
  35. st.deepEqual(Object.getOwnPropertySymbols(Array.prototype), [Symbol.iterator]);
  36. st.end();
  37. });
  38. t.test('Symbol.unscopables', { skip: typeof Symbol !== 'function' || !Symbol.unscopables }, function (st) {
  39. st.deepEqual(
  40. Object.getOwnPropertySymbols(Array.prototype).sort(sortSymbols),
  41. [Symbol.iterator, Symbol.unscopables]
  42. );
  43. st.notOk(hasOwn(Array.prototype[Symbol.unscopables], 'forEach'), 'unscopables map lacks forEach');
  44. shimUnscopables('forEach');
  45. st.deepEqual(
  46. Object.getOwnPropertySymbols(Array.prototype).sort(sortSymbols),
  47. [Symbol.iterator, Symbol.unscopables]
  48. );
  49. st.equal(Array.prototype[Symbol.unscopables].forEach, true, 'unscopables map has forEach');
  50. st.end();
  51. });
  52. t.end();
  53. });