aboutsummaryrefslogtreecommitdiff
path: root/test/tree.unit.js
blob: c5fc7ae46e8406d73b73920010f20738762e7124 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
if (typeof module !== 'undefined') {
    var assert = require('assert');
    var sinon = require('sinon');
    var faker = require('../index');
}

describe("tree.js", function () {
    describe("createTree()", function () {

        var proto = {
            "firstname": "faker.random.first_name()",
            "children": "__RECURSE__"
        };

        it("requires the width to be at least one", function () {
            sinon.spy(faker.Tree, 'createTree');

            try {
                faker.Tree.createTree(0, 0, {});
            }
            catch (e) {
            }

            assert.ok(faker.Tree.createTree.threw);

            faker.Tree.createTree.restore();
        });

        it("requires that the object passed in should not be null", function () {
            sinon.spy(faker.Tree, 'createTree');

            try {
                faker.Tree.createTree(1, 1, null);
            }
            catch (e) {
            }

            assert.ok(faker.Tree.createTree.threw);

            faker.Tree.createTree.restore();

        });

        it("can create a trivial tree with one node", function () {
            sinon.spy(faker.random, 'first_name');

            var tree = faker.Tree.createTree(0, 1, proto);

            assert.ok(faker.random.first_name.calledOnce);

            assert.ok(tree.children == null);

            faker.random.first_name.restore();
        });

        it("can create a deep tree with one node at each level", function () {
            sinon.spy(faker.random, 'first_name');
            var tree = faker.Tree.createTree(2, 1, proto);

            assert.ok(faker.random.first_name.calledThrice);

            assert.ok(tree.firstname);
            assert.ok(tree.children[0].firstname);
            assert.ok(tree.children[0].children[0].firstname);

            faker.random.first_name.restore();
        });

        it("can create a basic N-tree", function () {
            var n = 3;
            sinon.spy(faker.random, 'first_name');
            var tree = faker.Tree.createTree(1, n, proto);

            assert.ok(faker.random.first_name.callCount == 4);

            assert.ok(tree.firstname);
            assert.ok(tree.children[0].firstname);
            assert.ok(tree.children[1].firstname);
            assert.ok(tree.children[2].firstname);

            faker.random.first_name.restore();
        });

        it("can create a full N-tree", function () {
            var n = 3;
            sinon.spy(faker.random, 'first_name');
            var tree = faker.Tree.createTree(2, n, proto);

            assert.ok(faker.random.first_name.callCount == 13);

            faker.random.first_name.restore();
        });

        it("can accept a function for the width", function () {
            var widthFuncCalled = 0;
            var widthFunc = function () {
                widthFuncCalled = widthFuncCalled + 1;
                return 2;
            };

            var tree = faker.Tree.createTree(2, widthFunc, proto);
            assert.equal(widthFuncCalled, 3);


        });

    });
});