"use strict";

add_task(function* () {
  let tab = gBrowser.selectedTab = gBrowser.addTab("about:mozilla");
  yield promiseBrowserLoaded(gBrowser.selectedBrowser);

  let win = gBrowser.replaceTabWithWindow(tab);
  yield promiseDelayedStartupFinished(win);
  yield promiseBrowserHasURL(win.gBrowser.browsers[0], "about:mozilla");

  win.duplicateTabIn(win.gBrowser.selectedTab, "tab");
  yield promiseTabRestored(win.gBrowser.tabs[1]);

  let browser = win.gBrowser.browsers[1];
  is(browser.currentURI.spec, "about:mozilla", "tab was duplicated");

  yield promiseWindowClosed(win);
});

function promiseDelayedStartupFinished(win) {
  let deferred = Promise.defer();
  whenDelayedStartupFinished(win, deferred.resolve);
  return deferred.promise;
}

function promiseBrowserHasURL(browser, url) {
  let promise = Promise.resolve();

  if (browser.contentDocument.readyState === "complete" &&
      browser.currentURI.spec === url) {
    return promise;
  }

  return promise.then(() => promiseBrowserHasURL(browser, url));
}
