1 | var test = require('tape');
|
2 | var cuid = require('../');
|
3 |
|
4 |
|
5 | var isInBrowser = typeof window === 'object' &&
|
6 | typeof document === 'object' &&
|
7 | document.nodeType === 9;
|
8 |
|
9 | var MAX = 1200000;
|
10 |
|
11 | function 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 |
|
33 | test('cuid()', function (t) {
|
34 | t.ok(typeof cuid() === 'string',
|
35 | 'cuid() should return a string.');
|
36 |
|
37 | t.end();
|
38 | });
|
39 |
|
40 | test('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 |
|
50 | test('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 |
|
61 | test('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 |
|
72 | test('cuid colissions', { skip: isInBrowser }, function (t) {
|
73 | t.ok(collisionTest(cuid),
|
74 | 'cuids should not collide.');
|
75 |
|
76 | t.end();
|
77 | });
|