diff -r 000000000000 -r 6474c204b198 browser/components/tabview/test/browser_tabview_bug616729.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/components/tabview/test/browser_tabview_bug616729.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,109 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +function test() { + let cw; + + let createGroupItem = function () { + return createGroupItemWithBlankTabs(window, 400, 200, 0, 5); + } + + let assertCorrectItemOrder = function (items) { + for (let i=1; i items[i].tab._tPos) { + ok(false, 'tabs were correctly reordered'); + return; + } + } + ok(true, 'tabs were correctly reordered'); + } + + let testVariousTabOrders = function () { + let groupItem = createGroupItem(); + let [tab1, tab2, tab3, tab4, tab5] = groupItem.getChildren(); + + // prepare tests + let tests = []; + tests.push([tab1, tab2, tab3, tab4, tab5]); + tests.push([tab5, tab4, tab3, tab2, tab1]); + tests.push([tab1, tab2, tab3, tab4]); + tests.push([tab4, tab3, tab2, tab1]); + tests.push([tab1, tab2, tab3]); + tests.push([tab1, tab2, tab3]); + tests.push([tab1, tab3, tab2]); + tests.push([tab2, tab1, tab3]); + tests.push([tab2, tab3, tab1]); + tests.push([tab3, tab1, tab2]); + tests.push([tab3, tab2, tab1]); + tests.push([tab1, tab2]); + tests.push([tab2, tab1]); + tests.push([tab1]); + + // test reordering of empty groups - removes the last tab and causes + // the groupItem to close + tests.push([]); + + while (tests.length) { + let test = tests.shift(); + + // prepare + let items = groupItem.getChildren(); + while (test.length < items.length) + items[items.length-1].close(); + + let orig = cw.Utils.copy(items); + items.sort(function (a, b) test.indexOf(a) - test.indexOf(b)); + + // order and check + groupItem.reorderTabsBasedOnTabItemOrder(); + assertCorrectItemOrder(items); + + // revert to original item order + items.sort(function (a, b) orig.indexOf(a) - orig.indexOf(b)); + groupItem.reorderTabsBasedOnTabItemOrder(); + } + + testMoveBetweenGroups(); + } + + let testMoveBetweenGroups = function () { + let groupItem = createGroupItem(); + let groupItem2 = createGroupItem(); + + afterAllTabsLoaded(function () { + // move item from group1 to group2 + let child = groupItem.getChild(2); + groupItem.remove(child); + + groupItem2.add(child, {index: 3}); + groupItem2.reorderTabsBasedOnTabItemOrder(); + + assertCorrectItemOrder(groupItem.getChildren()); + assertCorrectItemOrder(groupItem2.getChildren()); + + // move item from group2 to group1 + child = groupItem2.getChild(1); + groupItem2.remove(child); + + groupItem.add(child, {index: 1}); + groupItem.reorderTabsBasedOnTabItemOrder(); + + assertCorrectItemOrder(groupItem.getChildren()); + assertCorrectItemOrder(groupItem2.getChildren()); + + // cleanup + closeGroupItem(groupItem, function () { + closeGroupItem(groupItem2, function () { + hideTabView(finish); + }); + }); + }); + } + + waitForExplicitFinish(); + + showTabView(function () { + cw = TabView.getContentWindow(); + afterAllTabsLoaded(testVariousTabOrders); + }); +}