| Left: | ||
| Right: | 
| LEFT | RIGHT | 
|---|---|
| 1 /* | 1 /* | 
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 
| 3 * Copyright (C) 2006-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 Eyeo GmbH | 
| 4 * | 4 * | 
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify | 
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as | 
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. | 
| 8 * | 8 * | 
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, | 
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| (...skipping 29 matching lines...) Expand all Loading... | |
| 40 ); | 40 ); | 
| 41 | 41 | 
| 42 FilterStorage.addSubscription(Subscription.fromURL("~fl~")); | 42 FilterStorage.addSubscription(Subscription.fromURL("~fl~")); | 
| 43 callback(); | 43 callback(); | 
| 44 } | 44 } | 
| 45 | 45 | 
| 46 let testData = new Promise((resolve, reject) => | 46 let testData = new Promise((resolve, reject) => | 
| 47 { | 47 { | 
| 48 let fs = require("fs"); | 48 let fs = require("fs"); | 
| 49 let path = require("path"); | 49 let path = require("path"); | 
| 50 let datapath = path.resolve(__dirname, "data", "patterns.ini"); | 50 let datapath = path.resolve(__dirname, "data", "patterns.ini"); | 
| 
 
kzar
2016/10/06 05:13:38
Did you forget to add the data/patterns.ini file?
 
Wladimir Palant
2016/10/06 07:13:59
No, I copied the files in a separate commit - what
 
kzar
2016/10/06 08:06:47
Acknowledged.
 
 | |
| 51 | 51 | 
| 52 fs.readFile(datapath, "utf-8", (error, data) => | 52 fs.readFile(datapath, "utf-8", (error, data) => | 
| 53 { | 53 { | 
| 54 if (error) | 54 if (error) | 
| 55 reject(error); | 55 reject(error); | 
| 56 else | 56 else | 
| 57 resolve(data); | 57 resolve(data); | 
| 58 }); | 58 }); | 
| 59 }); | 59 }); | 
| 60 | 60 | 
| 61 function loadFilters(file) | 61 function loadFilters(file) | 
| 62 { | 62 { | 
| 63 return new Promise((resolve, reject) => | 63 FilterStorage.loadFromDisk(file); | 
| 64 { | 64 return FilterNotifier.once("load"); | 
| 65 let listener = function(action) | 65 } | 
| 
 
kzar
2016/10/06 05:13:38
Seems like this logic is nearly identical in saveF
 
Wladimir Palant
2016/10/06 07:13:59
Reusing isn't quite trivial but with the new Filte
 
 | |
| 66 { | 66 | 
| 67 if (action == "load") | 67 function saveFilters(file) | 
| 68 { | 68 { | 
| 69 FilterNotifier.removeListener(listener); | 69 FilterStorage.saveToDisk(file); | 
| 70 resolve(); | 70 return FilterNotifier.once("save"); | 
| 71 } | |
| 72 }; | |
| 73 FilterNotifier.addListener(listener); | |
| 74 | |
| 75 FilterStorage.loadFromDisk(file); | |
| 76 }); | |
| 77 } | |
| 78 | |
| 79 function saveFilters(file, callback) | |
| 80 { | |
| 81 return new Promise((resolve, reject) => | |
| 82 { | |
| 83 let listener = function(action) | |
| 84 { | |
| 85 if (action == "save") | |
| 86 { | |
| 87 FilterNotifier.removeListener(listener); | |
| 88 resolve(); | |
| 89 } | |
| 90 }; | |
| 91 FilterNotifier.addListener(listener); | |
| 92 | |
| 93 FilterStorage.saveToDisk(file); | |
| 94 }); | |
| 95 } | 71 } | 
| 96 | 72 | 
| 97 function testReadWrite(test, withExternal) | 73 function testReadWrite(test, withExternal) | 
| 98 { | 74 { | 
| 99 let tempFile = IO.resolveFilePath("temp_patterns1.ini"); | 75 let tempFile = IO.resolveFilePath("temp_patterns1.ini"); | 
| 100 let tempFile2 = IO.resolveFilePath("temp_patterns2.ini"); | 76 let tempFile2 = IO.resolveFilePath("temp_patterns2.ini"); | 
| 101 | 77 | 
| 102 function canonize(data) | 78 function canonize(data) | 
| 103 { | 79 { | 
| 104 let curSection = null; | 80 let curSection = null; | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 139 tempFile.contents = data; | 115 tempFile.contents = data; | 
| 140 return loadFilters(tempFile); | 116 return loadFilters(tempFile); | 
| 141 }).then(() => | 117 }).then(() => | 
| 142 { | 118 { | 
| 143 test.equal(FilterStorage.fileProperties.version, FilterStorage.formatVersion , "File format version"); | 119 test.equal(FilterStorage.fileProperties.version, FilterStorage.formatVersion , "File format version"); | 
| 144 | 120 | 
| 145 if (withExternal) | 121 if (withExternal) | 
| 146 { | 122 { | 
| 147 let subscription = new ExternalSubscription("~external~external subscripti on ID", "External subscription"); | 123 let subscription = new ExternalSubscription("~external~external subscripti on ID", "External subscription"); | 
| 148 subscription.filters = [Filter.fromText("foo"), Filter.fromText("bar")]; | 124 subscription.filters = [Filter.fromText("foo"), Filter.fromText("bar")]; | 
| 149 FilterStorage.addSubscription(subscription); | 125 FilterStorage.addSubscription(subscription); | 
| 
 
Wladimir Palant
2016/10/05 20:10:22
This was calling our public API in the original te
 
kzar
2016/10/06 05:13:38
Acknowledged.
 
 | |
| 150 | 126 | 
| 151 let externalSubscriptions = FilterStorage.subscriptions.filter(subscriptio n => subscription instanceof ExternalSubscription); | 127 let externalSubscriptions = FilterStorage.subscriptions.filter(subscriptio n => subscription instanceof ExternalSubscription); | 
| 152 test.equal(externalSubscriptions.length, 1, "Number of external subscripti ons after updateExternalSubscription"); | 128 test.equal(externalSubscriptions.length, 1, "Number of external subscripti ons after updateExternalSubscription"); | 
| 153 | 129 | 
| 154 test.equal(externalSubscriptions[0].url, "~external~external subscription ID", "ID of external subscription"); | 130 test.equal(externalSubscriptions[0].url, "~external~external subscription ID", "ID of external subscription"); | 
| 155 test.equal(externalSubscriptions[0].filters.length, 2, "Number of filters in external subscription"); | 131 test.equal(externalSubscriptions[0].filters.length, 2, "Number of filters in external subscription"); | 
| 156 } | 132 } | 
| 157 | 133 | 
| 158 return saveFilters(tempFile2); | 134 return saveFilters(tempFile2); | 
| 159 }).then(() => testData).then(expected => | 135 }).then(() => testData).then(expected => | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 193 let data = "[Subscription]\nurl=" + url + "\n[Subscription filters]\nfoo"; | 169 let data = "[Subscription]\nurl=" + url + "\n[Subscription filters]\nfoo"; | 
| 194 let tempFile = IO.resolveFilePath("temp_patterns1.ini"); | 170 let tempFile = IO.resolveFilePath("temp_patterns1.ini"); | 
| 195 tempFile.contents = data; | 171 tempFile.contents = data; | 
| 196 | 172 | 
| 197 loadFilters(tempFile).then(() => | 173 loadFilters(tempFile).then(() => | 
| 198 { | 174 { | 
| 199 test.equal(FilterStorage.subscriptions.length, 1, "Number of filter subscr iptions"); | 175 test.equal(FilterStorage.subscriptions.length, 1, "Number of filter subscr iptions"); | 
| 200 if (FilterStorage.subscriptions.length == 1) | 176 if (FilterStorage.subscriptions.length == 1) | 
| 201 { | 177 { | 
| 202 let subscription = FilterStorage.subscriptions[0]; | 178 let subscription = FilterStorage.subscriptions[0]; | 
| 203 test.equal(subscription.url, url, "Subscription ID"); | 179 test.equal(subscription.url, url, "Subscription ID"); | 
| 
 
kzar
2016/10/06 05:13:37
Won't `url` always be "~eh~" by the time the test
 
Wladimir Palant
2016/10/06 07:13:59
Good question. I checked and this isn't the case -
 
kzar
2016/10/06 08:06:47
Ah of course.
 
 | |
| 204 test.equal(subscription.title, null, "Subscription title"); | 180 test.equal(subscription.title, null, "Subscription title"); | 
| 205 test.deepEqual(subscription.defaults, null, "Default types"); | 181 test.deepEqual(subscription.defaults, null, "Default types"); | 
| 
 
Wladimir Palant
2016/10/05 20:10:22
I had to modify this, the fallback for legacy grou
 
kzar
2016/10/06 05:13:37
Acknowledged.
 
 | |
| 206 test.equal(subscription.filters.length, 1, "Number of subscription filte rs"); | 182 test.equal(subscription.filters.length, 1, "Number of subscription filte rs"); | 
| 207 if (subscription.filters.length == 1) | 183 if (subscription.filters.length == 1) | 
| 208 test.equal(subscription.filters[0].text, "foo", "First filter"); | 184 test.equal(subscription.filters[0].text, "foo", "First filter"); | 
| 209 } | 185 } | 
| 210 }).catch(unexpectedError.bind(test)).then(() => test.done()); | 186 }).catch(unexpectedError.bind(test)).then(() => test.done()); | 
| 211 }; | 187 }; | 
| 212 } | 188 } | 
| 213 | 189 | 
| 214 exports.testReadLegacyFilters = function(test) | 190 exports.testReadLegacyFilters = function(test) | 
| 215 { | 191 { | 
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 306 backupFile.lastModifiedTime -= 25*60*60*1000; | 282 backupFile.lastModifiedTime -= 25*60*60*1000; | 
| 307 oldModifiedTime = backupFile2.lastModifiedTime; | 283 oldModifiedTime = backupFile2.lastModifiedTime; | 
| 308 return saveFilters(null); | 284 return saveFilters(null); | 
| 309 }).then(() => | 285 }).then(() => | 
| 310 { | 286 { | 
| 311 test.notEqual(backupFile2.lastModifiedTime, oldModifiedTime, "Second backup overwritten if first one is 25 hours old"); | 287 test.notEqual(backupFile2.lastModifiedTime, oldModifiedTime, "Second backup overwritten if first one is 25 hours old"); | 
| 312 | 288 | 
| 313 test.ok(!backupFile3.exists(), "Third backup not created with patternsbackup s = 2"); | 289 test.ok(!backupFile3.exists(), "Third backup not created with patternsbackup s = 2"); | 
| 314 }).catch(unexpectedError.bind(test)).then(() => test.done()); | 290 }).catch(unexpectedError.bind(test)).then(() => test.done()); | 
| 315 }; | 291 }; | 
| LEFT | RIGHT |