js/src/tests/js1_8/genexps/regress-349326.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 var BUGNUMBER = 349326;
     8 var summary = 'closing generators';
     9 var actual = 'PASS';
    10 var expect = 'PASS';
    13 //-----------------------------------------------------------------------------
    14 test();
    15 //-----------------------------------------------------------------------------
    17 function test()
    18 {
    19   enterFunc ('test');
    20   printBugNumber(BUGNUMBER);
    21   printStatus (summary);
    23   let closed;
    25   function gen()
    26   {
    27     try {
    28       yield 1;
    29       yield 2;
    30     } finally {
    31       closed = true;
    32     }
    33   }
    35 // Test that return closes the generator
    36   function test_return()
    37   {
    38     for (let i in gen()) {
    39       if (i != 1)
    40         throw "unexpected generator value";
    41       return 10;
    42     }
    43   }
    45   closed = false;
    46   test_return();
    47   if (closed !== true)
    48     throw "return does not close generator";
    50 // test that break closes generator
    52   closed = false;
    53   for (let i in gen()) {
    54     if (i != 1)
    55       throw "unexpected generator value";
    56     break;
    57   }
    58   if (closed !== true)
    59     throw "break does not close generator";
    61 label: {
    62     for (;;) {
    63       closed = false;
    64       for (let i in gen()) {
    65         if (i != 1)
    66           throw "unexpected generator value";
    67         break label;
    68       }
    69     }
    70   }
    72   if (closed !== true)
    73     throw "break does not close generator";
    75 // test that an exception closes generator
    77   function function_that_throws()
    78   {
    79     throw function_that_throws;
    80   }
    82   try {
    83     closed = false;
    84     for (let i in gen()) {
    85       if (i != 1)
    86         throw "unexpected generator value";
    87       function_that_throws();
    88     }
    89   } catch (e) {
    90     if (e !== function_that_throws)
    91       throw e;
    92   }
    94   if (closed !== true)
    95     throw "exception does not close generator";
    97 // Check consistency of finally execution in presence of generators
    99   let gen2_was_closed = false;
   100   let gen3_was_closed = false;
   101   let finally_was_executed = false;
   103   function gen2() {
   104     try {
   105       yield 2;
   106     } finally {
   107       if (gen2_was_closed || !finally_was_executed || !gen3_was_closed)
   108         throw "bad oder of gen2 finally execution"
   109           gen2_was_closed = true;
   110       throw gen2;
   111     }
   112   }
   114   function gen3() {
   115     try {
   116       yield 3;
   117     } finally {
   118       if (gen2_was_closed || finally_was_executed || gen3_was_closed)
   119         throw "bad oder of gen3 finally execution"
   120           gen3_was_closed = true;
   121     }
   122   }
   124 label2: {
   125     try {
   126       for (let i in gen2()) {
   127         try {
   128           for (let j in gen3()) {
   129             break label2;
   130           }
   131         } finally {
   132           if (gen2_was_closed || finally_was_executed || !gen3_was_closed)
   133             throw "bad oder of try-finally execution";
   134           finally_was_executed = true;
   135         }
   136       }
   137       throw "gen2 finally should throw";
   138     } catch (e) {
   139       if (e != gen2) throw e;
   140     }
   141   }
   143   print("OK");
   145   reportCompare(expect, actual, summary);
   147   exitFunc ('test');
   148 }

mercurial