toolkit/javascript/d3/test/time/hours-test.js
changeset 47 c0b4a8b5a012
equal deleted inserted replaced
46:efd9c589177a 47:c0b4a8b5a012
       
     1 require("../env");
       
     2 require("../../d3");
       
     3 require("../../d3.time");
       
     4 
       
     5 var vows = require("vows"),
       
     6     assert = require("assert");
       
     7 
       
     8 var suite = vows.describe("d3.time.hours");
       
     9 
       
    10 suite.addBatch({
       
    11   "hours": {
       
    12     topic: function() {
       
    13       return d3.time.hours;
       
    14     },
       
    15     "returns hours": function(range) {
       
    16       assert.deepEqual(range(local(2010, 11, 31, 12, 30), local(2010, 11, 31, 15, 30)), [
       
    17         local(2010, 11, 31, 13),
       
    18         local(2010, 11, 31, 14),
       
    19         local(2010, 11, 31, 15)
       
    20       ]);
       
    21     },
       
    22     "has an inclusive lower bound": function(range) {
       
    23       assert.deepEqual(range(local(2010, 11, 31, 23), local(2011, 0, 1, 2))[0], local(2010, 11, 31, 23));
       
    24     },
       
    25     "has an exclusive upper bound": function(range) {
       
    26       assert.deepEqual(range(local(2010, 11, 31, 23), local(2011, 0, 1, 2))[2], local(2011, 0, 1, 1));
       
    27     },
       
    28     "can skip hours": function(range) {
       
    29       assert.deepEqual(range(local(2011, 1, 1, 1), local(2011, 1, 1, 13), 3), [
       
    30         local(2011, 1, 1, 3),
       
    31         local(2011, 1, 1, 6),
       
    32         local(2011, 1, 1, 9),
       
    33         local(2011, 1, 1, 12)
       
    34       ]);
       
    35     },
       
    36     "observes start of daylight savings time": function(range) {
       
    37       assert.deepEqual(range(local(2011, 2, 13, 1), local(2011, 2, 13, 5)), [
       
    38         utc(2011, 2, 13, 9),
       
    39         utc(2011, 2, 13, 10),
       
    40         utc(2011, 2, 13, 11)
       
    41       ]);
       
    42     },
       
    43     "observes end of daylight savings time": function(range) {
       
    44       assert.deepEqual(range(local(2011, 10, 6, 0), local(2011, 10, 6, 2)), [
       
    45         utc(2011, 10, 6, 7),
       
    46         utc(2011, 10, 6, 8),
       
    47         utc(2011, 10, 6, 9)
       
    48       ]);
       
    49     },
       
    50     "NPT": {
       
    51       "observes 15-minute offset": tz("Asia/Kathmandu", function(range) {
       
    52         assert.deepEqual(range(local(2011, 10, 7, 0), local(2011, 10, 7, 3)), [
       
    53           utc(2011, 10, 6, 18, 15),
       
    54           utc(2011, 10, 6, 19, 15),
       
    55           utc(2011, 10, 6, 20, 15)
       
    56         ]);
       
    57       })
       
    58     },
       
    59     "IST": {
       
    60       "observes 30-minute offset": tz("Asia/Calcutta", function(range) {
       
    61         assert.deepEqual(range(local(2011, 10, 7, 0), local(2011, 10, 7, 3)), [
       
    62           utc(2011, 10, 6, 18, 30),
       
    63           utc(2011, 10, 6, 19, 30),
       
    64           utc(2011, 10, 6, 20, 30)
       
    65         ]);
       
    66       })
       
    67     },
       
    68     "UTC": {
       
    69       topic: function(range) {
       
    70         return range.utc;
       
    71       },
       
    72       "returns hours": function(range) {
       
    73         assert.deepEqual(range(utc(2010, 11, 31, 12, 30), utc(2010, 11, 31, 15, 30)), [
       
    74           utc(2010, 11, 31, 13),
       
    75           utc(2010, 11, 31, 14),
       
    76           utc(2010, 11, 31, 15)
       
    77         ]);
       
    78       },
       
    79       "has an inclusive lower bound": function(range) {
       
    80         assert.deepEqual(range(utc(2010, 11, 31, 23), utc(2011, 0, 1, 2))[0], utc(2010, 11, 31, 23));
       
    81       },
       
    82       "has an exclusive upper bound": function(range) {
       
    83         assert.deepEqual(range(utc(2010, 11, 31, 23), utc(2011, 0, 1, 2))[2], utc(2011, 0, 1, 1));
       
    84       },
       
    85       "can skip hours": function(range) {
       
    86         assert.deepEqual(range(utc(2011, 1, 1, 1), utc(2011, 1, 1, 13), 3), [
       
    87           utc(2011, 1, 1, 3),
       
    88           utc(2011, 1, 1, 6),
       
    89           utc(2011, 1, 1, 9),
       
    90           utc(2011, 1, 1, 12)
       
    91         ]);
       
    92       },
       
    93       "observes start of daylight savings time": function(range) {
       
    94         assert.deepEqual(range(utc(2011, 2, 13, 9), utc(2011, 2, 13, 12)), [
       
    95           utc(2011, 2, 13, 9),
       
    96           utc(2011, 2, 13, 10),
       
    97           utc(2011, 2, 13, 11)
       
    98         ]);
       
    99       },
       
   100       "observes end of daylight savings time": function(range) {
       
   101         assert.deepEqual(range(utc(2011, 10, 6, 7), utc(2011, 10, 6, 10)), [
       
   102           utc(2011, 10, 6, 7),
       
   103           utc(2011, 10, 6, 8),
       
   104           utc(2011, 10, 6, 9)
       
   105         ]);
       
   106       }
       
   107     }
       
   108   }
       
   109 });
       
   110 
       
   111 function local(year, month, day, hours, minutes, seconds) {
       
   112   return new Date(year, month, day, hours || 0, minutes || 0, seconds || 0);
       
   113 }
       
   114 
       
   115 function utc(year, month, day, hours, minutes, seconds) {
       
   116   return new Date(Date.UTC(year, month, day, hours || 0, minutes || 0, seconds || 0));
       
   117 }
       
   118 
       
   119 function tz(tz, scope) {
       
   120   return function() {
       
   121     var o = process.env.TZ;
       
   122     try {
       
   123       process.env.TZ = tz;
       
   124       new Date(0).toString(); // invalidate node's dst cache
       
   125       new Date().toString();
       
   126       scope.apply(this, arguments);
       
   127     } finally {
       
   128       process.env.TZ = o;
       
   129       new Date(0).toString(); // invalidate node's dst cache
       
   130       new Date().toString();
       
   131     }
       
   132   };
       
   133 }
       
   134 
       
   135 suite.export(module);