blob: 49f612724b949b2d21bde9f99f4fa028bdac970c [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/js-test-pre.js"></script>
<script>
description("Tests that Object.getOwnPropertyDescriptor() works correctly for [Unforgeable] IDL attributes.");
function checkUnforgeablePropertyDescriptor(descriptor, readOnly)
{
shouldBeType("descriptor.get", "Function");
if (readOnly)
shouldBeUndefined("descriptor.set");
else
shouldBeType("descriptor.set", "Function");
shouldBeTrue("descriptor.enumerable");
shouldBeFalse("descriptor.configurable");
invalidObject = { };
shouldThrow("descriptor.get.call(invalidObject)");
}
debug("* Document.location");
descriptor = Object.getOwnPropertyDescriptor(document, "location");
checkUnforgeablePropertyDescriptor(descriptor);
shouldBe("descriptor.get.call(document)", "document.location");
var locationProperties = Object.getOwnPropertyNames(document.location);
for (var i = 0; i < locationProperties.length; i++) {
var propertyName = locationProperties[i];
descriptor = Object.getOwnPropertyDescriptor(document.location, propertyName);
if (descriptor.value)
continue;
debug("");
debug("* Location." + propertyName);
var isReadOnly = propertyName == "origin" || propertyName == "ancestorOrigins";
checkUnforgeablePropertyDescriptor(descriptor, isReadOnly);
if (propertyName != "ancestorOrigins")
shouldBeTrue("descriptor.get.call(document.location) === document.location." + propertyName);
}
debug("");
debug("* Window.location");
descriptor = Object.getOwnPropertyDescriptor(window, "location");
checkUnforgeablePropertyDescriptor(descriptor);
shouldBeTrue("descriptor.get.call(window) === window.location");
debug("");
debug("* Window.window");
descriptor = Object.getOwnPropertyDescriptor(window, "window");
checkUnforgeablePropertyDescriptor(descriptor, true);
shouldBeTrue("descriptor.get.call(window) === window.window");
debug("");
debug("* Window.top");
descriptor = Object.getOwnPropertyDescriptor(window, "top");
checkUnforgeablePropertyDescriptor(descriptor, true);
shouldBeTrue("descriptor.get.call(window) === window.top");
debug("");
debug("* Window.document");
descriptor = Object.getOwnPropertyDescriptor(window, "document");
checkUnforgeablePropertyDescriptor(descriptor, true);
</script>
<script src="../resources/js-test-post.js"></script>