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_ciassert((function([a], b, {c}) {}).length === 3);
16425bb815Sopenharmony_ci
17425bb815Sopenharmony_cifunction f([a = "x", b = "y", c = "z"])
18425bb815Sopenharmony_ci{
19425bb815Sopenharmony_ci  assert(a === "a");
20425bb815Sopenharmony_ci  assert(b === "b");
21425bb815Sopenharmony_ci  assert(c === "z");
22425bb815Sopenharmony_ci}
23425bb815Sopenharmony_cif("ab")
24425bb815Sopenharmony_ci
25425bb815Sopenharmony_cifunction g({ ["x" + "y"]: { a = 4, b = 5 }, })
26425bb815Sopenharmony_ci{
27425bb815Sopenharmony_ci  assert(a === 1);
28425bb815Sopenharmony_ci  assert(b === 5);
29425bb815Sopenharmony_ci}
30425bb815Sopenharmony_cig({ xy: { a:1 } });
31425bb815Sopenharmony_ci
32425bb815Sopenharmony_cifunction h([,,a,,b,,])
33425bb815Sopenharmony_ci{
34425bb815Sopenharmony_ci  assert(a === 3);
35425bb815Sopenharmony_ci  assert(b === 5);
36425bb815Sopenharmony_ci}
37425bb815Sopenharmony_cih([1,2,3,4,5,6,7,8])
38425bb815Sopenharmony_ci
39425bb815Sopenharmony_cifunction i([a] = [42], b = a)
40425bb815Sopenharmony_ci{
41425bb815Sopenharmony_ci  assert(a === 42);
42425bb815Sopenharmony_ci  assert(b === 42);
43425bb815Sopenharmony_ci}
44425bb815Sopenharmony_cii();
45425bb815Sopenharmony_ci
46425bb815Sopenharmony_cifunction j(a, [[b = a, [c] = [b], { d } = { d:eval("c") }], e = d + 1] = [[]])
47425bb815Sopenharmony_ci{
48425bb815Sopenharmony_ci  assert(a === 8);
49425bb815Sopenharmony_ci  assert(b === 8);
50425bb815Sopenharmony_ci  assert(c === 8);
51425bb815Sopenharmony_ci  assert(d === 8);
52425bb815Sopenharmony_ci  assert(e === 9);
53425bb815Sopenharmony_ci}
54425bb815Sopenharmony_cij(8);
55425bb815Sopenharmony_ci
56425bb815Sopenharmony_cifunction k([a = function() { return a; }])
57425bb815Sopenharmony_ci{
58425bb815Sopenharmony_ci  assert(typeof a === "function");
59425bb815Sopenharmony_ci  assert(a() === a);
60425bb815Sopenharmony_ci}
61425bb815Sopenharmony_cik([]);
62425bb815Sopenharmony_ci
63425bb815Sopenharmony_cifunction l(a = 0, ...[b, c = 1, d = 4])
64425bb815Sopenharmony_ci{
65425bb815Sopenharmony_ci  assert(a === 1);
66425bb815Sopenharmony_ci  assert(b === 2);
67425bb815Sopenharmony_ci  assert(c === 3);
68425bb815Sopenharmony_ci  assert(d === 4);
69425bb815Sopenharmony_ci}
70425bb815Sopenharmony_cil(1,2,3);
71425bb815Sopenharmony_ci
72425bb815Sopenharmony_ciFunction("{a, x:b}","[c]", "{ 'dd':d, e = Math.cos(0)}",
73425bb815Sopenharmony_ci  "assert(a === 1);" +
74425bb815Sopenharmony_ci  "assert(b === undefined);" +
75425bb815Sopenharmony_ci  "assert(c === 3);" +
76425bb815Sopenharmony_ci  "assert(d === 4);" +
77425bb815Sopenharmony_ci  "assert(e === 1);"
78425bb815Sopenharmony_ci)({a:1, b:3}, [3], {a:1, b:2, dd:4});
79425bb815Sopenharmony_ci
80425bb815Sopenharmony_cifunction m()
81425bb815Sopenharmony_ci{
82425bb815Sopenharmony_ci  var prop_name = "x";
83425bb815Sopenharmony_ci  var def_val = 123;
84425bb815Sopenharmony_ci
85425bb815Sopenharmony_ci  function g({[prop_name]: a, b = def_val })
86425bb815Sopenharmony_ci  {
87425bb815Sopenharmony_ci    assert(a === 12);
88425bb815Sopenharmony_ci    assert(b === 123);
89425bb815Sopenharmony_ci  }
90425bb815Sopenharmony_ci
91425bb815Sopenharmony_ci  g({ x:12 })
92425bb815Sopenharmony_ci}
93425bb815Sopenharmony_cim();
94