UNPKG

2.22 kBJavaScriptView Raw
1var test = require('tape');
2var cuid = require('../');
3
4// browser check function adapted from is-in-browser module
5var isInBrowser = typeof window === 'object' &&
6 typeof document === 'object' &&
7 document.nodeType === 9;
8
9var MAX = 1200000;
10
11function collisionTest (fn) {
12 var i = 0;
13 var ids = {};
14 var pass = true;
15
16 while (i < MAX) {
17 var id = fn();
18
19 if (!ids[id]) {
20 ids[id] = id;
21 } else {
22 pass = false;
23 console.log('Failed at ' + i + ' iterations.');
24 break;
25 }
26
27 i++;
28 }
29
30 return pass;
31}
32
33test('cuid()', function (t) {
34 t.ok(typeof cuid() === 'string',
35 'cuid() should return a string.');
36
37 t.end();
38});
39
40test('cuid.slug()', function (t) {
41 t.ok(typeof cuid.slug() === 'string',
42 'cuid.slug() should return a string.');
43
44 t.ok(collisionTest(cuid.slug),
45 'cuid.slug() cuids should not collide.');
46
47 t.end();
48});
49
50test('cuid.isCuid()', function (t) {
51 var id = cuid();
52 t.ok(cuid.isCuid(id) === true, 'cuid.isCuid() should return true for a valid cuid.');
53 t.ok(cuid.isCuid(null) === false, 'cuid.isCuid() should return false for null.');
54 t.ok(cuid.isCuid(undefined) === false, 'cuid.isCuid() should return false for undefined.');
55 t.ok(cuid.isCuid('abcdefghijklmnopqrstuvwxy') === false, 'cuid.isCuid() should return false for a random string.');
56 t.ok(cuid.isCuid(1) === false, 'cuid.isCuid() should return false for numbers.');
57 t.ok(cuid.isCuid(NaN) === false, 'cuid.isCuid() should return false for NaN.');
58 t.end();
59});
60
61test('cuid.isSlug()', function (t) {
62 var slug = cuid.slug();
63 t.ok(cuid.isSlug(slug) === true, 'cuid.isSlug() should return true for a valid cuid slug.');
64 t.ok(cuid.isSlug(null) === false, 'cuid.isSlug() should return false for null.');
65 t.ok(cuid.isSlug(undefined) === false, 'cuid.isSlug() should return false for undefined.');
66 t.ok(cuid.isSlug(1) === false, 'cuid.isSlug() should return false for numbers.');
67 t.ok(cuid.isSlug(NaN) === false, 'cuid.isSlug() should return false for NaN.');
68 t.end();
69});
70
71// perform collision test only if we aren't in the browser
72test('cuid colissions', { skip: isInBrowser }, function (t) {
73 t.ok(collisionTest(cuid),
74 'cuids should not collide.');
75
76 t.end();
77});