1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-direct-normalcode.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,172 @@ 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 + 1.19 +var ev = eval; 1.20 + 1.21 +var xcode = 1.22 + "var x = 4;" + 1.23 + "function actX(action)" + 1.24 + "{" + 1.25 + " switch (action)" + 1.26 + " {" + 1.27 + " case 'get':" + 1.28 + " return x;" + 1.29 + " case 'set1':" + 1.30 + " x = 9;" + 1.31 + " return;" + 1.32 + " case 'set2':" + 1.33 + " x = 23;" + 1.34 + " return;" + 1.35 + " case 'delete':" + 1.36 + " try { return eval('delete x'); }" + 1.37 + " catch (e) { return e.name; }" + 1.38 + " }" + 1.39 + "}" + 1.40 + "actX;"; 1.41 + 1.42 +var local0 = x; 1.43 + 1.44 +var f = eval(xcode); 1.45 + 1.46 +var inner1 = f("get"); 1.47 +var local1 = x; 1.48 + 1.49 +x = 7; 1.50 +var inner2 = f("get"); 1.51 +var local2 = x; 1.52 + 1.53 +f("set1"); 1.54 +var inner3 = f("get"); 1.55 +var local3 = x; 1.56 + 1.57 +var del = f("delete"); 1.58 +var inner4 = f("get"); 1.59 +var local4 = x; 1.60 + 1.61 +f("set2"); 1.62 +var inner5 = f("get"); 1.63 +var local5 = x; 1.64 + 1.65 +var resultsX = 1.66 + { 1.67 + local0: local0, 1.68 + inner1: inner1, local1: local1, 1.69 + inner2: inner2, local2: local2, 1.70 + inner3: inner3, local3: local3, 1.71 + del: del, 1.72 + inner4: inner4, local4: local4, 1.73 + inner5: inner5, local5: local5, 1.74 + }; 1.75 + 1.76 +assertEq(resultsX.local0, 17); 1.77 + 1.78 +assertEq(resultsX.inner1, 4); 1.79 +assertEq(resultsX.local1, 4); 1.80 + 1.81 +assertEq(resultsX.inner2, 7); 1.82 +assertEq(resultsX.local2, 7); 1.83 + 1.84 +assertEq(resultsX.inner3, 9); 1.85 +assertEq(resultsX.local3, 9); 1.86 + 1.87 +assertEq(resultsX.del, false); 1.88 + 1.89 +assertEq(resultsX.inner4, 9); 1.90 +assertEq(resultsX.local4, 9); 1.91 + 1.92 +assertEq(resultsX.inner5, 23); 1.93 +assertEq(resultsX.local5, 23); 1.94 + 1.95 + 1.96 +var ycode = 1.97 + "var y = 5;" + 1.98 + "function actY(action)" + 1.99 + "{" + 1.100 + " switch (action)" + 1.101 + " {" + 1.102 + " case 'get':" + 1.103 + " return y;" + 1.104 + " case 'set1':" + 1.105 + " y = 2;" + 1.106 + " return;" + 1.107 + " case 'set2':" + 1.108 + " y = 71;" + 1.109 + " return;" + 1.110 + " case 'delete':" + 1.111 + " try { return eval('delete y'); }" + 1.112 + " catch (e) { return e.name; }" + 1.113 + " }" + 1.114 + "}" + 1.115 + "actY;"; 1.116 + 1.117 +try { var local0 = y; } catch (e) { local0 = e.name; } 1.118 + 1.119 +var f = eval(ycode); 1.120 + 1.121 +var inner1 = f("get"); 1.122 +var local1 = y; 1.123 + 1.124 +y = 8; 1.125 +var inner2 = f("get"); 1.126 +var local2 = y; 1.127 + 1.128 +f("set1"); 1.129 +var inner3 = f("get"); 1.130 +var local3 = y; 1.131 + 1.132 +var del = f("delete"); 1.133 +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } 1.134 +try { var local4 = y; } catch (e) { local4 = e.name; } 1.135 + 1.136 +f("set2"); 1.137 +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } 1.138 +try { var local5 = y; } catch (e) { local5 = e.name; } 1.139 + 1.140 +var resultsY = 1.141 + { 1.142 + local0: local0, 1.143 + inner1: inner1, local1: local1, 1.144 + inner2: inner2, local2: local2, 1.145 + inner3: inner3, local3: local3, 1.146 + del: del, 1.147 + inner4: inner4, local4: local4, 1.148 + inner5: inner5, local5: local5, 1.149 + }; 1.150 + 1.151 +assertEq(resultsY.local0, "ReferenceError"); 1.152 + 1.153 +assertEq(resultsY.inner1, 5); 1.154 +assertEq(resultsY.local1, 5); 1.155 + 1.156 +assertEq(resultsY.inner2, 8); 1.157 +assertEq(resultsY.local2, 8); 1.158 + 1.159 +assertEq(resultsY.inner3, 2); 1.160 +assertEq(resultsY.local3, 2); 1.161 + 1.162 +assertEq(resultsY.del, true); 1.163 + 1.164 +assertEq(resultsY.inner4, "ReferenceError"); 1.165 +assertEq(resultsY.local4, "ReferenceError"); 1.166 + 1.167 +assertEq(resultsY.inner5, 71); 1.168 +assertEq(resultsY.local5, 71); 1.169 + 1.170 +/******************************************************************************/ 1.171 + 1.172 +if (typeof reportCompare === "function") 1.173 + reportCompare(true, true); 1.174 + 1.175 +print("Tests complete!");