Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: chrome/content/tests/filterStorage_readwrite.js

Issue 6250418359238656: Issue 153 - Added tests for io.js and updated filter storage tests (Closed)
Patch Set: Created March 21, 2014, 1:15 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/content/common.js ('k') | chrome/content/tests/io.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 (function() 1 (function()
2 { 2 {
3 module("Filter storage read/write", { 3 module("Filter storage read/write", {
4 setup: function() 4 setup: function()
5 { 5 {
6 prepareFilterComponents.call(this); 6 prepareFilterComponents.call(this);
7 preparePrefs.call(this); 7 preparePrefs.call(this);
8 8
9 FilterStorage.addSubscription(Subscription.fromURL("~fl~")); 9 FilterStorage.addSubscription(Subscription.fromURL("~fl~"));
10 }, 10 },
(...skipping 15 matching lines...) Expand all
26 { 26 {
27 FilterNotifier.removeListener(listener); 27 FilterNotifier.removeListener(listener);
28 callback(); 28 callback();
29 } 29 }
30 }; 30 };
31 FilterNotifier.addListener(listener); 31 FilterNotifier.addListener(listener);
32 32
33 FilterStorage.loadFromDisk(file); 33 FilterStorage.loadFromDisk(file);
34 } 34 }
35 35
36 function writeToFile(file, data)
37 {
38 let converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createIns tance(Ci.nsIScriptableUnicodeConverter);
39 converter.charset = "utf-8";
40 data = converter.ConvertFromUnicode(data);
41
42 let stream = FileUtils.openFileOutputStream(file);
43 stream.write(data, data.length);
44 stream.close();
45 }
46
36 function saveFilters(file, callback) 47 function saveFilters(file, callback)
37 { 48 {
38 let listener = function(action) 49 let listener = function(action)
39 { 50 {
40 if (action == "save") 51 if (action == "save")
41 { 52 {
42 FilterNotifier.removeListener(listener); 53 FilterNotifier.removeListener(listener);
43 callback(); 54 callback();
44 } 55 }
45 }; 56 };
46 FilterNotifier.addListener(listener); 57 FilterNotifier.addListener(listener);
47 58
48 FilterStorage.saveToDisk(file); 59 FilterStorage.saveToDisk(file);
49 } 60 }
50 61
51 function testReadWrite(withExternal) 62 function testReadWrite(withExternal)
52 { 63 {
53 let tempFile = FileUtils.getFile("TmpD", ["temp_patterns.ini"]); 64 let tempFile = FileUtils.getFile("TmpD", ["temp_patterns1.ini"]);
65 let tempFile2 = FileUtils.getFile("TmpD", ["temp_patterns2.ini"]);
54 tempFile.createUnique(tempFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE); 66 tempFile.createUnique(tempFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE);
55 readFile(); 67 createTempFile();
56 68
57 function canonize(data) 69 function canonize(data)
58 { 70 {
59 let curSection = null; 71 let curSection = null;
60 let sections = []; 72 let sections = [];
61 for each (let line in (data + "\n[end]").split(/[\r\n]+/)) 73 for each (let line in (data + "\n[end]").split(/[\r\n]+/))
62 { 74 {
63 if (/^\[.*\]$/.test(line)) 75 if (/^\[.*\]$/.test(line))
64 { 76 {
65 if (curSection) 77 if (curSection)
(...skipping 16 matching lines...) Expand all
82 else if (a.key > b.key) 94 else if (a.key > b.key)
83 return 1; 95 return 1;
84 else 96 else
85 return 0; 97 return 0;
86 }); 98 });
87 return sections.map(function(section) { 99 return sections.map(function(section) {
88 return [section.header].concat(section.data).join("\n"); 100 return [section.header].concat(section.data).join("\n");
89 }).join("\n"); 101 }).join("\n");
90 } 102 }
91 103
92 function readFile() 104 function createTempFile()
93 { 105 {
94 let source = Services.io.newURI("data/patterns.ini", null, Services.io.new URI(window.location.href, null, null)); 106 let request = new XMLHttpRequest();
95 loadFilters(source, saveFile); 107 request.open("GET", "data/patterns.ini");
108 request.overrideMimeType("text/plain; charset=utf-8");
109 request.addEventListener("load", function()
110 {
111 writeToFile(tempFile, request.responseText);
112 loadFilters(tempFile, saveFile);
113 }, false);
114 request.send(null);
96 } 115 }
97 116
98 function saveFile() 117 function saveFile()
99 { 118 {
100 equal(FilterStorage.fileProperties.version, FilterStorage.formatVersion, " File format version"); 119 equal(FilterStorage.fileProperties.version, FilterStorage.formatVersion, " File format version");
101 120
102 if (withExternal) 121 if (withExternal)
103 { 122 {
104 let {AdblockPlus} = Cu.import(Cc["@adblockplus.org/abp/public;1"].getSer vice(Ci.nsIURI).spec, null); 123 let {AdblockPlus} = Cu.import(Cc["@adblockplus.org/abp/public;1"].getSer vice(Ci.nsIURI).spec, null);
105 AdblockPlus.updateExternalSubscription("~external~external subscription ID", "External subscription", ["foo", "bar"]); 124 AdblockPlus.updateExternalSubscription("~external~external subscription ID", "External subscription", ["foo", "bar"]);
106 125
107 let externalSubscriptions = FilterStorage.subscriptions.filter(function (subscription) subscription instanceof ExternalSubscription); 126 let externalSubscriptions = FilterStorage.subscriptions.filter(function (subscription) subscription instanceof ExternalSubscription);
108 equal(externalSubscriptions.length, 1, "Number of external subscriptions after updateExternalSubscription"); 127 equal(externalSubscriptions.length, 1, "Number of external subscriptions after updateExternalSubscription");
109 128
110 if (externalSubscriptions.length == 1) 129 if (externalSubscriptions.length == 1)
111 { 130 {
112 equal(externalSubscriptions[0].url, "~external~external subscription I D", "ID of external subscription"); 131 equal(externalSubscriptions[0].url, "~external~external subscription I D", "ID of external subscription");
113 equal(externalSubscriptions[0].filters.length, 2, "Number of filters i n external subscription"); 132 equal(externalSubscriptions[0].filters.length, 2, "Number of filters i n external subscription");
114 } 133 }
115 } 134 }
116 135
117 saveFilters(tempFile, compareFile); 136 saveFilters(tempFile2, compareFile);
118 } 137 }
119 138
120 function compareFile() 139 function compareFile()
121 { 140 {
122 let stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance (Ci.nsIFileInputStream); 141 let stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance (Ci.nsIFileInputStream);
123 stream.init(tempFile, FileUtils.MODE_RDONLY, FileUtils.PERMS_FILE, Ci.nsIF ileInputStream.DEFER_OPEN); 142 stream.init(tempFile2, FileUtils.MODE_RDONLY, FileUtils.PERMS_FILE, Ci.nsI FileInputStream.DEFER_OPEN);
124 143
125 NetUtil.asyncFetch(stream, function(inputStream, nsresult) 144 NetUtil.asyncFetch(stream, function(inputStream, nsresult)
126 { 145 {
127 let result = NetUtil.readInputStreamToString(inputStream, inputStream.av ailable(), {charset: "utf-8"}); 146 let result = NetUtil.readInputStreamToString(inputStream, inputStream.av ailable(), {charset: "utf-8"});
128 147
129 let request = new XMLHttpRequest(); 148 let request = new XMLHttpRequest();
130 request.open("GET", "data/patterns.ini"); 149 request.open("GET", "data/patterns.ini");
131 request.overrideMimeType("text/plain"); 150 request.overrideMimeType("text/plain");
132 request.addEventListener("load", function() 151 request.addEventListener("load", function()
133 { 152 {
134 let expected = request.responseText; 153 let expected = request.responseText;
135 equal(canonize(result), canonize(expected), "Read/write result"); 154 equal(canonize(result), canonize(expected), "Read/write result");
136 155
137 tempFile.remove(false); 156 tempFile.remove(false);
157 tempFile2.remove(false);
138 start(); 158 start();
139 }, false); 159 }, false);
140 request.send(null); 160 request.send(null);
141 }); 161 });
142 } 162 }
143 } 163 }
144 164
145 asyncTest("Read from URL, write to file", testReadWrite.bind(false)); 165 asyncTest("Read and save to file", testReadWrite.bind(false));
146 asyncTest("Read from URL, add external subscription, write to file", testReadW rite.bind(true)); 166 asyncTest("Read, add external subscription and save to file", testReadWrite.bi nd(true));
147 167
148 let groupTests = [ 168 let groupTests = [
149 ["~wl~", "whitelist"], 169 ["~wl~", "whitelist"],
150 ["~fl~", "blocking"], 170 ["~fl~", "blocking"],
151 ["~eh~", "elemhide"] 171 ["~eh~", "elemhide"]
152 ]; 172 ];
153 for (let i = 0; i < groupTests.length; i++) 173 for (let i = 0; i < groupTests.length; i++)
154 { 174 {
155 let [url, defaults] = groupTests[i]; 175 let [url, defaults] = groupTests[i];
156 asyncTest("Read empty legacy user-defined group (" + url + ")", function() 176 asyncTest("Read empty legacy user-defined group (" + url + ")", function()
157 { 177 {
158 let data = "[Subscription]\nurl=" + url; 178 let data = "[Subscription]\nurl=" + url;
159 let source = "data:text/plain;charset=utf-8," + encodeURIComponent(data); 179 let tempFile = FileUtils.getFile("TmpD", ["temp_patterns1.ini"]);
160 loadFilters(Services.io.newURI(source, null, null), function() 180 writeToFile(tempFile, data);
181
182 loadFilters(tempFile, function()
161 { 183 {
184 tempFile.remove(false);
162 equal(FilterStorage.subscriptions.length, 0, "Number of filter subscript ions"); 185 equal(FilterStorage.subscriptions.length, 0, "Number of filter subscript ions");
163 start(); 186 start();
164 }); 187 });
165 }); 188 });
166 asyncTest("Read non-empty legacy user-defined group (" + url + ")", function () 189 asyncTest("Read non-empty legacy user-defined group (" + url + ")", function ()
167 { 190 {
168 let data = "[Subscription]\nurl=" + url + "\n[Subscription filters]\nfoo"; 191 let data = "[Subscription]\nurl=" + url + "\n[Subscription filters]\nfoo";
169 let source = "data:text/plain;charset=utf-8," + encodeURIComponent(data); 192 let tempFile = FileUtils.getFile("TmpD", ["temp_patterns1.ini"]);
170 loadFilters(Services.io.newURI(source, null, null), function() 193 writeToFile(tempFile, data);
194
195 loadFilters(tempFile, function()
171 { 196 {
197 tempFile.remove(false);
172 equal(FilterStorage.subscriptions.length, 1, "Number of filter subscript ions"); 198 equal(FilterStorage.subscriptions.length, 1, "Number of filter subscript ions");
173 if (FilterStorage.subscriptions.length == 1) 199 if (FilterStorage.subscriptions.length == 1)
174 { 200 {
175 let subscription = FilterStorage.subscriptions[0]; 201 let subscription = FilterStorage.subscriptions[0];
176 equal(subscription.url, url, "Subscription ID"); 202 equal(subscription.url, url, "Subscription ID");
177 equal(subscription.title, Utils.getString(defaults + "Group_title"), " Subscription title"); 203 equal(subscription.title, Utils.getString(defaults + "Group_title"), " Subscription title");
178 deepEqual(subscription.defaults, [defaults], "Default types"); 204 deepEqual(subscription.defaults, [defaults], "Default types");
179 equal(subscription.filters.length, 1, "Number of subscription filters" ); 205 equal(subscription.filters.length, 1, "Number of subscription filters" );
180 if (subscription.filters.length == 1) 206 if (subscription.filters.length == 1)
181 equal(subscription.filters[0].text, "foo", "First filter"); 207 equal(subscription.filters[0].text, "foo", "First filter");
182 } 208 }
183 start(); 209 start();
184 }); 210 });
185 }); 211 });
186 } 212 }
187 213
188 asyncTest("Read legacy user-defined filters", function() 214 asyncTest("Read legacy user-defined filters", function()
189 { 215 {
190 let data = "[Subscription]\nurl=~user~1234\ntitle=Foo\n[Subscription filters ]\n[User patterns]\nfoo\n\\[bar]\nfoo#bar"; 216 let data = "[Subscription]\nurl=~user~1234\ntitle=Foo\n[Subscription filters ]\n[User patterns]\nfoo\n\\[bar]\nfoo#bar";
191 let source = "data:text/plain;charset=utf-8," + encodeURIComponent(data); 217 let tempFile = FileUtils.getFile("TmpD", ["temp_patterns1.ini"]);
192 loadFilters(Services.io.newURI(source, null, null), function() 218 writeToFile(tempFile, data);
219
220 loadFilters(tempFile, function()
193 { 221 {
222 tempFile.remove(false);
194 equal(FilterStorage.subscriptions.length, 1, "Number of filter subscriptio ns"); 223 equal(FilterStorage.subscriptions.length, 1, "Number of filter subscriptio ns");
195 if (FilterStorage.subscriptions.length == 1) 224 if (FilterStorage.subscriptions.length == 1)
196 { 225 {
197 let subscription = FilterStorage.subscriptions[0]; 226 let subscription = FilterStorage.subscriptions[0];
198 equal(subscription.filters.length, 3, "Number of subscription filters"); 227 equal(subscription.filters.length, 3, "Number of subscription filters");
199 if (subscription.filters.length == 3) 228 if (subscription.filters.length == 3)
200 { 229 {
201 equal(subscription.filters[0].text, "foo", "First filter"); 230 equal(subscription.filters[0].text, "foo", "First filter");
202 equal(subscription.filters[1].text, "[bar]", "Second filter"); 231 equal(subscription.filters[1].text, "[bar]", "Second filter");
203 equal(subscription.filters[2].text, "foo#bar", "Third filter"); 232 equal(subscription.filters[2].text, "foo#bar", "Third filter");
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 } catch (e) {} 349 } catch (e) {}
321 try 350 try
322 { 351 {
323 backupFile3.remove(false); 352 backupFile3.remove(false);
324 } catch (e) {} 353 } catch (e) {}
325 354
326 start(); 355 start();
327 } 356 }
328 }); 357 });
329 })(); 358 })();
OLDNEW
« no previous file with comments | « chrome/content/common.js ('k') | chrome/content/tests/io.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld