diff options
author | wolfbeast <mcwerewolf@wolfbeast.com> | 2020-04-14 21:49:04 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2020-04-14 21:49:04 +0200 |
commit | 39dac57259cff8b61db0b22cb2ad0a8adb02692e (patch) | |
tree | 52a026cc8c22793eb17fd0f5e22adce1ae08a1dd /toolkit/components/satchel/test/unit/test_history_api.js | |
parent | a1cce3b2b00bbd9f4983013ddd8934a7bccb9e99 (diff) | |
parent | c2d9ab62f3d097c9e0e00184cab1f546554f5eaa (diff) | |
download | UXP-39dac57259cff8b61db0b22cb2ad0a8adb02692e.tar UXP-39dac57259cff8b61db0b22cb2ad0a8adb02692e.tar.gz UXP-39dac57259cff8b61db0b22cb2ad0a8adb02692e.tar.lz UXP-39dac57259cff8b61db0b22cb2ad0a8adb02692e.tar.xz UXP-39dac57259cff8b61db0b22cb2ad0a8adb02692e.zip |
Merge branch 'redwood' into 28.9-platform
Diffstat (limited to 'toolkit/components/satchel/test/unit/test_history_api.js')
-rw-r--r-- | toolkit/components/satchel/test/unit/test_history_api.js | 457 |
1 files changed, 0 insertions, 457 deletions
diff --git a/toolkit/components/satchel/test/unit/test_history_api.js b/toolkit/components/satchel/test/unit/test_history_api.js deleted file mode 100644 index 753504183..000000000 --- a/toolkit/components/satchel/test/unit/test_history_api.js +++ /dev/null @@ -1,457 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -var testnum = 0; -var dbConnection; // used for deleted table tests - -Cu.import("resource://gre/modules/Promise.jsm"); - -function countDeletedEntries(expected) -{ - let deferred = Promise.defer(); - let stmt = dbConnection.createAsyncStatement("SELECT COUNT(*) AS numEntries FROM moz_deleted_formhistory"); - stmt.executeAsync({ - handleResult: function(resultSet) { - do_check_eq(expected, resultSet.getNextRow().getResultByName("numEntries")); - deferred.resolve(); - }, - handleError : function () { - do_throw("Error occurred counting deleted entries: " + error); - deferred.reject(); - }, - handleCompletion : function () { - stmt.finalize(); - } - }); - return deferred.promise; -} - -function checkTimeDeleted(guid, checkFunction) -{ - let deferred = Promise.defer(); - let stmt = dbConnection.createAsyncStatement("SELECT timeDeleted FROM moz_deleted_formhistory WHERE guid = :guid"); - stmt.params.guid = guid; - stmt.executeAsync({ - handleResult: function(resultSet) { - checkFunction(resultSet.getNextRow().getResultByName("timeDeleted")); - deferred.resolve(); - }, - handleError : function () { - do_throw("Error occurred getting deleted entries: " + error); - deferred.reject(); - }, - handleCompletion : function () { - stmt.finalize(); - } - }); - return deferred.promise; -} - -function promiseUpdateEntry(op, name, value) -{ - var change = { op: op }; - if (name !== null) - change.fieldname = name; - if (value !== null) - change.value = value; - return promiseUpdate(change); -} - -function promiseUpdate(change) { - return new Promise((resolve, reject) => { - FormHistory.update(change, { - handleError(error) { - this._error = error; - }, - handleCompletion(reason) { - if (reason) { - reject(this._error); - } else { - resolve(); - } - } - }); - }); -} - -function promiseSearchEntries(terms, params) -{ - let deferred = Promise.defer(); - let results = []; - FormHistory.search(terms, params, - { handleResult: result => results.push(result), - handleError: function (error) { - do_throw("Error occurred searching form history: " + error); - deferred.reject(error); - }, - handleCompletion: function (reason) { if (!reason) deferred.resolve(results); } - }); - return deferred.promise; -} - -function promiseCountEntries(name, value, checkFn) -{ - let deferred = Promise.defer(); - countEntries(name, value, function (result) { checkFn(result); deferred.resolve(); } ); - return deferred.promise; -} - -add_task(function* () -{ - let oldSupportsDeletedTable = FormHistory._supportsDeletedTable; - FormHistory._supportsDeletedTable = true; - - try { - - // ===== test init ===== - var testfile = do_get_file("formhistory_apitest.sqlite"); - var profileDir = dirSvc.get("ProfD", Ci.nsIFile); - - // Cleanup from any previous tests or failures. - var destFile = profileDir.clone(); - destFile.append("formhistory.sqlite"); - if (destFile.exists()) - destFile.remove(false); - - testfile.copyTo(profileDir, "formhistory.sqlite"); - - function checkExists(num) { do_check_true(num > 0); } - function checkNotExists(num) { do_check_true(num == 0); } - - // ===== 1 ===== - // Check initial state is as expected - testnum++; - yield promiseCountEntries("name-A", null, checkExists); - yield promiseCountEntries("name-B", null, checkExists); - yield promiseCountEntries("name-C", null, checkExists); - yield promiseCountEntries("name-D", null, checkExists); - yield promiseCountEntries("name-A", "value-A", checkExists); - yield promiseCountEntries("name-B", "value-B1", checkExists); - yield promiseCountEntries("name-B", "value-B2", checkExists); - yield promiseCountEntries("name-C", "value-C", checkExists); - yield promiseCountEntries("name-D", "value-D", checkExists); - // time-A/B/C/D checked below. - - // Delete anything from the deleted table - let dbFile = Services.dirsvc.get("ProfD", Ci.nsIFile).clone(); - dbFile.append("formhistory.sqlite"); - dbConnection = Services.storage.openUnsharedDatabase(dbFile); - - let deferred = Promise.defer(); - - let stmt = dbConnection.createAsyncStatement("DELETE FROM moz_deleted_formhistory"); - stmt.executeAsync({ - handleResult: function(resultSet) { }, - handleError : function () { - do_throw("Error occurred counting deleted all entries: " + error); - }, - handleCompletion : function () { - stmt.finalize(); - deferred.resolve(); - } - }); - yield deferred.promise; - - // ===== 2 ===== - // Test looking for nonexistent / bogus data. - testnum++; - yield promiseCountEntries("blah", null, checkNotExists); - yield promiseCountEntries("", null, checkNotExists); - yield promiseCountEntries("name-A", "blah", checkNotExists); - yield promiseCountEntries("name-A", "", checkNotExists); - yield promiseCountEntries("name-A", null, checkExists); - yield promiseCountEntries("blah", "value-A", checkNotExists); - yield promiseCountEntries("", "value-A", checkNotExists); - yield promiseCountEntries(null, "value-A", checkExists); - - // Cannot use promiseCountEntries when name and value are null because it treats null values as not set - // and here a search should be done explicity for null. - deferred = Promise.defer(); - yield FormHistory.count({ fieldname: null, value: null }, - { handleResult: result => checkNotExists(result), - handleError: function (error) { - do_throw("Error occurred searching form history: " + error); - }, - handleCompletion: function(reason) { if (!reason) deferred.resolve() } - }); - yield deferred.promise; - - // ===== 3 ===== - // Test removeEntriesForName with a single matching value - testnum++; - yield promiseUpdateEntry("remove", "name-A", null); - - yield promiseCountEntries("name-A", "value-A", checkNotExists); - yield promiseCountEntries("name-B", "value-B1", checkExists); - yield promiseCountEntries("name-B", "value-B2", checkExists); - yield promiseCountEntries("name-C", "value-C", checkExists); - yield promiseCountEntries("name-D", "value-D", checkExists); - yield countDeletedEntries(1); - - // ===== 4 ===== - // Test removeEntriesForName with multiple matching values - testnum++; - yield promiseUpdateEntry("remove", "name-B", null); - - yield promiseCountEntries("name-A", "value-A", checkNotExists); - yield promiseCountEntries("name-B", "value-B1", checkNotExists); - yield promiseCountEntries("name-B", "value-B2", checkNotExists); - yield promiseCountEntries("name-C", "value-C", checkExists); - yield promiseCountEntries("name-D", "value-D", checkExists); - yield countDeletedEntries(3); - - // ===== 5 ===== - // Test removing by time range (single entry, not surrounding entries) - testnum++; - yield promiseCountEntries("time-A", null, checkExists); // firstUsed=1000, lastUsed=1000 - yield promiseCountEntries("time-B", null, checkExists); // firstUsed=1000, lastUsed=1099 - yield promiseCountEntries("time-C", null, checkExists); // firstUsed=1099, lastUsed=1099 - yield promiseCountEntries("time-D", null, checkExists); // firstUsed=2001, lastUsed=2001 - yield promiseUpdate({ op : "remove", firstUsedStart: 1050, firstUsedEnd: 2000 }); - - yield promiseCountEntries("time-A", null, checkExists); - yield promiseCountEntries("time-B", null, checkExists); - yield promiseCountEntries("time-C", null, checkNotExists); - yield promiseCountEntries("time-D", null, checkExists); - yield countDeletedEntries(4); - - // ===== 6 ===== - // Test removing by time range (multiple entries) - testnum++; - yield promiseUpdate({ op : "remove", firstUsedStart: 1000, firstUsedEnd: 2000 }); - - yield promiseCountEntries("time-A", null, checkNotExists); - yield promiseCountEntries("time-B", null, checkNotExists); - yield promiseCountEntries("time-C", null, checkNotExists); - yield promiseCountEntries("time-D", null, checkExists); - yield countDeletedEntries(6); - - // ===== 7 ===== - // test removeAllEntries - testnum++; - yield promiseUpdateEntry("remove", null, null); - - yield promiseCountEntries("name-C", null, checkNotExists); - yield promiseCountEntries("name-D", null, checkNotExists); - yield promiseCountEntries("name-C", "value-C", checkNotExists); - yield promiseCountEntries("name-D", "value-D", checkNotExists); - - yield promiseCountEntries(null, null, checkNotExists); - yield countDeletedEntries(6); - - // ===== 8 ===== - // Add a single entry back - testnum++; - yield promiseUpdateEntry("add", "newname-A", "newvalue-A"); - yield promiseCountEntries("newname-A", "newvalue-A", checkExists); - - // ===== 9 ===== - // Remove the single entry - testnum++; - yield promiseUpdateEntry("remove", "newname-A", "newvalue-A"); - yield promiseCountEntries("newname-A", "newvalue-A", checkNotExists); - - // ===== 10 ===== - // Add a single entry - testnum++; - yield promiseUpdateEntry("add", "field1", "value1"); - yield promiseCountEntries("field1", "value1", checkExists); - - let processFirstResult = function processResults(results) - { - // Only handle the first result - if (results.length > 0) { - let result = results[0]; - return [result.timesUsed, result.firstUsed, result.lastUsed, result.guid]; - } - return undefined; - } - - results = yield promiseSearchEntries(["timesUsed", "firstUsed", "lastUsed"], - { fieldname: "field1", value: "value1" }); - let [timesUsed, firstUsed, lastUsed] = processFirstResult(results); - do_check_eq(1, timesUsed); - do_check_true(firstUsed > 0); - do_check_true(lastUsed > 0); - yield promiseCountEntries(null, null, num => do_check_eq(num, 1)); - - // ===== 11 ===== - // Add another single entry - testnum++; - yield promiseUpdateEntry("add", "field1", "value1b"); - yield promiseCountEntries("field1", "value1", checkExists); - yield promiseCountEntries("field1", "value1b", checkExists); - yield promiseCountEntries(null, null, num => do_check_eq(num, 2)); - - // ===== 12 ===== - // Update a single entry - testnum++; - - results = yield promiseSearchEntries(["guid"], { fieldname: "field1", value: "value1" }); - let guid = processFirstResult(results)[3]; - - yield promiseUpdate({ op : "update", guid: guid, value: "modifiedValue" }); - yield promiseCountEntries("field1", "modifiedValue", checkExists); - yield promiseCountEntries("field1", "value1", checkNotExists); - yield promiseCountEntries("field1", "value1b", checkExists); - yield promiseCountEntries(null, null, num => do_check_eq(num, 2)); - - // ===== 13 ===== - // Add a single entry with times - testnum++; - yield promiseUpdate({ op : "add", fieldname: "field2", value: "value2", - timesUsed: 20, firstUsed: 100, lastUsed: 500 }); - - results = yield promiseSearchEntries(["timesUsed", "firstUsed", "lastUsed"], - { fieldname: "field2", value: "value2" }); - [timesUsed, firstUsed, lastUsed] = processFirstResult(results); - - do_check_eq(20, timesUsed); - do_check_eq(100, firstUsed); - do_check_eq(500, lastUsed); - yield promiseCountEntries(null, null, num => do_check_eq(num, 3)); - - // ===== 14 ===== - // Bump an entry, which updates its lastUsed field - testnum++; - yield promiseUpdate({ op : "bump", fieldname: "field2", value: "value2", - timesUsed: 20, firstUsed: 100, lastUsed: 500 }); - results = yield promiseSearchEntries(["timesUsed", "firstUsed", "lastUsed"], - { fieldname: "field2", value: "value2" }); - [timesUsed, firstUsed, lastUsed] = processFirstResult(results); - do_check_eq(21, timesUsed); - do_check_eq(100, firstUsed); - do_check_true(lastUsed > 500); - yield promiseCountEntries(null, null, num => do_check_eq(num, 3)); - - // ===== 15 ===== - // Bump an entry that does not exist - testnum++; - yield promiseUpdate({ op : "bump", fieldname: "field3", value: "value3", - timesUsed: 10, firstUsed: 50, lastUsed: 400 }); - results = yield promiseSearchEntries(["timesUsed", "firstUsed", "lastUsed"], - { fieldname: "field3", value: "value3" }); - [timesUsed, firstUsed, lastUsed] = processFirstResult(results); - do_check_eq(10, timesUsed); - do_check_eq(50, firstUsed); - do_check_eq(400, lastUsed); - yield promiseCountEntries(null, null, num => do_check_eq(num, 4)); - - // ===== 16 ===== - // Bump an entry with a guid - testnum++; - results = yield promiseSearchEntries(["guid"], { fieldname: "field3", value: "value3" }); - guid = processFirstResult(results)[3]; - yield promiseUpdate({ op : "bump", guid: guid, timesUsed: 20, firstUsed: 55, lastUsed: 400 }); - results = yield promiseSearchEntries(["timesUsed", "firstUsed", "lastUsed"], - { fieldname: "field3", value: "value3" }); - [timesUsed, firstUsed, lastUsed] = processFirstResult(results); - do_check_eq(11, timesUsed); - do_check_eq(50, firstUsed); - do_check_true(lastUsed > 400); - yield promiseCountEntries(null, null, num => do_check_eq(num, 4)); - - // ===== 17 ===== - // Remove an entry - testnum++; - yield countDeletedEntries(7); - - results = yield promiseSearchEntries(["guid"], { fieldname: "field1", value: "value1b" }); - guid = processFirstResult(results)[3]; - - yield promiseUpdate({ op : "remove", guid: guid}); - yield promiseCountEntries("field1", "modifiedValue", checkExists); - yield promiseCountEntries("field1", "value1b", checkNotExists); - yield promiseCountEntries(null, null, num => do_check_eq(num, 3)); - - yield countDeletedEntries(8); - yield checkTimeDeleted(guid, timeDeleted => do_check_true(timeDeleted > 10000)); - - // ===== 18 ===== - // Add yet another single entry - testnum++; - yield promiseUpdate({ op : "add", fieldname: "field4", value: "value4", - timesUsed: 5, firstUsed: 230, lastUsed: 600 }); - yield promiseCountEntries(null, null, num => do_check_eq(num, 4)); - - // ===== 19 ===== - // Remove an entry by time - testnum++; - yield promiseUpdate({ op : "remove", firstUsedStart: 60, firstUsedEnd: 250 }); - yield promiseCountEntries("field1", "modifiedValue", checkExists); - yield promiseCountEntries("field2", "value2", checkNotExists); - yield promiseCountEntries("field3", "value3", checkExists); - yield promiseCountEntries("field4", "value4", checkNotExists); - yield promiseCountEntries(null, null, num => do_check_eq(num, 2)); - yield countDeletedEntries(10); - - // ===== 20 ===== - // Bump multiple existing entries at once - testnum++; - - yield promiseUpdate([{ op : "add", fieldname: "field5", value: "value5", - timesUsed: 5, firstUsed: 230, lastUsed: 600 }, - { op : "add", fieldname: "field6", value: "value6", - timesUsed: 12, firstUsed: 430, lastUsed: 700 }]); - yield promiseCountEntries(null, null, num => do_check_eq(num, 4)); - - yield promiseUpdate([ - { op : "bump", fieldname: "field5", value: "value5" }, - { op : "bump", fieldname: "field6", value: "value6" }]); - results = yield promiseSearchEntries(["fieldname", "timesUsed", "firstUsed", "lastUsed"], { }); - - do_check_eq(6, results[2].timesUsed); - do_check_eq(13, results[3].timesUsed); - do_check_eq(230, results[2].firstUsed); - do_check_eq(430, results[3].firstUsed); - do_check_true(results[2].lastUsed > 600); - do_check_true(results[3].lastUsed > 700); - - yield promiseCountEntries(null, null, num => do_check_eq(num, 4)); - - // ===== 21 ===== - // Check update fails if form history is disabled and the operation is not a - // pure removal. - testnum++; - Services.prefs.setBoolPref("browser.formfill.enable", false); - - // Cannot use arrow functions, see bug 1237961. - Assert.rejects(promiseUpdate( - { op : "bump", fieldname: "field5", value: "value5" }), - function(err) { return err.result == Ci.mozIStorageError.MISUSE; }, - "bumping when form history is disabled should fail"); - Assert.rejects(promiseUpdate( - { op : "add", fieldname: "field5", value: "value5" }), - function(err) { return err.result == Ci.mozIStorageError.MISUSE; }, - "Adding when form history is disabled should fail"); - Assert.rejects(promiseUpdate([ - { op : "update", fieldname: "field5", value: "value5" }, - { op : "remove", fieldname: "field5", value: "value5" } - ]), - function(err) { return err.result == Ci.mozIStorageError.MISUSE; }, - "mixed operations when form history is disabled should fail"); - Assert.rejects(promiseUpdate([ - null, undefined, "", 1, {}, - { op : "remove", fieldname: "field5", value: "value5" } - ]), - function(err) { return err.result == Ci.mozIStorageError.MISUSE; }, - "Invalid entries when form history is disabled should fail"); - - // Remove should work though. - yield promiseUpdate([{ op: "remove", fieldname: "field5", value: null }, - { op: "remove", fieldname: null, value: null }]); - Services.prefs.clearUserPref("browser.formfill.enable"); - - } catch (e) { - throw "FAILED in test #" + testnum + " -- " + e; - } - finally { - FormHistory._supportsDeletedTable = oldSupportsDeletedTable; - dbConnection.asyncClose(do_test_finished); - } -}); - -function run_test() { - return run_next_test(); -} |