diff options
Diffstat (limited to 'toolkit/components/places/tests/unit/test_bookmarks_restore_notification.js')
-rw-r--r-- | toolkit/components/places/tests/unit/test_bookmarks_restore_notification.js | 325 |
1 files changed, 0 insertions, 325 deletions
diff --git a/toolkit/components/places/tests/unit/test_bookmarks_restore_notification.js b/toolkit/components/places/tests/unit/test_bookmarks_restore_notification.js deleted file mode 100644 index 2f8022c6b..000000000 --- a/toolkit/components/places/tests/unit/test_bookmarks_restore_notification.js +++ /dev/null @@ -1,325 +0,0 @@ -/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* vim:set ts=2 sw=2 sts=2 et: */ -/* 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/. */ - -Cu.import("resource://gre/modules/BookmarkHTMLUtils.jsm"); - -/** - * Tests the bookmarks-restore-* nsIObserver notifications after restoring - * bookmarks from JSON and HTML. See bug 470314. - */ - -// The topics and data passed to nsIObserver.observe() on bookmarks restore -const NSIOBSERVER_TOPIC_BEGIN = "bookmarks-restore-begin"; -const NSIOBSERVER_TOPIC_SUCCESS = "bookmarks-restore-success"; -const NSIOBSERVER_TOPIC_FAILED = "bookmarks-restore-failed"; -const NSIOBSERVER_DATA_JSON = "json"; -const NSIOBSERVER_DATA_HTML = "html"; -const NSIOBSERVER_DATA_HTML_INIT = "html-initial"; - -// Bookmarks are added for these URIs -var uris = [ - "http://example.com/1", - "http://example.com/2", - "http://example.com/3", - "http://example.com/4", - "http://example.com/5", -]; - -/** - * Adds some bookmarks for the URIs in |uris|. - */ -function* addBookmarks() { - for (let url of uris) { - yield PlacesUtils.bookmarks.insert({ - url: url, parentGuid: PlacesUtils.bookmarks.menuGuid - }) - } - checkBookmarksExist(); -} - -/** - * Checks that all of the bookmarks created for |uris| exist. It works by - * creating one query per URI and then ORing all the queries. The number of - * results returned should be uris.length. - */ -function checkBookmarksExist() { - let hs = PlacesUtils.history; - let queries = uris.map(function (u) { - let q = hs.getNewQuery(); - q.uri = uri(u); - return q; - }); - let options = hs.getNewQueryOptions(); - options.queryType = options.QUERY_TYPE_BOOKMARKS; - let root = hs.executeQueries(queries, uris.length, options).root; - root.containerOpen = true; - Assert.equal(root.childCount, uris.length); - root.containerOpen = false; -} - -/** - * Creates an file in the profile directory. - * - * @param aBasename - * e.g., "foo.txt" in the path /some/long/path/foo.txt - * @return {Promise} - * @resolves to an OS.File path - */ -function promiseFile(aBasename) { - let path = OS.Path.join(OS.Constants.Path.profileDir, aBasename); - do_print("opening " + path); - return OS.File.open(path, { truncate: true }) - .then(aFile => { - aFile.close(); - return path; - }); -} - -/** - * Register observers via promiseTopicObserved helper. - * - * @param {boolean} expectSuccess pass true when expect a success notification - * @return {Promise[]} - */ -function registerObservers(expectSuccess) { - let promiseBegin = promiseTopicObserved(NSIOBSERVER_TOPIC_BEGIN); - let promiseResult; - if (expectSuccess) { - promiseResult = promiseTopicObserved(NSIOBSERVER_TOPIC_SUCCESS); - } else { - promiseResult = promiseTopicObserved(NSIOBSERVER_TOPIC_FAILED); - } - - return [promiseBegin, promiseResult]; -} - -/** - * Check notification results. - * - * @param {Promise[]} expectPromises array contain promiseBegin and promiseResult - * @param {object} expectedData contain data and folderId - */ -function* checkObservers(expectPromises, expectedData) { - let [promiseBegin, promiseResult] = expectPromises; - - let beginData = (yield promiseBegin)[1]; - Assert.equal(beginData, expectedData.data, - "Data for current test should be what is expected"); - - let [resultSubject, resultData] = yield promiseResult; - Assert.equal(resultData, expectedData.data, - "Data for current test should be what is expected"); - - // Make sure folder ID is what is expected. For importing HTML into a - // folder, this will be an integer, otherwise null. - if (resultSubject) { - Assert.equal(aSubject.QueryInterface(Ci.nsISupportsPRInt64).data, - expectedData.folderId); - } else { - Assert.equal(expectedData.folderId, null); - } -} - -/** - * Run after every test cases. - */ -function* teardown(file, begin, success, fail) { - // On restore failed, file may not exist, so wrap in try-catch. - try { - yield OS.File.remove(file, {ignoreAbsent: true}); - } catch (e) {} - - // clean up bookmarks - yield PlacesUtils.bookmarks.eraseEverything(); -} - -add_task(function* test_json_restore_normal() { - // data: the data passed to nsIObserver.observe() corresponding to the test - // folderId: for HTML restore into a folder, the folder ID to restore into; - // otherwise, set it to null - let expectedData = { - data: NSIOBSERVER_DATA_JSON, - folderId: null - } - let expectPromises = registerObservers(true); - - do_print("JSON restore: normal restore should succeed"); - let file = yield promiseFile("bookmarks-test_restoreNotification.json"); - yield addBookmarks(); - - yield BookmarkJSONUtils.exportToFile(file); - yield PlacesUtils.bookmarks.eraseEverything(); - try { - yield BookmarkJSONUtils.importFromFile(file, true); - } catch (e) { - do_throw(" Restore should not have failed" + e); - } - - yield checkObservers(expectPromises, expectedData); - yield teardown(file); -}); - -add_task(function* test_json_restore_empty() { - let expectedData = { - data: NSIOBSERVER_DATA_JSON, - folderId: null - } - let expectPromises = registerObservers(true); - - do_print("JSON restore: empty file should succeed"); - let file = yield promiseFile("bookmarks-test_restoreNotification.json"); - try { - yield BookmarkJSONUtils.importFromFile(file, true); - } catch (e) { - do_throw(" Restore should not have failed" + e); - } - - yield checkObservers(expectPromises, expectedData); - yield teardown(file); -}); - -add_task(function* test_json_restore_nonexist() { - let expectedData = { - data: NSIOBSERVER_DATA_JSON, - folderId: null - } - let expectPromises = registerObservers(false); - - do_print("JSON restore: nonexistent file should fail"); - let file = Services.dirsvc.get("ProfD", Ci.nsILocalFile); - file.append("this file doesn't exist because nobody created it 1"); - try { - yield BookmarkJSONUtils.importFromFile(file, true); - do_throw(" Restore should have failed"); - } catch (e) {} - - yield checkObservers(expectPromises, expectedData); - yield teardown(file); -}); - -add_task(function* test_html_restore_normal() { - let expectedData = { - data: NSIOBSERVER_DATA_HTML, - folderId: null - } - let expectPromises = registerObservers(true); - - do_print("HTML restore: normal restore should succeed"); - let file = yield promiseFile("bookmarks-test_restoreNotification.html"); - yield addBookmarks(); - yield BookmarkHTMLUtils.exportToFile(file); - yield PlacesUtils.bookmarks.eraseEverything(); - try { - BookmarkHTMLUtils.importFromFile(file, false) - .then(null, do_report_unexpected_exception); - } catch (e) { - do_throw(" Restore should not have failed"); - } - - yield checkObservers(expectPromises, expectedData); - yield teardown(file); -}); - -add_task(function* test_html_restore_empty() { - let expectedData = { - data: NSIOBSERVER_DATA_HTML, - folderId: null - } - let expectPromises = registerObservers(true); - - do_print("HTML restore: empty file should succeed"); - let file = yield promiseFile("bookmarks-test_restoreNotification.init.html"); - try { - BookmarkHTMLUtils.importFromFile(file, false) - .then(null, do_report_unexpected_exception); - } catch (e) { - do_throw(" Restore should not have failed"); - } - - yield checkObservers(expectPromises, expectedData); - yield teardown(file); -}); - -add_task(function* test_html_restore_nonexist() { - let expectedData = { - data: NSIOBSERVER_DATA_HTML, - folderId: null - } - let expectPromises = registerObservers(false); - - do_print("HTML restore: nonexistent file should fail"); - let file = Services.dirsvc.get("ProfD", Ci.nsILocalFile); - file.append("this file doesn't exist because nobody created it 2"); - try { - yield BookmarkHTMLUtils.importFromFile(file, false); - do_throw("Should fail!"); - } catch (e) {} - - yield checkObservers(expectPromises, expectedData); - yield teardown(file); -}); - -add_task(function* test_html_init_restore_normal() { - let expectedData = { - data: NSIOBSERVER_DATA_HTML_INIT, - folderId: null - } - let expectPromises = registerObservers(true); - - do_print("HTML initial restore: normal restore should succeed"); - let file = yield promiseFile("bookmarks-test_restoreNotification.init.html"); - yield addBookmarks(); - yield BookmarkHTMLUtils.exportToFile(file); - yield PlacesUtils.bookmarks.eraseEverything(); - try { - BookmarkHTMLUtils.importFromFile(file, true) - .then(null, do_report_unexpected_exception); - } catch (e) { - do_throw(" Restore should not have failed"); - } - - yield checkObservers(expectPromises, expectedData); - yield teardown(file); -}); - -add_task(function* test_html_init_restore_empty() { - let expectedData = { - data: NSIOBSERVER_DATA_HTML_INIT, - folderId: null - } - let expectPromises = registerObservers(true); - - do_print("HTML initial restore: empty file should succeed"); - let file = yield promiseFile("bookmarks-test_restoreNotification.init.html"); - try { - BookmarkHTMLUtils.importFromFile(file, true) - .then(null, do_report_unexpected_exception); - } catch (e) { - do_throw(" Restore should not have failed"); - } - - yield checkObservers(expectPromises, expectedData); - yield teardown(file); -}); - -add_task(function* test_html_init_restore_nonexist() { - let expectedData = { - data: NSIOBSERVER_DATA_HTML_INIT, - folderId: null - } - let expectPromises = registerObservers(false); - - do_print("HTML initial restore: nonexistent file should fail"); - let file = Services.dirsvc.get("ProfD", Ci.nsILocalFile); - file.append("this file doesn't exist because nobody created it 3"); - try { - yield BookmarkHTMLUtils.importFromFile(file, true); - do_throw("Should fail!"); - } catch (e) {} - - yield checkObservers(expectPromises, expectedData); - yield teardown(file); -}); |