michael@0: /* vim: set ts=2 et sw=2 tw=80: */ michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: const TESTCASE_URI_HTML = TEST_BASE + "simple.html"; michael@0: const TESTCASE_URI_CSS = TEST_BASE + "simple.css"; michael@0: michael@0: const Cc = Components.classes; michael@0: const Ci = Components.interfaces; michael@0: michael@0: let tempScope = {}; michael@0: Components.utils.import("resource://gre/modules/FileUtils.jsm", tempScope); michael@0: Components.utils.import("resource://gre/modules/NetUtil.jsm", tempScope); michael@0: let FileUtils = tempScope.FileUtils; michael@0: let NetUtil = tempScope.NetUtil; michael@0: michael@0: function test() michael@0: { michael@0: waitForExplicitFinish(); michael@0: michael@0: copy(TESTCASE_URI_HTML, "simple.html", function(htmlFile) { michael@0: copy(TESTCASE_URI_CSS, "simple.css", function(cssFile) { michael@0: addTabAndOpenStyleEditors(1, function(panel) { michael@0: let UI = panel.UI; michael@0: let editor = UI.editors[0]; michael@0: editor.getSourceEditor().then(runTests.bind(this, editor)); michael@0: }); michael@0: michael@0: let uri = Services.io.newFileURI(htmlFile); michael@0: let filePath = uri.resolve(""); michael@0: content.location = filePath; michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: function runTests(editor) michael@0: { michael@0: editor.sourceEditor.once("dirty-change", () => { michael@0: is(editor.sourceEditor.isClean(), false, "Editor is dirty."); michael@0: ok(editor.summary.classList.contains("unsaved"), michael@0: "Star icon is present in the corresponding summary."); michael@0: }); michael@0: let beginCursor = {line: 0, ch: 0}; michael@0: editor.sourceEditor.replaceText("DIRTY TEXT", beginCursor, beginCursor); michael@0: michael@0: editor.sourceEditor.once("dirty-change", () => { michael@0: is(editor.sourceEditor.isClean(), true, "Editor is clean."); michael@0: ok(!editor.summary.classList.contains("unsaved"), michael@0: "Star icon is not present in the corresponding summary."); michael@0: finish(); michael@0: }); michael@0: editor.saveToFile(null, function (file) { michael@0: ok(file, "file should get saved directly when using a file:// URI"); michael@0: }); michael@0: } michael@0: michael@0: function copy(aSrcChromeURL, aDestFileName, aCallback) michael@0: { michael@0: let destFile = FileUtils.getFile("ProfD", [aDestFileName]); michael@0: write(read(aSrcChromeURL), destFile, aCallback); michael@0: } michael@0: michael@0: function read(aSrcChromeURL) michael@0: { michael@0: let scriptableStream = Cc["@mozilla.org/scriptableinputstream;1"] michael@0: .getService(Ci.nsIScriptableInputStream); michael@0: michael@0: let channel = Services.io.newChannel(aSrcChromeURL, null, null); michael@0: let input = channel.open(); michael@0: scriptableStream.init(input); michael@0: michael@0: let data = ""; michael@0: while (input.available()) { michael@0: data = data.concat(scriptableStream.read(input.available())); michael@0: } michael@0: scriptableStream.close(); michael@0: input.close(); michael@0: michael@0: return data; michael@0: } michael@0: michael@0: function write(aData, aFile, aCallback) michael@0: { michael@0: let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"] michael@0: .createInstance(Ci.nsIScriptableUnicodeConverter); michael@0: michael@0: converter.charset = "UTF-8"; michael@0: michael@0: let istream = converter.convertToInputStream(aData); michael@0: let ostream = FileUtils.openSafeFileOutputStream(aFile); michael@0: michael@0: NetUtil.asyncCopy(istream, ostream, function(status) { michael@0: if (!Components.isSuccessCode(status)) { michael@0: info("Coudln't write to " + aFile.path); michael@0: return; michael@0: } michael@0: michael@0: aCallback(aFile); michael@0: }); michael@0: }