diff options
author | Kristian Lyngstol <kristian@bohemians.org> | 2015-04-02 19:24:45 +0200 |
---|---|---|
committer | Kristian Lyngstol <kristian@bohemians.org> | 2015-04-02 19:24:45 +0200 |
commit | 0d8bba263dc195147d6fdb09662e7926f0a58b3e (patch) | |
tree | 4c570b4376c323e585120e7695b8715be7aa8881 /web/nms.gathering.org/speedometer/d3-master/test/time | |
parent | e4354b47bd8891c5b1ee591fdf74b3ca67eee461 (diff) |
Bump lots of changes
Diffstat (limited to 'web/nms.gathering.org/speedometer/d3-master/test/time')
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); |