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/* Test object literals. */
16425bb815Sopenharmony_ci
17425bb815Sopenharmony_civar local = 0;
18425bb815Sopenharmony_ci
19425bb815Sopenharmony_cifunction f(x)
20425bb815Sopenharmony_ci{
21425bb815Sopenharmony_ci  return x + "et";
22425bb815Sopenharmony_ci}
23425bb815Sopenharmony_ci
24425bb815Sopenharmony_civar o = {
25425bb815Sopenharmony_ci  a: 5,
26425bb815Sopenharmony_ci  [
27425bb815Sopenharmony_ci    "pr" +
28425bb815Sopenharmony_ci    "op"]  : 6,
29425bb815Sopenharmony_ci
30425bb815Sopenharmony_ci  [f
31425bb815Sopenharmony_ci   ("g")
32425bb815Sopenharmony_ci   ]
33425bb815Sopenharmony_ci   : 7,
34425bb815Sopenharmony_ci
35425bb815Sopenharmony_ci  [f(
36425bb815Sopenharmony_ci   "s"
37425bb815Sopenharmony_ci   )  ]: 8,
38425bb815Sopenharmony_ci
39425bb815Sopenharmony_ci  get    [f
40425bb815Sopenharmony_ci    ("res")
41425bb815Sopenharmony_ci    ]
42425bb815Sopenharmony_ci    () { return 9 },
43425bb815Sopenharmony_ci
44425bb815Sopenharmony_ci  set
45425bb815Sopenharmony_ci  [f("res")](
46425bb815Sopenharmony_ci   value) { local = value },
47425bb815Sopenharmony_ci};
48425bb815Sopenharmony_ci
49425bb815Sopenharmony_ciassert(o.a === 5);
50425bb815Sopenharmony_ciassert(o.prop === 6);
51425bb815Sopenharmony_ciassert(o.get === 7);
52425bb815Sopenharmony_ciassert(o.set === 8);
53425bb815Sopenharmony_ci
54425bb815Sopenharmony_cilocal = 0;
55425bb815Sopenharmony_cio.reset = 10;
56425bb815Sopenharmony_ciassert(local === 10);
57425bb815Sopenharmony_ciassert(o.reset === 9);
58425bb815Sopenharmony_ci
59425bb815Sopenharmony_ci/* Test classes. */
60425bb815Sopenharmony_ci
61425bb815Sopenharmony_cifunction fxy() {
62425bb815Sopenharmony_ci  return "xy";
63425bb815Sopenharmony_ci}
64425bb815Sopenharmony_ci
65425bb815Sopenharmony_ciclass C {
66425bb815Sopenharmony_ci  [fxy()] () {
67425bb815Sopenharmony_ci    return 6;
68425bb815Sopenharmony_ci  }
69425bb815Sopenharmony_ci
70425bb815Sopenharmony_ci  static [fxy()]() {
71425bb815Sopenharmony_ci    return 7;
72425bb815Sopenharmony_ci  }
73425bb815Sopenharmony_ci
74425bb815Sopenharmony_ci  get ["a" + 1]() {
75425bb815Sopenharmony_ci    return 8;
76425bb815Sopenharmony_ci  }
77425bb815Sopenharmony_ci
78425bb815Sopenharmony_ci  set ["a" + 1](x) {
79425bb815Sopenharmony_ci    local = x;
80425bb815Sopenharmony_ci  }
81425bb815Sopenharmony_ci
82425bb815Sopenharmony_ci  static get ["a" + 1]() {
83425bb815Sopenharmony_ci    return 10;
84425bb815Sopenharmony_ci  }
85425bb815Sopenharmony_ci
86425bb815Sopenharmony_ci  static set ["a" + 1](x) {
87425bb815Sopenharmony_ci    local = x;
88425bb815Sopenharmony_ci  }
89425bb815Sopenharmony_ci};
90425bb815Sopenharmony_ci
91425bb815Sopenharmony_civar c = new C;
92425bb815Sopenharmony_ciassert(c.xy() === 6);
93425bb815Sopenharmony_ciassert(C.xy() === 7);
94425bb815Sopenharmony_ci
95425bb815Sopenharmony_cilocal = 0;
96425bb815Sopenharmony_cic.a1 = 9;
97425bb815Sopenharmony_ciassert(local === 9);
98425bb815Sopenharmony_ciassert(c.a1 === 8);
99425bb815Sopenharmony_ci
100425bb815Sopenharmony_cilocal = 0;
101425bb815Sopenharmony_ciC.a1 = 11;
102425bb815Sopenharmony_ciassert(local === 11);
103425bb815Sopenharmony_ciassert(C.a1 === 10);
104425bb815Sopenharmony_ci
105425bb815Sopenharmony_ciclass D {
106425bb815Sopenharmony_ci  [(() => "const" + "ructor")()] (arg) {
107425bb815Sopenharmony_ci    this.a = arg;
108425bb815Sopenharmony_ci  }
109425bb815Sopenharmony_ci}
110425bb815Sopenharmony_ci
111425bb815Sopenharmony_civar d = new D;
112425bb815Sopenharmony_ciassert(d.a === undefined);
113425bb815Sopenharmony_cid.constructor(7);
114425bb815Sopenharmony_ciassert(d.a === 7);
115425bb815Sopenharmony_ci
116425bb815Sopenharmony_ciclass E {
117425bb815Sopenharmony_ci  get ["_constructor_".substring(1,12)]() {
118425bb815Sopenharmony_ci    return this.a;
119425bb815Sopenharmony_ci  }
120425bb815Sopenharmony_ci}
121425bb815Sopenharmony_ci
122425bb815Sopenharmony_civar e = new E;
123425bb815Sopenharmony_ciassert(e.constructor === undefined);
124425bb815Sopenharmony_cie.a = 8;
125425bb815Sopenharmony_ciassert(e.constructor === 8);
126425bb815Sopenharmony_ci
127425bb815Sopenharmony_cifunction throw_error(snippet)
128425bb815Sopenharmony_ci{
129425bb815Sopenharmony_ci  try {
130425bb815Sopenharmony_ci    eval(snippet);
131425bb815Sopenharmony_ci    assert(false);
132425bb815Sopenharmony_ci  } catch (e) {
133425bb815Sopenharmony_ci    assert(e instanceof TypeError);
134425bb815Sopenharmony_ci  }
135425bb815Sopenharmony_ci}
136425bb815Sopenharmony_ci
137425bb815Sopenharmony_cithrow_error("new class { static ['proto' + 'type'] () {} }");
138425bb815Sopenharmony_cithrow_error("new class { static get ['proto' + 'type'] () {} }");
139425bb815Sopenharmony_cithrow_error("new class { static set ['proto' + 'type'] (x) {} }");
140