unveil
Version:
A React-based Reactive Presentation Framework
75 lines (55 loc) • 5.98 kB
JavaScript
;
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _reactAddonsTestUtils = require('react-addons-test-utils');
var _reactAddonsTestUtils2 = _interopRequireDefault(_reactAddonsTestUtils);
var _rxjs = require('rxjs');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
jest.dontMock('../KeyControls');
jest.dontMock('../Navigator');
jest.dontMock('marked');
var createNavigator = require('../Navigator').default;
var KeyControls = require('../KeyControls').default;
describe('KeyControls', function () {
var controls = undefined,
node = undefined,
navigator = undefined,
stateSubject = undefined,
mappings = undefined;
mappings = {
'left': 37,
'up': 38,
'right': 39,
'down': 40
};
beforeEach(function () {
stateSubject = new _rxjs.Subject();
navigator = createNavigator({ stateObservable: stateSubject });
stateSubject.next({ direction: [] });
navigator.next = jest.genMockFunction();
controls = _reactAddonsTestUtils2.default.renderIntoDocument(_react2.default.createElement(KeyControls, {
navigator: navigator
}));
node = _reactDom2.default.findDOMNode(controls);
});
var simulateKeyUp = function simulateKeyUp(key) {
var event = new KeyboardEvent('keyup', { 'keyCode': key });
document.dispatchEvent(event);
};
(0, _keys2.default)(mappings).forEach(function (direction) {
var key = mappings[direction];
it('calls navigate(' + direction + ') when pressing ' + direction + '-arrow-key (' + key + ')', function () {
simulateKeyUp(key);
expect(navigator.next).toBeCalledWith(direction);
});
});
it('does not react to non-mapped keyUps', function () {
simulateKeyUp(65);
expect(navigator.next).not.toBeCalled();
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL19fdGVzdHNfXy9LZXlDb250cm9scy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsS0FBSyxRQUFMLENBQWMsZ0JBQWQ7QUFDQSxLQUFLLFFBQUwsQ0FBYyxjQUFkO0FBQ0EsS0FBSyxRQUFMLENBQWMsUUFBZDs7QUFPQSxJQUFNLGtCQUFrQixRQUFRLGNBQVIsRUFBd0IsT0FBeEI7QUFDeEIsSUFBTSxjQUFrQixRQUFRLGdCQUFSLEVBQTBCLE9BQTFCOztBQUV4QixTQUFTLGFBQVQsRUFBd0IsWUFBTTtBQUM1QixNQUFJLG9CQUFKO01BQWMsZ0JBQWQ7TUFBb0IscUJBQXBCO01BQStCLHdCQUEvQjtNQUE2QyxvQkFBN0MsQ0FENEI7O0FBRzVCLGFBQVc7QUFDVCxZQUFTLEVBQVQ7QUFDQSxVQUFTLEVBQVQ7QUFDQSxhQUFTLEVBQVQ7QUFDQSxZQUFTLEVBQVQ7R0FKRixDQUg0Qjs7QUFVNUIsYUFBWSxZQUFNO0FBQ2hCLG1CQUFlLG1CQUFmLENBRGdCO0FBRWhCLGdCQUFZLGdCQUFnQixFQUFDLGlCQUFpQixZQUFqQixFQUFqQixDQUFaLENBRmdCO0FBR2hCLGlCQUFhLElBQWIsQ0FBa0IsRUFBRSxXQUFXLEVBQVgsRUFBcEIsRUFIZ0I7QUFJaEIsY0FBVSxJQUFWLEdBQWlCLEtBQUssZUFBTCxFQUFqQixDQUpnQjs7QUFNaEIsZUFBVywrQkFBVSxrQkFBVixDQUNULDhCQUFDLFdBQUQ7QUFDRSxpQkFBVyxTQUFYO0tBREYsQ0FEUyxDQUFYLENBTmdCOztBQVloQixXQUFPLG1CQUFTLFdBQVQsQ0FBcUIsUUFBckIsQ0FBUCxDQVpnQjtHQUFOLENBQVosQ0FWNEI7O0FBeUI1QixNQUFJLGdCQUFnQixTQUFoQixhQUFnQixDQUFDLEdBQUQsRUFBUztBQUMzQixRQUFJLFFBQVEsSUFBSSxhQUFKLENBQWtCLE9BQWxCLEVBQTJCLEVBQUMsV0FBVyxHQUFYLEVBQTVCLENBQVIsQ0FEdUI7QUFFM0IsYUFBUyxhQUFULENBQXVCLEtBQXZCLEVBRjJCO0dBQVQsQ0F6QlE7O0FBOEI1QixzQkFBWSxRQUFaLEVBQXNCLE9BQXRCLENBQStCLFVBQUMsU0FBRCxFQUFlO0FBQzVDLFFBQUksTUFBTSxTQUFTLFNBQVQsQ0FBTixDQUR3QztBQUU1QywyQkFBcUIsaUNBQTRCLDZCQUF3QixTQUF6RSxFQUFpRixZQUFNO0FBQ3JGLG9CQUFjLEdBQWQsRUFEcUY7QUFFckYsYUFBTyxVQUFVLElBQVYsQ0FBUCxDQUF1QixjQUF2QixDQUFzQyxTQUF0QyxFQUZxRjtLQUFOLENBQWpGLENBRjRDO0dBQWYsQ0FBL0IsQ0E5QjRCOztBQXNDNUIsNENBQTBDLFlBQU07QUFDOUMsa0JBQWMsRUFBZCxFQUQ4QztBQUU5QyxXQUFPLFVBQVUsSUFBVixDQUFQLENBQXVCLEdBQXZCLENBQTJCLFVBQTNCLEdBRjhDO0dBQU4sQ0FBMUMsQ0F0QzRCO0NBQU4sQ0FBeEIiLCJmaWxlIjoiS2V5Q29udHJvbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJqZXN0LmRvbnRNb2NrKCcuLi9LZXlDb250cm9scycpO1xuamVzdC5kb250TW9jaygnLi4vTmF2aWdhdG9yJyk7XG5qZXN0LmRvbnRNb2NrKCdtYXJrZWQnKTtcblxuaW1wb3J0IFJlYWN0ICAgICAgIGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSAgICBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFRlc3RVdGlscyAgIGZyb20gJ3JlYWN0LWFkZG9ucy10ZXN0LXV0aWxzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuY29uc3QgY3JlYXRlTmF2aWdhdG9yID0gcmVxdWlyZSgnLi4vTmF2aWdhdG9yJykuZGVmYXVsdDtcbmNvbnN0IEtleUNvbnRyb2xzICAgICA9IHJlcXVpcmUoJy4uL0tleUNvbnRyb2xzJykuZGVmYXVsdDtcblxuZGVzY3JpYmUoJ0tleUNvbnRyb2xzJywgKCkgPT4ge1xuICBsZXQgY29udHJvbHMsIG5vZGUsIG5hdmlnYXRvciwgc3RhdGVTdWJqZWN0LCBtYXBwaW5ncztcblxuICBtYXBwaW5ncyA9IHtcbiAgICAnbGVmdCc6ICAzNyxcbiAgICAndXAnOiAgICAzOCxcbiAgICAncmlnaHQnOiAzOSxcbiAgICAnZG93bic6ICA0MFxuICB9O1xuXG4gIGJlZm9yZUVhY2goICgpID0+IHtcbiAgICBzdGF0ZVN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICAgIG5hdmlnYXRvciA9IGNyZWF0ZU5hdmlnYXRvcih7c3RhdGVPYnNlcnZhYmxlOiBzdGF0ZVN1YmplY3R9KTtcbiAgICBzdGF0ZVN1YmplY3QubmV4dCh7IGRpcmVjdGlvbjogW10gfSk7XG4gICAgbmF2aWdhdG9yLm5leHQgPSBqZXN0Lmdlbk1vY2tGdW5jdGlvbigpO1xuXG4gICAgY29udHJvbHMgPSBUZXN0VXRpbHMucmVuZGVySW50b0RvY3VtZW50KCAoXG4gICAgICA8S2V5Q29udHJvbHNcbiAgICAgICAgbmF2aWdhdG9yPXtuYXZpZ2F0b3J9XG4gICAgICA+XG4gICAgICA8L0tleUNvbnRyb2xzPikpO1xuXG4gICAgbm9kZSA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKGNvbnRyb2xzKTtcbiAgfSk7XG5cbiAgbGV0IHNpbXVsYXRlS2V5VXAgPSAoa2V5KSA9PiB7XG4gICAgbGV0IGV2ZW50ID0gbmV3IEtleWJvYXJkRXZlbnQoJ2tleXVwJywgeydrZXlDb2RlJzoga2V5fSk7XG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH07XG5cbiAgT2JqZWN0LmtleXMobWFwcGluZ3MpLmZvckVhY2goIChkaXJlY3Rpb24pID0+IHtcbiAgICBsZXQga2V5ID0gbWFwcGluZ3NbZGlyZWN0aW9uXTtcbiAgICBpdChgY2FsbHMgbmF2aWdhdGUoJHtkaXJlY3Rpb259KSB3aGVuIHByZXNzaW5nICR7ZGlyZWN0aW9ufS1hcnJvdy1rZXkgKCR7a2V5fSlgLCAoKSA9PiB7XG4gICAgICBzaW11bGF0ZUtleVVwKGtleSk7XG4gICAgICBleHBlY3QobmF2aWdhdG9yLm5leHQpLnRvQmVDYWxsZWRXaXRoKGRpcmVjdGlvbik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KGBkb2VzIG5vdCByZWFjdCB0byBub24tbWFwcGVkIGtleVVwc2AsICgpID0+IHtcbiAgICBzaW11bGF0ZUtleVVwKDY1KTtcbiAgICBleHBlY3QobmF2aWdhdG9yLm5leHQpLm5vdC50b0JlQ2FsbGVkKCk7XG4gIH0pO1xuXG59KTtcbiJdfQ==