browser/components/tabview/test/browser_tabview_expander.js

Thu, 15 Jan 2015 15:55:04 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:55:04 +0100
branch
TOR_BUG_9701
changeset 9
a63d609f5ebe
permissions
-rw-r--r--

Back out 97036ab72558 which inappropriately compared turds to third parties.

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 function test() {
     5   waitForExplicitFinish();
     6   requestLongerTimeout(2);
     7   newWindowWithTabView(onTabViewWindowLoaded);
     8 }
    10 function onTabViewWindowLoaded(win) {
    11   ok(win.TabView.isVisible(), "Tab View is visible");
    13   let contentWindow = win.document.getElementById("tab-view").contentWindow;
    14   let [originalTab] = win.gBrowser.visibleTabs;
    15   let currentGroup = contentWindow.GroupItems.getActiveGroupItem();
    17   // let's create a group small enough to get stacked
    18   let group = new contentWindow.GroupItem([], {
    19     immediately: true,
    20     bounds: {left: 20, top: 300, width: 400, height: 400}
    21   });
    23   let expander = contentWindow.iQ(group.container).find(".stackExpander");
    24   ok("length" in expander && expander.length == 1, "The group has an expander.");
    26   // procreate!
    27   contentWindow.UI.setActive(group);
    28   for (var i=0; i<7; i++) {
    29     win.gBrowser.loadOneTab('http://example.com#' + i, {inBackground: true});
    30   }
    31   let children = group.getChildren();
    33   // Wait until they all update because, once updated, they will notice that they
    34   // don't have favicons and this will change their styling at some unknown time.
    35   afterAllTabItemsUpdated(function() {
    36     ok(!group.shouldStack(group._children.length), "The group should not stack.");
    37     is(expander[0].style.display, "none", "The expander is hidden.");
    39     // now resize the group down.
    40     group.setSize(100, 100, true);
    42     ok(group.shouldStack(group._children.length), "The group should stack.");
    43     isnot(expander[0].style.display, "none", "The expander is now visible!");
    44     let expanderBounds = expander.bounds();
    45     ok(group.getBounds().contains(expanderBounds), "The expander lies in the group.");
    46     let stackCenter = children[0].getBounds().center();
    47     ok(stackCenter.y < expanderBounds.center().y, "The expander is below the stack.");
    49     // STAGE 1:
    50     // Here, we just expand the group, click elsewhere, and make sure
    51     // it collapsed.
    52     let stage1expanded = function() {
    53       group.removeSubscriber("expanded", stage1expanded);
    55       ok(group.expanded, "The group is now expanded.");
    56       is(expander[0].style.display, "none", "The expander is hidden!");
    58       let overlay = contentWindow.document.getElementById("expandedTray");    
    59       ok(overlay, "The expanded tray exists.");
    60       let $overlay = contentWindow.iQ(overlay);
    62       group.addSubscriber("collapsed", stage1collapsed);
    63       // null type means "click", for some reason...
    64       EventUtils.synthesizeMouse(contentWindow.document.body, 10, $overlay.bounds().bottom + 5,
    65                                  {type: null}, contentWindow);
    66     };
    68     let stage1collapsed = function() {
    69       group.removeSubscriber("collapsed", stage1collapsed);
    70       ok(!group.expanded, "The group is no longer expanded.");
    71       isnot(expander[0].style.display, "none", "The expander is visible!");
    72       let expanderBounds = expander.bounds();
    73       ok(group.getBounds().contains(expanderBounds), "The expander still lies in the group.");
    74       let stackCenter = children[0].getBounds().center();
    75       ok(stackCenter.y < expanderBounds.center().y, "The expander is below the stack.");
    77       // now, try opening it up again.
    78       group.addSubscriber("expanded", stage2expanded);
    79       EventUtils.sendMouseEvent({ type: "click" }, expander[0], contentWindow);
    80     };
    82     // STAGE 2:
    83     // Now make sure every child of the group shows up within this "tray", and
    84     // click on one of them and make sure we go into the tab and the tray collapses.
    85     let stage2expanded = function() {
    86       group.removeSubscriber("expanded", stage2expanded);
    88       ok(group.expanded, "The group is now expanded.");
    89       is(expander[0].style.display, "none", "The expander is hidden!");
    91       let overlay = contentWindow.document.getElementById("expandedTray");    
    92       ok(overlay, "The expanded tray exists.");
    93       let $overlay = contentWindow.iQ(overlay);
    94       let overlayBounds = $overlay.bounds();
    96       children.forEach(function(child, i) {
    97         ok(overlayBounds.contains(child.getBounds()), "Child " + i + " is in the overlay");
    98       });
   100       win.addEventListener("tabviewhidden", stage2hidden, false);
   101       // again, null type means "click", for some reason...
   102       EventUtils.synthesizeMouse(children[1].container, 2, 2, {type: null}, contentWindow);
   103     };
   105     let stage2hidden = function() {
   106       win.removeEventListener("tabviewhidden", stage2hidden, false);
   108       is(win.gBrowser.selectedTab, children[1].tab, "We clicked on the second child.");
   110       win.addEventListener("tabviewshown", stage2shown, false);
   111       win.TabView.toggle();
   112     };
   114     let stage2shown = function() {
   115       win.removeEventListener("tabviewshown", stage2shown, false);
   116       ok(!group.expanded, "The group is not expanded.");
   117       isnot(expander[0].style.display, "none", "The expander is visible!");
   118       let expanderBounds = expander.bounds();
   119       ok(group.getBounds().contains(expanderBounds), "The expander still lies in the group.");
   120       let stackCenter = children[0].getBounds().center();
   121       ok(stackCenter.y < expanderBounds.center().y, "The expander is below the stack.");
   123       is(group.getTopChild(), children[1], "The top child in the stack is the second tab item");
   124       let topChildzIndex = children[1].zIndex;
   125       // the second tab item should have the largest z-index.
   126       // only check the first 6 tabs as the stack only contains 6 tab items.
   127       for (let i = 0; i < 6; i++) {
   128         if (i != 1)
   129           ok(children[i].zIndex < topChildzIndex,
   130             "The child[" + i + "] has smaller zIndex than second child");
   131       }
   133       // okay, expand this group one last time
   134       group.addSubscriber("expanded", stage3expanded);
   135       EventUtils.sendMouseEvent({ type: "click" }, expander[0], contentWindow);
   136     }
   138     // STAGE 3:
   139     // Ensure that stack still shows the same top item after a expand and a collapse.
   140     let stage3expanded = function() {
   141       group.removeSubscriber("expanded", stage3expanded);
   143       ok(group.expanded, "The group is now expanded.");
   144       let overlay = contentWindow.document.getElementById("expandedTray");    
   145       let $overlay = contentWindow.iQ(overlay);
   147       group.addSubscriber("collapsed", stage3collapsed);
   148       // null type means "click", for some reason...
   149       EventUtils.synthesizeMouse(contentWindow.document.body, 10, $overlay.bounds().bottom + 5,
   150                                  {type: null}, contentWindow);
   151     };
   153     let stage3collapsed = function() {
   154       group.removeSubscriber("collapsed", stage3collapsed);
   156       ok(!group.expanded, "The group is no longer expanded.");
   157       isnot(expander[0].style.display, "none", "The expander is visible!");
   159       let stackCenter = children[0].getBounds().center();
   160       ok(stackCenter.y < expanderBounds.center().y, "The expander is below the stack.");
   162       is(group.getTopChild(), children[1], 
   163          "The top child in the stack is still the second tab item");
   164       let topChildzIndex = children[1].zIndex;
   165       // the second tab item should have the largest z-index.
   166       // only check the first 6 tabs as the stack only contains 6 tab items.
   167       for (let i = 0; i < 6; i++) {
   168         if (i != 1)
   169           ok(children[i].zIndex < topChildzIndex,
   170             "The child[" + i + "] has smaller zIndex than second dhild after a collapse.");
   171       }
   173       // In preparation for Stage 4, find that original tab and make it the active tab.
   174       let originalTabItem = originalTab._tabViewTabItem;
   175       contentWindow.UI.setActive(originalTabItem);
   177       // now, try opening it up again.
   178       group.addSubscriber("expanded", stage4expanded);
   179       EventUtils.sendMouseEvent({ type: "click" }, expander[0], contentWindow);
   180     };
   182     // STAGE 4:
   183     // Activate another tab not in this group, expand our stacked group, but then
   184     // enter Panorama (i.e., zoom into this other group), and make sure we can go to
   185     // it and that the tray gets collapsed.
   186     let stage4expanded = function() {
   187       group.removeSubscriber("expanded", stage4expanded);
   189       ok(group.expanded, "The group is now expanded.");
   190       is(expander[0].style.display, "none", "The expander is hidden!");
   191       let overlay = contentWindow.document.getElementById("expandedTray");
   192       ok(overlay, "The expanded tray exists.");
   194       let activeTab = contentWindow.UI.getActiveTab();
   195       ok(activeTab, "There is an active tab.");
   196       let originalTabItem = originalTab._tabViewTabItem;
   198       isnot(activeTab, originalTabItem, "But it's not what it was a moment ago.");
   199       let someChildIsActive = group.getChildren().some(function(child)
   200                               child == activeTab);
   201       ok(someChildIsActive, "Now one of the children in the group is active.");
   203       // now activate Panorama...
   204       win.addEventListener("tabviewhidden", stage4hidden, false);
   205       win.TabView.toggle();
   206     };
   208     let stage4hidden = function() {
   209       win.removeEventListener("tabviewhidden", stage4hidden, false);
   211       isnot(win.gBrowser.selectedTab, originalTab, "We did not enter the original tab.");
   213       let someChildIsSelected = group.getChildren().some(function(child)
   214                                   child.tab == win.gBrowser.selectedTab);
   215       ok(someChildIsSelected, "Instead we're in one of the stack's children.");
   217       win.addEventListener("tabviewshown", stage4shown, false);
   218       win.TabView.toggle();
   219     };
   221     let stage4shown = function() {
   222       win.removeEventListener("tabviewshown", stage4shown, false);
   224       let overlay = contentWindow.document.getElementById("expandedTray");
   225       ok(!group.expanded, "The group is no longer expanded.");
   226       isnot(expander[0].style.display, "none", "The expander is visible!");
   228       win.close();
   229       finish();
   230     }
   232     // get the ball rolling
   233     group.addSubscriber("expanded", stage1expanded);
   234     EventUtils.sendMouseEvent({ type: "click" }, expander[0], contentWindow);
   235   }, win);
   236 }

mercurial