11510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
21510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
31510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//
41510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// Redistribution and use in source and binary forms, with or without
51510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// modification, are permitted provided that the following conditions
61510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// are met:
71510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// 1.  Redistributions of source code must retain the above copyright
81510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     notice, this list of conditions and the following disclaimer.
91510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// 2.  Redistributions in binary form must reproduce the above copyright
101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     notice, this list of conditions and the following disclaimer in the
111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//     documentation and/or other materials provided with the distribution.
121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org//
131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgdescription(
251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org"This tests if the Date setters handle invalid parameters correctly resulting in a NaN date and if a recovery from such a NaN date is only possible by using the date.setTime() and date.set[[UTC]Full]Year() functions."
261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org);
271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar dateFunctionNameRoots = [
291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "Time",
301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "Milliseconds",
311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "UTCMilliseconds",
321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "Seconds",
331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "UTCSeconds",
341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "Minutes",
351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "UTCMinutes",
361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "Hours",
371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "UTCHours",
381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "Date",
391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "UTCDate",
401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "Month",
411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "UTCMonth",
421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "FullYear",
431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "UTCFullYear",
441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    "Year"
451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org];
461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar dateFunctionParameterNum = [
481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    1,
491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    1,
501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    1,
511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    2,
521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    2,
531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    3,
541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    3,
551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    4,
561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    4,
571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    1,
581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    1,
591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    2,
601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    2,
611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    3,
621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    3,
631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    1
641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org];
651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgvar testValues = [
671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    0,
681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    Number.NaN,
691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    Number.POSITIVE_INFINITY,
701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    Number.NEGATIVE_INFINITY
711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org];
721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction testDateFunctionWithValueNoRecoverNaN(functionNameRoot, steps)
741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var date = new Date();
761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var setValue = date["get" + functionNameRoot]();
771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    date.setMilliseconds(Number.NaN);
781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var params = [
791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        "",
801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        ", 0",
811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        ", 0, 0",
821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        ", 0, 0, 0"
831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    ];
841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var setResult = (1 == steps) ?  date["set" + functionNameRoot](setValue)
851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                  : ((2 == steps) ? date["set" + functionNameRoot](setValue, 0)
861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                  : ((3 == steps) ? date["set" + functionNameRoot](setValue, 0, 0)
871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                  :                  date["set" + functionNameRoot](setValue, 0, 0, 0)));
881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (!isNaN(setResult)) {
891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date(NaN).set" + functionNameRoot + "(" + setValue + params[steps - 1]
901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                   + ") was " + setResult + " instead of NaN");
911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        return false;
921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var getResult = date["get" + functionNameRoot]();
941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (!isNaN(getResult)) {
951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of NaN");
961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        return false;
971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    testPassed ("no recovering from NaN date using date.set" + functionNameRoot
991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        + "(arg0" + params[steps - 1] + ")");
1001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return true;
1011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
1021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction testDateFunctionWithValueRecoverTime(functionNameRoot)
1041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
1051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var date = new Date();
1061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var setValue = date["get" + functionNameRoot]();
1071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    date.setMilliseconds(Number.NaN);
1081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var setResult = date["set" + functionNameRoot](setValue);
1091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (setValue != setResult) {
1101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date(NaN).set" + functionNameRoot + "(" + setValue + ") was " + setResult + " instead of " + setValue);
1111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        return false;
1121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var getResult = date["get" + functionNameRoot]();
1141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != setValue) {
1151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
1161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        return false;
1171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    testPassed ("recover from NaN date using date.set" + functionNameRoot + "()");
1191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return true;
1201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
1211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction testDateFunctionWithValueRecoverFullYear(functionNameRoot)
1231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
1241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var result = true;
1251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var date = new Date();
1261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var setValue = date["get" + functionNameRoot]();
1271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    date.setMilliseconds(Number.NaN);
1281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var setResult = date["set" + functionNameRoot](setValue);
1291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var getResult = date["get" + functionNameRoot]();
1301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != setValue) {
1311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
1321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
1331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getMilliseconds();
1351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
1361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getMilliseconds() was " + getResult + " instead of 0");
1371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
1381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getSeconds();
1401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
1411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getSeconds() was " + getResult + " instead of 0");
1421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
1431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getMinutes();
1451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
1461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getMinutes() was " + getResult + " instead of 0");
1471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
1481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getHours();
1501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
1511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getHours() was " + getResult + " instead of 0");
1521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
1531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getDate();
1551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 1) {
1561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getDate() was " + getResult + " instead of 1");
1571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
1581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getMonth();
1601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
1611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getMonth() was " + getResult + " instead of 0");
1621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
1631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (result)
1651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testPassed ("recover from NaN date using date.setFullYear()");
1661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    else
1671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed ("recover from NaN date using date.setFullYear()");
1681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return result;
1691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
1701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
1711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction testDateFunctionWithValueRecoverUTCFullYear(functionNameRoot)
1721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
1731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var result = true;
1741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var date = new Date();
1751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var setValue = date["get" + functionNameRoot]();
1761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    date.setMilliseconds(Number.NaN);
1771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var setResult = date["set" + functionNameRoot](setValue);
1781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var getResult = date["get" + functionNameRoot]();
1791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != setValue) {
1801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
1811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
1821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getUTCMilliseconds();
1841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
1851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getUTCMilliseconds() was " + getResult + " instead of 0");
1861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
1871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getUTCSeconds();
1891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
1901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getUTCSeconds() was " + getResult + " instead of 0");
1911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
1921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getUTCMinutes();
1941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
1951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getUTCMinutes() was " + getResult + " instead of 0");
1961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
1971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
1981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getUTCHours();
1991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
2001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getUTCHours() was " + getResult + " instead of 0");
2011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
2021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getUTCDate();
2041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 1) {
2051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getUTCDate() was " + getResult + " instead of 1");
2061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
2071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getUTCMonth();
2091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
2101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getUTCMonth() was " + getResult + " instead of 0");
2111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
2121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (result)
2141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testPassed ("recover from NaN date using date.setUTCFullYear()");
2151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    else
2161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed ("recover from NaN date using date.setUTCFullYear()");
2171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return result;
2181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
2191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction testDateFunctionWithValueRecoverYear(functionNameRoot)
2211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
2221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var result = true;
2231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var is13Compatible = true;
2241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var date = new Date();
2261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var setValue = date["get" + functionNameRoot]();
2271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var fullYears = date.getFullYear() - 1900;
2281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (setValue != fullYears) {
2291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.get" + functionNameRoot + "() was " + setValue + " instead of " + fullYears);
2301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        is13Compatible = false;
2311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    } else
2321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testPassed("date.getYear() is compatible to JavaScript 1.3 and later");
2331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    date.setMilliseconds(Number.NaN);
2351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var setResult = date["set" + functionNameRoot](setValue + 1900);
2361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var getResult = date["get" + functionNameRoot]();
2371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != setValue) {
2381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.get" + functionNameRoot + "() was " + getResult + " instead of " + setValue);
2391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
2401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getMilliseconds();
2421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
2431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getMilliseconds() was " + getResult + " instead of 0");
2441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
2451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getSeconds();
2471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
2481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getSeconds() was " + getResult + " instead of 0");
2491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
2501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getMinutes();
2521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
2531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getMinutes() was " + getResult + " instead of 0");
2541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
2551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getHours();
2571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
2581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getHours() was " + getResult + " instead of 0");
2591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
2601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getDate();
2621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 1) {
2631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getDate() was " + getResult + " instead of 1");
2641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
2651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    getResult = date.getMonth();
2671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (getResult != 0) {
2681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.getMonth() was " + getResult + " instead of 0");
2691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        result = false;
2701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (result)
2721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testPassed ("recover from NaN date using date.setUTCFullYear()");
2731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    else
2741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed ("recover from NaN date using date.setUTCFullYear()");
2751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return result && is13Compatible;
2761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
2771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction makeIEHappy(functionNameRoot, value)
2791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
2801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var date = new Date();
2811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var setResult = date["set" + functionNameRoot](value);
2821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (!isNaN(setResult)) {
2831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.set" + functionNameRoot
2841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                              + "() was "
2851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                              + setResult + " instead of NaN");
2861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org         return false;
2871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var getResult = date["get" + functionNameRoot]();
2891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (!isNaN(getResult)) {
2901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testFailed("date.get" + functionNameRoot + "() was "
2911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                              + getResult + " instead of NaN");
2921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        return false;
2931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
2941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return true
2951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
2961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
2971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction testDateFunctionWithValueExpectingNaN1(functionNameRoot)
2981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
2991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var result = true;
3001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    for (var idx0 in testValues)
3011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        if (idx0 != 0) {
3021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            var date = new Date();
3031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            var setResult = date["set" + functionNameRoot](testValues[idx0]);
3041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            if (!isNaN(setResult)) {
3051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                testFailed("date.set" + functionNameRoot + "("
3061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                      + testValues[idx0] + ") was "
3071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                      + setResult + " instead of NaN");
3081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                result = false;
3091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            }
3101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            var getResult = date["get" + functionNameRoot]();
3111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            if (!isNaN(getResult)) {
3121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                testFailed("date.get" + functionNameRoot + "() was "
3131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                      + getResult + " instead of NaN");
3141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                result = false;
3151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            }
3161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        } else if (!makeIEHappy(functionNameRoot))
3171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            result = false;
3181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (result) {
3191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testPassed("date.set" + functionNameRoot + "(arg0)");
3201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testPassed("date.set" + functionNameRoot + "()");
3211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
3221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return result;
3231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
3241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction testDateFunctionWithValueExpectingNaN2(functionNameRoot)
3261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
3271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var result = true;
3281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    for (var idx0 in testValues)
3291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        for (var idx1 in testValues)
3301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            if (idx0 != 0 || idx1 != 0) {
3311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                var date = new Date();
3321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                var setResult = date["set" + functionNameRoot](testValues[idx0],
3331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                               testValues[idx1]);
3341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                if (!isNaN(setResult)) {
3361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    testFailed("date.set" + functionNameRoot + "("
3371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                          + testValues[idx0] + ", "
3381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                          + testValues[idx1] + ") was "
3391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                          + setResult + " instead of NaN");
3401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    result = false;
3411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                }
3421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                var getResult = date["get" + functionNameRoot]();
3431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                if (!isNaN(getResult)) {
3441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    testFailed("date.get" + functionNameRoot + "() was "
3451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                          + getResult + " instead of NaN");
3461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    result = false;
3471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                }
3481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            }
3491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (result)
3511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testPassed("date.set" + functionNameRoot + "(arg0, arg1)");
3521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return result;
3531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
3541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction testDateFunctionWithValueExpectingNaN3(functionNameRoot)
3561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
3571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var result = true;
3581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    for (var idx0 in testValues)
3591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        for (var idx1 in testValues)
3601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            for (var idx2 in testValues)
3611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                if (idx0 != 0 || idx1 != 0 || idx2 != 0) {
3621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    var date = new Date();
3631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    var setResult = date["set" + functionNameRoot](testValues[idx0],
3641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                                   testValues[idx1],
3651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                                   testValues[idx2]);
3661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    if (!isNaN(setResult)) {
3671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                        testFailed("date.set" + functionNameRoot + "("
3681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                              + testValues[idx0] + ", "
3691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                              + testValues[idx1] + ", "
3701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                              + testValues[idx2] + ") was "
3711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                              + setResult + " instead of NaN");
3721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                        result = false;
3731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    }
3741510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    var getResult = date["get" + functionNameRoot]();
3751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    if (!isNaN(getResult)) {
3761510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                        testFailed("date.get" + functionNameRoot + "() was "
3771510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                              + getResult + " instead of NaN");
3781510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                        result = false;
3791510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    }
3801510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                }
3811510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (result)
3831510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testPassed("date.set" + functionNameRoot + "(arg0, arg1, arg2)");
3841510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return result;
3851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
3861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
3871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction testDateFunctionWithValueExpectingNaN4(functionNameRoot)
3881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
3891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var result = true;
3901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    for (var idx0 in testValues)
3911510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        for (var idx1 in testValues)
3921510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            for (var idx2 in testValues)
3931510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                for (var idx3 in testValues)
3941510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    if (idx0 != 0 || idx1 != 0 || idx2 != 0 || idx3 != 0) {
3951510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                        var date = new Date();
3961510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                        var setResult = date["set" + functionNameRoot](testValues[idx0],
3971510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                                       testValues[idx1],
3981510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                                       testValues[idx2],
3991510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                                       testValues[idx3]);
4001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                        if (!isNaN(setResult)) {
4011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                            testFailed("date.set" + functionNameRoot + "("
4021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                  + testValues[idx0] + ", "
4031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                  + testValues[idx1] + ", "
4041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                  + testValues[idx2] + ", "
4051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                  + testValues[idx3] + ") was "
4061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                  + setResult + " instead of NaN");
4071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                            result = false;
4081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                        }
4091510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                        var getResult = date["get" + functionNameRoot]();
4101510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                        if (!isNaN(getResult)) {
4111510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                            testFailed("date.get" + functionNameRoot + "() was "
4121510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                                                  + getResult + " instead of NaN");
4131510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                            result = false;
4141510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                        }
4151510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org                    }
4161510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (result)
4171510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testPassed("date.set" + functionNameRoot + "(arg0, arg1, arg2, arg3)");
4181510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    return result;
4191510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
4201510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
4211510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
4221510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
4231510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfunction testDateFunction(functionNameRoot, functionParamNum)
4241510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
4251510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    var success = true;
4261510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
4271510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    switch (functionParamNum) {
4281510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case 4:
4291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        success &= testDateFunctionWithValueExpectingNaN4(functionNameRoot);
4301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        if (functionNameRoot != "Time" &&
4311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            functionNameRoot != "FullYear" &&
4321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            functionNameRoot != "UTCFullYear" &&
4331510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            functionNameRoot != "Year")
4341510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 4);
4351510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
4361510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case 3:
4371510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        success &= testDateFunctionWithValueExpectingNaN3(functionNameRoot);
4381510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        if (functionNameRoot != "Time" &&
4391510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            functionNameRoot != "FullYear" &&
4401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            functionNameRoot != "UTCFullYear" &&
4411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            functionNameRoot != "Year")
4421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 3);
4431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
4441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case 2:
4451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        success &= testDateFunctionWithValueExpectingNaN2(functionNameRoot);
4461510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        if (functionNameRoot != "Time" &&
4471510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            functionNameRoot != "FullYear" &&
4481510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            functionNameRoot != "UTCFullYear" &&
4491510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            functionNameRoot != "Year")
4501510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 2);
4511510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
4521510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    case 1:
4531510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        success &= testDateFunctionWithValueExpectingNaN1(functionNameRoot);
4541510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        if (functionNameRoot == "Time")
4551510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            success &= testDateFunctionWithValueRecoverTime(functionNameRoot);
4561510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        else if (functionNameRoot == "FullYear")
4571510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            success &= testDateFunctionWithValueRecoverFullYear(functionNameRoot);
4581510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        else if (functionNameRoot == "UTCFullYear")
4591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            success &= testDateFunctionWithValueRecoverUTCFullYear(functionNameRoot);
4601510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        else if (functionNameRoot == "Year")
4611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            success &= testDateFunctionWithValueRecoverYear(functionNameRoot);
4621510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        else
4631510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org            success &= testDateFunctionWithValueNoRecoverNaN(functionNameRoot, 1);
4641510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    }
4651510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
4661510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    if (success)
4671510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org        testPassed("date.set" + functionNameRoot + " passed all tests");
4681510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
4691510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org
4701510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgfor (var x in dateFunctionNameRoots)
4711510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org{
4721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org    testDateFunction(dateFunctionNameRoots[x], dateFunctionParameterNum[x]);
4731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org}
474