tor-browser

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

regress-97921.js (2607B)


      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 * Date: 10 September 2001
      8 *
      9 * SUMMARY: Testing with() statement with nested functions
     10 * See http://bugzilla.mozilla.org/show_bug.cgi?id=97921
     11 *
     12 * Brendan: "The bug is peculiar to functions that have formal parameters,
     13 * but that are called with fewer actual arguments than the declared number
     14 * of formal parameters."
     15 */
     16 //-----------------------------------------------------------------------------
     17 var UBound = 0;
     18 var BUGNUMBER = 97921;
     19 var summary = 'Testing with() statement with nested functions';
     20 var cnYES = 'Inner value === outer value';
     21 var cnNO = "Inner value !== outer value!";
     22 var status = '';
     23 var statusitems = [];
     24 var actual = '';
     25 var actualvalues = [];
     26 var expect= '';
     27 var expectedvalues = [];
     28 var outerValue = '';
     29 var innerValue = '';
     30 var useWith = '';
     31 
     32 
     33 function F(i)
     34 {
     35  i = 0;
     36  if(useWith) with(1){i;}
     37  i++;
     38 
     39  outerValue = i; // capture value of i in outer function
     40  F1 = function() {innerValue = i;}; // capture value of i in inner function
     41  F1();
     42 }
     43 
     44 
     45 status = inSection(1);
     46 useWith=false;
     47 F(); // call F without supplying the argument
     48 actual = innerValue === outerValue;
     49 expect = true;
     50 addThis();
     51 
     52 status = inSection(2);
     53 useWith=true;
     54 F(); // call F without supplying the argument
     55 actual = innerValue === outerValue;
     56 expect = true;
     57 addThis();
     58 
     59 
     60 function G(i)
     61 {
     62  i = 0;
     63  with (new Object()) {i=100};
     64  i++;
     65 
     66  outerValue = i; // capture value of i in outer function
     67  G1 = function() {innerValue = i;}; // capture value of i in inner function
     68  G1();
     69 }
     70 
     71 
     72 status = inSection(3);
     73 G(); // call G without supplying the argument
     74 actual = innerValue === 101;
     75 expect = true;
     76 addThis();
     77 
     78 status = inSection(4);
     79 G(); // call G without supplying the argument
     80 actual = innerValue === outerValue;
     81 expect = true;
     82 addThis();
     83 
     84 
     85 
     86 //-----------------------------------------------------------------------------
     87 test();
     88 //-----------------------------------------------------------------------------
     89 
     90 
     91 function addThis()
     92 {
     93  statusitems[UBound] = status;
     94  actualvalues[UBound] = areTheseEqual(actual);
     95  expectedvalues[UBound] = areTheseEqual(expect);
     96  UBound++;
     97 }
     98 
     99 
    100 function test()
    101 {
    102  printBugNumber(BUGNUMBER);
    103  printStatus (summary);
    104 
    105  for (var i = 0; i < UBound; i++)
    106  {
    107    reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
    108  }
    109 }
    110 
    111 
    112 function areTheseEqual(yes)
    113 {
    114  return yes? cnYES : cnNO
    115    }