| OLD | NEW |
| 1 "use strict"; | 1 "use strict"; |
| 2 | 2 |
| 3 { | 3 { |
| 4 const {IO} = require("io"); | 4 const {IO} = require("io"); |
| 5 const info = require("info"); | 5 const info = require("info"); |
| 6 const {IndexedDBBackup} = require("../../lib/indexedDBBackup"); |
| 6 | 7 |
| 7 const testFileNames = { | 8 const testFileNames = { |
| 8 testData: "testData", | 9 testData: "testData", |
| 10 stat: "stat", |
| 9 simpleCheck: "simpleCheck", | 11 simpleCheck: "simpleCheck", |
| 10 write: "writeCheck", | 12 write: "writeCheck", |
| 11 read: "readCheck", | 13 read: "readCheck", |
| 14 readBackup: "readBackup", |
| 12 rename: "renameCheck" | 15 rename: "renameCheck" |
| 13 }; | 16 }; |
| 14 const testData = { | 17 const testData = { |
| 15 fileName: "file:" + testFileNames.testData, | 18 fileName: "file:" + testFileNames.testData, |
| 16 content: [1, 2, 3], | 19 content: [1, 2, 3], |
| 17 lastModified: Date.now() | 20 lastModified: Date.now() |
| 18 }; | 21 }; |
| 19 | 22 |
| 23 let _backupName = "test"; |
| 24 let _storageData = new Map(); |
| 25 |
| 26 IndexedDBBackup.getBackupData = () => |
| 27 { |
| 28 return new Promise((resolve, reject) => |
| 29 { |
| 30 if (_storageData.size) |
| 31 { |
| 32 resolve(_storageData.get(_backupName)); |
| 33 } |
| 34 else |
| 35 reject({type: "NoSuchFile"}); |
| 36 }); |
| 37 }; |
| 38 |
| 20 let testEdge = info.platform == "edgehtml" ? QUnit.test : QUnit.skip; | 39 let testEdge = info.platform == "edgehtml" ? QUnit.test : QUnit.skip; |
| 21 | 40 |
| 22 QUnit.module("Microsoft Edge filter storage", { | 41 QUnit.module("Microsoft Edge filter storage", { |
| 23 beforeEach() | 42 beforeEach(assert) |
| 24 { | 43 { |
| 25 return prePopulateStorage(); | 44 prePopulateStorage(assert); |
| 26 }, | 45 }, |
| 27 afterEach() | 46 afterEach(assert) |
| 28 { | 47 { |
| 29 return clearStorage(); | 48 _storageData.clear(); |
| 49 clearStorage(assert); |
| 30 } | 50 } |
| 31 }); | 51 }); |
| 32 | 52 |
| 33 testEdge("statFile", assert => | 53 testEdge("statFile", assert => |
| 34 { | 54 { |
| 35 const noFileMsg = "returns correct value if file doesn't exist"; | 55 const noFileMsg = "returns correct value if file doesn't exist" + |
| 36 const fileExistsMsg = "returns correct value if file exists"; | 56 " and there is no backup"; |
| 57 const fileExistsMsg = "returns correct value if file exists in indexedDB"; |
| 37 | 58 |
| 38 ok(IO.statFile(testFileNames.simpleCheck) instanceof Promise, | 59 ok(IO.statFile(testFileNames.simpleCheck) instanceof Promise, |
| 39 "returns a promise"); | 60 "returns a promise"); |
| 40 | 61 |
| 41 asyncReadHelper( | 62 asyncReadHelper( |
| 42 IO.statFile, | 63 IO.statFile, |
| 43 testFileNames.testData, | 64 testFileNames.testData, |
| 44 {exists: true, lastModified: testData.lastModified}, | 65 {exists: true, lastModified: testData.lastModified}, |
| 45 fileExistsMsg, | 66 fileExistsMsg, |
| 46 assert); | 67 assert); |
| 47 | 68 |
| 48 asyncReadHelper( | 69 asyncReadHelper( |
| 49 IO.statFile, | 70 IO.statFile, |
| 50 testFileNames.simpleCheck, | 71 testFileNames.simpleCheck, |
| 51 {exists: false}, | 72 {exists: false}, |
| 52 noFileMsg, | 73 noFileMsg, |
| 53 assert); | 74 assert); |
| 54 }); | 75 }); |
| 55 | 76 |
| 77 testEdge("restore backup", assert => |
| 78 { |
| 79 let backupData = { |
| 80 content: ["backup data"], |
| 81 lastModified: Date.now() |
| 82 }; |
| 83 let readFromFileMessage = "readFromFile return correct value," + |
| 84 " if a data restore is performed"; |
| 85 _storageData.set(_backupName, backupData); |
| 86 |
| 87 asyncReadHelper( |
| 88 IO.statFile, |
| 89 testFileNames.stat, |
| 90 {exists: true, lastModified: backupData.lastModified}, |
| 91 "statFile return correct value, if a data restore is performed", |
| 92 assert); |
| 93 |
| 94 callsListeners( |
| 95 testFileNames.readBackup, |
| 96 assert, backupData.content, |
| 97 readFromFileMessage); |
| 98 }); |
| 99 |
| 56 testEdge("writeToFile", assert => | 100 testEdge("writeToFile", assert => |
| 57 { | 101 { |
| 58 ok(IO.writeToFile(testFileNames.simpleCheck, ["test"]) instanceof Promise, | 102 ok(IO.writeToFile(testFileNames.simpleCheck, ["test"]) instanceof Promise, |
| 59 "returns a promise"); | 103 "returns a promise"); |
| 60 | 104 |
| 61 writesCorrectValue(assert); | 105 writesCorrectValue(assert); |
| 62 }); | 106 }); |
| 63 | 107 |
| 64 function writesCorrectValue(assert) | 108 function writesCorrectValue(assert) |
| 65 { | 109 { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 82 deepEqual( | 126 deepEqual( |
| 83 writeCheck.content, | 127 writeCheck.content, |
| 84 result.content, | 128 result.content, |
| 85 "data has the correct content"); | 129 "data has the correct content"); |
| 86 done(); | 130 done(); |
| 87 }); | 131 }); |
| 88 } | 132 } |
| 89 | 133 |
| 90 testEdge("readFromFile", assert => | 134 testEdge("readFromFile", assert => |
| 91 { | 135 { |
| 92 const noFileMsg = "returns correct value if file doesn't exist"; | 136 const noFileMsg = "returns correct value if file doesn't exist" + |
| 137 " and there is no backup"; |
| 138 const fileExistsMsg = "calls listeners with the correct values"; |
| 93 | 139 |
| 94 ok(IO.readFromFile(testFileNames.simpleCheck) instanceof Promise, | 140 ok(IO.readFromFile(testFileNames.simpleCheck) instanceof Promise, |
| 95 "returns a promise"); | 141 "returns a promise"); |
| 96 | 142 |
| 97 asyncReadHelper( | 143 asyncReadHelper( |
| 98 IO.readFromFile, | 144 IO.readFromFile, |
| 99 testFileNames.read, | 145 testFileNames.read, |
| 100 {type: "NoSuchFile"}, | 146 {type: "NoSuchFile"}, |
| 101 noFileMsg, | 147 noFileMsg, |
| 102 assert | 148 assert |
| 103 ); | 149 ); |
| 104 | 150 |
| 105 callsListeners(assert); | 151 callsListeners( |
| 152 testFileNames.testData, |
| 153 assert, |
| 154 testData.content, |
| 155 fileExistsMsg); |
| 106 }); | 156 }); |
| 107 | 157 |
| 108 function callsListeners(assert) | 158 function callsListeners(fileName, assert, expected, message) |
| 109 { | 159 { |
| 110 let done = assert.async(); | 160 let done = assert.async(); |
| 111 let called = []; | 161 let called = []; |
| 112 | 162 |
| 113 IO.readFromFile(testFileNames.testData, (entry) => called.push(entry)) | 163 IO.readFromFile(fileName, (entry) => called.push(entry)) |
| 114 .then(() => | 164 .then(() => |
| 115 { | 165 { |
| 116 deepEqual( | 166 deepEqual(called, expected, message); |
| 117 called, | |
| 118 testData.content, | |
| 119 "calls listeners with the correct values"); | |
| 120 done(); | 167 done(); |
| 121 }); | 168 }); |
| 122 } | 169 } |
| 123 | 170 |
| 124 testEdge("renameFile", assert => | 171 testEdge("renameFile", assert => |
| 125 { | 172 { |
| 126 ok(IO.renameFile(testFileNames.simpleCheck) instanceof Promise, | 173 ok(IO.renameFile(testFileNames.simpleCheck) instanceof Promise, |
| 127 "returns a promise"); | 174 "returns a promise"); |
| 128 | 175 |
| 129 checkRename(assert); | 176 checkRename(assert); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 { | 216 { |
| 170 let db; | 217 let db; |
| 171 let req = indexedDB.open("adblockplus", 1); | 218 let req = indexedDB.open("adblockplus", 1); |
| 172 req.onsuccess = (event) => | 219 req.onsuccess = (event) => |
| 173 { | 220 { |
| 174 db = event.currentTarget.result; | 221 db = event.currentTarget.result; |
| 175 let store = db | 222 let store = db |
| 176 .transaction(["file"], "readwrite") | 223 .transaction(["file"], "readwrite") |
| 177 .objectStore("file"); | 224 .objectStore("file"); |
| 178 | 225 |
| 179 store.get(fileName).onsuccess = (evt => | 226 store.get(fileName).onsuccess = evt => |
| 180 resolve(evt.currentTarget.result) | 227 resolve(evt.currentTarget.result); |
| 181 ); | |
| 182 }; | 228 }; |
| 183 }); | 229 }); |
| 184 } | 230 } |
| 185 | 231 |
| 186 function prePopulateStorage() | 232 function prePopulateStorage(assert) |
| 187 { | 233 { |
| 188 return new Promise(resolve => | 234 let done = assert.async(); |
| 235 let db; |
| 236 let req = indexedDB.open("adblockplus", 1); |
| 237 |
| 238 req.onsuccess = (event) => |
| 189 { | 239 { |
| 190 let db; | 240 db = event.currentTarget.result; |
| 191 let req = indexedDB.open("adblockplus", 1); | 241 let store = db |
| 242 .transaction(["file"], "readwrite") |
| 243 .objectStore("file"); |
| 192 | 244 |
| 193 req.onsuccess = (event) => | 245 store.put(testData).onsuccess = done; |
| 246 }; |
| 247 } |
| 248 |
| 249 function clearStorage(assert) |
| 250 { |
| 251 let done = assert.async(); |
| 252 let db; |
| 253 let req = indexedDB.open("adblockplus", 1); |
| 254 req.onsuccess = event => |
| 255 { |
| 256 db = event.currentTarget.result; |
| 257 Promise.all(Object.values(testFileNames) |
| 258 .map(fileName => new Promise(resolveFile => |
| 194 { | 259 { |
| 195 db = event.currentTarget.result; | |
| 196 let store = db | 260 let store = db |
| 197 .transaction(["file"], "readwrite") | 261 .transaction(["file"], "readwrite") |
| 198 .objectStore("file"); | 262 .objectStore("file"); |
| 199 | 263 |
| 200 store.put(testData).onsuccess = resolve; | 264 store.delete("file:" + fileName).onsuccess = resolveFile; |
| 201 }; | 265 }))) |
| 202 }); | 266 .then(() => done()); |
| 203 } | 267 }; |
| 204 | |
| 205 function clearStorage() | |
| 206 { | |
| 207 return new Promise(resolve => | |
| 208 { | |
| 209 let db; | |
| 210 let req = indexedDB.open("adblockplus", 1); | |
| 211 | |
| 212 req.onsuccess = (event) => | |
| 213 { | |
| 214 db = event.currentTarget.result; | |
| 215 let files = Object.keys(testFileNames) | |
| 216 .map(fileName => new Promise((resolveFile, reject) => | |
| 217 { | |
| 218 let store = db | |
| 219 .transaction(["file"], "readwrite") | |
| 220 .objectStore("file"); | |
| 221 | |
| 222 store.delete("file:" + fileName).onsuccess = resolveFile; | |
| 223 })); | |
| 224 | |
| 225 Promise.all(files).then(resolve); | |
| 226 }; | |
| 227 }); | |
| 228 } | 268 } |
| 229 } | 269 } |
| 230 | 270 |
| OLD | NEW |