/** * Test searching for bookmarks (by title and by tag) from the Bookmarks sidebar. */ "use strict"; let sidebar = document.getElementById("sidebar"); const TEST_URI = "http://example.com/"; const BOOKMARKS_COUNT = 4; const TEST_PARENT_FOLDER = "testParentFolder"; const TEST_SIF_URL = "http://testsif.example.com/"; const TEST_SIF_TITLE = "TestSIF"; const TEST_NEW_TITLE = "NewTestSIF"; function assertBookmarks(searchValue) { let found = 0; let searchBox = sidebar.contentDocument.getElementById("search-box"); ok(searchBox, "search box is in context"); searchBox.value = searchValue; searchBox.doCommand(); let tree = sidebar.contentDocument.getElementById("bookmarks-view"); for (let i = 0; i < tree.view.rowCount; i++) { let cellText = tree.view.getCellText(i, tree.columns.getColumnAt(0)); if (cellText.includes("example page")) { found++; } } info("Reset the search"); searchBox.value = ""; searchBox.doCommand(); is(found, BOOKMARKS_COUNT, "found expected site"); } async function showInFolder(aSearchStr, aParentFolderGuid) { let searchBox = sidebar.contentDocument.getElementById("search-box"); searchBox.value = aSearchStr; searchBox.doCommand(); let tree = sidebar.contentDocument.getElementById("bookmarks-view"); let theNode = tree.view._getNodeForRow(0); let bookmarkGuid = theNode.bookmarkGuid; Assert.equal(theNode.uri, TEST_SIF_URL, "Found expected bookmark"); info("Running Show in Folder command"); tree.selectNode(theNode); tree.controller.doCommand("placesCmd_showInFolder"); let treeNode = tree.selectedNode; Assert.equal( treeNode.parent.bookmarkGuid, aParentFolderGuid, "Containing folder node is correct" ); Assert.equal( treeNode.bookmarkGuid, bookmarkGuid, "The searched bookmark guid matches selected node" ); Assert.equal( treeNode.uri, TEST_SIF_URL, "The searched bookmark URL matches selected node" ); info("Check the title will be applied the item when changing it"); await PlacesUtils.bookmarks.update({ guid: theNode.bookmarkGuid, title: TEST_NEW_TITLE, }); Assert.equal( treeNode.title, TEST_NEW_TITLE, "New title is applied to the node" ); } add_task(async function testTree() { // Add bookmarks and tags. for (let i = 0; i < BOOKMARKS_COUNT; i++) { let url = Services.io.newURI(TEST_URI + i); await PlacesUtils.bookmarks.insert({ url, title: "example page " + i, parentGuid: PlacesUtils.bookmarks.toolbarGuid, }); PlacesUtils.tagging.tagURI(url, ["test"]); } await withSidebarTree("bookmarks", function () { // Search a bookmark by its title. assertBookmarks("example.com"); // Search a bookmark by its tag. assertBookmarks("test"); }); // Cleanup before testing Show in Folder. await PlacesUtils.bookmarks.eraseEverything(); }); add_task(async function testShowInFolder() { // Now test Show in Folder let parentFolder = await PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid, type: PlacesUtils.bookmarks.TYPE_FOLDER, title: TEST_PARENT_FOLDER, }); await PlacesUtils.bookmarks.insert({ parentGuid: parentFolder.guid, title: TEST_SIF_TITLE, url: TEST_SIF_URL, }); await withSidebarTree("bookmarks", async function () { await showInFolder(TEST_SIF_TITLE, parentFolder.guid); }); // Cleanup await PlacesUtils.bookmarks.eraseEverything(); }); add_task(async function testRenameOnQueryResult() { await PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.toolbarGuid, title: TEST_SIF_TITLE, url: TEST_SIF_URL, }); await withSidebarTree("bookmarks", async function () { const searchBox = sidebar.contentDocument.getElementById("search-box"); searchBox.value = TEST_SIF_TITLE; searchBox.doCommand(); const tree = sidebar.contentDocument.getElementById("bookmarks-view"); const theNode = tree.view._getNodeForRow(0); info("Check the found bookmark"); Assert.equal(theNode.uri, TEST_SIF_URL, "URI of bookmark found is correct"); Assert.equal( theNode.title, TEST_SIF_TITLE, "Title of bookmark found is correct" ); info("Check the title will be applied the item when changing it"); await PlacesUtils.bookmarks.update({ guid: theNode.bookmarkGuid, title: TEST_NEW_TITLE, }); // As the query result is refreshed once then the node also is regenerated, // need to get the result node from the tree again. Assert.equal( tree.view._getNodeForRow(0).bookmarkGuid, theNode.bookmarkGuid, "GUID of node regenerated is correct" ); Assert.equal( tree.view._getNodeForRow(0).uri, theNode.uri, "URI of node regenerated is correct" ); Assert.equal( tree.view._getNodeForRow(0).parentGuid, theNode.parentGuid, "parentGuid of node regenerated is correct" ); Assert.equal( tree.view._getNodeForRow(0).title, TEST_NEW_TITLE, "New title is applied to the node" ); info("Check the new date will be applied the item when changing it"); const now = new Date(); await PlacesUtils.bookmarks.update({ guid: theNode.bookmarkGuid, dateAdded: now, lastModified: now, }); Assert.equal( tree.view._getNodeForRow(0).uri, theNode.uri, "URI of node regenerated is correct" ); Assert.equal( tree.view._getNodeForRow(0).dateAdded, now.getTime() * 1000, "New dateAdded is applied to the node" ); Assert.equal( tree.view._getNodeForRow(0).lastModified, now.getTime() * 1000, "New lastModified is applied to the node" ); }); // Cleanup before testing Show in Folder. await PlacesUtils.bookmarks.eraseEverything(); });