-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsort-test.js
81 lines (75 loc) · 3.28 KB
/
sort-test.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
var vows = require("vows"),
load = require("../load"),
assert = require("../assert");
var suite = vows.describe("selection.sort");
suite.addBatch({
"selectAll(div).selectAll(span)": {
topic: load("selection/sort").document(),
"on a page with some spans": {
topic: function(d3) {
return d3.select("body").append("div").selectAll("div")
.data([1, 2, 10, 20])
.enter().append("div")
.selectAll("span")
.data(function(d) { return [20 + d, 2 + d, 10, 1]; })
.enter().append("span");
},
"sorts elements by natural order": function(span) {
span.sort();
assert.domNull(span[0][0].previousSibling);
assert.domEqual(span[0][1].previousSibling, span[0][0]);
assert.domEqual(span[0][2].previousSibling, span[0][1]);
assert.domEqual(span[0][3].previousSibling, span[0][2]);
assert.domNull(span[0][3].nextSibling);
},
"sorts each group independently": function(span) {
span.sort(function(a, b) { return b - a; });
assert.deepEqual(span[0].map(data), [21, 10, 3, 1]);
assert.deepEqual(span[1].map(data), [22, 10, 4, 1]);
assert.deepEqual(span[2].map(data), [30, 12, 10, 1]);
assert.deepEqual(span[3].map(data), [40, 22, 10, 1]);
},
"sorts using the specified comparator": function(span) {
span.sort(function(a, b) { return (a + "").localeCompare(b + ""); });
assert.deepEqual(span[0].map(data), [1, 10, 21, 3]);
assert.deepEqual(span[1].map(data), [1, 10, 22, 4]);
assert.deepEqual(span[2].map(data), [1, 10, 12, 30]);
assert.deepEqual(span[3].map(data), [1, 10, 22, 40]);
},
"returns the current selection": function(span) {
assert.isTrue(span.sort() === span);
},
"sorts null nodes at the end of the selection": function(span) {
var nulls = 0;
span[0][0].parentNode.removeChild(span[0][0]);
span[0][2].parentNode.removeChild(span[0][2]);
span[0][0] = span[0][2] = null;
span.sort(function(a, b) { if ((a === null) || (b === null)) ++nulls; return a - b; });
assert.equal(nulls, 0);
assert.domNull(span[0][2]);
assert.domNull(span[0][3]);
assert.domNull(span[0][0].previousSibling);
assert.domEqual(span[0][1], span[0][0].nextSibling);
assert.domEqual(span[0][0], span[0][1].previousSibling);
assert.domNull(span[0][1].nextSibling);
assert.deepEqual(span[0].slice(0, -2).map(data), [3, 21]);
for (var i = 1; i < 4; ++i) {
var d = span[i].parentNode.__data__;
assert.domNull(span[i][0].previousSibling);
assert.domEqual(span[i][1], span[i][0].nextSibling);
assert.domEqual(span[i][0], span[i][1].previousSibling);
assert.domEqual(span[i][2], span[i][1].nextSibling);
assert.domEqual(span[i][1], span[i][2].previousSibling);
assert.domEqual(span[i][3], span[i][2].nextSibling);
assert.domEqual(span[i][2], span[i][3].previousSibling);
assert.domNull(span[i][3].nextSibling);
assert.deepEqual(span[i].map(data), [1, 2 + d, 10, 20 + d].sort(function(a, b) { return a - b; }));
}
}
}
}
});
function data(d) {
return d.__data__;
}
suite.export(module);