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