"use strict";

add_task(async function() {
  let tab = gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, "about:mozilla");
  await promiseBrowserLoaded(gBrowser.selectedBrowser);

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

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

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

  await BrowserTestUtils.closeWindow(win);
});

function promiseDelayedStartupFinished(win) {
  return new Promise(resolve => {
    whenDelayedStartupFinished(win, resolve);
  });
}

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

  // eslint-disable-next-line mozilla/no-cpows-in-tests
  if (browser.contentDocument.readyState === "complete" &&
      browser.currentURI.spec === url) {
    return promise;
  }

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