diff options
Diffstat (limited to 'deps/v8/test/mjsunit/es6/object-literals-super.js')
-rw-r--r-- | deps/v8/test/mjsunit/es6/object-literals-super.js | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/es6/object-literals-super.js b/deps/v8/test/mjsunit/es6/object-literals-super.js new file mode 100644 index 0000000000..b31a498767 --- /dev/null +++ b/deps/v8/test/mjsunit/es6/object-literals-super.js @@ -0,0 +1,182 @@ +// Copyright 2014 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax + + +(function TestHomeObject() { + var object = { + method() { + return super.method(); + }, + get getter() { + return super.getter; + }, + set setter(v) { + super.setter = v; + }, + get accessor() { + return super.accessor; + }, + set accessor(v) { + super.accessor = v; + }, + + methodNoSuper() {}, + get getterNoSuper() {}, + set setterNoSuper(v) {}, + get accessorNoSuper() {}, + set accessorNoSuper(v) {}, + propertyNoSuper: function() {}, + propertyWithParenNoSuper: (function() {}), + propertyWithParensNoSuper: ((function() {})) + }; + + assertEquals(object, object.method[%HomeObjectSymbol()]); + var desc = Object.getOwnPropertyDescriptor(object, 'getter'); + assertEquals(object, desc.get[%HomeObjectSymbol()]); + desc = Object.getOwnPropertyDescriptor(object, 'setter'); + assertEquals(object, desc.set[%HomeObjectSymbol()]); + desc = Object.getOwnPropertyDescriptor(object, 'accessor'); + assertEquals(object, desc.get[%HomeObjectSymbol()]); + assertEquals(object, desc.set[%HomeObjectSymbol()]); + + assertEquals(undefined, object.methodNoSuper[%HomeObjectSymbol()]); + desc = Object.getOwnPropertyDescriptor(object, 'getterNoSuper'); + assertEquals(undefined, desc.get[%HomeObjectSymbol()]); + desc = Object.getOwnPropertyDescriptor(object, 'setterNoSuper'); + assertEquals(undefined, desc.set[%HomeObjectSymbol()]); + desc = Object.getOwnPropertyDescriptor(object, 'accessorNoSuper'); + assertEquals(undefined, desc.get[%HomeObjectSymbol()]); + assertEquals(undefined, desc.set[%HomeObjectSymbol()]); + assertEquals(undefined, object.propertyNoSuper[%HomeObjectSymbol()]); + assertEquals(undefined, object.propertyWithParenNoSuper[%HomeObjectSymbol()]); + assertEquals(undefined, + object.propertyWithParensNoSuper[%HomeObjectSymbol()]); +})(); + + +(function TestMethod() { + var object = { + __proto__: { + method(x) { + return 'proto' + x; + } + }, + method(x) { + return super.method(x); + } + }; + assertEquals('proto42', object.method(42)); +})(); + + +(function TestGetter() { + var object = { + __proto__: { + _x: 42, + get x() { + return 'proto' + this._x; + } + }, + get x() { + return super.x; + } + }; + assertEquals('proto42', object.x); +})(); + + +(function TestSetter() { + var object = { + __proto__: { + _x: 0, + set x(v) { + return this._x = v; + } + }, + set x(v) { + super.x = v; + } + }; + assertEquals(1, object.x = 1); + assertEquals(1, object._x); + assertEquals(0, Object.getPrototypeOf(object)._x); +})(); + + +(function TestOptimized() { + // Object literals without any accessors get optimized. + var object = { + method() { + return super.toString; + } + }; + assertEquals(Object.prototype.toString, object.method()); +})(); + + +(function TestConciseGenerator() { + var o = { + __proto__: { + m() { + return 42; + } + }, + *g() { + yield super.m(); + }, + }; + + assertEquals(42, o.g().next().value); +})(); + + +(function TestSuperPropertyInEval() { + var y = 3; + var p = { + m() { return 1; }, + get x() { return 2; } + }; + var o = { + __proto__: p, + evalM() { + assertEquals(1, eval('super.m()')); + }, + evalX() { + assertEquals(2, eval('super.x')); + }, + globalEval1() { + assertThrows('super.x', SyntaxError); + assertThrows('super.m()', SyntaxError); + }, + globalEval2() { + super.x; + assertThrows('super.x', SyntaxError); + assertThrows('super.m()', SyntaxError); + } + }; + o.evalM(); + o.evalX(); + o.globalEval1(); + o.globalEval2(); +})(); + + +(function TestSuperPropertyInArrow() { + var y = 3; + var p = { + m() { return 1; }, + get x() { return 2; } + }; + var o = { + __proto__: p, + arrow() { + assertSame(super.x, (() => super.x)()); + assertSame(super.m(), (() => super.m())()); + return (() => super.m())(); + } + }; + assertSame(1, o.arrow()); +})(); |