Index: polymer_1.2.3/bower_components/iron-a11y-keys-behavior/test/basic-test.html |
diff --git a/polymer_1.0.4/bower_components/iron-a11y-keys-behavior/test/basic-test.html b/polymer_1.2.3/bower_components/iron-a11y-keys-behavior/test/basic-test.html |
similarity index 56% |
copy from polymer_1.0.4/bower_components/iron-a11y-keys-behavior/test/basic-test.html |
copy to polymer_1.2.3/bower_components/iron-a11y-keys-behavior/test/basic-test.html |
index 8e50c92b4091a203acb5a71e1a0fc325283c8e48..1631ff46250f965fbd8e0a1a0fbd616f27f874c7 100644 |
--- a/polymer_1.0.4/bower_components/iron-a11y-keys-behavior/test/basic-test.html |
+++ b/polymer_1.2.3/bower_components/iron-a11y-keys-behavior/test/basic-test.html |
@@ -16,11 +16,9 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN |
<script src="../../webcomponentsjs/webcomponents-lite.js"></script> |
<script src="../../web-component-tester/browser.js"></script> |
- <script src="../../test-fixture/test-fixture-mocha.js"></script> |
<script src="../../iron-test-helpers/mock-interactions.js"></script> |
<link rel="import" href="../../polymer/polymer.html"> |
- <link rel="import" href="../../test-fixture/test-fixture.html"> |
<link rel="import" href="../iron-a11y-keys-behavior.html"> |
</head> |
<body> |
@@ -30,6 +28,12 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN |
</template> |
</test-fixture> |
+ <test-fixture id="NonPropagatingKeys"> |
+ <template> |
+ <x-a11y-basic-keys stop-keyboard-event-propagation></x-a11y-basic-keys> |
+ </template> |
+ </test-fixture> |
+ |
<test-fixture id="ComboKeys"> |
<template> |
<x-a11y-combo-keys></x-a11y-combo-keys> |
@@ -48,6 +52,12 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN |
</template> |
</test-fixture> |
+ <test-fixture id="PreventKeys"> |
+ <template> |
+ <x-a11y-prevent-keys></x-a11y-prevent-keys> |
+ </template> |
+ </test-fixture> |
+ |
<script> |
suite('Polymer.IronA11yKeysBehavior', function() { |
var keys; |
@@ -64,6 +74,18 @@ suite('Polymer.IronA11yKeysBehavior', function() { |
_keyHandler: function(event) { |
this.keyCount++; |
this.lastEvent = event; |
+ }, |
+ |
+ // Same as _keyHandler, used to distinguish who's called before who. |
+ _keyHandler2: function(event) { |
+ this.keyCount++; |
+ this.lastEvent = event; |
+ }, |
+ |
+ _preventDefaultHandler: function(event) { |
+ event.preventDefault(); |
+ this.keyCount++; |
+ this.lastEvent = event; |
} |
}]; |
@@ -75,7 +97,8 @@ suite('Polymer.IronA11yKeysBehavior', function() { |
], |
keyBindings: { |
- 'space': '_keyHandler' |
+ 'space': '_keyHandler', |
+ '@': '_keyHandler' |
} |
}); |
@@ -87,7 +110,8 @@ suite('Polymer.IronA11yKeysBehavior', function() { |
], |
keyBindings: { |
- 'ctrl+shift+a': '_keyHandler' |
+ 'enter': '_keyHandler2', |
+ 'ctrl+shift+a shift+enter': '_keyHandler' |
} |
}); |
@@ -118,7 +142,21 @@ suite('Polymer.IronA11yKeysBehavior', function() { |
], |
keyBindings: { |
- 'space': '_keyHandler' |
+ 'enter': '_keyHandler' |
+ } |
+ }); |
+ |
+ Polymer({ |
+ is: 'x-a11y-prevent-keys', |
+ |
+ behaviors: [ |
+ KeysTestBehavior, |
+ XA11yBehavior |
+ ], |
+ |
+ keyBindings: { |
+ 'space a': '_keyHandler', |
+ 'enter shift+a': '_preventDefaultHandler' |
} |
}); |
}); |
@@ -134,6 +172,21 @@ suite('Polymer.IronA11yKeysBehavior', function() { |
expect(keys.keyCount).to.be.equal(1); |
}); |
+ test('trigger the handler when the specified key is pressed together with a modifier', function() { |
+ var event = new CustomEvent('keydown'); |
+ event.ctrlKey = true; |
+ event.keyCode = event.code = 32; |
+ keys.dispatchEvent(event); |
+ expect(keys.keyCount).to.be.equal(1); |
+ }); |
+ |
+ test('handles special character @', function() { |
+ var event = new CustomEvent('keydown'); |
+ event.key = '@'; |
+ keys.dispatchEvent(event); |
+ expect(keys.keyCount).to.be.equal(1); |
+ }); |
+ |
test('do not trigger the handler for non-specified keys', function() { |
MockInteractions.pressEnter(keys); |
@@ -161,12 +214,39 @@ suite('Polymer.IronA11yKeysBehavior', function() { |
expect(keys.keyCount).to.be.equal(1); |
}); |
+ test('allows propagation beyond the key combo handler', function() { |
+ var keySpy = sinon.spy(); |
+ document.addEventListener('keydown', keySpy); |
+ |
+ MockInteractions.pressEnter(keys); |
+ |
+ expect(keySpy.callCount).to.be.equal(1); |
+ }); |
+ |
suite('edge cases', function() { |
test('knows that `spacebar` is the same as `space`', function() { |
var event = new CustomEvent('keydown'); |
event.key = 'spacebar'; |
expect(keys.keyboardEventMatchesKeys(event, 'space')).to.be.equal(true); |
}); |
+ |
+ test('handles `+`', function() { |
+ var event = new CustomEvent('keydown'); |
+ event.key = '+'; |
+ expect(keys.keyboardEventMatchesKeys(event, '+')).to.be.equal(true); |
+ }); |
+ |
+ test('handles `:`', function() { |
+ var event = new CustomEvent('keydown'); |
+ event.key = ':'; |
+ expect(keys.keyboardEventMatchesKeys(event, ':')).to.be.equal(true); |
+ }); |
+ |
+ test('handles ` ` (space)', function() { |
+ var event = new CustomEvent('keydown'); |
+ event.key = ' '; |
+ expect(keys.keyboardEventMatchesKeys(event, 'space')).to.be.equal(true); |
+ }); |
}); |
suite('matching keyboard events to keys', function() { |
@@ -211,6 +291,42 @@ suite('Polymer.IronA11yKeysBehavior', function() { |
expect(keys.keyCount).to.be.equal(1); |
}); |
+ |
+ test('check if KeyBoardEvent.key is alpha-numberic', function() { |
+ var event = new CustomEvent('keydown'); |
+ |
+ event.ctrlKey = true; |
+ event.shiftKey = true; |
+ event.key = 'å'; |
+ event.keyCode = event.code = 65; |
+ |
+ keys.dispatchEvent(event); |
+ |
+ expect(keys.keyCount).to.be.equal(1); |
+ }); |
+ |
+ test('trigger also bindings without modifiers', function() { |
+ var event = new CustomEvent('keydown'); |
+ // Combo `shift+enter`. |
+ event.shiftKey = true; |
+ event.keyCode = event.code = 13; |
+ keys.dispatchEvent(event); |
+ expect(keys.keyCount).to.be.equal(2); |
+ }); |
+ |
+ test('give precendence to combos with modifiers', function() { |
+ var enterSpy = sinon.spy(keys, '_keyHandler2'); |
+ var shiftEnterSpy = sinon.spy(keys, '_keyHandler'); |
+ var event = new CustomEvent('keydown'); |
+ // Combo `shift+enter`. |
+ event.shiftKey = true; |
+ event.keyCode = event.code = 13; |
+ keys.dispatchEvent(event); |
+ expect(enterSpy.called).to.be.true; |
+ expect(shiftEnterSpy.called).to.be.true; |
+ expect(enterSpy.calledAfter(shiftEnterSpy)).to.be.true; |
+ }); |
+ |
}); |
suite('alternative event keys', function() { |
@@ -236,12 +352,53 @@ suite('Polymer.IronA11yKeysBehavior', function() { |
test('bindings in other behaviors are transitive', function() { |
MockInteractions.pressEnter(keys); |
- MockInteractions.pressSpace(keys); |
- |
expect(keys.keyCount).to.be.equal(2); |
}); |
}); |
+ suite('stopping propagation automatically', function() { |
+ setup(function() { |
+ keys = fixture('NonPropagatingKeys'); |
+ }); |
+ |
+ test('does not propagate key events beyond the combo handler', function() { |
+ var keySpy = sinon.spy(); |
+ |
+ document.addEventListener('keydown', keySpy); |
+ |
+ MockInteractions.pressEnter(keys); |
+ |
+ expect(keySpy.callCount).to.be.equal(0); |
+ }); |
+ }); |
+ |
+ suite('prevent default behavior of event', function() { |
+ setup(function() { |
+ keys = fixture('PreventKeys'); |
+ }); |
+ |
+ test('`defaultPrevented` is correctly set', function() { |
+ MockInteractions.pressEnter(keys); |
+ expect(keys.lastEvent.defaultPrevented).to.be.equal(true); |
+ }); |
+ |
+ test('only 1 handler is invoked', function() { |
+ var aSpy = sinon.spy(keys, '_keyHandler'); |
+ var shiftASpy = sinon.spy(keys, '_preventDefaultHandler'); |
+ var event = new CustomEvent('keydown', { |
+ cancelable: true |
+ }); |
+ // Combo `shift+a`. |
+ event.shiftKey = true; |
+ event.keyCode = event.code = 65; |
+ keys.dispatchEvent(event); |
+ |
+ expect(keys.keyCount).to.be.equal(1); |
+ expect(shiftASpy.called).to.be.true; |
+ expect(aSpy.called).to.be.false; |
+ }); |
+ }); |
+ |
}); |
</script> |
</body> |