You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.1 KiB
80 lines
2.1 KiB
'use strict'; |
|
|
|
var _ = require('lodash'); |
|
var test = require('tape'); |
|
var sum = require('./'); |
|
|
|
test('creates unique hashes', function (t) { |
|
var cases = []; |
|
|
|
test_case([0,1,2,3]); |
|
test_case({0:0,1:1,2:2,3:3}); |
|
test_case({0:0,1:1,2:2,3:3,length:4}); |
|
test_case({url:12}); |
|
test_case({headers:12}); |
|
test_case({headers:122}); |
|
test_case({headers:'122'}); |
|
test_case({headers:{accept:'text/plain'}}); |
|
test_case({payload:[0,1,2,3],headers:[{a:'b'}]}); |
|
test_case({a:function () {}}); |
|
test_case({b:function () {}}); |
|
test_case({b:function (a) {}}); |
|
test_case(function () {}); |
|
test_case(function (a) {}); |
|
test_case(function (b) {}); |
|
test_case(function (a) { return a;}); |
|
test_case(function (a) {return a;}); |
|
test_case('', '\'\''); |
|
test_case('null', '\'null\''); |
|
test_case('false', '\'false\''); |
|
test_case('true', '\'true\''); |
|
test_case('0', '\'0\''); |
|
test_case('1', '\'1\''); |
|
test_case('void 0', '\'void 0\''); |
|
test_case('undefined', '\'undefined\''); |
|
test_case(null); |
|
test_case(false); |
|
test_case(true); |
|
test_case(Infinity); |
|
test_case(-Infinity); |
|
test_case(NaN); |
|
test_case(0); |
|
test_case(1); |
|
test_case(void 0); |
|
test_case({}); |
|
test_case({a:{},b:{}}); |
|
test_case({valueOf(){return 1}}); |
|
test_case({valueOf(){return 2}}); |
|
test_case([]); |
|
test_case(new Date()); |
|
test_case(new Date(2019, 5, 28)); |
|
test_case(new Date(1988, 5, 9)); |
|
test_case(global, 'global'); |
|
|
|
const uniqCases = _.uniqBy(cases, 'hash') |
|
_.uniqBy(cases, 'hash').forEach(function (expected) { |
|
var matches = _.filter(cases, { hash: expected.hash }) |
|
t.equal(matches.length, 1, expected.hash + ': ' + _.map(matches, 'value').join(' ')) |
|
}) |
|
|
|
t.end(); |
|
|
|
function test_case(value, name) { |
|
var hash = sum(value); |
|
cases.push({ value, hash }); |
|
console.log('%s from:', hash, name || value); |
|
} |
|
}); |
|
|
|
test('hashes clash if same properties', function (t) { |
|
equals(function () {}, function () {}); |
|
equals(function (a) {}, function (a) {}); |
|
equals({a:'1'},{a:'1'}); |
|
equals({a:'1',b:1},{b:1,a:'1'}); |
|
equals({valueOf(){return 1}},{valueOf(){return 1}}); |
|
t.end(); |
|
|
|
function equals (a, b) { |
|
t.equal(sum(a), sum(b)); |
|
} |
|
});
|
|
|