gecko-dev/toolkit/modules/tests/xpcshell/test_newtab-migrate-v1.js
Matt Brubeck 5e4f433f95 Bug 840287 - Move NewTabUtils.jsm into toolkit [r=ttaubert]
--HG--
rename : browser/modules/NewTabUtils.jsm => toolkit/modules/NewTabUtils.jsm
rename : browser/modules/test/unit/chromeappsstore.sqlite => toolkit/modules/tests/xpcshell/chromeappsstore.sqlite
rename : browser/modules/test/unit/test_newtab-migrate-v1.js => toolkit/modules/tests/xpcshell/test_newtab-migrate-v1.js
2013-02-16 20:16:16 -08:00

99 lines
3.1 KiB
JavaScript

/* 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/. */
const Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
const Cr = Components.results;
Cu.import("resource://gre/modules/NewTabUtils.jsm");
Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js");
Cu.import("resource://gre/modules/Services.jsm");
/**
* Asynchronously load test data from chromeappstore.sqlite.
*
* @param aDBFile
* the database file to load
* @return {Promise} resolved when the load is complete
*/
function promiseLoadChromeAppsStore(aDBFile) {
let deferred = Promise.defer();
let pinnedLinks = [];
let blockedLinks = [];
let db = Services.storage.openUnsharedDatabase(aDBFile);
let stmt = db.createAsyncStatement(
"SELECT key, value FROM webappsstore2 WHERE scope = 'batwen.:about'");
try {
stmt.executeAsync({
handleResult: function(aResultSet) {
for (let row = aResultSet.getNextRow(); row;
row = aResultSet.getNextRow()) {
let value = JSON.parse(row.getResultByName("value"));
if (row.getResultByName("key") == "pinnedLinks") {
pinnedLinks = value;
} else {
for (let url of Object.keys(value)) {
blockedLinks.push({ url: url, title: "" });
}
}
}
},
handleError: function(aError) {
deferred.reject(new Components.Exception("Error", Cr.NS_ERROR_FAILURE));
},
handleCompletion: function(aReason) {
if (aReason === Ci.mozIStorageStatementCallback.REASON_FINISHED) {
deferred.resolve([pinnedLinks, blockedLinks]);
}
}
});
} finally {
stmt.finalize();
db.asyncClose();
}
return deferred.promise;
}
function run_test() {
do_test_pending();
// First of all copy the chromeappsstore.sqlite file to the profile folder.
let dbFile = do_get_file("chromeappsstore.sqlite");
let profileDBFile = do_get_profile();
dbFile.copyTo(profileDBFile, "chromeappsstore.sqlite");
profileDBFile.append("chromeappsstore.sqlite");
do_check_true(profileDBFile.exists());
// Load test data from the database.
promiseLoadChromeAppsStore(dbFile).then(function success(aResults) {
let [pinnedLinks, blockedLinks] = aResults;
do_check_true(pinnedLinks.length > 0);
do_check_eq(pinnedLinks.length, NewTabUtils.pinnedLinks.links.length);
do_check_true(pinnedLinks.every(
function(aLink) NewTabUtils.pinnedLinks.isPinned(aLink)
));
do_check_true(blockedLinks.length > 0);
do_check_eq(blockedLinks.length,
Object.keys(NewTabUtils.blockedLinks.links).length);
do_check_true(blockedLinks.every(
function(aLink) NewTabUtils.blockedLinks.isBlocked(aLink)
));
try {
profileDBFile.remove(true);
} catch (ex) {
// May fail due to OS file locking, not a blocking error though.
do_print("Unable to remove chromeappsstore.sqlite file.");
}
do_test_finished();
}, do_report_unexpected_exception);
}