| // Copyright 2018 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. |
| |
| "use strict"; |
| |
| |
| // Data property last. |
| |
| { |
| const o = { |
| get foo() { return 666 }, |
| foo: 42, |
| }; |
| assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value); |
| } |
| |
| { |
| const o = { |
| set foo(_) { }, |
| foo: 42, |
| }; |
| assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value); |
| } |
| |
| { |
| const o = { |
| get foo() { return 666 }, |
| set foo(_) { }, |
| foo: 42, |
| }; |
| assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value); |
| } |
| |
| { |
| const o = { |
| get foo() { return 666 }, |
| set ['foo'.slice()](_) { }, |
| foo: 42, |
| }; |
| assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value); |
| } |
| |
| { |
| const o = { |
| get ['foo'.slice()]() { return 666 }, |
| set ['foo'.slice()](_) { }, |
| foo: 42, |
| }; |
| assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').value); |
| } |
| |
| |
| // Data property first. |
| |
| { |
| const o = { |
| foo: 666, |
| get foo() { return 42 }, |
| }; |
| assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get()); |
| } |
| |
| { |
| const o = { |
| foo: 666, |
| set foo(_) { }, |
| }; |
| assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').get); |
| assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').value); |
| } |
| |
| { |
| const o = { |
| foo: 666, |
| get foo() { return 42 }, |
| set foo(_) { }, |
| }; |
| assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get()); |
| } |
| |
| { |
| const o = { |
| foo: 666, |
| get ['foo'.slice()]() { return 42 }, |
| set foo(_) { }, |
| }; |
| assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get()); |
| } |
| |
| { |
| const o = { |
| foo: 666, |
| get ['foo'.slice()]() { return 42 }, |
| set ['foo'](_) { }, |
| }; |
| assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get()); |
| } |
| |
| |
| // Data property in the middle. |
| |
| { |
| const o = { |
| get foo() { return 42 }, |
| foo: 666, |
| set foo(_) { }, |
| }; |
| assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').get); |
| assertEquals(undefined, Object.getOwnPropertyDescriptor(o, 'foo').set()); |
| } |
| |
| { |
| const o = { |
| set foo(_) { }, |
| foo: 666, |
| get foo() { return 42 }, |
| }; |
| assertEquals(42, Object.getOwnPropertyDescriptor(o, 'foo').get()); |
| } |