1425bb815Sopenharmony_ci// Copyright JS Foundation and other contributors, http://js.foundation 2425bb815Sopenharmony_ci// 3425bb815Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 4425bb815Sopenharmony_ci// you may not use this file except in compliance with the License. 5425bb815Sopenharmony_ci// You may obtain a copy of the License at 6425bb815Sopenharmony_ci// 7425bb815Sopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 8425bb815Sopenharmony_ci// 9425bb815Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software 10425bb815Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS 11425bb815Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12425bb815Sopenharmony_ci// See the License for the specific language governing permissions and 13425bb815Sopenharmony_ci// limitations under the License. 14425bb815Sopenharmony_ci 15425bb815Sopenharmony_ci// Test array 16425bb815Sopenharmony_civar arr = ['a', 'b', 'c']; 17425bb815Sopenharmony_civar props = Object.keys(arr); 18425bb815Sopenharmony_ci// props should contain: 0,1,2 and the order is not defined! 19425bb815Sopenharmony_ciassert (props.indexOf("0") !== -1); 20425bb815Sopenharmony_ciassert (props.indexOf("1") !== -1); 21425bb815Sopenharmony_ciassert (props.indexOf("2") !== -1); 22425bb815Sopenharmony_ciassert (props.length === 3); 23425bb815Sopenharmony_ci 24425bb815Sopenharmony_ci// Test object 25425bb815Sopenharmony_civar obj = {key1: 'a', key3: 'b', key2: 'c', key4: 'c', key5: ''}; 26425bb815Sopenharmony_ciprops = Object.keys(obj); 27425bb815Sopenharmony_ci// props should contain: key1,key2,key3,key4,key5 and the order is not defined! 28425bb815Sopenharmony_ciassert (props.indexOf("key1") !== -1); 29425bb815Sopenharmony_ciassert (props.indexOf("key2") !== -1); 30425bb815Sopenharmony_ciassert (props.indexOf("key3") !== -1); 31425bb815Sopenharmony_ciassert (props.indexOf("key4") !== -1); 32425bb815Sopenharmony_ciassert (props.indexOf("key5") !== -1); 33425bb815Sopenharmony_ciassert (props.length === 5); 34425bb815Sopenharmony_ci 35425bb815Sopenharmony_civar obj2 = {}; 36425bb815Sopenharmony_ciObject.defineProperties(obj2, { 37425bb815Sopenharmony_ci key_one: {enumerable: true, value: 'one'}, 38425bb815Sopenharmony_ci key_two: {enumerable: false, value: 'two'}, 39425bb815Sopenharmony_ci}); 40425bb815Sopenharmony_ci 41425bb815Sopenharmony_ciprops = Object.keys(obj2); 42425bb815Sopenharmony_ci// props should contain: key_one 43425bb815Sopenharmony_ciassert (props.indexOf("key_one") !== -1); 44425bb815Sopenharmony_ciassert (props.indexOf("key_two") === -1); 45425bb815Sopenharmony_ciassert (props.length === 1); 46425bb815Sopenharmony_ci 47425bb815Sopenharmony_ci// Test prototype chain 48425bb815Sopenharmony_cifunction Parent() {} 49425bb815Sopenharmony_ciParent.prototype.inheritedMethod = function() {}; 50425bb815Sopenharmony_ci 51425bb815Sopenharmony_cifunction Child() { 52425bb815Sopenharmony_ci this.prop = 5; 53425bb815Sopenharmony_ci this.method = function() {}; 54425bb815Sopenharmony_ci} 55425bb815Sopenharmony_ciChild.prototype = new Parent; 56425bb815Sopenharmony_ciChild.prototype.prototypeMethod = function() {}; 57425bb815Sopenharmony_ci 58425bb815Sopenharmony_ciprops = Object.keys (new Child()); 59425bb815Sopenharmony_ci// props should contain: prop,method and the order is not defined! 60425bb815Sopenharmony_ciassert (props.indexOf("prop") !== -1); 61425bb815Sopenharmony_ciassert (props.indexOf("method") !== -1); 62425bb815Sopenharmony_ciassert (props.length === 2); 63425bb815Sopenharmony_ci 64425bb815Sopenharmony_civar o = {}; 65425bb815Sopenharmony_ci 66425bb815Sopenharmony_ciObject.defineProperty(o, 'a', { 67425bb815Sopenharmony_ci value: "OK", 68425bb815Sopenharmony_ci writable: true, 69425bb815Sopenharmony_ci enumerable: true, 70425bb815Sopenharmony_ci configurable: true 71425bb815Sopenharmony_ci}); 72425bb815Sopenharmony_ci 73425bb815Sopenharmony_ciObject.defineProperty(o, 'b', { 74425bb815Sopenharmony_ci value: "NOT_OK", 75425bb815Sopenharmony_ci writable: true, 76425bb815Sopenharmony_ci enumerable: false, 77425bb815Sopenharmony_ci configurable: true 78425bb815Sopenharmony_ci}); 79425bb815Sopenharmony_ci 80425bb815Sopenharmony_ciObject.defineProperty(o, 'c', { 81425bb815Sopenharmony_ci value: "OK", 82425bb815Sopenharmony_ci writable: true, 83425bb815Sopenharmony_ci enumerable: true, 84425bb815Sopenharmony_ci configurable: true 85425bb815Sopenharmony_ci}); 86425bb815Sopenharmony_ci 87425bb815Sopenharmony_ciprops = Object.keys(o); 88425bb815Sopenharmony_ciassert(props.length === 2); 89425bb815Sopenharmony_ciassert(o[props[0]] === "OK"); 90425bb815Sopenharmony_ciassert(o[props[1]] === "OK"); 91