mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 01:35:35 +00:00
0d460e3432
This is split from the previous changeset since if we include dom/ the file size is too large for phabricator to handle. This is an autogenerated commit to handle scripts loading mochitest harness files, in the simple case where the script src is on the same line as the tag. This was generated with https://bug1544322.bmoattachments.org/attachment.cgi?id=9058170 using the `--part 2` argument. Differential Revision: https://phabricator.services.mozilla.com/D27457 --HG-- extra : moz-landing-system : lando
140 lines
4.8 KiB
HTML
140 lines
4.8 KiB
HTML
|
|
<!DOCTYPE HTML>
|
|
<html>
|
|
<!--
|
|
https://bugzilla.mozilla.org/show_bug.cgi?id=823228
|
|
-->
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Test for Bug 823228</title>
|
|
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
|
</head>
|
|
<body>
|
|
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=823228">Mozilla Bug 823228</a>
|
|
<p id="display"></p>
|
|
<div id="content" style="display: none">
|
|
<iframe name="x" id="x"></iframe>
|
|
<iframe name="y" id="y"></iframe>
|
|
</div>
|
|
<pre id="test">
|
|
</pre>
|
|
<script type="application/javascript">
|
|
|
|
/** Test for Bug 823228 **/
|
|
is(window, window.frames, "These better be equal");
|
|
ok("0" in window, "We have a subframe");
|
|
ok("1" in window, "We have two subframes");
|
|
ok(!("2" in window), "But we don't have three subframes");
|
|
window[2] = "myString";
|
|
ok(!("2" in window), "Should not be able to set indexed expando");
|
|
Object.getPrototypeOf(window)[3] = "Hey there";
|
|
ok("3" in window, "Should be walking up the proto chain");
|
|
|
|
is(window[0].name, "x", "First frame is x");
|
|
is(window[1].name, "y", "Second frame is y");
|
|
is(window[2], undefined, "We should still not have our expando");
|
|
is(window[3], "Hey there", "We should still have our prop on the proto chain");
|
|
|
|
var x = $("x");
|
|
var y = $("y");
|
|
|
|
is(x.contentWindow, window[0], "First frame should have correct window");
|
|
is(y.contentWindow, window[1], "Second frame should have correct window");
|
|
|
|
// set() hook test
|
|
throws(TypeError, function () {
|
|
"use strict";
|
|
window[1] = "FAIL strict";
|
|
});
|
|
|
|
// set() hook test
|
|
window[1] = "FAIL";
|
|
is(window[1].name, "y", "Second frame is still y");
|
|
y.remove();
|
|
ok(!("1" in window), "We no longer have two subframes");
|
|
is(window[1], undefined, "We should not have a value here");
|
|
|
|
// defineProperty() hook test
|
|
function throws(errorCtor, f) {
|
|
try {
|
|
f();
|
|
} catch (exc) {
|
|
if (!(exc instanceof errorCtor))
|
|
throw exc;
|
|
return;
|
|
}
|
|
throw new Error("expected " + errCtor.name + ", no exception thrown: " + f);
|
|
}
|
|
|
|
x.parentNode.appendChild(y);
|
|
throws(TypeError, function () {
|
|
Object.defineProperty(window, "1", { value: "FAIL2", configurable: true,
|
|
writable: true });
|
|
});
|
|
y.remove();
|
|
ok(!("1" in window), "We no longer have two subframes, again");
|
|
is(window[1], undefined, "We should not have a value here either");
|
|
|
|
// More set() hook test
|
|
throws(TypeError, function () {
|
|
"use strict";
|
|
window[1] = "FAIL3 strict";
|
|
});
|
|
window[1] = "FAIL3";
|
|
ok(!("1" in window), "We shouldn't allow indexed expandos");
|
|
is(window[1], undefined, "We should not have a value for an indexed expando");
|
|
var desc = Object.getOwnPropertyDescriptor(window, "1");
|
|
is(desc, undefined, "We really really shouldn't have indexed expandos");
|
|
|
|
x.parentNode.appendChild(y);
|
|
is(window[1], y.contentWindow, "Second frame should now be visible");
|
|
desc = Object.getOwnPropertyDescriptor(window, "1");
|
|
ok(desc.configurable, "Subframe should be configurable");
|
|
ok(desc.enumerable, "Subframe should be configurable");
|
|
ok(!desc.writable, "Subframe should not be writable");
|
|
is(desc.value, y.contentWindow, "Subframe should have correct value");
|
|
|
|
y.remove();
|
|
is(window[1], undefined, "And now we should be back to no [1] property");
|
|
|
|
// And more defineProperty()
|
|
throws(TypeError, function () {
|
|
Object.defineProperty(window, "1", { value: "FAIL2", configurable: true,
|
|
writable: true });
|
|
});
|
|
ok(!("1" in window), "Defining indexed properties really just shouldn't work");
|
|
is(window[1], undefined, "Defining past end of list should not work");
|
|
|
|
// Enumeration tests
|
|
x.parentNode.appendChild(y);
|
|
|
|
var names = Object.getOwnPropertyNames(window);
|
|
is(names[0], "0", "Must start with 0");
|
|
is(names[1], "1", "Must continue with 1");
|
|
is(names.indexOf("2"), -1, "And 2, an attempted expando, should not be in there");
|
|
is(names.indexOf("3"), -1, "But no 3; that's on the proto");
|
|
|
|
names = [];
|
|
for (var name in window) {
|
|
names.push(name);
|
|
}
|
|
is(names[0], "0", "Enumeration must start with 0");
|
|
is(names[1], "1", "Enumeration must continue with 1");
|
|
is(names.indexOf("2"), -1, "Enumeration: but no expando 2");
|
|
isnot(names.indexOf("3"), -1, "Enumeration: and then 3, defined on the proto");
|
|
is(names.indexOf("4"), -1, "But no 4 around");
|
|
|
|
// Delete tests
|
|
is(delete window[1], false, "Deleting supported index should return false");
|
|
is(window[1], y.contentWindow, "Shouldn't be able to delete a supported index");
|
|
y.remove();
|
|
is(window[1], undefined,
|
|
"And now we should have no property here");
|
|
is(delete window[1], true, "Deleting unsupported index should return true");
|
|
is(window[1], undefined,
|
|
"And we shouldn't have things magically appear due to delete");
|
|
</script>
|
|
</body>
|
|
</html>
|