source: imaps-frontend/node_modules/is-symbol/test/index.js@ d565449

main
Last change on this file since d565449 was d565449, checked in by stefan toskovski <stefantoska84@…>, 4 weeks ago

Update repo after prototype presentation

  • Property mode set to 100644
File size: 2.5 KB
RevLine 
[d565449]1'use strict';
2
3var test = require('tape');
4var isSymbol = require('../index');
5
6var forEach = function (arr, func) {
7 var i;
8 for (i = 0; i < arr.length; ++i) {
9 func(arr[i], i, arr);
10 }
11};
12
13var hasSymbols = require('has-symbols')();
14var inspect = require('object-inspect');
15var debug = function (v, m) { return inspect(v) + ' ' + m; };
16
17test('non-symbol values', function (t) {
18 var nonSymbols = [
19 true,
20 false,
21 Object(true),
22 Object(false),
23 null,
24 undefined,
25 {},
26 [],
27 /a/g,
28 'string',
29 42,
30 new Date(),
31 function () {},
32 NaN
33 ];
34 t.plan(nonSymbols.length);
35 forEach(nonSymbols, function (nonSymbol) {
36 t.equal(false, isSymbol(nonSymbol), debug(nonSymbol, 'is not a symbol'));
37 });
38 t.end();
39});
40
41test('faked symbol values', function (t) {
42 t.test('real symbol valueOf', { skip: !hasSymbols }, function (st) {
43 var fakeSymbol = { valueOf: function () { return Symbol('foo'); } };
44 st.equal(false, isSymbol(fakeSymbol), 'object with valueOf returning a symbol is not a symbol');
45 st.end();
46 });
47
48 t.test('faked @@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (st) {
49 var fakeSymbol = { valueOf: function () { return Symbol('foo'); } };
50 fakeSymbol[Symbol.toStringTag] = 'Symbol';
51 st.equal(false, isSymbol(fakeSymbol), 'object with fake Symbol @@toStringTag and valueOf returning a symbol is not a symbol');
52 var notSoFakeSymbol = { valueOf: function () { return 42; } };
53 notSoFakeSymbol[Symbol.toStringTag] = 'Symbol';
54 st.equal(false, isSymbol(notSoFakeSymbol), 'object with fake Symbol @@toStringTag and valueOf not returning a symbol is not a symbol');
55 st.end();
56 });
57
58 var fakeSymbolString = { toString: function () { return 'Symbol(foo)'; } };
59 t.equal(false, isSymbol(fakeSymbolString), 'object with toString returning Symbol(foo) is not a symbol');
60
61 t.end();
62});
63
64test('Symbol support', { skip: !hasSymbols }, function (t) {
65 t.test('well-known Symbols', function (st) {
66 var isWellKnown = function filterer(name) {
67 return name !== 'for' && name !== 'keyFor' && !(name in filterer);
68 };
69 var wellKnownSymbols = Object.getOwnPropertyNames(Symbol).filter(isWellKnown);
70 wellKnownSymbols.forEach(function (name) {
71 var sym = Symbol[name];
72 st.equal(true, isSymbol(sym), debug(sym, ' is a symbol'));
73 });
74 st.end();
75 });
76
77 t.test('user-created symbols', function (st) {
78 var symbols = [
79 Symbol(),
80 Symbol('foo'),
81 Symbol['for']('foo'),
82 Object(Symbol('object'))
83 ];
84 symbols.forEach(function (sym) {
85 st.equal(true, isSymbol(sym), debug(sym, ' is a symbol'));
86 });
87 st.end();
88 });
89
90 t.end();
91});
92
Note: See TracBrowser for help on using the repository browser.