forked from jacomyal/sigma.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathunit.core.js
155 lines (127 loc) · 4.78 KB
/
unit.core.js
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
module('sigma.core.js');
test('Constructor polymorphism', function() {
var s,
tmp = sigma.renderers.def,
dom = document.createElement('DIV');
// Let's add a temporary container:
dom.id = 'abc';
document.body.appendChild(dom);
// Custom renderer:
// We just need the options here.
sigma.renderers.def = function(_1, _2, _3, options) {
this.options = options;
};
s = new sigma();
equal(Object.keys(s.renderers).length, 0, '"new sigma()" instanciate sigma without any renderer.');
s = new sigma('abc');
deepEqual(s.renderers[0].options, {
container: dom
}, '"new sigma("abc")" instanciate the default renderer in the div #abc.');
s = new sigma(['abc']);
deepEqual(s.renderers[0].options, {
container: dom
}, '"new sigma(["abc"])" instanciate the default renderer in the div #abc.');
s = new sigma(document.getElementById('abc'));
deepEqual(s.renderers[0].options, {
container: dom
}, '"new sigma(document.getElementById("abc"))" instanciate the default renderer in the div #abc.');
s = new sigma({
container: 'abc'
});
deepEqual(s.renderers[0].options, {
container: dom
}, '"new sigma({ container: "abc" })" instanciate the default renderer in the div #abc.');
s = new sigma({
container: document.getElementById('abc')
});
deepEqual(s.renderers[0].options, {
container: dom
}, '"new sigma({ container: document.getElementById("abc") })" instanciate the default renderer in the div #abc.');
s = new sigma(['abc', 'abc']);
deepEqual([
s.renderers[0].options,
s.renderers[1].options
], [
{ container: dom },
{ container: dom }
], '"new sigma(["abc", "abc"])" instanciate the default renderer in the div #abc twice.');
s = new sigma({
renderers: [{
container: document.getElementById('abc')
}]
});
deepEqual(s.renderers[0].options, {
container: dom
}, '"new sigma({ renderers: [{ container: document.getElementById("abc") }] })" instanciate the default renderer in the div #abc.');
// Restore previous state:
sigma.renderers.def = tmp
document.body.removeChild(dom);
throws(function() {
s = new sigma('abcd');
}, /Container not found./, 'Trying to instanciate sigma with a string that is not the ID of an HTMLElement will throw an error.');
});
test('Public methods', function() {
var s = new sigma(),
dom = document.createElement('DIV');
// Let's add a temporary container:
dom.id = 'abc';
document.body.appendChild(dom);
deepEqual(
[Object.keys(s.renderers), Object.keys(s.cameras)],
[[], []],
'A sigma instance created without configuration has no camera nor renderer.'
);
// Adding and killing cameras and renderers:
var c1 = s.addCamera('0'),
c2 = s.addCamera('1'),
r1 = s.addRenderer({ container: dom, camera: c1, id: '0' }),
r2 = s.addRenderer({ container: dom, camera: c2, id: '1' }),
r3 = s.addRenderer({ container: dom, camera: c2, id: '2' });
deepEqual(
[Object.keys(s.renderers), Object.keys(s.cameras)],
[['0', '1', '2'], ['0', '1']],
'The cameras/renderers indexes are updated when adding cameras/renderers.'
);
s.killRenderer('2');
deepEqual(
Object.keys(s.renderers),
['0', '1'],
'The renderers indexes are updated when killing renderers.'
);
s.killCamera('1');
deepEqual(
[Object.keys(s.renderers), Object.keys(s.cameras)],
[['0'], ['0']],
'The cameras/renderers indexes are updated when killing cameras.'
);
throws(function() {
s.killCamera('42');
}, /The camera is undefined./, 'Killing a camera that does not exist throws an error.');
throws(function() {
s.killRenderer('42');
}, /The renderer is undefined./, 'Killing a renderer that does not exist throws an error.');
s.killCamera('0');
// Checking a bit more deeply adding methods:
var c = s.addCamera('myCamera'),
r = s.addRenderer({ camera: c, container: dom, id: 'myRenderer' });
deepEqual(
[Object.keys(s.renderers), Object.keys(s.cameras)],
[['myRenderer'], ['myCamera']],
'The cameras/renderers adders work well with custom IDs.'
);
throws(function() {
s.addCamera('myCamera');
}, /The camera "myCamera" already exists./, 'Adding a camera with an already existing ID throws an error.');
throws(function() {
s.addRenderer({ camera: c, container: dom, id: 'myRenderer' });
}, /The renderer "myRenderer" already exists./, 'Adding a renderer with an already existing ID throws an error.');
// And check also some crazy side cases:
var c = s.addCamera(),
id = c.id;
s.killCamera(id);
throws(function() {
s.addRenderer({ camera: c, container: dom });
}, /The camera is not properly referenced./, 'Adding a renderer with camera that is not referenced anymore throws an error.');
// Restore previous state:
document.body.removeChild(dom);
});