GUI -- Initial unit tests for Key Handler service. Still more to be done here.
Change-Id: I36e1504c571daebbcd2a147c1dffb37ef6c6beb6
Showing
5 changed files
with
132 additions
and
5 deletions
... | @@ -147,11 +147,14 @@ | ... | @@ -147,11 +147,14 @@ |
147 | onos.factory('KeyService', ['FnService', function (fs) { | 147 | onos.factory('KeyService', ['FnService', function (fs) { |
148 | f = fs; | 148 | f = fs; |
149 | return { | 149 | return { |
150 | - init: function () { | 150 | + installOn: function (elem) { |
151 | - console.log('initializing keydown handler....'); | 151 | + elem.on('keydown', keyIn); |
152 | - d3.select('body').on('keydown', keyIn); | ||
153 | setupGlobalKeys(); | 152 | setupGlobalKeys(); |
154 | - } | 153 | + }, |
154 | + theme: function () { | ||
155 | + return theme; | ||
156 | + }, | ||
157 | + whatKey: whatKey | ||
155 | }; | 158 | }; |
156 | }]); | 159 | }]); |
157 | 160 | ... | ... |
... | @@ -29,7 +29,7 @@ var ONOS; | ... | @@ -29,7 +29,7 @@ var ONOS; |
29 | ONOS = angular.module('onosApp', ['onosMast']) | 29 | ONOS = angular.module('onosApp', ['onosMast']) |
30 | .controller('OnosCtrl', ['KeyService', function (ks) { | 30 | .controller('OnosCtrl', ['KeyService', function (ks) { |
31 | console.log('OnosCtrl has been created'); | 31 | console.log('OnosCtrl has been created'); |
32 | - ks.init(); | 32 | + ks.installOn(d3.select('body')); |
33 | }]); | 33 | }]); |
34 | 34 | ||
35 | }()); | 35 | }()); | ... | ... |
File moved
1 | +/* | ||
2 | + * Copyright 2014 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 -- Key Handler Service - Unit Tests | ||
19 | + | ||
20 | + @author Simon Hunt | ||
21 | + */ | ||
22 | +describe('factory: fw/lib/keys.js', function() { | ||
23 | + var ks, | ||
24 | + fs, | ||
25 | + d3Elem; | ||
26 | + | ||
27 | + beforeEach(module('onosApp')); | ||
28 | + | ||
29 | + beforeEach(inject(function (KeyService, FnService) { | ||
30 | + ks = KeyService; | ||
31 | + fs = FnService; | ||
32 | + d3Elem = d3.select('body').append('p').attr('id', 'ptest'); | ||
33 | + ks.installOn(d3Elem); | ||
34 | + })); | ||
35 | + | ||
36 | + afterEach(function () { | ||
37 | + d3.select('#ptest').remove(); | ||
38 | + }); | ||
39 | + | ||
40 | + it('should have injected stuff defined', function () { | ||
41 | + expect(ONOS).toBeDefined(); | ||
42 | + expect(ks).toBeDefined(); | ||
43 | + expect(fs).toBeDefined(); | ||
44 | + }); | ||
45 | + | ||
46 | + // NOTE: kinda messy, but it seems to get the job done. | ||
47 | + function jsKeyDown(element, code) { | ||
48 | + var ev = document.createEvent('KeyboardEvent'); | ||
49 | + | ||
50 | + // Chromium Hack | ||
51 | + if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) { | ||
52 | + Object.defineProperty(ev, 'keyCode', { | ||
53 | + get: function () { return this.keyCodeVal; } | ||
54 | + }); | ||
55 | + Object.defineProperty(ev, 'which', { | ||
56 | + get: function () { return this.keyCodeVal; } | ||
57 | + }); | ||
58 | + } | ||
59 | + | ||
60 | + if (ev.initKeyboardEvent) { | ||
61 | + ev.initKeyboardEvent('keydown', true, true, document.defaultView, | ||
62 | + false, false, false, false, code, code); | ||
63 | + } else { | ||
64 | + ev.initKeyEvent('keydown', true, true, document.defaultView, | ||
65 | + false, false, false, false, code, 0); | ||
66 | + } | ||
67 | + | ||
68 | + ev.keyCodeVal = code; | ||
69 | + | ||
70 | + if (ev.keyCode !== code) { | ||
71 | + console.warn("keyCode mismatch " + ev.keyCode + | ||
72 | + "(" + ev.which + ") -> "+ code); | ||
73 | + } | ||
74 | + element.dispatchEvent(ev); | ||
75 | + } | ||
76 | + | ||
77 | + it('should start in light theme', function () { | ||
78 | + expect(ks.theme()).toEqual('light'); | ||
79 | + }); | ||
80 | + it('should toggle to dark theme', function () { | ||
81 | + jsKeyDown(d3Elem.node(), 84); // 'T' | ||
82 | + expect(ks.theme()).toEqual('dark'); | ||
83 | + }); | ||
84 | + | ||
85 | + // key code lookups | ||
86 | + // NOTE: should be injecting keydown events, rather than exposing whatKey() | ||
87 | + it('whatKey: 13', function () { | ||
88 | + expect(ks.whatKey(13)).toEqual('enter'); | ||
89 | + }); | ||
90 | + it('whatKey: 16', function () { | ||
91 | + expect(ks.whatKey(16)).toEqual('shift'); | ||
92 | + }); | ||
93 | + it('whatKey: 40', function () { | ||
94 | + expect(ks.whatKey(40)).toEqual('downArrow'); | ||
95 | + }); | ||
96 | + it('whatKey: 65', function () { | ||
97 | + expect(ks.whatKey(65)).toEqual('A'); | ||
98 | + }); | ||
99 | + it('whatKey: 84', function () { | ||
100 | + expect(ks.whatKey(84)).toEqual('T'); | ||
101 | + }); | ||
102 | + it('whatKey: 49', function () { | ||
103 | + expect(ks.whatKey(49)).toEqual('1'); | ||
104 | + }); | ||
105 | + it('whatKey: 55', function () { | ||
106 | + expect(ks.whatKey(55)).toEqual('7'); | ||
107 | + }); | ||
108 | + it('whatKey: 112', function () { | ||
109 | + expect(ks.whatKey(112)).toEqual('F1'); | ||
110 | + }); | ||
111 | + it('whatKey: 123', function () { | ||
112 | + expect(ks.whatKey(123)).toEqual('F12'); | ||
113 | + }); | ||
114 | + it('whatKey: 1', function () { | ||
115 | + expect(ks.whatKey(1)).toEqual('.'); | ||
116 | + }); | ||
117 | + | ||
118 | +}); |
-
Please register or login to post a comment