Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / tests / js1_8_1 / strict / 12.2.1.js
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
3 /*
4  * Any copyright is dedicated to the Public Domain.
5  * http://creativecommons.org/licenses/publicdomain/
6  */
7
8 /*
9  * In strict mode code, 'let' and 'const' declarations may not bind
10  * 'eval' or 'arguments'.
11  */
12 assertEq(testLenientAndStrict('let eval;',
13                               parsesSuccessfully,
14                               parseRaisesException(SyntaxError)),
15          true);
16 assertEq(testLenientAndStrict('let x,eval;',
17                               parsesSuccessfully,
18                               parseRaisesException(SyntaxError)),
19          true);
20 assertEq(testLenientAndStrict('let arguments;',
21                               parsesSuccessfully,
22                               parseRaisesException(SyntaxError)),
23          true);
24 assertEq(testLenientAndStrict('let x,arguments;',
25                               parsesSuccessfully,
26                               parseRaisesException(SyntaxError)),
27          true);
28 assertEq(testLenientAndStrict('const eval;',
29                               parsesSuccessfully,
30                               parseRaisesException(SyntaxError)),
31          true);
32 assertEq(testLenientAndStrict('const x,eval;',
33                               parsesSuccessfully,
34                               parseRaisesException(SyntaxError)),
35          true);
36 assertEq(testLenientAndStrict('const arguments;',
37                               parsesSuccessfully,
38                               parseRaisesException(SyntaxError)),
39          true);
40 assertEq(testLenientAndStrict('const x,arguments;',
41                               parsesSuccessfully,
42                               parseRaisesException(SyntaxError)),
43          true);
44
45 /*
46  * In strict mode code, 'let' declarations appearing in 'for'
47  * or 'for in' statements may not bind 'eval' or 'arguments'.
48  */
49 assertEq(testLenientAndStrict('for (let eval in [])break;',
50                               parsesSuccessfully,
51                               parseRaisesException(SyntaxError)),
52          true);
53 assertEq(testLenientAndStrict('for (let [eval] in [])break;',
54                               parsesSuccessfully,
55                               parseRaisesException(SyntaxError)),
56          true);
57 assertEq(testLenientAndStrict('for (let {x:eval} in [])break;',
58                               parsesSuccessfully,
59                               parseRaisesException(SyntaxError)),
60          true);
61 assertEq(testLenientAndStrict('for (let arguments in [])break;',
62                               parsesSuccessfully,
63                               parseRaisesException(SyntaxError)),
64          true);
65 assertEq(testLenientAndStrict('for (let [arguments] in [])break;',
66                               parsesSuccessfully,
67                               parseRaisesException(SyntaxError)),
68          true);
69 assertEq(testLenientAndStrict('for (let {x:arguments} in [])break;',
70                               parsesSuccessfully,
71                               parseRaisesException(SyntaxError)),
72          true);
73
74 reportCompare(true, true);