mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-21 22:57:31 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
50
toolkit/modules/tests/MockDocument.jsm
Normal file
50
toolkit/modules/tests/MockDocument.jsm
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
/**
|
||||
* Provides infrastructure for tests that would require mock document.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["MockDocument"]
|
||||
|
||||
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
|
||||
|
||||
Cu.importGlobalProperties(["URL"]);
|
||||
|
||||
const MockDocument = {
|
||||
/**
|
||||
* Create a document for the given URL containing the given HTML with the ownerDocument of all <form>s having a mocked location.
|
||||
*/
|
||||
createTestDocument(aDocumentURL, aContent = "<form>", aType = "text/html") {
|
||||
let parser = Cc["@mozilla.org/xmlextras/domparser;1"].
|
||||
createInstance(Ci.nsIDOMParser);
|
||||
parser.init();
|
||||
let parsedDoc = parser.parseFromString(aContent, aType);
|
||||
|
||||
for (let element of parsedDoc.forms) {
|
||||
this.mockOwnerDocumentProperty(element, parsedDoc, aDocumentURL);
|
||||
}
|
||||
return parsedDoc;
|
||||
},
|
||||
|
||||
mockOwnerDocumentProperty(aElement, aDoc, aURL) {
|
||||
// Mock the document.location object so we can unit test without a frame. We use a proxy
|
||||
// instead of just assigning to the property since it's not configurable or writable.
|
||||
let document = new Proxy(aDoc, {
|
||||
get(target, property, receiver) {
|
||||
// document.location is normally null when a document is outside of a "browsing context".
|
||||
// See https://html.spec.whatwg.org/#the-location-interface
|
||||
if (property == "location") {
|
||||
return new URL(aURL);
|
||||
}
|
||||
return target[property];
|
||||
},
|
||||
});
|
||||
|
||||
// Assign element.ownerDocument to the proxy so document.location works.
|
||||
Object.defineProperty(aElement, "ownerDocument", {
|
||||
value: document,
|
||||
});
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue