From 0af2372b47951b1c0632d9033435bba5f22ab71d Mon Sep 17 00:00:00 2001 From: Marco Bonardo Date: Tue, 4 Nov 2014 17:40:41 +0100 Subject: [PATCH] Bug 1071505 - use constant GUIDs for Places roots (test changes). rs=mano --HG-- rename : toolkit/components/places/tests/migration/places_v6_no_frecency.sqlite => toolkit/components/places/tests/migration/places_v6.sqlite rename : toolkit/components/places/tests/migration/test_current_from_v10.js => toolkit/components/places/tests/migration/test_current_from_v16.js rename : toolkit/components/places/tests/migration/test_database_from_v6_no_frecency.js => toolkit/components/places/tests/migration/test_current_from_v6.js --- .../test_bookmarks_eraseEverything.js | 30 +- .../tests/bookmarks/test_bookmarks_fetch.js | 44 +-- .../tests/bookmarks/test_bookmarks_insert.js | 37 +- .../bookmarks/test_bookmarks_notifications.js | 59 +-- .../tests/bookmarks/test_bookmarks_remove.js | 30 +- .../tests/bookmarks/test_bookmarks_update.js | 28 +- .../components/places/tests/head_common.js | 5 +- .../places/tests/migration/head_migration.js | 33 +- .../tests/migration/places_alpha.sqlite | Bin 39936 -> 0 bytes .../places/tests/migration/places_v11.sqlite | Bin 0 -> 1081344 bytes ..._v10_from_v14.sqlite => places_v16.sqlite} | Bin 1114112 -> 1114112 bytes .../places/tests/migration/places_v17.sqlite | Bin 0 -> 1212416 bytes .../places/tests/migration/places_v21.sqlite | Bin 0 -> 1179648 bytes .../places/tests/migration/places_v22.sqlite | Bin 0 -> 1179648 bytes .../places/tests/migration/places_v23.sqlite | Bin 0 -> 1179648 bytes .../places/tests/migration/places_v24.sqlite | Bin 0 -> 1179648 bytes .../places/tests/migration/places_v25.sqlite | Bin 0 -> 1179648 bytes ...v6_no_frecency.sqlite => places_v6.sqlite} | Bin .../migration/places_v6_no_indices.sqlite | Bin 40960 -> 0 bytes .../migration/test_current_from_downgraded.js | 19 + .../tests/migration/test_current_from_v10.js | 368 ------------------ ...test_current_from_v10_migrated_from_v14.js | 132 ------- .../tests/migration/test_current_from_v16.js | 48 +++ .../tests/migration/test_current_from_v19.js | 84 ++-- .../tests/migration/test_current_from_v24.js | 35 ++ .../tests/migration/test_current_from_v6.js | 38 ++ .../migration/test_database_from_alpha.js | 34 -- .../test_database_from_v6_no_frecency.js | 31 -- .../test_database_from_v6_no_indices.js | 34 -- .../places/tests/migration/xpcshell.ini | 30 +- .../tests/unit/test_promiseBookmarksTree.js | 19 +- 31 files changed, 302 insertions(+), 836 deletions(-) delete mode 100644 toolkit/components/places/tests/migration/places_alpha.sqlite create mode 100644 toolkit/components/places/tests/migration/places_v11.sqlite rename toolkit/components/places/tests/migration/{places_v10_from_v14.sqlite => places_v16.sqlite} (95%) create mode 100644 toolkit/components/places/tests/migration/places_v17.sqlite create mode 100644 toolkit/components/places/tests/migration/places_v21.sqlite create mode 100644 toolkit/components/places/tests/migration/places_v22.sqlite create mode 100644 toolkit/components/places/tests/migration/places_v23.sqlite create mode 100644 toolkit/components/places/tests/migration/places_v24.sqlite create mode 100644 toolkit/components/places/tests/migration/places_v25.sqlite rename toolkit/components/places/tests/migration/{places_v6_no_frecency.sqlite => places_v6.sqlite} (100%) delete mode 100644 toolkit/components/places/tests/migration/places_v6_no_indices.sqlite create mode 100644 toolkit/components/places/tests/migration/test_current_from_downgraded.js delete mode 100644 toolkit/components/places/tests/migration/test_current_from_v10.js delete mode 100644 toolkit/components/places/tests/migration/test_current_from_v10_migrated_from_v14.js create mode 100644 toolkit/components/places/tests/migration/test_current_from_v16.js create mode 100644 toolkit/components/places/tests/migration/test_current_from_v24.js create mode 100644 toolkit/components/places/tests/migration/test_current_from_v6.js delete mode 100644 toolkit/components/places/tests/migration/test_database_from_alpha.js delete mode 100644 toolkit/components/places/tests/migration/test_database_from_v6_no_frecency.js delete mode 100644 toolkit/components/places/tests/migration/test_database_from_v6_no_indices.js diff --git a/toolkit/components/places/tests/bookmarks/test_bookmarks_eraseEverything.js b/toolkit/components/places/tests/bookmarks/test_bookmarks_eraseEverything.js index 82c03a2ed60f..febf50babf01 100644 --- a/toolkit/components/places/tests/bookmarks/test_bookmarks_eraseEverything.js +++ b/toolkit/components/places/tests/bookmarks/test_bookmarks_eraseEverything.js @@ -8,11 +8,10 @@ add_task(function* test_eraseEverything() { let frecencyForMozilla = frecencyForUrl("http://example.com/"); Assert.ok(frecencyForExample > 0); Assert.ok(frecencyForMozilla > 0); - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let unfiledFolder = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let unfiledFolder = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER }); checkBookmarkObject(unfiledFolder); - let unfiledBookmark = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let unfiledBookmark = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", keyword: "kw1" }); @@ -25,11 +24,10 @@ add_task(function* test_eraseEverything() { PlacesUtils.annotations.setItemAnnotation((yield PlacesUtils.promiseItemId(unfiledBookmarkInFolder.guid)), "testanno1", "testvalue1", 0, 0); - let menuGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.bookmarksMenuFolderId); - let menuFolder = yield PlacesUtils.bookmarks.insert({ parentGuid: menuGuid, + let menuFolder = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.menuGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER }); checkBookmarkObject(menuFolder); - let menuBookmark = yield PlacesUtils.bookmarks.insert({ parentGuid: menuGuid, + let menuBookmark = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.menuGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", keyword: "kw2" }); @@ -42,11 +40,10 @@ add_task(function* test_eraseEverything() { PlacesUtils.annotations.setItemAnnotation((yield PlacesUtils.promiseItemId(menuBookmarkInFolder.guid)), "testanno1", "testvalue1", 0, 0); - let toolbarGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.toolbarFolderId); - let toolbarFolder = yield PlacesUtils.bookmarks.insert({ parentGuid: toolbarGuid, + let toolbarFolder = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.toolbarGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER }); checkBookmarkObject(toolbarFolder); - let toolbarBookmark = yield PlacesUtils.bookmarks.insert({ parentGuid: toolbarGuid, + let toolbarBookmark = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.toolbarGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", keyword: "kw3" }); @@ -82,16 +79,11 @@ add_task(function* test_eraseEverything_roots() { yield PlacesUtils.bookmarks.eraseEverything(); // Ensure the roots have not been removed. - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - Assert.ok(yield PlacesUtils.bookmarks.fetch(unfiledGuid)); - let toolbarGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.toolbarFolderId); - Assert.ok(yield PlacesUtils.bookmarks.fetch(toolbarGuid)); - let menuGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.bookmarksMenuFolderId); - Assert.ok(yield PlacesUtils.bookmarks.fetch(menuGuid)); - let tagsGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.tagsFolderId); - Assert.ok(yield PlacesUtils.bookmarks.fetch(tagsGuid)); - let rootGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.placesRootId); - Assert.ok(yield PlacesUtils.bookmarks.fetch(rootGuid)); + Assert.ok(yield PlacesUtils.bookmarks.fetch(PlacesUtils.bookmarks.unfiledGuid)); + Assert.ok(yield PlacesUtils.bookmarks.fetch(PlacesUtils.bookmarks.toolbarGuid)); + Assert.ok(yield PlacesUtils.bookmarks.fetch(PlacesUtils.bookmarks.menuGuid)); + Assert.ok(yield PlacesUtils.bookmarks.fetch(PlacesUtils.bookmarks.tagsGuid)); + Assert.ok(yield PlacesUtils.bookmarks.fetch(PlacesUtils.bookmarks.rootGuid)); }); function run_test() { diff --git a/toolkit/components/places/tests/bookmarks/test_bookmarks_fetch.js b/toolkit/components/places/tests/bookmarks/test_bookmarks_fetch.js index 6bc997ca4379..1e7bf14cecae 100644 --- a/toolkit/components/places/tests/bookmarks/test_bookmarks_fetch.js +++ b/toolkit/components/places/tests/bookmarks/test_bookmarks_fetch.js @@ -100,8 +100,7 @@ add_task(function* fetch_nonexistent_guid() { }); add_task(function* fetch_bookmark() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", title: "a bookmark" }); @@ -115,7 +114,7 @@ add_task(function* fetch_bookmark() { Assert.deepEqual(gAccumulator.results[0], bm1); Assert.deepEqual(bm1, bm2); - Assert.equal(bm2.parentGuid, unfiledGuid); + Assert.equal(bm2.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm2.index, 0); Assert.deepEqual(bm2.dateAdded, bm2.lastModified); Assert.equal(bm2.type, PlacesUtils.bookmarks.TYPE_BOOKMARK); @@ -127,8 +126,7 @@ add_task(function* fetch_bookmark() { }); add_task(function* fetch_bookmar_empty_title() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", title: "" }); @@ -146,8 +144,7 @@ add_task(function* fetch_bookmar_empty_title() { }); add_task(function* fetch_folder() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER, title: "a folder" }); checkBookmarkObject(bm1); @@ -156,7 +153,7 @@ add_task(function* fetch_folder() { checkBookmarkObject(bm2); Assert.deepEqual(bm1, bm2); - Assert.equal(bm2.parentGuid, unfiledGuid); + Assert.equal(bm2.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm2.index, 0); Assert.deepEqual(bm2.dateAdded, bm2.lastModified); Assert.equal(bm2.type, PlacesUtils.bookmarks.TYPE_FOLDER); @@ -168,8 +165,7 @@ add_task(function* fetch_folder() { }); add_task(function* fetch_folder_empty_title() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER, title: "" }); checkBookmarkObject(bm1); @@ -185,9 +181,7 @@ add_task(function* fetch_folder_empty_title() { }); add_task(function* fetch_separator() { - - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_SEPARATOR }); checkBookmarkObject(bm1); @@ -195,7 +189,7 @@ add_task(function* fetch_separator() { checkBookmarkObject(bm2); Assert.deepEqual(bm1, bm2); - Assert.equal(bm2.parentGuid, unfiledGuid); + Assert.equal(bm2.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm2.index, 0); Assert.deepEqual(bm2.dateAdded, bm2.lastModified); Assert.equal(bm2.type, PlacesUtils.bookmarks.TYPE_SEPARATOR); @@ -215,8 +209,7 @@ add_task(function* fetch_byposition_nonexisting_parentGuid() { }); add_task(function* fetch_byposition_nonexisting_index() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.fetch({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.fetch({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, index: 100 }, gAccumulator.callback); Assert.equal(bm, null); @@ -224,8 +217,7 @@ add_task(function* fetch_byposition_nonexisting_index() { }); add_task(function* fetch_byposition() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", title: "a bookmark" }); @@ -240,7 +232,7 @@ add_task(function* fetch_byposition() { Assert.deepEqual(gAccumulator.results[0], bm1); Assert.deepEqual(bm1, bm2); - Assert.equal(bm2.parentGuid, unfiledGuid); + Assert.equal(bm2.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm2.index, 0); Assert.deepEqual(bm2.dateAdded, bm2.lastModified); Assert.equal(bm2.type, PlacesUtils.bookmarks.TYPE_BOOKMARK); @@ -257,8 +249,7 @@ add_task(function* fetch_byurl_nonexisting() { }); add_task(function* fetch_byurl() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://byurl.com/", title: "a bookmark" }); @@ -272,14 +263,14 @@ add_task(function* fetch_byurl() { Assert.deepEqual(gAccumulator.results[0], bm1); Assert.deepEqual(bm1, bm2); - Assert.equal(bm2.parentGuid, unfiledGuid); + Assert.equal(bm2.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.deepEqual(bm2.dateAdded, bm2.lastModified); Assert.equal(bm2.type, PlacesUtils.bookmarks.TYPE_BOOKMARK); Assert.equal(bm2.url.href, "http://byurl.com/"); Assert.equal(bm2.title, "a bookmark"); Assert.ok(!("keyword" in bm2)); - let bm3 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm3 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://byurl.com/", title: "a bookmark" }); @@ -312,8 +303,7 @@ add_task(function* fetch_bykeyword_nonexisting() { }); add_task(function* fetch_bykeyword() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://bykeyword1.com/", keyword: "bykeyword" }); @@ -327,13 +317,13 @@ add_task(function* fetch_bykeyword() { Assert.deepEqual(gAccumulator.results[0], bm1); Assert.deepEqual(bm1, bm2); - Assert.equal(bm2.parentGuid, unfiledGuid); + Assert.equal(bm2.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.deepEqual(bm2.dateAdded, bm2.lastModified); Assert.equal(bm2.type, PlacesUtils.bookmarks.TYPE_BOOKMARK); Assert.equal(bm2.url.href, "http://bykeyword1.com/"); Assert.equal(bm2.keyword, "bykeyword"); - let bm3 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm3 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://bykeyword2.com/", keyword: "bykeyword" }); diff --git a/toolkit/components/places/tests/bookmarks/test_bookmarks_insert.js b/toolkit/components/places/tests/bookmarks/test_bookmarks_insert.js index 08392b7d703a..d477aa8e117d 100644 --- a/toolkit/components/places/tests/bookmarks/test_bookmarks_insert.js +++ b/toolkit/components/places/tests/bookmarks/test_bookmarks_insert.js @@ -115,12 +115,11 @@ add_task(function* long_title_trim() { for (let i = 0; i < 4096; i++) { longtitle += "a"; } - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER, title: longtitle }); checkBookmarkObject(bm); - Assert.equal(bm.parentGuid, unfiledGuid); + Assert.equal(bm.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm.index, 0); Assert.equal(bm.dateAdded, bm.lastModified); Assert.equal(bm.type, PlacesUtils.bookmarks.TYPE_FOLDER); @@ -130,12 +129,11 @@ add_task(function* long_title_trim() { }); add_task(function* create_separator() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_SEPARATOR, index: PlacesUtils.bookmarks.DEFAULT_INDEX }); checkBookmarkObject(bm); - Assert.equal(bm.parentGuid, unfiledGuid); + Assert.equal(bm.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm.index, 1); Assert.equal(bm.dateAdded, bm.lastModified); Assert.equal(bm.type, PlacesUtils.bookmarks.TYPE_SEPARATOR); @@ -143,9 +141,8 @@ add_task(function* create_separator() { }); add_task(function* create_separator_w_title_fail() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); try { - yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_SEPARATOR, title: "a separator" }); Assert.ok(false, "Trying to set title for a separator should reject"); @@ -162,14 +159,13 @@ add_task(function* create_separator_invalid_parent_fail() { }); add_task(function* create_separator_given_guid() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_SEPARATOR, index: PlacesUtils.bookmarks.DEFAULT_INDEX, guid: "123456789012" }); checkBookmarkObject(bm); Assert.equal(bm.guid, "123456789012"); - Assert.equal(bm.parentGuid, unfiledGuid); + Assert.equal(bm.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm.index, 2); Assert.equal(bm.dateAdded, bm.lastModified); Assert.equal(bm.type, PlacesUtils.bookmarks.TYPE_SEPARATOR); @@ -184,12 +180,11 @@ add_task(function* create_item_given_guid_no_type_fail() { }); add_task(function* create_separator_big_index() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_SEPARATOR, index: 9999 }); checkBookmarkObject(bm); - Assert.equal(bm.parentGuid, unfiledGuid); + Assert.equal(bm.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm.index, 3); Assert.equal(bm.dateAdded, bm.lastModified); Assert.equal(bm.type, PlacesUtils.bookmarks.TYPE_SEPARATOR); @@ -199,8 +194,7 @@ add_task(function* create_separator_big_index() { add_task(function* create_separator_given_dateAdded() { let time = new Date(); let past = new Date(time - 86400000); - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_SEPARATOR, dateAdded: past }); checkBookmarkObject(bm); @@ -209,11 +203,10 @@ add_task(function* create_separator_given_dateAdded() { }); add_task(function* create_folder() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER }); checkBookmarkObject(bm); - Assert.equal(bm.parentGuid, unfiledGuid); + Assert.equal(bm.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm.dateAdded, bm.lastModified); Assert.equal(bm.type, PlacesUtils.bookmarks.TYPE_FOLDER); Assert.ok(!("title" in bm), "title should not be set"); @@ -231,8 +224,7 @@ add_task(function* create_folder() { }); add_task(function* create_bookmark() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER }); let parentGuid = bm.guid; @@ -278,8 +270,7 @@ add_task(function* create_bookmark() { }); add_task(function* create_bookmark_frecency() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", title: "a bookmark" }); diff --git a/toolkit/components/places/tests/bookmarks/test_bookmarks_notifications.js b/toolkit/components/places/tests/bookmarks/test_bookmarks_notifications.js index 8d839009f5d1..77482b68a405 100644 --- a/toolkit/components/places/tests/bookmarks/test_bookmarks_notifications.js +++ b/toolkit/components/places/tests/bookmarks/test_bookmarks_notifications.js @@ -2,10 +2,9 @@ * http://creativecommons.org/publicdomain/zero/1.0/ */ add_task(function* insert_separator_notification() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let observer = expectNotifications(); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_SEPARATOR, - parentGuid: unfiledGuid}); + parentGuid: PlacesUtils.bookmarks.unfiledGuid}); let itemId = yield PlacesUtils.promiseItemId(bm.guid); let parentId = yield PlacesUtils.promiseItemId(bm.parentGuid); observer.check([ { name: "onItemAdded", @@ -16,10 +15,9 @@ add_task(function* insert_separator_notification() { }); add_task(function* insert_folder_notification() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let observer = expectNotifications(); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_FOLDER, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, title: "a folder" }); let itemId = yield PlacesUtils.promiseItemId(bm.guid); let parentId = yield PlacesUtils.promiseItemId(bm.parentGuid); @@ -31,10 +29,9 @@ add_task(function* insert_folder_notification() { }); add_task(function* insert_folder_notitle_notification() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let observer = expectNotifications(); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_FOLDER, - parentGuid: unfiledGuid }); + parentGuid: PlacesUtils.bookmarks.unfiledGuid }); let itemId = yield PlacesUtils.promiseItemId(bm.guid); let parentId = yield PlacesUtils.promiseItemId(bm.parentGuid); observer.check([ { name: "onItemAdded", @@ -45,10 +42,9 @@ add_task(function* insert_folder_notitle_notification() { }); add_task(function* insert_bookmark_notification() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let observer = expectNotifications(); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, url: new URL("http://example.com/"), title: "a bookmark" }); let itemId = yield PlacesUtils.promiseItemId(bm.guid); @@ -61,10 +57,9 @@ add_task(function* insert_bookmark_notification() { }); add_task(function* insert_bookmark_notitle_notification() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let observer = expectNotifications(); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, url: new URL("http://example.com/") }); let itemId = yield PlacesUtils.promiseItemId(bm.guid); let parentId = yield PlacesUtils.promiseItemId(bm.parentGuid); @@ -76,10 +71,9 @@ add_task(function* insert_bookmark_notitle_notification() { }); add_task(function* insert_bookmark_keyword_notification() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let observer = expectNotifications(); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, url: new URL("http://example.com/"), keyword: "kw" }); let itemId = yield PlacesUtils.promiseItemId(bm.guid); @@ -96,16 +90,14 @@ add_task(function* insert_bookmark_keyword_notification() { }); add_task(function* insert_bookmark_tag_notification() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, url: new URL("http://tag.example.com/") }); let itemId = yield PlacesUtils.promiseItemId(bm.guid); let parentId = yield PlacesUtils.promiseItemId(bm.parentGuid); - let tagsGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.tagsFolderId); let tagFolder = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_FOLDER, - parentGuid: tagsGuid, + parentGuid: PlacesUtils.bookmarks.tagsGuid, title: "tag" }); let observer = expectNotifications(); let tag = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, @@ -130,9 +122,8 @@ add_task(function* insert_bookmark_tag_notification() { }); add_task(function* update_bookmark_lastModified() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, url: new URL("http://lastmod.example.com/") }); let observer = expectNotifications(); bm = yield PlacesUtils.bookmarks.update({ guid: bm.guid, @@ -148,9 +139,8 @@ add_task(function* update_bookmark_lastModified() { }); add_task(function* update_bookmark_title() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, url: new URL("http://title.example.com/") }); let observer = expectNotifications(); bm = yield PlacesUtils.bookmarks.update({ guid: bm.guid, @@ -166,9 +156,8 @@ add_task(function* update_bookmark_title() { }); add_task(function* update_bookmark_uri() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, url: new URL("http://url.example.com/") }); let observer = expectNotifications(); bm = yield PlacesUtils.bookmarks.update({ guid: bm.guid, @@ -184,9 +173,8 @@ add_task(function* update_bookmark_uri() { }); add_task(function* update_bookmark_keyword() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, url: new URL("http://keyword.example.com/") }); let observer = expectNotifications(); bm = yield PlacesUtils.bookmarks.update({ guid: bm.guid, @@ -202,9 +190,8 @@ add_task(function* update_bookmark_keyword() { }); add_task(function* remove_bookmark() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, url: new URL("http://remove.example.com/") }); let itemId = yield PlacesUtils.promiseItemId(bm.guid); let parentId = yield PlacesUtils.promiseItemId(bm.parentGuid); @@ -220,9 +207,8 @@ add_task(function* remove_bookmark() { }); add_task(function* remove_folder() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_FOLDER, - parentGuid: unfiledGuid }); + parentGuid: PlacesUtils.bookmarks.unfiledGuid }); let itemId = yield PlacesUtils.promiseItemId(bm.guid); let parentId = yield PlacesUtils.promiseItemId(bm.parentGuid); @@ -235,16 +221,14 @@ add_task(function* remove_folder() { }); add_task(function* remove_bookmark_tag_notification() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, url: new URL("http://untag.example.com/") }); let itemId = yield PlacesUtils.promiseItemId(bm.guid); let parentId = yield PlacesUtils.promiseItemId(bm.parentGuid); - let tagsGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.tagsFolderId); let tagFolder = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_FOLDER, - parentGuid: tagsGuid, + parentGuid: PlacesUtils.bookmarks.tagsGuid, title: "tag" }); let tag = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, parentGuid: tagFolder.guid, @@ -269,9 +253,8 @@ add_task(function* eraseEverything_notification() { // Let's start from a clean situation. yield PlacesUtils.bookmarks.eraseEverything(); - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let folder1 = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_FOLDER, - parentGuid: unfiledGuid }); + parentGuid: PlacesUtils.bookmarks.unfiledGuid }); let folder1Id = yield PlacesUtils.promiseItemId(folder1.guid); let folder1ParentId = yield PlacesUtils.promiseItemId(folder1.parentGuid); @@ -282,20 +265,18 @@ add_task(function* eraseEverything_notification() { let parentId = yield PlacesUtils.promiseItemId(bm.parentGuid); let folder2 = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_FOLDER, - parentGuid: unfiledGuid }); + parentGuid: PlacesUtils.bookmarks.unfiledGuid }); let folder2Id = yield PlacesUtils.promiseItemId(folder2.guid); let folder2ParentId = yield PlacesUtils.promiseItemId(folder2.parentGuid); - let toolbarGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.toolbarFolderId); let toolbarBm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: toolbarGuid, + parentGuid: PlacesUtils.bookmarks.toolbarGuid, url: new URL("http://example.com/") }); let toolbarBmId = yield PlacesUtils.promiseItemId(toolbarBm.guid); let toolbarBmParentId = yield PlacesUtils.promiseItemId(toolbarBm.parentGuid); - let menuGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.bookmarksMenuFolderId); let menuBm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: menuGuid, + parentGuid: PlacesUtils.bookmarks.menuGuid, url: new URL("http://example.com/") }); let menuBmId = yield PlacesUtils.promiseItemId(menuBm.guid); let menuBmParentId = yield PlacesUtils.promiseItemId(menuBm.parentGuid); diff --git a/toolkit/components/places/tests/bookmarks/test_bookmarks_remove.js b/toolkit/components/places/tests/bookmarks/test_bookmarks_remove.js index 2c3c79d4d5d0..2eda888803c3 100644 --- a/toolkit/components/places/tests/bookmarks/test_bookmarks_remove.js +++ b/toolkit/components/places/tests/bookmarks/test_bookmarks_remove.js @@ -44,17 +44,15 @@ add_task(function* remove_nonexistent_guid() { }); add_task(function* remove_roots_fail() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); try { - yield PlacesUtils.bookmarks.remove(unfiledGuid); + yield PlacesUtils.bookmarks.remove(PlacesUtils.bookmarks.unfiledGuid); Assert.ok(false, "Should have thrown"); } catch (ex) { Assert.ok(/It's not possible to remove Places root folders/.test(ex)); } - let placesRootGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.placesRootId); try { - yield PlacesUtils.bookmarks.remove(placesRootGuid); + yield PlacesUtils.bookmarks.remove(PlacesUtils.bookmarks.rootGuid); Assert.ok(false, "Should have thrown"); } catch (ex) { Assert.ok(/It's not possible to remove Places root folders/.test(ex)); @@ -62,8 +60,7 @@ add_task(function* remove_roots_fail() { }); add_task(function* remove_bookmark() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", title: "a bookmark" }); @@ -73,7 +70,7 @@ add_task(function* remove_bookmark() { checkBookmarkObject(bm2); Assert.deepEqual(bm1, bm2); - Assert.equal(bm2.parentGuid, unfiledGuid); + Assert.equal(bm2.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm2.index, 0); Assert.deepEqual(bm2.dateAdded, bm2.lastModified); Assert.equal(bm2.type, PlacesUtils.bookmarks.TYPE_BOOKMARK); @@ -84,8 +81,7 @@ add_task(function* remove_bookmark() { add_task(function* remove_bookmark_orphans() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", title: "a bookmark", @@ -111,8 +107,7 @@ add_task(function* remove_bookmark_orphans() { }); add_task(function* remove_bookmark_empty_title() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", title: "" }); @@ -128,8 +123,7 @@ add_task(function* remove_bookmark_empty_title() { }); add_task(function* remove_folder() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER, title: "a folder" }); checkBookmarkObject(bm1); @@ -138,7 +132,7 @@ add_task(function* remove_folder() { checkBookmarkObject(bm2); Assert.deepEqual(bm1, bm2); - Assert.equal(bm2.parentGuid, unfiledGuid); + Assert.equal(bm2.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm2.index, 0); Assert.deepEqual(bm2.dateAdded, bm2.lastModified); Assert.equal(bm2.type, PlacesUtils.bookmarks.TYPE_FOLDER); @@ -148,8 +142,7 @@ add_task(function* remove_folder() { }); add_task(function* remove_folder_empty_title() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER, title: "" }); checkBookmarkObject(bm1); @@ -163,8 +156,7 @@ add_task(function* remove_folder_empty_title() { }); add_task(function* remove_separator() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm1 = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_SEPARATOR }); checkBookmarkObject(bm1); @@ -172,7 +164,7 @@ add_task(function* remove_separator() { checkBookmarkObject(bm2); Assert.deepEqual(bm1, bm2); - Assert.equal(bm2.parentGuid, unfiledGuid); + Assert.equal(bm2.parentGuid, PlacesUtils.bookmarks.unfiledGuid); Assert.equal(bm2.index, 0); Assert.deepEqual(bm2.dateAdded, bm2.lastModified); Assert.equal(bm2.type, PlacesUtils.bookmarks.TYPE_SEPARATOR); diff --git a/toolkit/components/places/tests/bookmarks/test_bookmarks_update.js b/toolkit/components/places/tests/bookmarks/test_bookmarks_update.js index d777ff09d5f7..456a50cd1d78 100644 --- a/toolkit/components/places/tests/bookmarks/test_bookmarks_update.js +++ b/toolkit/components/places/tests/bookmarks/test_bookmarks_update.js @@ -97,9 +97,8 @@ add_task(function* nonexisting_bookmark_throws() { }); add_task(function* invalid_properties_for_existing_bookmark() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let bm = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_BOOKMARK, - parentGuid: unfiledGuid, + parentGuid: PlacesUtils.bookmarks.unfiledGuid, url: "http://example.com/" }); try { @@ -145,7 +144,7 @@ add_task(function* invalid_properties_for_existing_bookmark() { } let folder = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_FOLDER, - parentGuid: unfiledGuid }); + parentGuid: PlacesUtils.bookmarks.unfiledGuid }); try { yield PlacesUtils.bookmarks.update({ guid: folder.guid, url: "http://example.com/" }); @@ -162,7 +161,7 @@ add_task(function* invalid_properties_for_existing_bookmark() { } let separator = yield PlacesUtils.bookmarks.insert({ type: PlacesUtils.bookmarks.TYPE_SEPARATOR, - parentGuid: unfiledGuid }); + parentGuid: PlacesUtils.bookmarks.unfiledGuid }); try { yield PlacesUtils.bookmarks.update({ guid: separator.guid, url: "http://example.com/" }); @@ -191,8 +190,7 @@ add_task(function* long_title_trim() { for (let i = 0; i < 4096; i++) { longtitle += "a"; } - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER, title: "title" }); checkBookmarkObject(bm); @@ -207,9 +205,8 @@ add_task(function* long_title_trim() { }); add_task(function* update_lastModified() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); let yesterday = new Date(Date.now() - 86400000); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER, title: "title", dateAdded: yesterday }); @@ -242,8 +239,7 @@ add_task(function* update_lastModified() { }); add_task(function* update_keyword() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", title: "title", @@ -277,8 +273,7 @@ add_task(function* update_keyword() { }); add_task(function* update_url() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_BOOKMARK, url: "http://example.com/", title: "title", @@ -303,8 +298,7 @@ add_task(function* update_url() { }); add_task(function* update_index() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let parent = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let parent = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER }) ; let f1 = yield PlacesUtils.bookmarks.insert({ parentGuid: parent.guid, type: PlacesUtils.bookmarks.TYPE_FOLDER }); @@ -344,8 +338,7 @@ add_task(function* update_index() { }); add_task(function* update_move_folder_into_descendant_throws() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let parent = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let parent = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER }) ; let descendant = yield PlacesUtils.bookmarks.insert({ parentGuid: parent.guid, type: PlacesUtils.bookmarks.TYPE_FOLDER }); @@ -370,8 +363,7 @@ add_task(function* update_move_folder_into_descendant_throws() { }); add_task(function* update_move() { - let unfiledGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.unfiledBookmarksFolderId); - let parent = yield PlacesUtils.bookmarks.insert({ parentGuid: unfiledGuid, + let parent = yield PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER }) ; let bm = yield PlacesUtils.bookmarks.insert({ parentGuid: parent.guid, url: "http://example.com/", diff --git a/toolkit/components/places/tests/head_common.js b/toolkit/components/places/tests/head_common.js index a9da6abbf14a..9b6f0c0c8ca8 100644 --- a/toolkit/components/places/tests/head_common.js +++ b/toolkit/components/places/tests/head_common.js @@ -3,7 +3,8 @@ * 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 CURRENT_SCHEMA_VERSION = 24; +const CURRENT_SCHEMA_VERSION = 25; +const FIRST_UPGRADABLE_SCHEMA_VERSION = 11; const NS_APP_USER_PROFILE_50_DIR = "ProfD"; const NS_APP_PROFILE_DIR_STARTUP = "ProfDS"; @@ -43,6 +44,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "PlacesTransactions", "resource://gre/modules/PlacesTransactions.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "Sqlite", + "resource://gre/modules/Sqlite.jsm"); // This imports various other objects in addition to PlacesUtils. Cu.import("resource://gre/modules/PlacesUtils.jsm"); diff --git a/toolkit/components/places/tests/migration/head_migration.js b/toolkit/components/places/tests/migration/head_migration.js index 6fe0fad87da9..d43a1cf2b445 100644 --- a/toolkit/components/places/tests/migration/head_migration.js +++ b/toolkit/components/places/tests/migration/head_migration.js @@ -1,10 +1,9 @@ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ -const Ci = Components.interfaces; -const Cc = Components.classes; -const Cr = Components.results; -const Cu = Components.utils; +"use strict" + +const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components; Cu.import("resource://gre/modules/Services.jsm"); @@ -16,25 +15,31 @@ let (commonFile = do_get_file("../head_common.js", false)) { // Put any other stuff relative to this test folder below. -const kDBName = "places.sqlite"; +const DB_FILENAME = "places.sqlite"; /** * Sets the database to use for the given test. This should be the very first - * thing we do otherwise, this database will not be used! + * thing in the test, otherwise this database will not be used! * * @param aFileName * The filename of the database to use. This database must exist in * toolkit/components/places/tests/migration! + * @return {Promise} */ -function setPlacesDatabase(aFileName) -{ - let file = do_get_file(aFileName); +let setupPlacesDatabase = Task.async(function* (aFileName) { + let currentDir = yield OS.File.getCurrentDirectory(); + + let src = OS.Path.join(currentDir, aFileName); + Assert.ok((yield OS.File.exists(src)), "Database file found"); // Ensure that our database doesn't already exist. - let (dbFile = gProfD.clone()) { - dbFile.append(kDBName); - do_check_false(dbFile.exists()); - } + let dest = OS.Path.join(OS.Constants.Path.profileDir, DB_FILENAME); + Assert.ok(!(yield OS.File.exists(dest)), "Database file should not exist yet"); - file.copyToFollowingLinks(gProfD, kDBName); + yield OS.File.copy(src, dest); +}); + +// This works provided all tests in this folder use add_task. +function run_test() { + run_next_test(); } diff --git a/toolkit/components/places/tests/migration/places_alpha.sqlite b/toolkit/components/places/tests/migration/places_alpha.sqlite deleted file mode 100644 index 915b471ee21188a9134ab6bce6404f1ea2b9a606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39936 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 DV{GDI diff --git a/toolkit/components/places/tests/migration/places_v11.sqlite b/toolkit/components/places/tests/migration/places_v11.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..bef27d5f594cdb2333c21298df93ff46a261a3bd GIT binary patch literal 1081344 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 KDCNm`{Qm>%Lw4o> literal 0 HcmV?d00001 diff --git a/toolkit/components/places/tests/migration/places_v10_from_v14.sqlite b/toolkit/components/places/tests/migration/places_v16.sqlite similarity index 95% rename from toolkit/components/places/tests/migration/places_v10_from_v14.sqlite rename to toolkit/components/places/tests/migration/places_v16.sqlite index 810416564845b673f74c6c2587e803662c6edc99..1d984bd72aea065da5c7cb537be1ef2a1f7e0583 100644 GIT binary patch delta 6391 zcmb6-30PCd)^|yALkIyR2)IDl1Q#G-M{5;j3;QZ)tB^p5KsLxqB$?of*4E|v47PRa z^SOM*U#a@6ZAG!Z+FG~%+N!T=)mr7(_Eo!BwE}PMy#%9w|E0-yXYM(3&YW##?wR9o zWH=ld)5}Wo8w?6jy|zUyGl&up2ZCY9bdd-_5F9>X@Nxadz!#PafISKypEcbfMK}_3 zo8x7>hJ>nP5qp>IX4@^>#sz1s0}DE=+17uw{@TiG{m3G=d~CXDTx3i(oG{erf6*_| zvs;>)ziY16eXmn%FKg>G-)ofWFV(T#-5)e|AN>R+$Ev2IVdOkjJ>KpuTC0sG=cq-3xufE;Tai;5skAbG{aBj*~UF;g(PdVvHDp^*h`1i52@52=nY#SSq|U)$&R*IbR-R*ZHq#MgA(k4S zVv9ok$XeS3h<(F01sy@2w8cOSHRfZFD$eue1Vl!nuNY)HQ zrJ3pFnWFOa8Tpwa_mOCWTs5ho&N7MO8NcvVAM%810_wZ(CzS*ZTbSof1cZd3ixu?j zYOS?erqO8i!!JJjy0w!~yxqr(9H)s#1!T9@pVVli@a;o`h`gkUV0pL4d6Jr@2$WBf zO)EGld`>`KBzeRzhTPsf689?Rk#2OK*LBMUOT}d z0umBn$Y@o_5`!Q0paiKfRKWH_Lk5exa0Htan8%?UGRgb{ij(1%Nhpgfwyc2d*Or&L zY-&}vXJh0EYb+doXzkqBWv@ahxPT6L`1Y>tJyjTl7OoWGu0|Ce*w zSrsvAg;Z9VQ<*-W$486^r3CVv5+j~hLL!M3lLwxL1X5G1?%OL-7M0Cts7;nOrPeAv z_=uitdpgEh2+$G96e*>=-q2#y#HqElFDg<;>*27iE}f}qEU=miHH8UA^3KylzA95X zJHEVHnxU-Kl2QFV{7h?Ms!`EUKQm7%BOmm?vuTN-JUWkuq}4z&NKE zzyLK4jO15JXC&v=<|L%l8)W3lfii(5-K4B*EYEFfjH#N7lWz>flOcm4zGbR(S(Uin zYDz6itioUz;54zMZE!TdDqSwM%xava)#>!)w!z|2wdn?VX-0X$9A(xVFBokc^djIM z_zLtgk$fzi=7$pq3?YhQo-P-&F+XewiSlS9bQ(mWLrBEKfo$*5Ueoowyg*_ z4?4jdFy4OGzT4hxm)L%?y>DA+%drt{XWF(h5_^5;PxR))0~E##K{%X993HwIUltDhJPULeVtUzJs?&XtyCH>D)PWlo77 z%ZO(ac)DC`G>9sOWH*YLi5tbm$&KYjW}~^(s!mOX>yqM%WVl!amaQ;|q#Bb}Wl}IJ zsJTAJ#R=;57Nt19v`EpMCY=h`BgGoWu;K(d)2KIS)eTmKYyU8OF8=zQBvWF^Y-K}9 ziZV<5GM8bOFzhglISQ3dB-7N1%8dqXOM^@`q`ADtHIG22lD1g$CEA>_0{LXZnLI#* zjHZ3!qG=S*R~72YGOT$S3VFJ7_W%*b5X`eMlgMk*a?_G4^Goszl?8duy8}c-J~e|j z;ZufSo<(hx7c`j@i)tnHC2=gMB{b8Y))GUp;b6KLU|*V>QCCzVNma>GTby$SiEvt^ zi=eryGp1OttDl*hJ5yeq?CcyQL^;oi-0O%@wG>*Fv&!T;bD>O!GL+t0X9lqLP#P+K7eT&ejGuU-sYm1rn?_k9*;u2iMxVSN7=-iwf z2M-#nwnZ6RTc?SIuhbbBt5F!@)QY+WSzLqK`O+_ZF+d(lGt$dbUq4;iT{2U`|8l~l zW5}Vt&jLQfi}z+HZ@CkD!7zLA*!bz3N7<3QR~{bxcA?-(-_wX`Q>Sj|s~*#lHgn_U zYc~ZF;?#y;$&SA0huF?=1#uzN8Xgu_e|Y5H)yVCVs(;<(_h+4!o)qlzeUh2o*A(&f zU+a|hzejIeu@;Pqa~yV#yB&6U`G(C{&CU?PjyuV7BH5~=AC~@HTBVR&`0d)>TMKS+ z&Yr7C@{3eB*JWduk`4d#UA*E<^t;DCig|G9`1Injo3bvw^L22*Y~S*Iw|(o{4_25L z_Iy&^S}c9*CNhh+w9qeo^lor=!}Q;mZOG1foc`dOw?jha-rr&%v0TmiU-%d-r);{;B3M#Qjyb$4|aDtDwj{*K7mdHSiC0ez7PgZEnNe_a+z2-LBZZ?WF^O z<9roOQ@c)0ig~BJ>XpO~n__Esm91+r&t0}A(Xal=;r@@+vj=`280`P&omIar>jP1{ zjK%9Nyj;5e(tswTU$?HZ>BOVs#E+-mOxAh#>HpR9_-`wE*Y@^Wj}hBPc-%UqyiszY zV|K;Vy_?ZW0ve~yfa?qNbcQdNnIkdOe30tiSy&f&#PnIEVYk% zo3~&0S<|9>?NfAlhgPiE{?^gHApW#>eoo$!B9$lYO6xqIy7HFJvLJmaIX+hxWW0Y$ zwe<6A_k4Dql%)JLMzg=XeXwdpPyL23IWN8D-`{rlwO+98Moq`Js{{Vd`COhLnbw2- zT%qXP9ew=mb8V;A?D+P?ql){r+2>w8v?(fVN?6!`PCQQH5`I?FvNJW+7j|NM#bU2b zU%$6EGL2pM)_b8<8+d!ZoY1x)XyN91!P%y(<5U5O9O(yMzWhbq{5|FT?d5_!3H>!E zztd?~#R*SFbNg?C)y{o_>M2(wTg@34n=g(Wt!sTfBKt`D)}mhVHhExf&CYB4S(2Us zpS+K6gk2TvGW%Hfd@7#xWBb7QYwvf@HC^CD@K}ZBS(d}#qX#J?PSjjEy*1S8@o@LA z*|J9yss#GLnAN>+pFX$k{_PNz@k*+~GxOz}8+X4J@sS;06uM9bL`!ASn|gQF2Yw}9 zxh?%ctiS zOEb<79M2D%Gb!@JE0dJ6i;CraP2}dzBZte6SH?Vi)UxytKYEGaZyEd7cYMDCA2`0L zBO_z~ijIZLqt|s{9XVMUnAekgYwT#?@2_pS-d_Fp;jQ=DWnF{H94}Gkn-bGz>f5z! zYU?c=`KPuXv*qH3wqA@RE!hH}Se-^mZ@pPaKC|^|9~Fhx1ZHuryx)57$R2PXXuml+ z*fY?pd;6{GmB)Vj)%%klu)0h#s%Yko%8HA}E>E*RJ*q`Q2bOtx@p5{mzKw)j6}%Q0li<;J|EkNC85}h zY-9Ltq7q!9np>Nd5{0Td-&DOM6n&8=$XooJsCb4gtW;5*-{^U$d_zV9i{_IrT_$PFFc6Jla z`*yEHcSk0|)Y>c6$IZ2gVzC&f=p=rU=bV=S2QYddo9KSHW?{c>_W$ z0CR#tL4fn>pdiB2MR4aCf%7Wx4tLsscOZ&wcW@k3mds}XHUicH1&{zXGt(3yn85Oc zxeyWxvpx<-fHCFIp4(hOcEuCBxx8cs*J&HHI9Th_>V_f zQBpr@26BwiH#A8kp;oOYdR0{DJ^u^n$=N}il>ROCRM44n0r( zB{&1sJPHmm)Hj51h2i1OBLEMMpllxWWQ26PtYRE@6rd-Sr}a=*d{{lGD>e*3U1@G_unGZ> z!B6mhdkgN=ufSR8t|Qk*9QYK*>V2>m>;zlj zwRkn?V8rhfI*$S$PA<+!AuvV?F(idR7%4c)VWcCBRv1n&T43Ho+A!KxEs_c zCfuNT7WOj;UfWpDLCnUs%|~Dawg3&73^?|S_Dy!Jt;e-U&ii?O52rUkql204oQZ%R!8LFie#74dZ-V9UORfa7KqeDS zwGjB=k*Is6h(#gXi&0z(;a+>Wx|5fs9`_{O75gtq<&|c*y=6SN4+O literal 1114112 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 diff --git a/toolkit/components/places/tests/migration/places_v17.sqlite b/toolkit/components/places/tests/migration/places_v17.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..5183cde83de09c6f1fa200cfa8c21537cf201c8d GIT binary patch literal 1212416 zcmeI*d3>C8ojCBhayDtHhygqpjzYUOP0}N6!3ya~dN;js{gr7lO{YyV>CB{QD)eb9 zDk%F~T-g=YgSxna2kLsQ3Wx~n1+wglD=GpiDyz#6&{a@5e$PyfHa!4$-PbPe`{^ss zGvE93c|XTI=|5S$YH6mBPHxHOx>JSZw8-8_EEYL0nT$jt@$hFt_%pn{D*TWbE`-Nu z_%r^H^3guVBlSNiuf6#G$QfPn$exc}{KJbLy7)a8O}*&v-tfxZOLzavz+dh@eqi3N z4FlEvdv=ZA*;x3e!XOzXX&cY5~L?A)G@_RQ|Swfi+)9||Y3 z5gYVBPsmsh*x}zVta& zDC9Dm`wHo!^_VcPZ9&VL1zb49h>@kGCTSXqK&kkeyp%YdK@u+IIfW%$%(}!Cha`6 zqHf-)(S0Y3#83+P=m88iop!9%k1=w1>A~iqb@R!Jx|VR=@rSS5m+Lw_@4qHZY&K5`_2Lz|NmOAD0d52HBwxue*U%MKzIAA+Nzc=_{0F*5QPQ54%Zl|q@c zukNIZx@Dooxd*8a4S7@PraLys$Wye}-r0?M?<TGFwtRGws=)!>Ug>)=GzVKYX#Fw&FMY zlH<$kCQOLFu8`W?mCoCn$F9a>~f%iN_4l83fTENt$Yoaxv#xj1Ih z{y%+5Mcu1k9la!5n(naoki&|{kDBzb#^l6gGSd;h&#YOnXhBNPpJr7P8$AD(AqK;z_OdRK2Imnwb_9Idsq)NuI2%Y>tfw_i&~ zNBUrHhcq7g-FD=pllCteUr~3;DbY*PBfP2NYhux^^x-8(kd~^S3$t{+h8M!fa{p^I z_Z>H`qHfx>=)OgxG!MS`j<_CDb=*;f59#n+);+22(U;%QTl+Biqy@*7*KM2@jg;>3 zq1!CgSICyin}$#GA**d_I!fjEeGRo0#hZHnsUw*U-SMTAhCh!zBA4No=Sm`c6+H9? z8T!qmbYZ8GbC<4|dyIQ+)D2U-!zL$-@6gFL3pT8oG;?fu-I58>nPa` ze;zYxvf@b?ZaKDHvSsa>6|Kv|k;@h=Uo$y5G@>Lh#5if@nCF8SUS|+uxKy*RqH^$R zo-q>l$cyu)TsB)Mg@0I8)e%`7)}fe8aqy;5mu^$@q>dqnY5tl`7Ywa z78%Usu*&NFFR7@gJL|0I8{3aesOUY?zw+2g9Q#}hzD*B5^unk7_TkSXkNCl_l)-oY z;l_jS{s(IcnL=0k&|6~U%pRf=t}qBy`d%nr^GEqA82!u5!4(ePCl{BMz5w>Mj+m5Q z){7pc59LQ#l&YW0q1a*Y5*&UE9Xz)~zX1$KGO4M&yl%lM&vl!YmK!{wrH>W+n&TC9 z_4U#Hr;LQ0>FMn&4858cBR{m9I3j^VTZ?%-#}`(q>!D{NIh@kuWM4kLsq`Ke3?7!>mQrY^d%F1Z8e8Sd3p*MeaLqmUm|CI1=pJ%$dQd6?I&W3bP{o2(H zTQa%ymh7&Eo^*f1{A_Dj+n-P8N|nn7=jqI4 zr=+^NGP|?gQ;O49JR2!1zxJ*xo3G!odew}DyIOYUcg*ciSJy=PBE@hbFF2g0sZ$z@ zvE>W7zMh7|*XbxNbH!B;PMz7Zv~zCrnyJ0hR(Dj@MDnASIV|b+Z1-VFk6xua+de9r z!BzI%arcVt9jz_1T2^hoVDbF3D{CUFB9Y3f%1C8oLh0|tpI!X3>~osW%x80jIZe~g z>`v`!OXvH#3i&xrjk9wb*KZ$Kmup?TZOOiQ6}6H5sl!HZ$#!+5b93gdSg~YTOWTsw zo0ctDzV^(a+O^9Uwk};Tf73|oaKoAvE0)e}X*+XAUphCirWioePykcUOz&#%>g!0i z7Si3VTUMrW>7K&*seDUMPqvUMWU@VTx-vV{-KpI62~!ttNvAv3wzZB9dU%Fa;pCZg zn8vnc^JcA^x_aljfn7aw%fqYdupDyfj_{IcFXWeHJJNHe4n{I-^rSs2r}gyD+d6Oa z1^L$HWi^r2k^0K;3XMfdSLiX%Rcdp#uh4M#xk*GWZ_KAxZfje@;!6U(U!h?+f0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5)WXa$asS45)G@@O@?Oj(kUtbn`NvtALRjjNo z)m?GbgJrSt(TYfAw7e=>RjS)}$KA2oV%B?Kw5bc6009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF{6Pe&i?i(ggG^--0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBly@S+u{4I_^Q--`r~ggYAn0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBoL;}bY8mWZ4l?auDbbakbsWOJPzWsX>x_+!pI$XwZqIhthIx;>=(CaFTfw`73xmczzu5EHJs0hH?VjkxU%mJp7r*Y} zS6uYtu-Qg{009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7e?|6qYvkE@A9BhhFW zVtM(5cq|qvE5G)xT;$&21C^Co>NsCSk+KkEnYFNFJH)ZXLhHP3p2U&mh7&yK>dQ>iTJ&O|PjOOtGmnI973fx~n&t>ghu^6<4i_4#gZ_+mp{0$BdlS z!I-nldI#6NE;7HcGMnAjv}@b6zU5OAgQHIvih1N38txw+8+#XSTby0mx;a0y_3U`5 z{}69%_{zyA*JQI@n^U>c8pC753u#7wbKj8A% zb>A{De{0A3RfTn}^BN~bivuewYX=98>Kd*!cUD{X>>VwOx26~Ngk2(K!B--|uY#Wk z_XqccA8iB(5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAVA>7Dln!j{_<#F z&z4MAx}&Tz5kDbXNOk5DW8z_TA)D>moXW*3V_|i7x~DHz6^)-%)!UV7Pv@({jLU*M zBf%5FBf&$#z2Qe20RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&Ucu@-?5Av;OQGZGX3FUQ^At{$%o(BA86KId%8xr=7Ot=9hi^ipWn^ZTNpbt9g3iH(I|w_JiYpyI|47+t2vk zwH=*XemC(wZ~cpt8}{D(&NF{<+IKFy`kL5<*Pk->x}P>*FrlpLi#N9YvTZ}U>7FO< z|M)|1c&Pjz?_N9O_zCHEUb!fCZ*$?h<1cyZT@ye2rJL#>zxVd@R=)DR3-A4#@4c#S z$`p!Sy%n$<;SrP=9kYr`}B8z`sYu)<>BD05B9CR z@}AeW{nfqC^vr*{_saF#zw+em6_4Ke*UkAITW`4Q>1!4&`NH}_$8Vl~=)v6g6R#eq z9Qd=bE&UH9Kk`UCcELv~KQisW=Rf)A>Sd4o!)^1Yw=e$9Wpf{V&Gm0z`l@pZy;EnL zd;F*WvU>grue#(bpMLGGnOFT_<;==em%Zu@+Y5~+zwVy~Uj3WrFF%@rs^L zt=aeNhPQrU%hlg1f6d!Yc>1E7-*)T!e{kWYKf0psGv#+|p4N2k7h=C$o4)FXiMPM| z?u+hx`*lD1%9Cp!YhQHtpMLJWXPtJ=X{Y`3t8aftys2j4jJMo%;ih}8kA1wcvG%>+ z`^3j5%r0C0u1}o0;p*y-ed|vydc#Tkuh}y8AGd%1%&xlW<*lEu9bfatzpMG!nwk%+ z8T+wmPha@;ANOYeyy2x^pIG_y53hLVC&z9&=f0-*_0RwIj&Hy0<-G%ccE+Mx_PuY# zt&Q*BeB$B@ufP9OiKZ_+bKH{KesJ3N$9}N?xZNN7YU8>`_dWB?`#<}4uitr3`5D!T z<^Ah+-5lKX_{^7l<-+^E@xD`cSN-~iUoA>K`6nC3=1;7@;?{S6uA_LEb(`tF;R z9<$)JKYY&(Z#(0rJ@Gf5x<8eCb86yyZ@qrYiT~1g`TM6`^%p1AEFS;Bt4=$6=J)@) zZtEpq`sBASe*XiX&b|4%Q)}MbUDI&dNx$uH{P&3`{p`n^U;B;MuWX(F&1Y_3dfEk( zC){}7nC$>{#?z(H;w(<`Jei$OaJY<_%pY^_tN?E zKlRp2_g^;g%1dLHp1*K@?6*IE`=02DzkAz(2ls9I%&~9Lx7;_YC6k$#ZtYz=b>aFo z`?6)lTXg@+ey>|}@NqeOi`F;IZr&CCObH(YFW?r9EFHW>+n-!<>V+pREWhuw13$mz zW5HuV_JJ=x`-Nw2?S1#VHeLRuCw?{V%a6o57QExE74v?ue(krv^qq6}JoUwF%WFEo>W+{p|Co;rO=Yw;P{mQHmH?D$&x zHIYd4Uy4AxzPtIUXP-ScJ|U9ad({=QAAR7K&PV_4-=4bRBOiI{fxmqF`8bAM?@yCPq%Gw{kdeWq)>k^l}@1)3a z=hfWZ_~f{0k*_{^%gZ0CZof43;|uFfdUjlGZQ09XJHPY&8><`RkyzzNK6mZ4KdOu0 zv-67RqbDBMd|S=#ihsEAefRGls7UTT@PW#?PxaI^U3lg_$&TCBwcJ*I<`=4eR=+p0 z|8oyMv2=RvqgOon-ZB-|MC|<9$PTytG|jw6MtT|^7_x8*FEr-hhEZt{huY@cK0_UmGQ)J?~b-T zw7=t=uO7Ji%U4|S<-a}Yl4z{*y>)xPw(E&E9QfY4dA~XE#Xr6HWs~oU{QH+z{OQ$I z$-RwB69a!6Klv{Y>@6#M>6GuaoEU~M=^J-NqUDjAv#$Kg7q@?H@=-6<_Jy+-&zzo{ z+1}hV`%TICf9MjOI_eUg=@NB`{vj{Xwacb$TRLsS+JOx_^KVMV{zI2&lS|Z7^uO*Y zI#CfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C= z5ok^9J0ZHYQ0UE{-O$jT-JQ*KPHFGxnG$}?bakbs^rQ<7-RX`@sv*YHXa?+SmW^!9X?&5HN^9w8kJrD9%U zUsY*jm`i_u|40&HQVmlZ8)r0hr#jO0eZBQV@i$DXZ<^jTy?N%0>9d<>OrO=**qHde z=a@Qbj+x;c@!xxnrX%Kv%?)#@DxR1ZnoHxTIhw;bYQys#3vQ1D-w$^-0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly@FEtdi^U@|R(7S@)A@$g-Kkt*ZZ^9; zJZ?WV8jrMY9xANNWqZ@PLMH6gkGGI~M#yB=~8#vk@RbfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+0D%{?z^U=ps?FK#_U=?}`^sFlH=QeF()ost zbiO^8=`CckJtxLzL|1mD+QZt_VXwm6q296DV%~dS%*l(L009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF{O1K~!zmI$btJel*c!|TKiCKmAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK;VD5z@)^ONHiKbwK5tlFCQCgOSh+c3TslG`9wTY zR(|bWxyZf4$EJ9xYg4If?NHaQfw|f2_U=?}d%9z2$d0ETD-8*ce-bMVIlVNbCble_ zFRaVtGliq|-4?BhM5`kE20O=FIy#b@ho;Ua3)y60YbKxElI`k9=ZeLAIvrM}yOSN6 zd~a83Al;G7_7rQ9!vW=!YqHs{&8ggQT-QYgKva&h&Jocg;wK{~F?nv(A04?!Bp8x~DKSU|OgO6zoWCoTFLY-+ zGFvj~j)QAWjV8`&J$_U)qY9fk`!XGy`g$@u`qD$AnySN`#{^%F1WyG|1iuI#2_6o9 z6x<)&8~k%{XIO0`K!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pkFCu}m zcr;ournpa(75DK(aUY8(;#JXDA|8oW7k5>~U1f1sQQVcsqT4K51`!KSdJQ4gNcqDi@_)&0w@SWhE;2*!j^OsN+D3o?0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0tEi&3zWxW(a7axgNMZ6AwGDBmBnLK zVOu;J?Wiv8s}k|bXk~F%QQVamE1w-x9cDQu_(UXlDtIFJMes=QaPXtx{@^>ooxv?( zwT%D)0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PJ^O6{v}qM&oWq z<0FMDu6i&wCSG1uYT0+k-PK{%vEaT)@c+V{jQ{}x1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72>cNWj8DW)uZmpWo!y=3>Pk&%&vuVbL{E=)3|C}xow4dL?{UG^ zk>Iz%FN1#zejMB%d^@;1_SRfW3}ap zs%SJ`RyxEIWr?b)u#~8(jK&g)%F3$hFuQTV#7OYV;K#wYgRccQ1~&xP1aA-a2l=2Q zSQ{)1W`@l+0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyP!brMh?Yky zBW2~+-j$2oJGNA;C>3`+^;m7GSUy~=DHY2Gi=R0#rc_J}7pqIf_+ar9pRFntV}r$y z-d$Ons49;RmOk`wd2J#xR0>xeH>wmnSPDakA5!|vfr>*)*G0+>ma@xw6E)$SRizce zQgxW!n2R%!;NIXskPXfWD)!vF=bAme7vFO66=AiF009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0Rn$`fivT)qP<f!_3-<}>rzTwzYr^fS9tyV}zEzOF)k zPE%v$lz3{WTQ1#^$)(#1`DNLT^qi@K{b!BtUcRp(v442LmTXr?IyYzTiWN(iwX`i+ zy=mEkv0~}mmbNo@^rdqHYl@*Y4TU!K%=E7IuD*_R zYa!j;x@Bc5m+mQ?pUSuN^kfUELMGcYrz^8F-JQy9pD=admUOyfZCmT;_=aa#6;7T> zhY3~`^V?b|^ybfQXz1_npVFP(o$2aIP08ju8`3@XYgadH3A5gk-PO>O?r#_~E8h14 zyEjdp(pVguFXZ}q8mfoaIc%BsZ1-WyY)yCdHpHgIx0lv=-tO&v`9iikvpd}of8k@Y z-Q9gXnZiIrqA}iCRZRc+*9on2sjh~Z@%#%5Y;^urXT?`P_qf#NY+s?FtUA2X#{>%_ z!K1gt{A26pvS6e~J1srj3CX6LV4w{t^mTzo>+<_&9lTXU`R>X&U>Tyy~)-TzbUAbytb^Wx?rmAAa>h-H;FUc)#+PZDY!t!E8 zTTfg2(lu-6rY@K}y|!4faN6=+bNlP3w$0kPq^4Lgf9JFvtsV8t*UaA5RavSitjuP& zHSO9qt#5hRxcG#sxwG23XYXiPyfwYBr`VxoVE)#Q^{Wc&TIV&!iWM^pvkTL@)@@um zb5YyaVnuWB#?4F4-!ZVfb;*v3V#SR9=Dtno&P8jRXSBzQ71O70Xd6hc*woX$aml!1 zMbn}}VaKl3-HR7&-9DyR(b&6i+v4of*3J2ut%>U5`Q7_Rf089gfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C7o>QPYY)u3|j0C?8ei8gE{9q$MfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009DjlmZorXf!%DmM9%-WAW0lCKfA8M60Ue F{~v7Tt`YzM literal 0 HcmV?d00001 diff --git a/toolkit/components/places/tests/migration/places_v21.sqlite b/toolkit/components/places/tests/migration/places_v21.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..f72930826141b1bef15e7a9d0310d73fb93e53ea GIT binary patch literal 1179648 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 QFCMF6v64izq9XqP0dPrbYybcN literal 0 HcmV?d00001 diff --git a/toolkit/components/places/tests/migration/places_v23.sqlite b/toolkit/components/places/tests/migration/places_v23.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..b519b97d27f505cf38126d321e5562e99fc5531d GIT binary patch literal 1179648 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 X*yZtL%K+@wQ|volg8e703}% literal 0 HcmV?d00001 diff --git a/toolkit/components/places/tests/migration/places_v25.sqlite b/toolkit/components/places/tests/migration/places_v25.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..ef5e1def9b7f5a5c6495a5c3ac5eb76cb6a6038b GIT binary patch literal 1179648 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 literal 0 HcmV?d00001 diff --git a/toolkit/components/places/tests/migration/places_v6_no_frecency.sqlite b/toolkit/components/places/tests/migration/places_v6.sqlite similarity index 100% rename from toolkit/components/places/tests/migration/places_v6_no_frecency.sqlite rename to toolkit/components/places/tests/migration/places_v6.sqlite diff --git a/toolkit/components/places/tests/migration/places_v6_no_indices.sqlite b/toolkit/components/places/tests/migration/places_v6_no_indices.sqlite deleted file mode 100644 index 6e823996bf5b1abc70a3f3e52d1b8b2e0770bbd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40960 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 1)`); - try { - stmt.executeAsync({ - handleResult: function (aResult) { - this._hasResults = true; - let row = aResult.getNextRow(); - let mozHostsCount = row.getResultByIndex(0); - let mozPlacesCount = row.getResultByIndex(1); - do_check_true(mozPlacesCount > 0); - do_check_eq(mozPlacesCount, mozHostsCount); - }, - handleError: function () {}, - handleCompletion: function (aReason) { - do_check_eq(aReason, Ci.mozIStorageStatementCallback.REASON_FINISHED); - do_check_true(this._hasResults); - run_next_test(); - } - }); - } - finally { - stmt.finalize(); - } -} - -function test_final_state() -{ - // We open a new database mostly so that we can check that the settings were - // actually saved. - let dbFile = gProfD.clone(); - dbFile.append(kDBName); - let db = Services.storage.openUnsharedDatabase(dbFile); - - let (stmt = db.createStatement("PRAGMA journal_mode")) { - do_check_true(stmt.executeStep()); - // WAL journal mode should be set on this database. - do_check_eq(stmt.getString(0).toLowerCase(), "wal"); - stmt.finalize(); - } - - do_check_true(db.indexExists("moz_bookmarks_guid_uniqueindex")); - do_check_true(db.indexExists("moz_places_guid_uniqueindex")); - do_check_true(db.indexExists("moz_favicons_guid_uniqueindex")); - - do_check_eq(db.schemaVersion, CURRENT_SCHEMA_VERSION); - - db.close(); - run_next_test(); -} - -//////////////////////////////////////////////////////////////////////////////// -//// Test Runner - -[ - test_initial_state, - test_moz_bookmarks_guid_exists, - test_bookmark_guids_non_null, - test_bookmark_guid_annotation_imported, - test_bookmark_guid_annotation_removed, - test_moz_places_guid_exists, - test_place_guids_non_null, - test_place_guid_annotation_imported, - test_place_guid_annotation_removed, - test_moz_hosts, - test_final_state, -].forEach(add_test); - -function run_test() -{ - setPlacesDatabase("places_v10.sqlite"); - run_next_test(); -} diff --git a/toolkit/components/places/tests/migration/test_current_from_v10_migrated_from_v14.js b/toolkit/components/places/tests/migration/test_current_from_v10_migrated_from_v14.js deleted file mode 100644 index fb12d6533d7f..000000000000 --- a/toolkit/components/places/tests/migration/test_current_from_v10_migrated_from_v14.js +++ /dev/null @@ -1,132 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * This file tests migration invariants from a database with schema version 14 - * that was then downgraded to a database with a schema version 10. Places - * should then migrate this database to one with the current schema version. - */ - -//////////////////////////////////////////////////////////////////////////////// -//// Test Functions - -function test_initial_state() -{ - // Mostly sanity checks our starting DB to make sure it's setup as we expect - // it to be. - let dbFile = gProfD.clone(); - dbFile.append(kDBName); - let db = Services.storage.openUnsharedDatabase(dbFile); - - let stmt = db.createStatement("PRAGMA journal_mode"); - do_check_true(stmt.executeStep()); - // WAL journal mode should have been unset this database when it was migrated - // down to v10. - do_check_neq(stmt.getString(0).toLowerCase(), "wal"); - stmt.finalize(); - - do_check_true(db.indexExists("moz_bookmarks_guid_uniqueindex")); - do_check_true(db.indexExists("moz_places_guid_uniqueindex")); - - // There should be a non-zero amount of bookmarks without a guid. - stmt = db.createStatement( - `SELECT COUNT(1) - FROM moz_bookmarks - WHERE guid IS NULL` - ); - do_check_true(stmt.executeStep()); - do_check_neq(stmt.getInt32(0), 0); - stmt.finalize(); - - // There should be a non-zero amount of places without a guid. - stmt = db.createStatement( - `SELECT COUNT(1) - FROM moz_places - WHERE guid IS NULL` - ); - do_check_true(stmt.executeStep()); - do_check_neq(stmt.getInt32(0), 0); - stmt.finalize(); - - // Check our schema version to make sure it is actually at 10. - do_check_eq(db.schemaVersion, 10); - - db.close(); - run_next_test(); -} - -function test_bookmark_guids_non_null() -{ - // First, sanity check that we have a non-zero amount of bookmarks. If - // migration failed, we would have zero. - let stmt = DBConn().createStatement( - `SELECT COUNT(1) - FROM moz_bookmarks` - ); - do_check_true(stmt.executeStep()); - do_check_neq(stmt.getInt32(0), 0); - stmt.finalize(); - - // Now, make sure we have no NULL guid entries. - stmt = DBConn().createStatement( - `SELECT guid - FROM moz_bookmarks - WHERE guid IS NULL` - ); - do_check_false(stmt.executeStep()); - stmt.finalize(); - run_next_test(); -} - -function test_place_guids_non_null() -{ - // First, sanity check that we have a non-zero amount of places. If migration - // failed, we would have zero. - let stmt = DBConn().createStatement( - `SELECT COUNT(1) - FROM moz_places` - ); - do_check_true(stmt.executeStep()); - do_check_neq(stmt.getInt32(0), 0); - stmt.finalize(); - - // Now, make sure we have no NULL guid entry. - stmt = DBConn().createStatement( - `SELECT guid - FROM moz_places - WHERE guid IS NULL` - ); - do_check_false(stmt.executeStep()); - stmt.finalize(); - run_next_test(); -} - -function test_final_state() -{ - // We open a new database mostly so that we can check that the settings were - // actually saved. - let dbFile = gProfD.clone(); - dbFile.append(kDBName); - let db = Services.storage.openUnsharedDatabase(dbFile); - - do_check_eq(db.schemaVersion, CURRENT_SCHEMA_VERSION); - - db.close(); - run_next_test(); -} - -//////////////////////////////////////////////////////////////////////////////// -//// Test Runner - -[ - test_initial_state, - test_bookmark_guids_non_null, - test_place_guids_non_null, - test_final_state, -].forEach(add_test); - -function run_test() -{ - setPlacesDatabase("places_v10_from_v14.sqlite"); - run_next_test(); -} diff --git a/toolkit/components/places/tests/migration/test_current_from_v16.js b/toolkit/components/places/tests/migration/test_current_from_v16.js new file mode 100644 index 000000000000..a8bcbc8453df --- /dev/null +++ b/toolkit/components/places/tests/migration/test_current_from_v16.js @@ -0,0 +1,48 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +add_task(function* setup() { + yield setupPlacesDatabase("places_v16.sqlite"); +}); + +add_task(function* database_is_valid() { + Assert.equal(PlacesUtils.history.databaseStatus, + PlacesUtils.history.DATABASE_STATUS_UPGRADED); + + let db = yield PlacesUtils.promiseDBConnection(); + Assert.equal((yield db.getSchemaVersion()), CURRENT_SCHEMA_VERSION); +}); + +add_task(function* test_moz_hosts() { + let db = yield PlacesUtils.promiseDBConnection(); + + // This will throw if the column does not exist. + yield db.execute("SELECT host, frecency, typed, prefix FROM moz_hosts"); + + // moz_hosts is populated asynchronously, so we need to wait. + yield promiseAsyncUpdates(); + + // check the number of entries in moz_hosts equals the number of + // unique rev_host in moz_places + let rows = yield db.execute( + `SELECT (SELECT COUNT(host) FROM moz_hosts), + (SELECT COUNT(DISTINCT rev_host) + FROM moz_places + WHERE LENGTH(rev_host) > 1) + `); + + Assert.equal(rows.length, 1); + let mozHostsCount = rows[0].getResultByIndex(0); + let mozPlacesCount = rows[0].getResultByIndex(1); + + Assert.ok(mozPlacesCount > 0, "There is some url in the database"); + Assert.equal(mozPlacesCount, mozHostsCount, "moz_hosts has the expected number of entries"); +}); + +add_task(function* test_journal() { + let db = yield PlacesUtils.promiseDBConnection(); + let rows = yield db.execute("PRAGMA journal_mode"); + Assert.equal(rows.length, 1); + // WAL journal mode should be set on this database. + Assert.equal(rows[0].getResultByIndex(0), "wal"); +}); diff --git a/toolkit/components/places/tests/migration/test_current_from_v19.js b/toolkit/components/places/tests/migration/test_current_from_v19.js index 1b655a9f1d71..e32d3b88584e 100644 --- a/toolkit/components/places/tests/migration/test_current_from_v19.js +++ b/toolkit/components/places/tests/migration/test_current_from_v19.js @@ -1,62 +1,42 @@ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ -/** - * This file tests migration invariants from schema version 19 to the current - * schema version. - */ +const ANNO_LEGACYGUID = "placesInternal/GUID"; -//////////////////////////////////////////////////////////////////////////////// -//// Globals - -const kGuidAnnotationName = "placesInternal/GUID"; - -function getTotalGuidAnnotationsCount(aStorageConnection) { - stmt = aStorageConnection.createStatement( +let getTotalGuidAnnotationsCount = Task.async(function* (db) { + let rows = yield db.execute( `SELECT count(*) FROM moz_items_annos a JOIN moz_anno_attributes b ON a.anno_attribute_id = b.id - WHERE b.name = :attr_name` - ); - try { - stmt.params.attr_name = kGuidAnnotationName; - do_check_true(stmt.executeStep()); - return stmt.getInt32(0); - } finally { - stmt.finalize(); - } -} - -//////////////////////////////////////////////////////////////////////////////// -//// Tests - -function run_test() -{ - setPlacesDatabase("places_v19.sqlite"); - run_next_test(); -} - -add_test(function test_initial_state() -{ - let dbFile = gProfD.clone(); - dbFile.append(kDBName); - let db = Services.storage.openUnsharedDatabase(dbFile); - - // There should be an obsolete bookmark GUID annotation. - do_check_eq(getTotalGuidAnnotationsCount(db), 1); - - // Check our schema version to make sure it is actually at 19. - do_check_eq(db.schemaVersion, 19); - - db.close(); - run_next_test(); + WHERE b.name = :attr_name + `, { attr_name: ANNO_LEGACYGUID }); + return rows[0].getResultByIndex(0); }); -add_test(function test_bookmark_guid_annotation_removed() -{ - - // There should be no obsolete bookmark GUID annotation anymore. - do_check_eq(getTotalGuidAnnotationsCount(DBConn()), 0); - - run_next_test(); +add_task(function* setup() { + yield setupPlacesDatabase("places_v19.sqlite"); +}); + +add_task(function* initial_state() { + let path = OS.Path.join(OS.Constants.Path.profileDir, DB_FILENAME); + let db = yield Sqlite.openConnection({ path: path }); + + Assert.equal((yield getTotalGuidAnnotationsCount(db)), 1, + "There should be 1 obsolete guid annotation"); + yield db.close(); +}); + +add_task(function* database_is_valid() { + Assert.equal(PlacesUtils.history.databaseStatus, + PlacesUtils.history.DATABASE_STATUS_UPGRADED); + + let db = yield PlacesUtils.promiseDBConnection(); + Assert.equal((yield db.getSchemaVersion()), CURRENT_SCHEMA_VERSION); +}); + +add_task(function test_bookmark_guid_annotation_removed() +{ + let db = yield PlacesUtils.promiseDBConnection(); + Assert.equal((yield getTotalGuidAnnotationsCount(db)), 0, + "There should be no more obsolete GUID annotations."); }); diff --git a/toolkit/components/places/tests/migration/test_current_from_v24.js b/toolkit/components/places/tests/migration/test_current_from_v24.js new file mode 100644 index 000000000000..f45a172e1960 --- /dev/null +++ b/toolkit/components/places/tests/migration/test_current_from_v24.js @@ -0,0 +1,35 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +add_task(function* setup() { + yield setupPlacesDatabase("places_v24.sqlite"); +}); + +add_task(function* database_is_valid() { + Assert.equal(PlacesUtils.history.databaseStatus, + PlacesUtils.history.DATABASE_STATUS_UPGRADED); + + let db = yield PlacesUtils.promiseDBConnection(); + Assert.equal((yield db.getSchemaVersion()), CURRENT_SCHEMA_VERSION); +}); + +add_task(function test_bookmark_guid_annotation_removed() +{ + yield PlacesUtils.bookmarks.eraseEverything(); + + let db = yield PlacesUtils.promiseDBConnection(); + let m = new Map([ + [PlacesUtils.placesRootId, PlacesUtils.bookmarks.rootGuid], + [PlacesUtils.bookmarksMenuFolderId, PlacesUtils.bookmarks.menuGuid], + [PlacesUtils.toolbarFolderId, PlacesUtils.bookmarks.toolbarGuid], + [PlacesUtils.unfiledBookmarksFolderId, PlacesUtils.bookmarks.unfiledGuid], + [PlacesUtils.tagsFolderId, PlacesUtils.bookmarks.tagsGuid] + ]); + + let rows = yield db.execute(`SELECT id, guid FROM moz_bookmarks`); + for (let row of rows) { + let id = row.getResultByName("id"); + let guid = row.getResultByName("guid"); + Assert.equal(m.get(id), guid, "The root folder has the correct GUID"); + } +}); diff --git a/toolkit/components/places/tests/migration/test_current_from_v6.js b/toolkit/components/places/tests/migration/test_current_from_v6.js new file mode 100644 index 000000000000..a3f9dc229169 --- /dev/null +++ b/toolkit/components/places/tests/migration/test_current_from_v6.js @@ -0,0 +1,38 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * This file tests migration from a preliminary schema version 6 that + * lacks frecency column and moz_inputhistory table. + */ + +add_task(function* setup() { + yield setupPlacesDatabase("places_v6.sqlite"); +}); + +add_task(function* corrupt_database_not_exists() { + let corruptPath = OS.Path.join(OS.Constants.Path.profileDir, + "places.sqlite.corrupt"); + Assert.ok(!(yield OS.File.exists(corruptPath)), "Corrupt file should not exist"); +}); + +add_task(function* database_is_valid() { + Assert.equal(PlacesUtils.history.databaseStatus, + PlacesUtils.history.DATABASE_STATUS_CORRUPT); + + let db = yield PlacesUtils.promiseDBConnection(); + Assert.equal((yield db.getSchemaVersion()), CURRENT_SCHEMA_VERSION); +}); + +add_task(function* check_columns() { + // Check the database has been replaced, these would throw otherwise. + let db = yield PlacesUtils.promiseDBConnection(); + yield db.execute("SELECT frecency from moz_places"); + yield db.execute("SELECT 1 from moz_inputhistory"); +}); + +add_task(function* corrupt_database_exists() { + let corruptPath = OS.Path.join(OS.Constants.Path.profileDir, + "places.sqlite.corrupt"); + Assert.ok((yield OS.File.exists(corruptPath)), "Corrupt file should exist"); +}); diff --git a/toolkit/components/places/tests/migration/test_database_from_alpha.js b/toolkit/components/places/tests/migration/test_database_from_alpha.js deleted file mode 100644 index 0f1774eb1bb9..000000000000 --- a/toolkit/components/places/tests/migration/test_database_from_alpha.js +++ /dev/null @@ -1,34 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * This file tests migration replaces the database if schema version < 6. - */ - -add_test(function corrupt_database_not_exists() { - let dbFile = gProfD.clone(); - dbFile.append("places.sqlite.corrupt"); - do_check_false(dbFile.exists()); - run_next_test(); -}); - -add_test(function database_is_valid() { - do_check_eq(PlacesUtils.history.databaseStatus, - PlacesUtils.history.DATABASE_STATUS_CORRUPT); - do_check_eq(DBConn().schemaVersion, CURRENT_SCHEMA_VERSION); - run_next_test(); -}); - -add_test(function corrupt_database_exists() { - let dbFile = gProfD.clone(); - dbFile.append("places.sqlite.corrupt"); - do_check_true(dbFile.exists()); - run_next_test(); -}); - -function run_test() -{ - setPlacesDatabase("places_alpha.sqlite"); - run_next_test(); -} - diff --git a/toolkit/components/places/tests/migration/test_database_from_v6_no_frecency.js b/toolkit/components/places/tests/migration/test_database_from_v6_no_frecency.js deleted file mode 100644 index dba00a8b69bf..000000000000 --- a/toolkit/components/places/tests/migration/test_database_from_v6_no_frecency.js +++ /dev/null @@ -1,31 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * This file tests migration from a preliminary schema version 6 that - * lacks frecency column and moz_inputhistory table. - */ - -add_test(function database_is_valid() { - do_check_eq(PlacesUtils.history.databaseStatus, - PlacesUtils.history.DATABASE_STATUS_UPGRADED); - // This throws if frecency column does not exist. - stmt = DBConn().createStatement("SELECT frecency from moz_places"); - stmt.finalize(); - // Check moz_inputhistory is in place. - do_check_true(DBConn().tableExists("moz_inputhistory")); - run_next_test(); -}); - -add_test(function corrupt_database_not_exists() { - let dbFile = gProfD.clone(); - dbFile.append("places.sqlite.corrupt"); - do_check_false(dbFile.exists()); - run_next_test(); -}); - -function run_test() -{ - setPlacesDatabase("places_v6_no_frecency.sqlite"); - run_next_test(); -} diff --git a/toolkit/components/places/tests/migration/test_database_from_v6_no_indices.js b/toolkit/components/places/tests/migration/test_database_from_v6_no_indices.js deleted file mode 100644 index 497b6bcbec14..000000000000 --- a/toolkit/components/places/tests/migration/test_database_from_v6_no_indices.js +++ /dev/null @@ -1,34 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * This file tests migration from a preliminary schema version 6 that - * lacks important indices. The database should be replaced. - */ - -add_test(function corrupt_database_not_exists() { - let dbFile = gProfD.clone(); - dbFile.append("places.sqlite.corrupt"); - do_check_false(dbFile.exists()); - run_next_test(); -}); - -add_test(function database_is_valid() { - do_check_eq(PlacesUtils.history.databaseStatus, - PlacesUtils.history.DATABASE_STATUS_CORRUPT); - do_check_eq(DBConn().schemaVersion, CURRENT_SCHEMA_VERSION); - run_next_test(); -}); - -add_test(function corrupt_database_exists() { - let dbFile = gProfD.clone(); - dbFile.append("places.sqlite.corrupt"); - do_check_true(dbFile.exists()); - run_next_test(); -}); - -function run_test() -{ - setPlacesDatabase("places_v6_no_indices.sqlite"); - run_next_test(); -} diff --git a/toolkit/components/places/tests/migration/xpcshell.ini b/toolkit/components/places/tests/migration/xpcshell.ini index 5be8549ab823..8ac9f8310640 100644 --- a/toolkit/components/places/tests/migration/xpcshell.ini +++ b/toolkit/components/places/tests/migration/xpcshell.ini @@ -1,18 +1,22 @@ [DEFAULT] head = head_migration.js tail = -skip-if = toolkit == 'android' || toolkit == 'gonk' -support-files = - places_alpha.sqlite - places_v10.sqlite - places_v10_from_v14.sqlite - places_v19.sqlite - places_v6_no_frecency.sqlite - places_v6_no_indices.sqlite -[test_current_from_v10.js] -[test_current_from_v10_migrated_from_v14.js] +support-files = + places_v6.sqlite + places_v10.sqlite + places_v11.sqlite + places_v16.sqlite + places_v17.sqlite + places_v19.sqlite + places_v21.sqlite + places_v22.sqlite + places_v23.sqlite + places_v24.sqlite + places_v25.sqlite + +[test_current_from_downgraded.js] +[test_current_from_v6.js] +[test_current_from_v16.js] [test_current_from_v19.js] -[test_database_from_alpha.js] -[test_database_from_v6_no_frecency.js] -[test_database_from_v6_no_indices.js] +[test_current_from_v24.js] diff --git a/toolkit/components/places/tests/unit/test_promiseBookmarksTree.js b/toolkit/components/places/tests/unit/test_promiseBookmarksTree.js index c4f6df1e858e..b84ab7d14033 100644 --- a/toolkit/components/places/tests/unit/test_promiseBookmarksTree.js +++ b/toolkit/components/places/tests/unit/test_promiseBookmarksTree.js @@ -210,17 +210,13 @@ function* test_promiseBookmarksTreeAgainstResult(aItemGuid = "", add_task(function* () { // Add some bookmarks to cover various use cases. - let toolbarGuid = - yield PlacesUtils.promiseItemGuid(PlacesUtils.toolbarFolderId); - let menuGuid = - yield PlacesUtils.promiseItemGuid(PlacesUtils.bookmarksMenuFolderId); - yield new_bookmark({ parentGuid: toolbarGuid }); - yield new_folder({ parentGuid: menuGuid + yield new_bookmark({ parentGuid: PlacesUtils.bookmarks.toolbarGuid }); + yield new_folder({ parentGuid: PlacesUtils.bookmarks.menuGuid , annotations: [{ name: "TestAnnoA", value: "TestVal" , name: "TestAnnoB", value: 0 }]}); yield PlacesTransactions.transact( - PlacesTransactions.NewSeparator({ parentGuid: menuGuid })); - let folderGuid = yield new_folder({ parentGuid: menuGuid }); + PlacesTransactions.NewSeparator({ parentGuid: PlacesUtils.bookmarks.menuGuid })); + let folderGuid = yield new_folder({ parentGuid: PlacesUtils.bookmarks.menuGuid }); yield new_bookmark({ title: null , parentGuid: folderGuid , keyword: "test_keyword" @@ -234,8 +230,7 @@ add_task(function* () { yield test_promiseBookmarksTreeAgainstResult(); // Do specify it - let rootGuid = yield PlacesUtils.promiseItemGuid(PlacesUtils.placesRootId); - yield test_promiseBookmarksTreeAgainstResult(rootGuid); + yield test_promiseBookmarksTreeAgainstResult(PlacesUtils.bookmarks.rootGuid); // Exclude the bookmarks menu. // The calllback should be four times - once for the toolbar, once for @@ -246,13 +241,13 @@ add_task(function* () { // passed in. let guidsPassedToExcludeCallback = new Set(); let placesRootWithoutTheMenu = - yield test_promiseBookmarksTreeAgainstResult(rootGuid, { + yield test_promiseBookmarksTreeAgainstResult(PlacesUtils.bookmarks.rootGuid, { excludeItemsCallback: aItem => { guidsPassedToExcludeCallback.add(aItem.guid); return aItem.root == "bookmarksMenuFolder"; }, includeItemIds: true - }, [menuGuid]); + }, [PlacesUtils.bookmarks.menuGuid]); do_check_eq(guidsPassedToExcludeCallback.size, 4); do_check_eq(placesRootWithoutTheMenu.children.length, 2); });