// 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-93-2
description: >
    Object.defineProperties will update [[Value]] attribute of indexed
    data property 'P' successfully when [[Configurable]] attribute is
    true and [[Writable]] attribute is false but not when both are
    false (8.12.9 - step Note & 10.a.ii.1)
includes: [propertyHelper.js]
---*/


var obj = {};

Object.defineProperty(obj, "0", {
  value: 1001,
  writable: false,
  configurable: true
});

Object.defineProperty(obj, "1", {
  value: 1003,
  writable: false,
  configurable: false
});

try {
  Object.defineProperties(obj, {
    0: {
      value: 1002
    },
    1: {
      value: 1004
    }
  });

  $ERROR("Expected an exception.");
} catch (e) {
  verifyEqualTo(obj, "0", 1002);

  verifyNotWritable(obj, "0");

  verifyNotEnumerable(obj, "0");

  verifyConfigurable(obj, "0");
  verifyEqualTo(obj, "1", 1003);

  verifyNotWritable(obj, "1");

  verifyNotEnumerable(obj, "1");

  verifyNotConfigurable(obj, "1");

  if (!(e instanceof TypeError)) {
    $ERROR("Expected TypeError, got " + e);
  }

}
