| Index: qunit/tests/ioIndexedDB.js |
| diff --git a/qunit/tests/ioIndexedDB.js b/qunit/tests/ioIndexedDB.js |
| index 5e259a43b58c478c8735c146e083ef275018e4f6..0df2ad0d4be420be6bf55704b1d411765ca01f19 100644 |
| --- a/qunit/tests/ioIndexedDB.js |
| +++ b/qunit/tests/ioIndexedDB.js |
| @@ -3,12 +3,15 @@ |
| { |
| const {IO} = require("io"); |
| const info = require("info"); |
| + const {IndexedDBBackup} = require("../../lib/indexedDBBackup"); |
| const testFileNames = { |
| testData: "testData", |
| + stat: "stat", |
| simpleCheck: "simpleCheck", |
| write: "writeCheck", |
| read: "readCheck", |
| + readBackup: "readBackup", |
| rename: "renameCheck" |
| }; |
| const testData = { |
| @@ -17,23 +20,41 @@ |
| lastModified: Date.now() |
| }; |
| + let _backupName = "test"; |
| + let _storageData = new Map(); |
| + |
| + IndexedDBBackup.getBackupData = () => |
| + { |
| + return new Promise((resolve, reject) => |
| + { |
| + if (_storageData.size) |
| + { |
| + resolve(_storageData.get(_backupName)); |
| + } |
| + else |
| + reject({type: "NoSuchFile"}); |
| + }); |
| + }; |
| + |
| let testEdge = info.platform == "edgehtml" ? QUnit.test : QUnit.skip; |
| QUnit.module("Microsoft Edge filter storage", { |
| - beforeEach() |
| + beforeEach(assert) |
| { |
| - return prePopulateStorage(); |
| + prePopulateStorage(assert); |
| }, |
| - afterEach() |
| + afterEach(assert) |
| { |
| - return clearStorage(); |
| + _storageData.clear(); |
| + clearStorage(assert); |
| } |
| }); |
| testEdge("statFile", assert => |
| { |
| - const noFileMsg = "returns correct value if file doesn't exist"; |
| - const fileExistsMsg = "returns correct value if file exists"; |
| + const noFileMsg = "returns correct value if file doesn't exist" + |
| + " and there is no backup"; |
| + const fileExistsMsg = "returns correct value if file exists in indexedDB"; |
| ok(IO.statFile(testFileNames.simpleCheck) instanceof Promise, |
| "returns a promise"); |
| @@ -53,6 +74,29 @@ |
| assert); |
| }); |
| + testEdge("restore backup", assert => |
| + { |
| + let backupData = { |
| + content: ["backup data"], |
| + lastModified: Date.now() |
| + }; |
| + let readFromFileMessage = "readFromFile return correct value," + |
| + " if a data restore is performed"; |
| + _storageData.set(_backupName, backupData); |
| + |
| + asyncReadHelper( |
| + IO.statFile, |
| + testFileNames.stat, |
| + {exists: true, lastModified: backupData.lastModified}, |
| + "statFile return correct value, if a data restore is performed", |
| + assert); |
| + |
| + callsListeners( |
| + testFileNames.readBackup, |
| + assert, backupData.content, |
| + readFromFileMessage); |
| + }); |
| + |
| testEdge("writeToFile", assert => |
| { |
| ok(IO.writeToFile(testFileNames.simpleCheck, ["test"]) instanceof Promise, |
| @@ -89,7 +133,9 @@ |
| testEdge("readFromFile", assert => |
| { |
| - const noFileMsg = "returns correct value if file doesn't exist"; |
| + const noFileMsg = "returns correct value if file doesn't exist" + |
| + " and there is no backup"; |
| + const fileExistsMsg = "calls listeners with the correct values"; |
| ok(IO.readFromFile(testFileNames.simpleCheck) instanceof Promise, |
| "returns a promise"); |
| @@ -102,21 +148,22 @@ |
| assert |
| ); |
| - callsListeners(assert); |
| + callsListeners( |
| + testFileNames.testData, |
| + assert, |
| + testData.content, |
| + fileExistsMsg); |
| }); |
| - function callsListeners(assert) |
| + function callsListeners(fileName, assert, expected, message) |
| { |
| let done = assert.async(); |
| let called = []; |
| - IO.readFromFile(testFileNames.testData, (entry) => called.push(entry)) |
| + IO.readFromFile(fileName, (entry) => called.push(entry)) |
| .then(() => |
| { |
| - deepEqual( |
| - called, |
| - testData.content, |
| - "calls listeners with the correct values"); |
| + deepEqual(called, expected, message); |
| done(); |
| }); |
| } |
| @@ -176,55 +223,48 @@ |
| .transaction(["file"], "readwrite") |
| .objectStore("file"); |
| - store.get(fileName).onsuccess = (evt => |
| - resolve(evt.currentTarget.result) |
| - ); |
| + store.get(fileName).onsuccess = evt => |
| + resolve(evt.currentTarget.result); |
| }; |
| }); |
| } |
| - function prePopulateStorage() |
| + function prePopulateStorage(assert) |
| { |
| - return new Promise(resolve => |
| - { |
| - let db; |
| - let req = indexedDB.open("adblockplus", 1); |
| + let done = assert.async(); |
| + let db; |
| + let req = indexedDB.open("adblockplus", 1); |
| - req.onsuccess = (event) => |
| - { |
| - db = event.currentTarget.result; |
| - let store = db |
| - .transaction(["file"], "readwrite") |
| - .objectStore("file"); |
| + req.onsuccess = (event) => |
| + { |
| + db = event.currentTarget.result; |
| + let store = db |
| + .transaction(["file"], "readwrite") |
| + .objectStore("file"); |
| - store.put(testData).onsuccess = resolve; |
| - }; |
| - }); |
| + store.put(testData).onsuccess = done; |
| + }; |
| } |
| - function clearStorage() |
| + function clearStorage(assert) |
| { |
| - return new Promise(resolve => |
| - { |
| - let db; |
| - let req = indexedDB.open("adblockplus", 1); |
| - |
| - req.onsuccess = (event) => |
| + let done = assert.async(); |
| + let db; |
| + let req = indexedDB.open("adblockplus", 1); |
| + req.onsuccess = event => |
| + { |
| + db = event.currentTarget.result; |
| + Promise.all(Object.values(testFileNames) |
| + .map(fileName => new Promise(resolveFile => |
| { |
| - db = event.currentTarget.result; |
| - let files = Object.keys(testFileNames) |
| - .map(fileName => new Promise((resolveFile, reject) => |
| - { |
| - let store = db |
| - .transaction(["file"], "readwrite") |
| - .objectStore("file"); |
| - |
| - store.delete("file:" + fileName).onsuccess = resolveFile; |
| - })); |
| + let store = db |
| + .transaction(["file"], "readwrite") |
| + .objectStore("file"); |
| - Promise.all(files).then(resolve); |
| - }; |
| - }); |
| + store.delete("file:" + fileName).onsuccess = resolveFile; |
| + }))) |
| + .then(() => done()); |
| + }; |
| } |
| } |