1425bb815Sopenharmony_ci/* Copyright JS Foundation and other contributors, http://js.foundation 2425bb815Sopenharmony_ci * 3425bb815Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4425bb815Sopenharmony_ci * you may not use this file except in compliance with the License. 5425bb815Sopenharmony_ci * You may obtain a copy of the License at 6425bb815Sopenharmony_ci * 7425bb815Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8425bb815Sopenharmony_ci * 9425bb815Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10425bb815Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS 11425bb815Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12425bb815Sopenharmony_ci * See the License for the specific language governing permissions and 13425bb815Sopenharmony_ci * limitations under the License. 14425bb815Sopenharmony_ci */ 15425bb815Sopenharmony_ci 16425bb815Sopenharmony_cifunction must_throw (str) 17425bb815Sopenharmony_ci{ 18425bb815Sopenharmony_ci try 19425bb815Sopenharmony_ci { 20425bb815Sopenharmony_ci eval ("switch (1) { default: " + str + "}"); 21425bb815Sopenharmony_ci assert (false); 22425bb815Sopenharmony_ci } 23425bb815Sopenharmony_ci catch (e) 24425bb815Sopenharmony_ci { 25425bb815Sopenharmony_ci } 26425bb815Sopenharmony_ci 27425bb815Sopenharmony_ci try 28425bb815Sopenharmony_ci { 29425bb815Sopenharmony_ci eval (str); 30425bb815Sopenharmony_ci assert (false); 31425bb815Sopenharmony_ci } 32425bb815Sopenharmony_ci catch (e) 33425bb815Sopenharmony_ci { 34425bb815Sopenharmony_ci } 35425bb815Sopenharmony_ci} 36425bb815Sopenharmony_ci 37425bb815Sopenharmony_cifunction must_throw_strict (str) 38425bb815Sopenharmony_ci{ 39425bb815Sopenharmony_ci try 40425bb815Sopenharmony_ci { 41425bb815Sopenharmony_ci eval ("'use strict'; switch (1) { default: " + str + "}"); 42425bb815Sopenharmony_ci assert (false); 43425bb815Sopenharmony_ci } 44425bb815Sopenharmony_ci catch (e) 45425bb815Sopenharmony_ci { 46425bb815Sopenharmony_ci } 47425bb815Sopenharmony_ci 48425bb815Sopenharmony_ci try 49425bb815Sopenharmony_ci { 50425bb815Sopenharmony_ci eval ("'use strict'; " + str); 51425bb815Sopenharmony_ci assert (false); 52425bb815Sopenharmony_ci } 53425bb815Sopenharmony_ci catch (e) 54425bb815Sopenharmony_ci { 55425bb815Sopenharmony_ci } 56425bb815Sopenharmony_ci} 57425bb815Sopenharmony_ci 58425bb815Sopenharmony_ciswitch (1) 59425bb815Sopenharmony_ci{ 60425bb815Sopenharmony_cidefault: 61425bb815Sopenharmony_ci 62425bb815Sopenharmony_ci var func = x => { return x + 3 } 63425bb815Sopenharmony_ci assert (func(5) == 8); 64425bb815Sopenharmony_ci 65425bb815Sopenharmony_ci a => 5 /* no semicolon after */ 66425bb815Sopenharmony_ci 67425bb815Sopenharmony_ci assert (((x => 68425bb815Sopenharmony_ci x + 1))(4) == 5) 69425bb815Sopenharmony_ci 70425bb815Sopenharmony_ci assert ((a => a += 3, b => b -= 3)(4) == 1); 71425bb815Sopenharmony_ci 72425bb815Sopenharmony_ci func = true ? x=>x+2:y=>y-2 73425bb815Sopenharmony_ci assert (func(10) == 12); 74425bb815Sopenharmony_ci 75425bb815Sopenharmony_ci func = arguments => 76425bb815Sopenharmony_ci { return arguments + 4; } 77425bb815Sopenharmony_ci assert (func(2) == 6); 78425bb815Sopenharmony_ci 79425bb815Sopenharmony_ci func = ( 80425bb815Sopenharmony_ci ) => { return typeof 81425bb815Sopenharmony_ci arguments 82425bb815Sopenharmony_ci } 83425bb815Sopenharmony_ci assert (func() === "undefined"); 84425bb815Sopenharmony_ci 85425bb815Sopenharmony_ci if (a => 0) 86425bb815Sopenharmony_ci { 87425bb815Sopenharmony_ci } 88425bb815Sopenharmony_ci else 89425bb815Sopenharmony_ci { 90425bb815Sopenharmony_ci assert (false); 91425bb815Sopenharmony_ci } 92425bb815Sopenharmony_ci 93425bb815Sopenharmony_ci assert (( 94425bb815Sopenharmony_ci ( 95425bb815Sopenharmony_ci static 96425bb815Sopenharmony_ci , 97425bb815Sopenharmony_ci package 98425bb815Sopenharmony_ci ) => static + package 99425bb815Sopenharmony_ci ) (2, 12) == 14); 100425bb815Sopenharmony_ci 101425bb815Sopenharmony_ci var global_var = 7; 102425bb815Sopenharmony_ci 103425bb815Sopenharmony_ci assert (( 104425bb815Sopenharmony_ci ( 105425bb815Sopenharmony_ci static 106425bb815Sopenharmony_ci , 107425bb815Sopenharmony_ci package 108425bb815Sopenharmony_ci ) => { global_var = 5; return static + package } 109425bb815Sopenharmony_ci )(4, 5) == 9); 110425bb815Sopenharmony_ci 111425bb815Sopenharmony_ci assert (global_var == 5); 112425bb815Sopenharmony_ci 113425bb815Sopenharmony_ci func = (x , y) => {} 114425bb815Sopenharmony_ci assert (func() === undefined) 115425bb815Sopenharmony_ci 116425bb815Sopenharmony_ci assert ((x => y => z => 6)()()() == 6) 117425bb815Sopenharmony_ci 118425bb815Sopenharmony_ci func = x => x - 6 119425bb815Sopenharmony_ci var func2 = y => func(y) 120425bb815Sopenharmony_ci assert (func2 (17) == 11) 121425bb815Sopenharmony_ci 122425bb815Sopenharmony_ci func = (m) => m++ 123425bb815Sopenharmony_ci assert (func (4) == 4) 124425bb815Sopenharmony_ci 125425bb815Sopenharmony_ci func = () => 126425bb815Sopenharmony_ci ((([0,0,0]))) 127425bb815Sopenharmony_ci assert (func ().length == 3); 128425bb815Sopenharmony_ci 129425bb815Sopenharmony_ci func = (a = 5, b = 7 * 2) => a + b; 130425bb815Sopenharmony_ci assert (func() == 19); 131425bb815Sopenharmony_ci assert (func(1) == 15); 132425bb815Sopenharmony_ci 133425bb815Sopenharmony_ci func = (a = Math.cos(0)) => a; 134425bb815Sopenharmony_ci assert (func() == 1); 135425bb815Sopenharmony_ci} 136425bb815Sopenharmony_ci 137425bb815Sopenharmony_cimust_throw ("var x => x;"); 138425bb815Sopenharmony_cimust_throw ("(()) => 0"); 139425bb815Sopenharmony_cimust_throw ("((x)) => 0"); 140425bb815Sopenharmony_cimust_throw ("(((x))) => 0"); 141425bb815Sopenharmony_cimust_throw ("(x,) => 0"); 142425bb815Sopenharmony_cimust_throw ("(x==6) => 0"); 143425bb815Sopenharmony_cimust_throw ("(x y) => 0"); 144425bb815Sopenharmony_cimust_throw ("(x,y,) => 0"); 145425bb815Sopenharmony_cimust_throw ("x\n => 0"); 146425bb815Sopenharmony_cimust_throw ("this => 0"); 147425bb815Sopenharmony_cimust_throw ("(true) => 0"); 148425bb815Sopenharmony_cimust_throw ("()\n=>5"); 149425bb815Sopenharmony_cimust_throw ("3 + x => 3"); 150425bb815Sopenharmony_cimust_throw ("3 || x => 3"); 151425bb815Sopenharmony_cimust_throw ("a = 3 || (x,y) => 3"); 152425bb815Sopenharmony_cimust_throw ("x => {} (4)"); 153425bb815Sopenharmony_cimust_throw ("!x => 4"); 154425bb815Sopenharmony_cimust_throw ("x => {} = 1"); 155425bb815Sopenharmony_cimust_throw ("x => {} a = 1"); 156425bb815Sopenharmony_cimust_throw ("x => {} ? 1 : 0"); 157425bb815Sopenharmony_cimust_throw ("(x,x,x) => 0"); 158425bb815Sopenharmony_cimust_throw ("(x,x,x) => { }"); 159425bb815Sopenharmony_cimust_throw_strict ("(package) => 0"); 160425bb815Sopenharmony_cimust_throw_strict ("(package) => { return 5 }"); 161425bb815Sopenharmony_cimust_throw_strict ("(x,x,x) => 0"); 162425bb815Sopenharmony_cimust_throw_strict ("(x,x,x) => { }"); 163425bb815Sopenharmony_ci 164425bb815Sopenharmony_civar f = (a) => 1; 165425bb815Sopenharmony_ciassert(f() === 1); 166425bb815Sopenharmony_ci 167425bb815Sopenharmony_civar f = (a => 2); 168425bb815Sopenharmony_ciassert(f() === 2); 169425bb815Sopenharmony_ci 170425bb815Sopenharmony_civar f = ((((a => ((3)))))); 171425bb815Sopenharmony_ciassert(f() === 3); 172425bb815Sopenharmony_ci 173425bb815Sopenharmony_civar f = (((a) => 4)); 174425bb815Sopenharmony_ciassert(f() === 4); 175425bb815Sopenharmony_ci 176425bb815Sopenharmony_civar f = (a,b) => 5; 177425bb815Sopenharmony_ciassert(f() === 5); 178425bb815Sopenharmony_ci 179425bb815Sopenharmony_civar f = (((a,b) => 6)); 180425bb815Sopenharmony_ciassert(f() === 6); 181425bb815Sopenharmony_ci 182425bb815Sopenharmony_civar f = ((a,b) => x => (a) => 7); 183425bb815Sopenharmony_ciassert(f()()() === 7); 184425bb815Sopenharmony_ci 185425bb815Sopenharmony_civar f = (((a=1,b=2) => ((x => (((a) => 8)))))); 186425bb815Sopenharmony_ciassert(f()()() === 8); 187