add_task(function* () {
  // test that nodes inserted by incremental update for bookmarks of all types
  // have the extra bookmark properties (bookmarkGuid, dateAdded, lastModified).

  // getFolderContents opens the root node.
  let root = PlacesUtils.getFolderContents(PlacesUtils.toolbarFolderId).root;

  function* insertAndTest(bmInfo) {
    bmInfo = yield PlacesUtils.bookmarks.insert(bmInfo);
    let node = root.getChild(root.childCount - 1);
    Assert.equal(node.bookmarkGuid, bmInfo.guid);
    Assert.equal(node.dateAdded, bmInfo.dateAdded * 1000);
    Assert.equal(node.lastModified, bmInfo.lastModified * 1000);
  }

  // Normal bookmark.
  yield insertAndTest({ parentGuid: root.bookmarkGuid
                      , type: PlacesUtils.bookmarks.TYPE_BOOKMARK
                      , title: "Test Bookmark"
                      , url: "http://test.url.tld" });

  // place: query
  yield insertAndTest({ parentGuid: root.bookmarkGuid
                      , type: PlacesUtils.bookmarks.TYPE_BOOKMARK
                      , title: "Test Query"
                      , url: "place:folder=BOOKMARKS_MENU" });

  // folder
  yield insertAndTest({ parentGuid: root.bookmarkGuid
                      , type: PlacesUtils.bookmarks.TYPE_FOLDER
                      , title: "Test Folder" });

  // separator
  yield insertAndTest({ parentGuid: root.bookmarkGuid
                      , type: PlacesUtils.bookmarks.TYPE_SEPARATOR });

  root.containerOpen = false;
});

function run_test() {
  run_next_test();
}