js/src/tests/ecma_5/eval/exhaustive-fun-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.

michael@0 1 // Any copyright is dedicated to the Public Domain.
michael@0 2 // http://creativecommons.org/licenses/publicdomain/
michael@0 3
michael@0 4 //-----------------------------------------------------------------------------
michael@0 5 var BUGNUMBER = 514568;
michael@0 6 var summary = "eval in all its myriad flavors";
michael@0 7
michael@0 8 print(BUGNUMBER + ": " + summary);
michael@0 9
michael@0 10 /**************
michael@0 11 * BEGIN TEST *
michael@0 12 **************/
michael@0 13
michael@0 14 var x = 17;
michael@0 15 function globalX() { return x; }
michael@0 16 var y = 42;
michael@0 17 function globalY() { return y; }
michael@0 18
michael@0 19 var ev = eval;
michael@0 20
michael@0 21 function testX()
michael@0 22 {
michael@0 23 "use strict";
michael@0 24
michael@0 25 var x = 2;
michael@0 26 var xcode =
michael@0 27 "'use strict';" +
michael@0 28 "var x = 4;" +
michael@0 29 "function actX(action)" +
michael@0 30 "{" +
michael@0 31 " switch (action)" +
michael@0 32 " {" +
michael@0 33 " case 'get':" +
michael@0 34 " return x;" +
michael@0 35 " case 'set1':" +
michael@0 36 " x = 9;" +
michael@0 37 " return;" +
michael@0 38 " case 'set2':" +
michael@0 39 " x = 23;" +
michael@0 40 " return;" +
michael@0 41 " case 'delete':" +
michael@0 42 " try { return eval('delete x'); }" +
michael@0 43 " catch (e) { return e.name; }" +
michael@0 44 " }" +
michael@0 45 "}" +
michael@0 46 "actX;";
michael@0 47
michael@0 48 var local0 = x;
michael@0 49 var global0 = globalX();
michael@0 50
michael@0 51 var f = eval(xcode);
michael@0 52
michael@0 53 var inner1 = f("get");
michael@0 54 var local1 = x;
michael@0 55 var global1 = globalX();
michael@0 56
michael@0 57 x = 7;
michael@0 58 var inner2 = f("get");
michael@0 59 var local2 = x;
michael@0 60 var global2 = globalX();
michael@0 61
michael@0 62 f("set1");
michael@0 63 var inner3 = f("get");
michael@0 64 var local3 = x;
michael@0 65 var global3 = globalX();
michael@0 66
michael@0 67 var del = f("delete");
michael@0 68 var inner4 = f("get");
michael@0 69 var local4 = x;
michael@0 70 var global4 = globalX();
michael@0 71
michael@0 72 f("set2");
michael@0 73 var inner5 = f("get");
michael@0 74 var local5 = x;
michael@0 75 var global5 = globalX();
michael@0 76
michael@0 77 return {
michael@0 78 local0: local0, global0: global0,
michael@0 79 inner1: inner1, local1: local1, global1: global1,
michael@0 80 inner2: inner2, local2: local2, global2: global2,
michael@0 81 inner3: inner3, local3: local3, global3: global3,
michael@0 82 del: del,
michael@0 83 inner4: inner4, local4: local4, global4: global4,
michael@0 84 inner5: inner5, local5: local5, global5: global5,
michael@0 85 };
michael@0 86 }
michael@0 87
michael@0 88 var resultsX = testX();
michael@0 89
michael@0 90 assertEq(resultsX.local0, 2);
michael@0 91 assertEq(resultsX.global0, 17);
michael@0 92
michael@0 93 assertEq(resultsX.inner1, 4);
michael@0 94 assertEq(resultsX.local1, 2);
michael@0 95 assertEq(resultsX.global1, 17);
michael@0 96
michael@0 97 assertEq(resultsX.inner2, 4);
michael@0 98 assertEq(resultsX.local2, 7);
michael@0 99 assertEq(resultsX.global2, 17);
michael@0 100
michael@0 101 assertEq(resultsX.inner3, 9);
michael@0 102 assertEq(resultsX.local3, 7);
michael@0 103 assertEq(resultsX.global3, 17);
michael@0 104
michael@0 105 assertEq(resultsX.del, "SyntaxError");
michael@0 106
michael@0 107 assertEq(resultsX.inner4, 9);
michael@0 108 assertEq(resultsX.local4, 7);
michael@0 109 assertEq(resultsX.global4, 17);
michael@0 110
michael@0 111 assertEq(resultsX.inner5, 23);
michael@0 112 assertEq(resultsX.local5, 7);
michael@0 113 assertEq(resultsX.global5, 17);
michael@0 114
michael@0 115
michael@0 116 function testY()
michael@0 117 {
michael@0 118 "use strict";
michael@0 119
michael@0 120 var ycode =
michael@0 121 "'use strict';" +
michael@0 122 "var y = 5;" +
michael@0 123 "function actY(action)" +
michael@0 124 "{" +
michael@0 125 " switch (action)" +
michael@0 126 " {" +
michael@0 127 " case 'get':" +
michael@0 128 " return y;" +
michael@0 129 " case 'set1':" +
michael@0 130 " y = 2;" +
michael@0 131 " return;" +
michael@0 132 " case 'set2':" +
michael@0 133 " y = 71;" +
michael@0 134 " return;" +
michael@0 135 " case 'delete':" +
michael@0 136 " try { return eval('delete y'); }" +
michael@0 137 " catch (e) { return e.name; }" +
michael@0 138 " }" +
michael@0 139 "}" +
michael@0 140 "actY;";
michael@0 141
michael@0 142 var local0 = y;
michael@0 143 var global0 = globalY();
michael@0 144
michael@0 145 var f = eval(ycode);
michael@0 146
michael@0 147 var inner1 = f("get");
michael@0 148 var local1 = y;
michael@0 149 var global1 = globalY();
michael@0 150
michael@0 151 y = 8;
michael@0 152 var inner2 = f("get");
michael@0 153 var local2 = y;
michael@0 154 var global2 = globalY();
michael@0 155
michael@0 156 f("set1");
michael@0 157 var inner3 = f("get");
michael@0 158 var local3 = y;
michael@0 159 var global3 = globalY();
michael@0 160
michael@0 161 var del = f("delete");
michael@0 162 var inner4 = f("get");
michael@0 163 var local4 = y;
michael@0 164 var global4 = globalY();
michael@0 165
michael@0 166 f("set2");
michael@0 167 var inner5 = f("get");
michael@0 168 var local5 = y;
michael@0 169 var global5 = globalY();
michael@0 170
michael@0 171 return {
michael@0 172 local0: local0, global0: global0,
michael@0 173 inner1: inner1, local1: local1, global1: global1,
michael@0 174 inner2: inner2, local2: local2, global2: global2,
michael@0 175 inner3: inner3, local3: local3, global3: global3,
michael@0 176 del: del,
michael@0 177 inner4: inner4, local4: local4, global4: global4,
michael@0 178 inner5: inner5, local5: local5, global5: global5,
michael@0 179 };
michael@0 180 }
michael@0 181
michael@0 182 var resultsY = testY();
michael@0 183
michael@0 184 assertEq(resultsY.local0, 42);
michael@0 185 assertEq(resultsY.global0, 42);
michael@0 186
michael@0 187 assertEq(resultsY.inner1, 5);
michael@0 188 assertEq(resultsY.local1, 42);
michael@0 189 assertEq(resultsY.global1, 42);
michael@0 190
michael@0 191 assertEq(resultsY.inner2, 5);
michael@0 192 assertEq(resultsY.local2, 8);
michael@0 193 assertEq(resultsY.global2, 8);
michael@0 194
michael@0 195 assertEq(resultsY.inner3, 2);
michael@0 196 assertEq(resultsY.local3, 8);
michael@0 197 assertEq(resultsY.global3, 8);
michael@0 198
michael@0 199 assertEq(resultsY.del, "SyntaxError");
michael@0 200
michael@0 201 assertEq(resultsY.inner4, 2);
michael@0 202 assertEq(resultsY.local4, 8);
michael@0 203 assertEq(resultsY.global4, 8);
michael@0 204
michael@0 205 assertEq(resultsY.inner5, 71);
michael@0 206 assertEq(resultsY.local5, 8);
michael@0 207 assertEq(resultsY.global5, 8);
michael@0 208
michael@0 209 /******************************************************************************/
michael@0 210
michael@0 211 if (typeof reportCompare === "function")
michael@0 212 reportCompare(true, true);
michael@0 213
michael@0 214 print("Tests complete!");

mercurial