toolkit/javascript/d3/test/time/hour-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.hour");
       
     9 
       
    10 suite.addBatch({
       
    11   "hour": {
       
    12     topic: function() {
       
    13       return d3.time.hour;
       
    14     },
       
    15     "returns hours": function(floor) {
       
    16       assert.deepEqual(floor(local(2010, 11, 31, 23, 59)), local(2010, 11, 31, 23));
       
    17       assert.deepEqual(floor(local(2011, 0, 1, 0, 0)), local(2011, 0, 1, 0));
       
    18       assert.deepEqual(floor(local(2011, 0, 1, 0, 1)), local(2011, 0, 1, 0));
       
    19     },
       
    20     "observes start of daylight savings time": function(floor) {
       
    21       assert.deepEqual(floor(utc(2011, 2, 13, 8, 59)), utc(2011, 2, 13, 8));
       
    22       assert.deepEqual(floor(utc(2011, 2, 13, 9, 0)), utc(2011, 2, 13, 9));
       
    23       assert.deepEqual(floor(utc(2011, 2, 13, 9, 1)), utc(2011, 2, 13, 9));
       
    24       assert.deepEqual(floor(utc(2011, 2, 13, 9, 59)), utc(2011, 2, 13, 9));
       
    25       assert.deepEqual(floor(utc(2011, 2, 13, 10, 0)), utc(2011, 2, 13, 10));
       
    26       assert.deepEqual(floor(utc(2011, 2, 13, 10, 1)), utc(2011, 2, 13, 10));
       
    27     },
       
    28     "observes end of daylight savings time": function(floor) {
       
    29       assert.deepEqual(floor(utc(2011, 10, 6, 7, 59)), utc(2011, 10, 6, 7));
       
    30       assert.deepEqual(floor(utc(2011, 10, 6, 8, 0)), utc(2011, 10, 6, 8));
       
    31       assert.deepEqual(floor(utc(2011, 10, 6, 8, 1)), utc(2011, 10, 6, 8));
       
    32       assert.deepEqual(floor(utc(2011, 10, 6, 8, 59)), utc(2011, 10, 6, 8));
       
    33       assert.deepEqual(floor(utc(2011, 10, 6, 9, 0)), utc(2011, 10, 6, 9));
       
    34       assert.deepEqual(floor(utc(2011, 10, 6, 9, 1)), utc(2011, 10, 6, 9));
       
    35     },
       
    36     "NPT": {
       
    37       "observes 15-minute offset": tz("Asia/Kathmandu", function(floor) {
       
    38         assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 17, 15));
       
    39         assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 0)), utc(2010, 11, 31, 18, 15));
       
    40         assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 1)), utc(2010, 11, 31, 18, 15));
       
    41       })
       
    42     },
       
    43     "IST": {
       
    44       "observes 30-minute offset": tz("Asia/Calcutta", function(floor) {
       
    45         assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 17, 30));
       
    46         assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 0)), utc(2010, 11, 31, 18, 30));
       
    47         assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 1)), utc(2010, 11, 31, 18, 30));
       
    48       })
       
    49     },
       
    50     "UTC": {
       
    51       topic: function(floor) {
       
    52         return floor.utc;
       
    53       },
       
    54       "returns hours": function(floor) {
       
    55         assert.deepEqual(floor(utc(2010, 11, 31, 23, 59)), utc(2010, 11, 31, 23));
       
    56         assert.deepEqual(floor(utc(2011, 0, 1, 0, 0)), utc(2011, 0, 1, 0));
       
    57         assert.deepEqual(floor(utc(2011, 0, 1, 0, 1)), utc(2011, 0, 1, 0));
       
    58       },
       
    59       "does not observe the start of daylight savings time": function(floor) {
       
    60         assert.deepEqual(floor(utc(2011, 2, 13, 8, 59)), utc(2011, 2, 13, 8));
       
    61         assert.deepEqual(floor(utc(2011, 2, 13, 9, 0)), utc(2011, 2, 13, 9));
       
    62         assert.deepEqual(floor(utc(2011, 2, 13, 9, 1)), utc(2011, 2, 13, 9));
       
    63         assert.deepEqual(floor(utc(2011, 2, 13, 9, 59)), utc(2011, 2, 13, 9));
       
    64         assert.deepEqual(floor(utc(2011, 2, 13, 10, 0)), utc(2011, 2, 13, 10));
       
    65         assert.deepEqual(floor(utc(2011, 2, 13, 10, 1)), utc(2011, 2, 13, 10));
       
    66       },
       
    67       "does not observe the end of daylight savings time": function(floor) {
       
    68         assert.deepEqual(floor(utc(2011, 10, 6, 7, 59)), utc(2011, 10, 6, 7));
       
    69         assert.deepEqual(floor(utc(2011, 10, 6, 8, 0)), utc(2011, 10, 6, 8));
       
    70         assert.deepEqual(floor(utc(2011, 10, 6, 8, 1)), utc(2011, 10, 6, 8));
       
    71         assert.deepEqual(floor(utc(2011, 10, 6, 8, 59)), utc(2011, 10, 6, 8));
       
    72         assert.deepEqual(floor(utc(2011, 10, 6, 9, 0)), utc(2011, 10, 6, 9));
       
    73         assert.deepEqual(floor(utc(2011, 10, 6, 9, 1)), utc(2011, 10, 6, 9));
       
    74       }
       
    75     }
       
    76   }
       
    77 });
       
    78 
       
    79 function local(year, month, day, hours, minutes, seconds) {
       
    80   return new Date(year, month, day, hours || 0, minutes || 0, seconds || 0);
       
    81 }
       
    82 
       
    83 function utc(year, month, day, hours, minutes, seconds) {
       
    84   return new Date(Date.UTC(year, month, day, hours || 0, minutes || 0, seconds || 0));
       
    85 }
       
    86 
       
    87 function tz(tz, scope) {
       
    88   return function() {
       
    89     var o = process.env.TZ;
       
    90     try {
       
    91       process.env.TZ = tz;
       
    92       new Date(0).toString(); // invalidate node's dst cache
       
    93       new Date().toString();
       
    94       scope.apply(this, arguments);
       
    95     } finally {
       
    96       process.env.TZ = o;
       
    97       new Date(0).toString(); // invalidate node's dst cache
       
    98       new Date().toString();
       
    99     }
       
   100   };
       
   101 }
       
   102 
       
   103 suite.export(module);