Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Side by Side Diff: polymer_1.2.3/bower_components/iron-a11y-keys-behavior/test/basic-test.html

Issue 1581713003: [third_party] add polymer 1.2.3 (Closed) Base URL: https://chromium.googlesource.com/infra/third_party/npm_modules.git@master
Patch Set: 1.2.3 Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <!doctype html> 1 <!doctype html>
2 <!-- 2 <!--
3 @license 3 @license
4 Copyright (c) 2015 The Polymer Project Authors. All rights reserved. 4 Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
5 This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt 5 This code may only be used under the BSD style license found at http://polymer.g ithub.io/LICENSE.txt
6 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt 6 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
7 The complete set of contributors may be found at http://polymer.github.io/CONTRI BUTORS.txt 7 The complete set of contributors may be found at http://polymer.github.io/CONTRI BUTORS.txt
8 Code distributed by Google as part of the polymer project is also 8 Code distributed by Google as part of the polymer project is also
9 subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt 9 subject to an additional IP rights grant found at http://polymer.github.io/PATEN TS.txt
10 --> 10 -->
11 <html> 11 <html>
12 <head> 12 <head>
13 <meta charset="UTF-8"> 13 <meta charset="UTF-8">
14 <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial- scale=1.0, user-scalable=yes"> 14 <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial- scale=1.0, user-scalable=yes">
15 <title>iron-a11y-keys</title> 15 <title>iron-a11y-keys</title>
16 16
17 <script src="../../webcomponentsjs/webcomponents-lite.js"></script> 17 <script src="../../webcomponentsjs/webcomponents-lite.js"></script>
18 <script src="../../web-component-tester/browser.js"></script> 18 <script src="../../web-component-tester/browser.js"></script>
19 <script src="../../test-fixture/test-fixture-mocha.js"></script>
20 <script src="../../iron-test-helpers/mock-interactions.js"></script> 19 <script src="../../iron-test-helpers/mock-interactions.js"></script>
21 20
22 <link rel="import" href="../../polymer/polymer.html"> 21 <link rel="import" href="../../polymer/polymer.html">
23 <link rel="import" href="../../test-fixture/test-fixture.html">
24 <link rel="import" href="../iron-a11y-keys-behavior.html"> 22 <link rel="import" href="../iron-a11y-keys-behavior.html">
25 </head> 23 </head>
26 <body> 24 <body>
27 <test-fixture id="BasicKeys"> 25 <test-fixture id="BasicKeys">
28 <template> 26 <template>
29 <x-a11y-basic-keys></x-a11y-basic-keys> 27 <x-a11y-basic-keys></x-a11y-basic-keys>
30 </template> 28 </template>
31 </test-fixture> 29 </test-fixture>
32 30
31 <test-fixture id="NonPropagatingKeys">
32 <template>
33 <x-a11y-basic-keys stop-keyboard-event-propagation></x-a11y-basic-keys>
34 </template>
35 </test-fixture>
36
33 <test-fixture id="ComboKeys"> 37 <test-fixture id="ComboKeys">
34 <template> 38 <template>
35 <x-a11y-combo-keys></x-a11y-combo-keys> 39 <x-a11y-combo-keys></x-a11y-combo-keys>
36 </template> 40 </template>
37 </test-fixture> 41 </test-fixture>
38 42
39 <test-fixture id="AlternativeEventKeys"> 43 <test-fixture id="AlternativeEventKeys">
40 <template> 44 <template>
41 <x-a11y-alternate-event-keys></x-a11y-alternate-event-keys> 45 <x-a11y-alternate-event-keys></x-a11y-alternate-event-keys>
42 </template> 46 </template>
43 </test-fixture> 47 </test-fixture>
44 48
45 <test-fixture id="BehaviorKeys"> 49 <test-fixture id="BehaviorKeys">
46 <template> 50 <template>
47 <x-a11y-behavior-keys></x-a11y-behavior-keys> 51 <x-a11y-behavior-keys></x-a11y-behavior-keys>
48 </template> 52 </template>
49 </test-fixture> 53 </test-fixture>
50 54
55 <test-fixture id="PreventKeys">
56 <template>
57 <x-a11y-prevent-keys></x-a11y-prevent-keys>
58 </template>
59 </test-fixture>
60
51 <script> 61 <script>
52 suite('Polymer.IronA11yKeysBehavior', function() { 62 suite('Polymer.IronA11yKeysBehavior', function() {
53 var keys; 63 var keys;
54 64
55 suiteSetup(function() { 65 suiteSetup(function() {
56 var KeysTestBehavior = [Polymer.IronA11yKeysBehavior, { 66 var KeysTestBehavior = [Polymer.IronA11yKeysBehavior, {
57 properties: { 67 properties: {
58 keyCount: { 68 keyCount: {
59 type: Number, 69 type: Number,
60 value: 0 70 value: 0
61 } 71 }
62 }, 72 },
63 73
64 _keyHandler: function(event) { 74 _keyHandler: function(event) {
65 this.keyCount++; 75 this.keyCount++;
66 this.lastEvent = event; 76 this.lastEvent = event;
77 },
78
79 // Same as _keyHandler, used to distinguish who's called before who.
80 _keyHandler2: function(event) {
81 this.keyCount++;
82 this.lastEvent = event;
83 },
84
85 _preventDefaultHandler: function(event) {
86 event.preventDefault();
87 this.keyCount++;
88 this.lastEvent = event;
67 } 89 }
68 }]; 90 }];
69 91
70 Polymer({ 92 Polymer({
71 is: 'x-a11y-basic-keys', 93 is: 'x-a11y-basic-keys',
72 94
73 behaviors: [ 95 behaviors: [
74 KeysTestBehavior 96 KeysTestBehavior
75 ], 97 ],
76 98
77 keyBindings: { 99 keyBindings: {
78 'space': '_keyHandler' 100 'space': '_keyHandler',
101 '@': '_keyHandler'
79 } 102 }
80 }); 103 });
81 104
82 Polymer({ 105 Polymer({
83 is: 'x-a11y-combo-keys', 106 is: 'x-a11y-combo-keys',
84 107
85 behaviors: [ 108 behaviors: [
86 KeysTestBehavior 109 KeysTestBehavior
87 ], 110 ],
88 111
89 keyBindings: { 112 keyBindings: {
90 'ctrl+shift+a': '_keyHandler' 113 'enter': '_keyHandler2',
114 'ctrl+shift+a shift+enter': '_keyHandler'
91 } 115 }
92 }); 116 });
93 117
94 Polymer({ 118 Polymer({
95 is: 'x-a11y-alternate-event-keys', 119 is: 'x-a11y-alternate-event-keys',
96 120
97 behaviors: [ 121 behaviors: [
98 KeysTestBehavior 122 KeysTestBehavior
99 ], 123 ],
100 124
(...skipping 10 matching lines...) Expand all
111 135
112 Polymer({ 136 Polymer({
113 is: 'x-a11y-behavior-keys', 137 is: 'x-a11y-behavior-keys',
114 138
115 behaviors: [ 139 behaviors: [
116 KeysTestBehavior, 140 KeysTestBehavior,
117 XA11yBehavior 141 XA11yBehavior
118 ], 142 ],
119 143
120 keyBindings: { 144 keyBindings: {
121 'space': '_keyHandler' 145 'enter': '_keyHandler'
146 }
147 });
148
149 Polymer({
150 is: 'x-a11y-prevent-keys',
151
152 behaviors: [
153 KeysTestBehavior,
154 XA11yBehavior
155 ],
156
157 keyBindings: {
158 'space a': '_keyHandler',
159 'enter shift+a': '_preventDefaultHandler'
122 } 160 }
123 }); 161 });
124 }); 162 });
125 163
126 suite('basic keys', function() { 164 suite('basic keys', function() {
127 setup(function() { 165 setup(function() {
128 keys = fixture('BasicKeys'); 166 keys = fixture('BasicKeys');
129 }); 167 });
130 168
131 test('trigger the handler when the specified key is pressed', function() { 169 test('trigger the handler when the specified key is pressed', function() {
132 MockInteractions.pressSpace(keys); 170 MockInteractions.pressSpace(keys);
133 171
134 expect(keys.keyCount).to.be.equal(1); 172 expect(keys.keyCount).to.be.equal(1);
135 }); 173 });
136 174
175 test('trigger the handler when the specified key is pressed together with a modifier', function() {
176 var event = new CustomEvent('keydown');
177 event.ctrlKey = true;
178 event.keyCode = event.code = 32;
179 keys.dispatchEvent(event);
180 expect(keys.keyCount).to.be.equal(1);
181 });
182
183 test('handles special character @', function() {
184 var event = new CustomEvent('keydown');
185 event.key = '@';
186 keys.dispatchEvent(event);
187 expect(keys.keyCount).to.be.equal(1);
188 });
189
137 test('do not trigger the handler for non-specified keys', function() { 190 test('do not trigger the handler for non-specified keys', function() {
138 MockInteractions.pressEnter(keys); 191 MockInteractions.pressEnter(keys);
139 192
140 expect(keys.keyCount).to.be.equal(0); 193 expect(keys.keyCount).to.be.equal(0);
141 }); 194 });
142 195
143 test('can have bindings added imperatively', function() { 196 test('can have bindings added imperatively', function() {
144 keys.addOwnKeyBinding('enter', '_keyHandler'); 197 keys.addOwnKeyBinding('enter', '_keyHandler');
145 198
146 MockInteractions.pressEnter(keys); 199 MockInteractions.pressEnter(keys);
147 expect(keys.keyCount).to.be.equal(1); 200 expect(keys.keyCount).to.be.equal(1);
148 201
149 MockInteractions.pressSpace(keys); 202 MockInteractions.pressSpace(keys);
150 expect(keys.keyCount).to.be.equal(2); 203 expect(keys.keyCount).to.be.equal(2);
151 }); 204 });
152 205
153 test('can remove imperatively added bindings', function() { 206 test('can remove imperatively added bindings', function() {
154 keys.addOwnKeyBinding('enter', '_keyHandler'); 207 keys.addOwnKeyBinding('enter', '_keyHandler');
155 keys.removeOwnKeyBindings(); 208 keys.removeOwnKeyBindings();
156 209
157 MockInteractions.pressEnter(keys); 210 MockInteractions.pressEnter(keys);
158 expect(keys.keyCount).to.be.equal(0); 211 expect(keys.keyCount).to.be.equal(0);
159 212
160 MockInteractions.pressSpace(keys); 213 MockInteractions.pressSpace(keys);
161 expect(keys.keyCount).to.be.equal(1); 214 expect(keys.keyCount).to.be.equal(1);
162 }); 215 });
163 216
217 test('allows propagation beyond the key combo handler', function() {
218 var keySpy = sinon.spy();
219 document.addEventListener('keydown', keySpy);
220
221 MockInteractions.pressEnter(keys);
222
223 expect(keySpy.callCount).to.be.equal(1);
224 });
225
164 suite('edge cases', function() { 226 suite('edge cases', function() {
165 test('knows that `spacebar` is the same as `space`', function() { 227 test('knows that `spacebar` is the same as `space`', function() {
166 var event = new CustomEvent('keydown'); 228 var event = new CustomEvent('keydown');
167 event.key = 'spacebar'; 229 event.key = 'spacebar';
168 expect(keys.keyboardEventMatchesKeys(event, 'space')).to.be.equal(true); 230 expect(keys.keyboardEventMatchesKeys(event, 'space')).to.be.equal(true);
169 }); 231 });
232
233 test('handles `+`', function() {
234 var event = new CustomEvent('keydown');
235 event.key = '+';
236 expect(keys.keyboardEventMatchesKeys(event, '+')).to.be.equal(true);
237 });
238
239 test('handles `:`', function() {
240 var event = new CustomEvent('keydown');
241 event.key = ':';
242 expect(keys.keyboardEventMatchesKeys(event, ':')).to.be.equal(true);
243 });
244
245 test('handles ` ` (space)', function() {
246 var event = new CustomEvent('keydown');
247 event.key = ' ';
248 expect(keys.keyboardEventMatchesKeys(event, 'space')).to.be.equal(true);
249 });
170 }); 250 });
171 251
172 suite('matching keyboard events to keys', function() { 252 suite('matching keyboard events to keys', function() {
173 test('can be done imperatively', function() { 253 test('can be done imperatively', function() {
174 var event = new CustomEvent('keydown'); 254 var event = new CustomEvent('keydown');
175 event.keyCode = 65; 255 event.keyCode = 65;
176 expect(keys.keyboardEventMatchesKeys(event, 'a')).to.be.equal(true); 256 expect(keys.keyboardEventMatchesKeys(event, 'a')).to.be.equal(true);
177 }); 257 });
178 258
179 test('can be done with a provided keyboardEvent', function() { 259 test('can be done with a provided keyboardEvent', function() {
(...skipping 24 matching lines...) Expand all
204 var event = new CustomEvent('keydown'); 284 var event = new CustomEvent('keydown');
205 285
206 event.ctrlKey = true; 286 event.ctrlKey = true;
207 event.shiftKey = true; 287 event.shiftKey = true;
208 event.keyCode = event.code = 65; 288 event.keyCode = event.code = 65;
209 289
210 keys.dispatchEvent(event); 290 keys.dispatchEvent(event);
211 291
212 expect(keys.keyCount).to.be.equal(1); 292 expect(keys.keyCount).to.be.equal(1);
213 }); 293 });
294
295 test('check if KeyBoardEvent.key is alpha-numberic', function() {
296 var event = new CustomEvent('keydown');
297
298 event.ctrlKey = true;
299 event.shiftKey = true;
300 event.key = 'å';
301 event.keyCode = event.code = 65;
302
303 keys.dispatchEvent(event);
304
305 expect(keys.keyCount).to.be.equal(1);
306 });
307
308 test('trigger also bindings without modifiers', function() {
309 var event = new CustomEvent('keydown');
310 // Combo `shift+enter`.
311 event.shiftKey = true;
312 event.keyCode = event.code = 13;
313 keys.dispatchEvent(event);
314 expect(keys.keyCount).to.be.equal(2);
315 });
316
317 test('give precendence to combos with modifiers', function() {
318 var enterSpy = sinon.spy(keys, '_keyHandler2');
319 var shiftEnterSpy = sinon.spy(keys, '_keyHandler');
320 var event = new CustomEvent('keydown');
321 // Combo `shift+enter`.
322 event.shiftKey = true;
323 event.keyCode = event.code = 13;
324 keys.dispatchEvent(event);
325 expect(enterSpy.called).to.be.true;
326 expect(shiftEnterSpy.called).to.be.true;
327 expect(enterSpy.calledAfter(shiftEnterSpy)).to.be.true;
328 });
329
214 }); 330 });
215 331
216 suite('alternative event keys', function() { 332 suite('alternative event keys', function() {
217 setup(function() { 333 setup(function() {
218 keys = fixture('AlternativeEventKeys'); 334 keys = fixture('AlternativeEventKeys');
219 }); 335 });
220 336
221 test('trigger on the specified alternative keyboard event', function() { 337 test('trigger on the specified alternative keyboard event', function() {
222 MockInteractions.keyDownOn(keys, 32); 338 MockInteractions.keyDownOn(keys, 32);
223 339
224 expect(keys.keyCount).to.be.equal(0); 340 expect(keys.keyCount).to.be.equal(0);
225 341
226 MockInteractions.keyUpOn(keys, 32); 342 MockInteractions.keyUpOn(keys, 32);
227 343
228 expect(keys.keyCount).to.be.equal(1); 344 expect(keys.keyCount).to.be.equal(1);
229 }); 345 });
230 }); 346 });
231 347
232 suite('behavior keys', function() { 348 suite('behavior keys', function() {
233 setup(function() { 349 setup(function() {
234 keys = fixture('BehaviorKeys'); 350 keys = fixture('BehaviorKeys');
235 }); 351 });
236 352
237 test('bindings in other behaviors are transitive', function() { 353 test('bindings in other behaviors are transitive', function() {
238 MockInteractions.pressEnter(keys); 354 MockInteractions.pressEnter(keys);
239 MockInteractions.pressSpace(keys); 355 expect(keys.keyCount).to.be.equal(2);
356 });
357 });
240 358
241 expect(keys.keyCount).to.be.equal(2); 359 suite('stopping propagation automatically', function() {
360 setup(function() {
361 keys = fixture('NonPropagatingKeys');
362 });
363
364 test('does not propagate key events beyond the combo handler', function() {
365 var keySpy = sinon.spy();
366
367 document.addEventListener('keydown', keySpy);
368
369 MockInteractions.pressEnter(keys);
370
371 expect(keySpy.callCount).to.be.equal(0);
372 });
373 });
374
375 suite('prevent default behavior of event', function() {
376 setup(function() {
377 keys = fixture('PreventKeys');
378 });
379
380 test('`defaultPrevented` is correctly set', function() {
381 MockInteractions.pressEnter(keys);
382 expect(keys.lastEvent.defaultPrevented).to.be.equal(true);
383 });
384
385 test('only 1 handler is invoked', function() {
386 var aSpy = sinon.spy(keys, '_keyHandler');
387 var shiftASpy = sinon.spy(keys, '_preventDefaultHandler');
388 var event = new CustomEvent('keydown', {
389 cancelable: true
390 });
391 // Combo `shift+a`.
392 event.shiftKey = true;
393 event.keyCode = event.code = 65;
394 keys.dispatchEvent(event);
395
396 expect(keys.keyCount).to.be.equal(1);
397 expect(shiftASpy.called).to.be.true;
398 expect(aSpy.called).to.be.false;
242 }); 399 });
243 }); 400 });
244 401
245 }); 402 });
246 </script> 403 </script>
247 </body> 404 </body>
248 </html> 405 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698