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