| OLD | NEW | 
|---|
| 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 | 
| 11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
| 12  * GNU General Public License for more details. | 12  * GNU General Public License for more details. | 
| 13  * | 13  * | 
| 14  * You should have received a copy of the GNU General Public License | 14  * You should have received a copy of the GNU General Public License | 
| 15  * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 15  * along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 
| 16  */ | 16  */ | 
| 17 | 17 | 
| 18 "use strict"; | 18 "use strict"; | 
| 19 | 19 | 
| 20 let {createSandbox, unexpectedError} = require("./_common"); | 20 const {createSandbox, unexpectedError} = require("./_common"); | 
| 21 | 21 | 
| 22 let Filter = null; | 22 let Filter = null; | 
| 23 let FilterNotifier = null; | 23 let FilterNotifier = null; | 
| 24 let FilterStorage = null; | 24 let FilterStorage = null; | 
| 25 let IO = null; | 25 let IO = null; | 
| 26 let Prefs = null; | 26 let Prefs = null; | 
| 27 let Subscription = null; | 27 let Subscription = null; | 
| 28 let ExternalSubscription = null; | 28 let ExternalSubscription = null; | 
| 29 | 29 | 
| 30 exports.setUp = function(callback) | 30 exports.setUp = function(callback) | 
| 31 { | 31 { | 
| 32   let sandboxedRequire = createSandbox(); | 32   let sandboxedRequire = createSandbox(); | 
| 33   ( | 33   ( | 
| 34     {Filter} = sandboxedRequire("../lib/filterClasses"), | 34     {Filter} = sandboxedRequire("../lib/filterClasses"), | 
| 35     {FilterNotifier} = sandboxedRequire("../lib/filterNotifier"), | 35     {FilterNotifier} = sandboxedRequire("../lib/filterNotifier"), | 
| 36     {FilterStorage} = sandboxedRequire("../lib/filterStorage"), | 36     {FilterStorage} = sandboxedRequire("../lib/filterStorage"), | 
| 37     {IO} = sandboxedRequire("./stub-modules/io"), | 37     {IO} = sandboxedRequire("./stub-modules/io"), | 
| 38     {Prefs} = sandboxedRequire("./stub-modules/prefs"), | 38     {Prefs} = sandboxedRequire("./stub-modules/prefs"), | 
| 39     {Subscription, ExternalSubscription} = sandboxedRequire("../lib/subscription
     Classes") | 39     {Subscription, ExternalSubscription} = sandboxedRequire("../lib/subscription
     Classes") | 
| 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   const fs = require("fs"); | 
| 49   let path = require("path"); | 49   const path = require("path"); | 
| 50   let datapath = path.resolve(__dirname, "data", "patterns.ini"); | 50   let datapath = path.resolve(__dirname, "data", "patterns.ini"); | 
| 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 }); | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 89         curSection = {header: line, data: []}; | 89         curSection = {header: line, data: []}; | 
| 90       } | 90       } | 
| 91       else if (curSection && /\S/.test(line)) | 91       else if (curSection && /\S/.test(line)) | 
| 92         curSection.data.push(line); | 92         curSection.data.push(line); | 
| 93     } | 93     } | 
| 94     for (let section of sections) | 94     for (let section of sections) | 
| 95     { | 95     { | 
| 96       section.key = section.header + " " + section.data[0]; | 96       section.key = section.header + " " + section.data[0]; | 
| 97       section.data.sort(); | 97       section.data.sort(); | 
| 98     } | 98     } | 
| 99     sections.sort(function(a, b) | 99     sections.sort((a, b) => | 
| 100     { | 100     { | 
| 101       if (a.key < b.key) | 101       if (a.key < b.key) | 
| 102         return -1; | 102         return -1; | 
| 103       else if (a.key > b.key) | 103       else if (a.key > b.key) | 
| 104         return 1; | 104         return 1; | 
| 105       else | 105       return 0; | 
| 106         return 0; |  | 
| 107     }); | 106     }); | 
| 108     return sections.map(function(section) { | 107     return sections.map( | 
| 109       return [section.header].concat(section.data).join("\n"); | 108       section => [section.header].concat(section.data).join("\n") | 
| 110     }).join("\n"); | 109     ).join("\n"); | 
| 111   } | 110   } | 
| 112 | 111 | 
| 113   return testData.then(data => | 112   return testData.then(data => | 
| 114   { | 113   { | 
| 115     tempFile.contents = data; | 114     tempFile.contents = data; | 
| 116     return loadFilters(tempFile); | 115     return loadFilters(tempFile); | 
| 117   }).then(() => | 116   }).then(() => | 
| 118   { | 117   { | 
| 119     test.equal(FilterStorage.fileProperties.version, FilterStorage.formatVersion
     , "File format version"); | 118     test.equal(FilterStorage.fileProperties.version, FilterStorage.formatVersion
     , "File format version"); | 
| 120 | 119 | 
| 121     if (withExternal) | 120     if (withExternal) | 
| 122     { | 121     { | 
| 123       let subscription = new ExternalSubscription("~external~external subscripti
     on ID", "External subscription"); | 122       { | 
| 124       subscription.filters = [Filter.fromText("foo"), Filter.fromText("bar")]; | 123         let subscription = new ExternalSubscription("~external~external subscrip
     tion ID", "External subscription"); | 
| 125       FilterStorage.addSubscription(subscription); | 124         subscription.filters = [Filter.fromText("foo"), Filter.fromText("bar")]; | 
|  | 125         FilterStorage.addSubscription(subscription); | 
|  | 126       } | 
| 126 | 127 | 
| 127       let externalSubscriptions = FilterStorage.subscriptions.filter(subscriptio
     n => subscription instanceof ExternalSubscription); | 128       let externalSubscriptions = FilterStorage.subscriptions.filter(subscriptio
     n => subscription instanceof ExternalSubscription); | 
| 128       test.equal(externalSubscriptions.length, 1, "Number of external subscripti
     ons after updateExternalSubscription"); | 129       test.equal(externalSubscriptions.length, 1, "Number of external subscripti
     ons after updateExternalSubscription"); | 
| 129 | 130 | 
| 130       test.equal(externalSubscriptions[0].url, "~external~external subscription 
     ID", "ID of external subscription"); | 131       test.equal(externalSubscriptions[0].url, "~external~external subscription 
     ID", "ID of external subscription"); | 
| 131       test.equal(externalSubscriptions[0].filters.length, 2, "Number of filters 
     in external subscription"); | 132       test.equal(externalSubscriptions[0].filters.length, 2, "Number of filters 
     in external subscription"); | 
| 132     } | 133     } | 
| 133 | 134 | 
| 134     return saveFilters(tempFile2); | 135     return saveFilters(tempFile2); | 
| 135   }).then(() => testData).then(expected => | 136   }).then(() => testData).then(expected => | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 151 exports.testLegacyGroups = {}; | 152 exports.testLegacyGroups = {}; | 
| 152 | 153 | 
| 153 for (let url of ["~wl~", "~fl~", "~eh~"]) | 154 for (let url of ["~wl~", "~fl~", "~eh~"]) | 
| 154 { | 155 { | 
| 155   exports.testLegacyGroups["read empty " + url] = function(test) | 156   exports.testLegacyGroups["read empty " + url] = function(test) | 
| 156   { | 157   { | 
| 157     let data = "[Subscription]\nurl=" + url; | 158     let data = "[Subscription]\nurl=" + url; | 
| 158     let tempFile = IO.resolveFilePath("temp_patterns1.ini"); | 159     let tempFile = IO.resolveFilePath("temp_patterns1.ini"); | 
| 159     tempFile.contents = data; | 160     tempFile.contents = data; | 
| 160 | 161 | 
| 161     loadFilters(tempFile, function() | 162     loadFilters(tempFile, () => | 
| 162     { | 163     { | 
| 163       test.equal(FilterStorage.subscriptions.length, 0, "Number of filter subscr
     iptions"); | 164       test.equal(FilterStorage.subscriptions.length, 0, "Number of filter subscr
     iptions"); | 
| 164     }).catch(unexpectedError.bind(test)).then(() => test.done()); | 165     }).catch(unexpectedError.bind(test)).then(() => test.done()); | 
| 165   }; | 166   }; | 
| 166 | 167 | 
| 167   exports.testLegacyGroups["read non-empty " + url] = function(test) | 168   exports.testLegacyGroups["read non-empty " + url] = function(test) | 
| 168   { | 169   { | 
| 169     let data = "[Subscription]\nurl=" + url + "\n[Subscription filters]\nfoo"; | 170     let data = "[Subscription]\nurl=" + url + "\n[Subscription filters]\nfoo"; | 
| 170     let tempFile = IO.resolveFilePath("temp_patterns1.ini"); | 171     let tempFile = IO.resolveFilePath("temp_patterns1.ini"); | 
| 171     tempFile.contents = data; | 172     tempFile.contents = data; | 
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 256   { | 257   { | 
| 257     test.ok(backupFile.exists(), "First backup created"); | 258     test.ok(backupFile.exists(), "First backup created"); | 
| 258 | 259 | 
| 259     backupFile.lastModifiedTime -= 10000; | 260     backupFile.lastModifiedTime -= 10000; | 
| 260     oldModifiedTime = backupFile.lastModifiedTime; | 261     oldModifiedTime = backupFile.lastModifiedTime; | 
| 261     return saveFilters(null); | 262     return saveFilters(null); | 
| 262   }).then(() => | 263   }).then(() => | 
| 263   { | 264   { | 
| 264     test.equal(backupFile.lastModifiedTime, oldModifiedTime, "Backup not overwri
     tten if it is only 10 seconds old"); | 265     test.equal(backupFile.lastModifiedTime, oldModifiedTime, "Backup not overwri
     tten if it is only 10 seconds old"); | 
| 265 | 266 | 
| 266     backupFile.lastModifiedTime -= 40*60*60*1000; | 267     backupFile.lastModifiedTime -= 40 * 60 * 60 * 1000; | 
| 267     oldModifiedTime = backupFile.lastModifiedTime; | 268     oldModifiedTime = backupFile.lastModifiedTime; | 
| 268     return saveFilters(null); | 269     return saveFilters(null); | 
| 269   }).then(() => | 270   }).then(() => | 
| 270   { | 271   { | 
| 271     test.notEqual(backupFile.lastModifiedTime, oldModifiedTime, "Backup overwrit
     ten if it is 40 hours old"); | 272     test.notEqual(backupFile.lastModifiedTime, oldModifiedTime, "Backup overwrit
     ten if it is 40 hours old"); | 
| 272 | 273 | 
| 273     test.ok(backupFile2.exists(), "Second backup created when first backup is ov
     erwritten"); | 274     test.ok(backupFile2.exists(), "Second backup created when first backup is ov
     erwritten"); | 
| 274 | 275 | 
| 275     backupFile.lastModifiedTime -= 20000; | 276     backupFile.lastModifiedTime -= 20000; | 
| 276     oldModifiedTime = backupFile2.lastModifiedTime; | 277     oldModifiedTime = backupFile2.lastModifiedTime; | 
| 277     return saveFilters(null); | 278     return saveFilters(null); | 
| 278   }).then(() => | 279   }).then(() => | 
| 279   { | 280   { | 
| 280     test.equal(backupFile2.lastModifiedTime, oldModifiedTime, "Second backup not
      overwritten if first one is only 20 seconds old"); | 281     test.equal(backupFile2.lastModifiedTime, oldModifiedTime, "Second backup not
      overwritten if first one is only 20 seconds old"); | 
| 281 | 282 | 
| 282     backupFile.lastModifiedTime -= 25*60*60*1000; | 283     backupFile.lastModifiedTime -= 25 * 60 * 60 * 1000; | 
| 283     oldModifiedTime = backupFile2.lastModifiedTime; | 284     oldModifiedTime = backupFile2.lastModifiedTime; | 
| 284     return saveFilters(null); | 285     return saveFilters(null); | 
| 285   }).then(() => | 286   }).then(() => | 
| 286   { | 287   { | 
| 287     test.notEqual(backupFile2.lastModifiedTime, oldModifiedTime, "Second backup 
     overwritten if first one is 25 hours old"); | 288     test.notEqual(backupFile2.lastModifiedTime, oldModifiedTime, "Second backup 
     overwritten if first one is 25 hours old"); | 
| 288 | 289 | 
| 289     test.ok(!backupFile3.exists(), "Third backup not created with patternsbackup
     s = 2"); | 290     test.ok(!backupFile3.exists(), "Third backup not created with patternsbackup
     s = 2"); | 
| 290   }).catch(unexpectedError.bind(test)).then(() => test.done()); | 291   }).catch(unexpectedError.bind(test)).then(() => test.done()); | 
| 291 }; | 292 }; | 
| OLD | NEW | 
|---|