|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 "use strict"; |
|
6 const kWidgetId = 'test-981418-widget-onbeforecreated'; |
|
7 |
|
8 // Should be able to add broken view widget |
|
9 add_task(function testAddOnBeforeCreatedWidget() { |
|
10 let viewShownDeferred = Promise.defer(); |
|
11 let onBeforeCreatedCalled = false; |
|
12 let widgetSpec = { |
|
13 id: kWidgetId, |
|
14 type: 'view', |
|
15 viewId: kWidgetId + 'idontexistyet', |
|
16 onBeforeCreated: function(doc) { |
|
17 let view = doc.createElement("panelview"); |
|
18 view.id = kWidgetId + 'idontexistyet'; |
|
19 let label = doc.createElement("label"); |
|
20 label.setAttribute("value", "Hello world"); |
|
21 label.className = 'panel-subview-header'; |
|
22 view.appendChild(label); |
|
23 document.getElementById("PanelUI-multiView").appendChild(view); |
|
24 onBeforeCreatedCalled = true; |
|
25 }, |
|
26 onViewShowing: function() { |
|
27 viewShownDeferred.resolve(); |
|
28 } |
|
29 }; |
|
30 |
|
31 let noError = true; |
|
32 try { |
|
33 CustomizableUI.createWidget(widgetSpec); |
|
34 CustomizableUI.addWidgetToArea(kWidgetId, CustomizableUI.AREA_NAVBAR); |
|
35 } catch (ex) { |
|
36 Cu.reportError(ex); |
|
37 noError = false; |
|
38 } |
|
39 ok(noError, "Should not throw an exception trying to add the widget."); |
|
40 ok(onBeforeCreatedCalled, "onBeforeCreated should have been called"); |
|
41 |
|
42 let widgetNode = document.getElementById(kWidgetId); |
|
43 ok(widgetNode, "Widget should exist"); |
|
44 if (widgetNode) { |
|
45 try { |
|
46 widgetNode.click(); |
|
47 |
|
48 let shownTimeout = setTimeout(() => viewShownDeferred.reject("Panel not shown within 20s"), 20000); |
|
49 yield viewShownDeferred.promise; |
|
50 clearTimeout(shownTimeout); |
|
51 ok(true, "Found view shown"); |
|
52 |
|
53 let tempPanel = document.getElementById("customizationui-widget-panel"); |
|
54 let panelHiddenPromise = promisePanelElementHidden(window, tempPanel); |
|
55 tempPanel.hidePopup(); |
|
56 yield panelHiddenPromise; |
|
57 |
|
58 CustomizableUI.addWidgetToArea(kWidgetId, CustomizableUI.AREA_PANEL); |
|
59 yield PanelUI.show(); |
|
60 |
|
61 viewShownDeferred = Promise.defer(); |
|
62 widgetNode.click(); |
|
63 |
|
64 shownTimeout = setTimeout(() => viewShownDeferred.reject("Panel not shown within 20s"), 20000); |
|
65 yield viewShownDeferred.promise; |
|
66 clearTimeout(shownTimeout); |
|
67 ok(true, "Found view shown"); |
|
68 |
|
69 let panelHidden = promisePanelHidden(window); |
|
70 PanelUI.hide(); |
|
71 yield panelHidden; |
|
72 } catch (ex) { |
|
73 ok(false, "Unexpected exception (like a timeout for one of the yields) " + |
|
74 "when testing view widget."); |
|
75 } |
|
76 } |
|
77 |
|
78 noError = true; |
|
79 try { |
|
80 CustomizableUI.destroyWidget(kWidgetId); |
|
81 } catch (ex) { |
|
82 Cu.reportError(ex); |
|
83 noError = false; |
|
84 } |
|
85 ok(noError, "Should not throw an exception trying to remove the broken view widget."); |
|
86 }); |
|
87 |
|
88 add_task(function asyncCleanup() { |
|
89 yield resetCustomization(); |
|
90 }); |