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