// 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);
    }

}
