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