function assert_readonly(object, property_name, description)
    {
         var initial_value = object[property_name];
         try {
             //Note that this can have side effects in the case where
             //the property has PutForwards
             object[property_name] = initial_value + "a"; //XXX use some other value here?
             assert(same_value(object[property_name], initial_value),
                    "assert_readonly", description,
                    "changing property ${p} succeeded",
                    {p:property_name});
         } finally {
             object[property_name] = initial_value;
         }
    }
Assert that ``object`` has a property named ``property_name`` and that the property is readonly.

Note: The implementation tries to update the named property, so
any side effects of updating will be triggered. Users are
encouraged to instead inspect the property descriptor of ``property_name`` on ``object``.

@param {Object} object - Object that should have the given property in its prototype chain.
@param {string} property_name - Expected property name.
@param {string} [description] - Description of the condition being tested.