js/src/tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-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;
    15 function globalX() { return x; }
    16 var y = 42;
    17 function globalY() { return y; }
    19 var ev = eval;
    21 function testX()
    22 {
    23   var x = 2;
    24   var xcode =
    25     "var x = 4;" +
    26     "function actX(action)" +
    27     "{" +
    28     "  switch (action)" +
    29     "  {" +
    30     "    case 'get':" +
    31     "      return x;" +
    32     "    case 'set1':" +
    33     "      x = 9;" +
    34     "      return;" +
    35     "    case 'set2':" +
    36     "      x = 23;" +
    37     "      return;" +
    38     "    case 'delete':" +
    39     "      try { return eval('delete x'); }" +
    40     "      catch (e) { return e.name; }" +
    41     "  }" +
    42     "}" +
    43     "actX;";
    45   var local0 = x;
    46   var global0 = globalX();
    48   var f = eval(xcode);
    50   var inner1 = f("get");
    51   var local1 = x;
    52   var global1 = globalX();
    54   x = 7;
    55   var inner2 = f("get");
    56   var local2 = x;
    57   var global2 = globalX();
    59   f("set1");
    60   var inner3 = f("get");
    61   var local3 = x;
    62   var global3 = globalX();
    64   var del = f("delete");
    65   var inner4 = f("get");
    66   var local4 = x;
    67   var global4 = globalX();
    69   f("set2");
    70   var inner5 = f("get");
    71   var local5 = x;
    72   var global5 = globalX();
    74   return {
    75            local0: local0, global0: global0,
    76            inner1: inner1, local1: local1, global1: global1,
    77            inner2: inner2, local2: local2, global2: global2,
    78            inner3: inner3, local3: local3, global3: global3,
    79            del: del,
    80            inner4: inner4, local4: local4, global4: global4,
    81            inner5: inner5, local5: local5, global5: global5,
    82          };
    83 }
    85 var resultsX = testX();
    87 assertEq(resultsX.local0, 2);
    88 assertEq(resultsX.global0, 17);
    90 assertEq(resultsX.inner1, 4);
    91 assertEq(resultsX.local1, 4);
    92 assertEq(resultsX.global1, 17);
    94 assertEq(resultsX.inner2, 7);
    95 assertEq(resultsX.local2, 7);
    96 assertEq(resultsX.global2, 17);
    98 assertEq(resultsX.inner3, 9);
    99 assertEq(resultsX.local3, 9);
   100 assertEq(resultsX.global3, 17);
   102 assertEq(resultsX.del, false);
   104 assertEq(resultsX.inner4, 9);
   105 assertEq(resultsX.local4, 9);
   106 assertEq(resultsX.global4, 17);
   108 assertEq(resultsX.inner5, 23);
   109 assertEq(resultsX.local5, 23);
   110 assertEq(resultsX.global5, 17);
   113 function testY()
   114 {
   115   var ycode =
   116     "var y = 5;" +
   117     "function actY(action)" +
   118     "{" +
   119     "  switch (action)" +
   120     "  {" +
   121     "    case 'get':" +
   122     "      return y;" +
   123     "    case 'set1':" +
   124     "      y = 2;" +
   125     "      return;" +
   126     "    case 'set2':" +
   127     "      y = 71;" +
   128     "      return;" +
   129     "    case 'delete':" +
   130     "      try { return eval('delete y'); }" +
   131     "      catch (e) { return e.name; }" +
   132     "  }" +
   133     "}" +
   134     "actY;";
   136   var local0 = y;
   137   var global0 = globalY();
   139   var f = eval(ycode);
   141   var inner1 = f("get");
   142   var local1 = y;
   143   var global1 = globalY();
   145   y = 8;
   146   var inner2 = f("get");
   147   var local2 = y;
   148   var global2 = globalY();
   150   f("set1");
   151   var inner3 = f("get");
   152   var local3 = y;
   153   var global3 = globalY();
   155   var del = f("delete");
   156   var inner4 = f("get");
   157   var local4 = y;
   158   var global4 = globalY();
   160   f("set2");
   161   var inner5 = f("get");
   162   var local5 = y;
   163   var global5 = globalY();
   165   return {
   166            local0: local0, global0: global0,
   167            inner1: inner1, local1: local1, global1: global1,
   168            inner2: inner2, local2: local2, global2: global2,
   169            inner3: inner3, local3: local3, global3: global3,
   170            del: del,
   171            inner4: inner4, local4: local4, global4: global4,
   172            inner5: inner5, local5: local5, global5: global5,
   173          };
   174 }
   176 var resultsY = testY();
   178 assertEq(resultsY.local0, 42);
   179 assertEq(resultsY.global0, 42);
   181 assertEq(resultsY.inner1, 5);
   182 assertEq(resultsY.local1, 5);
   183 assertEq(resultsY.global1, 42);
   185 assertEq(resultsY.inner2, 8);
   186 assertEq(resultsY.local2, 8);
   187 assertEq(resultsY.global2, 42);
   189 assertEq(resultsY.inner3, 2);
   190 assertEq(resultsY.local3, 2);
   191 assertEq(resultsY.global3, 42);
   193 assertEq(resultsY.del, true);
   195 assertEq(resultsY.inner4, 42);
   196 assertEq(resultsY.local4, 42);
   197 assertEq(resultsY.global4, 42);
   199 assertEq(resultsY.inner5, 71);
   200 assertEq(resultsY.local5, 71);
   201 assertEq(resultsY.global5, 71);
   203 /******************************************************************************/
   205 if (typeof reportCompare === "function")
   206   reportCompare(true, true);
   208 print("Tests complete!");

mercurial