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