1
// -*- test-case-name: nevow.test.test_javascript.JSUnitTests.test_tabbedPane -*-
3
// import Divmod.UnitTest
4
// import Nevow.Test.WidgetUtil
5
// import Nevow.TagLibrary.TabbedPane
7
Nevow.Test.TestTabbedPane.TabbedPaneViewTests = Divmod.UnitTest.TestCase.subclass(
8
'Nevow.Test.TestTabbedPane.TabbedPaneViewTests');
10
* Tests for L{Nevow.TagLibrary.TabbedPane.TabbedPaneView}.
12
Nevow.Test.TestTabbedPane.TabbedPaneViewTests.methods(
14
* L{Nevow.TagLibrary.TabbedPane.TabbedPaneView.tabNameFromTabNode} should
15
* get the right value.
17
function test_tabNameFromTabNode(self) {
18
var view = Nevow.TagLibrary.TabbedPane.TabbedPaneView(null, null);
19
var name = 'test_tabNameFromTabNode';
20
var tabNode = document.createElement('li');
21
tabNode.appendChild(document.createTextNode(name));
23
view.tabNameFromTabNode(tabNode), name);
27
* Make a tab container node containing tabs with the given names.
29
function _makeTabContainerNode(self, tabNames, selected) {
30
var tabContainerNode = document.createElement('ul');
31
var tabNode = document.createElement('li');
32
for(var i = 0; i < tabNames.length; i++) {
33
var tabNode = document.createElement('li');
36
className = 'nevow-tabbedpane-selected-tab';
38
className = 'nevow-tabbedpane-tab';
40
tabNode.setAttribute('class', className);
41
tabNode.appendChild(document.createTextNode(tabNames[i]));
42
tabContainerNode.appendChild(tabNode);
44
return tabContainerNode;
48
* Make a pane container node containing the given number of panes.
50
function _makePaneContainerNode(self, paneCount, selected) {
51
var paneContainerNode = document.createElement('div');
52
for(var i = 0; i < paneCount; i++) {
53
var paneNode = document.createElement('div');
56
className = 'nevow-tabbedpane-selected-pane';
58
className = 'nevow-tabbedpane-pane';
60
paneNode.setAttribute('class', className);
61
paneContainerNode.appendChild(paneNode);
63
return paneContainerNode;
67
* L{Nevow.TagLibrary.TabbedPane.TabbedPaneView.getNamedPaneNode} should
68
* return the right node.
70
function test_getNamedPaneNode(self) {
71
var tabContainerNode = self._makeTabContainerNode(
73
var paneContainerNode = self._makePaneContainerNode(2, 0);
74
var secondPaneNode = paneContainerNode.childNodes[1];
75
var view = Nevow.TagLibrary.TabbedPane.TabbedPaneView(
76
function nodeById(id) {
78
'pane-container': paneContainerNode,
79
'tab-container': tabContainerNode
83
view.getNamedPaneNode('bar'), secondPaneNode);
87
* L{Nevow.TagLibrary.TabbedPane.TabbedPaneView.replaceNamedPaneContent}
88
* should append the given node and remove any existing ones.
90
function test_replaceNamedPaneContent(self) {
91
var tabContainerNode = self._makeTabContainerNode(
93
var paneContainerNode = self._makePaneContainerNode(2, 0);
94
var secondPaneNode = paneContainerNode.childNodes[1];
95
secondPaneNode.appendChild(document.createTextNode('HI'));
96
secondPaneNode.appendChild(document.createElement('div'));
97
var view = Nevow.TagLibrary.TabbedPane.TabbedPaneView(
98
function nodeById(id) {
100
'pane-container': paneContainerNode,
101
'tab-container': tabContainerNode
104
var replacementNode = document.createElement('div');
105
view.replaceNamedPaneContent('bar', replacementNode);
106
self.assertIdentical(secondPaneNode.childNodes.length, 1);
107
self.assertIdentical(
108
secondPaneNode.childNodes[0], replacementNode);
112
* L{Nevow.TagLibrary.TabbedPane.TabbedPaneView.selectNamedTab} should
113
* select the right tab node.
115
function test_selectNamedTab(self) {
116
var tabContainerNode = self._makeTabContainerNode(
117
['first tab node', 'second tab node'], 0);
118
var firstTabNode = tabContainerNode.childNodes[0];
119
var secondTabNode = tabContainerNode.childNodes[1];
120
var paneContainerNode = self._makePaneContainerNode(2, 0);
121
var firstPaneNode = paneContainerNode.childNodes[0];
122
var secondPaneNode = paneContainerNode.childNodes[1];
124
var view = Nevow.TagLibrary.TabbedPane.TabbedPaneView(
125
function nodeById(id) {
127
'pane-container': paneContainerNode,
128
'tab-container': tabContainerNode
130
}, 'first tab node');
131
view.selectNamedTab('second tab node');
132
self.assertIdentical(
133
firstTabNode.getAttribute('class'), 'nevow-tabbedpane-tab');
134
self.assertIdentical(
135
firstPaneNode.getAttribute('class'), 'nevow-tabbedpane-pane');
136
self.assertIdentical(
137
secondTabNode.getAttribute('class'),
138
'nevow-tabbedpane-selected-tab');
139
self.assertIdentical(
140
secondPaneNode.getAttribute('class'),
141
'nevow-tabbedpane-selected-pane');
145
Nevow.Test.TestTabbedPane.StubTabbedPaneView = Divmod.Class.subclass(
146
'Nevow.Test.TestTabbedPane.StubTabbedPaneView');
148
* Stub L{Nevow.TagLibrary.TabbedPane.TabbedPaneView}.
150
* @ivar tabName: Value to return from L{tabNameFromTabNode}.
151
* @type tabName: C{String}
153
* @ivar selectedTabName: The name of the currently selected tab.
154
* @type selectedTabName: C{String}
156
* @ivar tabNodes: Sequence of nodes passed to L{tabNameFromTabNode}.
157
* @type tabNodes: C{Array}
159
Nevow.Test.TestTabbedPane.StubTabbedPaneView.methods(
160
function __init__(self, tabName, selectedTabName) {
161
self.tabName = tabName;
162
self.selectedTabName = selectedTabName;
167
* Store C{tabNode} and return L{tabName}.
169
function tabNameFromTabNode(self, tabNode) {
170
self.tabNodes.push(tabNode);
175
* Set L{selectedTabName} to C{tabName}.
177
function selectNamedTab(self, tabName) {
178
self.selectedTabName = tabName;
182
Nevow.Test.TestTabbedPane.TabbedPaneTests = Divmod.UnitTest.TestCase.subclass(
183
'Nevow.Test.TestTabbedPane.TabbedPaneTests');
185
* Tests for L{Nevow.TagLibrary.TabbedPane.TabbedPane}.
187
Nevow.Test.TestTabbedPane.TabbedPaneTests.methods(
189
* L{Nevow.TagLibrary.TabbedPane.TabbedPane.dom_tabClicked} should call
192
function test_dom_tabClicked(self) {
193
var controller = Nevow.TagLibrary.TabbedPane.TabbedPane(
194
Nevow.Test.WidgetUtil.makeWidgetNode());
196
controller.tabClicked = function tabClicked(node) {
200
self.assertIdentical(controller.dom_tabClicked(tabNode), false);
201
self.assertIdentical(theTabNode, tabNode);
205
* L{Nevow.TagLibrary.TabbedPane.TabbedPane.tabClicked} should call the
206
* appropriate view methods.
208
function test_tabClicked(self) {
209
var selectedTabName = 'some boring thing';
210
var controller = Nevow.TagLibrary.TabbedPane.TabbedPane(
211
Nevow.Test.WidgetUtil.makeWidgetNode(), selectedTabName);
214
controller.namedTabSelected = function(selectedTab) {
215
theSelectedTab = selectedTab;
218
var tabName = 'test_tabClicked';
219
var view = Nevow.Test.TestTabbedPane.StubTabbedPaneView(
220
tabName, selectedTabName);
221
controller.view = view;
222
controller.tabClicked(tabNode);
223
self.assertIdentical(view.tabNodes.length, 1);
224
self.assertIdentical(view.tabNodes[0], tabNode);
225
self.assertIdentical(view.selectedTabName, tabName);
226
self.assertIdentical(theSelectedTab, tabName);
230
* L{Nevow.TagLibrary.TabbedPane.TabbedPane.dom_tabClicked} should defer
231
* any tab change until C{loaded} has been called.
233
function test_dom_tabClickedLoaded(self) {
234
var selectedTabName = 'some boring thing';
236
var tabName = 'test_dom_tabClickedLoaded';
237
var controller = Nevow.TagLibrary.TabbedPane.TabbedPane(
238
Nevow.Test.WidgetUtil.makeWidgetNode(), selectedTabName);
239
var view = Nevow.Test.TestTabbedPane.StubTabbedPaneView(
240
tabName, selectedTabName);
241
controller.view = view;
242
self.assertIdentical(controller.dom_tabClicked(tabNode), false);
243
self.assertIdentical(view.tabNodes.length, 1);
244
self.assertIdentical(view.tabNodes[0], tabNode);
245
self.assertIdentical(view.selectedTabName, selectedTabName);
247
self.assertIdentical(view.selectedTabName, tabName);
251
Nevow.Test.TestTabbedPane.TabbedPaneFetcher = Nevow.Athena.Widget.subclass(
252
'Nevow.Test.TestTabbedPane.TabbedPaneFetcher');
254
* Trivial L{Nevow.Athena.Widget} subclass which fetches a tabbed pane widget
257
Nevow.Test.TestTabbedPane.TabbedPaneFetcher.methods(
259
* Fetch a tabbed pane widget and add it as a child.
261
function dom_getTabbedPane(self) {
262
var result = self.callRemote('getTabbedPane');
264
function(widgetInfo) {
265
return self.addChildWidgetFromWidgetInfo(widgetInfo);
269
self.node.appendChild(widget.node);