aboutsummaryrefslogtreecommitdiffstats
path: root/web/nms.gathering.org/speedometer/d3-master/test/time
diff options
context:
space:
mode:
authorKristian Lyngstol <kristian@bohemians.org>2015-04-02 19:24:45 +0200
committerKristian Lyngstol <kristian@bohemians.org>2015-04-02 19:24:45 +0200
commit0d8bba263dc195147d6fdb09662e7926f0a58b3e (patch)
tree4c570b4376c323e585120e7695b8715be7aa8881 /web/nms.gathering.org/speedometer/d3-master/test/time
parente4354b47bd8891c5b1ee591fdf74b3ca67eee461 (diff)
Bump lots of changes
Diffstat (limited to 'web/nms.gathering.org/speedometer/d3-master/test/time')
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/day-test.js178
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/dayOfYear-test.js16
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/days-test.js95
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/format-iso-test.js33
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/format-test.js354
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/format-utc-test.js226
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/hour-test.js215
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/hours-test.js109
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/minute-test.js127
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/minutes-test.js91
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/month-test.js150
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/months-test.js95
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/scale-test.js684
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/second-test.js143
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/seconds-test.js91
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/time.js30
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/week-test.js162
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/weeks-test.js95
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/year-test.js137
-rw-r--r--web/nms.gathering.org/speedometer/d3-master/test/time/years-test.js74
20 files changed, 3105 insertions, 0 deletions
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/day-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/day-test.js
new file mode 100644
index 0000000..c408b5a
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/day-test.js
@@ -0,0 +1,178 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.day");
+
+suite.addBatch({
+ "day": {
+ topic: load("time/day").expression("d3.time.day"),
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns midnights": function(floor) {
+ assert.deepEqual(floor(local(2010, 11, 31, 23)), local(2010, 11, 31));
+ assert.deepEqual(floor(local(2011, 00, 01, 00)), local(2011, 00, 01));
+ assert.deepEqual(floor(local(2011, 00, 01, 01)), local(2011, 00, 01));
+ },
+ "observes start of daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 02, 13, 07)), local(2011, 02, 12));
+ assert.deepEqual(floor(utc(2011, 02, 13, 08)), local(2011, 02, 13));
+ assert.deepEqual(floor(utc(2011, 02, 13, 09)), local(2011, 02, 13));
+ assert.deepEqual(floor(utc(2011, 02, 13, 10)), local(2011, 02, 13));
+ },
+ "observes end of daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 10, 06, 07)), local(2011, 10, 06));
+ assert.deepEqual(floor(utc(2011, 10, 06, 08)), local(2011, 10, 06));
+ assert.deepEqual(floor(utc(2011, 10, 06, 09)), local(2011, 10, 06));
+ assert.deepEqual(floor(utc(2011, 10, 06, 10)), local(2011, 10, 06));
+ },
+ "correctly handles years in the first century": function(floor) {
+ assert.deepEqual(floor(local(0011, 10, 06, 07)), local(0011, 10, 06));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns midnights": function(ceil) {
+ assert.deepEqual(ceil(local(2010, 11, 30, 23)), local(2010, 11, 31));
+ assert.deepEqual(ceil(local(2010, 11, 31, 00)), local(2010, 11, 31));
+ assert.deepEqual(ceil(local(2010, 11, 31, 01)), local(2011, 00, 01));
+ },
+ "observes start of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 02, 13, 07)), local(2011, 02, 13));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 08)), local(2011, 02, 13));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 09)), local(2011, 02, 14));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 10)), local(2011, 02, 14));
+ },
+ "observes end of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 10, 06, 07)), local(2011, 10, 06));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 08)), local(2011, 10, 07));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 09)), local(2011, 10, 07));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 10)), local(2011, 10, 07));
+ },
+ "handles midnight for leap years": function(ceil) {
+ assert.deepEqual(ceil(utc(2012, 02, 01, 00)), local(2012, 02, 01));
+ assert.deepEqual(ceil(utc(2012, 02, 01, 00)), local(2012, 02, 01));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = local(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, local(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), +1), local(2011, 00, 01, 23, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 456), -2), local(2010, 11, 29, 23, 59, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31), -1), local(2010, 11, 30));
+ assert.deepEqual(offset(local(2011, 00, 01), -2), local(2010, 11, 30));
+ assert.deepEqual(offset(local(2011, 00, 01), -1), local(2010, 11, 31));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31), +1), local(2011, 00, 01));
+ assert.deepEqual(offset(local(2010, 11, 30), +2), local(2011, 00, 01));
+ assert.deepEqual(offset(local(2010, 11, 30), +1), local(2010, 11, 31));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), 0), local(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 58, 000), 0), local(2010, 11, 31, 23, 59, 58, 000));
+ }
+ },
+ "UTC": {
+ topic: function(interval) {
+ return interval.utc;
+ },
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns midnights": function(floor) {
+ assert.deepEqual(floor(utc(2010, 11, 31, 23)), utc(2010, 11, 31));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00)), utc(2011, 00, 01));
+ assert.deepEqual(floor(utc(2011, 00, 01, 01)), utc(2011, 00, 01));
+ },
+ "does not observe the start of daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 02, 13, 07)), utc(2011, 02, 13));
+ assert.deepEqual(floor(utc(2011, 02, 13, 08)), utc(2011, 02, 13));
+ assert.deepEqual(floor(utc(2011, 02, 13, 09)), utc(2011, 02, 13));
+ assert.deepEqual(floor(utc(2011, 02, 13, 10)), utc(2011, 02, 13));
+ },
+ "does not observe the end of daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 10, 06, 05)), utc(2011, 10, 06));
+ assert.deepEqual(floor(utc(2011, 10, 06, 06)), utc(2011, 10, 06));
+ assert.deepEqual(floor(utc(2011, 10, 06, 07)), utc(2011, 10, 06));
+ assert.deepEqual(floor(utc(2011, 10, 06, 08)), utc(2011, 10, 06));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns midnights": function(ceil) {
+ assert.deepEqual(ceil(utc(2010, 11, 30, 23)), utc(2010, 11, 31));
+ assert.deepEqual(ceil(utc(2010, 11, 31, 00)), utc(2010, 11, 31));
+ assert.deepEqual(ceil(utc(2010, 11, 31, 01)), utc(2011, 00, 01));
+ },
+ "does not observe the start of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 02, 13, 07)), utc(2011, 02, 14));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 08)), utc(2011, 02, 14));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 09)), utc(2011, 02, 14));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 10)), utc(2011, 02, 14));
+ },
+ "does not observe the end of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 10, 06, 05)), utc(2011, 10, 07));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 06)), utc(2011, 10, 07));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 07)), utc(2011, 10, 07));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 08)), utc(2011, 10, 07));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = utc(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, utc(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), +1), utc(2011, 00, 01, 23, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 456), -2), utc(2010, 11, 29, 23, 59, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31), -1), utc(2010, 11, 30));
+ assert.deepEqual(offset(utc(2011, 00, 01), -2), utc(2010, 11, 30));
+ assert.deepEqual(offset(utc(2011, 00, 01), -1), utc(2010, 11, 31));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31), +1), utc(2011, 00, 01));
+ assert.deepEqual(offset(utc(2010, 11, 30), +2), utc(2011, 00, 01));
+ assert.deepEqual(offset(utc(2010, 11, 30), +1), utc(2010, 11, 31));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), 0), utc(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 58, 000), 0), utc(2010, 11, 31, 23, 59, 58, 000));
+ }
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/dayOfYear-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/dayOfYear-test.js
new file mode 100644
index 0000000..91866cd
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/dayOfYear-test.js
@@ -0,0 +1,16 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert");
+
+var suite = vows.describe("d3.time.dayOfYear");
+
+suite.addBatch({
+ "dayOfYear": {
+ topic: load("time/day").expression("d3.time.dayOfYear"),
+ "no floating-point rounding error": function(dayOfYear) {
+ assert.equal(dayOfYear(new Date(2011, 4, 9)), 128);
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/days-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/days-test.js
new file mode 100644
index 0000000..e20dc36
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/days-test.js
@@ -0,0 +1,95 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.days");
+
+suite.addBatch({
+ "days": {
+ topic: load("time/day").expression("d3.time.days"),
+ "returns midnights": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31, 12), local(2011, 0, 3, 12)), [
+ local(2011, 0, 1),
+ local(2011, 0, 2),
+ local(2011, 0, 3)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31), local(2011, 0, 3))[0], local(2010, 11, 31));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31), local(2011, 0, 3))[2], local(2011, 0, 2));
+ },
+ "can skip days": function(range) {
+ assert.deepEqual(range(local(2010, 11, 29), local(2011, 0, 14), 5), [
+ local(2010, 11, 31),
+ local(2011, 0, 1),
+ local(2011, 0, 6),
+ local(2011, 0, 11)
+ ]);
+ },
+ "observes start of daylight savings time": function(range) {
+ assert.deepEqual(range(local(2011, 2, 12), local(2011, 2, 16)), [
+ local(2011, 2, 12),
+ local(2011, 2, 13),
+ local(2011, 2, 14),
+ local(2011, 2, 15)
+ ]);
+ },
+ "observes end of daylight savings time": function(range) {
+ assert.deepEqual(range(local(2011, 10, 5), local(2011, 10, 9)), [
+ local(2011, 10, 5),
+ local(2011, 10, 6),
+ local(2011, 10, 7),
+ local(2011, 10, 8)
+ ]);
+ },
+ "UTC": {
+ topic: function(range) {
+ return range.utc;
+ },
+ "returns midnights": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31, 12), utc(2011, 0, 3, 12)), [
+ utc(2011, 0, 1),
+ utc(2011, 0, 2),
+ utc(2011, 0, 3)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31), utc(2011, 0, 3))[0], utc(2010, 11, 31));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31), utc(2011, 0, 3))[2], utc(2011, 0, 2));
+ },
+ "can skip days": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 29), utc(2011, 0, 14), 5), [
+ utc(2010, 11, 31),
+ utc(2011, 0, 1),
+ utc(2011, 0, 6),
+ utc(2011, 0, 11)
+ ]);
+ },
+ "does not observe the start of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 2, 12), utc(2011, 2, 16)), [
+ utc(2011, 2, 12),
+ utc(2011, 2, 13),
+ utc(2011, 2, 14),
+ utc(2011, 2, 15)
+ ]);
+ },
+ "does not observe the end of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 10, 5), utc(2011, 10, 9)), [
+ utc(2011, 10, 5),
+ utc(2011, 10, 6),
+ utc(2011, 10, 7),
+ utc(2011, 10, 8)
+ ]);
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/format-iso-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/format-iso-test.js
new file mode 100644
index 0000000..fbc0f91
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/format-iso-test.js
@@ -0,0 +1,33 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.format");
+
+suite.addBatch({
+ "format.iso": {
+ topic: load("time/format-iso").expression("d3.time.format.iso"),
+
+ "toString is %Y-%m-%dT%H:%M:%S.%LZ": function(format) {
+ assert.equal(format + "", "%Y-%m-%dT%H:%M:%S.%LZ");
+ },
+
+ "formats as ISO 8601": function(format) {
+ assert.equal(format(utc(1990, 0, 1, 0, 0, 0)), "1990-01-01T00:00:00.000Z");
+ assert.equal(format(utc(2011, 11, 31, 23, 59, 59)), "2011-12-31T23:59:59.000Z");
+ },
+
+ "parse": {
+ "parses as ISO 8601": function(format) {
+ var p = format.parse;
+ assert.deepEqual(p("1990-01-01T00:00:00.000Z"), utc(1990, 0, 1, 0, 0, 0));
+ assert.deepEqual(p("2011-12-31T23:59:59.000Z"), utc(2011, 11, 31, 23, 59, 59));
+ assert.isNull(p("1990-01-01T00:00:00.000X"));
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/format-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/format-test.js
new file mode 100644
index 0000000..5599b89
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/format-test.js
@@ -0,0 +1,354 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local;
+
+var suite = vows.describe("d3.time.format");
+
+suite.addBatch({
+ "format": {
+ topic: load("time/format").expression("d3.time.format"),
+ "formats abbreviated weekday": function(format) {
+ var f = format("%a");
+ assert.equal(f(local(1990, 0, 1)), "Mon");
+ assert.equal(f(local(1990, 0, 2)), "Tue");
+ assert.equal(f(local(1990, 0, 3)), "Wed");
+ assert.equal(f(local(1990, 0, 4)), "Thu");
+ assert.equal(f(local(1990, 0, 5)), "Fri");
+ assert.equal(f(local(1990, 0, 6)), "Sat");
+ assert.equal(f(local(1990, 0, 7)), "Sun");
+ },
+ "formats weekday": function(format) {
+ var f = format("%A");
+ assert.equal(f(local(1990, 0, 1)), "Monday");
+ assert.equal(f(local(1990, 0, 2)), "Tuesday");
+ assert.equal(f(local(1990, 0, 3)), "Wednesday");
+ assert.equal(f(local(1990, 0, 4)), "Thursday");
+ assert.equal(f(local(1990, 0, 5)), "Friday");
+ assert.equal(f(local(1990, 0, 6)), "Saturday");
+ assert.equal(f(local(1990, 0, 7)), "Sunday");
+ },
+ "formats abbreviated month": function(format) {
+ var f = format("%b");
+ assert.equal(f(local(1990, 0, 1)), "Jan");
+ assert.equal(f(local(1990, 1, 1)), "Feb");
+ assert.equal(f(local(1990, 2, 1)), "Mar");
+ assert.equal(f(local(1990, 3, 1)), "Apr");
+ assert.equal(f(local(1990, 4, 1)), "May");
+ assert.equal(f(local(1990, 5, 1)), "Jun");
+ assert.equal(f(local(1990, 6, 1)), "Jul");
+ assert.equal(f(local(1990, 7, 1)), "Aug");
+ assert.equal(f(local(1990, 8, 1)), "Sep");
+ assert.equal(f(local(1990, 9, 1)), "Oct");
+ assert.equal(f(local(1990, 10, 1)), "Nov");
+ assert.equal(f(local(1990, 11, 1)), "Dec");
+ },
+ "formats month": function(format) {
+ var f = format("%B");
+ assert.equal(f(local(1990, 0, 1)), "January");
+ assert.equal(f(local(1990, 1, 1)), "February");
+ assert.equal(f(local(1990, 2, 1)), "March");
+ assert.equal(f(local(1990, 3, 1)), "April");
+ assert.equal(f(local(1990, 4, 1)), "May");
+ assert.equal(f(local(1990, 5, 1)), "June");
+ assert.equal(f(local(1990, 6, 1)), "July");
+ assert.equal(f(local(1990, 7, 1)), "August");
+ assert.equal(f(local(1990, 8, 1)), "September");
+ assert.equal(f(local(1990, 9, 1)), "October");
+ assert.equal(f(local(1990, 10, 1)), "November");
+ assert.equal(f(local(1990, 11, 1)), "December");
+ },
+ "formats locale date and time": function(format) {
+ var f = format("%c");
+ assert.equal(f(local(1990, 0, 1)), "Mon Jan 1 00:00:00 1990");
+ },
+ "formats zero-padded date": function(format) {
+ var f = format("%d");
+ assert.equal(f(local(1990, 0, 1)), "01");
+ },
+ "formats space-padded date": function(format) {
+ var f = format("%e");
+ assert.equal(f(local(1990, 0, 1)), " 1");
+ },
+ "formats zero-padded hour (24)": function(format) {
+ var f = format("%H");
+ assert.equal(f(local(1990, 0, 1, 0)), "00");
+ assert.equal(f(local(1990, 0, 1, 13)), "13");
+ },
+ "formats zero-padded hour (12)": function(format) {
+ var f = format("%I");
+ assert.equal(f(local(1990, 0, 1, 0)), "12");
+ assert.equal(f(local(1990, 0, 1, 13)), "01");
+ },
+ "formats zero-padded day of year": function(format) {
+ var f = format("%j");
+ assert.equal(f(local(1990, 0, 1)), "001");
+ assert.equal(f(local(1990, 5, 1)), "152");
+ assert.equal(f(local(2010, 2, 13)), "072");
+ assert.equal(f(local(2010, 2, 14)), "073"); // DST begins
+ assert.equal(f(local(2010, 2, 15)), "074");
+ assert.equal(f(local(2010, 10, 6)), "310");
+ assert.equal(f(local(2010, 10, 7)), "311"); // DST ends
+ assert.equal(f(local(2010, 10, 8)), "312");
+ },
+ "formats zero-padded month": function(format) {
+ var f = format("%m");
+ assert.equal(f(local(1990, 0, 1)), "01");
+ assert.equal(f(local(1990, 9, 1)), "10");
+ },
+ "formats zero-padded minute": function(format) {
+ var f = format("%M");
+ assert.equal(f(local(1990, 0, 1, 0, 0)), "00");
+ assert.equal(f(local(1990, 0, 1, 0, 32)), "32");
+ },
+ "formats AM or PM": function(format) {
+ var f = format("%p");
+ assert.equal(f(local(1990, 0, 1, 0)), "AM");
+ assert.equal(f(local(1990, 0, 1, 13)), "PM");
+ },
+ "formats zero-padded second": function(format) {
+ var f = format("%S");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 0)), "00");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 32)), "32");
+ var f = format("%0S");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 0)), "00");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 32)), "32");
+ },
+ "formats space-padded second": function(format) {
+ var f = format("%_S");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 0)), " 0");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 3)), " 3");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 32)), "32");
+ },
+ "formats no-padded second": function(format) {
+ var f = format("%-S");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 0)), "0");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 3)), "3");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 32)), "32");
+ },
+ "formats zero-padded millisecond": function(format) {
+ var f = format("%L");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 0, 0)), "000");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 0, 432)), "432");
+ },
+ "formats zero-padded week number": function(format) {
+ var f = format("%U");
+ assert.equal(f(local(1990, 0, 1)), "00");
+ assert.equal(f(local(1990, 5, 1)), "21");
+ assert.equal(f(local(2010, 2, 13, 23)), "10");
+ assert.equal(f(local(2010, 2, 14, 00)), "11"); // DST begins
+ assert.equal(f(local(2010, 2, 15, 00)), "11");
+ assert.equal(f(local(2010, 10, 6, 23)), "44");
+ assert.equal(f(local(2010, 10, 7, 00)), "45"); // DST ends
+ assert.equal(f(local(2010, 10, 8, 00)), "45");
+ },
+ "formats locale date": function(format) {
+ var f = format("%x");
+ assert.equal(f(local(1990, 0, 1)), "01/01/1990");
+ assert.equal(f(local(2010, 5, 1)), "06/01/2010");
+ },
+ "formats locale time": function(format) {
+ var f = format("%X");
+ assert.equal(f(local(1990, 0, 1)), "00:00:00");
+ assert.equal(f(local(1990, 0, 1, 13, 34, 59)), "13:34:59");
+ },
+ "formats zero-padded two-digit year": function(format) {
+ var f = format("%y");
+ assert.equal(f(local(1990, 0, 1)), "90");
+ assert.equal(f(local(2002, 0, 1)), "02");
+ assert.equal(f(local(-2, 0, 1)), "-02");
+ },
+ "formats zero-padded four-digit year": function(format) {
+ var f = format("%Y");
+ assert.equal(f(local(123, 0, 1)), "0123");
+ assert.equal(f(local(1990, 0, 1)), "1990");
+ assert.equal(f(local(2002, 0, 1)), "2002");
+ assert.equal(f(local(10002, 0, 1)), "0002");
+ assert.equal(f(local(-2, 0, 1)), "-0002");
+ },
+ "formats time zone": function(format) {
+ var f = format("%Z");
+ assert.equal(f(local(1990, 0, 1)), "-0800");
+ },
+ "formats literal percent sign": function(format) {
+ var f = format("%%");
+ assert.equal(f(local(1990, 0, 1)), "%");
+ },
+
+ "multi": {
+ topic: function(format) {
+ return format.multi([
+ [".%L", function(d) { return d.getMilliseconds(); }],
+ [":%S", function(d) { return d.getSeconds(); }],
+ ["%I:%M", function(d) { return d.getMinutes(); }],
+ ["%a %d", function(d) { return d.getDay() && d.getDate() != 1; }],
+ ["%b %d", function(d) { return d.getDate() != 1; }],
+ ["%I %p", function(d) { return d.getHours(); }],
+ ["%B", function(d) { return d.getMonth(); }],
+ ["%Y", function() { return true; }]
+ ]);
+ },
+ "returns a multi-formatter using the predicated formats": function(f) {
+ assert.equal(f(local(1990, 0, 1, 1)), "01 AM");
+ },
+ "applies the first format for which the predicate returns true": function(f) {
+ assert.equal(f(local(1990, 0, 1, 0, 0, 0, 12)), ".012");
+ assert.equal(f(local(1990, 0, 1, 0, 0, 1)), ":01");
+ assert.equal(f(local(1990, 0, 1, 0, 1)), "12:01");
+ assert.equal(f(local(1990, 0, 2)), "Tue 02");
+ assert.equal(f(local(1990, 1, 1)), "February");
+ assert.equal(f(local(1990, 0, 1)), "1990");
+ }
+ },
+
+ "parse": {
+ "parses abbreviated weekday and numeric date": function(format) {
+ var p = format("%a %m/%d/%Y").parse;
+ assert.deepEqual(p("Sun 01/01/1990"), local(1990, 0, 1));
+ assert.deepEqual(p("Wed 02/03/1991"), local(1991, 1, 3));
+ assert.isNull(p("XXX 03/10/2010"));
+ },
+ "parses weekday and numeric date": function(format) {
+ var p = format("%A %m/%d/%Y").parse;
+ assert.deepEqual(p("Sunday 01/01/1990"), local(1990, 0, 1));
+ assert.deepEqual(p("Wednesday 02/03/1991"), local(1991, 1, 3));
+ assert.isNull(p("Caturday 03/10/2010"));
+ },
+ "parses abbreviated weekday, week number (Sunday) and year": function(format) {
+ var p = format("%a %U %Y").parse;
+ assert.deepEqual(p("Mon 00 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("Sun 05 1991"), local(1991, 1, 3));
+ assert.deepEqual(p("Sun 01 1995"), local(1995, 0, 1));
+ assert.isNull(p("XXX 03 2010"));
+ },
+ "parses weekday, week number (Sunday) and year": function(format) {
+ var p = format("%A %U %Y").parse;
+ assert.deepEqual(p("Monday 00 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("Sunday 05 1991"), local(1991, 1, 3));
+ assert.deepEqual(p("Sunday 01 1995"), local(1995, 0, 1));
+ assert.isNull(p("Caturday 03 2010"));
+ },
+ "parses numeric weekday, week number (Sunday) and year": function(format) {
+ var p = format("%w %U %Y").parse;
+ assert.deepEqual(p("1 00 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("0 05 1991"), local(1991, 1, 3));
+ assert.deepEqual(p("0 01 1995"), local(1995, 0, 1));
+ assert.isNull(p("X 03 2010"));
+ },
+ "parses abbreviated weekday, week number (Monday) and year": function(format) {
+ var p = format("%a %W %Y").parse;
+ assert.deepEqual(p("Mon 01 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("Sun 04 1991"), local(1991, 1, 3));
+ assert.deepEqual(p("Sun 00 1995"), local(1995, 0, 1));
+ assert.isNull(p("XXX 03 2010"));
+ },
+ "parses weekday, week number (Monday) and year": function(format) {
+ var p = format("%A %W %Y").parse;
+ assert.deepEqual(p("Monday 01 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("Sunday 04 1991"), local(1991, 1, 3));
+ assert.deepEqual(p("Sunday 00 1995"), local(1995, 0, 1));
+ assert.isNull(p("Caturday 03 2010"));
+ },
+ "parses numeric weekday, week number (Monday) and year": function(format) {
+ var p = format("%w %W %Y").parse;
+ assert.deepEqual(p("1 01 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("0 04 1991"), local(1991, 1, 3));
+ assert.deepEqual(p("0 00 1995"), local(1995, 0, 1));
+ assert.isNull(p("X 03 2010"));
+ },
+ "parses numeric date": function(format) {
+ var p = format("%m/%d/%y").parse;
+ assert.deepEqual(p("01/01/90"), local(1990, 0, 1));
+ assert.deepEqual(p("02/03/91"), local(1991, 1, 3));
+ assert.isNull(p("03/10/2010"));
+ },
+ "parses locale date": function(format) {
+ var p = format("%x").parse;
+ assert.deepEqual(p("01/01/1990"), local(1990, 0, 1));
+ assert.deepEqual(p("02/03/1991"), local(1991, 1, 3));
+ assert.deepEqual(p("03/10/2010"), local(2010, 2, 10));
+ },
+ "parses abbreviated month, date and year": function(format) {
+ var p = format("%b %d, %Y").parse;
+ assert.deepEqual(p("jan 01, 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("feb 2, 2010"), local(2010, 1, 2));
+ assert.isNull(p("jan. 1, 1990"));
+ },
+ "parses month, date and year": function(format) {
+ var p = format("%B %d, %Y").parse;
+ assert.deepEqual(p("january 01, 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("February 2, 2010"), local(2010, 1, 2));
+ assert.isNull(p("jan 1, 1990"));
+ },
+ "parses day of year and numeric date": function(format) {
+ var p = format("%j %m/%d/%Y").parse;
+ assert.deepEqual(p("001 01/01/1990"), local(1990, 0, 1));
+ assert.deepEqual(p("034 02/03/1991"), local(1991, 1, 3));
+ assert.isNull(p("2012 03/10/2010"));
+ },
+ "parses locale date and time": function(format) {
+ var p = format("%c").parse;
+ assert.deepEqual(p("Mon Jan 1 00:00:00 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("Sun Jan 1 00:00:00 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("Mon Jan 01 00:00:00 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("Mon Jan 1 00:00:00 1990"), local(1990, 0, 1));
+ assert.deepEqual(p("Mon Jan 1 0:0:0 1990"), local(1990, 0, 1));
+ },
+ "parses twenty-four hour, minute and second": function(format) {
+ var p = format("%H:%M:%S").parse;
+ assert.deepEqual(p("00:00:00"), local(1900, 0, 1, 0, 0, 0));
+ assert.deepEqual(p("11:59:59"), local(1900, 0, 1, 11, 59, 59));
+ assert.deepEqual(p("12:00:00"), local(1900, 0, 1, 12, 0, 0));
+ assert.deepEqual(p("12:00:01"), local(1900, 0, 1, 12, 0, 1));
+ assert.deepEqual(p("23:59:59"), local(1900, 0, 1, 23, 59, 59));
+ },
+ "parses locale time": function(format) {
+ var p = format("%X").parse;
+ assert.deepEqual(p("00:00:00"), local(1900, 0, 1, 0, 0, 0));
+ assert.deepEqual(p("11:59:59"), local(1900, 0, 1, 11, 59, 59));
+ assert.deepEqual(p("12:00:00"), local(1900, 0, 1, 12, 0, 0));
+ assert.deepEqual(p("12:00:01"), local(1900, 0, 1, 12, 0, 1));
+ assert.deepEqual(p("23:59:59"), local(1900, 0, 1, 23, 59, 59));
+ },
+ "parses twelve hour, minute and second": function(format) {
+ var p = format("%I:%M:%S %p").parse;
+ assert.deepEqual(p("12:00:00 am"), local(1900, 0, 1, 0, 0, 0));
+ assert.deepEqual(p("11:59:59 AM"), local(1900, 0, 1, 11, 59, 59));
+ assert.deepEqual(p("12:00:00 pm"), local(1900, 0, 1, 12, 0, 0));
+ assert.deepEqual(p("12:00:01 pm"), local(1900, 0, 1, 12, 0, 1));
+ assert.deepEqual(p("11:59:59 PM"), local(1900, 0, 1, 23, 59, 59));
+ },
+ "parses literal %": function(format) {
+ var p = format("%% %m/%d/%Y").parse;
+ assert.deepEqual(p("% 01/01/1990"), local(1990, 0, 1));
+ assert.deepEqual(p("% 02/03/1991"), local(1991, 1, 3));
+ assert.isNull(p("%% 03/10/2010"));
+ },
+ "parses timezone offset": function(format) {
+ var p = format("%m/%d/%Y %Z").parse;
+ assert.deepEqual(p("01/02/1990 +0000"), local(1990, 0, 1, 16));
+ assert.deepEqual(p("01/02/1990 +0100"), local(1990, 0, 1, 15));
+ assert.deepEqual(p("01/02/1990 +0130"), local(1990, 0, 1, 14, 30));
+ assert.deepEqual(p("01/02/1990 -0100"), local(1990, 0, 1, 17));
+ assert.deepEqual(p("01/02/1990 -0130"), local(1990, 0, 1, 17, 30));
+ assert.deepEqual(p("01/02/1990 -0800"), local(1990, 0, 2, 0));
+ },
+ "ignores optional padding modifier, skipping zeroes and spaces": function(format) {
+ var p = format("%-m/%0d/%_Y").parse;
+ assert.deepEqual(p("01/ 1/1990"), local(1990, 0, 1));
+ },
+ "doesn't crash when given weird strings": function(format) {
+ try {
+ Object.prototype.foo = 10;
+ var p = format("%b %d, %Y").parse;
+ assert.isNull(p("foo 1, 1990"));
+ } finally {
+ delete Object.prototype.foo;
+ }
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/format-utc-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/format-utc-test.js
new file mode 100644
index 0000000..c8bfa54
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/format-utc-test.js
@@ -0,0 +1,226 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.format");
+
+suite.addBatch({
+ "format.utc": {
+ topic: load("time/format-utc").expression("d3.time.format.utc"),
+ "formats abbreviated weekday": function(format) {
+ var f = format("%a");
+ assert.equal(f(utc(1990, 0, 1)), "Mon");
+ assert.equal(f(utc(1990, 0, 2)), "Tue");
+ assert.equal(f(utc(1990, 0, 3)), "Wed");
+ assert.equal(f(utc(1990, 0, 4)), "Thu");
+ assert.equal(f(utc(1990, 0, 5)), "Fri");
+ assert.equal(f(utc(1990, 0, 6)), "Sat");
+ assert.equal(f(utc(1990, 0, 7)), "Sun");
+ },
+ "formats weekday": function(format) {
+ var f = format("%A");
+ assert.equal(f(utc(1990, 0, 1)), "Monday");
+ assert.equal(f(utc(1990, 0, 2)), "Tuesday");
+ assert.equal(f(utc(1990, 0, 3)), "Wednesday");
+ assert.equal(f(utc(1990, 0, 4)), "Thursday");
+ assert.equal(f(utc(1990, 0, 5)), "Friday");
+ assert.equal(f(utc(1990, 0, 6)), "Saturday");
+ assert.equal(f(utc(1990, 0, 7)), "Sunday");
+ },
+ "formats abbreviated month": function(format) {
+ var f = format("%b");
+ assert.equal(f(utc(1990, 0, 1)), "Jan");
+ assert.equal(f(utc(1990, 1, 1)), "Feb");
+ assert.equal(f(utc(1990, 2, 1)), "Mar");
+ assert.equal(f(utc(1990, 3, 1)), "Apr");
+ assert.equal(f(utc(1990, 4, 1)), "May");
+ assert.equal(f(utc(1990, 5, 1)), "Jun");
+ assert.equal(f(utc(1990, 6, 1)), "Jul");
+ assert.equal(f(utc(1990, 7, 1)), "Aug");
+ assert.equal(f(utc(1990, 8, 1)), "Sep");
+ assert.equal(f(utc(1990, 9, 1)), "Oct");
+ assert.equal(f(utc(1990, 10, 1)), "Nov");
+ assert.equal(f(utc(1990, 11, 1)), "Dec");
+ },
+ "formats locale date and time": function(format) {
+ var f = format("%c");
+ assert.equal(f(utc(1990, 0, 1)), "Mon Jan 1 00:00:00 1990");
+ },
+ "formats zero-padded date": function(format) {
+ var f = format("%d");
+ assert.equal(f(utc(1990, 0, 1)), "01");
+ },
+ "formats space-padded date": function(format) {
+ var f = format("%e");
+ assert.equal(f(utc(1990, 0, 1)), " 1");
+ },
+ "formats zero-padded hour (24)": function(format) {
+ var f = format("%H");
+ assert.equal(f(utc(1990, 0, 1, 0)), "00");
+ assert.equal(f(utc(1990, 0, 1, 13)), "13");
+ },
+ "formats zero-padded hour (12)": function(format) {
+ var f = format("%I");
+ assert.equal(f(utc(1990, 0, 1, 0)), "12");
+ assert.equal(f(utc(1990, 0, 1, 13)), "01");
+ },
+ "formats zero-padded day of year": function(format) {
+ var f = format("%j");
+ assert.equal(f(utc(1990, 0, 1)), "001");
+ assert.equal(f(utc(1990, 5, 1)), "152");
+ assert.equal(f(utc(2010, 2, 13, 23)), "072");
+ assert.equal(f(utc(2010, 2, 14, 00)), "073"); // DST begins
+ assert.equal(f(utc(2010, 2, 15, 00)), "074");
+ assert.equal(f(utc(2010, 10, 6, 23)), "310");
+ assert.equal(f(utc(2010, 10, 7, 00)), "311"); // DST ends
+ assert.equal(f(utc(2010, 10, 8, 00)), "312");
+ },
+ "formats zero-padded month": function(format) {
+ var f = format("%m");
+ assert.equal(f(utc(1990, 0, 1)), "01");
+ assert.equal(f(utc(1990, 9, 1)), "10");
+ },
+ "formats zero-padded minute": function(format) {
+ var f = format("%M");
+ assert.equal(f(utc(1990, 0, 1, 0, 0)), "00");
+ assert.equal(f(utc(1990, 0, 1, 0, 32)), "32");
+ },
+ "formats AM or PM": function(format) {
+ var f = format("%p");
+ assert.equal(f(utc(1990, 0, 1, 0)), "AM");
+ assert.equal(f(utc(1990, 0, 1, 13)), "PM");
+ },
+ "formats zero-padded second": function(format) {
+ var f = format("%S");
+ assert.equal(f(utc(1990, 0, 1, 0, 0, 0)), "00");
+ assert.equal(f(utc(1990, 0, 1, 0, 0, 32)), "32");
+ },
+ "formats zero-padded millisecond": function(format) {
+ var f = format("%L");
+ assert.equal(f(utc(1990, 0, 1, 0, 0, 0, 0)), "000");
+ assert.equal(f(utc(1990, 0, 1, 0, 0, 0, 432)), "432");
+ },
+ "formats zero-padded week number": function(format) {
+ var f = format("%U");
+ assert.equal(f(utc(1990, 0, 1)), "00");
+ assert.equal(f(utc(1990, 5, 1)), "21");
+ assert.equal(f(utc(2010, 2, 13, 23)), "10");
+ assert.equal(f(utc(2010, 2, 14, 00)), "11"); // DST begins
+ assert.equal(f(utc(2010, 2, 15, 00)), "11");
+ assert.equal(f(utc(2010, 10, 6, 23)), "44");
+ assert.equal(f(utc(2010, 10, 7, 00)), "45"); // DST ends
+ assert.equal(f(utc(2010, 10, 8, 00)), "45");
+ },
+ "formats locale date": function(format) {
+ var f = format("%x");
+ assert.equal(f(utc(1990, 0, 1)), "01/01/1990");
+ assert.equal(f(utc(2010, 5, 1)), "06/01/2010");
+ },
+ "formats locale time": function(format) {
+ var f = format("%X");
+ assert.equal(f(utc(1990, 0, 1)), "00:00:00");
+ assert.equal(f(utc(1990, 0, 1, 13, 34, 59)), "13:34:59");
+ },
+ "formats zero-padded two-digit year": function(format) {
+ var f = format("%y");
+ assert.equal(f(utc(1990, 0, 1)), "90");
+ assert.equal(f(utc(2002, 0, 1)), "02");
+ },
+ "formats zero-padded four-digit year": function(format) {
+ var f = format("%Y");
+ assert.equal(f(utc(123, 0, 1)), "0123");
+ assert.equal(f(utc(1990, 0, 1)), "1990");
+ assert.equal(f(utc(2002, 0, 1)), "2002");
+ assert.equal(f(utc(10002, 0, 1)), "0002");
+ },
+ "formats time zone": function(format) {
+ var f = format("%Z");
+ assert.equal(f(utc(1990, 0, 1)), "+0000");
+ },
+ "formats literal percent sign": function(format) {
+ var f = format("%%");
+ assert.equal(f(utc(1990, 0, 1)), "%");
+ },
+ "parse": {
+ "parses abbreviated weekday and numeric date": function(format) {
+ var p = format("%a %m/%d/%Y").parse;
+ assert.deepEqual(p("Sun 01/01/1990"), utc(1990, 0, 1));
+ assert.deepEqual(p("Wed 02/03/1991"), utc(1991, 1, 3));
+ assert.isNull(p("XXX 03/10/2010"));
+ },
+ "parses weekday and numeric date": function(format) {
+ var p = format("%A %m/%d/%Y").parse;
+ assert.deepEqual(p("Sunday 01/01/1990"), utc(1990, 0, 1));
+ assert.deepEqual(p("Wednesday 02/03/1991"), utc(1991, 1, 3));
+ assert.isNull(p("Caturday 03/10/2010"));
+ },
+ "parses numeric date": function(format) {
+ var p = format("%m/%d/%y").parse;
+ assert.deepEqual(p("01/01/90"), utc(1990, 0, 1));
+ assert.deepEqual(p("02/03/91"), utc(1991, 1, 3));
+ assert.isNull(p("03/10/2010"));
+ },
+ "parses locale date": function(format) {
+ var p = format("%x").parse;
+ assert.deepEqual(p("01/01/1990"), utc(1990, 0, 1));
+ assert.deepEqual(p("02/03/1991"), utc(1991, 1, 3));
+ assert.deepEqual(p("03/10/2010"), utc(2010, 2, 10));
+ },
+ "parses abbreviated month, date and year": function(format) {
+ var p = format("%b %d, %Y").parse;
+ assert.deepEqual(p("jan 01, 1990"), utc(1990, 0, 1));
+ assert.deepEqual(p("feb 2, 2010"), utc(2010, 1, 2));
+ assert.isNull(p("jan. 1, 1990"));
+ },
+ "parses month, date and year": function(format) {
+ var p = format("%B %d, %Y").parse;
+ assert.deepEqual(p("january 01, 1990"), utc(1990, 0, 1));
+ assert.deepEqual(p("February 2, 2010"), utc(2010, 1, 2));
+ assert.isNull(p("jan 1, 1990"));
+ },
+ "parses locale date and time": function(format) {
+ var p = format("%c").parse;
+ assert.deepEqual(p("Mon Jan 1 00:00:00 1990"), utc(1990, 0, 1));
+ assert.deepEqual(p("Sun Jan 1 00:00:00 1990"), utc(1990, 0, 1));
+ assert.deepEqual(p("Mon Jan 01 00:00:00 1990"), utc(1990, 0, 1));
+ assert.deepEqual(p("Mon Jan 1 00:00:00 1990"), utc(1990, 0, 1));
+ assert.deepEqual(p("Mon Jan 1 0:0:0 1990"), utc(1990, 0, 1));
+ },
+ "parses twenty-four hour, minute and second": function(format) {
+ var p = format("%H:%M:%S").parse;
+ assert.deepEqual(p("00:00:00"), utc(1900, 0, 1, 0, 0, 0));
+ assert.deepEqual(p("11:59:59"), utc(1900, 0, 1, 11, 59, 59));
+ assert.deepEqual(p("12:00:00"), utc(1900, 0, 1, 12, 0, 0));
+ assert.deepEqual(p("12:00:01"), utc(1900, 0, 1, 12, 0, 1));
+ assert.deepEqual(p("23:59:59"), utc(1900, 0, 1, 23, 59, 59));
+ },
+ "parses locale time": function(format) {
+ var p = format("%X").parse;
+ assert.deepEqual(p("00:00:00"), utc(1900, 0, 1, 0, 0, 0));
+ assert.deepEqual(p("11:59:59"), utc(1900, 0, 1, 11, 59, 59));
+ assert.deepEqual(p("12:00:00"), utc(1900, 0, 1, 12, 0, 0));
+ assert.deepEqual(p("12:00:01"), utc(1900, 0, 1, 12, 0, 1));
+ assert.deepEqual(p("23:59:59"), utc(1900, 0, 1, 23, 59, 59));
+ },
+ "parses twelve hour, minute and second": function(format) {
+ var p = format("%I:%M:%S %p").parse;
+ assert.deepEqual(p("12:00:00 am"), utc(1900, 0, 1, 0, 0, 0));
+ assert.deepEqual(p("11:59:59 AM"), utc(1900, 0, 1, 11, 59, 59));
+ assert.deepEqual(p("12:00:00 pm"), utc(1900, 0, 1, 12, 0, 0));
+ assert.deepEqual(p("12:00:01 pm"), utc(1900, 0, 1, 12, 0, 1));
+ assert.deepEqual(p("11:59:59 PM"), utc(1900, 0, 1, 23, 59, 59));
+ },
+ "parses timezone offset": function(format) {
+ var p = format("%m/%d/%Y %Z").parse;
+ assert.deepEqual(p("01/02/1990 +0000"), utc(1990, 0, 2));
+ assert.deepEqual(p("01/02/1990 +0100"), utc(1990, 0, 1, 23));
+ assert.deepEqual(p("01/02/1990 -0100"), utc(1990, 0, 2, 1));
+ assert.deepEqual(p("01/02/1990 -0800"), time.local(1990, 0, 2));
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/hour-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/hour-test.js
new file mode 100644
index 0000000..757ae22
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/hour-test.js
@@ -0,0 +1,215 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.hour");
+
+suite.addBatch({
+ "hour": {
+ topic: load("time/hour").expression("d3.time.hour"),
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns hours": function(floor) {
+ assert.deepEqual(floor(local(2010, 11, 31, 23, 59)), local(2010, 11, 31, 23));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00)), local(2011, 00, 01, 00));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 01)), local(2011, 00, 01, 00));
+ },
+ "observes start of daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 02, 13, 08, 59)), utc(2011, 02, 13, 08));
+ assert.deepEqual(floor(utc(2011, 02, 13, 09, 00)), utc(2011, 02, 13, 09));
+ assert.deepEqual(floor(utc(2011, 02, 13, 09, 01)), utc(2011, 02, 13, 09));
+ assert.deepEqual(floor(utc(2011, 02, 13, 09, 59)), utc(2011, 02, 13, 09));
+ assert.deepEqual(floor(utc(2011, 02, 13, 10, 00)), utc(2011, 02, 13, 10));
+ assert.deepEqual(floor(utc(2011, 02, 13, 10, 01)), utc(2011, 02, 13, 10));
+ },
+ "observes end of daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 10, 06, 07, 59)), utc(2011, 10, 06, 07));
+ assert.deepEqual(floor(utc(2011, 10, 06, 08, 00)), utc(2011, 10, 06, 08));
+ assert.deepEqual(floor(utc(2011, 10, 06, 08, 01)), utc(2011, 10, 06, 08));
+ assert.deepEqual(floor(utc(2011, 10, 06, 08, 59)), utc(2011, 10, 06, 08));
+ assert.deepEqual(floor(utc(2011, 10, 06, 09, 00)), utc(2011, 10, 06, 09));
+ assert.deepEqual(floor(utc(2011, 10, 06, 09, 01)), utc(2011, 10, 06, 09));
+ },
+ "NPT": {
+ "observes 15-minute offset": time.zone(345, function(floor) {
+ assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 17, 15));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), utc(2010, 11, 31, 18, 15));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 01)), utc(2010, 11, 31, 18, 15));
+ })
+ },
+ "IST": {
+ "observes 30-minute offset": time.zone(330, function(floor) {
+ assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 17, 30));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), utc(2010, 11, 31, 18, 30));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 01)), utc(2010, 11, 31, 18, 30));
+ })
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns hours": function(ceil) {
+ assert.deepEqual(ceil(local(2010, 11, 31, 23, 59)), local(2011, 00, 01, 00));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00)), local(2011, 00, 01, 00));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 01)), local(2011, 00, 01, 01));
+ },
+ "observes start of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 02, 13, 08, 59)), utc(2011, 02, 13, 09));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 09, 00)), utc(2011, 02, 13, 09));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 09, 01)), utc(2011, 02, 13, 10));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 09, 59)), utc(2011, 02, 13, 10));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 10, 00)), utc(2011, 02, 13, 10));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 10, 01)), utc(2011, 02, 13, 11));
+ },
+ "observes end of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 10, 06, 07, 59)), utc(2011, 10, 06, 08));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 08, 00)), utc(2011, 10, 06, 08));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 08, 01)), utc(2011, 10, 06, 09));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 08, 59)), utc(2011, 10, 06, 09));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 09, 00)), utc(2011, 10, 06, 09));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 09, 01)), utc(2011, 10, 06, 10));
+ },
+ "NPT": {
+ "observes 15-minute offset": time.zone(345, function(ceil) {
+ assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 18, 15));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), utc(2010, 11, 31, 18, 15));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 01)), utc(2010, 11, 31, 19, 15));
+ })
+ },
+ "IST": {
+ "observes 30-minute offset": time.zone(330, function(ceil) {
+ assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 18, 30));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), utc(2010, 11, 31, 18, 30));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 01)), utc(2010, 11, 31, 19, 30));
+ })
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = local(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, local(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), +1), local(2011, 00, 01, 00, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 456), -2), local(2010, 11, 31, 21, 59, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 12), -1), local(2010, 11, 31, 11));
+ assert.deepEqual(offset(local(2011, 00, 01, 01), -2), local(2010, 11, 31, 23));
+ assert.deepEqual(offset(local(2011, 00, 01, 00), -1), local(2010, 11, 31, 23));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 11), +1), local(2010, 11, 31, 12));
+ assert.deepEqual(offset(local(2010, 11, 31, 23), +2), local(2011, 00, 01, 01));
+ assert.deepEqual(offset(local(2010, 11, 31, 23), +1), local(2011, 00, 01, 00));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), 0), local(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 58, 000), 0), local(2010, 11, 31, 23, 59, 58, 000));
+ }
+ },
+ "UTC": {
+ topic: function(interval) {
+ return interval.utc;
+ },
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns hours": function(floor) {
+ assert.deepEqual(floor(utc(2010, 11, 31, 23, 59)), utc(2010, 11, 31, 23));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 00)), utc(2011, 00, 01, 00));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 01)), utc(2011, 00, 01, 00));
+ },
+ "does not observe the start of daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 02, 13, 08, 59)), utc(2011, 02, 13, 08));
+ assert.deepEqual(floor(utc(2011, 02, 13, 09, 00)), utc(2011, 02, 13, 09));
+ assert.deepEqual(floor(utc(2011, 02, 13, 09, 01)), utc(2011, 02, 13, 09));
+ assert.deepEqual(floor(utc(2011, 02, 13, 09, 59)), utc(2011, 02, 13, 09));
+ assert.deepEqual(floor(utc(2011, 02, 13, 10, 00)), utc(2011, 02, 13, 10));
+ assert.deepEqual(floor(utc(2011, 02, 13, 10, 01)), utc(2011, 02, 13, 10));
+ },
+ "does not observe the end of daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 10, 06, 07, 59)), utc(2011, 10, 06, 07));
+ assert.deepEqual(floor(utc(2011, 10, 06, 08, 00)), utc(2011, 10, 06, 08));
+ assert.deepEqual(floor(utc(2011, 10, 06, 08, 01)), utc(2011, 10, 06, 08));
+ assert.deepEqual(floor(utc(2011, 10, 06, 08, 59)), utc(2011, 10, 06, 08));
+ assert.deepEqual(floor(utc(2011, 10, 06, 09, 00)), utc(2011, 10, 06, 09));
+ assert.deepEqual(floor(utc(2011, 10, 06, 09, 01)), utc(2011, 10, 06, 09));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns hours": function(ceil) {
+ assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59)), utc(2011, 00, 01, 00));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00)), utc(2011, 00, 01, 00));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 01)), utc(2011, 00, 01, 01));
+ },
+ "does not observe the start of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 02, 13, 08, 59)), utc(2011, 02, 13, 09));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 09, 00)), utc(2011, 02, 13, 09));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 09, 01)), utc(2011, 02, 13, 10));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 09, 59)), utc(2011, 02, 13, 10));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 10, 00)), utc(2011, 02, 13, 10));
+ assert.deepEqual(ceil(utc(2011, 02, 13, 10, 01)), utc(2011, 02, 13, 11));
+ },
+ "does not observe the end of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 10, 06, 07, 59)), utc(2011, 10, 06, 08));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 08, 00)), utc(2011, 10, 06, 08));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 08, 01)), utc(2011, 10, 06, 09));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 08, 59)), utc(2011, 10, 06, 09));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 09, 00)), utc(2011, 10, 06, 09));
+ assert.deepEqual(ceil(utc(2011, 10, 06, 09, 01)), utc(2011, 10, 06, 10));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = utc(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, utc(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), +1), utc(2011, 00, 01, 00, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 456), -2), utc(2010, 11, 31, 21, 59, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 12), -1), utc(2010, 11, 31, 11));
+ assert.deepEqual(offset(utc(2011, 00, 01, 01), -2), utc(2010, 11, 31, 23));
+ assert.deepEqual(offset(utc(2011, 00, 01, 00), -1), utc(2010, 11, 31, 23));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 11), +1), utc(2010, 11, 31, 12));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23), +2), utc(2011, 00, 01, 01));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23), +1), utc(2011, 00, 01, 00));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), 0), utc(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 58, 000), 0), utc(2010, 11, 31, 23, 59, 58, 000));
+ }
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/hours-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/hours-test.js
new file mode 100644
index 0000000..c0a6a76
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/hours-test.js
@@ -0,0 +1,109 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.hours");
+
+suite.addBatch({
+ "hours": {
+ topic: load("time/hour").expression("d3.time.hours"),
+ "returns hours": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31, 12, 30), local(2010, 11, 31, 15, 30)), [
+ local(2010, 11, 31, 13),
+ local(2010, 11, 31, 14),
+ local(2010, 11, 31, 15)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31, 23), local(2011, 0, 1, 2))[0], local(2010, 11, 31, 23));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31, 23), local(2011, 0, 1, 2))[2], local(2011, 0, 1, 1));
+ },
+ "can skip hours": function(range) {
+ assert.deepEqual(range(local(2011, 1, 1, 1), local(2011, 1, 1, 13), 3), [
+ local(2011, 1, 1, 3),
+ local(2011, 1, 1, 6),
+ local(2011, 1, 1, 9),
+ local(2011, 1, 1, 12)
+ ]);
+ },
+ "observes start of daylight savings time": function(range) {
+ assert.deepEqual(range(local(2011, 2, 13, 1), local(2011, 2, 13, 5)), [
+ utc(2011, 2, 13, 9),
+ utc(2011, 2, 13, 10),
+ utc(2011, 2, 13, 11)
+ ]);
+ },
+ "observes end of daylight savings time": function(range) {
+ assert.deepEqual(range(local(2011, 10, 6, 0), local(2011, 10, 6, 2)), [
+ utc(2011, 10, 6, 7),
+ utc(2011, 10, 6, 8),
+ utc(2011, 10, 6, 9)
+ ]);
+ },
+ "NPT": {
+ "observes 15-minute offset": time.zone(345, function(range) {
+ assert.deepEqual(range(local(2011, 10, 7, 0), local(2011, 10, 7, 3)), [
+ utc(2011, 10, 6, 18, 15),
+ utc(2011, 10, 6, 19, 15),
+ utc(2011, 10, 6, 20, 15)
+ ]);
+ })
+ },
+ "IST": {
+ "observes 30-minute offset": time.zone(330, function(range) {
+ assert.deepEqual(range(local(2011, 10, 7, 0), local(2011, 10, 7, 3)), [
+ utc(2011, 10, 6, 18, 30),
+ utc(2011, 10, 6, 19, 30),
+ utc(2011, 10, 6, 20, 30)
+ ]);
+ })
+ },
+ "UTC": {
+ topic: function(range) {
+ return range.utc;
+ },
+ "returns hours": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31, 12, 30), utc(2010, 11, 31, 15, 30)), [
+ utc(2010, 11, 31, 13),
+ utc(2010, 11, 31, 14),
+ utc(2010, 11, 31, 15)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31, 23), utc(2011, 0, 1, 2))[0], utc(2010, 11, 31, 23));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31, 23), utc(2011, 0, 1, 2))[2], utc(2011, 0, 1, 1));
+ },
+ "can skip hours": function(range) {
+ assert.deepEqual(range(utc(2011, 1, 1, 1), utc(2011, 1, 1, 13), 3), [
+ utc(2011, 1, 1, 3),
+ utc(2011, 1, 1, 6),
+ utc(2011, 1, 1, 9),
+ utc(2011, 1, 1, 12)
+ ]);
+ },
+ "observes start of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 2, 13, 9), utc(2011, 2, 13, 12)), [
+ utc(2011, 2, 13, 9),
+ utc(2011, 2, 13, 10),
+ utc(2011, 2, 13, 11)
+ ]);
+ },
+ "observes end of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 10, 6, 7), utc(2011, 10, 6, 10)), [
+ utc(2011, 10, 6, 7),
+ utc(2011, 10, 6, 8),
+ utc(2011, 10, 6, 9)
+ ]);
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/minute-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/minute-test.js
new file mode 100644
index 0000000..e3a3c3c
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/minute-test.js
@@ -0,0 +1,127 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.minute");
+
+suite.addBatch({
+ "minute": {
+ topic: load("time/minute").expression("d3.time.minute"),
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns minutes": function(floor) {
+ assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 11, 31, 23, 59));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01, 00, 00));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 59)), local(2011, 00, 01, 00, 00));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 01, 00)), local(2011, 00, 01, 00, 01));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns minutes": function(ceil) {
+ assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), local(2011, 00, 01, 00, 00));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01, 00, 00));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 59)), local(2011, 00, 01, 00, 01));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 01, 00)), local(2011, 00, 01, 00, 01));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = local(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, local(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), +1), local(2011, 00, 01, 00, 00, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 456), -2), local(2010, 11, 31, 23, 57, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 12), -1), local(2010, 11, 31, 23, 11));
+ assert.deepEqual(offset(local(2011, 00, 01, 00, 01), -2), local(2010, 11, 31, 23, 59));
+ assert.deepEqual(offset(local(2011, 00, 01, 00, 00), -1), local(2010, 11, 31, 23, 59));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 11), +1), local(2010, 11, 31, 23, 12));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59), +2), local(2011, 00, 01, 00, 01));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59), +1), local(2011, 00, 01, 00, 00));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), 0), local(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 58, 000), 0), local(2010, 11, 31, 23, 59, 58, 000));
+ }
+ },
+ "UTC": {
+ topic: function(interval) {
+ return interval.utc;
+ },
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns minutes": function(floor) {
+ assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 23, 59));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01, 00, 00));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 59)), utc(2011, 00, 01, 00, 00));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 01, 00)), utc(2011, 00, 01, 00, 01));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns minutes": function(ceil) {
+ assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59, 59)), utc(2011, 00, 01, 00, 00));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01, 00, 00));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 59)), utc(2011, 00, 01, 00, 01));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 01, 00)), utc(2011, 00, 01, 00, 01));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = utc(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, utc(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), +1), utc(2011, 00, 01, 00, 00, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 456), -2), utc(2010, 11, 31, 23, 57, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 12), -1), utc(2010, 11, 31, 23, 11));
+ assert.deepEqual(offset(utc(2011, 00, 01, 00, 01), -2), utc(2010, 11, 31, 23, 59));
+ assert.deepEqual(offset(utc(2011, 00, 01, 00, 00), -1), utc(2010, 11, 31, 23, 59));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 11), +1), utc(2010, 11, 31, 23, 12));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59), +2), utc(2011, 00, 01, 00, 01));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59), +1), utc(2011, 00, 01, 00, 00));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), 0), utc(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 58, 000), 0), utc(2010, 11, 31, 23, 59, 58, 000));
+ }
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/minutes-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/minutes-test.js
new file mode 100644
index 0000000..1d176bf
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/minutes-test.js
@@ -0,0 +1,91 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.minutes");
+
+suite.addBatch({
+ "minutes": {
+ topic: load("time/minute").expression("d3.time.minutes"),
+ "returns minutes": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31, 23, 59), local(2011, 0, 1, 0, 2)), [
+ local(2010, 11, 31, 23, 59),
+ local(2011, 0, 1, 0, 0),
+ local(2011, 0, 1, 0, 1)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31, 23, 59), local(2011, 0, 1, 0, 2))[0], local(2010, 11, 31, 23, 59));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31, 23, 59), local(2011, 0, 1, 0, 2))[2], local(2011, 0, 1, 0, 1));
+ },
+ "can skip minutes": function(range) {
+ assert.deepEqual(range(local(2011, 1, 1, 12, 7), local(2011, 1, 1, 13, 7), 15), [
+ local(2011, 1, 1, 12, 15),
+ local(2011, 1, 1, 12, 30),
+ local(2011, 1, 1, 12, 45),
+ local(2011, 1, 1, 13, 0)
+ ]);
+ },
+ "observes start of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 2, 13, 9, 59), utc(2011, 2, 13, 10, 2)), [
+ utc(2011, 2, 13, 9, 59),
+ utc(2011, 2, 13, 10, 0),
+ utc(2011, 2, 13, 10, 1)
+ ]);
+ },
+ "observes end of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 10, 6, 8, 59), utc(2011, 10, 6, 9, 2)), [
+ utc(2011, 10, 6, 8, 59),
+ utc(2011, 10, 6, 9, 0),
+ utc(2011, 10, 6, 9, 1)
+ ]);
+ },
+ "UTC": {
+ topic: function(range) {
+ return range.utc;
+ },
+ "returns minutes": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31, 23, 59), utc(2011, 0, 1, 0, 2)), [
+ utc(2010, 11, 31, 23, 59),
+ utc(2011, 0, 1, 0, 0),
+ utc(2011, 0, 1, 0, 1)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31, 23, 59), utc(2011, 0, 1, 0, 2))[0], utc(2010, 11, 31, 23, 59));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31, 23, 59), utc(2011, 0, 1, 0, 2))[2], utc(2011, 0, 1, 0, 1));
+ },
+ "can skip minutes": function(range) {
+ assert.deepEqual(range(utc(2011, 1, 1, 12, 7), utc(2011, 1, 1, 13, 7), 15), [
+ utc(2011, 1, 1, 12, 15),
+ utc(2011, 1, 1, 12, 30),
+ utc(2011, 1, 1, 12, 45),
+ utc(2011, 1, 1, 13, 0)
+ ]);
+ },
+ "does not observe the start of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 2, 13, 9, 59), utc(2011, 2, 13, 10, 2)), [
+ utc(2011, 2, 13, 9, 59),
+ utc(2011, 2, 13, 10, 0),
+ utc(2011, 2, 13, 10, 1)
+ ]);
+ },
+ "does not observe the end of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 10, 6, 8, 59), utc(2011, 10, 6, 9, 2)), [
+ utc(2011, 10, 6, 8, 59),
+ utc(2011, 10, 6, 9, 0),
+ utc(2011, 10, 6, 9, 1)
+ ]);
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/month-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/month-test.js
new file mode 100644
index 0000000..10f349d
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/month-test.js
@@ -0,0 +1,150 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.month");
+
+suite.addBatch({
+ "month": {
+ topic: load("time/month").expression("d3.time.month"),
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns months": function(floor) {
+ assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 11, 01));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 01)), local(2011, 00, 01));
+ },
+ "observes the start of daylight savings time": function(floor) {
+ assert.deepEqual(floor(local(2011, 02, 13, 01)), local(2011, 02, 01));
+ },
+ "observes the end of the daylight savings time": function(floor) {
+ assert.deepEqual(floor(local(2011, 10, 06, 01)), local(2011, 10, 01));
+ },
+ "correctly handles years in the first century": function(floor) {
+ assert.deepEqual(floor(local(0011, 10, 06, 07)), local(0011, 10, 01));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns months": function(ceil) {
+ assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), local(2011, 00, 01));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 01)), local(2011, 01, 01));
+ },
+ "observes the start of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(local(2011, 02, 13, 01)), local(2011, 03, 01));
+ },
+ "observes the end of the daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(local(2011, 10, 06, 01)), local(2011, 11, 01));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = local(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, local(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), +1), local(2011, 00, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 456), -2), local(2010, 09, 31, 23, 59, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 01), -1), local(2010, 10, 01));
+ assert.deepEqual(offset(local(2011, 00, 01), -2), local(2010, 10, 01));
+ assert.deepEqual(offset(local(2011, 00, 01), -1), local(2010, 11, 01));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 10, 01), +1), local(2010, 11, 01));
+ assert.deepEqual(offset(local(2010, 10, 01), +2), local(2011, 00, 01));
+ assert.deepEqual(offset(local(2010, 11, 01), +1), local(2011, 00, 01));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), 0), local(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 58, 000), 0), local(2010, 11, 31, 23, 59, 58, 000));
+ }
+ },
+ "UTC": {
+ topic: function(interval) {
+ return interval.utc;
+ },
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns months": function(floor) {
+ assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 01));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 01)), utc(2011, 00, 01));
+ },
+ "does not observe the start of daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 02, 13, 01)), utc(2011, 02, 01));
+ },
+ "does not observe the end of the daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 10, 06, 01)), utc(2011, 10, 01));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns months": function(ceil) {
+ assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59, 59)), utc(2011, 00, 01));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 01)), utc(2011, 01, 01));
+ },
+ "does not observe the start of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 02, 13, 01)), utc(2011, 03, 01));
+ },
+ "does not observe the end of the daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 10, 06, 01)), utc(2011, 11, 01));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = utc(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, utc(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), +1), utc(2011, 00, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 456), -2), utc(2010, 09, 31, 23, 59, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 01), -1), utc(2010, 10, 01));
+ assert.deepEqual(offset(utc(2011, 00, 01), -2), utc(2010, 10, 01));
+ assert.deepEqual(offset(utc(2011, 00, 01), -1), utc(2010, 11, 01));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 10, 01), +1), utc(2010, 11, 01));
+ assert.deepEqual(offset(utc(2010, 10, 01), +2), utc(2011, 00, 01));
+ assert.deepEqual(offset(utc(2010, 11, 01), +1), utc(2011, 00, 01));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), 0), utc(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 58, 000), 0), utc(2010, 11, 31, 23, 59, 58, 000));
+ }
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/months-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/months-test.js
new file mode 100644
index 0000000..82bca86
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/months-test.js
@@ -0,0 +1,95 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.months");
+
+suite.addBatch({
+ "months": {
+ topic: load("time/month").expression("d3.time.months"),
+ "returns months": function(range) {
+ assert.deepEqual(range(local(2010, 10, 31), local(2011, 2, 1)), [
+ local(2010, 11, 1),
+ local(2011, 0, 1),
+ local(2011, 1, 1)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(local(2010, 10, 31), local(2011, 2, 1))[0], local(2010, 11, 1));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(local(2010, 10, 31), local(2011, 2, 1))[2], local(2011, 1, 1));
+ },
+ "can skip months": function(range) {
+ assert.deepEqual(range(local(2011, 1, 1), local(2012, 1, 1), 3), [
+ local(2011, 3, 1),
+ local(2011, 6, 1),
+ local(2011, 9, 1),
+ local(2012, 0, 1)
+ ]);
+ },
+ "observes start of daylight savings time": function(range) {
+ assert.deepEqual(range(local(2011, 0, 1), local(2011, 4, 1)), [
+ local(2011, 0, 1),
+ local(2011, 1, 1),
+ local(2011, 2, 1),
+ local(2011, 3, 1)
+ ]);
+ },
+ "observes end of daylight savings time": function(range) {
+ assert.deepEqual(range(local(2011, 9, 1), local(2012, 1, 1)), [
+ local(2011, 9, 1),
+ local(2011, 10, 1),
+ local(2011, 11, 1),
+ local(2012, 0, 1)
+ ]);
+ },
+ "UTC": {
+ topic: function(range) {
+ return range.utc;
+ },
+ "returns months": function(range) {
+ assert.deepEqual(range(utc(2010, 10, 31), utc(2011, 2, 1)), [
+ utc(2010, 11, 1),
+ utc(2011, 0, 1),
+ utc(2011, 1, 1)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(utc(2010, 10, 31), utc(2011, 2, 1))[0], utc(2010, 11, 1));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(utc(2010, 10, 31), utc(2011, 2, 1))[2], utc(2011, 1, 1));
+ },
+ "can skip months": function(range) {
+ assert.deepEqual(range(utc(2011, 1, 1), utc(2012, 1, 1), 3), [
+ utc(2011, 3, 1),
+ utc(2011, 6, 1),
+ utc(2011, 9, 1),
+ utc(2012, 0, 1)
+ ]);
+ },
+ "does not observe the start of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 0, 1), utc(2011, 4, 1)), [
+ utc(2011, 0, 1),
+ utc(2011, 1, 1),
+ utc(2011, 2, 1),
+ utc(2011, 3, 1)
+ ]);
+ },
+ "does not observe the end of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 9, 1), utc(2012, 1, 1)), [
+ utc(2011, 9, 1),
+ utc(2011, 10, 1),
+ utc(2011, 11, 1),
+ utc(2012, 0, 1)
+ ]);
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/scale-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/scale-test.js
new file mode 100644
index 0000000..aeb258b
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/scale-test.js
@@ -0,0 +1,684 @@
+var vows = require("vows"),
+ _ = require("../../"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.scale");
+
+suite.addBatch({
+ "scale": {
+ topic: load("time/scale").expression("d3.time.scale").document(),
+
+ "nice": {
+ "rounds using the specified time interval": function(scale) {
+ var x = scale().domain([local(2009, 0, 1, 0, 12), local(2009, 0, 1, 23, 48)]);
+ assert.deepEqual(x.nice(_.time.day).domain(), [local(2009, 0, 1), local(2009, 0, 2)]);
+ assert.deepEqual(x.nice(_.time.week).domain(), [local(2008, 11, 28), local(2009, 0, 4)]);
+ assert.deepEqual(x.nice(_.time.month).domain(), [local(2008, 11, 1), local(2009, 1, 1)]);
+ assert.deepEqual(x.nice(_.time.year).domain(), [local(2008, 0, 1), local(2010, 0, 1)]);
+ },
+ "rounds using the specified time interval and skip": function(scale) {
+ var x = scale().domain([local(2009, 0, 1, 0, 12), local(2009, 0, 1, 23, 48)]);
+ assert.deepEqual(x.nice(_.time.day, 3).domain(), [local(2009, 0, 1), local(2009, 0, 4)]);
+ assert.deepEqual(x.nice(_.time.week, 2).domain(), [local(2008, 11, 21), local(2009, 0, 4)]);
+ assert.deepEqual(x.nice(_.time.month, 3).domain(), [local(2008, 9, 1), local(2009, 3, 1)]);
+ assert.deepEqual(x.nice(_.time.year, 10).domain(), [local(2000, 0, 1), local(2010, 0, 1)]);
+ },
+ "rounds using the specified count": function(scale) {
+ var x = scale().domain([local(2009, 0, 1, 0, 17), local(2009, 0, 1, 23, 42)]);
+ assert.deepEqual(x.nice(100).domain(), [local(2009, 0, 1, 0, 15), local(2009, 0, 1, 23, 45)]);
+ assert.deepEqual(x.nice(10).domain(), [local(2009, 0, 1), local(2009, 0, 2)]);
+ },
+ "rounds with a default count of ten if no arguments": function(scale) {
+ var x = scale().domain([local(2009, 0, 1, 0, 17), local(2009, 0, 1, 23, 42)]);
+ assert.deepEqual(x.nice().domain(), [local(2009, 0, 1), local(2009, 0, 2)]);
+ },
+ "works on degenerate domains": function(scale) {
+ var x = scale().domain([local(2009, 0, 1, 0, 12), local(2009, 0, 1, 0, 12)]);
+ assert.deepEqual(x.nice(_.time.day).domain(), [local(2009, 0, 1), local(2009, 0, 2)]);
+ },
+ "nicing a polylinear domain only affects the extent": function(linear) {
+ var x = linear().domain([local(2009, 0, 1, 0, 12), local(2009, 0, 1, 23, 48), local(2009, 0, 2, 23, 48)]).nice(_.time.day);
+ assert.deepEqual(x.domain(), [local(2009, 0, 1), local(2009, 0, 1, 23, 48), local(2009, 0, 3)]);
+ },
+ "nice succeeds on sub-second intervals": function(scale) {
+ var domain = [local(2013, 0, 1, 12, 0, 0), local(2013, 0, 1, 12, 0, 8)];
+ var x = scale().domain(domain);
+ assert.deepEqual(x.nice().domain(), domain);
+ }
+ },
+
+ "copy": {
+ "changes to the domain are isolated": function(scale) {
+ var x = scale().domain([local(2009, 0, 1), local(2010, 0, 1)]), y = x.copy();
+ x.domain([local(2010, 0, 1), local(2011, 0, 1)]);
+ assert.deepEqual(y.domain(), [local(2009, 0, 1), local(2010, 0, 1)]);
+ assert.equal(x(local(2010, 0, 1)), 0);
+ assert.equal(y(local(2010, 0, 1)), 1);
+ y.domain([local(2011, 0, 1), local(2012, 0, 1)]);
+ assert.equal(x(local(2011, 0, 1)), 1);
+ assert.equal(y(local(2011, 0, 1)), 0);
+ assert.deepEqual(x.domain(), [local(2010, 0, 1), local(2011, 0, 1)]);
+ assert.deepEqual(y.domain(), [local(2011, 0, 1), local(2012, 0, 1)]);
+ },
+ "changes to the range are isolated": function(scale) {
+ var x = scale().domain([local(2009, 0, 1), local(2010, 0, 1)]), y = x.copy();
+ x.range([1, 2]);
+ assert.deepEqual(x.invert(1), local(2009, 0, 1));
+ assert.deepEqual(y.invert(1), local(2010, 0, 1));
+ assert.deepEqual(y.range(), [0, 1]);
+ y.range([2, 3]);
+ assert.deepEqual(x.invert(2), local(2010, 0, 1));
+ assert.deepEqual(y.invert(2), local(2009, 0, 1));
+ assert.deepEqual(x.range(), [1, 2]);
+ assert.deepEqual(y.range(), [2, 3]);
+ },
+ "changes to the interpolator are isolated": function(scale) {
+ var x = scale().domain([local(2009, 0, 1), local(2010, 0, 1)]).range(["red", "blue"]),
+ i = x.interpolate(),
+ y = x.copy();
+ x.interpolate(_.interpolateHsl);
+ assert.equal(x(local(2009, 6, 1)), "#ff00fd");
+ assert.equal(y(local(2009, 6, 1)), "#81007e");
+ assert.equal(y.interpolate(), i);
+ },
+ "changes to clamping are isolated": function(scale) {
+ var x = scale().domain([local(2009, 0, 1), local(2010, 0, 1)]).clamp(true), y = x.copy();
+ x.clamp(false);
+ assert.equal(x(local(2011, 0, 1)), 2);
+ assert.equal(y(local(2011, 0, 1)), 1);
+ assert.isTrue(y.clamp());
+ y.clamp(false);
+ assert.equal(x(local(2011, 0, 1)), 2);
+ assert.equal(y(local(2011, 0, 1)), 2);
+ assert.isFalse(x.clamp());
+ }
+ },
+
+ "ticks": {
+ "observes explicit tick interval": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 1, 0), local(2011, 0, 1, 12, 4, 4)]);
+ assert.deepEqual(x.ticks(_.time.minute), [
+ local(2011, 0, 1, 12, 1),
+ local(2011, 0, 1, 12, 2),
+ local(2011, 0, 1, 12, 3),
+ local(2011, 0, 1, 12, 4)
+ ]);
+ },
+ "observes explicit tick interval and step": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 0, 0), local(2011, 0, 1, 12, 33, 4)]);
+ assert.deepEqual(x.ticks(_.time.minute, 10), [
+ local(2011, 0, 1, 12, 0),
+ local(2011, 0, 1, 12, 10),
+ local(2011, 0, 1, 12, 20),
+ local(2011, 0, 1, 12, 30)
+ ]);
+ },
+ "(deprecated) observes explicit tick range": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 1, 0), local(2011, 0, 1, 12, 4, 4)]);
+ assert.deepEqual(x.ticks(_.time.minutes), [
+ local(2011, 0, 1, 12, 1),
+ local(2011, 0, 1, 12, 2),
+ local(2011, 0, 1, 12, 3),
+ local(2011, 0, 1, 12, 4)
+ ]);
+ },
+ "(deprecated) observes explicit tick range and step": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 0, 0), local(2011, 0, 1, 12, 33, 4)]);
+ assert.deepEqual(x.ticks(_.time.minutes, 10), [
+ local(2011, 0, 1, 12, 0),
+ local(2011, 0, 1, 12, 10),
+ local(2011, 0, 1, 12, 20),
+ local(2011, 0, 1, 12, 30)
+ ]);
+ },
+ "generates sub-second ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 0, 0), local(2011, 0, 1, 12, 0, 1)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 12, 0, 0, 0),
+ local(2011, 0, 1, 12, 0, 0, 200),
+ local(2011, 0, 1, 12, 0, 0, 400),
+ local(2011, 0, 1, 12, 0, 0, 600),
+ local(2011, 0, 1, 12, 0, 0, 800),
+ local(2011, 0, 1, 12, 0, 1, 0)
+ ]);
+ },
+ "generates 1-second ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 0, 0), local(2011, 0, 1, 12, 0, 4)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 12, 0, 0),
+ local(2011, 0, 1, 12, 0, 1),
+ local(2011, 0, 1, 12, 0, 2),
+ local(2011, 0, 1, 12, 0, 3),
+ local(2011, 0, 1, 12, 0, 4)
+ ]);
+ },
+ "generates 5-second ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 0, 0), local(2011, 0, 1, 12, 0, 20)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 12, 0, 0),
+ local(2011, 0, 1, 12, 0, 5),
+ local(2011, 0, 1, 12, 0, 10),
+ local(2011, 0, 1, 12, 0, 15),
+ local(2011, 0, 1, 12, 0, 20)
+ ]);
+ },
+ "generates 15-second ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 0, 0), local(2011, 0, 1, 12, 0, 50)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 12, 0, 0),
+ local(2011, 0, 1, 12, 0, 15),
+ local(2011, 0, 1, 12, 0, 30),
+ local(2011, 0, 1, 12, 0, 45)
+ ]);
+ },
+ "generates 30-second ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 0, 0), local(2011, 0, 1, 12, 1, 50)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 12, 0, 0),
+ local(2011, 0, 1, 12, 0, 30),
+ local(2011, 0, 1, 12, 1, 0),
+ local(2011, 0, 1, 12, 1, 30)
+ ]);
+ },
+ "generates 1-minute ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 0, 27), local(2011, 0, 1, 12, 4, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 12, 1),
+ local(2011, 0, 1, 12, 2),
+ local(2011, 0, 1, 12, 3),
+ local(2011, 0, 1, 12, 4)
+ ]);
+ },
+ "generates 5-minute ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 3, 27), local(2011, 0, 1, 12, 21, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 12, 5),
+ local(2011, 0, 1, 12, 10),
+ local(2011, 0, 1, 12, 15),
+ local(2011, 0, 1, 12, 20)
+ ]);
+ },
+ "generates 15-minute ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 8, 27), local(2011, 0, 1, 13, 4, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 12, 15),
+ local(2011, 0, 1, 12, 30),
+ local(2011, 0, 1, 12, 45),
+ local(2011, 0, 1, 13, 0)
+ ]);
+ },
+ "generates 30-minute ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 28, 27), local(2011, 0, 1, 14, 4, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 12, 30),
+ local(2011, 0, 1, 13, 0),
+ local(2011, 0, 1, 13, 30),
+ local(2011, 0, 1, 14, 0)
+ ]);
+ },
+ "generates 1-hour ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 12, 28, 27), local(2011, 0, 1, 16, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 13, 0),
+ local(2011, 0, 1, 14, 0),
+ local(2011, 0, 1, 15, 0),
+ local(2011, 0, 1, 16, 0)
+ ]);
+ },
+ "generates 3-hour ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 14, 28, 27), local(2011, 0, 2, 1, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 15, 0),
+ local(2011, 0, 1, 18, 0),
+ local(2011, 0, 1, 21, 0),
+ local(2011, 0, 2, 0, 0)
+ ]);
+ },
+ "generates 6-hour ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 16, 28, 27), local(2011, 0, 2, 14, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 18, 0),
+ local(2011, 0, 2, 0, 0),
+ local(2011, 0, 2, 6, 0),
+ local(2011, 0, 2, 12, 0)
+ ]);
+ },
+ "generates 12-hour ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 16, 28, 27), local(2011, 0, 3, 21, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 2, 0, 0),
+ local(2011, 0, 2, 12, 0),
+ local(2011, 0, 3, 0, 0),
+ local(2011, 0, 3, 12, 0)
+ ]);
+ },
+ "generates 1-day ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 16, 28, 27), local(2011, 0, 5, 21, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 2, 0, 0),
+ local(2011, 0, 3, 0, 0),
+ local(2011, 0, 4, 0, 0),
+ local(2011, 0, 5, 0, 0)
+ ]);
+ },
+ "generates 2-day ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 2, 16, 28, 27), local(2011, 0, 9, 21, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 3, 0, 0),
+ local(2011, 0, 5, 0, 0),
+ local(2011, 0, 7, 0, 0),
+ local(2011, 0, 9, 0, 0)
+ ]);
+ },
+ "generates 1-week ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 1, 16, 28, 27), local(2011, 0, 23, 21, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 2, 0, 0),
+ local(2011, 0, 9, 0, 0),
+ local(2011, 0, 16, 0, 0),
+ local(2011, 0, 23, 0, 0)
+ ]);
+ },
+ "generates 1-month ticks": function(scale) {
+ var x = scale().domain([local(2011, 0, 18), local(2011, 4, 2)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 1, 1, 0, 0),
+ local(2011, 2, 1, 0, 0),
+ local(2011, 3, 1, 0, 0),
+ local(2011, 4, 1, 0, 0)
+ ]);
+ },
+ "generates 3-month ticks": function(scale) {
+ var x = scale().domain([local(2010, 11, 18), local(2011, 10, 2)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 0, 0),
+ local(2011, 3, 1, 0, 0),
+ local(2011, 6, 1, 0, 0),
+ local(2011, 9, 1, 0, 0)
+ ]);
+ },
+ "generates 1-year ticks": function(scale) {
+ var x = scale().domain([local(2010, 11, 18), local(2014, 2, 2)]);
+ assert.deepEqual(x.ticks(4), [
+ local(2011, 0, 1, 0, 0),
+ local(2012, 0, 1, 0, 0),
+ local(2013, 0, 1, 0, 0),
+ local(2014, 0, 1, 0, 0)
+ ]);
+ },
+ "generates multi-year ticks": function(scale) {
+ var x = scale().domain([local(0, 11, 18), local(2014, 2, 2)]);
+ assert.deepEqual(x.ticks(6), [
+ local( 500, 0, 1, 0, 0),
+ local(1000, 0, 1, 0, 0),
+ local(1500, 0, 1, 0, 0),
+ local(2000, 0, 1, 0, 0)
+ ]);
+ },
+ "returns one tick for degenerate empty domain": function(scale) {
+ var x = scale().domain([local(2014, 2, 2), local(2014, 2, 2)]);
+ assert.deepEqual(x.ticks(6), [local(2014, 2, 2)]);
+ }
+ },
+
+ "tickFormat": {
+ topic: function(scale) {
+ return scale().tickFormat();
+ },
+ "formats year on New Year's": function(format) {
+ assert.equal(format(local(2011, 0, 1)), "2011");
+ assert.equal(format(local(2012, 0, 1)), "2012");
+ assert.equal(format(local(2013, 0, 1)), "2013");
+ },
+ "formats month on the 1st of each month": function(format) {
+ assert.equal(format(local(2011, 1, 1)), "February");
+ assert.equal(format(local(2011, 2, 1)), "March");
+ assert.equal(format(local(2011, 3, 1)), "April");
+ },
+ "formats week on Sunday midnight": function(format) {
+ assert.equal(format(local(2011, 1, 6)), "Feb 06");
+ assert.equal(format(local(2011, 1, 13)), "Feb 13");
+ assert.equal(format(local(2011, 1, 20)), "Feb 20");
+ },
+ "formats date on midnight": function(format) {
+ assert.equal(format(local(2011, 1, 2)), "Wed 02");
+ assert.equal(format(local(2011, 1, 3)), "Thu 03");
+ assert.equal(format(local(2011, 1, 4)), "Fri 04");
+ },
+ "formats hour on minute zero": function(format) {
+ assert.equal(format(local(2011, 1, 2, 11)), "11 AM");
+ assert.equal(format(local(2011, 1, 2, 12)), "12 PM");
+ assert.equal(format(local(2011, 1, 2, 13)), "01 PM");
+ },
+ "formats minute on second zero": function(format) {
+ assert.equal(format(local(2011, 1, 2, 11, 59)), "11:59");
+ assert.equal(format(local(2011, 1, 2, 12, 1)), "12:01");
+ assert.equal(format(local(2011, 1, 2, 12, 2)), "12:02");
+ },
+ "otherwise, formats second": function(format) {
+ assert.equal(format(local(2011, 1, 2, 12, 1, 9)), ":09");
+ assert.equal(format(local(2011, 1, 2, 12, 1, 10)), ":10");
+ assert.equal(format(local(2011, 1, 2, 12, 1, 11)), ":11");
+ }
+ }
+ }
+});
+
+suite.addBatch({
+ "scale.utc": {
+ topic: load("time/scale-utc").expression("d3.time.scale.utc").document(),
+
+ "nice": {
+ "rounds using the specified time interval": function(scale) {
+ var x = scale().domain([utc(2009, 0, 1, 0, 12), utc(2009, 0, 1, 23, 48)]);
+ assert.deepEqual(x.nice(_.time.day.utc).domain(), [utc(2009, 0, 1), utc(2009, 0, 2)]);
+ assert.deepEqual(x.nice(_.time.week.utc).domain(), [utc(2008, 11, 28), utc(2009, 0, 4)]);
+ assert.deepEqual(x.nice(_.time.month.utc).domain(), [utc(2008, 11, 1), utc(2009, 1, 1)]);
+ assert.deepEqual(x.nice(_.time.year.utc).domain(), [utc(2008, 0, 1), utc(2010, 0, 1)]);
+ },
+ "rounds using the specified time interval and skip": function(scale) {
+ var x = scale().domain([utc(2009, 0, 1, 0, 12), utc(2009, 0, 1, 23, 48)]);
+ assert.deepEqual(x.nice(_.time.day.utc, 3).domain(), [utc(2009, 0, 1), utc(2009, 0, 4)]);
+ assert.deepEqual(x.nice(_.time.week.utc, 2).domain(), [utc(2008, 11, 21), utc(2009, 0, 4)]);
+ assert.deepEqual(x.nice(_.time.month.utc, 3).domain(), [utc(2008, 9, 1), utc(2009, 3, 1)]);
+ assert.deepEqual(x.nice(_.time.year.utc, 10).domain(), [utc(2000, 0, 1), utc(2010, 0, 1)]);
+ },
+ "rounds using the specified count": function(scale) {
+ var x = scale().domain([utc(2009, 0, 1, 0, 17), utc(2009, 0, 1, 23, 42)]);
+ assert.deepEqual(x.nice(100).domain(), [utc(2009, 0, 1, 0, 15), utc(2009, 0, 1, 23, 45)]);
+ assert.deepEqual(x.nice(10).domain(), [utc(2009, 0, 1), utc(2009, 0, 2)]);
+ },
+ "rounds with a default count of ten if no arguments": function(scale) {
+ var x = scale().domain([utc(2009, 0, 1, 0, 17), utc(2009, 0, 1, 23, 42)]);
+ assert.deepEqual(x.nice().domain(), [utc(2009, 0, 1), utc(2009, 0, 2)]);
+ },
+ "works on degenerate domains": function(scale) {
+ var x = scale().domain([utc(2009, 0, 1, 0, 12), utc(2009, 0, 1, 0, 12)]);
+ assert.deepEqual(x.nice(_.time.day.utc).domain(), [utc(2009, 0, 1), utc(2009, 0, 2)]);
+ },
+ "nicing a polylinear domain only affects the extent": function(linear) {
+ var x = linear().domain([utc(2009, 0, 1, 0, 12), utc(2009, 0, 1, 23, 48), utc(2009, 0, 2, 23, 48)]).nice(_.time.day.utc);
+ assert.deepEqual(x.domain(), [utc(2009, 0, 1), utc(2009, 0, 1, 23, 48), utc(2009, 0, 3)]);
+ }
+ },
+
+ "ticks": {
+ "observes explicit tick interval": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 1, 0), utc(2011, 0, 1, 12, 4, 4)]);
+ assert.deepEqual(x.ticks(_.time.minute.utc), [
+ utc(2011, 0, 1, 12, 1),
+ utc(2011, 0, 1, 12, 2),
+ utc(2011, 0, 1, 12, 3),
+ utc(2011, 0, 1, 12, 4)
+ ]);
+ },
+ "observes explicit tick interval and step": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 0, 0), utc(2011, 0, 1, 12, 33, 4)]);
+ assert.deepEqual(x.ticks(_.time.minute.utc, 10), [
+ utc(2011, 0, 1, 12, 0),
+ utc(2011, 0, 1, 12, 10),
+ utc(2011, 0, 1, 12, 20),
+ utc(2011, 0, 1, 12, 30)
+ ]);
+ },
+ "(deprecated) observes explicit tick range": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 1, 0), utc(2011, 0, 1, 12, 4, 4)]);
+ assert.deepEqual(x.ticks(_.time.minutes.utc), [
+ utc(2011, 0, 1, 12, 1),
+ utc(2011, 0, 1, 12, 2),
+ utc(2011, 0, 1, 12, 3),
+ utc(2011, 0, 1, 12, 4)
+ ]);
+ },
+ "(deprecated) observes explicit tick range and step": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 0, 0), utc(2011, 0, 1, 12, 33, 4)]);
+ assert.deepEqual(x.ticks(_.time.minutes.utc, 10), [
+ utc(2011, 0, 1, 12, 0),
+ utc(2011, 0, 1, 12, 10),
+ utc(2011, 0, 1, 12, 20),
+ utc(2011, 0, 1, 12, 30)
+ ]);
+ },
+ "generates sub-second ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 0, 0), utc(2011, 0, 1, 12, 0, 1)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 12, 0, 0, 0),
+ utc(2011, 0, 1, 12, 0, 0, 200),
+ utc(2011, 0, 1, 12, 0, 0, 400),
+ utc(2011, 0, 1, 12, 0, 0, 600),
+ utc(2011, 0, 1, 12, 0, 0, 800),
+ utc(2011, 0, 1, 12, 0, 1, 0)
+ ]);
+ },
+ "generates 1-second ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 0, 0), utc(2011, 0, 1, 12, 0, 4)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 12, 0, 0),
+ utc(2011, 0, 1, 12, 0, 1),
+ utc(2011, 0, 1, 12, 0, 2),
+ utc(2011, 0, 1, 12, 0, 3),
+ utc(2011, 0, 1, 12, 0, 4)
+ ]);
+ },
+ "generates 5-second ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 0, 0), utc(2011, 0, 1, 12, 0, 20)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 12, 0, 0),
+ utc(2011, 0, 1, 12, 0, 5),
+ utc(2011, 0, 1, 12, 0, 10),
+ utc(2011, 0, 1, 12, 0, 15),
+ utc(2011, 0, 1, 12, 0, 20)
+ ]);
+ },
+ "generates 15-second ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 0, 0), utc(2011, 0, 1, 12, 0, 50)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 12, 0, 0),
+ utc(2011, 0, 1, 12, 0, 15),
+ utc(2011, 0, 1, 12, 0, 30),
+ utc(2011, 0, 1, 12, 0, 45)
+ ]);
+ },
+ "generates 30-second ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 0, 0), utc(2011, 0, 1, 12, 1, 50)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 12, 0, 0),
+ utc(2011, 0, 1, 12, 0, 30),
+ utc(2011, 0, 1, 12, 1, 0),
+ utc(2011, 0, 1, 12, 1, 30)
+ ]);
+ },
+ "generates 1-minute ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 0, 27), utc(2011, 0, 1, 12, 4, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 12, 1),
+ utc(2011, 0, 1, 12, 2),
+ utc(2011, 0, 1, 12, 3),
+ utc(2011, 0, 1, 12, 4)
+ ]);
+ },
+ "generates 5-minute ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 3, 27), utc(2011, 0, 1, 12, 21, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 12, 5),
+ utc(2011, 0, 1, 12, 10),
+ utc(2011, 0, 1, 12, 15),
+ utc(2011, 0, 1, 12, 20)
+ ]);
+ },
+ "generates 15-minute ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 8, 27), utc(2011, 0, 1, 13, 4, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 12, 15),
+ utc(2011, 0, 1, 12, 30),
+ utc(2011, 0, 1, 12, 45),
+ utc(2011, 0, 1, 13, 0)
+ ]);
+ },
+ "generates 30-minute ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 28, 27), utc(2011, 0, 1, 14, 4, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 12, 30),
+ utc(2011, 0, 1, 13, 0),
+ utc(2011, 0, 1, 13, 30),
+ utc(2011, 0, 1, 14, 0)
+ ]);
+ },
+ "generates 1-hour ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 12, 28, 27), utc(2011, 0, 1, 16, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 13, 0),
+ utc(2011, 0, 1, 14, 0),
+ utc(2011, 0, 1, 15, 0),
+ utc(2011, 0, 1, 16, 0)
+ ]);
+ },
+ "generates 3-hour ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 14, 28, 27), utc(2011, 0, 2, 1, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 15, 0),
+ utc(2011, 0, 1, 18, 0),
+ utc(2011, 0, 1, 21, 0),
+ utc(2011, 0, 2, 0, 0)
+ ]);
+ },
+ "generates 6-hour ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 16, 28, 27), utc(2011, 0, 2, 14, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 18, 0),
+ utc(2011, 0, 2, 0, 0),
+ utc(2011, 0, 2, 6, 0),
+ utc(2011, 0, 2, 12, 0)
+ ]);
+ },
+ "generates 12-hour ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 16, 28, 27), utc(2011, 0, 3, 21, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 2, 0, 0),
+ utc(2011, 0, 2, 12, 0),
+ utc(2011, 0, 3, 0, 0),
+ utc(2011, 0, 3, 12, 0)
+ ]);
+ },
+ "generates 1-day ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 16, 28, 27), utc(2011, 0, 5, 21, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 2, 0, 0),
+ utc(2011, 0, 3, 0, 0),
+ utc(2011, 0, 4, 0, 0),
+ utc(2011, 0, 5, 0, 0)
+ ]);
+ },
+ "generates 2-day ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 2, 16, 28, 27), utc(2011, 0, 9, 21, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 3, 0, 0),
+ utc(2011, 0, 5, 0, 0),
+ utc(2011, 0, 7, 0, 0),
+ utc(2011, 0, 9, 0, 0)
+ ]);
+ },
+ "generates 1-week ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 1, 16, 28, 27), utc(2011, 0, 23, 21, 34, 12)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 2, 0, 0),
+ utc(2011, 0, 9, 0, 0),
+ utc(2011, 0, 16, 0, 0),
+ utc(2011, 0, 23, 0, 0)
+ ]);
+ },
+ "generates 1-month ticks": function(scale) {
+ var x = scale().domain([utc(2011, 0, 18), utc(2011, 4, 2)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 1, 1, 0, 0),
+ utc(2011, 2, 1, 0, 0),
+ utc(2011, 3, 1, 0, 0),
+ utc(2011, 4, 1, 0, 0)
+ ]);
+ },
+ "generates 3-month ticks": function(scale) {
+ var x = scale().domain([utc(2010, 11, 18), utc(2011, 10, 2)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 0, 0),
+ utc(2011, 3, 1, 0, 0),
+ utc(2011, 6, 1, 0, 0),
+ utc(2011, 9, 1, 0, 0)
+ ]);
+ },
+ "generates 1-year ticks": function(scale) {
+ var x = scale().domain([utc(2010, 11, 18), utc(2014, 2, 2)]);
+ assert.deepEqual(x.ticks(4), [
+ utc(2011, 0, 1, 0, 0),
+ utc(2012, 0, 1, 0, 0),
+ utc(2013, 0, 1, 0, 0),
+ utc(2014, 0, 1, 0, 0)
+ ]);
+ },
+ "generates multi-year ticks": function(scale) {
+ var x = scale().domain([utc(0, 11, 18), utc(2014, 2, 2)]);
+ assert.deepEqual(x.ticks(6), [
+ utc( 500, 0, 1, 0, 0),
+ utc(1000, 0, 1, 0, 0),
+ utc(1500, 0, 1, 0, 0),
+ utc(2000, 0, 1, 0, 0)
+ ]);
+ },
+ "returns one tick for degenerate empty domain": function(scale) {
+ var x = scale().domain([utc(2014, 2, 2), utc(2014, 2, 2)]);
+ assert.deepEqual(x.ticks(6), [utc(2014, 2, 2)]);
+ }
+ },
+
+ "tickFormat": {
+ topic: function(scale) {
+ return scale().tickFormat();
+ },
+ "formats year on New Year's": function(format) {
+ assert.equal(format(utc(2011, 0, 1)), "2011");
+ assert.equal(format(utc(2012, 0, 1)), "2012");
+ assert.equal(format(utc(2013, 0, 1)), "2013");
+ },
+ "formats month on the 1st of each month": function(format) {
+ assert.equal(format(utc(2011, 1, 1)), "February");
+ assert.equal(format(utc(2011, 2, 1)), "March");
+ assert.equal(format(utc(2011, 3, 1)), "April");
+ },
+ "formats week on Sunday midnight": function(format) {
+ assert.equal(format(utc(2011, 1, 6)), "Feb 06");
+ assert.equal(format(utc(2011, 1, 13)), "Feb 13");
+ assert.equal(format(utc(2011, 1, 20)), "Feb 20");
+ },
+ "formats date on midnight": function(format) {
+ assert.equal(format(utc(2011, 1, 2)), "Wed 02");
+ assert.equal(format(utc(2011, 1, 3)), "Thu 03");
+ assert.equal(format(utc(2011, 1, 4)), "Fri 04");
+ },
+ "formats hour on minute zero": function(format) {
+ assert.equal(format(utc(2011, 1, 2, 11)), "11 AM");
+ assert.equal(format(utc(2011, 1, 2, 12)), "12 PM");
+ assert.equal(format(utc(2011, 1, 2, 13)), "01 PM");
+ },
+ "formats minute on second zero": function(format) {
+ assert.equal(format(utc(2011, 1, 2, 11, 59)), "11:59");
+ assert.equal(format(utc(2011, 1, 2, 12, 1)), "12:01");
+ assert.equal(format(utc(2011, 1, 2, 12, 2)), "12:02");
+ },
+ "formats second on millisecond zero": function(format) {
+ assert.equal(format(utc(2011, 1, 2, 12, 1, 9)), ":09");
+ assert.equal(format(utc(2011, 1, 2, 12, 1, 10)), ":10");
+ assert.equal(format(utc(2011, 1, 2, 12, 1, 11)), ":11");
+ },
+ "otherwise, formats milliseconds": function(format) {
+ assert.equal(format(utc(2011, 1, 2, 12, 1, 0, 9)), ".009");
+ assert.equal(format(utc(2011, 1, 2, 12, 1, 0, 10)), ".010");
+ assert.equal(format(utc(2011, 1, 2, 12, 1, 0, 11)), ".011");
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/second-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/second-test.js
new file mode 100644
index 0000000..e740d3a
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/second-test.js
@@ -0,0 +1,143 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.second");
+
+suite.addBatch({
+ "second": {
+ topic: load("time/second").expression("d3.time.second"),
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns seconds": function(floor) {
+ assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59, 999)), local(2010, 11, 31, 23, 59, 59));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00, 000)), local(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00, 001)), local(2011, 00, 01, 00, 00, 00));
+ }
+ },
+ "round": {
+ topic: function(interval) {
+ return interval.round;
+ },
+ "returns seconds": function(round) {
+ assert.deepEqual(round(local(2010, 11, 31, 23, 59, 59, 999)), local(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(round(local(2011, 00, 01, 00, 00, 00, 499)), local(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(round(local(2011, 00, 01, 00, 00, 00, 500)), local(2011, 00, 01, 00, 00, 01));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns seconds": function(ceil) {
+ assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59, 999)), local(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00, 000)), local(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00, 001)), local(2011, 00, 01, 00, 00, 01));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = local(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, local(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), +1), local(2011, 00, 01, 00, 00, 00, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 456), -2), local(2010, 11, 31, 23, 59, 57, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59), -1), local(2010, 11, 31, 23, 59, 58));
+ assert.deepEqual(offset(local(2011, 00, 01, 00, 00, 00), -2), local(2010, 11, 31, 23, 59, 58));
+ assert.deepEqual(offset(local(2011, 00, 01, 00, 00, 00), -1), local(2010, 11, 31, 23, 59, 59));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 58), +1), local(2010, 11, 31, 23, 59, 59));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 58), +2), local(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59), +1), local(2011, 00, 01, 00, 00, 00));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), 0), local(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 58, 000), 0), local(2010, 11, 31, 23, 59, 58, 000));
+ }
+ },
+ "UTC": {
+ topic: function(interval) {
+ return interval.utc;
+ },
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns seconds": function(floor) {
+ assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59, 999)), utc(2010, 11, 31, 23, 59, 59));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00, 000)), utc(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00, 001)), utc(2011, 00, 01, 00, 00, 00));
+ }
+ },
+ "round": {
+ topic: function(interval) {
+ return interval.round;
+ },
+ "returns seconds": function(round) {
+ assert.deepEqual(round(utc(2010, 11, 31, 23, 59, 59, 999)), utc(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(round(utc(2011, 00, 01, 00, 00, 00, 499)), utc(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(round(utc(2011, 00, 01, 00, 00, 00, 500)), utc(2011, 00, 01, 00, 00, 01));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns seconds": function(ceil) {
+ assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59, 59, 999)), utc(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00, 000)), utc(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00, 001)), utc(2011, 00, 01, 00, 00, 01));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = utc(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, utc(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), +1), utc(2011, 00, 01, 00, 00, 00, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 456), -2), utc(2010, 11, 31, 23, 59, 57, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59), -1), utc(2010, 11, 31, 23, 59, 58));
+ assert.deepEqual(offset(utc(2011, 00, 01, 00, 00, 00), -2), utc(2010, 11, 31, 23, 59, 58));
+ assert.deepEqual(offset(utc(2011, 00, 01, 00, 00, 00), -1), utc(2010, 11, 31, 23, 59, 59));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 58), +1), utc(2010, 11, 31, 23, 59, 59));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 58), +2), utc(2011, 00, 01, 00, 00, 00));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59), +1), utc(2011, 00, 01, 00, 00, 00));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), 0), utc(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 58, 000), 0), utc(2010, 11, 31, 23, 59, 58, 000));
+ }
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/seconds-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/seconds-test.js
new file mode 100644
index 0000000..e8c6ab4
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/seconds-test.js
@@ -0,0 +1,91 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.seconds");
+
+suite.addBatch({
+ "seconds": {
+ topic: load("time/second").expression("d3.time.seconds"),
+ "returns seconds": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31, 23, 59, 59), local(2011, 0, 1, 0, 0, 2)), [
+ local(2010, 11, 31, 23, 59, 59),
+ local(2011, 0, 1, 0, 0, 0),
+ local(2011, 0, 1, 0, 0, 1)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31, 23, 59, 59), local(2011, 0, 1, 0, 0, 2))[0], local(2010, 11, 31, 23, 59, 59));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(local(2010, 11, 31, 23, 59, 59), local(2011, 0, 1, 0, 0, 2))[2], local(2011, 0, 1, 0, 0, 1));
+ },
+ "can skip seconds": function(range) {
+ assert.deepEqual(range(local(2011, 1, 1, 12, 0, 7), local(2011, 1, 1, 12, 1, 7), 15), [
+ local(2011, 1, 1, 12, 0, 15),
+ local(2011, 1, 1, 12, 0, 30),
+ local(2011, 1, 1, 12, 0, 45),
+ local(2011, 1, 1, 12, 1, 0)
+ ]);
+ },
+ "observes start of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 2, 13, 9, 59, 59), utc(2011, 2, 13, 10, 0, 2)), [
+ utc(2011, 2, 13, 9, 59, 59),
+ utc(2011, 2, 13, 10, 0, 0),
+ utc(2011, 2, 13, 10, 0, 1)
+ ]);
+ },
+ "observes end of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 10, 6, 8, 59, 59), utc(2011, 10, 6, 9, 0, 2)), [
+ utc(2011, 10, 6, 8, 59, 59),
+ utc(2011, 10, 6, 9, 0, 0),
+ utc(2011, 10, 6, 9, 0, 1)
+ ]);
+ },
+ "UTC": {
+ topic: function(range) {
+ return range.utc;
+ },
+ "returns seconds": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31, 23, 59, 59), utc(2011, 0, 1, 0, 0, 2)), [
+ utc(2010, 11, 31, 23, 59, 59),
+ utc(2011, 0, 1, 0, 0, 0),
+ utc(2011, 0, 1, 0, 0, 1)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31, 23, 59, 59), utc(2011, 0, 1, 0, 0, 2))[0], utc(2010, 11, 31, 23, 59, 59));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 31, 23, 59, 59), utc(2011, 0, 1, 0, 0, 2))[2], utc(2011, 0, 1, 0, 0, 1));
+ },
+ "can skip seconds": function(range) {
+ assert.deepEqual(range(utc(2011, 1, 1, 12, 0, 7), utc(2011, 1, 1, 12, 1, 7), 15), [
+ utc(2011, 1, 1, 12, 0, 15),
+ utc(2011, 1, 1, 12, 0, 30),
+ utc(2011, 1, 1, 12, 0, 45),
+ utc(2011, 1, 1, 12, 1, 0)
+ ]);
+ },
+ "does not observe the start of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 2, 13, 9, 59, 59), utc(2011, 2, 13, 10, 0, 2)), [
+ utc(2011, 2, 13, 9, 59, 59),
+ utc(2011, 2, 13, 10, 0, 0),
+ utc(2011, 2, 13, 10, 0, 1)
+ ]);
+ },
+ "does not observe the end of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 10, 6, 8, 59, 59), utc(2011, 10, 6, 9, 0, 2)), [
+ utc(2011, 10, 6, 8, 59, 59),
+ utc(2011, 10, 6, 9, 0, 0),
+ utc(2011, 10, 6, 9, 0, 1)
+ ]);
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/time.js b/web/nms.gathering.org/speedometer/d3-master/test/time/time.js
new file mode 100644
index 0000000..32bca64
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/time.js
@@ -0,0 +1,30 @@
+var offset = 0;
+
+exports.local = function(year, month, day, hours, minutes, seconds, milliseconds) {
+ var date = new Date;
+ date.setFullYear(year, month, day);
+ date.setHours(hours || 0, offset + (minutes || 0), seconds || 0, milliseconds || 0);
+ return date;
+};
+
+exports.utc = function(year, month, day, hours, minutes, seconds, milliseconds) {
+ var date = new Date;
+ date.setUTCFullYear(year, month, day);
+ date.setUTCHours(hours || 0, minutes || 0, seconds || 0, milliseconds || 0);
+ return date;
+};
+
+exports.zone = function(tzOffset, scope) {
+ return function() {
+ var o = Date.prototype.getTimezoneOffset;
+ try {
+ // Note: assumes the dates are not in DST.
+ offset = -tzOffset - new Date(0).getTimezoneOffset();
+ Date.prototype.getTimezoneOffset = function() { return offset; };
+ scope.apply(this, arguments);
+ } finally {
+ offset = 0;
+ Date.prototype.getTimezoneOffset = o;
+ }
+ };
+};
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/week-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/week-test.js
new file mode 100644
index 0000000..f0db1f7
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/week-test.js
@@ -0,0 +1,162 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.week");
+
+suite.addBatch({
+ "week": {
+ topic: load("time/week").expression("d3.time.week"),
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns sundays": function(floor) {
+ assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 11, 26));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), local(2010, 11, 26));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 01)), local(2010, 11, 26));
+ assert.deepEqual(floor(local(2011, 00, 01, 23, 59, 59)), local(2010, 11, 26));
+ assert.deepEqual(floor(local(2011, 00, 02, 00, 00, 00)), local(2011, 00, 02));
+ assert.deepEqual(floor(local(2011, 00, 02, 00, 00, 01)), local(2011, 00, 02));
+ },
+ "observes the start of daylight savings time": function(floor) {
+ assert.deepEqual(floor(local(2011, 02, 13, 01)), local(2011, 02, 13));
+ },
+ "observes the end of the daylight savings time": function(floor) {
+ assert.deepEqual(floor(local(2011, 10, 06, 01)), local(2011, 10, 06));
+ },
+ "correctly handles years in the first century": function(floor) {
+ assert.deepEqual(floor(local(0011, 10, 06, 07)), local(0011, 10, 01));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns sundays": function(ceil) {
+ assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), local(2011, 00, 02));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 02));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 01)), local(2011, 00, 02));
+ assert.deepEqual(ceil(local(2011, 00, 01, 23, 59, 59)), local(2011, 00, 02));
+ assert.deepEqual(ceil(local(2011, 00, 02, 00, 00, 00)), local(2011, 00, 02));
+ assert.deepEqual(ceil(local(2011, 00, 02, 00, 00, 01)), local(2011, 00, 09));
+ },
+ "observes the start of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(local(2011, 02, 13, 01)), local(2011, 02, 20));
+ },
+ "observes the end of the daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(local(2011, 10, 06, 01)), local(2011, 10, 13));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = local(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, local(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), +1), local(2011, 00, 07, 23, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 456), -2), local(2010, 11, 17, 23, 59, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 01), -1), local(2010, 10, 24));
+ assert.deepEqual(offset(local(2011, 00, 01), -2), local(2010, 11, 18));
+ assert.deepEqual(offset(local(2011, 00, 01), -1), local(2010, 11, 25));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 10, 24), +1), local(2010, 11, 01));
+ assert.deepEqual(offset(local(2010, 11, 18), +2), local(2011, 00, 01));
+ assert.deepEqual(offset(local(2010, 11, 25), +1), local(2011, 00, 01));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), 0), local(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 58, 000), 0), local(2010, 11, 31, 23, 59, 58, 000));
+ }
+ },
+ "UTC": {
+ topic: function(interval) {
+ return interval.utc;
+ },
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns sundays": function(floor) {
+ assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 26));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00)), utc(2010, 11, 26));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 01)), utc(2010, 11, 26));
+ assert.deepEqual(floor(utc(2011, 00, 01, 23, 59, 59)), utc(2010, 11, 26));
+ assert.deepEqual(floor(utc(2011, 00, 02, 00, 00, 00)), utc(2011, 00, 02));
+ assert.deepEqual(floor(utc(2011, 00, 02, 00, 00, 01)), utc(2011, 00, 02));
+ },
+ "does not observe the start of daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 02, 13, 01)), utc(2011, 02, 13));
+ },
+ "does not observe the end of the daylight savings time": function(floor) {
+ assert.deepEqual(floor(utc(2011, 10, 06, 01)), utc(2011, 10, 06));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns sundays": function(ceil) {
+ assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59, 59)), utc(2011, 00, 02));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 02));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 01)), utc(2011, 00, 02));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 23, 59, 59)), utc(2011, 00, 02));
+ assert.deepEqual(ceil(utc(2011, 00, 02, 00, 00, 00)), utc(2011, 00, 02));
+ assert.deepEqual(ceil(utc(2011, 00, 02, 00, 00, 01)), utc(2011, 00, 09));
+ },
+ "does not observe the start of daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 02, 13, 01)), utc(2011, 02, 20));
+ },
+ "does not observe the end of the daylight savings time": function(ceil) {
+ assert.deepEqual(ceil(utc(2011, 10, 06, 01)), utc(2011, 10, 13));
+ }
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = utc(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, utc(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), +1), utc(2011, 00, 07, 23, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 456), -2), utc(2010, 11, 17, 23, 59, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 01), -1), utc(2010, 10, 24));
+ assert.deepEqual(offset(utc(2011, 00, 01), -2), utc(2010, 11, 18));
+ assert.deepEqual(offset(utc(2011, 00, 01), -1), utc(2010, 11, 25));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 10, 24), +1), utc(2010, 11, 01));
+ assert.deepEqual(offset(utc(2010, 11, 18), +2), utc(2011, 00, 01));
+ assert.deepEqual(offset(utc(2010, 11, 25), +1), utc(2011, 00, 01));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), 0), utc(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 58, 000), 0), utc(2010, 11, 31, 23, 59, 58, 000));
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/weeks-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/weeks-test.js
new file mode 100644
index 0000000..7a110a8
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/weeks-test.js
@@ -0,0 +1,95 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert"),
+ time = require("./time"),
+ local = time.local,
+ utc = time.utc;
+
+var suite = vows.describe("d3.time.weeks");
+
+suite.addBatch({
+ "weeks": {
+ topic: load("time/week").expression("d3.time.weeks"),
+ "returns sundays": function(range) {
+ assert.deepEqual(range(local(2010, 11, 21), local(2011, 0, 12)), [
+ local(2010, 11, 26),
+ local(2011, 0, 2),
+ local(2011, 0, 9)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(local(2010, 11, 21), local(2011, 0, 12))[0], local(2010, 11, 26));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(local(2010, 11, 21), local(2011, 0, 12))[2], local(2011, 0, 9));
+ },
+ "can skip weeks": function(range) {
+ assert.deepEqual(range(local(2011, 0, 1), local(2011, 3, 1), 4), [
+ local(2011, 0, 2),
+ local(2011, 0, 30),
+ local(2011, 1, 27),
+ local(2011, 2, 27)
+ ]);
+ },
+ "observes start of daylight savings time": function(range) {
+ assert.deepEqual(range(local(2011, 2, 1), local(2011, 2, 28)), [
+ local(2011, 2, 6),
+ local(2011, 2, 13),
+ local(2011, 2, 20),
+ local(2011, 2, 27)
+ ]);
+ },
+ "observes end of daylight savings time": function(range) {
+ assert.deepEqual(range(local(2011, 10, 1), local(2011, 10, 30)), [
+ local(2011, 10, 6),
+ local(2011, 10, 13),
+ local(2011, 10, 20),
+ local(2011, 10, 27)
+ ]);
+ },
+ "UTC": {
+ topic: function(range) {
+ return range.utc;
+ },
+ "returns sundays": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 21), utc(2011, 0, 12)), [
+ utc(2010, 11, 26),
+ utc(2011, 0, 2),
+ utc(2011, 0, 9)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 21), utc(2011, 0, 12))[0], utc(2010, 11, 26));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(utc(2010, 11, 21), utc(2011, 0, 12))[2], utc(2011, 0, 9));
+ },
+ "can skip weeks": function(range) {
+ assert.deepEqual(range(utc(2011, 0, 1), utc(2011, 3, 1), 4), [
+ utc(2011, 0, 2),
+ utc(2011, 0, 30),
+ utc(2011, 1, 27),
+ utc(2011, 2, 27)
+ ]);
+ },
+ "does not observe the start of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 2, 1), utc(2011, 2, 28)), [
+ utc(2011, 2, 6),
+ utc(2011, 2, 13),
+ utc(2011, 2, 20),
+ utc(2011, 2, 27)
+ ]);
+ },
+ "does not observe the end of daylight savings time": function(range) {
+ assert.deepEqual(range(utc(2011, 10, 1), utc(2011, 10, 30)), [
+ utc(2011, 10, 6),
+ utc(2011, 10, 13),
+ utc(2011, 10, 20),
+ utc(2011, 10, 27)
+ ]);
+ }
+ }
+ }
+});
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/year-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/year-test.js
new file mode 100644
index 0000000..66230f6
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/year-test.js
@@ -0,0 +1,137 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert");
+
+var suite = vows.describe("d3.time.year");
+
+suite.addBatch({
+ "year": {
+ topic: load("time/year").expression("d3.time.year"),
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns years": function(floor) {
+ assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 00, 01));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01));
+ assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 01)), local(2011, 00, 01));
+ },
+ "correctly handles years in the first century": function(floor) {
+ assert.deepEqual(floor(local(0011, 10, 06, 07)), local(0011, 00, 01));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns years": function(ceil) {
+ assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), local(2011, 00, 01));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01));
+ assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 01)), local(2012, 00, 01));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = local(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, local(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), +1), local(2011, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 456), -2), local(2008, 11, 31, 23, 59, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 01), -1), local(2009, 11, 01));
+ assert.deepEqual(offset(local(2011, 00, 01), -2), local(2009, 00, 01));
+ assert.deepEqual(offset(local(2011, 00, 01), -1), local(2010, 00, 01));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(local(2009, 11, 01), +1), local(2010, 11, 01));
+ assert.deepEqual(offset(local(2009, 00, 01), +2), local(2011, 00, 01));
+ assert.deepEqual(offset(local(2010, 00, 01), +1), local(2011, 00, 01));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 59, 999), 0), local(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(local(2010, 11, 31, 23, 59, 58, 000), 0), local(2010, 11, 31, 23, 59, 58, 000));
+ }
+ },
+ "UTC": {
+ topic: function(interval) {
+ return interval.utc;
+ },
+ "defaults to floor": function(interval) {
+ assert.strictEqual(interval, interval.floor);
+ },
+ "floor": {
+ topic: function(interval) {
+ return interval.floor;
+ },
+ "returns years": function(floor) {
+ assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 00, 01));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01));
+ assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 01)), utc(2011, 00, 01));
+ }
+ },
+ "ceil": {
+ topic: function(interval) {
+ return interval.ceil;
+ },
+ "returns years": function(ceil) {
+ assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59, 59)), utc(2011, 00, 01));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01));
+ assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 01)), utc(2012, 00, 01));
+ }
+ },
+ "offset": {
+ topic: function(interval) {
+ return interval.offset;
+ },
+ "does not modify the passed-in date": function(offset) {
+ var date = utc(2010, 11, 31, 23, 59, 59, 999);
+ offset(date, +1);
+ assert.deepEqual(date, utc(2010, 11, 31, 23, 59, 59, 999));
+ },
+ "does not round the passed-in-date": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), +1), utc(2011, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 456), -2), utc(2008, 11, 31, 23, 59, 59, 456));
+ },
+ "allows negative offsets": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 01), -1), utc(2009, 11, 01));
+ assert.deepEqual(offset(utc(2011, 00, 01), -2), utc(2009, 00, 01));
+ assert.deepEqual(offset(utc(2011, 00, 01), -1), utc(2010, 00, 01));
+ },
+ "allows positive offsets": function(offset) {
+ assert.deepEqual(offset(utc(2009, 11, 01), +1), utc(2010, 11, 01));
+ assert.deepEqual(offset(utc(2009, 00, 01), +2), utc(2011, 00, 01));
+ assert.deepEqual(offset(utc(2010, 00, 01), +1), utc(2011, 00, 01));
+ },
+ "allows zero offset": function(offset) {
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 59, 999), 0), utc(2010, 11, 31, 23, 59, 59, 999));
+ assert.deepEqual(offset(utc(2010, 11, 31, 23, 59, 58, 000), 0), utc(2010, 11, 31, 23, 59, 58, 000));
+ }
+ }
+ }
+ }
+});
+
+function local(year, month, day, hours, minutes, seconds, milliseconds) {
+ var date = new Date();
+ date.setFullYear(year, month, day);
+ date.setHours(hours || 0, minutes || 0, seconds || 0, milliseconds || 0);
+ return date;
+}
+
+function utc(year, month, day, hours, minutes, seconds, milliseconds) {
+ var date = new Date();
+ date.setUTCFullYear(year, month, day);
+ date.setUTCHours(hours || 0, minutes || 0, seconds || 0, milliseconds || 0);
+ return date;
+}
+
+suite.export(module);
diff --git a/web/nms.gathering.org/speedometer/d3-master/test/time/years-test.js b/web/nms.gathering.org/speedometer/d3-master/test/time/years-test.js
new file mode 100644
index 0000000..16f6141
--- /dev/null
+++ b/web/nms.gathering.org/speedometer/d3-master/test/time/years-test.js
@@ -0,0 +1,74 @@
+var vows = require("vows"),
+ load = require("../load"),
+ assert = require("../assert");
+
+var suite = vows.describe("d3.time.years");
+
+suite.addBatch({
+ "years": {
+ topic: load("time/year").expression("d3.time.years"),
+ "returns years": function(range) {
+ assert.deepEqual(range(local(2010, 0, 1), local(2013, 0, 1)), [
+ local(2010, 0, 1),
+ local(2011, 0, 1),
+ local(2012, 0, 1)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(local(2010, 0, 1), local(2013, 0, 1))[0], local(2010, 0, 1));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(local(2010, 0, 1), local(2013, 0, 1))[2], local(2012, 0, 1));
+ },
+ "can skip years": function(range) {
+ assert.deepEqual(range(local(2009, 0, 1), local(2029, 0, 1), 5), [
+ local(2010, 0, 1),
+ local(2015, 0, 1),
+ local(2020, 0, 1),
+ local(2025, 0, 1)
+ ]);
+ },
+ "UTC": {
+ topic: function(range) {
+ return range.utc;
+ },
+ "returns years": function(range) {
+ assert.deepEqual(range(utc(2010, 0, 1), utc(2013, 0, 1)), [
+ utc(2010, 0, 1),
+ utc(2011, 0, 1),
+ utc(2012, 0, 1)
+ ]);
+ },
+ "has an inclusive lower bound": function(range) {
+ assert.deepEqual(range(utc(2010, 0, 1), utc(2013, 0, 1))[0], utc(2010, 0, 1));
+ },
+ "has an exclusive upper bound": function(range) {
+ assert.deepEqual(range(utc(2010, 0, 1), utc(2013, 0, 1))[2], utc(2012, 0, 1));
+ },
+ "can skip years": function(range) {
+ assert.deepEqual(range(utc(2009, 0, 1), utc(2029, 0, 1), 5), [
+ utc(2010, 0, 1),
+ utc(2015, 0, 1),
+ utc(2020, 0, 1),
+ utc(2025, 0, 1)
+ ]);
+ }
+ }
+ }
+});
+
+function local(year, month, day, hours, minutes, seconds, milliseconds) {
+ var date = new Date();
+ date.setFullYear(year, month, day);
+ date.setHours(hours || 0, minutes || 0, seconds || 0, milliseconds || 0);
+ return date;
+}
+
+function utc(year, month, day, hours, minutes, seconds, milliseconds) {
+ var date = new Date();
+ date.setUTCFullYear(year, month, day);
+ date.setUTCHours(hours || 0, minutes || 0, seconds || 0, milliseconds || 0);
+ return date;
+}
+
+suite.export(module);