index.js 4.0 KB

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