03bbb49eca02e6afab38a671142a276348e88b7bd8906e70b3b06b2a8d8d3daa002e0d303eb6736fa925a5fa11d5f8a539043b229815a6080abc05c3ef1be2 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. 'use strict';
  2. var test = require('tape');
  3. // eslint-disable-next-line no-extra-parens
  4. var isArguments = /** @type {import('..') & { isLegacyArguments: import('..') }} */ (require('../'));
  5. var hasToStringTag = require('has-tostringtag/shams')();
  6. test('primitives', function (t) {
  7. t.notOk(isArguments([]), 'array is not arguments');
  8. t.notOk(isArguments({}), 'object is not arguments');
  9. t.notOk(isArguments(''), 'empty string is not arguments');
  10. t.notOk(isArguments('foo'), 'string is not arguments');
  11. t.notOk(isArguments({ length: 2 }), 'naive array-like is not arguments');
  12. t.end();
  13. });
  14. test('arguments object', function (t) {
  15. t.ok(isArguments(arguments), 'arguments is arguments');
  16. t.notOk(isArguments(Array.prototype.slice.call(arguments)), 'sliced arguments is not arguments');
  17. t.end();
  18. });
  19. test('old-style arguments object', function (t) {
  20. var isLegacyArguments = isArguments.isLegacyArguments || isArguments;
  21. var fakeOldArguments = {
  22. callee: function () {},
  23. length: 3
  24. };
  25. t.ok(isLegacyArguments(fakeOldArguments), 'old-style arguments is arguments');
  26. t.end();
  27. });
  28. test('Symbol.toStringTag', { skip: !hasToStringTag }, function (t) {
  29. /** @type {{ [Symbol.toStringTag]?: string }} */
  30. var obj = {};
  31. obj[Symbol.toStringTag] = 'Arguments';
  32. t.notOk(isArguments(obj), 'object with faked toStringTag is not arguments');
  33. /** @type {IArguments & { [Symbol.toStringTag]?: string }} */
  34. var args = (function () {
  35. return arguments;
  36. }());
  37. args[Symbol.toStringTag] = 'Arguments';
  38. t.notOk(isArguments(obj), 'real arguments with faked toStringTag is not arguments');
  39. t.end();
  40. });