/* * 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 -- Widget -- Toolbar Service - Unit Tests */ describe('factory: fw/widget/toolbar.js', function () { var $log, fs, tbs, ps, bns, is; beforeEach(module('onosWidget', 'onosUtil', 'onosLayer', 'onosSvg')); beforeEach(inject(function (_$log_, FnService, ToolbarService, PanelService, ButtonService, IconService) { $log = _$log_; fs = FnService; tbs = ToolbarService; ps = PanelService; bns = ButtonService; is = IconService; })); beforeEach(function () { // panel service expects #floatpanels div into which panels are placed d3.select('body').append('div').attr('id', 'floatpanels'); tbs.init(); ps.init(); }); afterEach(function () { tbs.init(); ps.init(); d3.select('#floatpanels').remove(); }); function nullFunc() { } it('should define ToolbarService', function () { expect(tbs).toBeDefined(); }); it('should define api functions', function () { expect(fs.areFunctions(tbs, [ 'init', 'createToolbar', 'destroyToolbar' ])).toBeTruthy(); }); it('should warn when no id is given', function () { spyOn($log, 'warn'); expect(tbs.createToolbar()).toBeNull(); expect($log.warn).toHaveBeenCalledWith('createToolbar: ' + 'no ID given: [undefined]'); }); it('should warn when a duplicate id is given', function () { spyOn($log, 'warn'); expect(tbs.createToolbar('test')).toBeTruthy(); expect(tbs.createToolbar('test')).toBeNull(); expect($log.warn).toHaveBeenCalledWith('createToolbar: ' + 'duplicate ID given: [test]'); }); it('should verify the toolbar arrow div exists', function () { tbs.createToolbar('test'); // NOTE: toolbar service prefixes id with 'toolbar-' var tbar = d3.select('#toolbar-test'), arrow = tbar.select('.tbar-arrow'); expect(arrow.size()).toBe(1); expect(arrow.select('svg').size()).toBe(1); expect(arrow.select('svg').select('g').select('use') .attr('xlink:href')).toEqual('#triangleUp'); }); it('should create a button', function () { spyOn($log, 'warn'); var toolbar = tbs.createToolbar('foo'), btn = toolbar.addButton('btn0', 'gid'); expect(btn).not.toBeNull(); expect(btn.id).toBe('toolbar-foo-btn0'); expect($log.warn).not.toHaveBeenCalled(); }); it('should not create an item with a duplicate id', function () { spyOn($log, 'warn'); var toolbar = tbs.createToolbar('foo'), btn = toolbar.addButton('btn0', 'gid'), dup; expect(btn).not.toBeNull(); expect(btn.id).toBe('toolbar-foo-btn0'); dup = toolbar.addButton('btn0', 'gid'); expect($log.warn).toHaveBeenCalledWith('addButton: duplicate ID:', 'btn0'); expect(dup).toBeNull(); dup = toolbar.addToggle('btn0', 'gid'); expect($log.warn).toHaveBeenCalledWith('addToggle: duplicate ID:', 'btn0'); expect(dup).toBeNull(); dup = toolbar.addRadioSet('btn0', []); expect($log.warn).toHaveBeenCalledWith('addRadioSet: duplicate ID:', 'btn0'); expect(dup).toBeNull(); }); it('should create a toggle', function () { spyOn($log, 'warn'); var toolbar = tbs.createToolbar('foo'), tog = toolbar.addButton('tog0', 'gid'); expect(tog).not.toBeNull(); expect(tog.id).toBe('toolbar-foo-tog0'); expect($log.warn).not.toHaveBeenCalled(); }); it('should create a radio button set', function () { spyOn($log, 'warn'); var toolbar = tbs.createToolbar('foo'), rset = [ { gid: 'crown', cb: nullFunc, tooltip: 'A Crown' }, { gid: 'bird', cb: nullFunc, tooltip: 'A Bird' } ], rad = toolbar.addRadioSet('rad0', rset); expect(rad).not.toBeNull(); expect(rad.selectedIndex()).toBe(0); expect($log.warn).not.toHaveBeenCalled(); }); it('should create a separator div', function () { spyOn($log, 'warn'); var toolbar = tbs.createToolbar('foo'), tbar = d3.select('#toolbar-foo'); toolbar.addSeparator(); expect($log.warn).not.toHaveBeenCalled(); expect(tbar.select('.separator').size()).toBe(1); }); it('should add another row of buttons', function () { var toolbar = tbs.createToolbar('foo'), tbar = d3.select('#toolbar-foo'), rows; toolbar.addButton('btn0', 'gid'); toolbar.addRow(); toolbar.addButton('btn1', 'gid'); rows = tbar.selectAll('.tbar-row'); expect(rows.size()).toBe(2); rows.each(function (d, i) { expect(d3.select(this) .select('div') .attr('id','toolbar-foo-btn' + i) .empty()) .toBe(false); }); }); it('should not add a row if current row is empty', function () { var toolbar = tbs.createToolbar('foo'); expect(toolbar.addRow()).toBeNull(); toolbar.addButton('btn0', 'gid'); expect(toolbar.addRow()).not.toBeNull(); expect(toolbar.addRow()).toBeNull(); }); });