Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / tests / ecma_5 / eval / exhaustive-fun-normalcaller-direct-normalcode.js
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 function globalX() { return x; }
16 var y = 42;
17 function globalY() { return y; }
18
19 var ev = eval;
20
21 function testX()
22 {
23   var x = 2;
24   var xcode =
25     "var x = 4;" +
26     "function actX(action)" +
27     "{" +
28     "  switch (action)" +
29     "  {" +
30     "    case 'get':" +
31     "      return x;" +
32     "    case 'set1':" +
33     "      x = 9;" +
34     "      return;" +
35     "    case 'set2':" +
36     "      x = 23;" +
37     "      return;" +
38     "    case 'delete':" +
39     "      try { return eval('delete x'); }" +
40     "      catch (e) { return e.name; }" +
41     "  }" +
42     "}" +
43     "actX;";
44
45   var local0 = x;
46   var global0 = globalX();
47
48   var f = eval(xcode);
49
50   var inner1 = f("get");
51   var local1 = x;
52   var global1 = globalX();
53
54   x = 7;
55   var inner2 = f("get");
56   var local2 = x;
57   var global2 = globalX();
58
59   f("set1");
60   var inner3 = f("get");
61   var local3 = x;
62   var global3 = globalX();
63
64   var del = f("delete");
65   var inner4 = f("get");
66   var local4 = x;
67   var global4 = globalX();
68
69   f("set2");
70   var inner5 = f("get");
71   var local5 = x;
72   var global5 = globalX();
73
74   return {
75            local0: local0, global0: global0,
76            inner1: inner1, local1: local1, global1: global1,
77            inner2: inner2, local2: local2, global2: global2,
78            inner3: inner3, local3: local3, global3: global3,
79            del: del,
80            inner4: inner4, local4: local4, global4: global4,
81            inner5: inner5, local5: local5, global5: global5,
82          };
83 }
84
85 var resultsX = testX();
86
87 assertEq(resultsX.local0, 2);
88 assertEq(resultsX.global0, 17);
89
90 assertEq(resultsX.inner1, 4);
91 assertEq(resultsX.local1, 4);
92 assertEq(resultsX.global1, 17);
93
94 assertEq(resultsX.inner2, 7);
95 assertEq(resultsX.local2, 7);
96 assertEq(resultsX.global2, 17);
97
98 assertEq(resultsX.inner3, 9);
99 assertEq(resultsX.local3, 9);
100 assertEq(resultsX.global3, 17);
101
102 assertEq(resultsX.del, false);
103
104 assertEq(resultsX.inner4, 9);
105 assertEq(resultsX.local4, 9);
106 assertEq(resultsX.global4, 17);
107
108 assertEq(resultsX.inner5, 23);
109 assertEq(resultsX.local5, 23);
110 assertEq(resultsX.global5, 17);
111
112
113 function testY()
114 {
115   var ycode =
116     "var y = 5;" +
117     "function actY(action)" +
118     "{" +
119     "  switch (action)" +
120     "  {" +
121     "    case 'get':" +
122     "      return y;" +
123     "    case 'set1':" +
124     "      y = 2;" +
125     "      return;" +
126     "    case 'set2':" +
127     "      y = 71;" +
128     "      return;" +
129     "    case 'delete':" +
130     "      try { return eval('delete y'); }" +
131     "      catch (e) { return e.name; }" +
132     "  }" +
133     "}" +
134     "actY;";
135
136   var local0 = y;
137   var global0 = globalY();
138
139   var f = eval(ycode);
140
141   var inner1 = f("get");
142   var local1 = y;
143   var global1 = globalY();
144
145   y = 8;
146   var inner2 = f("get");
147   var local2 = y;
148   var global2 = globalY();
149
150   f("set1");
151   var inner3 = f("get");
152   var local3 = y;
153   var global3 = globalY();
154
155   var del = f("delete");
156   var inner4 = f("get");
157   var local4 = y;
158   var global4 = globalY();
159
160   f("set2");
161   var inner5 = f("get");
162   var local5 = y;
163   var global5 = globalY();
164
165   return {
166            local0: local0, global0: global0,
167            inner1: inner1, local1: local1, global1: global1,
168            inner2: inner2, local2: local2, global2: global2,
169            inner3: inner3, local3: local3, global3: global3,
170            del: del,
171            inner4: inner4, local4: local4, global4: global4,
172            inner5: inner5, local5: local5, global5: global5,
173          };
174 }
175
176 var resultsY = testY();
177
178 assertEq(resultsY.local0, 42);
179 assertEq(resultsY.global0, 42);
180
181 assertEq(resultsY.inner1, 5);
182 assertEq(resultsY.local1, 5);
183 assertEq(resultsY.global1, 42);
184
185 assertEq(resultsY.inner2, 8);
186 assertEq(resultsY.local2, 8);
187 assertEq(resultsY.global2, 42);
188
189 assertEq(resultsY.inner3, 2);
190 assertEq(resultsY.local3, 2);
191 assertEq(resultsY.global3, 42);
192
193 assertEq(resultsY.del, true);
194
195 assertEq(resultsY.inner4, 42);
196 assertEq(resultsY.local4, 42);
197 assertEq(resultsY.global4, 42);
198
199 assertEq(resultsY.inner5, 71);
200 assertEq(resultsY.local5, 71);
201 assertEq(resultsY.global5, 71);
202
203 /******************************************************************************/
204
205 if (typeof reportCompare === "function")
206   reportCompare(true, true);
207
208 print("Tests complete!");