js/src/tests/js1_5/Scope/regress-181834.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 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/. */
     6 /*
     7  *
     8  * Date:    25 November 2002
     9  * SUMMARY: Testing scope
    10  * See http://bugzilla.mozilla.org/show_bug.cgi?id=181834
    11  *
    12  * This bug only bit in Rhino interpreted mode, when the
    13  * 'compile functions with dynamic scope' feature was set.
    14  *
    15  */
    16 //-----------------------------------------------------------------------------
    17 var UBound = 0;
    18 var BUGNUMBER = 181834;
    19 var summary = 'Testing scope';
    20 var status = '';
    21 var statusitems = [];
    22 var actual = '';
    23 var actualvalues = [];
    24 var expect= '';
    25 var expectedvalues = [];
    28 /*
    29  * If N<=0, |outer_d| just gets incremented once,
    30  * so the return value should be 1 in this case.
    31  *
    32  * If N>0, we end up calling inner() N+1 times:
    33  * inner(N), inner(N-1), ... , inner(0).
    34  *
    35  * Each call to inner() increments |outer_d| by 1.
    36  * The last call, inner(0), returns the final value
    37  * of |outer_d|, which should be N+1.
    38  */
    39 function outer(N)
    40 {
    41   var outer_d = 0;
    42   return inner(N);
    44   function inner(level)
    45   {
    46     outer_d++;
    48     if (level > 0)
    49       return inner(level - 1);
    50     else
    51       return outer_d;
    52   }
    53 }
    56 /*
    57  * This only has meaning in Rhino -
    58  */
    59 setDynamicScope(true);
    61 /*
    62  * Recompile the function |outer| via eval() in order to
    63  * feel the effect of the dynamic scope mode we have set.
    64  */
    65 var s = outer.toString();
    66 eval(s);
    68 status = inSection(1);
    69 actual = outer(-5);
    70 expect = 1;
    71 addThis();
    73 status = inSection(2);
    74 actual = outer(0);
    75 expect = 1;
    76 addThis();
    78 status = inSection(3);
    79 actual = outer(5);
    80 expect = 6;
    81 addThis();
    84 /*
    85  * Sanity check: do same steps with the dynamic flag off
    86  */
    87 setDynamicScope(false);
    89 /*
    90  * Recompile the function |outer| via eval() in order to
    91  * feel the effect of the dynamic scope mode we have set.
    92  */
    93 eval(s);
    95 status = inSection(4);
    96 actual = outer(-5);
    97 expect = 1;
    98 addThis();
   100 status = inSection(5);
   101 actual = outer(0);
   102 expect = 1;
   103 addThis();
   105 status = inSection(6);
   106 actual = outer(5);
   107 expect = 6;
   108 addThis();
   112 //-----------------------------------------------------------------------------
   113 test();
   114 //-----------------------------------------------------------------------------
   118 function setDynamicScope(flag)
   119 {
   120   if (this.Packages)
   121   {
   122     var cx = this.Packages.org.mozilla.javascript.Context.getCurrentContext();
   123     cx.setCompileFunctionsWithDynamicScope(flag);
   124   }
   125 }
   128 function addThis()
   129 {
   130   statusitems[UBound] = status;
   131   actualvalues[UBound] = actual;
   132   expectedvalues[UBound] = expect;
   133   UBound++;
   134 }
   137 function test()
   138 {
   139   enterFunc('test');
   140   printBugNumber(BUGNUMBER);
   141   printStatus(summary);
   143   for (var i=0; i<UBound; i++)
   144   {
   145     reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
   146   }
   148   exitFunc ('test');
   149 }

mercurial