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()); |
+ }; |
} |
} |