3
var vows = require("vows"),
4
assert = require("assert");
6
var suite = vows.describe("selection.filter");
11
return d3.select("body").html("").selectAll("div")
13
.enter().append("div")
15
.data(function(d) { d <<= 1; return [d, d + 1]; })
16
.enter().append("span");
18
"preserves matching elements": function(span) {
19
var some = span.filter(function(d, i) { return i === 0; });
20
assert.isTrue(some[0][0] === span[0][0]);
21
assert.isTrue(some[1][0] === span[1][0]);
23
"removes non-matching elements": function(span) {
24
var some = d3.merge(span.filter(function(d, i) { return d & 1; }));
25
assert.equal(some.indexOf(span[0][0]), -1);
26
assert.equal(some.indexOf(span[1][0]), -1);
28
"preserves data": function(span) {
29
var some = span.filter(function(d, i) { return d & 1; });
30
assert.equal(some[0][0].__data__, 1);
31
assert.equal(some[1][0].__data__, 3);
33
"preserves grouping": function(span) {
34
var some = span.filter(function(d, i) { return d & 1; });
35
assert.equal(some.length, 2);
36
assert.equal(some[0].length, 1);
37
assert.equal(some[1].length, 1);
39
"preserves parent node": function(span) {
40
var some = span.filter(function(d, i) { return d & 1; });
41
assert.isTrue(some[0].parentNode === span[0].parentNode);
42
assert.isTrue(some[1].parentNode === span[1].parentNode);
44
"does not preserve index": function(span) {
46
span.filter(function(d, i) { return d & 1; }).each(function(d, i) { indexes.push(i); });
47
assert.deepEqual(indexes, [0, 0]);
49
"ignores null nodes": function() {
50
var span = d3.selectAll("span");
52
var some = span.filter(function(d, i) { return d & 1; });
53
assert.isTrue(some[0][0] === span[0][3]);
54
assert.equal(some.length, 1);
56
"can be specified as a selector": function(span) {
57
span.classed("foo", function(d, i) { return d & 1; });
58
var some = span.filter(".foo");
59
assert.equal(some.length, 2);
60
assert.equal(some[0].length, 1);
61
assert.equal(some[1].length, 1);
63
"returns a new selection": function(span) {
64
assert.isFalse(span.filter(function() { return 1; }) === span);