basic-test.html 3.79 KB
<!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>