mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
139 lines
3.9 KiB
JavaScript
139 lines
3.9 KiB
JavaScript
/* vim: set ts=2 et sw=2 tw=80: */
|
|
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
let tempScope = {};
|
|
Cu.import("resource://gre/modules/NetUtil.jsm", tempScope);
|
|
Cu.import("resource://gre/modules/FileUtils.jsm", tempScope);
|
|
let NetUtil = tempScope.NetUtil;
|
|
let FileUtils = tempScope.FileUtils;
|
|
|
|
// Reference to the Scratchpad object.
|
|
let gScratchpad;
|
|
|
|
// Reference to the temporary nsIFile we will work with.
|
|
let gFile;
|
|
|
|
// The temporary file content.
|
|
let gFileContent = "hello.world('bug636725');";
|
|
|
|
function test()
|
|
{
|
|
waitForExplicitFinish();
|
|
|
|
gBrowser.selectedTab = gBrowser.addTab();
|
|
gBrowser.selectedBrowser.addEventListener("load", function onLoad() {
|
|
gBrowser.selectedBrowser.removeEventListener("load", onLoad, true);
|
|
openScratchpad(runTests);
|
|
}, true);
|
|
|
|
content.location = "data:text/html,<p>test file open and save in Scratchpad";
|
|
}
|
|
|
|
function runTests()
|
|
{
|
|
gScratchpad = gScratchpadWindow.Scratchpad;
|
|
|
|
// Create a temporary file.
|
|
gFile = FileUtils.getFile("TmpD", ["fileForBug636725.tmp"]);
|
|
gFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0666);
|
|
|
|
// Write the temporary file.
|
|
let fout = Cc["@mozilla.org/network/file-output-stream;1"].
|
|
createInstance(Ci.nsIFileOutputStream);
|
|
fout.init(gFile.QueryInterface(Ci.nsILocalFile), 0x02 | 0x08 | 0x20,
|
|
0644, fout.DEFER_OPEN);
|
|
|
|
let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
|
|
createInstance(Ci.nsIScriptableUnicodeConverter);
|
|
converter.charset = "UTF-8";
|
|
let fileContentStream = converter.convertToInputStream(gFileContent);
|
|
|
|
NetUtil.asyncCopy(fileContentStream, fout, tempFileSaved);
|
|
}
|
|
|
|
function tempFileSaved(aStatus)
|
|
{
|
|
ok(Components.isSuccessCode(aStatus),
|
|
"the temporary file was saved successfully");
|
|
|
|
// Import the file into Scratchpad.
|
|
gScratchpad.importFromFile(gFile.QueryInterface(Ci.nsILocalFile), true,
|
|
fileImported);
|
|
}
|
|
|
|
function fileImported(aStatus, aFileContent)
|
|
{
|
|
ok(Components.isSuccessCode(aStatus),
|
|
"the temporary file was imported successfully with Scratchpad");
|
|
|
|
is(aFileContent, gFileContent,
|
|
"received data is correct");
|
|
|
|
is(gScratchpad.getText(), gFileContent,
|
|
"the editor content is correct");
|
|
|
|
// Save the file after changes.
|
|
gFileContent += "// omg, saved!";
|
|
gScratchpad.setText(gFileContent);
|
|
|
|
gScratchpad.exportToFile(gFile.QueryInterface(Ci.nsILocalFile), true, true,
|
|
fileExported);
|
|
}
|
|
|
|
function fileExported(aStatus)
|
|
{
|
|
ok(Components.isSuccessCode(aStatus),
|
|
"the temporary file was exported successfully with Scratchpad");
|
|
|
|
let oldContent = gFileContent;
|
|
|
|
// Attempt another file save, with confirmation which returns false.
|
|
gFileContent += "// omg, saved twice!";
|
|
gScratchpad.setText(gFileContent);
|
|
|
|
let oldConfirm = gScratchpadWindow.confirm;
|
|
let askedConfirmation = false;
|
|
gScratchpadWindow.confirm = function() {
|
|
askedConfirmation = true;
|
|
return false;
|
|
};
|
|
|
|
gScratchpad.exportToFile(gFile.QueryInterface(Ci.nsILocalFile), false, true,
|
|
fileExported2);
|
|
|
|
gScratchpadWindow.confirm = oldConfirm;
|
|
|
|
ok(askedConfirmation, "exportToFile() asked for overwrite confirmation");
|
|
|
|
gFileContent = oldContent;
|
|
|
|
let channel = NetUtil.newChannel(gFile);
|
|
channel.contentType = "application/javascript";
|
|
|
|
// Read back the temporary file.
|
|
NetUtil.asyncFetch(channel, fileRead);
|
|
}
|
|
|
|
function fileExported2()
|
|
{
|
|
ok(false, "exportToFile() did not cancel file overwrite");
|
|
}
|
|
|
|
function fileRead(aInputStream, aStatus)
|
|
{
|
|
ok(Components.isSuccessCode(aStatus),
|
|
"the temporary file was read back successfully");
|
|
|
|
let updatedContent =
|
|
NetUtil.readInputStreamToString(aInputStream, aInputStream.available());;
|
|
|
|
is(updatedContent, gFileContent, "file properly updated");
|
|
|
|
// Done!
|
|
gFile.remove(false);
|
|
gFile = null;
|
|
gScratchpad = null;
|
|
finish();
|
|
}
|