index.js
1 'use strict'; 2 3 var test = require('tape'); 4 5 var getSideChannelMap = require('../'); 6 7 test('getSideChannelMap', { skip: typeof Map !== 'function' }, function (t) { 8 var getSideChannel = getSideChannelMap || function () { 9 throw new EvalError('should never happen'); 10 }; 11 12 t.test('export', function (st) { 13 st.equal(typeof getSideChannel, 'function', 'is a function'); 14 15 st.equal(getSideChannel.length, 0, 'takes no arguments'); 16 17 var channel = getSideChannel(); 18 st.ok(channel, 'is truthy'); 19 st.equal(typeof channel, 'object', 'is an object'); 20 st.end(); 21 }); 22 23 t.test('assert', function (st) { 24 var channel = getSideChannel(); 25 st['throws']( 26 function () { channel.assert({}); }, 27 TypeError, 28 'nonexistent value throws' 29 ); 30 31 var o = {}; 32 channel.set(o, 'data'); 33 st.doesNotThrow(function () { channel.assert(o); }, 'existent value noops'); 34 35 st.end(); 36 }); 37 38 t.test('has', function (st) { 39 var channel = getSideChannel(); 40 /** @type {unknown[]} */ var o = []; 41 42 st.equal(channel.has(o), false, 'nonexistent value yields false'); 43 44 channel.set(o, 'foo'); 45 st.equal(channel.has(o), true, 'existent value yields true'); 46 47 st.equal(channel.has('abc'), false, 'non object value non existent yields false'); 48 49 channel.set('abc', 'foo'); 50 st.equal(channel.has('abc'), true, 'non object value that exists yields true'); 51 52 st.end(); 53 }); 54 55 t.test('get', function (st) { 56 var channel = getSideChannel(); 57 var o = {}; 58 st.equal(channel.get(o), undefined, 'nonexistent value yields undefined'); 59 60 var data = {}; 61 channel.set(o, data); 62 st.equal(channel.get(o), data, '"get" yields data set by "set"'); 63 64 st.end(); 65 }); 66 67 t.test('set', function (st) { 68 var channel = getSideChannel(); 69 var o = function () {}; 70 st.equal(channel.get(o), undefined, 'value not set'); 71 72 channel.set(o, 42); 73 st.equal(channel.get(o), 42, 'value was set'); 74 75 channel.set(o, Infinity); 76 st.equal(channel.get(o), Infinity, 'value was set again'); 77 78 var o2 = {}; 79 channel.set(o2, 17); 80 st.equal(channel.get(o), Infinity, 'o is not modified'); 81 st.equal(channel.get(o2), 17, 'o2 is set'); 82 83 channel.set(o, 14); 84 st.equal(channel.get(o), 14, 'o is modified'); 85 st.equal(channel.get(o2), 17, 'o2 is not modified'); 86 87 st.end(); 88 }); 89 90 t.test('delete', function (st) { 91 var channel = getSideChannel(); 92 var o = {}; 93 st.equal(channel['delete']({}), false, 'nonexistent value yields false'); 94 95 channel.set(o, 42); 96 st.equal(channel.has(o), true, 'value is set'); 97 98 st.equal(channel['delete']({}), false, 'nonexistent value still yields false'); 99 100 st.equal(channel['delete'](o), true, 'deleted value yields true'); 101 102 st.equal(channel.has(o), false, 'value is no longer set'); 103 104 st.end(); 105 }); 106 107 t.end(); 108 }); 109 110 test('getSideChannelMap, no Maps', { skip: typeof Map === 'function' }, function (t) { 111 t.equal(getSideChannelMap, false, 'is false'); 112 113 t.end(); 114 });