blob: 24ed9900cfe2eda26a0bd9d10c06871809b550b1 [file] [log] [blame]
/*
* 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);
});
});