Simon Hunt

GUI -- Fixing broken Toolbar unit tests.

Change-Id: Ic82fd281cc6e51b8395781c39bad075ecb24c096
...@@ -79,10 +79,11 @@ ...@@ -79,10 +79,11 @@
79 // ================================== 79 // ==================================
80 80
81 function createToolbar(id, opts) { 81 function createToolbar(id, opts) {
82 - if (!id) return warn('no ID given', id); 82 + if (!id) return warn('no ID given');
83 if (tbars[id]) return warn('duplicate ID given', id); 83 if (tbars[id]) return warn('duplicate ID given', id);
84 84
85 var settings = angular.extend({}, defaultSettings, fs.isO(opts)), 85 var settings = angular.extend({}, defaultSettings, fs.isO(opts)),
86 + items = {},
86 tbid = 'toolbar-' + id, 87 tbid = 'toolbar-' + id,
87 panel = ps.createPanel(tbid, settings), 88 panel = ps.createPanel(tbid, settings),
88 arrowDiv = createArrow(panel), 89 arrowDiv = createArrow(panel),
...@@ -94,6 +95,7 @@ ...@@ -94,6 +95,7 @@
94 // add a descriptor for this toolbar 95 // add a descriptor for this toolbar
95 tbars[id] = { 96 tbars[id] = {
96 settings: settings, 97 settings: settings,
98 + items: items,
97 panel: panel, 99 panel: panel,
98 panelId: tbid 100 panelId: tbid
99 }; 101 };
...@@ -102,27 +104,47 @@ ...@@ -102,27 +104,47 @@
102 .style('top', settings.top); 104 .style('top', settings.top);
103 105
104 106
107 + function dupId(id, caller) {
108 + if (items[id]) {
109 + $log.warn(caller + ': duplicate ID:', id);
110 + return true;
111 + }
112 + return false;
113 + }
114 +
105 // API functions 115 // API functions
106 116
107 function addButton(id, gid, cb, tooltip) { 117 function addButton(id, gid, cb, tooltip) {
118 + if (dupId(id, 'addButton')) return null;
119 +
108 var bid = tbid + '-' + id, 120 var bid = tbid + '-' + id,
109 btn = bns.button(panel, bid, gid, cb, tooltip); 121 btn = bns.button(panel, bid, gid, cb, tooltip);
122 +
123 + items[id] = btn;
110 tbWidth += btn.width(); 124 tbWidth += btn.width();
111 panel.width(tbWidth); 125 panel.width(tbWidth);
112 return btn; 126 return btn;
113 } 127 }
114 128
115 function addToggle(id, gid, initState, cb, tooltip) { 129 function addToggle(id, gid, initState, cb, tooltip) {
130 + if (dupId(id, 'addToggle')) return null;
131 +
116 var tid = tbid + '-' + id, 132 var tid = tbid + '-' + id,
117 tog = bns.toggle(panel, tid, gid, initState, cb, tooltip); 133 tog = bns.toggle(panel, tid, gid, initState, cb, tooltip);
134 +
135 + items[id] = tog;
118 tbWidth += tog.width(); 136 tbWidth += tog.width();
119 panel.width(tbWidth); 137 panel.width(tbWidth);
120 return tog; 138 return tog;
121 } 139 }
122 140
123 function addRadioSet(id, rset) { 141 function addRadioSet(id, rset) {
142 + if (dupId(id, 'addRadioSet')) return null;
143 +
124 var rid = tbid + '-' + id, 144 var rid = tbid + '-' + id,
125 rad = bns.radioSet(panel, rid, rset); 145 rad = bns.radioSet(panel, rid, rset);
146 +
147 + items[id] = rad;
126 tbWidth += rad.width(); 148 tbWidth += rad.width();
127 panel.width(tbWidth); 149 panel.width(tbWidth);
128 return rad; 150 return rad;
......
...@@ -18,8 +18,7 @@ ...@@ -18,8 +18,7 @@
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, bns, is, 21 + var $log, fs, tbs, ps, bns, is;
22 - d3Elem;
23 22
24 beforeEach(module('onosWidget', 'onosUtil', 'onosLayer', 'onosSvg')); 23 beforeEach(module('onosWidget', 'onosUtil', 'onosLayer', 'onosSvg'));
25 24
...@@ -33,20 +32,21 @@ describe('factory: fw/widget/toolbar.js', function () { ...@@ -33,20 +32,21 @@ describe('factory: fw/widget/toolbar.js', function () {
33 is = IconService; 32 is = IconService;
34 })); 33 }));
35 34
36 - // TODO: figure out solution for calling tests with new info instead of calling init
37 -
38 beforeEach(function () { 35 beforeEach(function () {
39 - d3Elem = d3.select('body').append('div').attr('id', 'testToolbar'); 36 + // panel service expects #floatpanels div into which panels are placed
37 + d3.select('body').append('div').attr('id', 'floatpanels');
40 tbs.init(); 38 tbs.init();
41 ps.init(); 39 ps.init();
42 }); 40 });
43 41
44 afterEach(function () { 42 afterEach(function () {
45 - d3.select('#testToolbar').remove();
46 tbs.init(); 43 tbs.init();
47 ps.init(); 44 ps.init();
45 + d3.select('#floatpanels').remove();
48 }); 46 });
49 47
48 + function nullFunc() { }
49 +
50 it('should define ToolbarService', function () { 50 it('should define ToolbarService', function () {
51 expect(tbs).toBeDefined(); 51 expect(tbs).toBeDefined();
52 }); 52 });
...@@ -58,107 +58,96 @@ describe('factory: fw/widget/toolbar.js', function () { ...@@ -58,107 +58,96 @@ describe('factory: fw/widget/toolbar.js', function () {
58 ])).toBeTruthy(); 58 ])).toBeTruthy();
59 }); 59 });
60 60
61 - it('should warn if createToolbar id is invalid', function () { 61 + it('should warn when no id is given', 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: ' + 64 expect($log.warn).toHaveBeenCalledWith('createToolbar: ' +
65 - 'no ID given: [undefined]'); 65 + 'no ID given: [undefined]');
66 -
67 - expect(tbs.createToolbar('test')).toBeTruthy();
68 - expect(tbs.createToolbar('test')).toBeNull();
69 - expect($log.warn).toHaveBeenCalledWith('createToolbar: ' +
70 - 'duplicate ID given: [undefined]');
71 }); 66 });
72 67
73 - it('should create an unpopulated toolbar', function () { 68 + it('should warn when a duplicate id is given', function () {
74 spyOn($log, 'warn'); 69 spyOn($log, 'warn');
75 expect(tbs.createToolbar('test')).toBeTruthy(); 70 expect(tbs.createToolbar('test')).toBeTruthy();
76 - expect($log.warn).not.toHaveBeenCalled(); 71 + expect(tbs.createToolbar('test')).toBeNull();
72 + expect($log.warn).toHaveBeenCalledWith('createToolbar: ' +
73 + 'duplicate ID given: [test]');
77 }); 74 });
78 75
79 it('should verify the toolbar arrow div exists', function () { 76 it('should verify the toolbar arrow div exists', function () {
80 tbs.createToolbar('test'); 77 tbs.createToolbar('test');
81 78
82 - var arrow = d3Elem.select('.tbarArrow'); 79 + // NOTE: toolbar service prefixes id with 'toolbar-'
83 - expect(arrow).toBeTruthy(); 80 + var tbar = d3.select('#toolbar-test'),
84 - expect(arrow.select('svg')).toBeTruthy(); 81 + arrow = tbar.select('.tbarArrow');
85 - expect(arrow.select('svg').select('g') 82 +
86 - .classed('tableColSortAsc')).toBeTruthy(); 83 + expect(arrow.size()).toBe(1);
84 + expect(arrow.select('svg').size()).toBe(1);
85 + expect(arrow.select('svg').select('g').select('use')
86 + .attr('xlink:href')).toEqual('#triangleUp');
87 }); 87 });
88 88
89 +
89 it('should create a button', function () { 90 it('should create a button', function () {
90 spyOn($log, 'warn'); 91 spyOn($log, 'warn');
91 - var toolbar = tbs.createToolbar('test'), 92 + var toolbar = tbs.createToolbar('foo'),
92 - btn = toolbar.addButton('btn0', 'gid', function () {}); 93 + btn = toolbar.addButton('btn0', 'gid');
93 expect(btn).not.toBeNull(); 94 expect(btn).not.toBeNull();
94 - expect(btn.id).toBe('tbar-test-btn0'); 95 + expect(btn.id).toBe('toolbar-foo-btn0');
95 expect($log.warn).not.toHaveBeenCalled(); 96 expect($log.warn).not.toHaveBeenCalled();
96 }); 97 });
97 98
98 - it('should not create a button with a duplicate id', function () { 99 + it('should not create an item with a duplicate id', function () {
99 spyOn($log, 'warn'); 100 spyOn($log, 'warn');
100 - var toolbar = tbs.createToolbar('test'), 101 + var toolbar = tbs.createToolbar('foo'),
101 - btn = toolbar.addButton('btn0', 'gid', function () {}), 102 + btn = toolbar.addButton('btn0', 'gid'),
102 - btn1 = toolbar.addButton('btn0', 'gid', function () {}); 103 + dup;
103 expect(btn).not.toBeNull(); 104 expect(btn).not.toBeNull();
104 - expect(btn.id).toBe('tbar-test-btn0'); 105 + expect(btn.id).toBe('toolbar-foo-btn0');
105 - expect($log.warn).toHaveBeenCalledWith('addButton: ID already exists'); 106 +
106 - expect(btn1).toBeNull(); 107 + dup = toolbar.addButton('btn0', 'gid');
108 + expect($log.warn).toHaveBeenCalledWith('addButton: duplicate ID:', 'btn0');
109 + expect(dup).toBeNull();
110 +
111 + dup = toolbar.addToggle('btn0', 'gid');
112 + expect($log.warn).toHaveBeenCalledWith('addToggle: duplicate ID:', 'btn0');
113 + expect(dup).toBeNull();
114 +
115 + dup = toolbar.addRadioSet('btn0', []);
116 + expect($log.warn).toHaveBeenCalledWith('addRadioSet: duplicate ID:', 'btn0');
117 + expect(dup).toBeNull();
107 }); 118 });
108 119
109 it('should create a toggle', function () { 120 it('should create a toggle', function () {
110 spyOn($log, 'warn'); 121 spyOn($log, 'warn');
111 - var toolbar = tbs.createToolbar('test'), 122 + var toolbar = tbs.createToolbar('foo'),
112 - tog = toolbar.addButton('tog0', 'gid', false, function () {}); 123 + tog = toolbar.addButton('tog0', 'gid');
113 expect(tog).not.toBeNull(); 124 expect(tog).not.toBeNull();
114 - expect(tog.id).toBe('tbar-test-tog0'); 125 + expect(tog.id).toBe('toolbar-foo-tog0');
115 expect($log.warn).not.toHaveBeenCalled(); 126 expect($log.warn).not.toHaveBeenCalled();
116 }); 127 });
117 128
118 - it('should not create a toggle with a duplicate id', function () {
119 - spyOn($log, 'warn');
120 - var toolbar = tbs.createToolbar('test'),
121 - tog = toolbar.addToggle('tog0', 'gid', false, function () {}),
122 - tog1 = toolbar.addToggle('tog0', 'gid', true, function () {});
123 - expect(tog).not.toBeNull();
124 - expect(tog.id).toBe('tbar-test-tog0');
125 - expect($log.warn).toHaveBeenCalledWith('addToggle: ID already exists');
126 - expect(tog1).toBeNull();
127 - });
128 -
129 -
130 it('should create a radio button set', function () { 129 it('should create a radio button set', function () {
131 spyOn($log, 'warn'); 130 spyOn($log, 'warn');
132 - var toolbar = tbs.createToolbar('test'), 131 + var toolbar = tbs.createToolbar('foo'),
133 rset = [ 132 rset = [
134 - { gid: 'crown', cb: function () {}, tooltip: 'nothing' }, 133 + { gid: 'crown', cb: nullFunc, tooltip: 'A Crown' },
135 - { gid: 'bird', cb: function () {}, tooltip: 'nothing' } 134 + { gid: 'bird', cb: nullFunc, tooltip: 'A Bird' }
136 ], 135 ],
137 rad = toolbar.addRadioSet('rad0', rset); 136 rad = toolbar.addRadioSet('rad0', rset);
138 expect(rad).not.toBeNull(); 137 expect(rad).not.toBeNull();
139 - expect(rad.rads[0].id).toBe('tbar-test-rad0-0'); 138 + expect(rad.selectedIndex()).toBe(0);
140 - expect(rad.rads[1].id).toBe('tbar-test-rad0-1');
141 expect($log.warn).not.toHaveBeenCalled(); 139 expect($log.warn).not.toHaveBeenCalled();
142 }); 140 });
143 141
144 it('should create a separator div', function () { 142 it('should create a separator div', function () {
145 spyOn($log, 'warn'); 143 spyOn($log, 'warn');
146 - var toolbar = tbs.createToolbar('test'), 144 + var toolbar = tbs.createToolbar('foo');
147 - sep = toolbar.addSeparator(); 145 + var tbar = d3.select('#toolbar-foo');
148 - expect(sep).not.toBeNull();
149 - expect($log.warn).not.toHaveBeenCalled();
150 146
151 - expect(d3Elem.select('.sep')).toBeTruthy(); 147 + toolbar.addSeparator();
152 - expect(d3Elem.select('.sep').style('width')).toBe('2px'); 148 + expect($log.warn).not.toHaveBeenCalled();
153 - });
154 149
155 - it('should not append to a destroyed toolbar', function () { 150 + expect(tbar.select('.separator').size()).toBe(1);
156 - spyOn($log, 'warn');
157 - var toolbar = tbs.createToolbar('test');
158 - expect(toolbar).not.toBeNull();
159 - tbs.destroyToolbar('tbar-test');
160 - expect(toolbar.addButton('btn', 'gid', function () {})).toBeNull();
161 - expect($log.warn).toHaveBeenCalledWith('Button cannot append to div');
162 }); 151 });
163 152
164 }); 153 });
......