js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-normalcode.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 // Any copyright is dedicated to the Public Domain.
     2 // http://creativecommons.org/licenses/publicdomain/
     4 //-----------------------------------------------------------------------------
     5 var BUGNUMBER = 514568;
     6 var summary = "eval in all its myriad flavors";
     8 print(BUGNUMBER + ": " + summary);
    10 /**************
    11  * BEGIN TEST *
    12  **************/
    14 var x = 17;
    16 var ev = eval;
    18 var xcode =
    19   "var x = 4;" +
    20   "function actX(action)" +
    21   "{" +
    22   "  switch (action)" +
    23   "  {" +
    24   "    case 'get':" +
    25   "      return x;" +
    26   "    case 'set1':" +
    27   "      x = 9;" +
    28   "      return;" +
    29   "    case 'set2':" +
    30   "      x = 23;" +
    31   "      return;" +
    32   "    case 'delete':" +
    33   "      try { return eval('delete x'); }" +
    34   "      catch (e) { return e.name; }" +
    35   "  }" +
    36   "}" +
    37   "actX;";
    39 var local0 = x;
    41 var f = ev(xcode);
    43 var inner1 = f("get");
    44 var local1 = x;
    46 x = 7;
    47 var inner2 = f("get");
    48 var local2 = x;
    50 f("set1");
    51 var inner3 = f("get");
    52 var local3 = x;
    54 var del = f("delete");
    55 var inner4 = f("get");
    56 var local4 = x;
    58 f("set2");
    59 var inner5 = f("get");
    60 var local5 = x;
    62 var resultsX =
    63   {
    64      local0: local0,
    65      inner1: inner1, local1: local1,
    66      inner2: inner2, local2: local2,
    67      inner3: inner3, local3: local3,
    68      del: del,
    69      inner4: inner4, local4: local4,
    70      inner5: inner5, local5: local5,
    71    };
    73 assertEq(resultsX.local0, 17);
    75 assertEq(resultsX.inner1, 4);
    76 assertEq(resultsX.local1, 4);
    78 assertEq(resultsX.inner2, 7);
    79 assertEq(resultsX.local2, 7);
    81 assertEq(resultsX.inner3, 9);
    82 assertEq(resultsX.local3, 9);
    84 assertEq(resultsX.del, false);
    86 assertEq(resultsX.inner4, 9);
    87 assertEq(resultsX.local4, 9);
    89 assertEq(resultsX.inner5, 23);
    90 assertEq(resultsX.local5, 23);
    93 var ycode =
    94   "var y = 5;" +
    95   "function actY(action)" +
    96   "{" +
    97   "  switch (action)" +
    98   "  {" +
    99   "    case 'get':" +
   100   "      return y;" +
   101   "    case 'set1':" +
   102   "      y = 2;" +
   103   "      return;" +
   104   "    case 'set2':" +
   105   "      y = 71;" +
   106   "      return;" +
   107   "    case 'delete':" +
   108   "      try { return eval('delete y'); }" +
   109   "      catch (e) { return e.name; }" +
   110   "  }" +
   111   "}" +
   112   "actY;";
   114 try { var local0 = y; } catch (e) { local0 = e.name; }
   116 var f = ev(ycode);
   118 var inner1 = f("get");
   119 var local1 = y;
   121 y = 8;
   122 var inner2 = f("get");
   123 var local2 = y;
   125 f("set1");
   126 var inner3 = f("get");
   127 var local3 = y;
   129 var del = f("delete");
   130 try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
   131 try { var local4 = y; } catch (e) { local4 = e.name; }
   133 f("set2");
   134 try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
   135 try { var local5 = y; } catch (e) { local5 = e.name; }
   137 var resultsY =
   138   {
   139     local0: local0,
   140     inner1: inner1, local1: local1,
   141     inner2: inner2, local2: local2,
   142     inner3: inner3, local3: local3,
   143     del: del,
   144     inner4: inner4, local4: local4,
   145     inner5: inner5, local5: local5,
   146   };
   148 assertEq(resultsY.local0, "ReferenceError");
   150 assertEq(resultsY.inner1, 5);
   151 assertEq(resultsY.local1, 5);
   153 assertEq(resultsY.inner2, 8);
   154 assertEq(resultsY.local2, 8);
   156 assertEq(resultsY.inner3, 2);
   157 assertEq(resultsY.local3, 2);
   159 assertEq(resultsY.del, true);
   161 assertEq(resultsY.inner4, "ReferenceError");
   162 assertEq(resultsY.local4, "ReferenceError");
   164 assertEq(resultsY.inner5, 71);
   165 assertEq(resultsY.local5, 71);
   167 /******************************************************************************/
   169 if (typeof reportCompare === "function")
   170   reportCompare(true, true);
   172 print("Tests complete!");

mercurial