var vows = require("vows"),
    _ = require("../../"),
    load = require("../load"),
    assert = require("../assert");

var suite = vows.describe("d3.scale.category");

suite.addBatch({
  "category": {
    topic: load("scale/category").expression("d3.scale"),
    "category10": category("category10", 10),
    "category20": category("category20", 20),
    "category20b": category("category20b", 20),
    "category20c": category("category20c", 20)
  }
});

function category(category, n) {
  return {
    "is an ordinal scale": function(scale) {
      var x = scale[category](), colors = x.range();
      assert.lengthOf(x.domain(), 0);
      assert.lengthOf(x.range(), n);
      assert.equal(x(1), colors[0]);
      assert.equal(x(2), colors[1]);
      assert.equal(x(1), colors[0]);
      var y = x.copy();
      assert.deepEqual(y.domain(), x.domain());
      assert.deepEqual(y.range(), x.range());
      x.domain(_.range(n));
      for (var i = 0; i < n; ++i) assert.equal(x(i + n), x(i));
      assert.equal(y(1), colors[0]);
      assert.equal(y(2), colors[1]);
    },
    "each instance is isolated": function(scale) {
      var a = scale[category](), b = scale[category](), colors = a.range();
      assert.equal(a(1), colors[0]);
      assert.equal(b(2), colors[0]);
      assert.equal(b(1), colors[1]);
      assert.equal(a(1), colors[0]);
    },
    "contains the expected number of values in the range": function(scale) {
      var x = scale[category]();
      assert.lengthOf(x.range(), n);
    },
    "each range value is distinct": function(scale) {
      var map = {}, count = 0, x = scale[category]();
      x.range().forEach(function(v) {
        if (!(v in map)) {
          map[v] = ++count;
        }
      });
      assert.equal(count, x.range().length);
    },
    "each range value is a hexadecimal color": function(scale) {
      var x = scale[category]();
      x.range().forEach(function(v) {
        assert.match(v, /#[0-9a-f]{6}/);
        v = _.rgb(v);
        assert.isFalse(isNaN(v.r));
        assert.isFalse(isNaN(v.g));
        assert.isFalse(isNaN(v.b));
      });
    },
    "no range values are very dark or very light": function(scale) {
      var x = scale[category]();
      x.range().forEach(function(v) {
        var c = _.hsl(v);
        assert.isTrue(c.l >= .34, "expected " + v + " to be lighter (l = " + c.l + ")");
        assert.isTrue(c.l <= .89, "expected " + v + " to be darker (l = " + c.l + ")");
      });
    }
  };
}

suite.export(module);
