text: /* Any copyright is dedicated to the Public Domain.
     http://creativecommons.org/publicdomain/zero/1.0/ */
  
  function test() {
    waitForExplicitFinish();
  
    newWindowWithTabView(function (win) {
      registerCleanupFunction(function () win.close());
      waitForFocus(function () testScenarios(win));
    });
  }
  
  function testScenarios(win) {
    let simulateDragDrop = function (target) {
      EventUtils.synthesizeMouseAtCenter(target, {type: "mousedown"}, cw);
      EventUtils.synthesizeMouse(target, 40, 20, {type: "mousemove"}, cw);
      EventUtils.synthesizeMouse(target, 80, 20, {type: "mouseup"}, cw);
    }
  
    let dragOutOfGroup = function (target) {
      EventUtils.synthesizeMouseAtCenter(target, {type: "mousedown"}, cw);
      EventUtils.synthesizeMouse(target, 600, 5, {type: "mousemove"}, cw);
      EventUtils.synthesizeMouse(target, 600, 5, {type: "mouseup"}, cw);
    }
  
    let dragIntoGroup = function (target) {
      EventUtils.synthesizeMouseAtCenter(target, {type: "mousedown"}, cw);
      EventUtils.synthesizeMouse(target, -200, 5, {type: "mousemove"}, cw);
      EventUtils.synthesizeMouse(target, -200, 5, {type: "mouseup"}, cw);
    }
  
    let assertActiveOrphan = function (tabItem) {
      ok(!cw.GroupItems.getActiveGroupItem(), "no groupItem is active");
      is(cw.UI.getActiveTab(), tabItem, "orphan tab is active");
      is(cw.UI.getActiveOrphanTab(), tabItem, "orphan tab is active");
    }
  
    let cw = win.TabView.getContentWindow();
    let groupItem = cw.GroupItems.groupItems[0];
    let groupItem2 = createGroupItemWithBlankTabs(win, 400, 300, 20, 4);
  
    // move group
    cw.UI.setActive(groupItem);
    simulateDragDrop(groupItem2.container);
    is(cw.GroupItems.getActiveGroupItem(), groupItem2, "second groupItem is active");
    is(cw.UI.getActiveTab(), groupItem2.getChild(0), "second groupItem's first tab is active");
  
    // resize group
    cw.UI.setActive(groupItem);
    let tabItem = groupItem2.getChild(2);
    groupItem2.setActiveTab(tabItem);
    simulateDragDrop(groupItem2.$resizer[0]);
    is(cw.GroupItems.getActiveGroupItem(), groupItem2, "second groupItem is active");
    is(cw.UI.getActiveTab(), tabItem, "second groupItem's third tab is active");
  
    // drag tab out of group
    tabItem = groupItem2.getChild(0);
    dragOutOfGroup(tabItem.container);
    is(cw.UI.getActiveTab(), tabItem, "the dragged tab is active");
  
    // drag back into group
    dragIntoGroup(tabItem.container);
    cw.UI.setActive(groupItem);
    cw.UI.setActive(groupItem2);
    is(cw.UI.getActiveTab(), tabItem, "the dropped tab is active");
  
    // hide + unhide groupItem
    hideGroupItem(groupItem2, function () {
      is(cw.GroupItems.getActiveGroupItem(), groupItem, "first groupItem is active");
  
      unhideGroupItem(groupItem2, function () {
        is(cw.GroupItems.getActiveGroupItem(), groupItem2, "second groupItem is active");
        is(cw.UI.getActiveTab(), tabItem, "the dropped tab is active");
  
        finish();
      });
    });
  }
  