1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/components/customizableui/test/browser_981418-widget-onbeforecreated-handler.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,90 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +"use strict"; 1.9 +const kWidgetId = 'test-981418-widget-onbeforecreated'; 1.10 + 1.11 +// Should be able to add broken view widget 1.12 +add_task(function testAddOnBeforeCreatedWidget() { 1.13 + let viewShownDeferred = Promise.defer(); 1.14 + let onBeforeCreatedCalled = false; 1.15 + let widgetSpec = { 1.16 + id: kWidgetId, 1.17 + type: 'view', 1.18 + viewId: kWidgetId + 'idontexistyet', 1.19 + onBeforeCreated: function(doc) { 1.20 + let view = doc.createElement("panelview"); 1.21 + view.id = kWidgetId + 'idontexistyet'; 1.22 + let label = doc.createElement("label"); 1.23 + label.setAttribute("value", "Hello world"); 1.24 + label.className = 'panel-subview-header'; 1.25 + view.appendChild(label); 1.26 + document.getElementById("PanelUI-multiView").appendChild(view); 1.27 + onBeforeCreatedCalled = true; 1.28 + }, 1.29 + onViewShowing: function() { 1.30 + viewShownDeferred.resolve(); 1.31 + } 1.32 + }; 1.33 + 1.34 + let noError = true; 1.35 + try { 1.36 + CustomizableUI.createWidget(widgetSpec); 1.37 + CustomizableUI.addWidgetToArea(kWidgetId, CustomizableUI.AREA_NAVBAR); 1.38 + } catch (ex) { 1.39 + Cu.reportError(ex); 1.40 + noError = false; 1.41 + } 1.42 + ok(noError, "Should not throw an exception trying to add the widget."); 1.43 + ok(onBeforeCreatedCalled, "onBeforeCreated should have been called"); 1.44 + 1.45 + let widgetNode = document.getElementById(kWidgetId); 1.46 + ok(widgetNode, "Widget should exist"); 1.47 + if (widgetNode) { 1.48 + try { 1.49 + widgetNode.click(); 1.50 + 1.51 + let shownTimeout = setTimeout(() => viewShownDeferred.reject("Panel not shown within 20s"), 20000); 1.52 + yield viewShownDeferred.promise; 1.53 + clearTimeout(shownTimeout); 1.54 + ok(true, "Found view shown"); 1.55 + 1.56 + let tempPanel = document.getElementById("customizationui-widget-panel"); 1.57 + let panelHiddenPromise = promisePanelElementHidden(window, tempPanel); 1.58 + tempPanel.hidePopup(); 1.59 + yield panelHiddenPromise; 1.60 + 1.61 + CustomizableUI.addWidgetToArea(kWidgetId, CustomizableUI.AREA_PANEL); 1.62 + yield PanelUI.show(); 1.63 + 1.64 + viewShownDeferred = Promise.defer(); 1.65 + widgetNode.click(); 1.66 + 1.67 + shownTimeout = setTimeout(() => viewShownDeferred.reject("Panel not shown within 20s"), 20000); 1.68 + yield viewShownDeferred.promise; 1.69 + clearTimeout(shownTimeout); 1.70 + ok(true, "Found view shown"); 1.71 + 1.72 + let panelHidden = promisePanelHidden(window); 1.73 + PanelUI.hide(); 1.74 + yield panelHidden; 1.75 + } catch (ex) { 1.76 + ok(false, "Unexpected exception (like a timeout for one of the yields) " + 1.77 + "when testing view widget."); 1.78 + } 1.79 + } 1.80 + 1.81 + noError = true; 1.82 + try { 1.83 + CustomizableUI.destroyWidget(kWidgetId); 1.84 + } catch (ex) { 1.85 + Cu.reportError(ex); 1.86 + noError = false; 1.87 + } 1.88 + ok(noError, "Should not throw an exception trying to remove the broken view widget."); 1.89 +}); 1.90 + 1.91 +add_task(function asyncCleanup() { 1.92 + yield resetCustomization(); 1.93 +});