mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Fixed Bug 584627 - Tests for group
This commit is contained in:
parent
3381f8595e
commit
ea3e0b1135
@ -521,8 +521,8 @@ window.GroupItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||
// Closes the groupItem, removing (but not closing) all of its children.
|
||||
close: function() {
|
||||
this.removeAll();
|
||||
this._sendToSubscribers("close");
|
||||
GroupItems.unregister(this);
|
||||
this._sendToSubscribers("close");
|
||||
this.removeTrenches();
|
||||
iQ(this.container).fadeOut(function() {
|
||||
iQ(this).remove();
|
||||
@ -638,7 +638,7 @@ window.GroupItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||
item.droppable(false);
|
||||
item.groupItemData = {};
|
||||
|
||||
item.addSubscriber(this, "close", function() {
|
||||
item.addSubscriber(this, "beforeclose", function() {
|
||||
self.remove($el);
|
||||
});
|
||||
|
||||
@ -700,7 +700,7 @@ window.GroupItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||
item.setRotation(0);
|
||||
|
||||
item.droppable(true);
|
||||
item.removeSubscriber(this, "close");
|
||||
item.removeSubscriber(this, "beforeclose");
|
||||
|
||||
if (typeof(item.setResizable) == 'function')
|
||||
item.setResizable(true);
|
||||
|
@ -92,7 +92,7 @@ window.TabItem = function(tab) {
|
||||
+ parseInt($div.css('padding-bottom'));
|
||||
|
||||
this.bounds = $div.bounds();
|
||||
|
||||
|
||||
// ___ superclass setup
|
||||
this._init($div[0]);
|
||||
|
||||
@ -178,7 +178,7 @@ window.TabItem = function(tab) {
|
||||
return;
|
||||
|
||||
if (iQ(e.target).hasClass("close"))
|
||||
gBrowser.removeTab(tab);
|
||||
self.close();
|
||||
else {
|
||||
if (!Items.item(this).isDragging)
|
||||
self.zoomIn();
|
||||
@ -201,7 +201,7 @@ window.TabItem = function(tab) {
|
||||
this._updateDebugBounds();
|
||||
|
||||
TabItems.register(this);
|
||||
this.addSubscriber(this, "close", function(who, info) {
|
||||
this.addSubscriber(this, "beforeclose", function(who, info) {
|
||||
TabItems.unregister(self);
|
||||
self.removeTrenches();
|
||||
});
|
||||
@ -462,6 +462,7 @@ window.TabItem.prototype = Utils.extend(new Item(), new Subscribable(), {
|
||||
// closes the item.
|
||||
close: function() {
|
||||
gBrowser.removeTab(this.tab);
|
||||
this._sendToSubscribers("tabRemoved");
|
||||
|
||||
// No need to explicitly delete the tab data, becasue sessionstore data
|
||||
// associated with the tab will automatically go away
|
||||
@ -846,8 +847,9 @@ window.TabItems = {
|
||||
Utils.assertThrow(tab, "tab");
|
||||
Utils.assertThrow(tab.tabItem, "should already be linked");
|
||||
|
||||
tab.tabItem._sendToSubscribers("close");
|
||||
tab.tabItem._sendToSubscribers("beforeclose");
|
||||
iQ(tab.tabItem.container).remove();
|
||||
tab.tabItem._sendToSubscribers("close");
|
||||
|
||||
tab.tabItem = null;
|
||||
|
||||
|
@ -168,6 +168,7 @@ _BROWSER_FILES = \
|
||||
browser_tabfocus.js \
|
||||
browser_tabs_owner.js \
|
||||
tabview/browser_tabview_dragdrop.js \
|
||||
tabview/browser_tabview_group.js \
|
||||
tabview/browser_tabview_launch.js \
|
||||
tabview/browser_visibleTabs.js \
|
||||
discovery.html \
|
||||
|
@ -46,7 +46,7 @@ function onTabViewWindowLoaded() {
|
||||
window.removeEventListener("tabviewshown", onTabViewWindowLoaded, false);
|
||||
|
||||
ok(TabView.isVisible(), "Tab View is visible");
|
||||
|
||||
|
||||
let contentWindow = document.getElementById("tab-view").contentWindow;
|
||||
|
||||
// create group one and two
|
||||
@ -92,32 +92,32 @@ function addTest(contentWindow, groupOneId, groupTwoId) {
|
||||
let groupTwo = contentWindow.GroupItems.groupItem(groupTwoId);
|
||||
let groupOneTabItemCount = groupOne.getChildren().length;
|
||||
let groupTwoTabItemCount = groupTwo.getChildren().length;
|
||||
is(groupOneTabItemCount, 1, "GroupItem one has a tab");
|
||||
is(groupTwoTabItemCount, 1, "GroupItem two has two tabs");
|
||||
|
||||
is(groupOneTabItemCount, 1, "GroupItem one has a tab");
|
||||
is(groupTwoTabItemCount, 1, "GroupItem two has two tabs");
|
||||
|
||||
let srcElement = groupOne.getChild(0).container;
|
||||
ok(srcElement, "The source element exists");
|
||||
|
||||
|
||||
// calculate the offsets
|
||||
let groupTwoRect = groupTwo.container.getBoundingClientRect();
|
||||
let srcElementRect = srcElement.getBoundingClientRect();
|
||||
let offsetX =
|
||||
let offsetX =
|
||||
Math.round(groupTwoRect.left + groupTwoRect.width/5) - srcElementRect.left;
|
||||
let offsetY =
|
||||
let offsetY =
|
||||
Math.round(groupTwoRect.top + groupTwoRect.height/5) - srcElementRect.top;
|
||||
|
||||
simulateDragDrop(srcElement, offsetX, offsetY, contentWindow);
|
||||
|
||||
is(groupOne.getChildren().length, --groupOneTabItemCount,
|
||||
|
||||
is(groupOne.getChildren().length, --groupOneTabItemCount,
|
||||
"The number of children in group one is decreased by 1");
|
||||
is(groupTwo.getChildren().length, ++groupTwoTabItemCount,
|
||||
is(groupTwo.getChildren().length, ++groupTwoTabItemCount,
|
||||
"The number of children in group two is increased by 1");
|
||||
|
||||
|
||||
let onTabViewHidden = function() {
|
||||
window.removeEventListener("tabviewhidden", onTabViewHidden, false);
|
||||
// ToDo: somehow the close all would break tab view being hideen
|
||||
// ToDo: somehow the close all would break tab view being hideen
|
||||
// so need to find a way to fix it
|
||||
setTimeout(function() {
|
||||
setTimeout(function() {
|
||||
groupTwo.closeAll();
|
||||
finish();
|
||||
}, 100);
|
||||
@ -134,21 +134,21 @@ function simulateDragDrop(srcElement, offsetX, offsetY, contentWindow) {
|
||||
srcElement, 1, 1, { type: "mousedown" }, contentWindow);
|
||||
event = contentWindow.document.createEvent("DragEvents");
|
||||
event.initDragEvent(
|
||||
"dragenter", true, true, contentWindow, 0, 0, 0, 0, 0,
|
||||
"dragenter", true, true, contentWindow, 0, 0, 0, 0, 0,
|
||||
false, false, false, false, 1, null, dataTransfer);
|
||||
srcElement.dispatchEvent(event);
|
||||
|
||||
|
||||
// drag over
|
||||
for (let i = 4; i >= 0; i--)
|
||||
EventUtils.synthesizeMouse(
|
||||
srcElement, Math.round(offsetX/5), Math.round(offsetY/4),
|
||||
srcElement, Math.round(offsetX/5), Math.round(offsetY/4),
|
||||
{ type: "mousemove" }, contentWindow);
|
||||
event = contentWindow.document.createEvent("DragEvents");
|
||||
event.initDragEvent(
|
||||
"dragover", true, true, contentWindow, 0, 0, 0, 0, 0,
|
||||
"dragover", true, true, contentWindow, 0, 0, 0, 0, 0,
|
||||
false, false, false, false, 0, null, dataTransfer);
|
||||
srcElement.dispatchEvent(event);
|
||||
|
||||
|
||||
// drop
|
||||
EventUtils.synthesizeMouse(srcElement, 0, 0, { type: "mouseup" }, contentWindow);
|
||||
event = contentWindow.document.createEvent("DragEvents");
|
||||
@ -157,5 +157,3 @@ function simulateDragDrop(srcElement, offsetX, offsetY, contentWindow) {
|
||||
false, false, false, false, 0, null, dataTransfer);
|
||||
srcElement.dispatchEvent(event);
|
||||
}
|
||||
|
||||
|
||||
|
140
browser/base/content/test/tabview/browser_tabview_group.js
Normal file
140
browser/base/content/test/tabview/browser_tabview_group.js
Normal file
@ -0,0 +1,140 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is tabview drag and drop test.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Raymond Lee <raymond@appcoast.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
function test() {
|
||||
waitForExplicitFinish();
|
||||
|
||||
window.addEventListener("tabviewshown", onTabViewWindowLoaded, false);
|
||||
TabView.toggle();
|
||||
}
|
||||
|
||||
function onTabViewWindowLoaded() {
|
||||
window.removeEventListener("tabviewshown", onTabViewWindowLoaded, false);
|
||||
ok(TabView.isVisible(), "Tab View is visible");
|
||||
|
||||
let contentWindow = document.getElementById("tab-view").contentWindow;
|
||||
testEmptyGroupItem(contentWindow);
|
||||
}
|
||||
|
||||
function testEmptyGroupItem(contentWindow) {
|
||||
let groupItemCount = contentWindow.GroupItems.groupItems.length;
|
||||
|
||||
// create empty group item
|
||||
let emptyGroupItem = createEmptyGroupItem(contentWindow, 100);
|
||||
ok(emptyGroupItem.isEmpty(), "This group is empty");
|
||||
|
||||
is(contentWindow.GroupItems.groupItems.length, ++groupItemCount,
|
||||
"The number of groups is increased by 1");
|
||||
|
||||
emptyGroupItem.addSubscriber(emptyGroupItem, "close", function() {
|
||||
emptyGroupItem.removeSubscriber(emptyGroupItem, "close");
|
||||
|
||||
// check the number of groups.
|
||||
is(contentWindow.GroupItems.groupItems.length, --groupItemCount,
|
||||
"The number of groups is decreased by 1");
|
||||
|
||||
testGroupItemWithTabItem(contentWindow);
|
||||
});
|
||||
|
||||
let closeButton = emptyGroupItem.container.getElementsByClassName("close");
|
||||
ok(closeButton[0], "Group close button exists");
|
||||
|
||||
// click the close button
|
||||
EventUtils.synthesizeMouse(closeButton[0], 1, 1, {}, contentWindow);
|
||||
}
|
||||
|
||||
function testGroupItemWithTabItem(contentWindow) {
|
||||
let groupItem = createEmptyGroupItem(contentWindow, 200);
|
||||
let tabItemCount = 0;
|
||||
|
||||
groupItem.addSubscriber(groupItem, "tabAdded", function() {
|
||||
groupItem.removeSubscriber(groupItem, "tabAdded");
|
||||
TabView.toggle();
|
||||
});
|
||||
|
||||
let onTabViewHidden = function() {
|
||||
window.removeEventListener("tabviewhidden", onTabViewHidden, false);
|
||||
|
||||
is(groupItem.getChildren().length, ++tabItemCount,
|
||||
"The number of children in new tab group is increased by 1");
|
||||
|
||||
let tabItem = groupItem.getChild(groupItem.getChildren().length - 1);
|
||||
ok(tabItem, "Tab item exists");
|
||||
|
||||
let tabRemoved = false;
|
||||
tabItem.addSubscriber(tabItem, "close", function() {
|
||||
tabItem.removeSubscriber(tabItem, "close");
|
||||
|
||||
ok(tabRemoved, "Tab is removed");
|
||||
// tabItem would get destroyed after the close event is sent so we have a 0 delay here.
|
||||
is(groupItem.getChildren().length, --tabItemCount,
|
||||
"The number of children in new tab group is decreased by 1");
|
||||
finish();
|
||||
});
|
||||
tabItem.addSubscriber(tabItem, "tabRemoved", function() {
|
||||
tabItem.removeSubscriber(tabItem, "tabRemoved");
|
||||
tabRemoved = true;
|
||||
});
|
||||
|
||||
// remove the tab item. The code detects mousedown and mouseup so we stimulate here
|
||||
let closeButton = tabItem.container.getElementsByClassName("close");
|
||||
ok(closeButton, "Tab item close button exists");
|
||||
|
||||
EventUtils.sendMouseEvent({ type: "mousedown" }, closeButton[0], contentWindow);
|
||||
EventUtils.sendMouseEvent({ type: "mouseup" }, closeButton[0], contentWindow);
|
||||
};
|
||||
|
||||
window.addEventListener("tabviewhidden", onTabViewHidden, false);
|
||||
// click on the + button
|
||||
let newTabButton = groupItem.container.getElementsByClassName("newTabButton");
|
||||
ok(newTabButton[0], "New tab button exists");
|
||||
|
||||
EventUtils.synthesizeMouse(newTabButton[0], 1, 1, {}, contentWindow);
|
||||
}
|
||||
|
||||
function createEmptyGroupItem(contentWindow, padding) {
|
||||
let pageBounds = contentWindow.Items.getPageBounds();
|
||||
pageBounds.inset(padding, padding);
|
||||
|
||||
let box = new contentWindow.Rect(pageBounds);
|
||||
box.width = 300;
|
||||
box.height = 300;
|
||||
|
||||
let emptyGroupItem = new contentWindow.GroupItem([], { bounds: box });
|
||||
|
||||
return emptyGroupItem;
|
||||
}
|
@ -11,7 +11,7 @@
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is tabview drag and drop test.
|
||||
* The Original Code is tabview launch test.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Mozilla Foundation.
|
||||
|
Loading…
Reference in New Issue
Block a user