18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The contents of this file are subject to the Netscape Public 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* License Version 1.1 (the "License"); you may not use this file 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* except in compliance with the License. You may obtain a copy of 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* the License at http://www.mozilla.org/NPL/ 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Software distributed under the License is distributed on an 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either expressed 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* or implied. See the License for the specific language governing 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* rights and limitations under the License. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Original Code is mozilla.org code. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Initial Developer of the Original Code is Netscape 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Communications Corporation. Portions created by Netscape are 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Copyright (C) 1998 Netscape Communications Corporation. 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* All Rights Reserved. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Contributors: jlaprise@delanotech.com,pschwartau@netscape.com 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Date: 2001-07-10 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* SUMMARY: Invoking try...catch through Function.call 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* See http://bugzilla.mozilla.org/show_bug.cgi?id=49286 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 1) Define a function with a try...catch block in it 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 2) Invoke the function via the call method of Function 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 3) Pass bad syntax to the try...catch block 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 4) We should catch the error! 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//------------------------------------------------------------------------------------------------- 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar UBound = 0; 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar bug = 49286; 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar summary = 'Invoking try...catch through Function.call'; 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnErrorCaught = 'Error caught'; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnErrorNotCaught = 'Error NOT caught'; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnGoodSyntax = '1==2'; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar cnBadSyntax = '1=2'; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar status = ''; 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar statusitems = []; 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actual = ''; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actualvalues = []; 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expect= ''; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expectedvalues = []; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar obj = new testObject(); 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = 'Section A of test: direct call of f'; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = f.call(obj); 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = cnErrorCaught; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis(); 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = 'Section B of test: indirect call of f'; 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = g.call(obj); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = cnErrorCaught; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis(); 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//----------------------------------------- 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttest(); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//----------------------------------------- 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test() 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project enterFunc ('test'); 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project printBugNumber (bug); 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project printStatus (summary); 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var i=0; i<UBound; i++) 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project exitFunc ('test'); 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// An object storing bad syntax as a property - 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction testObject() 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.badSyntax = cnBadSyntax; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project this.goodSyntax = cnGoodSyntax; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// A function wrapping a try...catch block 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction f() 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project try 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project eval(this.badSyntax); 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project catch(e) 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return cnErrorCaught; 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return cnErrorNotCaught; 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// A function wrapping a call to f - 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction g() 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return f.call(this); 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction addThis() 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project statusitems[UBound] = status; 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project actualvalues[UBound] = actual; 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project expectedvalues[UBound] = expect; 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UBound++; 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 117