// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-object.keys
description: >
  Proxy [[OwnPropertyKeys]] trap does not skip non-enumerable keys when validating invariant:
  * If the target object is not extensible, then the result List must contain all the keys of
    the own properties of the target object and no other values.
info: |
  Object.keys ( O )

  ...
  2. Let nameList be ? EnumerableOwnPropertyNames(obj, "key").

  EnumerableOwnPropertyNames ( O, kind )

  ...
  2. Let ownKeys be ? O.[[OwnPropertyKeys]]().

  [[OwnPropertyKeys]] ( )

  ...
  11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
  16. For each element key of targetKeys, do
    a. Let desc be ? target.[[GetOwnProperty]](key).
    b. If desc is not undefined and desc.[[Configurable]] is false, then
      ...
    c. Else,
      i. Append key as an element of targetConfigurableKeys.
  ...
  18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
  ...
  21. For each key that is an element of targetConfigurableKeys, do
    a. If key is not an element of uncheckedResultKeys, throw a TypeError exception.
features: [Proxy]
---*/

var target = {};
Object.defineProperty(target, 'prop', {
  value: 2,
  writable: true,
  enumerable: false,
  configurable: true,
});

var proxy = new Proxy(target, {
  ownKeys: function() {
    return [];
  },
});

Object.preventExtensions(target);

assert.throws(TypeError, function() {
  Object.keys(proxy);
});
