// Copyright (c) 2012 Ecma International.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
es5id: 15.2.3.7-6-a-58
description: >
    Object.defineProperties - desc.[[Get]] and P.[[Get]] are two
    objects which refer to the different objects (8.12.9 step 6)
---*/

var obj = {};

function get_Func1() {
  return 10;
}

Object.defineProperty(obj, "foo", {
  get: get_Func1,
  configurable: true
});

function get_Func2() {
  return 20;
}

Object.defineProperties(obj, {
  foo: {
    get: get_Func2
  }
});

var verifyEnumerable = false;
for (var p in obj) {
  if (p === "foo") {
    verifyEnumerable = true;
  }
}

var verifyValue = false;
verifyValue = (obj.foo === 20);

var desc = Object.getOwnPropertyDescriptor(obj, "foo");

var verifyConfigurable = false;
delete obj.foo;
verifyConfigurable = obj.hasOwnProperty("foo");

assert.sameValue(verifyConfigurable, false, 'verifyConfigurable');
assert.sameValue(verifyEnumerable, false, 'verifyEnumerable');
assert(verifyValue, 'verifyValue !== true');
assert.sameValue(typeof(desc.set), "undefined", 'typeof (desc.set)');
assert.sameValue(desc.get, get_Func2, 'desc.get');
