nashorn/test/script/basic/NASHORN-627.js
changeset 31503 1f5244fe53ab
parent 31502 f0d057d75897
parent 31499 fae46850f641
child 31508 3c15616b82c2
equal deleted inserted replaced
31502:f0d057d75897 31503:1f5244fe53ab
     1 /*
       
     2  * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    13  * accompanied this code).
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License version
       
    16  * 2 along with this work; if not, write to the Free Software Foundation,
       
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18  *
       
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20  * or visit www.oracle.com if you need additional information or have any
       
    21  * questions.
       
    22  */
       
    23 
       
    24 /**
       
    25  * NASHORN-627 : Make NativeDate fully ECMA compliant
       
    26  *
       
    27  * @test
       
    28  * @option -timezone=Europe/Vienna
       
    29  * @run
       
    30  */
       
    31 
       
    32 // constructor, toString, getTime, toISOString. EXPECTED is from spidermonkey
       
    33 function printDate(d) {
       
    34     print(d, d.getTime(), d.toISOString());
       
    35 }
       
    36 for (var i = -10; i < 380; i++) {
       
    37     printDate(new Date(70, 0, i));
       
    38 }
       
    39 for (var i = -10; i < 380; i++) {
       
    40     printDate(new Date(2011, 0, i, 17, 0, 59));
       
    41 }
       
    42 for (var i = -10; i < 380; i++) {
       
    43     printDate(new Date(2012, 0, i, 12, 30, 10, 500));
       
    44 }
       
    45 
       
    46 [
       
    47     '2012-03-01 09:00',
       
    48     '2012-03-01 08:00 +0000',
       
    49     '2012/03/01 08:00 GMT+0000',
       
    50     '03/01/2012, 08:00 AM UT',
       
    51     '01 March 12 08:00 +0000',
       
    52     'Mar 01 08:00:00 UT 2012',
       
    53     'Sat, 01-Mar-2012 08:00:00 UT',
       
    54     'Sat, 01 Mar 2012 08:00:00 UT',
       
    55     'Mar 01 2012 08:00:00 UT',
       
    56     'Saturday, 01-Mar-2012 08:00:00 UT',
       
    57     '01 Mar 2012 08:00 +0000',
       
    58 
       
    59     'Sat, 01-Mar-2012 03:00:00 EST',
       
    60     'Sat, 01 Mar 2012 03:00:00 EST',
       
    61     'Mar 01 2012 03:00:00 EST',
       
    62     'Saturday, 01-Mar-2012 03:00:00 EST',
       
    63     '01 Mar 2012 03:00 -0500',
       
    64 
       
    65     'Sat, 01-Mar-2012 04:00:00 EDT',
       
    66     'Sat, 01 Mar 2012 04:00:00 EDT',
       
    67     'Mar 01 2012 04:00:00 EDT',
       
    68     'Saturday, 01-Mar-2012 04:00:00 EDT',
       
    69     '01 Mar 2012 04:00 -0400',
       
    70 
       
    71     'Sat, 01-Mar-2012 02:00:00 CST',
       
    72     'Sat, 01 Mar 2012 02:00:00 CST',
       
    73     'Mar 01 2012 02:00:00 CST',
       
    74     'Saturday, 01-Mar-2012 02:00:00 CST',
       
    75     '01 Mar 2012 02:00 -0600',
       
    76 
       
    77     'Sat, 01-Mar-2012 03:00:00 CDT',
       
    78     'Sat, 01 Mar 2012 03:00:00 CDT',
       
    79     'Mar 01 2012 03:00:00 CDT',
       
    80     'Saturday, 01-Mar-2012 03:00:00 CDT',
       
    81     '01 Mar 2012 03:00 -0500',
       
    82 
       
    83     'Sat, 01-Mar-2012 01:00:00 MST',
       
    84     'Sat, 01 Mar 2012 01:00:00 MST',
       
    85     'Mar 01 2012 01:00:00 MST',
       
    86     'Saturday, 01-Mar-2012 01:00:00 MST',
       
    87     '01 Mar 2012 01:00 -0700',
       
    88 
       
    89     'Sat, 01-Mar-2012 02:00:00 MDT',
       
    90     'Sat, 01 Mar 2012 02:00:00 MDT',
       
    91     'Mar 01 2012 02:00:00 MDT',
       
    92     'Saturday, 01-Mar-2012 02:00:00 MDT',
       
    93     '01 Mar 2012 02:00 -0600',
       
    94 
       
    95     'Sat, 01-Mar-2012 00:00:00 PST',
       
    96     'Sat, 01 Mar 2012 00:00:00 PST',
       
    97     'Mar 01 2012 00:00:00 PST',
       
    98     'Saturday, 01-Mar-2012 00:00:00 PST',
       
    99     '01 Mar 2012 00:00 -0800',
       
   100 
       
   101     'Sat, 01-Mar-2012 01:00:00 PDT',
       
   102     'Sat, 01 Mar 2012 01:00:00 PDT',
       
   103     'Mar 01 2012 01:00:00 PDT',
       
   104     'Saturday, 01-Mar-2012 01:00:00 PDT',
       
   105     '01 Mar 2012 01:00 -0700'
       
   106 ].forEach(function(s) {
       
   107     parseDate(s, 1330588800000);
       
   108 });
       
   109 
       
   110 [
       
   111     '2012-01-01T08:00:00.000Z',
       
   112     '2012-01-01T08:00:00Z',
       
   113     '2012-01-01T08:00Z',
       
   114     '2012-01T08:00:00.000Z',
       
   115     '2012T08:00:00.000Z',
       
   116     '2012T08:00Z',
       
   117     '2012-01T00:00:00.000-08:00',
       
   118     '2012-01T00:00:00.000-08:00'
       
   119 ].forEach(function(s) {
       
   120     parseDate(s, 1325404800000);
       
   121 });
       
   122 
       
   123 [
       
   124     'Mon, 25 Dec 1995 13:30:00 GMT+0430',
       
   125     '1995/12/25 13:30 GMT+0430',
       
   126     '12/25/1995, 01:30 PM +04:30',
       
   127     'Dec 25 1995 13:30:00 +0430'
       
   128 ].forEach(function(s) {
       
   129     parseDate(s, 819882000000);
       
   130 });
       
   131 
       
   132 // invalid iso dates
       
   133 [
       
   134     '2000-01-01TZ',
       
   135     '2000-01-01T60Z',
       
   136     '2000-01-01T60:60Z',
       
   137     '2000-01-0108:00Z',
       
   138     '2000-01-01T08Z'
       
   139 ].forEach(function(s) {
       
   140         parseDate(s, NaN);
       
   141     });
       
   142 
       
   143 // milliseconds
       
   144 parseDate('2012-01T08:00:00.001Z', 1325404800001);
       
   145 parseDate('2012-01T08:00:00.099Z', 1325404800099);
       
   146 parseDate('2012-01T08:00:00.999Z', 1325404800999);
       
   147 
       
   148 function parseDate(s, t) {
       
   149     var d = new Date(s.toString());
       
   150     if (d.getTime() == t || (isNaN(d.getTime() && isNaN(t)))) {
       
   151         print('ok', d);
       
   152     } else {
       
   153         print('expected', t, 'got', d.getTime());
       
   154     }
       
   155 }