diff -r 000000000000 -r 6474c204b198 browser/components/tabview/test/browser_tabview_bug649319.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/components/tabview/test/browser_tabview_bug649319.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,78 @@ +/* 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(); + }); + }); +}