test.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. 'use strict';
  2. var _ = require('lodash');
  3. var test = require('tape');
  4. var sum = require('./');
  5. test('creates unique hashes', function (t) {
  6. var cases = [];
  7. test_case([0,1,2,3]);
  8. test_case({0:0,1:1,2:2,3:3});
  9. test_case({0:0,1:1,2:2,3:3,length:4});
  10. test_case({url:12});
  11. test_case({headers:12});
  12. test_case({headers:122});
  13. test_case({headers:'122'});
  14. test_case({headers:{accept:'text/plain'}});
  15. test_case({payload:[0,1,2,3],headers:[{a:'b'}]});
  16. test_case({a:function () {}});
  17. test_case({b:function () {}});
  18. test_case({b:function (a) {}});
  19. test_case(function () {});
  20. test_case(function (a) {});
  21. test_case(function (b) {});
  22. test_case(function (a) { return a;});
  23. test_case(function (a) {return a;});
  24. test_case('', '\'\'');
  25. test_case('null', '\'null\'');
  26. test_case('false', '\'false\'');
  27. test_case('true', '\'true\'');
  28. test_case('0', '\'0\'');
  29. test_case('1', '\'1\'');
  30. test_case('void 0', '\'void 0\'');
  31. test_case('undefined', '\'undefined\'');
  32. test_case(null);
  33. test_case(false);
  34. test_case(true);
  35. test_case(Infinity);
  36. test_case(-Infinity);
  37. test_case(NaN);
  38. test_case(0);
  39. test_case(1);
  40. test_case(void 0);
  41. test_case({});
  42. test_case({a:{},b:{}});
  43. test_case({valueOf(){return 1}});
  44. test_case({valueOf(){return 2}});
  45. test_case([]);
  46. test_case(new Date());
  47. test_case(new Date(2019, 5, 28));
  48. test_case(new Date(1988, 5, 9));
  49. test_case(global, 'global');
  50. const uniqCases = _.uniqBy(cases, 'hash')
  51. _.uniqBy(cases, 'hash').forEach(function (expected) {
  52. var matches = _.filter(cases, { hash: expected.hash })
  53. t.equal(matches.length, 1, expected.hash + ': ' + _.map(matches, 'value').join(' '))
  54. })
  55. t.end();
  56. function test_case(value, name) {
  57. var hash = sum(value);
  58. cases.push({ value, hash });
  59. console.log('%s from:', hash, name || value);
  60. }
  61. });
  62. test('hashes clash if same properties', function (t) {
  63. equals(function () {}, function () {});
  64. equals(function (a) {}, function (a) {});
  65. equals({a:'1'},{a:'1'});
  66. equals({a:'1',b:1},{b:1,a:'1'});
  67. equals({valueOf(){return 1}},{valueOf(){return 1}});
  68. t.end();
  69. function equals (a, b) {
  70. t.equal(sum(a), sum(b));
  71. }
  72. });