-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathselection-selectAll-test.js
131 lines (127 loc) · 5.38 KB
/
selection-selectAll-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
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
var vows = require("vows"),
load = require("../load"),
assert = require("../assert");
var suite = vows.describe("selection.selectAll");
suite.addBatch({
"select(body)": {
topic: load("selection/selection").document(),
"on a simple page": {
topic: function(d3) {
var body = d3.select("body");
body.append("div").attr("class", "first");
body.append("div").attr("class", "second");
return body;
},
"selects all matching elements": function(body) {
var div = body.selectAll("div");
assert.isTrue(div[0][0] === body.node().firstChild);
assert.isTrue(div[0][1] === body.node().lastChild);
assert.equal(div.length, 1);
assert.equal(div[0].length, 2);
},
"propagates parent node to the selected elements": function(body) {
var div = body.selectAll("div");
assert.isNotNull(div[0].parentNode);
assert.isTrue(div[0].parentNode === body.node());
},
"does not propagate data if data was specified": function(body) {
var div = body.data([new Object()]).selectAll("div");
assert.isUndefined(div[0][0].__data__);
assert.isUndefined(div[0][1].__data__);
},
"does not propagate data if data was not specified": function(body) {
var div = body.selectAll("div").data([1, 2]);
div = body.data([new Object()]).selectAll("div");
assert.equal(div[0][0].__data__, 1);
assert.equal(div[0][1].__data__, 2);
},
"returns empty array if no match is found": function(body) {
var span = body.selectAll("span");
assert.equal(span.length, 1);
assert.equal(span[0].length, 0);
},
"can select via function": function(body) {
var d = {}, dd = [], ii = [], tt = [],
s = body.data([d]).selectAll(function(d, i) { dd.push(d); ii.push(i); tt.push(this); return this.childNodes; });
assert.deepEqual(dd, [d], "expected data, got {actual}");
assert.deepEqual(ii, [0], "expected index, got {actual}");
assert.domEqual(tt[0], body.node(), "expected this, got {actual}");
assert.domEqual(s[0][0], body.node().firstChild);
assert.domEqual(s[0][1], body.node().lastChild);
delete body.node().__data__;
}
}
}
});
suite.addBatch({
"selectAll(div)": {
topic: load("selection/selection").document(),
"on a simple page": {
topic: function(d3) {
var div = d3.select("body").append("div").selectAll("div").data([0, 1]).enter().append("div");
div.append("span").attr("class", "first");
div.append("span").attr("class", "second");
return div;
},
"selects all matching elements": function(div) {
var span = div.selectAll("span");
assert.equal(span.length, 2);
assert.equal(span[0].length, 2);
assert.isTrue(span[0][0].parentNode === div[0][0]);
assert.isTrue(span[0][1].parentNode === div[0][0]);
assert.isTrue(span[1][0].parentNode === div[0][1]);
assert.isTrue(span[1][1].parentNode === div[0][1]);
},
"propagates parent node to the selected elements": function(div) {
var span = div.selectAll("span");
assert.isNotNull(span[0].parentNode);
assert.isTrue(span[0].parentNode === div[0][0]);
assert.isTrue(span[1].parentNode === div[0][1]);
},
"does not propagate data if data was specified": function(div) {
var span = div.selectAll("span");
delete span[0][0].__data__;
delete span[0][1].__data__;
span = div.data([new Object(), new Object()]).selectAll("span");
assert.isUndefined(span[0][0].__data__);
assert.isUndefined(span[0][1].__data__);
},
"does not propagate data if data was not specified": function(div) {
var a = new Object(), b = new Object(), span = div.selectAll("span").data([a, b]);
delete div[0][0].__data__;
delete div[0][1].__data__;
span = div.selectAll("span");
assert.equal(span[0][0].__data__, a);
assert.equal(span[0][1].__data__, b);
},
"returns empty array if no match is found": function(div) {
var div = div.selectAll("div");
assert.equal(div.length, 2);
assert.equal(div[0].length, 0);
assert.equal(div[1].length, 0);
},
"can select via function": function(div) {
var dd = [], ii = [], tt = [],
s = div.data(["a", "b"]).selectAll(function(d, i) { dd.push(d); ii.push(i); tt.push(this); return this.childNodes; });
assert.deepEqual(dd, ["a", "b"], "expected data, got {actual}");
assert.deepEqual(ii, [0, 1], "expected index, got {actual}");
assert.domEqual(tt[0], div[0][0], "expected this, got {actual}");
assert.domEqual(tt[1], div[0][1], "expected this, got {actual}");
assert.domEqual(s[0][0], div[0][0].firstChild);
assert.domEqual(s[0][1], div[0][0].lastChild);
assert.domEqual(s[1][0], div[0][1].firstChild);
assert.domEqual(s[1][1], div[0][1].lastChild);
},
"ignores null nodes": function(div) {
var node = div[0][1];
div[0][1] = null;
var span = div.selectAll("span");
assert.equal(span.length, 1);
assert.equal(span[0].length, 2);
assert.isTrue(span[0][0].parentNode === div[0][0]);
assert.isTrue(span[0][1].parentNode === div[0][0]);
}
}
}
});
suite.export(module);