js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-direct-strictcode.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Any copyright is dedicated to the Public Domain.
     2 // http://creativecommons.org/licenses/publicdomain/
     3 "use strict";
     5 //-----------------------------------------------------------------------------
     6 var BUGNUMBER = 514568;
     7 var summary = "eval in all its myriad flavors";
     9 print(BUGNUMBER + ": " + summary);
    11 /**************
    12  * BEGIN TEST *
    13  **************/
    15 var x = 17;
    17 var ev = eval;
    19 var xcode =
    20   "'use strict';" +
    21   "var x = 4;" +
    22   "function actX(action)" +
    23   "{" +
    24   "  switch (action)" +
    25   "  {" +
    26   "    case 'get':" +
    27   "      return x;" +
    28   "    case 'set1':" +
    29   "      x = 9;" +
    30   "      return;" +
    31   "    case 'set2':" +
    32   "      x = 23;" +
    33   "      return;" +
    34   "    case 'delete':" +
    35   "      try { return eval('delete x'); }" +
    36   "      catch (e) { return e.name; }" +
    37   "  }" +
    38   "}" +
    39   "actX;";
    41 var local0 = x;
    43 var f = eval(xcode);
    45 var inner1 = f("get");
    46 var local1 = x;
    48 x = 7;
    49 var inner2 = f("get");
    50 var local2 = x;
    52 f("set1");
    53 var inner3 = f("get");
    54 var local3 = x;
    56 var del = f("delete");
    57 var inner4 = f("get");
    58 var local4 = x;
    60 f("set2");
    61 var inner5 = f("get");
    62 var local5 = x;
    64 var resultsX =
    65   {
    66      local0: local0,
    67      inner1: inner1, local1: local1,
    68      inner2: inner2, local2: local2,
    69      inner3: inner3, local3: local3,
    70      del: del,
    71      inner4: inner4, local4: local4,
    72      inner5: inner5, local5: local5,
    73    };
    75 assertEq(resultsX.local0, 17);
    77 assertEq(resultsX.inner1, 4);
    78 assertEq(resultsX.local1, 17);
    80 assertEq(resultsX.inner2, 4);
    81 assertEq(resultsX.local2, 7);
    83 assertEq(resultsX.inner3, 9);
    84 assertEq(resultsX.local3, 7);
    86 assertEq(resultsX.del, "SyntaxError");
    88 assertEq(resultsX.inner4, 9);
    89 assertEq(resultsX.local4, 7);
    91 assertEq(resultsX.inner5, 23);
    92 assertEq(resultsX.local5, 7);
    95 var ycode =
    96   "'use strict';" +
    97   "var y = 5;" +
    98   "function actY(action)" +
    99   "{" +
   100   "  switch (action)" +
   101   "  {" +
   102   "    case 'get':" +
   103   "      return y;" +
   104   "    case 'set1':" +
   105   "      y = 2;" +
   106   "      return;" +
   107   "    case 'set2':" +
   108   "      y = 71;" +
   109   "      return;" +
   110   "    case 'delete':" +
   111   "      try { return eval('delete y'); }" +
   112   "      catch (e) { return e.name; }" +
   113   "  }" +
   114   "}" +
   115   "actY;";
   117 try { var local0 = y; } catch (e) { local0 = e.name; }
   119 var f = eval(ycode);
   121 var inner1 = f("get");
   122 try { var local1 = y; } catch (e) { local1 = e.name; }
   124 try { y = 8; } catch (e) { assertEq(e.name, "ReferenceError"); }
   125 var inner2 = f("get");
   126 try { var local2 = y; } catch (e) { local2 = e.name; }
   128 f("set1");
   129 var inner3 = f("get");
   130 try { var local3 = y; } catch (e) { local3 = e.name; }
   132 var del = f("delete");
   133 try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
   134 try { var local4 = y; } catch (e) { local4 = e.name; }
   136 f("set2");
   137 try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
   138 try { var local5 = y; } catch (e) { local5 = e.name; }
   140 var resultsY =
   141   {
   142     local0: local0,
   143     inner1: inner1, local1: local1,
   144     inner2: inner2, local2: local2,
   145     inner3: inner3, local3: local3,
   146     del: del,
   147     inner4: inner4, local4: local4,
   148     inner5: inner5, local5: local5,
   149   };
   151 assertEq(resultsY.local0, "ReferenceError");
   153 assertEq(resultsY.inner1, 5);
   154 assertEq(resultsY.local1, "ReferenceError");
   156 assertEq(resultsY.inner2, 5);
   157 assertEq(resultsY.local2, "ReferenceError");
   159 assertEq(resultsY.inner3, 2);
   160 assertEq(resultsY.local3, "ReferenceError");
   162 assertEq(resultsY.del, "SyntaxError");
   164 assertEq(resultsY.inner4, 2);
   165 assertEq(resultsY.local4, "ReferenceError");
   167 assertEq(resultsY.inner5, 71);
   168 assertEq(resultsY.local5, "ReferenceError");
   170 /******************************************************************************/
   172 if (typeof reportCompare === "function")
   173   reportCompare(true, true);
   175 print("Tests complete!");

mercurial