var assert = require(“../assert”);

module.exports = {

topic: function(d3) {
  return d3.select("body").html("").selectAll()
      .data(["foo", "bar"])
    .enter().append("div")
      .attr("class", String);
},
"defaults to zero": function(selection) {
  var t = selection.transition();
  assert.strictEqual(t[0][0].__transition__[t.id].delay, 0);
  assert.strictEqual(t[0][1].__transition__[t.id].delay, 0);
},
"can specify delay as a number": function(selection) {
  var t = selection.transition().delay(150);
  assert.strictEqual(t[0][0].__transition__[t.id].delay, 150);
  assert.strictEqual(t[0][1].__transition__[t.id].delay, 150);
  t.delay(250);
  assert.strictEqual(t[0][0].__transition__[t.id].delay, 250);
  assert.strictEqual(t[0][1].__transition__[t.id].delay, 250);
},
"can specify delay as a negative number": function(selection) {
  var t = selection.transition().delay(-250);
  assert.strictEqual(t[0][0].__transition__[t.id].delay, -250);
  assert.strictEqual(t[0][1].__transition__[t.id].delay, -250);
},
"NaN delays are treated as 0ms": function(selection) {
  var t = selection.transition().delay(NaN);
  assert.strictEqual(t[0][0].__transition__[t.id].delay, 0);
  assert.strictEqual(t[0][1].__transition__[t.id].delay, 0);
},
"floating-point durations are floored to integers": function(selection) {
  var t = selection.transition().delay(14.6);
  assert.strictEqual(t[0][0].__transition__[t.id].delay, 14);
  assert.strictEqual(t[0][1].__transition__[t.id].delay, 14);
  var t = selection.transition().delay("16.99");
  assert.strictEqual(t[0][0].__transition__[t.id].delay, 16);
  assert.strictEqual(t[0][1].__transition__[t.id].delay, 16);
},
"can specify delay as a function": function(selection) {
  var dd = [], ii = [], tt = [], t = selection.transition().delay(f);
  function f(d, i) { dd.push(d); ii.push(i); tt.push(this); return i * 20; }
  assert.strictEqual(t[0][0].__transition__[t.id].delay, 0);
  assert.strictEqual(t[0][1].__transition__[t.id].delay, 20);
  assert.deepEqual(dd, ["foo", "bar"], "expected data, got {actual}");
  assert.deepEqual(ii, [0, 1], "expected index, got {actual}");
  assert.domEqual(tt[0], t[0][0], "expected this, got {actual}");
  assert.domEqual(tt[1], t[0][1], "expected this, got {actual}");
},
"coerces delay to a number": function(selection) {
  var t = selection.transition().delay("150");
  assert.strictEqual(t[0][0].__transition__[t.id].delay, 150);
  assert.strictEqual(t[0][1].__transition__[t.id].delay, 150);
}

};