Skip to content

Commit 1444698

Browse files
committed
Add tests for selection select and selectAll.
1 parent 822bcdd commit 1444698

7 files changed

Lines changed: 219 additions & 24 deletions

test/core/selection-append-test.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,29 @@ var vows = require("vows"),
77
var suite = vows.describe("selection.append");
88

99
suite.addBatch({
10-
"select": {
10+
"select(body)": {
1111
topic: function() {
1212
return d3.select("body").html("");
1313
},
1414
"appends an HTML element": function(body) {
1515
var div = body.append("div");
1616
assert.equal(div[0][0].tagName, "DIV");
1717
assert.isNull(div[0][0].namespaceURI);
18-
assert.isTrue(div[0][0].parentNode === body[0][0]);
19-
assert.isTrue(body[0][0].lastChild === div[0][0]);
18+
assert.isTrue(div[0][0].parentNode === document.body);
19+
assert.isTrue(div[0][0] === document.body.lastChild);
2020
},
2121
"appends an SVG element": function(body) {
2222
var svg = body.append("svg:svg");
2323
assert.equal(svg[0][0].tagName, "SVG");
2424
assert.equal(svg[0][0].namespaceURI, "http://www.w3.org/2000/svg");
25-
assert.isTrue(svg[0][0].parentNode === body[0][0]);
26-
assert.isTrue(body[0][0].lastChild === svg[0][0]);
25+
assert.isTrue(svg[0][0].parentNode === document.body);
26+
assert.isTrue(svg[0][0] === document.body.lastChild);
2727
}
2828
}
2929
});
3030

3131
suite.addBatch({
32-
"selectAll": {
32+
"selectAll(div)": {
3333
topic: function() {
3434
return d3.select("body").html("").selectAll("div").data(d3.range(2)).enter().append("div");
3535
},

test/core/selection-attr-test.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,39 @@ var vows = require("vows"),
77
var suite = vows.describe("selection.attr");
88

99
suite.addBatch({
10-
"select": {
10+
"select(body)": {
1111
topic: function() {
1212
return d3.select("body");
1313
},
1414
"sets an attribute as a string": function(body) {
1515
body.attr("bgcolor", "red");
16-
assert.equal(body[0][0].getAttribute("bgcolor"), "red");
16+
assert.equal(document.body.getAttribute("bgcolor"), "red");
1717
},
1818
"sets an attribute as a number": function(body) {
1919
body.attr("opacity", 1);
20-
assert.equal(body[0][0].getAttribute("opacity"), "1");
20+
assert.equal(document.body.getAttribute("opacity"), "1");
2121
},
2222
"sets an attribute as a function": function(body) {
2323
body.attr("bgcolor", function() { return "orange"; });
24-
assert.equal(body[0][0].getAttribute("bgcolor"), "orange");
24+
assert.equal(document.body.getAttribute("bgcolor"), "orange");
2525
},
2626
"sets an attribute as a function of data": function(body) {
2727
body.data(["cyan"]).attr("bgcolor", String);
28-
assert.equal(body[0][0].getAttribute("bgcolor"), "cyan");
28+
assert.equal(document.body.getAttribute("bgcolor"), "cyan");
2929
},
3030
"sets an attribute as a function of index": function(body) {
3131
body.attr("bgcolor", function(d, i) { return "orange-" + i; });
32-
assert.equal(body[0][0].getAttribute("bgcolor"), "orange-0");
32+
assert.equal(document.body.getAttribute("bgcolor"), "orange-0");
3333
},
3434
"gets an attribute value": function(body) {
35-
body[0][0].setAttribute("bgcolor", "yellow");
35+
document.body.setAttribute("bgcolor", "yellow");
3636
assert.equal(body.attr("bgcolor"), "yellow");
3737
}
3838
}
3939
});
4040

4141
suite.addBatch({
42-
"selectAll": {
42+
"selectAll(div)": {
4343
topic: function() {
4444
return d3.select("body").html("").selectAll("div").data(d3.range(2)).enter().append("div");
4545
},

test/core/selection-property-test.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@ suite.addBatch({
1313
},
1414
"sets a property as a string": function(body) {
1515
body.property("bgcolor", "red");
16-
assert.equal(body[0][0].bgcolor, "red");
16+
assert.equal(document.body.bgcolor, "red");
1717
},
1818
"sets a property as a number": function(body) {
1919
body.property("opacity", 1);
20-
assert.equal(body[0][0].opacity, "1");
20+
assert.equal(document.body.opacity, "1");
2121
},
2222
"sets a property as a function": function(body) {
2323
body.property("bgcolor", function() { return "orange"; });
24-
assert.equal(body[0][0].bgcolor, "orange");
24+
assert.equal(document.body.bgcolor, "orange");
2525
},
2626
"gets a property value": function(body) {
27-
body[0][0].bgcolor = "yellow";
27+
document.body.bgcolor = "yellow";
2828
assert.equal(body.property("bgcolor"), "yellow");
2929
}
3030
}

test/core/selection-select-test.js

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
require("../env");
2+
require("../../d3");
3+
4+
var vows = require("vows"),
5+
assert = require("assert");
6+
7+
var suite = vows.describe("selection.select");
8+
9+
suite.addBatch({
10+
"select(body)": {
11+
topic: function() {
12+
var body = d3.select("body").html("");
13+
body.append("div").attr("class", "first");
14+
body.append("div").attr("class", "second");
15+
return body;
16+
},
17+
"selects the first matching element": function(body) {
18+
var div = body.select("div");
19+
assert.isTrue(div[0][0] === document.body.firstChild);
20+
assert.equal(div.length, 1);
21+
assert.equal(div[0].length, 1);
22+
assert.equal(div.attr("class"), "first");
23+
},
24+
"propagates parent node to the selected elements": function(body) {
25+
var div = body.select("div");
26+
assert.isNotNull(div[0].parentNode);
27+
assert.isTrue(div[0].parentNode === document.documentElement);
28+
assert.isTrue(div[0].parentNode === body[0].parentNode);
29+
},
30+
"propagates data to the selected elements": function(body) {
31+
var data = new Object(), div = body.data([data]).select("div");
32+
assert.strictEqual(div[0][0].__data__, data);
33+
},
34+
"does not propagate data if no data was specified": function(body) {
35+
delete document.body.__data__;
36+
var data = new Object(), div = body.select("div").data([data]);
37+
div = body.select("div");
38+
assert.strictEqual(div[0][0].__data__, data);
39+
assert.isUndefined(document.body.__data__);
40+
},
41+
"returns null if no match is found": function(body) {
42+
var span = body.select("span");
43+
assert.equal(span[0][0], null);
44+
assert.equal(span.length, 1);
45+
assert.equal(span[0].length, 1);
46+
}
47+
}
48+
});
49+
50+
suite.addBatch({
51+
"selectAll(div)": {
52+
topic: function() {
53+
var div = d3.select("body").html("").selectAll("div").data(d3.range(2)).enter().append("div");
54+
div.append("span").attr("class", "first");
55+
div.append("span").attr("class", "second");
56+
return div;
57+
},
58+
"selects the first matching element": function(div) {
59+
var span = div.select("span");
60+
assert.isTrue(span[0][0].parentNode === div[0][0]);
61+
assert.isTrue(span[0][1].parentNode === div[0][1]);
62+
assert.equal(span.length, 1);
63+
assert.equal(span[0].length, 2);
64+
assert.equal(span.attr("class"), "first");
65+
},
66+
"propagates parent node to the selected elements": function(div) {
67+
var span = div.select("span");
68+
assert.isNotNull(span[0].parentNode);
69+
assert.isTrue(span[0].parentNode === document.body);
70+
assert.isTrue(span[0].parentNode === div[0].parentNode);
71+
},
72+
"propagates data to the selected elements": function(div) {
73+
var data = new Object(), span = div.data([data]).select("span");
74+
assert.strictEqual(span[0][0].__data__, data);
75+
},
76+
"does not propagate data if no data was specified": function(div) {
77+
delete div[0][0].__data__;
78+
delete div[0][1].__data__;
79+
var a = new Object(), b = new Object(), span = div.select("span").data([a, b]);
80+
span = div.select("span");
81+
assert.strictEqual(span[0][0].__data__, a);
82+
assert.strictEqual(span[0][1].__data__, b);
83+
assert.isUndefined(div[0][0].__data__);
84+
assert.isUndefined(div[0][1].__data__);
85+
},
86+
"returns null if no match is found": function(div) {
87+
var div = div.select("div");
88+
assert.equal(div[0][0], null);
89+
assert.equal(div[0][1], null);
90+
assert.equal(div.length, 1);
91+
assert.equal(div[0].length, 2);
92+
}
93+
}
94+
});
95+
96+
suite.export(module);
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
require("../env");
2+
require("../../d3");
3+
4+
var vows = require("vows"),
5+
assert = require("assert");
6+
7+
var suite = vows.describe("selection.selectAll");
8+
9+
suite.addBatch({
10+
"select(body)": {
11+
topic: function() {
12+
var body = d3.select("body").html("");
13+
body.append("div").attr("class", "first");
14+
body.append("div").attr("class", "second");
15+
return body;
16+
},
17+
"selects all matching elements": function(body) {
18+
var div = body.selectAll("div");
19+
assert.isTrue(div[0][0] === document.body.firstChild);
20+
assert.isTrue(div[0][1] === document.body.lastChild);
21+
assert.equal(div.length, 1);
22+
assert.equal(div[0].length, 2);
23+
},
24+
"propagates parent node to the selected elements": function(body) {
25+
var div = body.selectAll("div");
26+
assert.isNotNull(div[0].parentNode);
27+
assert.isTrue(div[0].parentNode === document.body);
28+
},
29+
"does not propagate data if data was specified": function(body) {
30+
var div = body.data([new Object()]).selectAll("div");
31+
assert.isUndefined(div[0][0].__data__);
32+
assert.isUndefined(div[0][1].__data__);
33+
},
34+
"does not propagate data if data was not specified": function(body) {
35+
var div = body.selectAll("div").data([1, 2]);
36+
div = body.data([new Object()]).selectAll("div");
37+
assert.equal(div[0][0].__data__, 1);
38+
assert.equal(div[0][1].__data__, 2);
39+
},
40+
"returns empty array if no match is found": function(body) {
41+
var span = body.selectAll("span");
42+
assert.equal(span.length, 1);
43+
assert.equal(span[0].length, 0);
44+
}
45+
}
46+
});
47+
48+
suite.addBatch({
49+
"selectAll(div)": {
50+
topic: function() {
51+
var div = d3.select("body").html("").selectAll("div").data(d3.range(2)).enter().append("div");
52+
div.append("span").attr("class", "first");
53+
div.append("span").attr("class", "second");
54+
return div;
55+
},
56+
"selects all matching elements": function(div) {
57+
var span = div.selectAll("span");
58+
assert.equal(span.length, 2);
59+
assert.equal(span[0].length, 2);
60+
assert.isTrue(span[0][0].parentNode === div[0][0]);
61+
assert.isTrue(span[0][1].parentNode === div[0][0]);
62+
assert.isTrue(span[1][0].parentNode === div[0][1]);
63+
assert.isTrue(span[1][1].parentNode === div[0][1]);
64+
},
65+
"propagates parent node to the selected elements": function(div) {
66+
var span = div.selectAll("span");
67+
assert.isNotNull(span[0].parentNode);
68+
assert.isTrue(span[0].parentNode === div[0][0]);
69+
assert.isTrue(span[1].parentNode === div[0][1]);
70+
},
71+
"does not propagate data if data was specified": function(div) {
72+
var span = div.selectAll("span");
73+
delete span[0][0].__data__;
74+
delete span[0][1].__data__;
75+
span = div.data([new Object(), new Object()]).selectAll("span");
76+
assert.isUndefined(span[0][0].__data__);
77+
assert.isUndefined(span[0][1].__data__);
78+
},
79+
"does not propagate data if data was not specified": function(div) {
80+
var a = new Object(), b = new Object(), span = div.selectAll("span").data([a, b]);
81+
delete div[0][0].__data__;
82+
delete div[0][1].__data__;
83+
span = div.selectAll("span");
84+
assert.equal(span[0][0].__data__, a);
85+
assert.equal(span[0][1].__data__, b);
86+
},
87+
"returns empty array if no match is found": function(div) {
88+
var div = div.selectAll("div");
89+
assert.equal(div.length, 2);
90+
assert.equal(div[0].length, 0);
91+
assert.equal(div[1].length, 0);
92+
}
93+
}
94+
});
95+
96+
suite.export(module);

test/core/selection-style-test.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,23 @@ suite.addBatch({
1313
},
1414
"sets a property as a string": function(body) {
1515
body.style("background-color", "red");
16-
assert.equal(body[0][0].style["background-color"], "red");
16+
assert.equal(document.body.style["background-color"], "red");
1717
},
1818
"sets a property as a number": function(body) {
1919
body.style("opacity", .3);
20-
assert.equal(body[0][0].style["opacity"], ".3");
20+
assert.equal(document.body.style["opacity"], ".3");
2121
},
2222
"sets a property as a function": function(body) {
2323
body.style("background-color", function() { return "orange"; });
24-
assert.equal(body[0][0].style["background-color"], "orange");
24+
assert.equal(document.body.style["background-color"], "orange");
2525
},
2626
"gets a property value": function(body) {
27-
body[0][0].style.setProperty("background-color", "yellow", "");
27+
document.body.style.setProperty("background-color", "yellow", "");
2828
assert.equal(body.style("background-color"), "yellow");
2929
},
3030
"observes the specified priority": function(body) {
3131
body.style("background-color", "green", "important");
32-
assert.equal(body[0][0].style.getPropertyPriority("background-color"), "important");
32+
assert.equal(document.body.style.getPropertyPriority("background-color"), "important");
3333
}
3434
}
3535
});

test/env.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
document = require("jsdom").jsdom("<html><head></head><body></body></html>", null, {features: {QuerySelector: true}});
1+
document = require("jsdom").jsdom("<html><head></head><body></body></html>");
22
window = document.createWindow();
33
navigator = window.navigator;
44

5+
require("../lib/sizzle/sizzle");
6+
Sizzle = window.Sizzle;
7+
58
process.env.TZ = "America/Los_Angeles";

0 commit comments

Comments
 (0)