var vows = require("vows"), load = require("../load"), assert = require("../assert"); var suite = vows.describe("selection.datum"); suite.addBatch({ "select(body)": { topic: load("selection/datum").document(), "on a simple page": { topic: function(d3) { return d3.select("body"); }, "updates the data according to the specified function": function(body) { body.data([42]).datum(function(d, i) { return d + i; }); assert.equal(body.node().__data__, 42); }, "updates the data to the specified constant": function(body) { body.datum(43); assert.equal(body.node().__data__, 43); }, "deletes the data if the function returns null": function(body) { body.data([42]).datum(function() { return null; }); assert.isFalse("__data__" in body.node()); }, "deletes the data if the constant is null": function(body) { body.data([42]).datum(null); assert.isFalse("__data__" in body.node()); }, "returns the current selection": function(body) { assert.isTrue(body.datum(function() { return 1; }) === body); assert.isTrue(body.datum(2) === body); }, "with no arguments, returns the first node's datum": function(body) { body.data([42]); assert.equal(body.datum(), 42); } } } }); suite.addBatch({ "selectAll(div)": { topic: load("selection/datum").document(), "on a simple page": { topic: function(d3) { return d3.select("body").selectAll("div").data([0, 1]).enter().append("div"); }, "updates the data according to the specified function": function(div) { div.data([42, 43]).datum(function(d, i) { return d + i; }); assert.equal(div[0][0].__data__, 42); assert.equal(div[0][1].__data__, 44); }, "updates the data to the specified constant": function(div) { div.datum(44); assert.equal(div[0][0].__data__, 44); assert.equal(div[0][1].__data__, 44); }, "deletes the data if the function returns null": function(div) { div.datum(function() { return null; }); assert.isFalse("__data__" in div[0][0]); assert.isFalse("__data__" in div[0][1]); }, "deletes the data if the constant is null": function(div) { div.datum(null); assert.isFalse("__data__" in div[0][0]); assert.isFalse("__data__" in div[0][1]); }, "returns the current selection": function(div) { assert.isTrue(div.datum(function() { return 1; }) === div); assert.isTrue(div.datum(2) === div); }, "ignores null nodes": function(div) { var node = div[0][1]; div[0][1] = null; div.datum(function() { return 1; }); assert.equal(div[0][0].__data__, 1); assert.equal(node.__data__, 2); div.datum(43); assert.equal(div[0][0].__data__, 43); assert.equal(node.__data__, 2); } } } }); suite.export(module);