~ubuntu-branches/ubuntu/vivid/mozjs24/vivid

« back to all changes in this revision

Viewing changes to js/src/tests/ecma_5/eval/exhaustive-global-strictcaller-direct-strictcode.js

  • Committer: Package Import Robot
  • Author(s): Tim Lunn
  • Date: 2014-02-11 21:55:34 UTC
  • Revision ID: package-import@ubuntu.com-20140211215534-m1zyq5aj59md3y07
Tags: upstream-24.2.0
ImportĀ upstreamĀ versionĀ 24.2.0

Show diffs side-by-side

added added

removed removed

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