Committed by
Gerrit Code Review
GUI -- Button and Toolbar Services with unit tests - finished implementing butto…
…n widget, started modifying toolbar to use ButtonService Change-Id: I96078516d396951175fb8d9e69dd7796da9f114e
Showing
4 changed files
with
376 additions
and
28 deletions
... | @@ -33,13 +33,12 @@ | ... | @@ -33,13 +33,12 @@ |
33 | } | 33 | } |
34 | 34 | ||
35 | function button(div, id, gid, cb, tooltip) { | 35 | function button(div, id, gid, cb, tooltip) { |
36 | - if (!div) { | 36 | + if (!div || div.empty()) { |
37 | $log.warn('Button cannot append to div'); | 37 | $log.warn('Button cannot append to div'); |
38 | return null; | 38 | return null; |
39 | } | 39 | } |
40 | 40 | ||
41 | var btnDiv = createDiv(div, 'btn', id), | 41 | var btnDiv = createDiv(div, 'btn', id), |
42 | - svg = btnDiv.append('svg'), | ||
43 | cbFnc = fs.isF(cb) || noop; | 42 | cbFnc = fs.isF(cb) || noop; |
44 | 43 | ||
45 | is.loadIcon(btnDiv, gid, btnSize); | 44 | is.loadIcon(btnDiv, gid, btnSize); |
... | @@ -53,36 +52,81 @@ | ... | @@ -53,36 +52,81 @@ |
53 | } | 52 | } |
54 | } | 53 | } |
55 | 54 | ||
56 | - function toggle(div, id, gid, cb, tooltip) { | 55 | + function toggle(div, id, gid, initState, cb, tooltip) { |
57 | - if (!div) { | 56 | + if (!div || div.empty()) { |
58 | $log.warn('Toggle cannot append to div'); | 57 | $log.warn('Toggle cannot append to div'); |
59 | return null; | 58 | return null; |
60 | } | 59 | } |
61 | 60 | ||
62 | - var sel = false, | 61 | + var sel = !!initState, |
63 | togDiv = createDiv(div, 'tog', id), | 62 | togDiv = createDiv(div, 'tog', id), |
64 | - svg = togDiv.append('svg'), | ||
65 | cbFnc = fs.isF(cb) || noop; | 63 | cbFnc = fs.isF(cb) || noop; |
66 | 64 | ||
67 | is.loadIcon(togDiv, gid, btnSize); | 65 | is.loadIcon(togDiv, gid, btnSize); |
68 | 66 | ||
67 | + function _toggle(b) { | ||
68 | + if (b === undefined) { | ||
69 | + sel = !sel; | ||
70 | + } else { | ||
71 | + sel = !!b; | ||
72 | + } | ||
73 | + cbFnc(sel); | ||
74 | + } | ||
75 | + | ||
76 | + togDiv.on('click', _toggle); | ||
77 | + | ||
69 | return { | 78 | return { |
70 | id: id, | 79 | id: id, |
71 | el: togDiv, | 80 | el: togDiv, |
72 | selected: function () { return sel; }, | 81 | selected: function () { return sel; }, |
73 | - toggle: function (b) { | 82 | + toggle: _toggle |
74 | - if (b === undefined) { | ||
75 | - sel = !sel; | ||
76 | - } else { | ||
77 | - sel = !!b; | ||
78 | - } | ||
79 | - cbFnc(sel); | ||
80 | - } | ||
81 | } | 83 | } |
82 | } | 84 | } |
83 | 85 | ||
84 | function radioSet(div, id, rset) { | 86 | function radioSet(div, id, rset) { |
85 | - return {} | 87 | + if (!div || div.empty()) { |
88 | + $log.warn('Radio buttons cannot append to div'); | ||
89 | + return null; | ||
90 | + } | ||
91 | + if (!fs.isA(rset)) { | ||
92 | + $log.warn('Radio button set is not an array'); | ||
93 | + return null; | ||
94 | + } | ||
95 | + if (rset.length === 0) { | ||
96 | + $log.warn('Cannot create radio button set from empty array'); | ||
97 | + return null; | ||
98 | + } | ||
99 | + var rDiv = div.append('div').classed('rset', true), | ||
100 | + sel = 0, | ||
101 | + rads = []; | ||
102 | + | ||
103 | + rset.forEach(function (btn, index) { | ||
104 | + var rid = {id: id + '-' + index}, | ||
105 | + rbtn = angular.extend({}, btn, rid), | ||
106 | + istate = (index === 0), | ||
107 | + rtog = toggle(rDiv, rbtn.id, rbtn.gid, istate, | ||
108 | + rbtn.cb, rbtn.tooltip); | ||
109 | + | ||
110 | + rtog.el = (rtog.el).classed('tog', false).classed('rad', true); | ||
111 | + rads.push(rtog); | ||
112 | + }); | ||
113 | + | ||
114 | + return { | ||
115 | + rads: rads, | ||
116 | + selected: function (i) { | ||
117 | + if (i === undefined) { return sel; } | ||
118 | + else if (i < 0 || i >= rads.length) { | ||
119 | + $log.error('Cannot select radio button of index ' + i); | ||
120 | + } | ||
121 | + else { | ||
122 | + if (i !== sel) { | ||
123 | + rads[sel].toggle(false); | ||
124 | + rads[i].toggle(true); | ||
125 | + sel = i; | ||
126 | + } | ||
127 | + } | ||
128 | + } | ||
129 | + } | ||
86 | } | 130 | } |
87 | 131 | ||
88 | angular.module('onosWidget') | 132 | angular.module('onosWidget') | ... | ... |
... | @@ -20,14 +20,20 @@ | ... | @@ -20,14 +20,20 @@ |
20 | (function () { | 20 | (function () { |
21 | 'use strict'; | 21 | 'use strict'; |
22 | 22 | ||
23 | - var $log, ps; | 23 | + var $log, fs, ps, bns; |
24 | 24 | ||
25 | var toolBtnIds = {}, | 25 | var toolBtnIds = {}, |
26 | toolbarPanel, | 26 | toolbarPanel, |
27 | toolbarDiv; | 27 | toolbarDiv; |
28 | 28 | ||
29 | + var ids = [], | ||
30 | + tbarId, | ||
31 | + tbarPanel, | ||
32 | + tbarDiv; | ||
33 | + | ||
29 | function init() { | 34 | function init() { |
30 | toolBtnIds = {}; | 35 | toolBtnIds = {}; |
36 | + ids = []; | ||
31 | } | 37 | } |
32 | 38 | ||
33 | function addButton(btn) { | 39 | function addButton(btn) { |
... | @@ -90,6 +96,76 @@ | ... | @@ -90,6 +96,76 @@ |
90 | }; | 96 | }; |
91 | } | 97 | } |
92 | 98 | ||
99 | + function validId(id, caller) { | ||
100 | + if (fs.inArray(id, ids) !== -1) { | ||
101 | + $log.warn(caller + ': ID already exists'); | ||
102 | + return false; | ||
103 | + } | ||
104 | + return true; | ||
105 | + } | ||
106 | + | ||
107 | + function addButton1(id, gid, cb, tooltip) { | ||
108 | + var btnId = tbarId + '-' + id; | ||
109 | + if (!validId(btnId, 'addButton')) { | ||
110 | + return null; | ||
111 | + } | ||
112 | + ids.push(btnId); | ||
113 | + return bns.button(tbarDiv, btnId, gid, cb, tooltip); | ||
114 | + } | ||
115 | + | ||
116 | + function addToggle1(id, gid, initState, cb, tooltip) { | ||
117 | + var togId = tbarId + '-' + id; | ||
118 | + if (!validId(togId, 'addToggle')) { | ||
119 | + return null; | ||
120 | + } | ||
121 | + ids.push(togId); | ||
122 | + return bns.toggle(tbarDiv, togId, gid, initState, cb, tooltip); | ||
123 | + } | ||
124 | + | ||
125 | + function addRadioSet(id, rset) { | ||
126 | + var radId = tbarId + '-' + id; | ||
127 | + if (!validId(radId, 'addRadioSet')) { | ||
128 | + return null; | ||
129 | + } | ||
130 | + ids.push(radId); | ||
131 | + return bns.radioSet(tbarDiv, radId, rset); | ||
132 | + } | ||
133 | + | ||
134 | + // TODO: finish this and remove unneeded code | ||
135 | + function addSeparator1() { | ||
136 | + | ||
137 | + } | ||
138 | + | ||
139 | + function createToolbar1(id, settings) { | ||
140 | + if (!id) { | ||
141 | + $log.warn('createToolbar: no ID given'); | ||
142 | + return null; | ||
143 | + } | ||
144 | + tbarId = 'tbar-' + id; | ||
145 | + var opts = fs.isO(settings) || {}; // default settings should be put here | ||
146 | + | ||
147 | + if (!validId(tbarId, 'createToolbar')) { | ||
148 | + return null; | ||
149 | + } | ||
150 | + ids.push(tbarId); | ||
151 | + | ||
152 | + tbarPanel = ps.createPanel(tbarId, opts); | ||
153 | + tbarDiv = tbarPanel.classed('toolbar', true); | ||
154 | + | ||
155 | + // TODO: change names of functions | ||
156 | + return { | ||
157 | + addButton1: addButton1, | ||
158 | + addToggle1: addToggle1, | ||
159 | + addRadioSet: addRadioSet, | ||
160 | + addSeparator1: addSeparator1 | ||
161 | + } | ||
162 | + } | ||
163 | + | ||
164 | + // function currently not working | ||
165 | + function destroyToolbar(id) { | ||
166 | + ps.destroyPanel(id); | ||
167 | + } | ||
168 | + | ||
93 | function createToolbar(tbarId, tools) { | 169 | function createToolbar(tbarId, tools) { |
94 | var api; | 170 | var api; |
95 | 171 | ||
... | @@ -143,10 +219,13 @@ | ... | @@ -143,10 +219,13 @@ |
143 | } | 219 | } |
144 | 220 | ||
145 | angular.module('onosWidget') | 221 | angular.module('onosWidget') |
146 | - .factory('ToolbarService', ['$log', 'PanelService', | 222 | + .factory('ToolbarService', ['$log', 'FnService', |
147 | - function (_$log_, _ps_) { | 223 | + 'PanelService', 'ButtonService', |
224 | + function (_$log_, _fs_, _ps_, _bns_) { | ||
148 | $log = _$log_; | 225 | $log = _$log_; |
226 | + fs = _fs_; | ||
149 | ps = _ps_; | 227 | ps = _ps_; |
228 | + bns = _bns_; | ||
150 | 229 | ||
151 | return { | 230 | return { |
152 | init: init, | 231 | init: init, |
... | @@ -154,7 +233,9 @@ | ... | @@ -154,7 +233,9 @@ |
154 | makeToggle: makeToggle, | 233 | makeToggle: makeToggle, |
155 | makeRadio: makeRadio, | 234 | makeRadio: makeRadio, |
156 | separator: separator, | 235 | separator: separator, |
157 | - createToolbar: createToolbar | 236 | + createToolbar: createToolbar, |
237 | + createToolbar1: createToolbar1, | ||
238 | + destroyToolbar: destroyToolbar | ||
158 | }; | 239 | }; |
159 | }]); | 240 | }]); |
160 | 241 | ... | ... |
... | @@ -83,8 +83,16 @@ describe('factory: fw/widget/button.js', function () { | ... | @@ -83,8 +83,16 @@ describe('factory: fw/widget/button.js', function () { |
83 | expect(count).toBe(0); | 83 | expect(count).toBe(0); |
84 | }); | 84 | }); |
85 | 85 | ||
86 | + it('should not append toggle to an undefined div', function () { | ||
87 | + spyOn($log, 'warn'); | ||
88 | + expect(bns.toggle(undefined, 'id', 'gid', false, | ||
89 | + function () {})).toBeNull(); | ||
90 | + expect($log.warn).toHaveBeenCalledWith('Toggle cannot append to div'); | ||
91 | + }); | ||
92 | + | ||
86 | it('should verify toggle glyph', function () { | 93 | it('should verify toggle glyph', function () { |
87 | - var tog = bns.toggle(d3Elem, 'tbar0-tog-0', 'crown', function () {}); | 94 | + var tog = bns.toggle(d3Elem, 'tbar0-tog-0', 'crown', |
95 | + false, function () {}); | ||
88 | expect((tog.el).classed('tog')).toBeTruthy(); | 96 | expect((tog.el).classed('tog')).toBeTruthy(); |
89 | expect((tog.el).attr('id')).toBe('tbar0-tog-0'); | 97 | expect((tog.el).attr('id')).toBe('tbar0-tog-0'); |
90 | expect((tog.el).select('svg')).toBeTruthy(); | 98 | expect((tog.el).select('svg')).toBeTruthy(); |
... | @@ -116,10 +124,139 @@ describe('factory: fw/widget/button.js', function () { | ... | @@ -116,10 +124,139 @@ describe('factory: fw/widget/button.js', function () { |
116 | expect(tog.selected()).toBe(false); | 124 | expect(tog.selected()).toBe(false); |
117 | }); | 125 | }); |
118 | 126 | ||
119 | - it('should not append toggle to an undefined div', function () { | 127 | + it('should verity toggle initial state', function () { |
128 | + var tog = bns.toggle(d3Elem, 'id', 'gid', true); | ||
129 | + expect(tog.selected()).toBe(true); | ||
130 | + tog = bns.toggle(d3Elem, 'id', 'gid', false); | ||
131 | + expect(tog.selected()).toBe(false); | ||
132 | + tog = bns.toggle(d3Elem, 'id', 'gid', ''); | ||
133 | + expect(tog.selected()).toBe(false); | ||
134 | + tog = bns.toggle(d3Elem, 'id', 'gid', 'something'); | ||
135 | + expect(tog.selected()).toBe(true); | ||
136 | + }); | ||
137 | + | ||
138 | + it('should not append radio button set to an undefined div', function () { | ||
120 | spyOn($log, 'warn'); | 139 | spyOn($log, 'warn'); |
121 | - expect(bns.toggle(undefined, 'id', 'gid', function () {})).toBeNull(); | 140 | + expect(bns.radioSet(undefined, 'id', [])).toBeNull(); |
122 | - expect($log.warn).toHaveBeenCalledWith('Toggle cannot append to div'); | 141 | + expect($log.warn).toHaveBeenCalledWith('Radio buttons cannot append ' + |
142 | + 'to div'); | ||
143 | + }); | ||
144 | + | ||
145 | + it('should not create radio button set from a non-array', function () { | ||
146 | + var rads = {test: 'test'}; | ||
147 | + spyOn($log, 'warn'); | ||
148 | + | ||
149 | + expect(bns.radioSet(d3Elem, 'test', rads)).toBeNull(); | ||
150 | + expect($log.warn).toHaveBeenCalledWith('Radio button set is not ' + | ||
151 | + 'an array'); | ||
152 | + rads = 'rads'; | ||
153 | + expect(bns.radioSet(d3Elem, 'test', rads)).toBeNull(); | ||
154 | + expect($log.warn).toHaveBeenCalledWith('Radio button set is not ' + | ||
155 | + 'an array'); | ||
156 | + rads = {arr: [1, 2, 3]}; | ||
157 | + expect(bns.radioSet(d3Elem, 'test', rads)).toBeNull(); | ||
158 | + expect($log.warn).toHaveBeenCalledWith('Radio button set is not ' + | ||
159 | + 'an array'); | ||
160 | + }); | ||
161 | + | ||
162 | + it('should not create radio button set from empty array', function () { | ||
163 | + var rads = []; | ||
164 | + spyOn($log, 'warn'); | ||
165 | + expect(bns.radioSet(d3Elem, 'test', rads)).toBeNull(); | ||
166 | + expect($log.warn).toHaveBeenCalledWith('Cannot create radio button ' + | ||
167 | + 'set from empty array'); | ||
168 | + }); | ||
169 | + | ||
170 | + it('should verify radio button glyph structure', function () { | ||
171 | + var rads = [ | ||
172 | + { gid: 'crown', cb: function () {}, tooltip: 'n/a'} | ||
173 | + ], rdiv; | ||
174 | + | ||
175 | + spyOn($log, 'warn'); | ||
176 | + expect(bns.radioSet(d3Elem, 'test', rads)).toBeTruthy(); | ||
177 | + expect($log.warn).not.toHaveBeenCalled(); | ||
178 | + | ||
179 | + rdiv = d3Elem.select('div'); | ||
180 | + expect(rdiv.classed('rset')).toBe(true); | ||
181 | + expect(rdiv.select('div').classed('rad')).toBe(true); | ||
182 | + expect(rdiv.select('div').classed('tog')).toBe(false); | ||
183 | + expect(rdiv.select('div').attr('id')).toBe('test-0'); | ||
184 | + expect(rdiv.select('div').select('svg')).toBeTruthy(); | ||
185 | + expect(rdiv.select('use').classed('glyph')).toBeTruthy(); | ||
186 | + expect(rdiv.select('use').attr('xlink:href')).toBe('#crown'); | ||
123 | }); | 187 | }); |
124 | 188 | ||
189 | + it('should verify more than one radio button glyph was added', function () { | ||
190 | + var rads = [ | ||
191 | + { gid: 'crown', cb: function () {}, tooltip: 'n/a'}, | ||
192 | + { gid: 'router', cb: function () {}, tooltip: 'n/a'} | ||
193 | + ], rdiv; | ||
194 | + | ||
195 | + expect(bns.radioSet(d3Elem, 'test', rads)).toBeTruthy(); | ||
196 | + rdiv = d3Elem.select('div'); | ||
197 | + expect(rdiv.select('#test-0')).toBeTruthy(); | ||
198 | + expect(rdiv.select('#test-1')).toBeTruthy(); | ||
199 | + | ||
200 | + expect(rdiv.select('#test-0') | ||
201 | + .select('use') | ||
202 | + .classed('glyph')) | ||
203 | + .toBeTruthy(); | ||
204 | + expect(rdiv.select('#test-0') | ||
205 | + .select('use') | ||
206 | + .attr('xlink:href')) | ||
207 | + .toBe('#crown'); | ||
208 | + | ||
209 | + expect(rdiv.select('#test-1') | ||
210 | + .select('use') | ||
211 | + .classed('glyph')) | ||
212 | + .toBeTruthy(); | ||
213 | + expect(rdiv.select('#test-1') | ||
214 | + .select('use') | ||
215 | + .attr('xlink:href')) | ||
216 | + .toBe('#router'); | ||
217 | + }); | ||
218 | + | ||
219 | + it('should select the correct radio button', function () { | ||
220 | + var count0 = 0, | ||
221 | + count1 = 9; | ||
222 | + function cb0() { count0++; } | ||
223 | + function cb1() { count1++; } | ||
224 | + | ||
225 | + var rads = [ | ||
226 | + { gid: 'crown', cb: cb0, tooltip: 'n/a'}, | ||
227 | + { gid: 'router', cb: cb1, tooltip: 'n/a'} | ||
228 | + ], | ||
229 | + rset = bns.radioSet(d3Elem, 'test', rads); | ||
230 | + spyOn($log, 'error'); | ||
231 | + | ||
232 | + expect(rset.selected()).toBe(0); | ||
233 | + expect(count0).toBe(0); | ||
234 | + expect(count1).toBe(9); | ||
235 | + rset.selected(0); | ||
236 | + expect(rset.selected()).toBe(0); | ||
237 | + expect(count0).toBe(0); | ||
238 | + expect(count1).toBe(9); | ||
239 | + | ||
240 | + rset.selected(1); | ||
241 | + expect(rset.selected()).toBe(1); | ||
242 | + expect(count0).toBe(1); | ||
243 | + expect(count1).toBe(10); | ||
244 | + | ||
245 | + rset.selected(-1); | ||
246 | + expect($log.error).toHaveBeenCalledWith('Cannot select radio button ' + | ||
247 | + 'of index -1'); | ||
248 | + expect(rset.selected()).toBe(1); | ||
249 | + expect(count0).toBe(1); | ||
250 | + expect(count1).toBe(10); | ||
251 | + | ||
252 | + rset.selected(66); | ||
253 | + expect($log.error).toHaveBeenCalledWith('Cannot select radio button ' + | ||
254 | + 'of index 66'); | ||
255 | + expect(rset.selected()).toBe(1); | ||
256 | + expect(count0).toBe(1); | ||
257 | + expect(count1).toBe(10); | ||
258 | + }); | ||
259 | + | ||
260 | + // TODO: figure out how to trigger d3 onclick for buttons and toggles | ||
261 | + | ||
125 | }); | 262 | }); | ... | ... |
... | @@ -18,19 +18,23 @@ | ... | @@ -18,19 +18,23 @@ |
18 | ONOS GUI -- Widget -- Toolbar Service - Unit Tests | 18 | ONOS GUI -- Widget -- Toolbar Service - Unit Tests |
19 | */ | 19 | */ |
20 | describe('factory: fw/widget/toolbar.js', function () { | 20 | describe('factory: fw/widget/toolbar.js', function () { |
21 | - var $log, fs, tbs, ps, | 21 | + var $log, fs, tbs, ps, bns, is, |
22 | d3Elem; | 22 | d3Elem; |
23 | 23 | ||
24 | - beforeEach(module('onosWidget', 'onosUtil', 'onosLayer')); | 24 | + beforeEach(module('onosWidget', 'onosUtil', 'onosLayer', 'onosSvg')); |
25 | 25 | ||
26 | - beforeEach(inject(function (_$log_, FnService, | 26 | + beforeEach(inject(function (_$log_, FnService, ToolbarService, |
27 | - ToolbarService, PanelService) { | 27 | + PanelService, ButtonService, IconService) { |
28 | $log = _$log_; | 28 | $log = _$log_; |
29 | fs = FnService; | 29 | fs = FnService; |
30 | tbs = ToolbarService; | 30 | tbs = ToolbarService; |
31 | ps = PanelService; | 31 | ps = PanelService; |
32 | + bns = ButtonService; | ||
33 | + is = IconService; | ||
32 | })); | 34 | })); |
33 | 35 | ||
36 | + // TODO: figure out solution for calling tests with new info instead of calling init | ||
37 | + | ||
34 | beforeEach(function () { | 38 | beforeEach(function () { |
35 | d3Elem = d3.select('body').append('div').attr('id', 'floatpanels'); | 39 | d3Elem = d3.select('body').append('div').attr('id', 'floatpanels'); |
36 | tbs.init(); | 40 | tbs.init(); |
... | @@ -50,7 +54,7 @@ describe('factory: fw/widget/toolbar.js', function () { | ... | @@ -50,7 +54,7 @@ describe('factory: fw/widget/toolbar.js', function () { |
50 | it('should define api functions', function () { | 54 | it('should define api functions', function () { |
51 | expect(fs.areFunctions(tbs, [ | 55 | expect(fs.areFunctions(tbs, [ |
52 | 'init', 'makeButton', 'makeToggle', 'makeRadio', 'separator', | 56 | 'init', 'makeButton', 'makeToggle', 'makeRadio', 'separator', |
53 | - 'createToolbar' | 57 | + 'createToolbar', 'createToolbar1', 'destroyToolbar' |
54 | ])).toBeTruthy(); | 58 | ])).toBeTruthy(); |
55 | }); | 59 | }); |
56 | 60 | ||
... | @@ -264,4 +268,86 @@ describe('factory: fw/widget/toolbar.js', function () { | ... | @@ -264,4 +268,86 @@ describe('factory: fw/widget/toolbar.js', function () { |
264 | expect(sepDiv.style('border-style')).toBe('solid'); | 268 | expect(sepDiv.style('border-style')).toBe('solid'); |
265 | }); | 269 | }); |
266 | 270 | ||
271 | + // ==== new Toolbar Unit tests -------------------------------------------- | ||
272 | + | ||
273 | + it('should warn if createToolbar id is invalid', function () { | ||
274 | + spyOn($log, 'warn'); | ||
275 | + expect(tbs.createToolbar1()).toBeNull(); | ||
276 | + expect($log.warn).toHaveBeenCalledWith('createToolbar: no ID given'); | ||
277 | + | ||
278 | + expect(tbs.createToolbar1('test')).toBeTruthy(); | ||
279 | + expect(tbs.createToolbar1('test')).toBeNull(); | ||
280 | + expect($log.warn).toHaveBeenCalledWith('createToolbar: ID already exists'); | ||
281 | + }); | ||
282 | + | ||
283 | + it('should create an unpopulated toolbar', function () { | ||
284 | + spyOn($log, 'warn'); | ||
285 | + expect(tbs.createToolbar1('test')).toBeTruthy(); | ||
286 | + expect($log.warn).not.toHaveBeenCalled(); | ||
287 | + }); | ||
288 | + | ||
289 | + it('should create a button', function () { | ||
290 | + spyOn($log, 'warn'); | ||
291 | + var toolbar = tbs.createToolbar1('test'), | ||
292 | + btn = toolbar.addButton1('btn0', 'gid', function () {}); | ||
293 | + expect(btn).not.toBeNull(); | ||
294 | + expect(btn.id).toBe('tbar-test-btn0'); | ||
295 | + expect($log.warn).not.toHaveBeenCalled(); | ||
296 | + }); | ||
297 | + | ||
298 | + it('should not create a button with a duplicate id', function () { | ||
299 | + spyOn($log, 'warn'); | ||
300 | + var toolbar = tbs.createToolbar1('test'), | ||
301 | + btn = toolbar.addButton1('btn0', 'gid', function () {}), | ||
302 | + btn1 = toolbar.addButton1('btn0', 'gid', function () {}); | ||
303 | + expect(btn).not.toBeNull(); | ||
304 | + expect(btn.id).toBe('tbar-test-btn0'); | ||
305 | + expect($log.warn).toHaveBeenCalledWith('addButton: ID already exists'); | ||
306 | + expect(btn1).toBeNull(); | ||
307 | + }); | ||
308 | + | ||
309 | + it('should create a toggle', function () { | ||
310 | + spyOn($log, 'warn'); | ||
311 | + var toolbar = tbs.createToolbar1('test'), | ||
312 | + tog = toolbar.addButton1('tog0', 'gid', false, function () {}); | ||
313 | + expect(tog).not.toBeNull(); | ||
314 | + expect(tog.id).toBe('tbar-test-tog0'); | ||
315 | + expect($log.warn).not.toHaveBeenCalled(); | ||
316 | + }); | ||
317 | + | ||
318 | + it('should not create a toggle with a duplicate id', function () { | ||
319 | + spyOn($log, 'warn'); | ||
320 | + var toolbar = tbs.createToolbar1('test'), | ||
321 | + tog = toolbar.addToggle1('tog0', 'gid', false, function () {}), | ||
322 | + tog1 = toolbar.addToggle1('tog0', 'gid', true, function () {}); | ||
323 | + expect(tog).not.toBeNull(); | ||
324 | + expect(tog.id).toBe('tbar-test-tog0'); | ||
325 | + expect($log.warn).toHaveBeenCalledWith('addToggle: ID already exists'); | ||
326 | + expect(tog1).toBeNull(); | ||
327 | + }); | ||
328 | + | ||
329 | + | ||
330 | + it('should create a radio button set', function () { | ||
331 | + spyOn($log, 'warn'); | ||
332 | + var toolbar = tbs.createToolbar1('test'), | ||
333 | + rset = [ | ||
334 | + { gid: 'crown', cb: function () {}, tooltip: 'nothing' }, | ||
335 | + { gid: 'bird', cb: function () {}, tooltip: 'nothing' } | ||
336 | + ], | ||
337 | + rad = toolbar.addRadioSet('rad0', rset); | ||
338 | + expect(rad).not.toBeNull(); | ||
339 | + expect(rad.rads[0].id).toBe('tbar-test-rad0-0'); | ||
340 | + expect(rad.rads[1].id).toBe('tbar-test-rad0-1'); | ||
341 | + expect($log.warn).not.toHaveBeenCalled(); | ||
342 | + }); | ||
343 | + | ||
344 | + //it('should not append to a destroyed toolbar', function () { | ||
345 | + // spyOn($log, 'warn'); | ||
346 | + // var toolbar = tbs.createToolbar1('test'); | ||
347 | + // expect(toolbar).not.toBeNull(); | ||
348 | + // tbs.destroyToolbar('tbar-test'); | ||
349 | + // expect(toolbar.addButton1('btn', 'gid', function () {})).toBeNull(); | ||
350 | + // expect($log.warn).toHaveBeenCalledWith('Button cannot append to div'); | ||
351 | + //}); | ||
352 | + | ||
267 | }); | 353 | }); | ... | ... |
-
Please register or login to post a comment