toolkit/javascript/d3/test/time/format-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.format");
       
     9 
       
    10 suite.addBatch({
       
    11   "format": {
       
    12     topic: function() {
       
    13       return d3.time.format;
       
    14     },
       
    15     "formats abbreviated weekday": function(format) {
       
    16       var f = format("%a");
       
    17       assert.equal(f(local(1990, 0, 1)), "Mon");
       
    18       assert.equal(f(local(1990, 0, 2)), "Tue");
       
    19       assert.equal(f(local(1990, 0, 3)), "Wed");
       
    20       assert.equal(f(local(1990, 0, 4)), "Thu");
       
    21       assert.equal(f(local(1990, 0, 5)), "Fri");
       
    22       assert.equal(f(local(1990, 0, 6)), "Sat");
       
    23       assert.equal(f(local(1990, 0, 7)), "Sun");
       
    24     },
       
    25     "formats weekday": function(format) {
       
    26       var f = format("%A");
       
    27       assert.equal(f(local(1990, 0, 1)), "Monday");
       
    28       assert.equal(f(local(1990, 0, 2)), "Tuesday");
       
    29       assert.equal(f(local(1990, 0, 3)), "Wednesday");
       
    30       assert.equal(f(local(1990, 0, 4)), "Thursday");
       
    31       assert.equal(f(local(1990, 0, 5)), "Friday");
       
    32       assert.equal(f(local(1990, 0, 6)), "Saturday");
       
    33       assert.equal(f(local(1990, 0, 7)), "Sunday");
       
    34     },
       
    35     "formats abbreviated month": function(format) {
       
    36       var f = format("%b");
       
    37       assert.equal(f(local(1990, 0, 1)), "Jan");
       
    38       assert.equal(f(local(1990, 1, 1)), "Feb");
       
    39       assert.equal(f(local(1990, 2, 1)), "Mar");
       
    40       assert.equal(f(local(1990, 3, 1)), "Apr");
       
    41       assert.equal(f(local(1990, 4, 1)), "May");
       
    42       assert.equal(f(local(1990, 5, 1)), "Jun");
       
    43       assert.equal(f(local(1990, 6, 1)), "Jul");
       
    44       assert.equal(f(local(1990, 7, 1)), "Aug");
       
    45       assert.equal(f(local(1990, 8, 1)), "Sep");
       
    46       assert.equal(f(local(1990, 9, 1)), "Oct");
       
    47       assert.equal(f(local(1990, 10, 1)), "Nov");
       
    48       assert.equal(f(local(1990, 11, 1)), "Dec");
       
    49     },
       
    50     "formats locale date and time": function(format) {
       
    51       var f = format("%c");
       
    52       assert.equal(f(local(1990, 0, 1)), "Mon Jan  1 00:00:00 1990");
       
    53     },
       
    54     "formats zero-padded date": function(format) {
       
    55       var f = format("%d");
       
    56       assert.equal(f(local(1990, 0, 1)), "01");
       
    57     },
       
    58     "formats space-padded date": function(format) {
       
    59       var f = format("%e");
       
    60       assert.equal(f(local(1990, 0, 1)), " 1");
       
    61     },
       
    62     "formats zero-padded hour (24)": function(format) {
       
    63       var f = format("%H");
       
    64       assert.equal(f(local(1990, 0, 1, 0)), "00");
       
    65       assert.equal(f(local(1990, 0, 1, 13)), "13");
       
    66     },
       
    67     "formats zero-padded hour (12)": function(format) {
       
    68       var f = format("%I");
       
    69       assert.equal(f(local(1990, 0, 1, 0)), "12");
       
    70       assert.equal(f(local(1990, 0, 1, 13)), "01");
       
    71     },
       
    72     "formats zero-padded day of year": function(format) {
       
    73       var f = format("%j");
       
    74       assert.equal(f(local(1990, 0, 1)), "001");
       
    75       assert.equal(f(local(1990, 5, 1)), "152");
       
    76       assert.equal(f(local(2010, 2, 13)), "072");
       
    77       assert.equal(f(local(2010, 2, 14)), "073"); // DST begins
       
    78       assert.equal(f(local(2010, 2, 15)), "074");
       
    79       assert.equal(f(local(2010, 10, 6)), "310");
       
    80       assert.equal(f(local(2010, 10, 7)), "311"); // DST ends
       
    81       assert.equal(f(local(2010, 10, 8)), "312");
       
    82     },
       
    83     "formats zero-padded month": function(format) {
       
    84       var f = format("%m");
       
    85       assert.equal(f(local(1990, 0, 1)), "01");
       
    86       assert.equal(f(local(1990, 9, 1)), "10");
       
    87     },
       
    88     "formats zero-padded minute": function(format) {
       
    89       var f = format("%M");
       
    90       assert.equal(f(local(1990, 0, 1, 0, 0)), "00");
       
    91       assert.equal(f(local(1990, 0, 1, 0, 32)), "32");
       
    92     },
       
    93     "formats AM or PM": function(format) {
       
    94       var f = format("%p");
       
    95       assert.equal(f(local(1990, 0, 1, 0)), "AM");
       
    96       assert.equal(f(local(1990, 0, 1, 13)), "PM");
       
    97     },
       
    98     "formats zero-padded second": function(format) {
       
    99       var f = format("%S");
       
   100       assert.equal(f(local(1990, 0, 1, 0, 0, 0)), "00");
       
   101       assert.equal(f(local(1990, 0, 1, 0, 0, 32)), "32");
       
   102     },
       
   103     "formats zero-padded millisecond": function(format) {
       
   104       var f = format("%L");
       
   105       assert.equal(f(local(1990, 0, 1, 0, 0, 0, 0)), "000");
       
   106       assert.equal(f(local(1990, 0, 1, 0, 0, 0, 432)), "432");
       
   107     },
       
   108     "formats zero-padded week number": function(format) {
       
   109       var f = format("%U");
       
   110       assert.equal(f(local(1990, 0, 1)), "00");
       
   111       assert.equal(f(local(1990, 5, 1)), "21");
       
   112       assert.equal(f(local(2010, 2, 13, 23)), "10");
       
   113       assert.equal(f(local(2010, 2, 14, 00)), "11"); // DST begins
       
   114       assert.equal(f(local(2010, 2, 15, 00)), "11");
       
   115       assert.equal(f(local(2010, 10, 6, 23)), "44");
       
   116       assert.equal(f(local(2010, 10, 7, 00)), "45"); // DST ends
       
   117       assert.equal(f(local(2010, 10, 8, 00)), "45");
       
   118     },
       
   119     "formats locale date": function(format) {
       
   120       var f = format("%x");
       
   121       assert.equal(f(local(1990, 0, 1)), "01/01/90");
       
   122       assert.equal(f(local(2010, 5, 1)), "06/01/10");
       
   123     },
       
   124     "formats locale time": function(format) {
       
   125       var f = format("%X");
       
   126       assert.equal(f(local(1990, 0, 1)), "00:00:00");
       
   127       assert.equal(f(local(1990, 0, 1, 13, 34, 59)), "13:34:59");
       
   128     },
       
   129     "formats zero-padded two-digit year": function(format) {
       
   130       var f = format("%y");
       
   131       assert.equal(f(local(1990, 0, 1)), "90");
       
   132       assert.equal(f(local(2002, 0, 1)), "02");
       
   133     },
       
   134     "formats zero-padded four-digit year": function(format) {
       
   135       var f = format("%Y");
       
   136       assert.equal(f(local(123, 0, 1)), "0123");
       
   137       assert.equal(f(local(1990, 0, 1)), "1990");
       
   138       assert.equal(f(local(2002, 0, 1)), "2002");
       
   139       assert.equal(f(local(10002, 0, 1)), "0002");
       
   140     },
       
   141     "formats time zone": function(format) {
       
   142       var f = format("%Z");
       
   143       assert.equal(f(local(1990, 0, 1)), "-0800");
       
   144     },
       
   145     "formats literal percent sign": function(format) {
       
   146       var f = format("%%");
       
   147       assert.equal(f(local(1990, 0, 1)), "%");
       
   148     },
       
   149     "UTC": {
       
   150       topic: function(format) {
       
   151         return format.utc;
       
   152       },
       
   153       "formats abbreviated weekday": function(format) {
       
   154         var f = format("%a");
       
   155         assert.equal(f(utc(1990, 0, 1)), "Mon");
       
   156         assert.equal(f(utc(1990, 0, 2)), "Tue");
       
   157         assert.equal(f(utc(1990, 0, 3)), "Wed");
       
   158         assert.equal(f(utc(1990, 0, 4)), "Thu");
       
   159         assert.equal(f(utc(1990, 0, 5)), "Fri");
       
   160         assert.equal(f(utc(1990, 0, 6)), "Sat");
       
   161         assert.equal(f(utc(1990, 0, 7)), "Sun");
       
   162       },
       
   163       "formats weekday": function(format) {
       
   164         var f = format("%A");
       
   165         assert.equal(f(utc(1990, 0, 1)), "Monday");
       
   166         assert.equal(f(utc(1990, 0, 2)), "Tuesday");
       
   167         assert.equal(f(utc(1990, 0, 3)), "Wednesday");
       
   168         assert.equal(f(utc(1990, 0, 4)), "Thursday");
       
   169         assert.equal(f(utc(1990, 0, 5)), "Friday");
       
   170         assert.equal(f(utc(1990, 0, 6)), "Saturday");
       
   171         assert.equal(f(utc(1990, 0, 7)), "Sunday");
       
   172       },
       
   173       "formats abbreviated month": function(format) {
       
   174         var f = format("%b");
       
   175         assert.equal(f(utc(1990, 0, 1)), "Jan");
       
   176         assert.equal(f(utc(1990, 1, 1)), "Feb");
       
   177         assert.equal(f(utc(1990, 2, 1)), "Mar");
       
   178         assert.equal(f(utc(1990, 3, 1)), "Apr");
       
   179         assert.equal(f(utc(1990, 4, 1)), "May");
       
   180         assert.equal(f(utc(1990, 5, 1)), "Jun");
       
   181         assert.equal(f(utc(1990, 6, 1)), "Jul");
       
   182         assert.equal(f(utc(1990, 7, 1)), "Aug");
       
   183         assert.equal(f(utc(1990, 8, 1)), "Sep");
       
   184         assert.equal(f(utc(1990, 9, 1)), "Oct");
       
   185         assert.equal(f(utc(1990, 10, 1)), "Nov");
       
   186         assert.equal(f(utc(1990, 11, 1)), "Dec");
       
   187       },
       
   188       "formats locale date and time": function(format) {
       
   189         var f = format("%c");
       
   190         assert.equal(f(utc(1990, 0, 1)), "Mon Jan  1 00:00:00 1990");
       
   191       },
       
   192       "formats zero-padded date": function(format) {
       
   193         var f = format("%d");
       
   194         assert.equal(f(utc(1990, 0, 1)), "01");
       
   195       },
       
   196       "formats space-padded date": function(format) {
       
   197         var f = format("%e");
       
   198         assert.equal(f(utc(1990, 0, 1)), " 1");
       
   199       },
       
   200       "formats zero-padded hour (24)": function(format) {
       
   201         var f = format("%H");
       
   202         assert.equal(f(utc(1990, 0, 1, 0)), "00");
       
   203         assert.equal(f(utc(1990, 0, 1, 13)), "13");
       
   204       },
       
   205       "formats zero-padded hour (12)": function(format) {
       
   206         var f = format("%I");
       
   207         assert.equal(f(utc(1990, 0, 1, 0)), "12");
       
   208         assert.equal(f(utc(1990, 0, 1, 13)), "01");
       
   209       },
       
   210       "formats zero-padded day of year": function(format) {
       
   211         var f = format("%j");
       
   212         assert.equal(f(utc(1990, 0, 1)), "001");
       
   213         assert.equal(f(utc(1990, 5, 1)), "152");
       
   214         assert.equal(f(utc(2010, 2, 13, 23)), "072");
       
   215         assert.equal(f(utc(2010, 2, 14, 00)), "073"); // DST begins
       
   216         assert.equal(f(utc(2010, 2, 15, 00)), "074");
       
   217         assert.equal(f(utc(2010, 10, 6, 23)), "310");
       
   218         assert.equal(f(utc(2010, 10, 7, 00)), "311"); // DST ends
       
   219         assert.equal(f(utc(2010, 10, 8, 00)), "312");
       
   220       },
       
   221       "formats zero-padded month": function(format) {
       
   222         var f = format("%m");
       
   223         assert.equal(f(utc(1990, 0, 1)), "01");
       
   224         assert.equal(f(utc(1990, 9, 1)), "10");
       
   225       },
       
   226       "formats zero-padded minute": function(format) {
       
   227         var f = format("%M");
       
   228         assert.equal(f(utc(1990, 0, 1, 0, 0)), "00");
       
   229         assert.equal(f(utc(1990, 0, 1, 0, 32)), "32");
       
   230       },
       
   231       "formats AM or PM": function(format) {
       
   232         var f = format("%p");
       
   233         assert.equal(f(utc(1990, 0, 1, 0)), "AM");
       
   234         assert.equal(f(utc(1990, 0, 1, 13)), "PM");
       
   235       },
       
   236       "formats zero-padded second": function(format) {
       
   237         var f = format("%S");
       
   238         assert.equal(f(utc(1990, 0, 1, 0, 0, 0)), "00");
       
   239         assert.equal(f(utc(1990, 0, 1, 0, 0, 32)), "32");
       
   240       },
       
   241       "formats zero-padded millisecond": function(format) {
       
   242         var f = format("%L");
       
   243         assert.equal(f(utc(1990, 0, 1, 0, 0, 0, 0)), "000");
       
   244         assert.equal(f(utc(1990, 0, 1, 0, 0, 0, 432)), "432");
       
   245       },
       
   246       "formats zero-padded week number": function(format) {
       
   247         var f = format("%U");
       
   248         assert.equal(f(utc(1990, 0, 1)), "00");
       
   249         assert.equal(f(utc(1990, 5, 1)), "21");
       
   250         assert.equal(f(utc(2010, 2, 13, 23)), "10");
       
   251         assert.equal(f(utc(2010, 2, 14, 00)), "11"); // DST begins
       
   252         assert.equal(f(utc(2010, 2, 15, 00)), "11");
       
   253         assert.equal(f(utc(2010, 10, 6, 23)), "44");
       
   254         assert.equal(f(utc(2010, 10, 7, 00)), "45"); // DST ends
       
   255         assert.equal(f(utc(2010, 10, 8, 00)), "45");
       
   256       },
       
   257       "formats locale date": function(format) {
       
   258         var f = format("%x");
       
   259         assert.equal(f(utc(1990, 0, 1)), "01/01/90");
       
   260         assert.equal(f(utc(2010, 5, 1)), "06/01/10");
       
   261       },
       
   262       "formats locale time": function(format) {
       
   263         var f = format("%X");
       
   264         assert.equal(f(utc(1990, 0, 1)), "00:00:00");
       
   265         assert.equal(f(utc(1990, 0, 1, 13, 34, 59)), "13:34:59");
       
   266       },
       
   267       "formats zero-padded two-digit year": function(format) {
       
   268         var f = format("%y");
       
   269         assert.equal(f(utc(1990, 0, 1)), "90");
       
   270         assert.equal(f(utc(2002, 0, 1)), "02");
       
   271       },
       
   272       "formats zero-padded four-digit year": function(format) {
       
   273         var f = format("%Y");
       
   274         assert.equal(f(utc(123, 0, 1)), "0123");
       
   275         assert.equal(f(utc(1990, 0, 1)), "1990");
       
   276         assert.equal(f(utc(2002, 0, 1)), "2002");
       
   277         assert.equal(f(utc(10002, 0, 1)), "0002");
       
   278       },
       
   279       "formats time zone": function(format) {
       
   280         var f = format("%Z");
       
   281         assert.equal(f(utc(1990, 0, 1)), "+0000");
       
   282       },
       
   283       "formats literal percent sign": function(format) {
       
   284         var f = format("%%");
       
   285         assert.equal(f(utc(1990, 0, 1)), "%");
       
   286       },
       
   287     },
       
   288     "ISO": {
       
   289       topic: function(format) {
       
   290         return format.iso;
       
   291       },
       
   292       "toString is %Y-%m-%dT%H:%M:%S.%LZ": function(format) {
       
   293         assert.equal(format + "", "%Y-%m-%dT%H:%M:%S.%LZ");
       
   294       },
       
   295       "formats as ISO 8601": function(format) {
       
   296         assert.equal(format(utc(1990, 0, 1, 0, 0, 0)), "1990-01-01T00:00:00.000Z");
       
   297         assert.equal(format(utc(2011, 11, 31, 23, 59, 59)), "2011-12-31T23:59:59.000Z");
       
   298       }
       
   299     }
       
   300   },
       
   301   "parse": {
       
   302     topic: function() {
       
   303       return d3.time.format;
       
   304     },
       
   305     "parses abbreviated weekday and numeric date": function(format) {
       
   306       var p = format("%a %m/%d/%Y").parse;
       
   307       assert.deepEqual(p("Sun 01/01/1990"), local(1990, 0, 1));
       
   308       assert.deepEqual(p("Wed 02/03/1991"), local(1991, 1, 3));
       
   309       assert.isNull(p("XXX 03/10/2010"));
       
   310     },
       
   311     "parses weekday and numeric date": function(format) {
       
   312       var p = format("%A %m/%d/%Y").parse;
       
   313       assert.deepEqual(p("Sunday 01/01/1990"), local(1990, 0, 1));
       
   314       assert.deepEqual(p("Wednesday 02/03/1991"), local(1991, 1, 3));
       
   315       assert.isNull(p("Caturday 03/10/2010"));
       
   316     },
       
   317     "parses numeric date": function(format) {
       
   318       var p = format("%m/%d/%y").parse;
       
   319       assert.deepEqual(p("01/01/90"), local(2090, 0, 1));
       
   320       assert.deepEqual(p("02/03/91"), local(2091, 1, 3));
       
   321       assert.isNull(p("03/10/2010"));
       
   322     },
       
   323     "parses locale date": function(format) {
       
   324       var p = format("%x").parse;
       
   325       assert.deepEqual(p("01/01/90"), local(2090, 0, 1));
       
   326       assert.deepEqual(p("02/03/91"), local(2091, 1, 3));
       
   327       assert.isNull(p("03/10/2010"));
       
   328     },
       
   329     "parses abbreviated month, date and year": function(format) {
       
   330       var p = format("%b %d, %Y").parse;
       
   331       assert.deepEqual(p("jan 01, 1990"), local(1990, 0, 1));
       
   332       assert.deepEqual(p("feb  2, 2010"), local(2010, 1, 2));
       
   333       assert.isNull(p("jan. 1, 1990"));
       
   334     },
       
   335     "parses month, date and year": function(format) {
       
   336       var p = format("%B %d, %Y").parse;
       
   337       assert.deepEqual(p("january 01, 1990"), local(1990, 0, 1));
       
   338       assert.deepEqual(p("February  2, 2010"), local(2010, 1, 2));
       
   339       assert.isNull(p("jan 1, 1990"));
       
   340     },
       
   341     "parses locale date and time": function(format) {
       
   342       var p = format("%c").parse;
       
   343       assert.deepEqual(p("Mon Jan  1 00:00:00 1990"), local(1990, 0, 1));
       
   344       assert.deepEqual(p("Sun Jan  1 00:00:00 1990"), local(1990, 0, 1));
       
   345       assert.deepEqual(p("Mon Jan 01 00:00:00 1990"), local(1990, 0, 1));
       
   346       assert.deepEqual(p("Mon Jan 1 00:00:00 1990"), local(1990, 0, 1));
       
   347       assert.deepEqual(p("Mon Jan 1 0:0:0 1990"), local(1990, 0, 1));
       
   348     },
       
   349     "parses twenty-four hour, minute and second": function(format) {
       
   350       var p = format("%H:%M:%S").parse;
       
   351       assert.deepEqual(p("00:00:00"), local(1900, 0, 1, 0, 0, 0));
       
   352       assert.deepEqual(p("11:59:59"), local(1900, 0, 1, 11, 59, 59));
       
   353       assert.deepEqual(p("12:00:00"), local(1900, 0, 1, 12, 0, 0));
       
   354       assert.deepEqual(p("12:00:01"), local(1900, 0, 1, 12, 0, 1));
       
   355       assert.deepEqual(p("23:59:59"), local(1900, 0, 1, 23, 59, 59));
       
   356     },
       
   357     "parses locale time": function(format) {
       
   358       var p = format("%X").parse;
       
   359       assert.deepEqual(p("00:00:00"), local(1900, 0, 1, 0, 0, 0));
       
   360       assert.deepEqual(p("11:59:59"), local(1900, 0, 1, 11, 59, 59));
       
   361       assert.deepEqual(p("12:00:00"), local(1900, 0, 1, 12, 0, 0));
       
   362       assert.deepEqual(p("12:00:01"), local(1900, 0, 1, 12, 0, 1));
       
   363       assert.deepEqual(p("23:59:59"), local(1900, 0, 1, 23, 59, 59));
       
   364     },
       
   365     "parses twelve hour, minute and second": function(format) {
       
   366       var p = format("%I:%M:%S %p").parse;
       
   367       assert.deepEqual(p("12:00:00 am"), local(1900, 0, 1, 0, 0, 0));
       
   368       assert.deepEqual(p("11:59:59 AM"), local(1900, 0, 1, 11, 59, 59));
       
   369       assert.deepEqual(p("12:00:00 pm"), local(1900, 0, 1, 12, 0, 0));
       
   370       assert.deepEqual(p("12:00:01 pm"), local(1900, 0, 1, 12, 0, 1));
       
   371       assert.deepEqual(p("11:59:59 PM"), local(1900, 0, 1, 23, 59, 59));
       
   372     },
       
   373     "UTC": {
       
   374       topic: function(format) {
       
   375         return format.utc;
       
   376       },
       
   377       "parses abbreviated weekday and numeric date": function(format) {
       
   378         var p = format("%a %m/%d/%Y").parse;
       
   379         assert.deepEqual(p("Sun 01/01/1990"), utc(1990, 0, 1));
       
   380         assert.deepEqual(p("Wed 02/03/1991"), utc(1991, 1, 3));
       
   381         assert.isNull(p("XXX 03/10/2010"));
       
   382       },
       
   383       "parses weekday and numeric date": function(format) {
       
   384         var p = format("%A %m/%d/%Y").parse;
       
   385         assert.deepEqual(p("Sunday 01/01/1990"), utc(1990, 0, 1));
       
   386         assert.deepEqual(p("Wednesday 02/03/1991"), utc(1991, 1, 3));
       
   387         assert.isNull(p("Caturday 03/10/2010"));
       
   388       },
       
   389       "parses numeric date": function(format) {
       
   390         var p = format("%m/%d/%y").parse;
       
   391         assert.deepEqual(p("01/01/90"), utc(2090, 0, 1));
       
   392         assert.deepEqual(p("02/03/91"), utc(2091, 1, 3));
       
   393         assert.isNull(p("03/10/2010"));
       
   394       },
       
   395       "parses locale date": function(format) {
       
   396         var p = format("%x").parse;
       
   397         assert.deepEqual(p("01/01/90"), utc(2090, 0, 1));
       
   398         assert.deepEqual(p("02/03/91"), utc(2091, 1, 3));
       
   399         assert.isNull(p("03/10/2010"));
       
   400       },
       
   401       "parses abbreviated month, date and year": function(format) {
       
   402         var p = format("%b %d, %Y").parse;
       
   403         assert.deepEqual(p("jan 01, 1990"), utc(1990, 0, 1));
       
   404         assert.deepEqual(p("feb  2, 2010"), utc(2010, 1, 2));
       
   405         assert.isNull(p("jan. 1, 1990"));
       
   406       },
       
   407       "parses month, date and year": function(format) {
       
   408         var p = format("%B %d, %Y").parse;
       
   409         assert.deepEqual(p("january 01, 1990"), utc(1990, 0, 1));
       
   410         assert.deepEqual(p("February  2, 2010"), utc(2010, 1, 2));
       
   411         assert.isNull(p("jan 1, 1990"));
       
   412       },
       
   413       "parses locale date and time": function(format) {
       
   414         var p = format("%c").parse;
       
   415         assert.deepEqual(p("Mon Jan  1 00:00:00 1990"), utc(1990, 0, 1));
       
   416         assert.deepEqual(p("Sun Jan  1 00:00:00 1990"), utc(1990, 0, 1));
       
   417         assert.deepEqual(p("Mon Jan 01 00:00:00 1990"), utc(1990, 0, 1));
       
   418         assert.deepEqual(p("Mon Jan 1 00:00:00 1990"), utc(1990, 0, 1));
       
   419         assert.deepEqual(p("Mon Jan 1 0:0:0 1990"), utc(1990, 0, 1));
       
   420       },
       
   421       "parses twenty-four hour, minute and second": function(format) {
       
   422         var p = format("%H:%M:%S").parse;
       
   423         assert.deepEqual(p("00:00:00"), utc(1900, 0, 1, 0, 0, 0));
       
   424         assert.deepEqual(p("11:59:59"), utc(1900, 0, 1, 11, 59, 59));
       
   425         assert.deepEqual(p("12:00:00"), utc(1900, 0, 1, 12, 0, 0));
       
   426         assert.deepEqual(p("12:00:01"), utc(1900, 0, 1, 12, 0, 1));
       
   427         assert.deepEqual(p("23:59:59"), utc(1900, 0, 1, 23, 59, 59));
       
   428       },
       
   429       "parses locale time": function(format) {
       
   430         var p = format("%X").parse;
       
   431         assert.deepEqual(p("00:00:00"), utc(1900, 0, 1, 0, 0, 0));
       
   432         assert.deepEqual(p("11:59:59"), utc(1900, 0, 1, 11, 59, 59));
       
   433         assert.deepEqual(p("12:00:00"), utc(1900, 0, 1, 12, 0, 0));
       
   434         assert.deepEqual(p("12:00:01"), utc(1900, 0, 1, 12, 0, 1));
       
   435         assert.deepEqual(p("23:59:59"), utc(1900, 0, 1, 23, 59, 59));
       
   436       },
       
   437       "parses twelve hour, minute and second": function(format) {
       
   438         var p = format("%I:%M:%S %p").parse;
       
   439         assert.deepEqual(p("12:00:00 am"), utc(1900, 0, 1, 0, 0, 0));
       
   440         assert.deepEqual(p("11:59:59 AM"), utc(1900, 0, 1, 11, 59, 59));
       
   441         assert.deepEqual(p("12:00:00 pm"), utc(1900, 0, 1, 12, 0, 0));
       
   442         assert.deepEqual(p("12:00:01 pm"), utc(1900, 0, 1, 12, 0, 1));
       
   443         assert.deepEqual(p("11:59:59 PM"), utc(1900, 0, 1, 23, 59, 59));
       
   444       }
       
   445     },
       
   446     "ISO": {
       
   447       topic: function(format) {
       
   448         return format.iso;
       
   449       },
       
   450       "parses as ISO 8601": function(format) {
       
   451         var p = format.parse;
       
   452         assert.deepEqual(p("1990-01-01T00:00:00.000Z"), utc(1990, 0, 1, 0, 0, 0));
       
   453         assert.deepEqual(p("2011-12-31T23:59:59.000Z"), utc(2011, 11, 31, 23, 59, 59));
       
   454       }
       
   455     }
       
   456   }
       
   457 });
       
   458 
       
   459 function local(year, month, day, hours, minutes, seconds, milliseconds) {
       
   460   return new Date(year, month, day, hours || 0, minutes || 0, seconds || 0, milliseconds || 0);
       
   461 }
       
   462 
       
   463 function utc(year, month, day, hours, minutes, seconds, milliseconds) {
       
   464   return new Date(Date.UTC(year, month, day, hours || 0, minutes || 0, seconds || 0, milliseconds || 0));
       
   465 }
       
   466 
       
   467 suite.export(module);