<!doctype html> <!-- @license Copyright (c) 2015 The Polymer Project Authors. All rights reserved. This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> <title>iron-a11y-keys</title> <script src="../../webcomponentsjs/webcomponents-lite.js"></script> <script src="../../web-component-tester/browser.js"></script> <script src="../../test-fixture/test-fixture-mocha.js"></script> <link rel="import" href="../../iron-test-helpers/iron-test-helpers.html"> <link rel="import" href="../../test-fixture/test-fixture.html"> <link rel="import" href="../iron-a11y-keys.html"> </head> <body> <test-fixture id="BasicKeys"> <template> <iron-a11y-keys></iron-a11y-keys> </template> </test-fixture> <script> suite('<iron-a11y-keys>', function() { var keys; setup(function() { keys = fixture('BasicKeys'); }); test('target is parentNode by default', function() { expect(keys.target).to.be.equal(keys.parentNode); }); suite('keys attribute', function() { test('causes an event listener to be added', function(done) { keys.keys = 'space'; keys.addEventListener('keys-pressed', function() { done(); }); Polymer.Base.async(function() { MockInteractions.pressSpace(keys.parentNode); }); }); test('will not trigger events for non-specified keys', function() { var keysPressedCount = 0; keys.keys = 'space'; keys.addEventListener('keys-pressed', function() { keysPressedCount++; }); MockInteractions.pressSpace(keys.parentNode); MockInteractions.pressEnter(keys.parentNode); expect(keysPressedCount).to.be.equal(1); }); test('triggers events for space separated keys', function() { var keysPressed = ''; keys.keys = 'a b c'; keys.addEventListener('keys-pressed', function(event) { keysPressed += event.detail.key; }); MockInteractions.pressAndReleaseKeyOn(keys.parentNode, 65); MockInteractions.pressAndReleaseKeyOn(keys.parentNode, 66); MockInteractions.pressAndReleaseKeyOn(keys.parentNode, 67); expect(keysPressed).to.be.equal('abc'); }); }); suite('event listeners', function() { test('listeners are only active when element is in document', function() { var keysPressedCount = 0; var parent = keys.parentNode; keys.keys = 'space'; keys.addEventListener('keys-pressed', function(event) { keysPressedCount++; }); MockInteractions.pressSpace(parent); expect(keysPressedCount).to.be.equal(1); keys.parentNode.removeChild(keys); TestHelpers.flushAsynchronousOperations(); MockInteractions.pressSpace(parent); expect(keysPressedCount).to.be.equal(1); parent.appendChild(keys); TestHelpers.flushAsynchronousOperations(); MockInteractions.pressSpace(parent); expect(keysPressedCount).to.be.equal(2); }); }); }); </script> </body> </html>