Index: test/mjsunit/harmony/object-literals-method.js |
diff --git a/test/mjsunit/harmony/object-literals-method.js b/test/mjsunit/harmony/object-literals-method.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2af0859424e9c6265a7ff42e530d8637d3b4384b |
--- /dev/null |
+++ b/test/mjsunit/harmony/object-literals-method.js |
@@ -0,0 +1,123 @@ |
+// 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-object-literals --allow-natives-syntax |
+ |
+ |
+(function TestDescriptor() { |
+ var object = { |
+ method() { |
+ return 42; |
+ } |
+ }; |
+ assertEquals(42, object.method()); |
+})(); |
+ |
+ |
+(function TestDescriptor() { |
+ var object = { |
+ method() { |
+ return 42; |
+ } |
+ }; |
+ |
+ var desc = Object.getOwnPropertyDescriptor(object, 'method'); |
+ assertTrue(desc.enumerable); |
+ assertTrue(desc.configurable); |
+ assertTrue(desc.writable); |
+ assertEquals('function', typeof desc.value); |
+ |
+ assertEquals(42, desc.value()); |
+})(); |
+ |
+ |
+(function TestProto() { |
+ var object = { |
+ method() { |
+ return 42; |
+ } |
+ }; |
+ |
+ assertEquals(Function.prototype, Object.getPrototypeOf(object.method)); |
+})(); |
+ |
+ |
+(function TestNotConstructable() { |
+ var object = { |
+ method() { |
+ return 42; |
+ } |
+ }; |
+ |
+ assertThrows(function() { |
+ new object.method; |
+ }); |
+})(); |
+ |
+ |
+(function TestFunctionName() { |
+ var object = { |
+ method() { |
+ return 42; |
+ }, |
+ 1() {}, |
+ 2.0() {} |
+ }; |
+ var f = object.method; |
+ assertEquals('method', f.name); |
+ var g = object[1]; |
+ assertEquals('1', g.name); |
+ |
+ var h = object[2]; |
+ assertEquals('2', h.name); |
+})(); |
+ |
+ |
+(function TestNoBinding() { |
+ var method = 'local'; |
+ var calls = 0; |
+ var object = { |
+ method() { |
+ calls++; |
+ assertEquals('local', method); |
+ } |
+ }; |
+ object.method(); |
+ assertEquals(1, calls); |
+})(); |
+ |
+ |
+(function TestNoPrototype() { |
+ var object = { |
+ method() { |
+ return 42; |
+ } |
+ }; |
+ var f = object.method; |
+ assertFalse(f.hasOwnProperty('prototype')); |
+ assertEquals(undefined, f.prototype); |
+ |
+ f.prototype = 42; |
+ assertEquals(42, f.prototype); |
+})(); |
+ |
+ |
+(function TestToString() { |
+ var object = { |
+ method() { 42; } |
+ }; |
+ assertEquals('method() { 42; }', object.method.toString()); |
+})(); |
+ |
+ |
+(function TestOptimized() { |
+ var object = { |
+ method() { return 42; } |
+ }; |
+ assertEquals(42, object.method()); |
+ assertEquals(42, object.method()); |
+ %OptimizeFunctionOnNextCall(object.method); |
+ assertEquals(42, object.method()); |
+ assertFalse(object.method.hasOwnProperty('prototype')); |
+})(); |