diff --git a/test/language/expressions/object/method-definition/generator-invoke-ctor.js b/test/language/expressions/object/method-definition/generator-invoke-ctor.js new file mode 100644 index 0000000000000000000000000000000000000000..6bbe5d855b4f156d28ed8bf5e5792f285b6c8f36 --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-invoke-ctor.js @@ -0,0 +1,15 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Generator functions declared as methods may be used as constructors. +es6id: 14.4.13 +features: [generators] +---*/ + +var method = { *method() {} }.method; + +var instance = new method(); + +assert.sameValue(instance instanceof method, true); diff --git a/test/language/expressions/object/method-definition/generator-invoke-fn-no-strict.js b/test/language/expressions/object/method-definition/generator-invoke-fn-no-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..cfe10af7d23e8fe298df357f7b36e88ffecf4093 --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-invoke-fn-no-strict.js @@ -0,0 +1,23 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + In the absence of the "use strict" directive, generator functions declared + as methods obey "global" ThisMode semantics. +es6id: 14.4.13 +flags: [noStrict] +features: [generators] +---*/ + +var global = (function() { return this; }()); +var thisValue = null; +var method = { + *method() { + thisValue = this; + } +}.method; + +method().next(); + +assert.sameValue(thisValue, global); diff --git a/test/language/expressions/object/method-definition/generator-invoke-fn-strict.js b/test/language/expressions/object/method-definition/generator-invoke-fn-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..2eb1841490155a9bcf0bbea4baf7096c5ad29139 --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-invoke-fn-strict.js @@ -0,0 +1,23 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + In the presence of the "use strict" directive, generator functions declared + as methods obey "strict" ThisMode semantics. +es6id: 14.4.13 +flags: [noStrict] +features: [generators] +---*/ + +var thisValue = null; +var method = { + *method() { + 'use strict'; + thisValue = this; + } +}.method; + +method().next(); + +assert.sameValue(thisValue, undefined); diff --git a/test/language/expressions/object/method-definition/generator-length.js b/test/language/expressions/object/method-definition/generator-length.js new file mode 100644 index 0000000000000000000000000000000000000000..1ca0321b434b88a65375df5ef004c30f9b5d955d --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-length.js @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Generator functions declared as methods have a `length` property that + describes the number of formal parameters. +es6id: 14.4.13 +includes: [propertyHelper.js] +features: [generators] +---*/ + +var method = { *method(a, b, c) {} }.method; + +assert.sameValue(method.length, 3); +verifyNotEnumerable(method, 'length'); +verifyNotWritable(method, 'length'); +verifyConfigurable(method, 'length'); diff --git a/test/language/expressions/object/method-definition/generator-name-prop-string.js b/test/language/expressions/object/method-definition/generator-name-prop-string.js new file mode 100644 index 0000000000000000000000000000000000000000..37d7c25c7277443dfaf4682f6cdb031b815dd1c9 --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-name-prop-string.js @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Generator functions declared as methods are assigned a `name` property + according to the string value of their property name. +es6id: 14.4.13 +includes: [propertyHelper.js] +features: [generators] +---*/ + +var method = { *method() {} }.method; + +assert.sameValue(method.name, 'method'); +verifyNotEnumerable(method, 'name'); +verifyNotWritable(method, 'name'); +verifyConfigurable(method, 'name'); diff --git a/test/language/expressions/object/method-definition/generator-name-prop-symbol.js b/test/language/expressions/object/method-definition/generator-name-prop-symbol.js new file mode 100644 index 0000000000000000000000000000000000000000..df23c9c80c8d3c365eb92740da5cb4a3f7b2e514 --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-name-prop-symbol.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Generator functions declared as methods are assigned a `name` property + according to the string value of their property name. +es6id: 14.4.13 +includes: [propertyHelper.js] +features: [Symbol, generators] +---*/ + +var name = Symbol('method'); +var method = { *[name]() {} }[name]; + +assert.sameValue(method.name, '[method]'); +verifyNotEnumerable(method, 'name'); +verifyNotWritable(method, 'name'); +verifyConfigurable(method, 'name'); diff --git a/test/language/expressions/object/method-definition/generator-param-id-yield.js b/test/language/expressions/object/method-definition/generator-param-id-yield.js new file mode 100644 index 0000000000000000000000000000000000000000..ac5e6786980a1d09d78e0ba56a02e2f4ac69a692 --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-param-id-yield.js @@ -0,0 +1,16 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + The BindingIdentifier of a SingleNameBinding witihn the FormalParameters of + a GeneratorMethod may not be the `yield` keyword. +es6id: 14.4 +features: [generators] +flags: [noStrict] +negative: SyntaxError +---*/ + +({ + *method(yield) {} +}); diff --git a/test/language/expressions/object/method-definition/generator-param-init-yield.js b/test/language/expressions/object/method-definition/generator-param-init-yield.js new file mode 100644 index 0000000000000000000000000000000000000000..d09bc6d88dcb9cd1aab96e1bb72280205f7f3087 --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-param-init-yield.js @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + The Initializer of a SingleNameBinding witihn the FormalParameters of a + GeneratorMethod may not contain the `yield` keyword. +es6id: 14.4 +features: [generators] +flags: [noStrict] +negative: SyntaxError +---*/ + +(function*() { + ({ + *method(x = yield) {} + }); +}); diff --git a/test/language/expressions/object/method-definition/generator-shadow-parameter-const.js b/test/language/expressions/object/method-definition/generator-param-redecl-const.js similarity index 100% rename from test/language/expressions/object/method-definition/generator-shadow-parameter-const.js rename to test/language/expressions/object/method-definition/generator-param-redecl-const.js diff --git a/test/language/expressions/object/method-definition/generator-shadow-parameter-let.js b/test/language/expressions/object/method-definition/generator-param-redecl-let.js similarity index 100% rename from test/language/expressions/object/method-definition/generator-shadow-parameter-let.js rename to test/language/expressions/object/method-definition/generator-param-redecl-let.js diff --git a/test/language/expressions/object/method-definition/generator-params.js b/test/language/expressions/object/method-definition/generator-params.js new file mode 100644 index 0000000000000000000000000000000000000000..ca6f69469198cf895d6745a792320b00c0bc30e7 --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-params.js @@ -0,0 +1,28 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Generator functions declared as methods honor their declared formal + parameters. +es6id: 14.4.13 +features: [generators] +---*/ + +var value1 = {}; +var value2 = {}; +var value3 = {}; +var arg1, arg2, arg3; +var obj = { + *method(a, b, c) { + arg1 = a; + arg2 = b; + arg3 = c; + } +}; + +obj.method(value1, value2, value3).next(); + +assert.sameValue(arg1, value1); +assert.sameValue(arg2, value2); +assert.sameValue(arg3, value3); diff --git a/test/language/expressions/object/method-definition/generator-prop-name-eval-error.js b/test/language/expressions/object/method-definition/generator-prop-name-eval-error.js new file mode 100644 index 0000000000000000000000000000000000000000..87c139739157fbf0f62d81e4cfcdd41f4b95dfd3 --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-prop-name-eval-error.js @@ -0,0 +1,15 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Errors thrown during method definition are forwarded to the runtime. +es6id: 14.4.13 +features: [generators] +---*/ + +assert.throws(Test262Error, function() { + ({ + *[(function() { throw new Test262Error(); }())]() {} + }); +}); diff --git a/test/language/expressions/object/method-definition/generator-prop-name-yield-expr.js b/test/language/expressions/object/method-definition/generator-prop-name-yield-expr.js new file mode 100644 index 0000000000000000000000000000000000000000..2ccf6b43f134274bd959113e7d78a8c6f8629e94 --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-prop-name-yield-expr.js @@ -0,0 +1,33 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + When the `yield` keyword occurs within the PropertyName of a + GeneratorMethod within a generator function, it behaves as a + YieldExpression. +es6id: 14.4 +features: [generators] +flags: [noStrict] +---*/ + +var obj = null; +var yield = 'propNameViaIdentifier'; +var iter = (function*() { + obj = { + *[yield]() {} + }; +})(); + +iter.next(); + +assert.sameValue(obj, null); + +iter.next('propNameViaExpression'); + +assert.sameValue( + Object.hasOwnProperty.call(obj, 'propNameViaIdentifier'), false +); +assert.sameValue( + Object.hasOwnProperty.call(obj, 'propNameViaExpression'), true +); diff --git a/test/language/expressions/object/method-definition/generator-prop-name-yield-id.js b/test/language/expressions/object/method-definition/generator-prop-name-yield-id.js new file mode 100644 index 0000000000000000000000000000000000000000..a844383dae62a839dd8b16e6204614406690830e --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-prop-name-yield-id.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + When the `yield` keyword occurs within the PropertyName of a + GeneratorMethod outside of a generator function, it behaves as an + Identifier. +es6id: 14.4 +features: [generators] +flags: [noStrict] +---*/ + +var yield = 'propName'; +var obj = { + *[yield]() {} +}; + +assert.sameValue(Object.hasOwnProperty.call(obj, 'propName'), true); diff --git a/test/language/expressions/object/method-definition/generator-property-desc.js b/test/language/expressions/object/method-definition/generator-property-desc.js new file mode 100644 index 0000000000000000000000000000000000000000..ae4b4310f933e277c3f0eb2afbc98e214cbc13dd --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-property-desc.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Generator functions declared as methods are defined as enumerable, + writable, configurable properties on the initialized object. +es6id: 14.4.13 +includes: [propertyHelper.js] +features: [generators] +---*/ + +var obj = { *method() {} }; + +verifyEnumerable(obj, 'method'); +verifyWritable(obj, 'method'); +verifyConfigurable(obj, 'method'); diff --git a/test/language/expressions/object/method-definition/generator-prototype-prop.js b/test/language/expressions/object/method-definition/generator-prototype-prop.js new file mode 100644 index 0000000000000000000000000000000000000000..4eb0c0e437becfb57e470d645b9daf71ba9e8426 --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-prototype-prop.js @@ -0,0 +1,22 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Generator functions declared as methods define a `prototype` property. +es6id: 14.4.13 +includes: [propertyHelper.js] +features: [generators] +---*/ + +var GeneratorPrototype = Object.getPrototypeOf(function* () {}).prototype; +var method = { *method() {} }.method; + +verifyNotEnumerable(method, 'prototype'); +verifyWritable(method, 'prototype'); +verifyNotConfigurable(method, 'prototype'); + +assert.sameValue( + Object.getPrototypeOf(method.prototype), + GeneratorPrototype +); diff --git a/test/language/expressions/object/method-definition/generator-prototype.js b/test/language/expressions/object/method-definition/generator-prototype.js new file mode 100644 index 0000000000000000000000000000000000000000..245a0a199bcfea0228b3a8f33083836bf543907d --- /dev/null +++ b/test/language/expressions/object/method-definition/generator-prototype.js @@ -0,0 +1,16 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + The prototype of generator functions declared as methods is the + Generator Prototype. +es6id: 14.4.13 +features: [generators] +---*/ + +var obj = { *method() {} }; +assert.sameValue( + Object.getPrototypeOf(obj.method), + Object.getPrototypeOf(function*() {}) +); diff --git a/test/language/expressions/object/method-definition/generator-bodySuperCall.js b/test/language/expressions/object/method-definition/generator-super-call-body.js similarity index 100% rename from test/language/expressions/object/method-definition/generator-bodySuperCall.js rename to test/language/expressions/object/method-definition/generator-super-call-body.js diff --git a/test/language/expressions/object/method-definition/generator-argSuperCall.js b/test/language/expressions/object/method-definition/generator-super-call-param.js similarity index 100% rename from test/language/expressions/object/method-definition/generator-argSuperCall.js rename to test/language/expressions/object/method-definition/generator-super-call-param.js diff --git a/test/language/expressions/object/method-definition/generator-bodySuperProperty.js b/test/language/expressions/object/method-definition/generator-super-prop-body.js similarity index 67% rename from test/language/expressions/object/method-definition/generator-bodySuperProperty.js rename to test/language/expressions/object/method-definition/generator-super-prop-body.js index 741fae468ceacdb83c54c21d9c99e8f82add7a93..d4c4a310aaaea4a3d3cf969ae1de5f8b4be85f2a 100644 --- a/test/language/expressions/object/method-definition/generator-bodySuperProperty.js +++ b/test/language/expressions/object/method-definition/generator-super-prop-body.js @@ -10,8 +10,14 @@ author: Sam Mikes description: GeneratorMethod body uses SuperProperty (allowed) ---*/ +var obj; + var obj = { - *foo(a) { - yield super.x; - } + *foo() { + return super.toString; + } }; + +obj.toString = null; + +assert.sameValue(obj.foo().next().value, Object.prototype.toString); diff --git a/test/language/expressions/object/method-definition/generator-argSuperProperty.js b/test/language/expressions/object/method-definition/generator-super-prop-param.js similarity index 70% rename from test/language/expressions/object/method-definition/generator-argSuperProperty.js rename to test/language/expressions/object/method-definition/generator-super-prop-param.js index 5c7a75d45fcc84b232a04ac7d7e75a3aaf26d3cc..19f1c395995142e25cfc12437bad06854cd0dfaf 100644 --- a/test/language/expressions/object/method-definition/generator-argSuperProperty.js +++ b/test/language/expressions/object/method-definition/generator-super-prop-param.js @@ -12,7 +12,11 @@ features: [ default-arg, generator, super ] ---*/ var obj = { - *foo(a = super.x) { - yield; - } + *foo(a = super.toString) { + return a; + } }; + +obj.toString = null; + +assert.sameValue(obj.foo().next().value, Object.prototype.toString); diff --git a/test/language/expressions/object/method-definition/name-invoke-ctor.js b/test/language/expressions/object/method-definition/name-invoke-ctor.js new file mode 100644 index 0000000000000000000000000000000000000000..b4b29b086d017d08a7a8d4540b415b6a14e8823a --- /dev/null +++ b/test/language/expressions/object/method-definition/name-invoke-ctor.js @@ -0,0 +1,13 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Functions declared as methods may not be used as constructors. +es6id: 14.3.8 +---*/ + +var obj = { method() {} }; +assert.throws(TypeError, function() { + new obj.method(); +}); diff --git a/test/language/expressions/object/method-definition/name-invoke-fn-no-strict.js b/test/language/expressions/object/method-definition/name-invoke-fn-no-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..a393b0d0519582c5c087ac276f50956e73d01e9a --- /dev/null +++ b/test/language/expressions/object/method-definition/name-invoke-fn-no-strict.js @@ -0,0 +1,22 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + In the absence of the "use strict" directive, functions declared as methods + obey "global" ThisMode semantics. +es6id: 14.3.8 +flags: [noStrict] +---*/ + +var global = (function() { return this; }()); +var thisValue = null; +var method = { + method() { + thisValue = this; + } +}.method; + +method(); + +assert.sameValue(thisValue, global); diff --git a/test/language/expressions/object/method-definition/name-invoke-fn-strict.js b/test/language/expressions/object/method-definition/name-invoke-fn-strict.js new file mode 100644 index 0000000000000000000000000000000000000000..94c59b5a956b219c465d2a3c14bca9ce8090ae7e --- /dev/null +++ b/test/language/expressions/object/method-definition/name-invoke-fn-strict.js @@ -0,0 +1,22 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + In the presence of the "use strict" directive, functions declared as + methods obey "strict" ThisMode semantics. +es6id: 14.3.8 +flags: [noStrict] +---*/ + +var thisValue = null; +var method = { + method() { + 'use strict'; + thisValue = this; + } +}.method; + +method(); + +assert.sameValue(thisValue, undefined); diff --git a/test/language/expressions/object/method-definition/name-length.js b/test/language/expressions/object/method-definition/name-length.js new file mode 100644 index 0000000000000000000000000000000000000000..dc0178eb6f6a1b27fd1397885c56d60c8c8ed39e --- /dev/null +++ b/test/language/expressions/object/method-definition/name-length.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Functions declared as methods have a `length` property that describes the + number of formal parameters. +es6id: 14.3.8 +includes: [propertyHelper.js] +---*/ + +var method = { method(a, b, c) {} }.method; + +assert.sameValue(method.length, 3); +verifyNotEnumerable(method, 'length'); +verifyNotWritable(method, 'length'); +verifyConfigurable(method, 'length'); diff --git a/test/language/expressions/object/method-definition/name-name-prop-string.js b/test/language/expressions/object/method-definition/name-name-prop-string.js new file mode 100644 index 0000000000000000000000000000000000000000..6a56c27d8c6307dc58bc3595af2c168b5b722835 --- /dev/null +++ b/test/language/expressions/object/method-definition/name-name-prop-string.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Functions declared as methods are assigned a `name` property according to + the string value of their property name. +es6id: 14.3.8 +includes: [propertyHelper.js] +---*/ + +var method = { method() {} }.method; + +assert.sameValue(method.name, 'method'); +verifyNotEnumerable(method, 'name'); +verifyNotWritable(method, 'name'); +verifyConfigurable(method, 'name'); diff --git a/test/language/expressions/object/method-definition/name-name-prop-symbol.js b/test/language/expressions/object/method-definition/name-name-prop-symbol.js new file mode 100644 index 0000000000000000000000000000000000000000..338bfb21908ddaa5a73ee4c88bfa39269489222e --- /dev/null +++ b/test/language/expressions/object/method-definition/name-name-prop-symbol.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Functions declared as methods are assigned a `name` property according to + the string value of their property name. +es6id: 14.3.8 +includes: [propertyHelper.js] +features: [Symbol] +---*/ + +var name = Symbol('method'); +var method = { [name]() {} }[name]; + +assert.sameValue(method.name, '[method]'); +verifyNotEnumerable(method, 'name'); +verifyNotWritable(method, 'name'); +verifyConfigurable(method, 'name'); diff --git a/test/language/expressions/object/method-definition/name-param-id-yield.js b/test/language/expressions/object/method-definition/name-param-id-yield.js new file mode 100644 index 0000000000000000000000000000000000000000..a2ed2c273b25bac04b836982ea2b06b3274312be --- /dev/null +++ b/test/language/expressions/object/method-definition/name-param-id-yield.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + The BindingIdentifier of a SingleNameBinding witihn the FormalParameters of + a non-generator MethodDefinition may be the `yield` keyword. +es6id: 14.3 +flags: [noStrict] +---*/ + +var obj = { + method(yield) { + return yield; + } +}; + + +assert.sameValue(obj.method('arg'), 'arg'); diff --git a/test/language/expressions/object/method-definition/name-param-init-yield.js b/test/language/expressions/object/method-definition/name-param-init-yield.js new file mode 100644 index 0000000000000000000000000000000000000000..9763575baf6c5e138691adae760e45a1ed5ac509 --- /dev/null +++ b/test/language/expressions/object/method-definition/name-param-init-yield.js @@ -0,0 +1,21 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + When the `yield` keyword occurs within the Initializer of a + SingleNameBinding within the FormalParameters of a non-generator + MethodDefinition, it behaves as an Identifier. +es6id: 14.3 +flags: [noStrict] +---*/ + +var yield = 'default'; +var obj = { + method(x = yield) { + return x; + } +}; + + +assert.sameValue(obj.method(), 'default'); diff --git a/test/language/expressions/object/method-definition/name-param-redecl.js b/test/language/expressions/object/method-definition/name-param-redecl.js new file mode 100644 index 0000000000000000000000000000000000000000..d435a450b59702b5fd37045af1b871730eee7a71 --- /dev/null +++ b/test/language/expressions/object/method-definition/name-param-redecl.js @@ -0,0 +1,17 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + It is a Syntax Error if any element of the BoundNames of + StrictFormalParameters also occurs in the LexicallyDeclaredNames of + FunctionBody. +es6id: 14.3.1 +negative: SyntaxError +---*/ + +var obj = { + method(param) { + let param; + } +}; diff --git a/test/language/expressions/object/method-definition/name-params.js b/test/language/expressions/object/method-definition/name-params.js new file mode 100644 index 0000000000000000000000000000000000000000..5e6b2a4c13d4029768add0b6e08a0b8f49779f89 --- /dev/null +++ b/test/language/expressions/object/method-definition/name-params.js @@ -0,0 +1,26 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Functions declared as methods honor their declared formal parameters. +es6id: 14.3.8 +---*/ + +var value1 = {}; +var value2 = {}; +var value3 = {}; +var arg1, arg2, arg3; +var obj = { + method(a, b, c) { + arg1 = a; + arg2 = b; + arg3 = c; + } +}; + +obj.method(value1, value2, value3); + +assert.sameValue(arg1, value1); +assert.sameValue(arg2, value2); +assert.sameValue(arg3, value3); diff --git a/test/language/expressions/object/method-definition/name-prop-name-eval-error.js b/test/language/expressions/object/method-definition/name-prop-name-eval-error.js new file mode 100644 index 0000000000000000000000000000000000000000..895e00ddf9ce8a3256815b484f284c5801507002 --- /dev/null +++ b/test/language/expressions/object/method-definition/name-prop-name-eval-error.js @@ -0,0 +1,14 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Errors thrown during method definition are forwarded to the runtime. +es6id: 14.3.8 +---*/ + +assert.throws(Test262Error, function() { + ({ + [(function() { throw new Test262Error(); }())]() {} + }); +}); diff --git a/test/language/expressions/object/method-definition/name-prop-name-yield-expr.js b/test/language/expressions/object/method-definition/name-prop-name-yield-expr.js new file mode 100644 index 0000000000000000000000000000000000000000..85591f3cdc637148f7532b99d1d261c969291014 --- /dev/null +++ b/test/language/expressions/object/method-definition/name-prop-name-yield-expr.js @@ -0,0 +1,33 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + When the `yield` keyword occurs within the PropertyName of a + non-generator MethodDefinition within a generator function, it behaves as a + YieldExpression. +es6id: 14.3 +features: [generators] +flags: [noStrict] +---*/ + +var obj = null; +var yield = 'propNameViaIdentifier'; +var iter = (function*() { + obj = { + [yield]() {} + }; +})(); + +iter.next(); + +assert.sameValue(obj, null); + +iter.next('propNameViaExpression'); + +assert.sameValue( + Object.hasOwnProperty.call(obj, 'propNameViaIdentifier'), false +); +assert.sameValue( + Object.hasOwnProperty.call(obj, 'propNameViaExpression'), true +); diff --git a/test/language/expressions/object/method-definition/name-prop-name-yield-id.js b/test/language/expressions/object/method-definition/name-prop-name-yield-id.js new file mode 100644 index 0000000000000000000000000000000000000000..d511c3b0924f13849c899c316628be947d5fd740 --- /dev/null +++ b/test/language/expressions/object/method-definition/name-prop-name-yield-id.js @@ -0,0 +1,18 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + When the `yield` keyword occurs within the PropertyName of a + non-generator MethodDefinition outside of a generator function, it behaves + as an Identifier. +es6id: 14.3 +flags: [noStrict] +---*/ + +var yield = 'propName'; +var obj = { + [yield]() {} +}; + +assert.sameValue(Object.hasOwnProperty.call(obj, 'propName'), true); diff --git a/test/language/expressions/object/method-definition/name-property-desc.js b/test/language/expressions/object/method-definition/name-property-desc.js new file mode 100644 index 0000000000000000000000000000000000000000..d69301b4e26b170f5a4e7a6c889c41a373486ceb --- /dev/null +++ b/test/language/expressions/object/method-definition/name-property-desc.js @@ -0,0 +1,16 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Functions declared as methods are defined as enumerable, writable, + configurable properties on the initialized object. +es6id: 14.3.8 +includes: [propertyHelper.js] +---*/ + +var obj = { method() {} }; + +verifyEnumerable(obj, 'method'); +verifyWritable(obj, 'method'); +verifyConfigurable(obj, 'method'); diff --git a/test/language/expressions/object/method-definition/name-prototype-prop.js b/test/language/expressions/object/method-definition/name-prototype-prop.js new file mode 100644 index 0000000000000000000000000000000000000000..fbb862b6b7529c9af32ce5c2f0671bf3e15e953d --- /dev/null +++ b/test/language/expressions/object/method-definition/name-prototype-prop.js @@ -0,0 +1,12 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + Functions declared as methods do not define a `prototype` property. +es6id: 14.3.9 +---*/ + +var method = { method() {} }.method; + +assert.sameValue(Object.hasOwnProperty.call(method, 'prototype'), false); diff --git a/test/language/expressions/object/method-definition/name-prototype.js b/test/language/expressions/object/method-definition/name-prototype.js new file mode 100644 index 0000000000000000000000000000000000000000..8c55bb146b66dc6b6117d1fc936613796242a8be --- /dev/null +++ b/test/language/expressions/object/method-definition/name-prototype.js @@ -0,0 +1,11 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + The prototype of functions declared as methods is the Function prototype. +es6id: 14.3.8 +---*/ + +var obj = { method() {} }; +assert.sameValue(Object.getPrototypeOf(obj.method), Function.prototype); diff --git a/test/language/expressions/object/method-definition/name-super-call-body.js b/test/language/expressions/object/method-definition/name-super-call-body.js new file mode 100644 index 0000000000000000000000000000000000000000..5334201b91487fad0742e062e07319cbc2717a69 --- /dev/null +++ b/test/language/expressions/object/method-definition/name-super-call-body.js @@ -0,0 +1,15 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + It is a Syntax Error if HasDirectSuper of MethodDefinition is true. +es6id: 12.2.5.1 +negative: SyntaxError +---*/ + +({ + method() { + super; + } +}); diff --git a/test/language/expressions/object/method-definition/name-super-call-param.js b/test/language/expressions/object/method-definition/name-super-call-param.js new file mode 100644 index 0000000000000000000000000000000000000000..cf96e2f4b0de98031855bf6e63704bb82ac9c04c --- /dev/null +++ b/test/language/expressions/object/method-definition/name-super-call-param.js @@ -0,0 +1,13 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + It is a Syntax Error if HasDirectSuper of MethodDefinition is true. +es6id: 12.2.5.1 +negative: SyntaxError +---*/ + +({ + method(param = super) {} +}); diff --git a/test/language/expressions/object/method-definition/name-super-prop-body.js b/test/language/expressions/object/method-definition/name-super-prop-body.js new file mode 100644 index 0000000000000000000000000000000000000000..2b15a2aa18196ba2c708a67598baff068639b705 --- /dev/null +++ b/test/language/expressions/object/method-definition/name-super-prop-body.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + The HomeObject of Functions declared as methods is the Object prototype. +es6id: 14.3.8 +features: [super] +---*/ + +var obj = { + method() { + return super.toString; + } +}; + +obj.toString = null; + +assert.sameValue(obj.method(), Object.prototype.toString); diff --git a/test/language/expressions/object/method-definition/name-super-prop-param.js b/test/language/expressions/object/method-definition/name-super-prop-param.js new file mode 100644 index 0000000000000000000000000000000000000000..8734b8ee2c12bf175941bed43e20b062be48e84d --- /dev/null +++ b/test/language/expressions/object/method-definition/name-super-prop-param.js @@ -0,0 +1,19 @@ +// Copyright (C) 2015 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: > + The HomeObject of Functions declared as methods is the Object prototype. +es6id: 14.3.8 +features: [super] +---*/ + +var obj = { + method(x = super.toString) { + return x; + } +}; + +obj.toString = null; + +assert.sameValue(obj.method(), Object.prototype.toString);