1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-strictcode.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,214 @@ 1.4 +// Any copyright is dedicated to the Public Domain. 1.5 +// http://creativecommons.org/licenses/publicdomain/ 1.6 + 1.7 +//----------------------------------------------------------------------------- 1.8 +var BUGNUMBER = 514568; 1.9 +var summary = "eval in all its myriad flavors"; 1.10 + 1.11 +print(BUGNUMBER + ": " + summary); 1.12 + 1.13 +/************** 1.14 + * BEGIN TEST * 1.15 + **************/ 1.16 + 1.17 +var x = 17; 1.18 +function globalX() { return x; } 1.19 +var y = 42; 1.20 +function globalY() { return y; } 1.21 + 1.22 +var ev = eval; 1.23 + 1.24 +function testX() 1.25 +{ 1.26 + "use strict"; 1.27 + 1.28 + var x = 2; 1.29 + var xcode = 1.30 + "'use strict';" + 1.31 + "var x = 4;" + 1.32 + "function actX(action)" + 1.33 + "{" + 1.34 + " switch (action)" + 1.35 + " {" + 1.36 + " case 'get':" + 1.37 + " return x;" + 1.38 + " case 'set1':" + 1.39 + " x = 9;" + 1.40 + " return;" + 1.41 + " case 'set2':" + 1.42 + " x = 23;" + 1.43 + " return;" + 1.44 + " case 'delete':" + 1.45 + " try { return eval('delete x'); }" + 1.46 + " catch (e) { return e.name; }" + 1.47 + " }" + 1.48 + "}" + 1.49 + "actX;"; 1.50 + 1.51 + var local0 = x; 1.52 + var global0 = globalX(); 1.53 + 1.54 + var f = ev(xcode); 1.55 + 1.56 + var inner1 = f("get"); 1.57 + var local1 = x; 1.58 + var global1 = globalX(); 1.59 + 1.60 + x = 7; 1.61 + var inner2 = f("get"); 1.62 + var local2 = x; 1.63 + var global2 = globalX(); 1.64 + 1.65 + f("set1"); 1.66 + var inner3 = f("get"); 1.67 + var local3 = x; 1.68 + var global3 = globalX(); 1.69 + 1.70 + var del = f("delete"); 1.71 + var inner4 = f("get"); 1.72 + var local4 = x; 1.73 + var global4 = globalX(); 1.74 + 1.75 + f("set2"); 1.76 + var inner5 = f("get"); 1.77 + var local5 = x; 1.78 + var global5 = globalX(); 1.79 + 1.80 + return { 1.81 + local0: local0, global0: global0, 1.82 + inner1: inner1, local1: local1, global1: global1, 1.83 + inner2: inner2, local2: local2, global2: global2, 1.84 + inner3: inner3, local3: local3, global3: global3, 1.85 + del: del, 1.86 + inner4: inner4, local4: local4, global4: global4, 1.87 + inner5: inner5, local5: local5, global5: global5, 1.88 + }; 1.89 +} 1.90 + 1.91 +var resultsX = testX(); 1.92 + 1.93 +assertEq(resultsX.local0, 2); 1.94 +assertEq(resultsX.global0, 17); 1.95 + 1.96 +assertEq(resultsX.inner1, 4); 1.97 +assertEq(resultsX.local1, 2); 1.98 +assertEq(resultsX.global1, 17); 1.99 + 1.100 +assertEq(resultsX.inner2, 4); 1.101 +assertEq(resultsX.local2, 7); 1.102 +assertEq(resultsX.global2, 17); 1.103 + 1.104 +assertEq(resultsX.inner3, 9); 1.105 +assertEq(resultsX.local3, 7); 1.106 +assertEq(resultsX.global3, 17); 1.107 + 1.108 +assertEq(resultsX.del, "SyntaxError"); 1.109 + 1.110 +assertEq(resultsX.inner4, 9); 1.111 +assertEq(resultsX.local4, 7); 1.112 +assertEq(resultsX.global4, 17); 1.113 + 1.114 +assertEq(resultsX.inner5, 23); 1.115 +assertEq(resultsX.local5, 7); 1.116 +assertEq(resultsX.global5, 17); 1.117 + 1.118 + 1.119 +function testY() 1.120 +{ 1.121 + "use strict"; 1.122 + 1.123 + var ycode = 1.124 + "'use strict';" + 1.125 + "var y = 5;" + 1.126 + "function actY(action)" + 1.127 + "{" + 1.128 + " switch (action)" + 1.129 + " {" + 1.130 + " case 'get':" + 1.131 + " return y;" + 1.132 + " case 'set1':" + 1.133 + " y = 2;" + 1.134 + " return;" + 1.135 + " case 'set2':" + 1.136 + " y = 71;" + 1.137 + " return;" + 1.138 + " case 'delete':" + 1.139 + " try { return eval('delete y'); }" + 1.140 + " catch (e) { return e.name; }" + 1.141 + " }" + 1.142 + "}" + 1.143 + "actY;"; 1.144 + 1.145 + var local0 = y; 1.146 + var global0 = globalY(); 1.147 + 1.148 + var f = ev(ycode); 1.149 + 1.150 + var inner1 = f("get"); 1.151 + var local1 = y; 1.152 + var global1 = globalY(); 1.153 + 1.154 + y = 8; 1.155 + var inner2 = f("get"); 1.156 + var local2 = y; 1.157 + var global2 = globalY(); 1.158 + 1.159 + f("set1"); 1.160 + var inner3 = f("get"); 1.161 + var local3 = y; 1.162 + var global3 = globalY(); 1.163 + 1.164 + var del = f("delete"); 1.165 + var inner4 = f("get"); 1.166 + var local4 = y; 1.167 + var global4 = globalY(); 1.168 + 1.169 + f("set2"); 1.170 + var inner5 = f("get"); 1.171 + var local5 = y; 1.172 + var global5 = globalY(); 1.173 + 1.174 + return { 1.175 + local0: local0, global0: global0, 1.176 + inner1: inner1, local1: local1, global1: global1, 1.177 + inner2: inner2, local2: local2, global2: global2, 1.178 + inner3: inner3, local3: local3, global3: global3, 1.179 + del: del, 1.180 + inner4: inner4, local4: local4, global4: global4, 1.181 + inner5: inner5, local5: local5, global5: global5, 1.182 + }; 1.183 +} 1.184 + 1.185 +var resultsY = testY(); 1.186 + 1.187 +assertEq(resultsY.local0, 42); 1.188 +assertEq(resultsY.global0, 42); 1.189 + 1.190 +assertEq(resultsY.inner1, 5); 1.191 +assertEq(resultsY.local1, 42); 1.192 +assertEq(resultsY.global1, 42); 1.193 + 1.194 +assertEq(resultsY.inner2, 5); 1.195 +assertEq(resultsY.local2, 8); 1.196 +assertEq(resultsY.global2, 8); 1.197 + 1.198 +assertEq(resultsY.inner3, 2); 1.199 +assertEq(resultsY.local3, 8); 1.200 +assertEq(resultsY.global3, 8); 1.201 + 1.202 +assertEq(resultsY.del, "SyntaxError"); 1.203 + 1.204 +assertEq(resultsY.inner4, 2); 1.205 +assertEq(resultsY.local4, 8); 1.206 +assertEq(resultsY.global4, 8); 1.207 + 1.208 +assertEq(resultsY.inner5, 71); 1.209 +assertEq(resultsY.local5, 8); 1.210 +assertEq(resultsY.global5, 8); 1.211 + 1.212 +/******************************************************************************/ 1.213 + 1.214 +if (typeof reportCompare === "function") 1.215 + reportCompare(true, true); 1.216 + 1.217 +print("Tests complete!");