| 'use strict'; |
| |
| var test = require('tape'); |
| var isArguments = require('./'); |
| var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; |
| |
| test('primitives', function (t) { |
| t.notOk(isArguments([]), 'array is not arguments'); |
| t.notOk(isArguments({}), 'object is not arguments'); |
| t.notOk(isArguments(''), 'empty string is not arguments'); |
| t.notOk(isArguments('foo'), 'string is not arguments'); |
| t.notOk(isArguments({ length: 2 }), 'naive array-like is not arguments'); |
| t.end(); |
| }); |
| |
| test('arguments object', function (t) { |
| t.ok(isArguments(arguments), 'arguments is arguments'); |
| t.notOk(isArguments(Array.prototype.slice.call(arguments)), 'sliced arguments is not arguments'); |
| t.end(); |
| }); |
| |
| test('old-style arguments object', function (t) { |
| var isLegacyArguments = isArguments.isLegacyArguments || isArguments; |
| var fakeOldArguments = { |
| callee: function () {}, |
| length: 3 |
| }; |
| t.ok(isLegacyArguments(fakeOldArguments), 'old-style arguments is arguments'); |
| t.end(); |
| }); |
| |
| test('Symbol.toStringTag', { skip: !hasToStringTag }, function (t) { |
| var obj = {}; |
| obj[Symbol.toStringTag] = 'Arguments'; |
| t.notOk(isArguments(obj), 'object with faked toStringTag is not arguments'); |
| |
| var args = (function () { |
| return arguments; |
| }()); |
| args[Symbol.toStringTag] = 'Arguments'; |
| t.notOk(isArguments(obj), 'real arguments with faked toStringTag is not arguments'); |
| |
| t.end(); |
| }); |