Bri Prebilic Cole

GUI -- Reworked ButtonService unit tests (fixed logic error).

Change-Id: I793c02a327885b746ccf2345156f7a5fd1007bd2
...@@ -203,7 +203,7 @@ ...@@ -203,7 +203,7 @@
203 } else { 203 } else {
204 idx = idxByKey[x]; 204 idx = idxByKey[x];
205 if (idx === undefined) { 205 if (idx === undefined) {
206 - $log.warn('no radio button with key "' + x + '"'); 206 + $log.warn('no radio button with key:', x);
207 } else { 207 } else {
208 selectedIndex(idx); 208 selectedIndex(idx);
209 } 209 }
...@@ -215,10 +215,14 @@ ...@@ -215,10 +215,14 @@
215 return currIdx; 215 return currIdx;
216 } else { 216 } else {
217 if (x >= 0 && x < rads.length) { 217 if (x >= 0 && x < rads.length) {
218 - currIdx = x; 218 + if (currIdx !== x) {
219 - invokeCurrent(); 219 + currIdx = x;
220 + invokeCurrent();
221 + } else {
222 + $log.warn('current index already selected:', x);
223 + }
220 } else { 224 } else {
221 - $log.warn('invalid radio button index', x); 225 + $log.warn('invalid radio button index:', x);
222 } 226 }
223 } 227 }
224 } 228 }
......
...@@ -158,34 +158,26 @@ describe('factory: fw/widget/button.js', function () { ...@@ -158,34 +158,26 @@ describe('factory: fw/widget/button.js', function () {
158 expect($log.warn).toHaveBeenCalledWith(warning); 158 expect($log.warn).toHaveBeenCalledWith(warning);
159 }); 159 });
160 160
161 - // ===================================================================
162 - // ===================================================================
163 - // ===================================================================
164 -
165 -
166 -
167 it('should not create radio button set from empty array', function () { 161 it('should not create radio button set from empty array', function () {
168 var rads = []; 162 var rads = [];
169 spyOn($log, 'warn'); 163 spyOn($log, 'warn');
170 expect(bns.radioSet(d3Elem, 'test', rads)).toBeNull(); 164 expect(bns.radioSet(d3Elem, 'test', rads)).toBeNull();
171 - expect($log.warn).toHaveBeenCalledWith('Cannot create radio button ' + 165 + expect($log.warn).toHaveBeenCalledWith('invalid array (radio button set)');
172 - 'set from empty array');
173 }); 166 });
174 167
175 it('should verify radio button glyph structure', function () { 168 it('should verify radio button glyph structure', function () {
176 var rads = [ 169 var rads = [
177 - { gid: 'crown', cb: function () {}, tooltip: 'n/a'} 170 + { gid: 'crown', cb: nullFunc, tooltip: 'n/a'}
178 ], rdiv; 171 ], rdiv;
179 172
180 spyOn($log, 'warn'); 173 spyOn($log, 'warn');
181 - expect(bns.radioSet(d3Elem, 'test', rads)).toBeTruthy(); 174 + expect(bns.radioSet(d3Elem, 'foo', rads)).toBeTruthy();
182 expect($log.warn).not.toHaveBeenCalled(); 175 expect($log.warn).not.toHaveBeenCalled();
183 176
184 rdiv = d3Elem.select('div'); 177 rdiv = d3Elem.select('div');
185 - expect(rdiv.classed('rset')).toBe(true); 178 + expect(rdiv.classed('radioSet')).toBe(true);
186 - expect(rdiv.select('div').classed('rad')).toBe(true); 179 + expect(rdiv.select('div').classed('radioButton')).toBe(true);
187 - expect(rdiv.select('div').classed('tog')).toBe(false); 180 + expect(rdiv.select('div').attr('id')).toBe('foo-0');
188 - expect(rdiv.select('div').attr('id')).toBe('test-0');
189 expect(rdiv.select('div').select('svg')).toBeTruthy(); 181 expect(rdiv.select('div').select('svg')).toBeTruthy();
190 expect(rdiv.select('use').classed('glyph')).toBeTruthy(); 182 expect(rdiv.select('use').classed('glyph')).toBeTruthy();
191 expect(rdiv.select('use').attr('xlink:href')).toBe('#crown'); 183 expect(rdiv.select('use').attr('xlink:href')).toBe('#crown');
...@@ -193,75 +185,116 @@ describe('factory: fw/widget/button.js', function () { ...@@ -193,75 +185,116 @@ describe('factory: fw/widget/button.js', function () {
193 185
194 it('should verify more than one radio button glyph was added', function () { 186 it('should verify more than one radio button glyph was added', function () {
195 var rads = [ 187 var rads = [
196 - { gid: 'crown', cb: function () {}, tooltip: 'n/a'}, 188 + { gid: 'crown', cb: nullFunc, tooltip: 'n/a'},
197 - { gid: 'router', cb: function () {}, tooltip: 'n/a'} 189 + { gid: 'router', cb: nullFunc, tooltip: 'n/a'}
198 ], rdiv; 190 ], rdiv;
199 191
200 - expect(bns.radioSet(d3Elem, 'test', rads)).toBeTruthy(); 192 + expect(bns.radioSet(d3Elem, 'foo', rads)).toBeTruthy();
201 rdiv = d3Elem.select('div'); 193 rdiv = d3Elem.select('div');
202 - expect(rdiv.select('#test-0')).toBeTruthy(); 194 + expect(rdiv.select('#foo-0')).toBeTruthy();
203 - expect(rdiv.select('#test-1')).toBeTruthy(); 195 + expect(rdiv.select('#foo-1')).toBeTruthy();
204 196
205 - expect(rdiv.select('#test-0') 197 + expect(rdiv.select('#foo-0')
206 .select('use') 198 .select('use')
207 .classed('glyph')) 199 .classed('glyph'))
208 .toBeTruthy(); 200 .toBeTruthy();
209 - expect(rdiv.select('#test-0') 201 + expect(rdiv.select('#foo-0')
210 .select('use') 202 .select('use')
211 .attr('xlink:href')) 203 .attr('xlink:href'))
212 .toBe('#crown'); 204 .toBe('#crown');
213 205
214 - expect(rdiv.select('#test-1') 206 + expect(rdiv.select('#foo-1')
215 .select('use') 207 .select('use')
216 .classed('glyph')) 208 .classed('glyph'))
217 .toBeTruthy(); 209 .toBeTruthy();
218 - expect(rdiv.select('#test-1') 210 + expect(rdiv.select('#foo-1')
219 .select('use') 211 .select('use')
220 .attr('xlink:href')) 212 .attr('xlink:href'))
221 .toBe('#router'); 213 .toBe('#router');
222 }); 214 });
223 215
224 - it('should select the correct radio button', function () { 216 + it('should select radio button by index', function () {
225 var count0 = 0, 217 var count0 = 0,
226 count1 = 9; 218 count1 = 9;
227 function cb0() { count0++; } 219 function cb0() { count0++; }
228 function cb1() { count1++; } 220 function cb1() { count1++; }
229 221
222 + function validate(expSel, exp0, exp1) {
223 + expect(rset.selected()).toBe(expSel);
224 + expect(count0).toBe(exp0);
225 + expect(count1).toBe(exp1);
226 + }
227 +
228 + function checkWarn(msg, index) {
229 + expect($log.warn).toHaveBeenCalledWith(msg, index);
230 + }
231 +
230 var rads = [ 232 var rads = [
231 - { gid: 'crown', cb: cb0, tooltip: 'n/a'}, 233 + { gid: 'crown', cb: cb0, tooltip: 'n/a'},
232 - { gid: 'router', cb: cb1, tooltip: 'n/a'} 234 + { gid: 'router', cb: cb1, tooltip: 'n/a'}
233 ], 235 ],
234 rset = bns.radioSet(d3Elem, 'test', rads); 236 rset = bns.radioSet(d3Elem, 'test', rads);
235 - spyOn($log, 'error'); 237 + spyOn($log, 'warn');
236 - 238 +
237 - expect(rset.selected()).toBe(0); 239 + validate(0, 0, 9);
238 - expect(count0).toBe(0); 240 + rset.selectedIndex(0);
239 - expect(count1).toBe(9); 241 + validate(0, 0, 9);
240 - rset.selected(0); 242 +
241 - expect(rset.selected()).toBe(0); 243 + rset.selectedIndex(1);
242 - expect(count0).toBe(0); 244 + validate(1, 0, 10);
243 - expect(count1).toBe(9); 245 +
244 - 246 + rset.selectedIndex(-1);
245 - rset.selected(1); 247 + checkWarn('invalid radio button index:', -1);
246 - expect(rset.selected()).toBe(1); 248 + validate(1, 0, 10);
247 - expect(count0).toBe(1); 249 +
248 - expect(count1).toBe(10); 250 + rset.selectedIndex(66);
249 - 251 + checkWarn('invalid radio button index:', 66);
250 - rset.selected(-1); 252 + validate(1, 0, 10);
251 - expect($log.error).toHaveBeenCalledWith('Cannot select radio button ' + 253 +
252 - 'of index -1'); 254 + rset.selectedIndex(0);
253 - expect(rset.selected()).toBe(1); 255 + validate(0, 1, 10);
254 - expect(count0).toBe(1);
255 - expect(count1).toBe(10);
256 -
257 - rset.selected(66);
258 - expect($log.error).toHaveBeenCalledWith('Cannot select radio button ' +
259 - 'of index 66');
260 - expect(rset.selected()).toBe(1);
261 - expect(count0).toBe(1);
262 - expect(count1).toBe(10);
263 }); 256 });
264 257
265 - // TODO: figure out how to trigger d3 onclick for buttons and toggles 258 + it('should select radio button by key', function () {
259 + var count0 = 0,
260 + count1 = 9;
261 + function cb0() { count0++; }
262 + function cb1() { count1++; }
263 +
264 + function validate(expSel, exp0, exp1) {
265 + expect(rset.selected()).toBe(expSel);
266 + expect(count0).toBe(exp0);
267 + expect(count1).toBe(exp1);
268 + }
269 +
270 + function checkWarn(msg, index) {
271 + expect($log.warn).toHaveBeenCalledWith(msg, index);
272 + }
273 +
274 + var rads = [
275 + { key: 'foo', gid: 'crown', cb: cb0, tooltip: 'n/a'},
276 + { key: 'bar', gid: 'router', cb: cb1, tooltip: 'n/a'}
277 + ],
278 + rset = bns.radioSet(d3Elem, 'test', rads);
279 + spyOn($log, 'warn');
280 +
281 + validate('foo', 0, 9);
282 + rset.selected('foo');
283 + validate('foo', 0, 9);
284 +
285 + rset.selected('bar');
286 + validate('bar', 0, 10);
287 +
288 + rset.selected('blob');
289 + checkWarn('no radio button with key:', 'blob');
290 + validate('bar', 0, 10);
291 +
292 + rset.selected('foo');
293 + validate('foo', 1, 10);
294 +
295 + rset.selected('foo');
296 + validate('foo', 1, 10);
297 + checkWarn('current index already selected:', 0);
298 + });
266 299
267 }); 300 });
......
...@@ -36,13 +36,13 @@ describe('factory: fw/widget/toolbar.js', function () { ...@@ -36,13 +36,13 @@ describe('factory: fw/widget/toolbar.js', function () {
36 // TODO: figure out solution for calling tests with new info instead of calling init 36 // TODO: figure out solution for calling tests with new info instead of calling init
37 37
38 beforeEach(function () { 38 beforeEach(function () {
39 - d3Elem = d3.select('body').append('div').attr('id', 'floatpanels'); 39 + d3Elem = d3.select('body').append('div').attr('id', 'testToolbar');
40 tbs.init(); 40 tbs.init();
41 ps.init(); 41 ps.init();
42 }); 42 });
43 43
44 afterEach(function () { 44 afterEach(function () {
45 - d3.select('#floatpanels').remove(); 45 + d3.select('#testToolbar').remove();
46 tbs.init(); 46 tbs.init();
47 ps.init(); 47 ps.init();
48 }); 48 });
...@@ -61,11 +61,13 @@ describe('factory: fw/widget/toolbar.js', function () { ...@@ -61,11 +61,13 @@ describe('factory: fw/widget/toolbar.js', function () {
61 it('should warn if createToolbar id is invalid', function () { 61 it('should warn if createToolbar id is invalid', function () {
62 spyOn($log, 'warn'); 62 spyOn($log, 'warn');
63 expect(tbs.createToolbar()).toBeNull(); 63 expect(tbs.createToolbar()).toBeNull();
64 - expect($log.warn).toHaveBeenCalledWith('createToolbar: no ID given'); 64 + expect($log.warn).toHaveBeenCalledWith('createToolbar: ' +
65 + 'no ID given: [undefined]');
65 66
66 expect(tbs.createToolbar('test')).toBeTruthy(); 67 expect(tbs.createToolbar('test')).toBeTruthy();
67 expect(tbs.createToolbar('test')).toBeNull(); 68 expect(tbs.createToolbar('test')).toBeNull();
68 - expect($log.warn).toHaveBeenCalledWith('createToolbar: ID already exists'); 69 + expect($log.warn).toHaveBeenCalledWith('createToolbar: ' +
70 + 'duplicate ID given: [undefined]');
69 }); 71 });
70 72
71 it('should create an unpopulated toolbar', function () { 73 it('should create an unpopulated toolbar', function () {
......