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