
/* marked as custom because enum order differs */
/*---
{
    "custom": true
}
---*/

/*===
foo,bar
foo,bar,quux
0,1,2,length,foo
===*/

/* Some basic cases. */

var obj1 = { foo:1, bar:2 };

var obj2 = {};
Object.defineProperties(obj2, {
    'foo': { value: 123, writable: false, configurable: false, enumerable: false },
    'bar': { value: 123, writable: false, configurable: false, enumerable: true },
    'quux': { value: 123, writable: false, configurable: false, enumerable: false }
});

var obj3 = ['foo','bar','quux'];
Object.defineProperties(obj3, {
    'foo': { value: 123, writable: false, configurable: false, enumerable: false }
});

print(Object.getOwnPropertyNames(obj1));
print(Object.getOwnPropertyNames(obj2));
print(Object.getOwnPropertyNames(obj3));

/*===
foo,bar
===*/

/* Inherited property keys are not included. */

var ancestor = { inherited: 1 };
function f1() {
    this.foo = 1;
    this.bar = 2;
}
f1.prototype = ancestor;
var obj4 = new f1();

print(Object.getOwnPropertyNames(obj4));

