tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

regress-121658.js (2349B)


      1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 /*
      7 *
      8 * Date:    24 Jan 2002
      9 * SUMMARY: "Too much recursion" errors should be safely caught by try...catch
     10 * See http://bugzilla.mozilla.org/show_bug.cgi?id=121658
     11 *
     12 * In the cases below, we expect i>0. The bug was filed because we
     13 * were getting i===0; i.e. |i| did not retain the value it had at the
     14 * location of the error.
     15 *
     16 */
     17 //-----------------------------------------------------------------------------
     18 var UBound = 0;
     19 var BUGNUMBER = 121658;
     20 var msg = '"Too much recursion" errors should be safely caught by try...catch';
     21 var TEST_PASSED = 'i retained the value it had at location of error';
     22 var TEST_FAILED = 'i did NOT retain this value';
     23 var status = '';
     24 var statusitems = [];
     25 var actual = '';
     26 var actualvalues = [];
     27 var expect= '';
     28 var expectedvalues = [];
     29 var i;
     30 
     31 
     32 function f()
     33 {
     34  ++i;
     35 
     36  // try...catch should catch the "too much recursion" error to ensue
     37  try
     38  {
     39    f();
     40  }
     41  catch(e)
     42  {
     43  }
     44 }
     45 
     46 i=0;
     47 f();
     48 status = inSection(1);
     49 actual = (i>0);
     50 expect = true;
     51 addThis();
     52 
     53 
     54 
     55 // Now try in function scope -
     56 function g()
     57 {
     58  f();
     59 }
     60 
     61 i=0;
     62 g();
     63 status = inSection(2);
     64 actual = (i>0);
     65 expect = true;
     66 addThis();
     67 
     68 
     69 
     70 // Now try in eval scope -
     71 var sEval = 'function h(){++i; try{h();} catch(e){}}; i=0; h();';
     72 eval(sEval);
     73 status = inSection(3);
     74 actual = (i>0);
     75 expect = true;
     76 addThis();
     77 
     78 
     79 
     80 // Try in eval scope and mix functions up -
     81 sEval = 'function a(){++i; try{h();} catch(e){}}; i=0; a();';
     82 eval(sEval);
     83 status = inSection(4);
     84 actual = (i>0);
     85 expect = true;
     86 addThis();
     87 
     88 
     89 
     90 
     91 //-----------------------------------------------------------------------------
     92 test();
     93 //-----------------------------------------------------------------------------
     94 
     95 
     96 
     97 function addThis()
     98 {
     99  statusitems[UBound] = status;
    100  actualvalues[UBound] = formatThis(actual);
    101  expectedvalues[UBound] = formatThis(expect);
    102  UBound++;
    103 }
    104 
    105 
    106 function formatThis(bool)
    107 {
    108  return bool? TEST_PASSED : TEST_FAILED;
    109 }
    110 
    111 
    112 function test()
    113 {
    114  printBugNumber(BUGNUMBER);
    115  printStatus(msg);
    116 
    117  for (var i=0; i<UBound; i++)
    118  {
    119    reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
    120  }
    121 }