Committed by
Gerrit Code Review
ONOS-1724 - GUI -- svgUnit tests written. WIP topoToolbar unit tests written. Fi…
…ring key presses programmatically investigated. Change-Id: Ifff05859ebfebcee513d7fa8c42b52dc62f48f97
Showing
5 changed files
with
188 additions
and
13 deletions
... | @@ -53,6 +53,10 @@ | ... | @@ -53,6 +53,10 @@ |
53 | ' is not a function'; | 53 | ' is not a function'; |
54 | } | 54 | } |
55 | 55 | ||
56 | + if (!force) { | ||
57 | + bad.push('SvgUtilService: createDragBehavior(): ' + | ||
58 | + 'Bad force reference'); | ||
59 | + } | ||
56 | if (!fSel) { | 60 | if (!fSel) { |
57 | bad.push(naf('selectCb')); | 61 | bad.push(naf('selectCb')); |
58 | } | 62 | } |
... | @@ -71,7 +75,6 @@ | ... | @@ -71,7 +75,6 @@ |
71 | return null; | 75 | return null; |
72 | } | 76 | } |
73 | 77 | ||
74 | - | ||
75 | function dragged(d) { | 78 | function dragged(d) { |
76 | var threshold = draggedThreshold(force.alpha()), | 79 | var threshold = draggedThreshold(force.alpha()), |
77 | dx = d.oldX - d.px, | 80 | dx = d.oldX - d.px, | ... | ... |
... | @@ -18,21 +18,20 @@ | ... | @@ -18,21 +18,20 @@ |
18 | ONOS GUI -- Layer -- Flash Service - Unit Tests | 18 | ONOS GUI -- Layer -- Flash Service - Unit Tests |
19 | */ | 19 | */ |
20 | describe('factory: fw/layer/quickhelp.js', function () { | 20 | describe('factory: fw/layer/quickhelp.js', function () { |
21 | - var $log, $timeout, fs, qhs, d3Elem; | 21 | + var $log, fs, qhs, d3Elem; |
22 | 22 | ||
23 | beforeEach(module('onosUtil', 'onosSvg', 'onosLayer')); | 23 | beforeEach(module('onosUtil', 'onosSvg', 'onosLayer')); |
24 | 24 | ||
25 | - beforeEach(inject(function (_$log_, _$timeout_, FnService, QuickHelpService) { | 25 | + beforeEach(inject(function (_$log_, FnService, QuickHelpService) { |
26 | $log = _$log_; | 26 | $log = _$log_; |
27 | - //$timeout = _$timeout_; | ||
28 | fs = FnService; | 27 | fs = FnService; |
29 | qhs = QuickHelpService; | 28 | qhs = QuickHelpService; |
30 | - //jasmine.clock().install(); | 29 | + jasmine.clock().install(); |
31 | d3Elem = d3.select('body').append('div').attr('id', 'myqhdiv'); | 30 | d3Elem = d3.select('body').append('div').attr('id', 'myqhdiv'); |
32 | })); | 31 | })); |
33 | 32 | ||
34 | afterEach(function () { | 33 | afterEach(function () { |
35 | - //jasmine.clock().uninstall(); | 34 | + jasmine.clock().uninstall(); |
36 | d3.select('#myqhdiv').remove(); | 35 | d3.select('#myqhdiv').remove(); |
37 | }); | 36 | }); |
38 | 37 | ... | ... |
... | @@ -18,7 +18,9 @@ | ... | @@ -18,7 +18,9 @@ |
18 | ONOS GUI -- SVG -- SVG Util Service - Unit Tests | 18 | ONOS GUI -- SVG -- SVG Util Service - Unit Tests |
19 | */ | 19 | */ |
20 | describe('factory: fw/svg/svgUtil.js', function() { | 20 | describe('factory: fw/svg/svgUtil.js', function() { |
21 | - var $log, fs, sus, svg, d3Elem; | 21 | + var $log, fs, sus, svg, defs, force; |
22 | + | ||
23 | + var noop = function () {}; | ||
22 | 24 | ||
23 | beforeEach(module('onosUtil', 'onosSvg')); | 25 | beforeEach(module('onosUtil', 'onosSvg')); |
24 | 26 | ||
... | @@ -27,7 +29,8 @@ describe('factory: fw/svg/svgUtil.js', function() { | ... | @@ -27,7 +29,8 @@ describe('factory: fw/svg/svgUtil.js', function() { |
27 | fs = FnService; | 29 | fs = FnService; |
28 | sus = SvgUtilService; | 30 | sus = SvgUtilService; |
29 | svg = d3.select('body').append('svg').attr('id', 'mySvg'); | 31 | svg = d3.select('body').append('svg').attr('id', 'mySvg'); |
30 | - d3Elem = svg.append('defs'); | 32 | + defs = svg.append('defs'); |
33 | + force = d3.layout.force(); | ||
31 | })); | 34 | })); |
32 | 35 | ||
33 | afterEach(function () { | 36 | afterEach(function () { |
... | @@ -46,9 +49,100 @@ describe('factory: fw/svg/svgUtil.js', function() { | ... | @@ -46,9 +49,100 @@ describe('factory: fw/svg/svgUtil.js', function() { |
46 | ])).toBeTruthy(); | 49 | ])).toBeTruthy(); |
47 | }); | 50 | }); |
48 | 51 | ||
52 | + // === createDragBehavior | ||
53 | + // TODO: break up drag into separate functions for testing | ||
54 | + // d3 needs better testing support... | ||
55 | + | ||
56 | + // Note: just checking to see if error message was called | ||
57 | + // because jasmine spy isn't catching the right newline char | ||
58 | + it('should complain if function given no parameters', function () { | ||
59 | + spyOn($log, 'error'); | ||
60 | + expect(sus.createDragBehavior()).toBeNull(); | ||
61 | + expect($log.error).toHaveBeenCalled(); | ||
62 | + }); | ||
63 | + | ||
64 | + it('should complain if function is not given clickEnabled', function () { | ||
65 | + spyOn($log, 'error'); | ||
66 | + expect(sus.createDragBehavior(force, noop, noop, noop)).toBeNull(); | ||
67 | + expect($log.error).toHaveBeenCalled(); | ||
68 | + }); | ||
69 | + | ||
70 | + it('should complain if function is not given dragEnabled', function () { | ||
71 | + spyOn($log, 'error'); | ||
72 | + expect(sus.createDragBehavior(force, noop, noop)).toBeNull(); | ||
73 | + expect($log.error).toHaveBeenCalled(); | ||
74 | + }); | ||
75 | + | ||
76 | + it('should complain if function is not given atDragEnd', function () { | ||
77 | + spyOn($log, 'error'); | ||
78 | + expect(sus.createDragBehavior(force, noop)).toBeNull(); | ||
79 | + expect($log.error).toHaveBeenCalled(); | ||
80 | + }); | ||
81 | + | ||
82 | + it('should complain if function is not given selectCb', function () { | ||
83 | + spyOn($log, 'error'); | ||
84 | + expect(sus.createDragBehavior(force)).toBeNull(); | ||
85 | + expect($log.error).toHaveBeenCalled(); | ||
86 | + }); | ||
87 | + | ||
88 | + // === loadGlowDefs | ||
89 | + function checkAttrs(glow, r, g, b) { | ||
90 | + var filterEffects, feColor, feBlur, feMerge, feMergeNodes; | ||
91 | + | ||
92 | + // filter attrs | ||
93 | + expect(glow.attr('x')).toBe('-50%'); | ||
94 | + expect(glow.attr('y')).toBe('-50%'); | ||
95 | + expect(glow.attr('width')).toBe('200%'); | ||
96 | + expect(glow.attr('height')).toBe('200%'); | ||
97 | + | ||
98 | + filterEffects = d3.selectAll(glow.node().childNodes); | ||
99 | + expect(filterEffects.size()).toBe(3); | ||
100 | + | ||
101 | + // Note: d3 didn't recognize 'feColorMatrix' and others as valid selectors | ||
102 | + // this is a work around | ||
103 | + feColor = d3.select(filterEffects[0].shift()); | ||
104 | + feBlur = d3.select(filterEffects[0].shift()); | ||
105 | + feMerge = d3.select(filterEffects[0].shift()); | ||
106 | + | ||
107 | + // feColorMatrix attrs | ||
108 | + expect(feColor.empty()).toBe(false); | ||
109 | + expect(feColor.attr('type')).toBe('matrix'); | ||
110 | + expect(feColor.attr('values')).toBe( | ||
111 | + '0 0 0 0 ' + r + ' ' + | ||
112 | + '0 0 0 0 ' + g + ' ' + | ||
113 | + '0 0 0 0 ' + b + ' ' + | ||
114 | + '0 0 0 1 0 ' | ||
115 | + ); | ||
116 | + | ||
117 | + // feGuassianBlur attrs | ||
118 | + expect(feBlur.empty()).toBe(false); | ||
119 | + expect(feBlur.attr('stdDeviation')).toBe('3'); | ||
120 | + expect(feBlur.attr('result')).toBe('coloredBlur'); | ||
49 | 121 | ||
50 | - // TODO: add unit tests for drag behavior | 122 | + // feMerge attrs |
51 | - // TODO: add unit tests for loadGlowDefs | 123 | + feMergeNodes = d3.selectAll(feMerge.node().childNodes); |
124 | + expect(feMergeNodes.size()).toBe(2); | ||
125 | + expect(d3.select(feMergeNodes[0][0]).attr('in')).toBe('coloredBlur'); | ||
126 | + expect(d3.select(feMergeNodes[0][1]).attr('in')).toBe('SourceGraphic'); | ||
127 | + } | ||
128 | + | ||
129 | + it('should load glow definitions', function () { | ||
130 | + var blue, yellow; | ||
131 | + sus.loadGlowDefs(defs); | ||
132 | + | ||
133 | + expect(defs.empty()).toBe(false); | ||
134 | + expect((defs.selectAll('filter')).size()).toBe(2); | ||
135 | + | ||
136 | + // blue-glow specific | ||
137 | + blue = defs.select('#blue-glow'); | ||
138 | + expect(blue.empty()).toBe(false); | ||
139 | + checkAttrs(blue, 0.0, 0.0, 0.7); | ||
140 | + | ||
141 | + // yellow-glow specific | ||
142 | + yellow = defs.select('#yellow-glow'); | ||
143 | + expect(yellow.empty()).toBe(false); | ||
144 | + checkAttrs(yellow, 1.0, 1.0, 0.3); | ||
145 | + }); | ||
52 | 146 | ||
53 | // === cat7 | 147 | // === cat7 |
54 | 148 | ... | ... |
... | @@ -55,8 +55,16 @@ describe('factory: fw/util/keys.js', function() { | ... | @@ -55,8 +55,16 @@ describe('factory: fw/util/keys.js', function() { |
55 | ])).toBeTruthy(); | 55 | ])).toBeTruthy(); |
56 | }); | 56 | }); |
57 | 57 | ||
58 | - // Code to emulate key presses.... | 58 | + // This no longer works because 'initKeyboardEvent' has been depreciated. |
59 | - // NOTE: kinda messy, but it seems to get the job done. | 59 | + // Now there is a constructor for 'KeyboardEvent' where you can modify |
60 | + // the new event with a dictionary(?) 'KeyboardEventInit'. | ||
61 | + // However, the below code has been so recently depreciated, there are no | ||
62 | + // examples online of how to use the new interface, and some browsers | ||
63 | + // don't support it still. These tests will have to be put off for a | ||
64 | + // while more. (Investigated 4/28/15) | ||
65 | + // Also tried was Angular's triggerHandler() function, but it doesn't seem | ||
66 | + // that it can take arguments about the event. | ||
67 | + // Using jQuery in tests might be a good idea, for triggering test events. | ||
60 | function jsKeyDown(element, code) { | 68 | function jsKeyDown(element, code) { |
61 | var ev = document.createEvent('KeyboardEvent'); | 69 | var ev = document.createEvent('KeyboardEvent'); |
62 | 70 | ||
... | @@ -184,8 +192,9 @@ describe('factory: fw/util/keys.js', function() { | ... | @@ -184,8 +192,9 @@ describe('factory: fw/util/keys.js', function() { |
184 | expect(ks.keyBindings().viewFunction).toBeFalsy(); | 192 | expect(ks.keyBindings().viewFunction).toBeFalsy(); |
185 | } | 193 | } |
186 | 194 | ||
187 | - // FIXME: jsKeyDown(...) no longer emulates key presses ?! :( | 195 | + // TODO: jsKeyDown(...) no longer emulates key presses ?! :( |
188 | // The following four unit tests ignored until we can figure this out. | 196 | // The following four unit tests ignored until we can figure this out. |
197 | + // INVESTIGATED: see jsKeyDown for details... | ||
189 | 198 | ||
190 | xit('should allow specific key bindings', function () { | 199 | xit('should allow specific key bindings', function () { |
191 | bindTestKeys(); | 200 | bindTestKeys(); | ... | ... |
1 | +/* | ||
2 | + * Copyright 2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +/* | ||
18 | + ONOS GUI -- Topo View -- Topo Toolbar Service - Unit Tests | ||
19 | + */ | ||
20 | +describe('factory: view/topo/topoToolbar.js', function() { | ||
21 | + var $log, fs, tts, prefs, ps, | ||
22 | + d3Elem; | ||
23 | + | ||
24 | + beforeEach(module('ovTopo', 'onosUtil', 'onosLayer', 'ngRoute', 'onosNav', | ||
25 | + 'onosWidget')); | ||
26 | + | ||
27 | + beforeEach(inject(function (_$log_, FnService, | ||
28 | + TopoToolbarService, PanelService, PrefsService) { | ||
29 | + $log = _$log_; | ||
30 | + fs = FnService; | ||
31 | + tts = TopoToolbarService; | ||
32 | + prefs = PrefsService; | ||
33 | + ps = PanelService; | ||
34 | + d3Elem = d3.select('body').append('div').attr('id', 'floatpanels'); | ||
35 | + ps.init(); | ||
36 | + })); | ||
37 | + | ||
38 | + it('should define TopoToolbarService', function () { | ||
39 | + expect(tts).toBeDefined(); | ||
40 | + }); | ||
41 | + | ||
42 | + it('should define api functions', function () { | ||
43 | + expect(fs.areFunctions(tts, [ | ||
44 | + 'init', 'createToolbar', 'destroyToolbar', | ||
45 | + 'keyListener', 'toggleToolbar' | ||
46 | + ])).toBeTruthy(); | ||
47 | + }); | ||
48 | + | ||
49 | + function verifyFirstRow() { | ||
50 | + | ||
51 | + } | ||
52 | + | ||
53 | + function verifySecondRow() { | ||
54 | + | ||
55 | + } | ||
56 | + | ||
57 | + function verifyThirdRow() { | ||
58 | + | ||
59 | + } | ||
60 | + | ||
61 | + it('should create a toolbar', function () { | ||
62 | + //var toolbar = tts.createToolbar('foo'); | ||
63 | + //expect(toolbar).toBeTruthy(); | ||
64 | + //expect(d3.select('#toolbar-foo').empty()).toBe(false); | ||
65 | + //verifyFirstRow(); | ||
66 | + //verifySecondRow(); | ||
67 | + //verifyThirdRow(); | ||
68 | + }); | ||
69 | + | ||
70 | +}); | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment