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