diff options
author | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
---|---|---|
committer | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
commit | 13d05bc8458758ee39cb829098241e89616717ee (patch) | |
tree | 22a4d1ce65f15952f07a3df5af4b462b4697cb3a /framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js | |
parent | 6139282e1e93c2322076de4b91b1c85d0bc4a8b3 (diff) |
ONOS checkin based on commit tag e796610b1f721d02f9b0e213cf6f7790c10ecd60
Change-Id: Ife8810491034fe7becdba75dda20de4267bd15cd
Diffstat (limited to 'framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js')
-rw-r--r-- | framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js new file mode 100644 index 00000000..0f473b42 --- /dev/null +++ b/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js @@ -0,0 +1,214 @@ +/* + * 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 -- Flash Service - Unit Tests + */ +describe('factory: fw/layer/quickhelp.js', function () { + var $log, fs, qhs, d3Elem, + fade = 500, + noop = function () {}, + mockBindings = { + globalKeys: { + slash: [noop, 'Show / hide Quick Help'], + T: [noop, 'Toggle Theme'] + }, + globalFormat: ['slash', 'T'], + viewKeys: { + H: [noop, 'Show / hide hosts'], + I: [noop, 'Toggle instances panel'] + }, + viewGestures: [] + }; + + // list of needed bindings to use in aggregateData + var neededBindings = [ + 'globalKeys', 'globalFormat', 'viewKeys', 'viewGestures' + ]; + + beforeEach(module('onosUtil', 'onosSvg', 'onosLayer')); + + beforeEach(inject(function (_$log_, FnService, QuickHelpService) { + $log = _$log_; + fs = FnService; + qhs = QuickHelpService; + + jasmine.clock().install(); + d3Elem = d3.select('body').append('div').attr('id', 'quickhelp'); + qhs.initQuickHelp(); + })); + + afterEach(function () { + jasmine.clock().uninstall(); + d3.select('#quickhelp').remove(); + }); + + function helpItemSelection() { + return d3Elem.selectAll('.help'); + } + + it('should define QuickHelpService', function () { + expect(qhs).toBeDefined(); + }); + + it('should define api functions', function () { + expect(fs.areFunctions(qhs, [ + 'initQuickHelp', 'showQuickHelp', 'hideQuickHelp' + ])).toBeTruthy(); + }); + + it('should have no items to start', function () { + expect(helpItemSelection().size()).toBe(0); + }); + + // === showQuickHelp + + it('should warn if bad bindings are provided', function () { + var warning = + 'Quickhelp Service: showQuickHelp(), invalid bindings object'; + spyOn($log, 'warn'); + + expect(qhs.showQuickHelp()).toBeNull(); + expect($log.warn).toHaveBeenCalledWith(warning); + + expect(qhs.showQuickHelp({})).toBeNull(); + expect($log.warn).toHaveBeenCalledWith(warning); + + expect(qhs.showQuickHelp([1, 2, 3])).toBeNull(); + expect($log.warn).toHaveBeenCalledWith(warning); + }); + + it('should warn if not all needed bindings are provided', function () { + var warning = + 'Quickhelp Service: showQuickHelp(),' + + ' needed bindings for help panel not provided:'; + spyOn($log, 'warn'); + + expect(qhs.showQuickHelp({ + foo: 'foo', bar: 'bar' + })).toBeNull(); + expect($log.warn).toHaveBeenCalledWith(warning, neededBindings); + + expect(qhs.showQuickHelp({ + globalKeys: {} + })).toBeNull(); + expect($log.warn).toHaveBeenCalledWith(warning, neededBindings); + + expect(qhs.showQuickHelp({ + globalKeys: {}, + globalFormat: {}, + viewKeys: {} + })).toBeNull(); + expect($log.warn).toHaveBeenCalledWith(warning, neededBindings); + }); + + it('should not warn if bindings are provided', function () { + spyOn($log, 'warn'); + expect(qhs.showQuickHelp(mockBindings)).toBe(undefined); + expect($log.warn).not.toHaveBeenCalled(); + }); + + it('should append an svg', function () { + var svg = d3Elem.select('svg'); + expect(d3Elem.empty()).toBe(false); + expect(svg.empty()).toBe(true); + + qhs.showQuickHelp(mockBindings); + + svg = d3Elem.select('svg'); + expect(svg.empty()).toBe(false); + expect(svg.attr('width')).toBe('100%'); + expect(svg.attr('height')).toBe('80%'); + expect(svg.attr('viewBox')).toBe('-200 0 400 400'); + }); + + it('should create the quick help panel', function () { + var helpItems, g, rect, text, rows; + qhs.showQuickHelp(mockBindings); + + helpItems = helpItemSelection(); + expect(helpItems.size()).toBe(1); + + g = d3.select('g.help'); + expect(g.attr('opacity')).toBe('0'); + + rect = g.select('rect'); + expect(rect.attr('rx')).toBe('8'); + + text = g.select('text'); + expect(text.text()).toBe('Quick Help'); + expect(text.classed('title')).toBe(true); + expect(text.attr('dy')).toBe('1.2em'); + expect(text.attr('transform')).toBeTruthy(); + + rows = g.select('g'); + expect(rows.empty()).toBe(false); + + jasmine.clock().tick(fade + 1); + setTimeout(function () { + expect(g.attr('opacity')).toBe('1'); + }, fade); + + // TODO: test aggregate data helper function + }); + + it('should show panel with custom fade time', function () { + var g, + ctmFade = 200; + qhs.initQuickHelp({ fade: ctmFade }); + qhs.showQuickHelp(mockBindings); + + g = d3.select('g.help'); + expect(g.attr('opacity')).toBe('0'); + + jasmine.clock().tick(ctmFade + 1); + setTimeout(function () { + expect(g.attr('opacity')).toBe('1'); + }, ctmFade); + }); + + // === hideQuickHelp + + it('should hide quick help if svg exists', function () { + var svg; + + expect(qhs.hideQuickHelp()).toBe(false); + + svg = d3.select('#quickhelp') + .append('svg'); + svg.append('g') + .classed('help', true) + .attr('opacity', 1); + + expect(qhs.hideQuickHelp()).toBe(true); + + jasmine.clock().tick(fade + 1); + setTimeout(function () { + expect(svg.select('g.help').attr('opacity')).toBe('0'); + }, fade); + + jasmine.clock().tick(20); + setTimeout(function () { + expect(svg.empty()).toBe(true); + }, fade + 20); + }); + + it('should not hide quick help if svg does not exist', function () { + expect(qhs.hideQuickHelp()).toBe(false); + }); + +}); + |