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