<!doctype html>
<title>Object.prototype.getOwnPropertyNames</title>
<link rel=help href=http://es5.github.io/#x15.2.3.4>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>

<div id=log></div>
<script>
test(function () {
  var obj = {0: 'a', 1: 'b', 2: 'c'};
  assert_array_equals(
    Object.getOwnPropertyNames(obj).sort(),
    ['0', '1', '2']
  );
}, "object");

test(function () {
  var arr = ['a', 'b', 'c'];
  assert_array_equals(
    Object.getOwnPropertyNames(arr).sort(),
    ['0', '1', '2', 'length']
  );
}, "array-like");

test(function () {
  var obj = Object.create({}, {
    getFoo: {
      value: function() { return this.foo; },
      enumerable: false
    }
  });
  obj.foo = 1;
  assert_array_equals(
    Object.getOwnPropertyNames(obj).sort(),
    ['foo', 'getFoo']
  );
}, "non-enumerable property");

test(function() {
  function ParentClass() {}
  ParentClass.prototype.inheritedMethod = function() {};

  function ChildClass() {
    this.prop = 5;
    this.method = function() {};
  }
  ChildClass.prototype = new ParentClass;
  ChildClass.prototype.prototypeMethod = function() {};

  var obj = new ChildClass;
  assert_array_equals(
    Object.getOwnPropertyNames(obj).sort(),
    ['method', 'prop']
  );
}, 'items on the prototype chain are not listed');
</script>
