/*!

* Chai - getProperties utility
* Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
* MIT Licensed
*/

/**

* ### .getProperties(object)
*
* This allows the retrieval of property names of an object, enumerable or not,
* inherited or not.
*
* @param {Object} object
* @returns {Array}
* @namespace Utils
* @name getProperties
* @api public
*/

module.exports = function getProperties(object) {

var result = Object.getOwnPropertyNames(object);

function addProperty(property) {
  if (result.indexOf(property) === -1) {
    result.push(property);
  }
}

var proto = Object.getPrototypeOf(object);
while (proto !== null) {
  Object.getOwnPropertyNames(proto).forEach(addProperty);
  proto = Object.getPrototypeOf(proto);
}

return result;

};