1// Copyright JS Foundation and other contributors, http://js.foundation
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15var obj;
16var desc;
17
18obj = { bar: 42 };
19desc = Object.getOwnPropertyDescriptor (obj, 'bar');
20// desc is { configurable: true, enumerable: true, value: 42, writable: true }
21assert (desc.value === 42);
22assert (desc.configurable);
23assert (desc.writable);
24assert (desc.enumerable);
25
26obj = { "foo": "bar" };
27desc = Object.getOwnPropertyDescriptor (obj, 'foo');
28assert (desc.value === "bar");
29
30obj = {};
31Object.defineProperty (obj, 'baz', { value: 8675309, writable: false, enumerable: false });
32desc = Object.getOwnPropertyDescriptor (obj, 'baz');
33// desc is { value: 8675309, writable: false, enumerable: false, configurable: false }
34assert (desc.value === 8675309);
35assert (!desc.configurable);
36assert (!desc.writable);
37assert (!desc.enumerable);
38
39obj = { "0.00001": 1 };
40desc = Object.getOwnPropertyDescriptor (obj, 1e-5);
41assert ( desc.value === 1);
42
43obj = { "123": 1 };
44desc = Object.getOwnPropertyDescriptor (obj, 123);
45assert (desc.value === 1);
46
47obj = { "undefined": 1 };
48var desc1 = Object.getOwnPropertyDescriptor (obj, undefined);
49var desc2 = Object.getOwnPropertyDescriptor (obj, "undefined");
50assert (desc1.value === 1 && desc2.value === 1);
51
52obj = { "0": 1 };
53desc = Object.getOwnPropertyDescriptor (obj, -0);
54assert (desc.value === 1);
55
56obj = { "Hellobj": 42 };
57desc = Object.getOwnPropertyDescriptor (obj, new String ("Hellobj"));
58assert (desc.value === 42);
59
60obj = {};
61desc = Object.getOwnPropertyDescriptor (obj, 'baz');
62assert (desc === undefined);
63
64obj = { get foo() { return obj.bar; }, set foo(a) { obj.bar = a; }, bar: 0 };
65desc = Object.getOwnPropertyDescriptor(obj, 'foo');
66// d is { configurable: true, enumerable: true, get: /*the getter function*/, set: /*the setter function*/ }
67assert (typeof(desc.get) === 'function');
68assert (typeof(desc.set) === 'function');
69assert (desc.configurable);
70assert (desc.enumerable);
71assert (obj.foo === 0)
72
73var array_desc = Object.getOwnPropertyDescriptor(Array, "prototype");
74assert (array_desc.configurable === false);
75assert (array_desc.writable === false);
76assert (array_desc.enumerable === false);
77
78var obj_undef;
79try {
80    Object.getOwnPropertyDescriptor (obj_undef, "fail");
81    assert (false);
82} catch (e) {
83    assert (e instanceof TypeError);
84}
85