//----------------------------------------------------------------------------- //Verify all attributes specified accessor property of given object: //get, set, enumerable, configurable //If all attribute values are expected, return true, otherwise, return false function accessorPropertyAttributesAreCorrect(obj, name, get, set, setVerifyHelpProp, enumerable, configurable) { var attributesCorrect = true; if (get !== undefined) { if (obj[name] !== get()) { if (typeof obj[name] === "number" && isNaN(obj[name]) && typeof get() === "number" && isNaN(get())) { // keep empty } else { attributesCorrect = false; } } } else { if (obj[name] !== undefined) { attributesCorrect = false; } } try { var desc = Object.getOwnPropertyDescriptor(obj, name); if (typeof desc.set === "undefined") { if (typeof set !== "undefined") { attributesCorrect = false; } } else { obj[name] = "toBeSetValue"; if (obj[setVerifyHelpProp] !== "toBeSetValue") { attributesCorrect = false; } } } catch (se) { throw se; } var enumerated = false; for (var prop in obj) { if (obj.hasOwnProperty(prop) && prop === name) { enumerated = true; } } if (enumerated !== enumerable) { attributesCorrect = false; } var deleted = false; try { delete obj[name]; } catch (de) { throw de; } if (!obj.hasOwnProperty(name)) { deleted = true; } if (deleted !== configurable) { attributesCorrect = false; } return attributesCorrect; }