diff options
Diffstat (limited to 'framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js')
-rw-r--r-- | framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js new file mode 100644 index 00000000..24ed9900 --- /dev/null +++ b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/panel-spec.js @@ -0,0 +1,189 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + ONOS GUI -- Layer -- Panel Service - Unit Tests + */ +describe('factory: fw/layer/panel.js', function () { + var $log, $timeout, fs, ps, d3Elem; + + beforeEach(module('onosLayer')); + + beforeEach(inject(function (_$log_, _$timeout_, FnService, PanelService) { + $log = _$log_; + $timeout = _$timeout_; + fs = FnService; + ps = PanelService; + d3Elem = d3.select('body').append('div').attr('id', 'floatpanels'); + ps.init(); + })); + + afterEach(function () { + d3.select('#floatpanels').remove(); + ps.init(); + }); + + function floatPanelSelection() { + return d3Elem.selectAll('.floatpanel'); + } + + it('should define PanelService', function () { + expect(ps).toBeDefined(); + }); + + it('should define api functions', function () { + expect(fs.areFunctions(ps, [ + 'init', 'createPanel', 'destroyPanel' + ])).toBeTruthy(); + }); + + it('should have no panels to start', function () { + expect(floatPanelSelection().size()).toBe(0); + }); + + it('should log a warning if no ID is given', function () { + spyOn($log, 'warn'); + var p = ps.createPanel(); + expect(p).toBeNull(); + expect($log.warn).toHaveBeenCalledWith('createPanel: no ID given'); + expect(floatPanelSelection().size()).toBe(0); + }); + + it('should create a default panel', function () { + spyOn($log, 'warn'); + spyOn($log, 'debug'); + var p = ps.createPanel('foo'); + expect(p).not.toBeNull(); + expect($log.warn).not.toHaveBeenCalled(); + expect(floatPanelSelection().size()).toBe(1); + expect($log.debug).toHaveBeenCalledWith('creating panel:', 'foo', { + edge: 'right', + width: 200, + margin: 20, + hideMargin: 20, + xtnTime: 750, + fade: true + }); + + // check basic properties + expect(p.width()).toEqual(200); + expect(p.isVisible()).toBeFalsy(); + + var el = floatPanelSelection(); + expect(el.style('width')).toEqual('200px'); + }); + + it('should provide an api of panel functions', function () { + var p = ps.createPanel('foo'); + expect(fs.areFunctions(p, [ + 'show', 'hide', 'toggle', 'empty', 'append', + 'width', 'height', 'isVisible', 'classed', 'el' + ])).toBeTruthy(); + }); + + it('should complain when a duplicate ID is used', function () { + spyOn($log, 'warn'); + var p = ps.createPanel('foo'); + expect(p).not.toBeNull(); + expect($log.warn).not.toHaveBeenCalled(); + expect(floatPanelSelection().size()).toBe(1); + + var dup = ps.createPanel('foo'); + expect(dup).toBeNull(); + expect($log.warn).toHaveBeenCalledWith('Panel with ID "foo" already exists'); + expect(floatPanelSelection().size()).toBe(1); + }); + + it('should note when there is no panel to destroy', function () { + spyOn($log, 'debug'); + ps.destroyPanel('bar'); + expect($log.debug).toHaveBeenCalledWith('no panel to destroy:', 'bar'); + }); + + it('should destroy the panel', function () { + spyOn($log, 'debug'); + var p = ps.createPanel('foo'); + expect(floatPanelSelection().size()).toBe(1); + + ps.destroyPanel('foo'); + expect($log.debug).toHaveBeenCalledWith('destroying panel:', 'foo'); + expect(floatPanelSelection().size()).toBe(0); + }); + + it('should allow alternate settings to be given', function () { + spyOn($log, 'debug'); + var p = ps.createPanel('foo', { width: 250, edge: 'left' }); + expect($log.debug).toHaveBeenCalledWith('creating panel:', 'foo', { + edge: 'left', + width: 250, + margin: 20, + hideMargin: 20, + xtnTime: 750, + fade: true + }); + }); + + it('should show and hide the panel', function () { + var p = ps.createPanel('foo', {xtnTime:0}); + expect(p.isVisible()).toBeFalsy(); + + p.show(); + expect(p.isVisible()).toBeTruthy(); + + p.hide(); + expect(p.isVisible()).toBeFalsy(); + }); + + it('should append content to the panel', function () { + var p = ps.createPanel('foo'); + var span = p.append('span').attr('id', 'thisIsMySpan'); + + expect(floatPanelSelection().selectAll('span').attr('id')) + .toEqual('thisIsMySpan'); + }); + + it('should remove content on empty', function () { + var p = ps.createPanel('voop'); + p.append('span'); + p.append('span'); + p.append('span'); + expect(floatPanelSelection().selectAll('span').size()).toEqual(3); + + p.empty(); + expect(floatPanelSelection().selectAll('span').size()).toEqual(0); + expect(floatPanelSelection().html()).toEqual(''); + }); + + it('should allow programmatic setting of width', function () { + var p = ps.createPanel('whatcha', {width:234}); + expect(floatPanelSelection().style('width')).toEqual('234px'); + expect(p.width()).toEqual(234); + + p.width(345); + expect(floatPanelSelection().style('width')).toEqual('345px'); + expect(p.width()).toEqual(345); + }); + + it('should allow programmatic setting of height', function () { + var p = ps.createPanel('ciao', {height:50}); + expect(floatPanelSelection().style('height')).toEqual('50px'); + expect(p.height()).toEqual(50); + + p.height(100); + expect(floatPanelSelection().style('height')).toEqual('100px'); + expect(p.height()).toEqual(100); + }); +}); |