Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / tests / ecma_5 / eval / exhaustive-global-normalcaller-indirect-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
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!");