| Index: chrome/content/tests/filterStorage_readwrite.js |
| =================================================================== |
| --- a/chrome/content/tests/filterStorage_readwrite.js |
| +++ b/chrome/content/tests/filterStorage_readwrite.js |
| @@ -28,16 +28,27 @@ |
| callback(); |
| } |
| }; |
| FilterNotifier.addListener(listener); |
| FilterStorage.loadFromDisk(file); |
| } |
| + function writeToFile(file, data) |
| + { |
| + let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); |
| + converter.charset = "utf-8"; |
| + data = converter.ConvertFromUnicode(data); |
| + |
| + let stream = FileUtils.openFileOutputStream(file); |
| + stream.write(data, data.length); |
| + stream.close(); |
| + } |
| + |
| function saveFilters(file, callback) |
| { |
| let listener = function(action) |
| { |
| if (action == "save") |
| { |
| FilterNotifier.removeListener(listener); |
| callback(); |
| @@ -45,19 +56,20 @@ |
| }; |
| FilterNotifier.addListener(listener); |
| FilterStorage.saveToDisk(file); |
| } |
| function testReadWrite(withExternal) |
| { |
| - let tempFile = FileUtils.getFile("TmpD", ["temp_patterns.ini"]); |
| + let tempFile = FileUtils.getFile("TmpD", ["temp_patterns1.ini"]); |
| + let tempFile2 = FileUtils.getFile("TmpD", ["temp_patterns2.ini"]); |
| tempFile.createUnique(tempFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE); |
| - readFile(); |
| + createTempFile(); |
| function canonize(data) |
| { |
| let curSection = null; |
| let sections = []; |
| for each (let line in (data + "\n[end]").split(/[\r\n]+/)) |
| { |
| if (/^\[.*\]$/.test(line)) |
| @@ -84,20 +96,27 @@ |
| else |
| return 0; |
| }); |
| return sections.map(function(section) { |
| return [section.header].concat(section.data).join("\n"); |
| }).join("\n"); |
| } |
| - function readFile() |
| + function createTempFile() |
| { |
| - let source = Services.io.newURI("data/patterns.ini", null, Services.io.newURI(window.location.href, null, null)); |
| - loadFilters(source, saveFile); |
| + let request = new XMLHttpRequest(); |
| + request.open("GET", "data/patterns.ini"); |
| + request.overrideMimeType("text/plain; charset=utf-8"); |
| + request.addEventListener("load", function() |
| + { |
| + writeToFile(tempFile, request.responseText); |
| + loadFilters(tempFile, saveFile); |
| + }, false); |
| + request.send(null); |
| } |
| function saveFile() |
| { |
| equal(FilterStorage.fileProperties.version, FilterStorage.formatVersion, "File format version"); |
| if (withExternal) |
| { |
| @@ -109,71 +128,78 @@ |
| if (externalSubscriptions.length == 1) |
| { |
| equal(externalSubscriptions[0].url, "~external~external subscription ID", "ID of external subscription"); |
| equal(externalSubscriptions[0].filters.length, 2, "Number of filters in external subscription"); |
| } |
| } |
| - saveFilters(tempFile, compareFile); |
| + saveFilters(tempFile2, compareFile); |
| } |
| function compareFile() |
| { |
| let stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream); |
| - stream.init(tempFile, FileUtils.MODE_RDONLY, FileUtils.PERMS_FILE, Ci.nsIFileInputStream.DEFER_OPEN); |
| + stream.init(tempFile2, FileUtils.MODE_RDONLY, FileUtils.PERMS_FILE, Ci.nsIFileInputStream.DEFER_OPEN); |
| NetUtil.asyncFetch(stream, function(inputStream, nsresult) |
| { |
| let result = NetUtil.readInputStreamToString(inputStream, inputStream.available(), {charset: "utf-8"}); |
| let request = new XMLHttpRequest(); |
| request.open("GET", "data/patterns.ini"); |
| request.overrideMimeType("text/plain"); |
| request.addEventListener("load", function() |
| { |
| let expected = request.responseText; |
| equal(canonize(result), canonize(expected), "Read/write result"); |
| tempFile.remove(false); |
| + tempFile2.remove(false); |
| start(); |
| }, false); |
| request.send(null); |
| }); |
| } |
| } |
| - asyncTest("Read from URL, write to file", testReadWrite.bind(false)); |
| - asyncTest("Read from URL, add external subscription, write to file", testReadWrite.bind(true)); |
| + asyncTest("Read and save to file", testReadWrite.bind(false)); |
| + asyncTest("Read, add external subscription and save to file", testReadWrite.bind(true)); |
| let groupTests = [ |
| ["~wl~", "whitelist"], |
| ["~fl~", "blocking"], |
| ["~eh~", "elemhide"] |
| ]; |
| for (let i = 0; i < groupTests.length; i++) |
| { |
| let [url, defaults] = groupTests[i]; |
| asyncTest("Read empty legacy user-defined group (" + url + ")", function() |
| { |
| let data = "[Subscription]\nurl=" + url; |
| - let source = "data:text/plain;charset=utf-8," + encodeURIComponent(data); |
| - loadFilters(Services.io.newURI(source, null, null), function() |
| + let tempFile = FileUtils.getFile("TmpD", ["temp_patterns1.ini"]); |
| + writeToFile(tempFile, data); |
| + |
| + loadFilters(tempFile, function() |
| { |
| + tempFile.remove(false); |
| equal(FilterStorage.subscriptions.length, 0, "Number of filter subscriptions"); |
| start(); |
| }); |
| }); |
| asyncTest("Read non-empty legacy user-defined group (" + url + ")", function() |
| { |
| let data = "[Subscription]\nurl=" + url + "\n[Subscription filters]\nfoo"; |
| - let source = "data:text/plain;charset=utf-8," + encodeURIComponent(data); |
| - loadFilters(Services.io.newURI(source, null, null), function() |
| + let tempFile = FileUtils.getFile("TmpD", ["temp_patterns1.ini"]); |
| + writeToFile(tempFile, data); |
| + |
| + loadFilters(tempFile, function() |
| { |
| + tempFile.remove(false); |
| equal(FilterStorage.subscriptions.length, 1, "Number of filter subscriptions"); |
| if (FilterStorage.subscriptions.length == 1) |
| { |
| let subscription = FilterStorage.subscriptions[0]; |
| equal(subscription.url, url, "Subscription ID"); |
| equal(subscription.title, Utils.getString(defaults + "Group_title"), "Subscription title"); |
| deepEqual(subscription.defaults, [defaults], "Default types"); |
| equal(subscription.filters.length, 1, "Number of subscription filters"); |
| @@ -183,19 +209,22 @@ |
| start(); |
| }); |
| }); |
| } |
| asyncTest("Read legacy user-defined filters", function() |
| { |
| let data = "[Subscription]\nurl=~user~1234\ntitle=Foo\n[Subscription filters]\n[User patterns]\nfoo\n\\[bar]\nfoo#bar"; |
| - let source = "data:text/plain;charset=utf-8," + encodeURIComponent(data); |
| - loadFilters(Services.io.newURI(source, null, null), function() |
| + let tempFile = FileUtils.getFile("TmpD", ["temp_patterns1.ini"]); |
| + writeToFile(tempFile, data); |
| + |
| + loadFilters(tempFile, function() |
| { |
| + tempFile.remove(false); |
| equal(FilterStorage.subscriptions.length, 1, "Number of filter subscriptions"); |
| if (FilterStorage.subscriptions.length == 1) |
| { |
| let subscription = FilterStorage.subscriptions[0]; |
| equal(subscription.filters.length, 3, "Number of subscription filters"); |
| if (subscription.filters.length == 3) |
| { |
| equal(subscription.filters[0].text, "foo", "First filter"); |