summaryrefslogtreecommitdiffstats
path: root/framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js
diff options
context:
space:
mode:
authorAshlee Young <ashlee@onosfw.com>2015-09-09 22:15:21 -0700
committerAshlee Young <ashlee@onosfw.com>2015-09-09 22:15:21 -0700
commit13d05bc8458758ee39cb829098241e89616717ee (patch)
tree22a4d1ce65f15952f07a3df5af4b462b4697cb3a /framework/src/onos/web/gui/src/main/webapp/tests/app/fw/layer/quickhelp-spec.js
parent6139282e1e93c2322076de4b91b1c85d0bc4a8b3 (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.js214
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);
+ });
+
+});
+