18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* ***** BEGIN LICENSE BLOCK *****
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Version: MPL 1.1/GPL 2.0/LGPL 2.1
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The contents of this file are subject to the Mozilla Public License Version
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1.1 (the "License"); you may not use this file except in compliance with
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the License. You may obtain a copy of the License at
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * http://www.mozilla.org/MPL/
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Software distributed under the License is distributed on an "AS IS" basis,
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * for the specific language governing rights and limitations under the
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Original Code is mozilla.org code.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Initial Developer of the Original Code is
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Netscape Communications Corporation.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Portions created by the Initial Developer are Copyright (C) 1998
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Initial Developer. All Rights Reserved.
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Contributor(s):
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Alternatively, the contents of this file may be used under the terms of
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * either the GNU General Public License Version 2 or later (the "GPL"), or
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * in which case the provisions of the GPL or the LGPL are applicable instead
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * of those above. If you wish to allow use of your version of this file only
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * under the terms of either the GPL or the LGPL, and not to allow others to
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * use your version of this file under the terms of the MPL, indicate your
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * decision by deleting the provisions above and replace them with the notice
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * and other provisions required by the GPL or the LGPL. If you do not delete
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the provisions above, a recipient may use your version of this file under
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the terms of any one of the MPL, the GPL or the LGPL.
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ***** END LICENSE BLOCK ***** */
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * JavaScript test library shared functions file for running the tests
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * in the browser.  Overrides the shell's print function with document.write
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * and make everything HTML pretty.
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * To run the tests in the browser, use the mkhtml.pl script to generate
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * html pages that include the shell.js, browser.js (this file), and the
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * test js file in script tags.
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The source of the page that is generated should look something like this:
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *      <script src="./../shell.js"></script>
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *      <script src="./../browser.js"></script>
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *      <script src="./mytest.js"></script>
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction writeLineToLog( string ) {
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  document.write( string + "<br>\n");
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar testcases = new Array();
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar tc = testcases.length;
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar bug = '';
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar summary = '';
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar description = '';
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expected = '';
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actual = '';
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar msg = '';
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction TestCase(n, d, e, a)
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  this.path = (typeof gTestPath == 'undefined') ? '' : gTestPath;
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  this.name = n;
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  this.description = d;
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  this.expect = e;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  this.actual = a;
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  this.passed = ( e == a );
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  this.reason = '';
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  this.bugnumber = typeof(bug) != 'undefined' ? bug : '';
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  testcases[tc++] = this;
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar gInReportCompare = false;
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar _reportCompare = reportCompare;
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectreportCompare = function(expected, actual, description)
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  gInReportCompare = true;
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  var testcase = new TestCase(gTestName, description, expected, actual);
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  testcase.passed = _reportCompare(expected, actual, description);
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  gInReportCompare = false;
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar _reportFailure = reportFailure;
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectreportFailure = function (msg, page, line)
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  var testcase;
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if (gInReportCompare)
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    testcase = testcases[tc - 1];
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    testcase.passed = false;
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  else
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (typeof DESCRIPTION == 'undefined')
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      DESCRIPTION = 'Unknown';
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (typeof EXPECTED == 'undefined')
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      EXPECTED = 'Unknown';
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    testcase = new TestCase(gTestName, DESCRIPTION, EXPECTED, "error");
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (document.location.href.indexOf('-n.js') != -1)
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      // negative test
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project      testcase.passed = true;
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  testcase.reason += msg;
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if (typeof(page) != 'undefined')
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    testcase.reason += ' Page: ' + page;
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if (typeof(line) != 'undefined')
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    testcase.reason += ' Line: ' + line;
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  if (!testcase.passed)
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  {
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    _reportFailure(msg);
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project  }
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction gc()
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction quit()
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectwindow.onerror = reportFailure;
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
148