18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* The contents of this file are subject to the Netscape Public
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License Version 1.1 (the "License"); you may not use this file
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * except in compliance with the License. You may obtain a copy of
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the License at http://www.mozilla.org/NPL/
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Software distributed under the License is distributed on an "AS
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * implied. See the License for the specific language governing
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * rights and limitations under the License.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Original Code is Mozilla Communicator client code, released March
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 31, 1998.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Initial Developer of the Original Code is Netscape Communications
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Corporation. Portions created by Netscape are
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1998 Netscape Communications Corporation. All
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Rights Reserved.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Contributor(s):
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    File Name:    15.9.5.4.js
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ECMA Section: 15.9.5.4 Date.prototype.toTimeString()
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Description:
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    This function returns a string value. The contents of the string are
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    implementation dependent, but are intended to represent the "time"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    portion of the Date in the current time zone in a convenient,
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    human-readable form.   We test the content of the string by checking
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    that d.toDateString()  +  d.toTimeString()  ==  d.toString()
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Author:  pschwartau@netscape.com
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Date:    14 november 2000
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    Revised: 07 january 2002  because of a change in JS Date format:
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    See http://bugzilla.mozilla.org/show_bug.cgi?id=118266 (SpiderMonkey)
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    See http://bugzilla.mozilla.org/show_bug.cgi?id=118636 (Rhino)
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var SECTION = "15.9.5.4";
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var VERSION = "ECMA_3";
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var TITLE   = "Date.prototype.toTimeString()";
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var status = '';
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var actual = '';
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var expect = '';
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var givenDate;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var year = '';
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var regexp = '';
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var reducedDateString = '';
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var hopeThisIsTimeString = '';
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var cnEmptyString = '';
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var cnERR ='OOPS! FATAL ERROR: no regexp match in extractTimeString()';
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   startTest();
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   writeHeaderToLog( SECTION + " "+ TITLE);
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------------------------------
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   var testcases = new Array();
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------------------------------
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   // first, a couple of generic tests -
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   status = "typeof (now.toTimeString())";
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   actual =   typeof (now.toTimeString());
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   expect = "string";
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addTestCase();
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   status = "Date.prototype.toTimeString.length";
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   actual =  Date.prototype.toTimeString.length;
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   expect =  0;
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addTestCase();
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   // 1970
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(0);
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(TZ_ADJUST);
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   // 1900
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(TIME_1900);
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(TIME_1900 - TZ_ADJUST);
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   // 2000
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(TIME_2000);
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(TIME_2000 - TZ_ADJUST);
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   // 29 Feb 2000
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(UTC_29_FEB_2000);
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(UTC_29_FEB_2000 - 1000);
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(UTC_29_FEB_2000 - TZ_ADJUST);
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   // Now
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase( TIME_NOW);
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase( TIME_NOW - TZ_ADJUST);
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   // 2005
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(UTC_1_JAN_2005);
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(UTC_1_JAN_2005 - 1000);
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addDateTestCase(UTC_1_JAN_2005 - TZ_ADJUST);
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------------------------------
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   test();
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//-----------------------------------------------------------------------------------------------------
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction addTestCase()
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  testcases[tc++] = new TestCase( SECTION, status, expect, actual);
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction addDateTestCase(date_given_in_milliseconds)
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   givenDate = new Date(date_given_in_milliseconds);
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   status = '('  +  givenDate  +  ').toTimeString()';
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   actual = givenDate.toTimeString();
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   expect = extractTimeString(givenDate);
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   addTestCase();
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * As of 2002-01-07, the format for JavaScript dates changed.
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * See http://bugzilla.mozilla.org/show_bug.cgi?id=118266 (SpiderMonkey)
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * See http://bugzilla.mozilla.org/show_bug.cgi?id=118636 (Rhino)
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WAS: Mon Jan 07 13:40:34 GMT-0800 (Pacific Standard Time) 2002
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * NOW: Mon Jan 07 2002 13:40:34 GMT-0800 (Pacific Standard Time)
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Thus, use a regexp of the form /date.toDateString()(.*)$/
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * to capture the TimeString into the first backreference -
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction extractTimeString(date)
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  regexp = new RegExp(date.toDateString() + '(.*)' + '$');
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  try
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    hopeThisIsTimeString = date.toString().match(regexp)[1];
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  catch(e)
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return cnERR;
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  // trim any leading or trailing spaces -
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return trimL(trimR(hopeThisIsTimeString));
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction trimL(s)
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if (!s) {return cnEmptyString;};
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  for (var i = 0; i!=s.length; i++) {if (s[i] != ' ') {break;}}
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return s.substring(i);
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction trimR(s)
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if (!s) {return cnEmptyString;};
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  for (var i = (s.length - 1); i!=-1; i--) {if (s[i] != ' ') {break;}}
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return s.substring(0, i+1);
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test()
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  for ( tc=0; tc < testcases.length; tc++ )
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    testcases[tc].passed = writeTestCaseResult(
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                               testcases[tc].expect,
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                               testcases[tc].actual,
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                               testcases[tc].description  +  " = "  +  testcases[tc].actual );
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value ";
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  stopTest();
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  return (testcases);
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
195