Index: test/mjsunit/harmony/object-literals-super.js |
diff --git a/test/mjsunit/harmony/object-literals-super.js b/test/mjsunit/harmony/object-literals-super.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ec22b8a8a32e9609e8893278c1327111e4afd1ad |
--- /dev/null |
+++ b/test/mjsunit/harmony/object-literals-super.js |
@@ -0,0 +1,168 @@ |
+// 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: --harmony-classes --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; |
+ }, |
+ property: function() { |
+ super.property(); |
+ }, |
+ propertyWithParen: (function() { |
+ super.property(); |
+ }), |
+ propertyWithParens: ((function() { |
+ super.property(); |
+ })), |
+ |
+ 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(object, object.property[%HomeObjectSymbol()]); |
+ assertEquals(object, object.propertyWithParen[%HomeObjectSymbol()]); |
+ assertEquals(object, object.propertyWithParens[%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 TestMethodAsProperty() { |
+ var object = { |
+ __proto__: { |
+ method: function(x) { |
+ return 'proto' + x; |
+ } |
+ }, |
+ method: function(x) { |
+ return super.method(x); |
+ } |
+ }; |
+ assertEquals('proto42', object.method(42)); |
+})(); |
+ |
+ |
+(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(); |
+ }, |
+ g2: function*() { |
+ yield super.m() + 1; |
+ }, |
+ g3: (function*() { |
+ yield super.m() + 2; |
+ }) |
+ }; |
+ |
+ assertEquals(42, o.g().next().value); |
+ assertEquals(43, o.g2().next().value); |
+ assertEquals(44, o.g3().next().value); |
+})(); |