]>
Commit | Line | Data |
---|---|---|
947f0963 TL |
1 | topSuite("Ext.layout.container.boxOverflow.Menu", |
2 | ['Ext.toolbar.Toolbar', 'Ext.Button', 'Ext.form.field.Text'], | |
3 | function() { | |
4 | var toolbar; | |
5 | ||
6 | function createToolbar(cfg) { | |
7 | toolbar = new Ext.toolbar.Toolbar(Ext.apply({ | |
8 | enableOverflow: true, | |
9 | width: 1, | |
10 | renderTo: Ext.getBody(), | |
11 | items: [{ | |
12 | xtype: 'checkboxfield', | |
13 | name: 'check1', | |
14 | itemId: 'check1' | |
15 | }] | |
16 | }, cfg || {})); | |
17 | } | |
18 | ||
19 | afterEach(function() { | |
20 | Ext.destroy(toolbar); | |
21 | toolbar = null; | |
22 | }); | |
23 | ||
24 | it("should be able to show a button menu after being overflowed", function() { | |
25 | createToolbar({ | |
26 | items: [{ | |
27 | xtype: 'button', | |
28 | text: 'Foo', | |
29 | menu: { | |
30 | items: { | |
31 | text: 'Some Menu' | |
32 | } | |
33 | } | |
34 | }] | |
35 | }); | |
36 | ||
37 | var menu = toolbar.layout.overflowHandler.menu, | |
38 | button = toolbar.items.first(); | |
39 | ||
40 | menu.show(); | |
41 | menu.hide(); | |
42 | ||
43 | toolbar.setWidth(300); | |
44 | ||
45 | button.showMenu(); | |
46 | expect(button.getMenu().isVisible(true)).toBe(true); | |
47 | }); | |
48 | ||
49 | describe('addComponentToMenu', function() { | |
50 | it('should create an overflowClone bound to each toolbar item', function() { | |
51 | createToolbar(); | |
52 | ||
53 | toolbar.layout.overflowHandler.menu.show(); | |
54 | ||
55 | expect(toolbar.items.getAt(0).overflowClone).toBeDefined(); | |
56 | }); | |
57 | ||
58 | it('should create an overflowClone bound to each toolbar item that is a reference to each menu item', function() { | |
59 | var menu, item; | |
60 | ||
61 | createToolbar(); | |
62 | ||
63 | menu = toolbar.layout.overflowHandler.menu; | |
64 | menu.show(); | |
65 | ||
66 | item = menu.items.getAt(0); | |
67 | ||
68 | expect(toolbar.items.getAt(0).overflowClone).toBe(item); | |
69 | expect(item.name).toBe('check1'); | |
70 | }); | |
71 | }); | |
72 | ||
73 | describe('createMenuConfig', function() { | |
74 | it('should have same state as its complement toolbar item', function() { | |
75 | var toolbarItems, overflowHandler, menuItems; | |
76 | ||
77 | createToolbar({ | |
78 | items: [{ | |
79 | xtype: 'checkboxfield', | |
80 | name: 'check1', | |
81 | itemId: 'check1' | |
82 | }, { | |
83 | xtype: 'checkboxfield', | |
84 | name: 'check2', | |
85 | itemId: 'check2', | |
86 | checked: true | |
87 | }] | |
88 | }); | |
89 | ||
90 | toolbarItems = toolbar.items; | |
91 | toolbarItems.getAt(0).setValue(true); | |
92 | toolbarItems.getAt(1).setValue(false); | |
93 | ||
94 | overflowHandler = toolbar.layout.overflowHandler; | |
95 | menuItems = overflowHandler.menu.items; | |
96 | ||
97 | overflowHandler.menu.show(); | |
98 | ||
99 | expect(menuItems.getAt(0).checked).toBe(true); | |
100 | expect(menuItems.getAt(1).checked).toBe(false); | |
101 | }); | |
102 | ||
103 | it('should be able to enable/disable a component', function() { | |
104 | var toolbarItems, overflowHandler, menuItems; | |
105 | ||
106 | createToolbar({ | |
107 | items: [{ | |
108 | xtype: 'checkboxfield', | |
109 | name: 'check1', | |
110 | itemId: 'check1' | |
111 | }, { | |
112 | xtype: 'checkboxfield', | |
113 | name: 'check2', | |
114 | itemId: 'check2', | |
115 | checked: true, | |
116 | disabled: true | |
117 | }] | |
118 | }); | |
119 | ||
120 | toolbarItems = toolbar.items; | |
121 | ||
122 | overflowHandler = toolbar.layout.overflowHandler; | |
123 | menuItems = overflowHandler.menu.items; | |
124 | ||
125 | overflowHandler.menu.show(); | |
126 | ||
127 | toolbarItems.getAt(0).setDisabled(true); | |
128 | toolbarItems.getAt(1).setDisabled(false); | |
129 | ||
130 | expect(menuItems.getAt(0).disabled).toBe(true); | |
131 | expect(menuItems.getAt(1).disabled).toBe(false); | |
132 | }); | |
133 | ||
134 | it('should not overwrite listeners config defined on the original component', function() { | |
135 | // This test demonstrates that the menu item created from the original component's config | |
136 | // will receive any listeners defined in the item's listeners config. | |
137 | var wasClicked = false, | |
138 | menu; | |
139 | ||
140 | createToolbar({ | |
141 | items: [{ | |
142 | // Button by default. | |
143 | xtype: 'button', | |
144 | listeners: { | |
145 | click: function() { | |
146 | wasClicked = true; | |
147 | } | |
148 | } | |
149 | }] | |
150 | }); | |
151 | ||
152 | menu = toolbar.layout.overflowHandler.menu; | |
153 | menu.show(); | |
154 | jasmine.fireMouseEvent(menu.items.getAt(0).el, 'click'); | |
155 | ||
156 | expect(wasClicked).toBe(true); | |
157 | }); | |
158 | ||
159 | it('should apply overflowText if defined', function() { | |
160 | var overflowHandler, menuItems; | |
161 | ||
162 | createToolbar({ | |
163 | items: [{ | |
164 | text: 'Item One' | |
165 | }, { | |
166 | text: 'Item Two', | |
167 | overflowText: 'Two' | |
168 | }, { | |
169 | overflowText: 'Three' | |
170 | }] | |
171 | }); | |
172 | ||
173 | overflowHandler = toolbar.layout.overflowHandler; | |
174 | menuItems = overflowHandler.menu.items; | |
175 | ||
176 | overflowHandler.menu.show(); | |
177 | ||
178 | expect(menuItems.getAt(0).text).toBe('Item One'); | |
179 | expect(menuItems.getAt(1).text).toBe('Two'); | |
180 | expect(menuItems.getAt(2).text).toBe('Three'); | |
181 | }); | |
182 | }); | |
183 | ||
184 | describe('form fields in toolbar', function() { | |
185 | it('should sync the value both ways on change', function() { | |
186 | var overflowHandler, master, clone; | |
187 | ||
188 | createToolbar({ | |
189 | items: [{ | |
190 | xtype: 'textfield', | |
191 | name: 'text1', | |
192 | itemId: 'text1' | |
193 | }] | |
194 | }); | |
195 | overflowHandler = toolbar.layout.overflowHandler; | |
196 | master = toolbar.down('#text1'); | |
197 | ||
198 | overflowHandler.menu.show(); | |
199 | clone = overflowHandler.menu.down('[name=text1]'); | |
200 | ||
201 | // Check syncing both ways | |
202 | master.setValue('foo'); | |
203 | expect(clone.getValue()).toBe('foo'); | |
204 | clone.setValue('bar'); | |
205 | expect(master.getValue()).toBe('bar'); | |
206 | }); | |
207 | }); | |
208 | }); |