/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

let tabOne;
let tabTwo;

function test() {
  waitForExplicitFinish();

  tabOne = gBrowser.addTab("http://mochi.test:8888/");
  tabTwo = gBrowser.addTab("http://mochi.test:8888/browser/browser/base/content/test/tabview/dummy_page.html");

  afterAllTabsLoaded(function () {
    // make sure the tab one is selected because undoCloseTab() would remove
    // the selected tab if it's a blank tab.
    gBrowser.selectedTab = tabOne;
    showTabView(onTabViewWindowLoaded);
  });
}

function onTabViewWindowLoaded() {
  let contentWindow = TabView.getContentWindow();
  let groupItems = contentWindow.GroupItems.groupItems;
  is(groupItems.length, 1, "There is only one group");
  is(groupItems[0].getChildren().length, 3, "The group has three tab items");

  gBrowser.removeTab(tabTwo);
  ok(TabView.isVisible(), "Tab View is still visible after removing a tab");
  is(groupItems[0].getChildren().length, 2, "The group has two tab items");

  tabTwo = undoCloseTab(0);
  whenTabIsReconnected(tabTwo, function() {
    ok(TabView.isVisible(), "Tab View is still visible after restoring a tab");
    is(groupItems[0].getChildren().length, 3, "The group still has three tab items");

    // clean up and finish
    hideTabView(function () {
      gBrowser.removeTab(tabOne);
      gBrowser.removeTab(tabTwo);
      finish();
    });
  });
}

// ----------
function whenTabIsReconnected(tab, callback) {
  let tabItem = tab._tabViewTabItem;

  if (tabItem._reconnected) {
    callback();
    return;
  }

  tabItem.addSubscriber(tabItem, "reconnected", function () {
    tabItem.removeSubscriber(tabItem, "reconnected");
    callback();
  });
}
