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