Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

/* Any copyright is dedicated to the Public Domain.
"use strict";
// Test Style Editor content when using Local Mode
const TEST_PATH = getSupportsFile(".").file.path;
const TEST_ORIGIN = "firefox.localhost";
const TEST_URL = `https://${TEST_ORIGIN}/simple.html`;
const { LocalModeMappings } = ChromeUtils.importESModule(
"resource://devtools/client/framework/LocalModeMappings.sys.mjs"
);
add_task(async function () {
const prefPrefix = LocalModeMappings.createNewMapping(TEST_ORIGIN, TEST_PATH);
registerCleanupFunction(() => {
Services.prefs.deleteBranch(prefPrefix);
});
// Test helper first load the tab on the test URL,
// whereas the Local Mode URL are only available after the toolbox is opened...
// So open on a blank document and navigate to the local mode url right after
const { ui } = await openStyleEditorForURL("data:text/html,blank");
await navigateToAndWaitForStyleSheets(TEST_URL, ui, 2);
is(ui.editors.length, 2, "Two sheets present after load.");
const editor = ui.editors.find(e => e.friendlyName === "simple.css");
ok(editor, "Found the simple stylesheet editor");
info("Selecting the second editor");
await ui.selectStyleSheet(editor.styleSheet);
const styleEditor = await editor.getSourceEditor();
const text = styleEditor.sourceEditor.getText();
const originalContent = await (
await fetch(TEST_BASE_HTTPS + "simple.css")
).text();
is(text, originalContent, "style inspector content is correct");
info(
"Change the stylesheet text and see if we can save changes to the local file"
);
let dirty = editor.sourceEditor.once("dirty-change");
const newContent = "* { color: green }";
editor.sourceEditor.setText(newContent);
await dirty;
let onSaved = editor.once("property-change");
editor.summary.querySelector(".stylesheet-saveButton").click();
await onSaved;
let updatedFileContent = await (
await fetch(TEST_BASE_HTTPS + "simple.css", { cache: "no-store" })
).text();
is(updatedFileContent, newContent);
info(
"Revert back to original text content to avoid introducing changes in local repo"
);
dirty = editor.sourceEditor.once("dirty-change");
editor.sourceEditor.setText(originalContent);
await dirty;
onSaved = editor.once("property-change");
editor.summary.querySelector(".stylesheet-saveButton").click();
await onSaved;
updatedFileContent = await (
await fetch(TEST_BASE_HTTPS + "simple.css")
).text();
is(updatedFileContent, originalContent);
});
function getSupportsFile(path) {
const cr = Cc["@mozilla.org/chrome/chrome-registry;1"].getService(
Ci.nsIChromeRegistry
);
const uri = Services.io.newURI(CHROME_URL_ROOT + path);
const fileurl = cr.convertChromeURL(uri);
return fileurl.QueryInterface(Ci.nsIFileURL);
}