2013-07-25 19:54:24 +00:00
|
|
|
# Copyright 2013 the V8 project authors. All rights reserved.
|
|
|
|
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
|
|
|
|
#
|
|
|
|
# Redistribution and use in source and binary forms, with or without
|
|
|
|
# modification, are permitted provided that the following conditions
|
|
|
|
# are met:
|
|
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
|
|
# notice, this list of conditions and the following disclaimer.
|
|
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
|
|
# documentation and/or other materials provided with the distribution.
|
|
|
|
#
|
|
|
|
# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
|
|
|
|
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
|
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
|
|
# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
|
|
|
|
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
|
|
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
|
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
|
|
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
|
|
|
This test checks that the following expressions or statements are valid ECMASCRIPT code or should throw parse error
|
|
|
|
|
|
|
|
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
|
|
|
|
|
|
|
|
|
|
|
|
Unary operators and member access
|
|
|
|
PASS Valid: ""
|
|
|
|
PASS Valid: "function f() { }"
|
|
|
|
PASS Invalid: "(a"
|
|
|
|
PASS Invalid: "function f() { (a }"
|
|
|
|
PASS Invalid: "a[5"
|
|
|
|
PASS Invalid: "function f() { a[5 }"
|
|
|
|
PASS Invalid: "a[5 + 6"
|
|
|
|
PASS Invalid: "function f() { a[5 + 6 }"
|
|
|
|
PASS Invalid: "a."
|
|
|
|
PASS Invalid: "function f() { a. }"
|
|
|
|
PASS Invalid: "()"
|
|
|
|
PASS Invalid: "function f() { () }"
|
|
|
|
PASS Invalid: "a.'l'"
|
|
|
|
PASS Invalid: "function f() { a.'l' }"
|
|
|
|
PASS Valid: "a: +~!new a"
|
|
|
|
PASS Valid: "function f() { a: +~!new a }"
|
|
|
|
PASS Invalid: "new -a"
|
|
|
|
PASS Invalid: "function f() { new -a }"
|
|
|
|
PASS Valid: "new (-1)"
|
|
|
|
PASS Valid: "function f() { new (-1) }"
|
|
|
|
PASS Valid: "a: b: c: new f(x++)++"
|
|
|
|
PASS Valid: "function f() { a: b: c: new f(x++)++ }"
|
|
|
|
PASS Valid: "(a)++"
|
|
|
|
PASS Valid: "function f() { (a)++ }"
|
|
|
|
PASS Valid: "(1--).x"
|
|
|
|
PASS Valid: "function f() { (1--).x }"
|
|
|
|
PASS Invalid: "a-- ++"
|
|
|
|
PASS Invalid: "function f() { a-- ++ }"
|
|
|
|
PASS Invalid: "(a:) --b"
|
|
|
|
PASS Invalid: "function f() { (a:) --b }"
|
|
|
|
PASS Valid: "++ -- ++ a"
|
|
|
|
PASS Valid: "function f() { ++ -- ++ a }"
|
|
|
|
PASS Valid: "++ new new a ++"
|
|
|
|
PASS Valid: "function f() { ++ new new a ++ }"
|
|
|
|
PASS Valid: "delete void 0"
|
|
|
|
PASS Valid: "function f() { delete void 0 }"
|
|
|
|
PASS Invalid: "delete the void"
|
|
|
|
PASS Invalid: "function f() { delete the void }"
|
|
|
|
PASS Invalid: "(a++"
|
|
|
|
PASS Invalid: "function f() { (a++ }"
|
|
|
|
PASS Valid: "++a--"
|
|
|
|
PASS Valid: "function f() { ++a-- }"
|
|
|
|
PASS Valid: "++((a))--"
|
|
|
|
PASS Valid: "function f() { ++((a))-- }"
|
|
|
|
PASS Valid: "(a.x++)++"
|
|
|
|
PASS Valid: "function f() { (a.x++)++ }"
|
|
|
|
PASS Invalid: "1: null"
|
|
|
|
PASS Invalid: "function f() { 1: null }"
|
|
|
|
PASS Invalid: "+-!~"
|
|
|
|
PASS Invalid: "function f() { +-!~ }"
|
|
|
|
PASS Invalid: "+-!~(("
|
|
|
|
PASS Invalid: "function f() { +-!~(( }"
|
|
|
|
PASS Invalid: "a)"
|
|
|
|
PASS Invalid: "function f() { a) }"
|
|
|
|
PASS Invalid: "a]"
|
|
|
|
PASS Invalid: "function f() { a] }"
|
|
|
|
PASS Invalid: ".l"
|
|
|
|
PASS Invalid: "function f() { .l }"
|
|
|
|
PASS Invalid: "1.l"
|
|
|
|
PASS Invalid: "function f() { 1.l }"
|
|
|
|
PASS Valid: "1 .l"
|
|
|
|
PASS Valid: "function f() { 1 .l }"
|
|
|
|
Binary and conditional operators
|
|
|
|
PASS Valid: "a + + typeof this"
|
|
|
|
PASS Valid: "function f() { a + + typeof this }"
|
|
|
|
PASS Invalid: "a + * b"
|
|
|
|
PASS Invalid: "function f() { a + * b }"
|
|
|
|
PASS Invalid: "a ? b"
|
|
|
|
PASS Invalid: "function f() { a ? b }"
|
|
|
|
PASS Invalid: "a ? b :"
|
|
|
|
PASS Invalid: "function f() { a ? b : }"
|
|
|
|
PASS Invalid: "%a"
|
|
|
|
PASS Invalid: "function f() { %a }"
|
|
|
|
PASS Invalid: "a-"
|
|
|
|
PASS Invalid: "function f() { a- }"
|
|
|
|
PASS Valid: "a = b ? b = c : d = e"
|
|
|
|
PASS Valid: "function f() { a = b ? b = c : d = e }"
|
|
|
|
PASS Valid: "s: a[1].l ? b.l['s'] ? c++ : d : true"
|
|
|
|
PASS Valid: "function f() { s: a[1].l ? b.l['s'] ? c++ : d : true }"
|
|
|
|
PASS Valid: "a ? b + 1 ? c + 3 * d.l : d[5][6] : e"
|
|
|
|
PASS Valid: "function f() { a ? b + 1 ? c + 3 * d.l : d[5][6] : e }"
|
|
|
|
PASS Valid: "a in b instanceof delete -c"
|
|
|
|
PASS Valid: "function f() { a in b instanceof delete -c }"
|
|
|
|
PASS Invalid: "a in instanceof b.l"
|
|
|
|
PASS Invalid: "function f() { a in instanceof b.l }"
|
|
|
|
PASS Valid: "- - true % 5"
|
|
|
|
PASS Valid: "function f() { - - true % 5 }"
|
|
|
|
FAIL Invalid: "- false = 3" should throw undefined
|
|
|
|
FAIL Invalid: "function f() { - false = 3 }" should throw undefined
|
|
|
|
PASS Valid: "a: b: c: (1 + null) = 3"
|
|
|
|
PASS Valid: "function f() { a: b: c: (1 + null) = 3 }"
|
|
|
|
PASS Valid: "a[2] = b.l += c /= 4 * 7 ^ !6"
|
|
|
|
PASS Valid: "function f() { a[2] = b.l += c /= 4 * 7 ^ !6 }"
|
|
|
|
FAIL Invalid: "a + typeof b += c in d" should throw undefined
|
|
|
|
FAIL Invalid: "function f() { a + typeof b += c in d }" should throw undefined
|
|
|
|
FAIL Invalid: "typeof a &= typeof b" should throw undefined
|
|
|
|
FAIL Invalid: "function f() { typeof a &= typeof b }" should throw undefined
|
|
|
|
PASS Valid: "a: ((typeof (a))) >>>= a || b.l && c"
|
|
|
|
PASS Valid: "function f() { a: ((typeof (a))) >>>= a || b.l && c }"
|
|
|
|
PASS Valid: "a: b: c[a /= f[a %= b]].l[c[x] = 7] -= a ? b <<= f : g"
|
|
|
|
PASS Valid: "function f() { a: b: c[a /= f[a %= b]].l[c[x] = 7] -= a ? b <<= f : g }"
|
|
|
|
PASS Valid: "-void+x['y'].l == x.l != 5 - f[7]"
|
|
|
|
PASS Valid: "function f() { -void+x['y'].l == x.l != 5 - f[7] }"
|
|
|
|
Function calls (and new with arguments)
|
|
|
|
PASS Valid: "a()()()"
|
|
|
|
PASS Valid: "function f() { a()()() }"
|
|
|
|
PASS Valid: "s: l: a[2](4 == 6, 5 = 6)(f[4], 6)"
|
|
|
|
PASS Valid: "function f() { s: l: a[2](4 == 6, 5 = 6)(f[4], 6) }"
|
|
|
|
PASS Valid: "s: eval(a.apply(), b.call(c[5] - f[7]))"
|
|
|
|
PASS Valid: "function f() { s: eval(a.apply(), b.call(c[5] - f[7])) }"
|
|
|
|
PASS Invalid: "a("
|
|
|
|
PASS Invalid: "function f() { a( }"
|
|
|
|
PASS Invalid: "a(5"
|
|
|
|
PASS Invalid: "function f() { a(5 }"
|
|
|
|
PASS Invalid: "a(5,"
|
|
|
|
PASS Invalid: "function f() { a(5, }"
|
|
|
|
PASS Invalid: "a(5,)"
|
|
|
|
PASS Invalid: "function f() { a(5,) }"
|
|
|
|
PASS Invalid: "a(5,6"
|
|
|
|
PASS Invalid: "function f() { a(5,6 }"
|
|
|
|
PASS Valid: "a(b[7], c <d> e.l, new a() > b)"
|
|
|
|
PASS Valid: "function f() { a(b[7], c <d> e.l, new a() > b) }"
|
|
|
|
PASS Invalid: "a(b[5)"
|
|
|
|
PASS Invalid: "function f() { a(b[5) }"
|
|
|
|
PASS Invalid: "a(b.)"
|
|
|
|
PASS Invalid: "function f() { a(b.) }"
|
|
|
|
PASS Valid: "~new new a(1)(i++)(c[l])"
|
|
|
|
PASS Valid: "function f() { ~new new a(1)(i++)(c[l]) }"
|
|
|
|
PASS Invalid: "a(*a)"
|
|
|
|
PASS Invalid: "function f() { a(*a) }"
|
|
|
|
PASS Valid: "((((a))((b)()).l))()"
|
|
|
|
PASS Valid: "function f() { ((((a))((b)()).l))() }"
|
|
|
|
PASS Valid: "(a)[b + (c) / (d())].l--"
|
|
|
|
PASS Valid: "function f() { (a)[b + (c) / (d())].l-- }"
|
|
|
|
PASS Valid: "new (5)"
|
|
|
|
PASS Valid: "function f() { new (5) }"
|
|
|
|
PASS Invalid: "new a(5"
|
|
|
|
PASS Invalid: "function f() { new a(5 }"
|
|
|
|
PASS Valid: "new (f + 5)(6, (g)() - 'l'() - true(false))"
|
|
|
|
PASS Valid: "function f() { new (f + 5)(6, (g)() - 'l'() - true(false)) }"
|
|
|
|
PASS Invalid: "a(.length)"
|
|
|
|
PASS Invalid: "function f() { a(.length) }"
|
|
|
|
function declaration and expression
|
|
|
|
PASS Valid: "function f() {}"
|
|
|
|
PASS Valid: "function f() { function f() {} }"
|
|
|
|
PASS Valid: "function f(a,b) {}"
|
|
|
|
PASS Valid: "function f() { function f(a,b) {} }"
|
|
|
|
PASS Invalid: "function () {}"
|
|
|
|
PASS Invalid: "function f() { function () {} }"
|
|
|
|
PASS Invalid: "function f(a b) {}"
|
|
|
|
PASS Invalid: "function f() { function f(a b) {} }"
|
|
|
|
PASS Invalid: "function f(a,) {}"
|
|
|
|
PASS Invalid: "function f() { function f(a,) {} }"
|
|
|
|
PASS Invalid: "function f(a,"
|
|
|
|
PASS Invalid: "function f() { function f(a, }"
|
|
|
|
PASS Invalid: "function f(a, 1) {}"
|
|
|
|
PASS Invalid: "function f() { function f(a, 1) {} }"
|
|
|
|
PASS Valid: "function g(arguments, eval) {}"
|
|
|
|
PASS Valid: "function f() { function g(arguments, eval) {} }"
|
|
|
|
PASS Valid: "function f() {} + function g() {}"
|
|
|
|
PASS Valid: "function f() { function f() {} + function g() {} }"
|
|
|
|
PASS Invalid: "(function a{})"
|
|
|
|
PASS Invalid: "function f() { (function a{}) }"
|
|
|
|
PASS Invalid: "(function this(){})"
|
|
|
|
PASS Invalid: "function f() { (function this(){}) }"
|
|
|
|
PASS Valid: "(delete new function f(){} + function(a,b){}(5)(6))"
|
|
|
|
PASS Valid: "function f() { (delete new function f(){} + function(a,b){}(5)(6)) }"
|
|
|
|
PASS Valid: "6 - function (m) { function g() {} }"
|
|
|
|
PASS Valid: "function f() { 6 - function (m) { function g() {} } }"
|
|
|
|
PASS Invalid: "function l() {"
|
|
|
|
PASS Invalid: "function f() { function l() { }"
|
|
|
|
PASS Invalid: "function l++(){}"
|
|
|
|
PASS Invalid: "function f() { function l++(){} }"
|
|
|
|
Array and object literal, comma operator
|
|
|
|
PASS Valid: "[] in [5,6] * [,5,] / [,,5,,] || [a,] && new [,b] % [,,]"
|
|
|
|
PASS Valid: "function f() { [] in [5,6] * [,5,] / [,,5,,] || [a,] && new [,b] % [,,] }"
|
|
|
|
PASS Invalid: "[5,"
|
|
|
|
PASS Invalid: "function f() { [5, }"
|
|
|
|
PASS Invalid: "[,"
|
|
|
|
PASS Invalid: "function f() { [, }"
|
|
|
|
PASS Invalid: "(a,)"
|
|
|
|
PASS Invalid: "function f() { (a,) }"
|
|
|
|
PASS Valid: "1 + {get get(){}, set set(a){}, get1:4, set1:get-set, }"
|
|
|
|
PASS Valid: "function f() { 1 + {get get(){}, set set(a){}, get1:4, set1:get-set, } }"
|
|
|
|
PASS Invalid: "1 + {a"
|
|
|
|
PASS Invalid: "function f() { 1 + {a }"
|
|
|
|
PASS Invalid: "1 + {a:"
|
|
|
|
PASS Invalid: "function f() { 1 + {a: }"
|
|
|
|
PASS Invalid: "1 + {get l("
|
|
|
|
PASS Invalid: "function f() { 1 + {get l( }"
|
|
|
|
PASS Invalid: ",a"
|
|
|
|
PASS Invalid: "function f() { ,a }"
|
|
|
|
PASS Valid: "(4,(5,a(3,4))),f[4,a-6]"
|
|
|
|
PASS Valid: "function f() { (4,(5,a(3,4))),f[4,a-6] }"
|
|
|
|
PASS Invalid: "(,f)"
|
|
|
|
PASS Invalid: "function f() { (,f) }"
|
|
|
|
PASS Invalid: "a,,b"
|
|
|
|
PASS Invalid: "function f() { a,,b }"
|
|
|
|
PASS Invalid: "a ? b, c : d"
|
|
|
|
PASS Invalid: "function f() { a ? b, c : d }"
|
|
|
|
simple statements
|
|
|
|
PASS Valid: "{ }"
|
|
|
|
PASS Valid: "function f() { { } }"
|
|
|
|
PASS Invalid: "{ { }"
|
|
|
|
PASS Invalid: "function f() { { { } }"
|
|
|
|
PASS Valid: "{ ; ; ; }"
|
|
|
|
PASS Valid: "function f() { { ; ; ; } }"
|
|
|
|
PASS Valid: "a: { ; }"
|
|
|
|
PASS Valid: "function f() { a: { ; } }"
|
|
|
|
PASS Invalid: "{ a: }"
|
|
|
|
PASS Invalid: "function f() { { a: } }"
|
|
|
|
PASS Valid: "{} f; { 6 + f() }"
|
|
|
|
PASS Valid: "function f() { {} f; { 6 + f() } }"
|
|
|
|
PASS Valid: "{ a[5],6; {} ++b-new (-5)() } c().l++"
|
|
|
|
PASS Valid: "function f() { { a[5],6; {} ++b-new (-5)() } c().l++ }"
|
|
|
|
PASS Valid: "{ l1: l2: l3: { this } a = 32 ; { i++ ; { { { } } ++i } } }"
|
|
|
|
PASS Valid: "function f() { { l1: l2: l3: { this } a = 32 ; { i++ ; { { { } } ++i } } } }"
|
|
|
|
PASS Valid: "if (a) ;"
|
|
|
|
PASS Valid: "function f() { if (a) ; }"
|
|
|
|
PASS Invalid: "{ if (a) }"
|
|
|
|
PASS Invalid: "function f() { { if (a) } }"
|
|
|
|
PASS Invalid: "if a {}"
|
|
|
|
PASS Invalid: "function f() { if a {} }"
|
|
|
|
PASS Invalid: "if (a"
|
|
|
|
PASS Invalid: "function f() { if (a }"
|
|
|
|
PASS Invalid: "if (a { }"
|
|
|
|
PASS Invalid: "function f() { if (a { } }"
|
|
|
|
PASS Valid: "x: s: if (a) ; else b"
|
|
|
|
PASS Valid: "function f() { x: s: if (a) ; else b }"
|
|
|
|
PASS Invalid: "else {}"
|
|
|
|
PASS Invalid: "function f() { else {} }"
|
|
|
|
PASS Valid: "if (a) if (b) y; else {} else ;"
|
|
|
|
PASS Valid: "function f() { if (a) if (b) y; else {} else ; }"
|
|
|
|
PASS Invalid: "if (a) {} else x; else"
|
|
|
|
PASS Invalid: "function f() { if (a) {} else x; else }"
|
|
|
|
PASS Invalid: "if (a) { else }"
|
|
|
|
PASS Invalid: "function f() { if (a) { else } }"
|
|
|
|
PASS Valid: "if (a.l + new b()) 4 + 5 - f()"
|
|
|
|
PASS Valid: "function f() { if (a.l + new b()) 4 + 5 - f() }"
|
|
|
|
PASS Valid: "if (a) with (x) ; else with (y) ;"
|
|
|
|
PASS Valid: "function f() { if (a) with (x) ; else with (y) ; }"
|
|
|
|
PASS Invalid: "with a.b { }"
|
|
|
|
PASS Invalid: "function f() { with a.b { } }"
|
|
|
|
PASS Valid: "while (a() - new b) ;"
|
|
|
|
PASS Valid: "function f() { while (a() - new b) ; }"
|
|
|
|
PASS Invalid: "while a {}"
|
|
|
|
PASS Invalid: "function f() { while a {} }"
|
|
|
|
PASS Valid: "do ; while(0) i++"
|
|
|
|
PASS Valid: "function f() { do ; while(0) i++ }"
|
|
|
|
PASS Valid: "do if (a) x; else y; while(z)"
|
|
|
|
PASS Valid: "function f() { do if (a) x; else y; while(z) }"
|
|
|
|
PASS Invalid: "do g; while 4"
|
|
|
|
PASS Invalid: "function f() { do g; while 4 }"
|
|
|
|
PASS Invalid: "do g; while ((4)"
|
|
|
|
PASS Invalid: "function f() { do g; while ((4) }"
|
|
|
|
PASS Valid: "{ { do do do ; while(0) while(0) while(0) } }"
|
|
|
|
PASS Valid: "function f() { { { do do do ; while(0) while(0) while(0) } } }"
|
|
|
|
PASS Valid: "do while (0) if (a) {} else y; while(0)"
|
|
|
|
PASS Valid: "function f() { do while (0) if (a) {} else y; while(0) }"
|
|
|
|
PASS Valid: "if (a) while (b) if (c) with(d) {} else e; else f"
|
|
|
|
PASS Valid: "function f() { if (a) while (b) if (c) with(d) {} else e; else f }"
|
|
|
|
PASS Invalid: "break ; break your_limits ; continue ; continue living ; debugger"
|
|
|
|
PASS Invalid: "function f() { break ; break your_limits ; continue ; continue living ; debugger }"
|
|
|
|
PASS Invalid: "debugger X"
|
|
|
|
PASS Invalid: "function f() { debugger X }"
|
|
|
|
PASS Invalid: "break 0.2"
|
|
|
|
PASS Invalid: "function f() { break 0.2 }"
|
|
|
|
PASS Invalid: "continue a++"
|
|
|
|
PASS Invalid: "function f() { continue a++ }"
|
|
|
|
PASS Invalid: "continue (my_friend)"
|
|
|
|
PASS Invalid: "function f() { continue (my_friend) }"
|
|
|
|
PASS Valid: "while (1) break"
|
|
|
|
PASS Valid: "function f() { while (1) break }"
|
|
|
|
PASS Valid: "do if (a) with (b) continue; else debugger; while (false)"
|
|
|
|
PASS Valid: "function f() { do if (a) with (b) continue; else debugger; while (false) }"
|
|
|
|
PASS Invalid: "do if (a) while (false) else debugger"
|
|
|
|
PASS Invalid: "function f() { do if (a) while (false) else debugger }"
|
|
|
|
PASS Invalid: "while if (a) ;"
|
|
|
|
PASS Invalid: "function f() { while if (a) ; }"
|
|
|
|
PASS Valid: "if (a) function f() {} else function g() {}"
|
|
|
|
PASS Valid: "function f() { if (a) function f() {} else function g() {} }"
|
|
|
|
PASS Valid: "if (a()) while(0) function f() {} else function g() {}"
|
|
|
|
PASS Valid: "function f() { if (a()) while(0) function f() {} else function g() {} }"
|
|
|
|
PASS Invalid: "if (a()) function f() { else function g() }"
|
|
|
|
PASS Invalid: "function f() { if (a()) function f() { else function g() } }"
|
|
|
|
PASS Invalid: "if (a) if (b) ; else function f {}"
|
|
|
|
PASS Invalid: "function f() { if (a) if (b) ; else function f {} }"
|
|
|
|
PASS Invalid: "if (a) if (b) ; else function (){}"
|
|
|
|
PASS Invalid: "function f() { if (a) if (b) ; else function (){} }"
|
|
|
|
PASS Valid: "throw a"
|
|
|
|
PASS Valid: "function f() { throw a }"
|
|
|
|
PASS Valid: "throw a + b in void c"
|
|
|
|
PASS Valid: "function f() { throw a + b in void c }"
|
|
|
|
PASS Invalid: "throw"
|
|
|
|
PASS Invalid: "function f() { throw }"
|
|
|
|
var and const statements
|
|
|
|
PASS Valid: "var a, b = null"
|
|
|
|
PASS Valid: "function f() { var a, b = null }"
|
2016-01-11 23:09:27 +00:00
|
|
|
FAIL Valid: "const a = 5, b, c" should NOT throw
|
|
|
|
FAIL Valid: "function f() { const a = 5, b, c }" should NOT throw
|
2013-07-25 19:54:24 +00:00
|
|
|
PASS Invalid: "var"
|
|
|
|
PASS Invalid: "function f() { var }"
|
|
|
|
PASS Invalid: "var = 7"
|
|
|
|
PASS Invalid: "function f() { var = 7 }"
|
|
|
|
PASS Invalid: "var c (6)"
|
|
|
|
PASS Invalid: "function f() { var c (6) }"
|
2016-01-11 23:09:27 +00:00
|
|
|
FAIL Valid: "if (a) var a,b; else const b, c" should NOT throw
|
|
|
|
FAIL Valid: "function f() { if (a) var a,b; else const b, c }" should NOT throw
|
2013-07-25 19:54:24 +00:00
|
|
|
PASS Invalid: "var 5 = 6"
|
|
|
|
PASS Invalid: "function f() { var 5 = 6 }"
|
|
|
|
PASS Valid: "while (0) var a, b, c=6, d, e, f=5*6, g=f*h, h"
|
|
|
|
PASS Valid: "function f() { while (0) var a, b, c=6, d, e, f=5*6, g=f*h, h }"
|
|
|
|
PASS Invalid: "var a = if (b) { c }"
|
|
|
|
PASS Invalid: "function f() { var a = if (b) { c } }"
|
|
|
|
PASS Invalid: "var a = var b"
|
|
|
|
PASS Invalid: "function f() { var a = var b }"
|
2016-01-11 23:09:27 +00:00
|
|
|
FAIL Valid: "const a = b += c, a, a, a = (b - f())" should NOT throw
|
|
|
|
FAIL Valid: "function f() { const a = b += c, a, a, a = (b - f()) }" should NOT throw
|
2013-07-25 19:54:24 +00:00
|
|
|
PASS Invalid: "var a %= b | 5"
|
|
|
|
PASS Invalid: "function f() { var a %= b | 5 }"
|
|
|
|
PASS Invalid: "var (a) = 5"
|
|
|
|
PASS Invalid: "function f() { var (a) = 5 }"
|
|
|
|
PASS Invalid: "var a = (4, b = 6"
|
|
|
|
PASS Invalid: "function f() { var a = (4, b = 6 }"
|
|
|
|
PASS Invalid: "const 'l' = 3"
|
|
|
|
PASS Invalid: "function f() { const 'l' = 3 }"
|
|
|
|
PASS Invalid: "var var = 3"
|
|
|
|
PASS Invalid: "function f() { var var = 3 }"
|
|
|
|
PASS Valid: "var varr = 3 in 1"
|
|
|
|
PASS Valid: "function f() { var varr = 3 in 1 }"
|
2016-01-11 23:09:27 +00:00
|
|
|
FAIL Valid: "const a, a, a = void 7 - typeof 8, a = 8" should NOT throw
|
|
|
|
FAIL Valid: "function f() { const a, a, a = void 7 - typeof 8, a = 8 }" should NOT throw
|
2013-07-25 19:54:24 +00:00
|
|
|
PASS Valid: "const x_x = 6 /= 7 ? e : f"
|
|
|
|
PASS Valid: "function f() { const x_x = 6 /= 7 ? e : f }"
|
|
|
|
PASS Invalid: "var a = ?"
|
|
|
|
PASS Invalid: "function f() { var a = ? }"
|
|
|
|
PASS Invalid: "const a = *7"
|
|
|
|
PASS Invalid: "function f() { const a = *7 }"
|
|
|
|
PASS Invalid: "var a = :)"
|
|
|
|
PASS Invalid: "function f() { var a = :) }"
|
|
|
|
PASS Valid: "var a = a in b in c instanceof d"
|
|
|
|
PASS Valid: "function f() { var a = a in b in c instanceof d }"
|
|
|
|
PASS Invalid: "var a = b ? c, b"
|
|
|
|
PASS Invalid: "function f() { var a = b ? c, b }"
|
|
|
|
PASS Invalid: "const a = b : c"
|
|
|
|
PASS Invalid: "function f() { const a = b : c }"
|
|
|
|
for statement
|
|
|
|
PASS Valid: "for ( ; ; ) { break }"
|
|
|
|
PASS Valid: "function f() { for ( ; ; ) { break } }"
|
|
|
|
PASS Valid: "for ( a ; ; ) { break }"
|
|
|
|
PASS Valid: "function f() { for ( a ; ; ) { break } }"
|
|
|
|
PASS Valid: "for ( ; a ; ) { break }"
|
|
|
|
PASS Valid: "function f() { for ( ; a ; ) { break } }"
|
|
|
|
PASS Valid: "for ( ; ; a ) { break }"
|
|
|
|
PASS Valid: "function f() { for ( ; ; a ) { break } }"
|
|
|
|
PASS Valid: "for ( a ; a ; ) break"
|
|
|
|
PASS Valid: "function f() { for ( a ; a ; ) break }"
|
|
|
|
PASS Valid: "for ( a ; ; a ) break"
|
|
|
|
PASS Valid: "function f() { for ( a ; ; a ) break }"
|
|
|
|
PASS Valid: "for ( ; a ; a ) break"
|
|
|
|
PASS Valid: "function f() { for ( ; a ; a ) break }"
|
|
|
|
PASS Invalid: "for () { }"
|
|
|
|
PASS Invalid: "function f() { for () { } }"
|
|
|
|
PASS Invalid: "for ( a ) { }"
|
|
|
|
PASS Invalid: "function f() { for ( a ) { } }"
|
|
|
|
PASS Invalid: "for ( ; ) ;"
|
|
|
|
PASS Invalid: "function f() { for ( ; ) ; }"
|
|
|
|
PASS Invalid: "for a ; b ; c { }"
|
|
|
|
PASS Invalid: "function f() { for a ; b ; c { } }"
|
|
|
|
PASS Invalid: "for (a ; { }"
|
|
|
|
PASS Invalid: "function f() { for (a ; { } }"
|
|
|
|
PASS Invalid: "for ( a ; ) ;"
|
|
|
|
PASS Invalid: "function f() { for ( a ; ) ; }"
|
|
|
|
PASS Invalid: "for ( ; a ) break"
|
|
|
|
PASS Invalid: "function f() { for ( ; a ) break }"
|
|
|
|
PASS Valid: "for (var a, b ; ; ) { break } "
|
|
|
|
PASS Valid: "function f() { for (var a, b ; ; ) { break } }"
|
|
|
|
PASS Valid: "for (var a = b, b = a ; ; ) break"
|
|
|
|
PASS Valid: "function f() { for (var a = b, b = a ; ; ) break }"
|
|
|
|
PASS Valid: "for (var a = b, c, d, b = a ; x in b ; ) { break }"
|
|
|
|
PASS Valid: "function f() { for (var a = b, c, d, b = a ; x in b ; ) { break } }"
|
|
|
|
PASS Valid: "for (var a = b, c, d ; ; 1 in a()) break"
|
|
|
|
PASS Valid: "function f() { for (var a = b, c, d ; ; 1 in a()) break }"
|
|
|
|
PASS Invalid: "for ( ; var a ; ) break"
|
|
|
|
PASS Invalid: "function f() { for ( ; var a ; ) break }"
|
2016-01-11 23:09:27 +00:00
|
|
|
PASS Invalid: "for (const a; ; ) break"
|
|
|
|
PASS Invalid: "function f() { for (const a; ; ) break }"
|
2013-07-25 19:54:24 +00:00
|
|
|
PASS Invalid: "for ( %a ; ; ) { }"
|
|
|
|
PASS Invalid: "function f() { for ( %a ; ; ) { } }"
|
|
|
|
PASS Valid: "for (a in b) break"
|
|
|
|
PASS Valid: "function f() { for (a in b) break }"
|
|
|
|
PASS Valid: "for (a() in b) break"
|
|
|
|
PASS Valid: "function f() { for (a() in b) break }"
|
|
|
|
PASS Valid: "for (a().l[4] in b) break"
|
|
|
|
PASS Valid: "function f() { for (a().l[4] in b) break }"
|
2015-08-15 17:57:01 +00:00
|
|
|
PASS Invalid: "for (new a in b in c in d) break"
|
|
|
|
PASS Invalid: "function f() { for (new a in b in c in d) break }"
|
|
|
|
PASS Invalid: "for (new new new a in b) break"
|
|
|
|
PASS Invalid: "function f() { for (new new new a in b) break }"
|
|
|
|
PASS Invalid: "for (delete new a() in b) break"
|
|
|
|
PASS Invalid: "function f() { for (delete new a() in b) break }"
|
|
|
|
PASS Invalid: "for (a * a in b) break"
|
|
|
|
PASS Invalid: "function f() { for (a * a in b) break }"
|
|
|
|
PASS Invalid: "for ((a * a) in b) break"
|
|
|
|
PASS Invalid: "function f() { for ((a * a) in b) break }"
|
|
|
|
PASS Invalid: "for (a++ in b) break"
|
|
|
|
PASS Invalid: "function f() { for (a++ in b) break }"
|
|
|
|
PASS Invalid: "for ((a++) in b) break"
|
|
|
|
PASS Invalid: "function f() { for ((a++) in b) break }"
|
|
|
|
PASS Invalid: "for (++a in b) break"
|
|
|
|
PASS Invalid: "function f() { for (++a in b) break }"
|
|
|
|
PASS Invalid: "for ((++a) in b) break"
|
|
|
|
PASS Invalid: "function f() { for ((++a) in b) break }"
|
|
|
|
PASS Invalid: "for (a, b in c) break"
|
|
|
|
PASS Invalid: "function f() { for (a, b in c) break }"
|
|
|
|
PASS Invalid: "for (a,b in c ;;) break"
|
|
|
|
PASS Invalid: "function f() { for (a,b in c ;;) break }"
|
2013-07-25 19:54:24 +00:00
|
|
|
PASS Valid: "for (a,(b in c) ;;) break"
|
|
|
|
PASS Valid: "function f() { for (a,(b in c) ;;) break }"
|
2015-08-15 17:57:01 +00:00
|
|
|
PASS Invalid: "for ((a, b) in c) break"
|
|
|
|
PASS Invalid: "function f() { for ((a, b) in c) break }"
|
|
|
|
PASS Invalid: "for (a ? b : c in c) break"
|
|
|
|
PASS Invalid: "function f() { for (a ? b : c in c) break }"
|
|
|
|
PASS Invalid: "for ((a ? b : c) in c) break"
|
|
|
|
PASS Invalid: "function f() { for ((a ? b : c) in c) break }"
|
2013-07-25 19:54:24 +00:00
|
|
|
PASS Valid: "for (var a in b in c) break"
|
|
|
|
PASS Valid: "function f() { for (var a in b in c) break }"
|
|
|
|
PASS Valid: "for (var a = 5 += 6 in b) break"
|
|
|
|
PASS Valid: "function f() { for (var a = 5 += 6 in b) break }"
|
|
|
|
PASS Invalid: "for (var a += 5 in b) break"
|
|
|
|
PASS Invalid: "function f() { for (var a += 5 in b) break }"
|
|
|
|
PASS Invalid: "for (var a = in b) break"
|
|
|
|
PASS Invalid: "function f() { for (var a = in b) break }"
|
|
|
|
PASS Invalid: "for (var a, b in b) break"
|
|
|
|
PASS Invalid: "function f() { for (var a, b in b) break }"
|
|
|
|
PASS Invalid: "for (var a = -6, b in b) break"
|
|
|
|
PASS Invalid: "function f() { for (var a = -6, b in b) break }"
|
|
|
|
PASS Invalid: "for (var a, b = 8 in b) break"
|
|
|
|
PASS Invalid: "function f() { for (var a, b = 8 in b) break }"
|
2016-04-28 13:38:36 +00:00
|
|
|
FAIL Valid: "for (var a = (b in c) in d) break" should NOT throw
|
|
|
|
FAIL Valid: "function f() { for (var a = (b in c) in d) break }" should NOT throw
|
2013-07-25 19:54:24 +00:00
|
|
|
PASS Invalid: "for (var a = (b in c in d) break"
|
|
|
|
PASS Invalid: "function f() { for (var a = (b in c in d) break }"
|
|
|
|
PASS Invalid: "for (var (a) in b) { }"
|
|
|
|
PASS Invalid: "function f() { for (var (a) in b) { } }"
|
|
|
|
PASS Valid: "for (var a = 7, b = c < d >= d ; f()[6]++ ; --i()[1]++ ) {}"
|
|
|
|
PASS Valid: "function f() { for (var a = 7, b = c < d >= d ; f()[6]++ ; --i()[1]++ ) {} }"
|
|
|
|
try statement
|
|
|
|
PASS Invalid: "try { break } catch(e) {}"
|
|
|
|
PASS Invalid: "function f() { try { break } catch(e) {} }"
|
|
|
|
PASS Valid: "try {} finally { c++ }"
|
|
|
|
PASS Valid: "function f() { try {} finally { c++ } }"
|
|
|
|
PASS Valid: "try { with (x) { } } catch(e) {} finally { if (a) ; }"
|
|
|
|
PASS Valid: "function f() { try { with (x) { } } catch(e) {} finally { if (a) ; } }"
|
|
|
|
PASS Invalid: "try {}"
|
|
|
|
PASS Invalid: "function f() { try {} }"
|
|
|
|
PASS Invalid: "catch(e) {}"
|
|
|
|
PASS Invalid: "function f() { catch(e) {} }"
|
|
|
|
PASS Invalid: "finally {}"
|
|
|
|
PASS Invalid: "function f() { finally {} }"
|
|
|
|
PASS Invalid: "try a; catch(e) {}"
|
|
|
|
PASS Invalid: "function f() { try a; catch(e) {} }"
|
|
|
|
PASS Invalid: "try {} catch(e) a()"
|
|
|
|
PASS Invalid: "function f() { try {} catch(e) a() }"
|
|
|
|
PASS Invalid: "try {} finally a()"
|
|
|
|
PASS Invalid: "function f() { try {} finally a() }"
|
|
|
|
PASS Invalid: "try {} catch(e)"
|
|
|
|
PASS Invalid: "function f() { try {} catch(e) }"
|
|
|
|
PASS Invalid: "try {} finally"
|
|
|
|
PASS Invalid: "function f() { try {} finally }"
|
|
|
|
PASS Invalid: "try {} finally {} catch(e) {}"
|
|
|
|
PASS Invalid: "function f() { try {} finally {} catch(e) {} }"
|
|
|
|
PASS Invalid: "try {} catch (...) {}"
|
|
|
|
PASS Invalid: "function f() { try {} catch (...) {} }"
|
|
|
|
PASS Invalid: "try {} catch {}"
|
|
|
|
PASS Invalid: "function f() { try {} catch {} }"
|
|
|
|
PASS Valid: "if (a) try {} finally {} else b;"
|
|
|
|
PASS Valid: "function f() { if (a) try {} finally {} else b; }"
|
|
|
|
PASS Valid: "if (--a()) do with(1) try {} catch(ke) { f() ; g() } while (a in b) else {}"
|
|
|
|
PASS Valid: "function f() { if (--a()) do with(1) try {} catch(ke) { f() ; g() } while (a in b) else {} }"
|
|
|
|
PASS Invalid: "if (a) try {} else b; catch (e) { }"
|
|
|
|
PASS Invalid: "function f() { if (a) try {} else b; catch (e) { } }"
|
|
|
|
PASS Invalid: "try { finally {}"
|
|
|
|
PASS Invalid: "function f() { try { finally {} }"
|
|
|
|
switch statement
|
|
|
|
PASS Valid: "switch (a) {}"
|
|
|
|
PASS Valid: "function f() { switch (a) {} }"
|
|
|
|
PASS Invalid: "switch () {}"
|
|
|
|
PASS Invalid: "function f() { switch () {} }"
|
|
|
|
PASS Invalid: "case 5:"
|
|
|
|
PASS Invalid: "function f() { case 5: }"
|
|
|
|
PASS Invalid: "default:"
|
|
|
|
PASS Invalid: "function f() { default: }"
|
|
|
|
PASS Invalid: "switch (a) b;"
|
|
|
|
PASS Invalid: "function f() { switch (a) b; }"
|
|
|
|
PASS Invalid: "switch (a) case 3: b;"
|
|
|
|
PASS Invalid: "function f() { switch (a) case 3: b; }"
|
|
|
|
PASS Valid: "switch (f()) { case 5 * f(): default: case '6' - 9: ++i }"
|
|
|
|
PASS Valid: "function f() { switch (f()) { case 5 * f(): default: case '6' - 9: ++i } }"
|
|
|
|
PASS Invalid: "switch (true) { default: case 6: default: }"
|
|
|
|
PASS Invalid: "function f() { switch (true) { default: case 6: default: } }"
|
|
|
|
PASS Invalid: "switch (l) { f(); }"
|
|
|
|
PASS Invalid: "function f() { switch (l) { f(); } }"
|
|
|
|
PASS Invalid: "switch (l) { case 1: ; a: case 5: }"
|
|
|
|
PASS Invalid: "function f() { switch (l) { case 1: ; a: case 5: } }"
|
|
|
|
PASS Valid: "switch (g() - h[5].l) { case 1 + 6: a: b: c: ++f }"
|
|
|
|
PASS Valid: "function f() { switch (g() - h[5].l) { case 1 + 6: a: b: c: ++f } }"
|
|
|
|
PASS Invalid: "switch (g) { case 1: a: }"
|
|
|
|
PASS Invalid: "function f() { switch (g) { case 1: a: } }"
|
|
|
|
PASS Invalid: "switch (g) { case 1: a: default: }"
|
|
|
|
PASS Invalid: "function f() { switch (g) { case 1: a: default: } }"
|
|
|
|
PASS Invalid: "switch g { case 1: l() }"
|
|
|
|
PASS Invalid: "function f() { switch g { case 1: l() } }"
|
|
|
|
PASS Invalid: "switch (g) { case 1:"
|
|
|
|
PASS Invalid: "function f() { switch (g) { case 1: }"
|
|
|
|
PASS Valid: "switch (l) { case a = b ? c : d : }"
|
|
|
|
PASS Valid: "function f() { switch (l) { case a = b ? c : d : } }"
|
|
|
|
PASS Valid: "switch (sw) { case a ? b - 7[1] ? [c,,] : d = 6 : { } : }"
|
|
|
|
PASS Valid: "function f() { switch (sw) { case a ? b - 7[1] ? [c,,] : d = 6 : { } : } }"
|
|
|
|
PASS Invalid: "switch (l) { case b ? c : }"
|
|
|
|
PASS Invalid: "function f() { switch (l) { case b ? c : } }"
|
|
|
|
PASS Valid: "switch (l) { case 1: a: with(g) switch (g) { case 2: default: } default: }"
|
|
|
|
PASS Valid: "function f() { switch (l) { case 1: a: with(g) switch (g) { case 2: default: } default: } }"
|
|
|
|
PASS Invalid: "switch (4 - ) { }"
|
|
|
|
PASS Invalid: "function f() { switch (4 - ) { } }"
|
|
|
|
PASS Invalid: "switch (l) { default case: 5; }"
|
|
|
|
PASS Invalid: "function f() { switch (l) { default case: 5; } }"
|
|
|
|
PASS Invalid: "L: L: ;"
|
|
|
|
PASS Invalid: "function f() { L: L: ; }"
|
|
|
|
PASS Invalid: "L: L1: L: ;"
|
|
|
|
PASS Invalid: "function f() { L: L1: L: ; }"
|
|
|
|
PASS Invalid: "L: L1: L2: L3: L4: L: ;"
|
|
|
|
PASS Invalid: "function f() { L: L1: L2: L3: L4: L: ; }"
|
|
|
|
PASS Invalid: "for(var a,b 'this shouldn't be allowed' false ; ) ;"
|
|
|
|
PASS Invalid: "function f() { for(var a,b 'this shouldn't be allowed' false ; ) ; }"
|
|
|
|
PASS Invalid: "for(var a,b '"
|
|
|
|
PASS Invalid: "function f() { for(var a,b ' }"
|
|
|
|
PASS Valid: "function __proto__(){}"
|
|
|
|
PASS Valid: "function f() { function __proto__(){} }"
|
|
|
|
PASS Valid: "(function __proto__(){})"
|
|
|
|
PASS Valid: "function f() { (function __proto__(){}) }"
|
|
|
|
PASS Valid: "'use strict'; function __proto__(){}"
|
|
|
|
PASS Valid: "function f() { 'use strict'; function __proto__(){} }"
|
|
|
|
PASS Valid: "'use strict'; (function __proto__(){})"
|
|
|
|
PASS Valid: "function f() { 'use strict'; (function __proto__(){}) }"
|
|
|
|
PASS Valid: "if (0) $foo; "
|
|
|
|
PASS Valid: "function f() { if (0) $foo; }"
|
|
|
|
PASS Valid: "if (0) _foo; "
|
|
|
|
PASS Valid: "function f() { if (0) _foo; }"
|
|
|
|
PASS Valid: "if (0) foo$; "
|
|
|
|
PASS Valid: "function f() { if (0) foo$; }"
|
|
|
|
PASS Valid: "if (0) foo_; "
|
|
|
|
PASS Valid: "function f() { if (0) foo_; }"
|
|
|
|
PASS Valid: "if (0) obj.$foo; "
|
|
|
|
PASS Valid: "function f() { if (0) obj.$foo; }"
|
|
|
|
PASS Valid: "if (0) obj._foo; "
|
|
|
|
PASS Valid: "function f() { if (0) obj._foo; }"
|
|
|
|
PASS Valid: "if (0) obj.foo$; "
|
|
|
|
PASS Valid: "function f() { if (0) obj.foo$; }"
|
|
|
|
PASS Valid: "if (0) obj.foo_; "
|
|
|
|
PASS Valid: "function f() { if (0) obj.foo_; }"
|
|
|
|
PASS Valid: "if (0) obj.foo\u03bb; "
|
|
|
|
PASS Valid: "function f() { if (0) obj.foo\u03bb; }"
|
|
|
|
PASS Valid: "if (0) new a(b+c).d = 5"
|
|
|
|
PASS Valid: "function f() { if (0) new a(b+c).d = 5 }"
|
|
|
|
PASS Valid: "if (0) new a(b+c) = 5"
|
|
|
|
PASS Valid: "function f() { if (0) new a(b+c) = 5 }"
|
|
|
|
PASS Valid: "([1 || 1].a = 1)"
|
|
|
|
PASS Valid: "function f() { ([1 || 1].a = 1) }"
|
|
|
|
PASS Valid: "({a: 1 || 1}.a = 1)"
|
|
|
|
PASS Valid: "function f() { ({a: 1 || 1}.a = 1) }"
|
|
|
|
PASS Invalid: "var a.b = c"
|
|
|
|
PASS Invalid: "function f() { var a.b = c }"
|
|
|
|
PASS Invalid: "var a.b;"
|
|
|
|
PASS Invalid: "function f() { var a.b; }"
|
|
|
|
FAIL e.line should be 1 (of type number). Was undefined (of type undefined).
|
|
|
|
PASS foo is 'PASS'
|
|
|
|
PASS bar is 'PASS'
|
|
|
|
PASS successfullyParsed is true
|
|
|
|
|
|
|
|
TEST COMPLETE
|
|
|
|
|