js/src/tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-normalcode.js

branch
TOR_BUG_3246
changeset 7
129ffea94266
equal deleted inserted replaced
-1:000000000000 0:7e40ad5c9b57
1 // Any copyright is dedicated to the Public Domain.
2 // http://creativecommons.org/licenses/publicdomain/
3
4 //-----------------------------------------------------------------------------
5 var BUGNUMBER = 514568;
6 var summary = "eval in all its myriad flavors";
7
8 print(BUGNUMBER + ": " + summary);
9
10 /**************
11 * BEGIN TEST *
12 **************/
13
14 var x = 17;
15
16 var ev = eval;
17
18 var xcode =
19 "var x = 4;" +
20 "function actX(action)" +
21 "{" +
22 " switch (action)" +
23 " {" +
24 " case 'get':" +
25 " return x;" +
26 " case 'set1':" +
27 " x = 9;" +
28 " return;" +
29 " case 'set2':" +
30 " x = 23;" +
31 " return;" +
32 " case 'delete':" +
33 " try { return eval('delete x'); }" +
34 " catch (e) { return e.name; }" +
35 " }" +
36 "}" +
37 "actX;";
38
39 var local0 = x;
40
41 var f = ev(xcode);
42
43 var inner1 = f("get");
44 var local1 = x;
45
46 x = 7;
47 var inner2 = f("get");
48 var local2 = x;
49
50 f("set1");
51 var inner3 = f("get");
52 var local3 = x;
53
54 var del = f("delete");
55 var inner4 = f("get");
56 var local4 = x;
57
58 f("set2");
59 var inner5 = f("get");
60 var local5 = x;
61
62 var resultsX =
63 {
64 local0: local0,
65 inner1: inner1, local1: local1,
66 inner2: inner2, local2: local2,
67 inner3: inner3, local3: local3,
68 del: del,
69 inner4: inner4, local4: local4,
70 inner5: inner5, local5: local5,
71 };
72
73 assertEq(resultsX.local0, 17);
74
75 assertEq(resultsX.inner1, 4);
76 assertEq(resultsX.local1, 4);
77
78 assertEq(resultsX.inner2, 7);
79 assertEq(resultsX.local2, 7);
80
81 assertEq(resultsX.inner3, 9);
82 assertEq(resultsX.local3, 9);
83
84 assertEq(resultsX.del, false);
85
86 assertEq(resultsX.inner4, 9);
87 assertEq(resultsX.local4, 9);
88
89 assertEq(resultsX.inner5, 23);
90 assertEq(resultsX.local5, 23);
91
92
93 var ycode =
94 "var y = 5;" +
95 "function actY(action)" +
96 "{" +
97 " switch (action)" +
98 " {" +
99 " case 'get':" +
100 " return y;" +
101 " case 'set1':" +
102 " y = 2;" +
103 " return;" +
104 " case 'set2':" +
105 " y = 71;" +
106 " return;" +
107 " case 'delete':" +
108 " try { return eval('delete y'); }" +
109 " catch (e) { return e.name; }" +
110 " }" +
111 "}" +
112 "actY;";
113
114 try { var local0 = y; } catch (e) { local0 = e.name; }
115
116 var f = ev(ycode);
117
118 var inner1 = f("get");
119 var local1 = y;
120
121 y = 8;
122 var inner2 = f("get");
123 var local2 = y;
124
125 f("set1");
126 var inner3 = f("get");
127 var local3 = y;
128
129 var del = f("delete");
130 try { var inner4 = f("get"); } catch (e) { inner4 = e.name; }
131 try { var local4 = y; } catch (e) { local4 = e.name; }
132
133 f("set2");
134 try { var inner5 = f("get"); } catch (e) { inner5 = e.name; }
135 try { var local5 = y; } catch (e) { local5 = e.name; }
136
137 var resultsY =
138 {
139 local0: local0,
140 inner1: inner1, local1: local1,
141 inner2: inner2, local2: local2,
142 inner3: inner3, local3: local3,
143 del: del,
144 inner4: inner4, local4: local4,
145 inner5: inner5, local5: local5,
146 };
147
148 assertEq(resultsY.local0, "ReferenceError");
149
150 assertEq(resultsY.inner1, 5);
151 assertEq(resultsY.local1, 5);
152
153 assertEq(resultsY.inner2, 8);
154 assertEq(resultsY.local2, 8);
155
156 assertEq(resultsY.inner3, 2);
157 assertEq(resultsY.local3, 2);
158
159 assertEq(resultsY.del, true);
160
161 assertEq(resultsY.inner4, "ReferenceError");
162 assertEq(resultsY.local4, "ReferenceError");
163
164 assertEq(resultsY.inner5, 71);
165 assertEq(resultsY.local5, 71);
166
167 /******************************************************************************/
168
169 if (typeof reportCompare === "function")
170 reportCompare(true, true);
171
172 print("Tests complete!");

mercurial