UNPKG

@roderickhsiao/react-i13n

Version:

[Experiment] React I13n provides a performant and scalable solution to application instrumentation.

292 lines (242 loc) 7.94 kB
"use strict"; var _I13nNode = _interopRequireDefault(require("../../core/I13nNode")); var _clickHandler = _interopRequireDefault(require("../clickHandler")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } /** * Copyright 2020, Yahoo! Inc. * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. */ var mockClickEvent; var mockOptions; describe('clickHandler', function () { var windowLocation = window.location; var windowParent = window.parent; beforeEach(function () { // http://fb.me/react-polyfills global.requestAnimationFrame = function (callback) { setTimeout(callback, 0); }; delete window.location; delete window.parent; window.location = { assign: jest.fn() }; window.parent = { top: { href: 'about:blank' }, location: { href: 'about:blank' } }; mockClickEvent = { target: {}, button: 0, preventDefault: jest.fn() }; mockOptions = { executeEvent: jest.fn(), i13nNode: new _I13nNode["default"](null, {}), props: {}, shouldFollowLink: function shouldFollowLink(_ref) { var follow = _ref.follow; return follow; } }; }); afterEach(function () { window.location = windowLocation; window.parent = windowParent; }); it('should run click handler correctly', function (done) { mockOptions.executeEvent = function (eventName) { expect(eventName).toEqual('click'); done(); }; (0, _clickHandler["default"])(mockClickEvent, mockOptions); }); it('should run click handler correctly if target is an a tag', function (done) { var executedActions = []; window.location.assign = function () { executedActions.push('assign'); expect(executedActions).toEqual(['preventDefault', 'assign']); done(); }; mockClickEvent.target = { tagName: 'A', href: 'https://foobar.com' }; mockClickEvent.preventDefault = function () { executedActions.push('preventDefault'); }; mockOptions.executeEvent = function (a, b, callback) { callback(); }; (0, _clickHandler["default"])(mockClickEvent, mockOptions); }); it('should run click handler correctly if target is an button', function (done) { var executedActions = []; mockClickEvent.target = { tagName: 'BUTTON', form: { submit: function submit() { executedActions.push('submit'); expect(executedActions).toEqual(['preventDefault', 'submit']); done(); } } }; mockClickEvent.preventDefault = function () { executedActions.push('preventDefault'); }; mockOptions.executeEvent = function (eventName, payload, callback) { callback(); }; (0, _clickHandler["default"])(mockClickEvent, mockOptions); }); it('should run click handler correctly if target is input with submit', function (done) { var executedActions = []; mockClickEvent.target = { tagName: 'INPUT', type: 'submit', form: { submit: function submit() { executedActions.push('submit'); expect(executedActions).toEqual(['preventDefault', 'submit']); done(); } } }; mockClickEvent.preventDefault = function () { executedActions.push('preventDefault'); }; mockOptions.executeEvent = function (eventName, payload, callback) { callback(); }; (0, _clickHandler["default"])(mockClickEvent, mockOptions); }); it('should not follow it if follow is set to false', function (done) { var executedActions = []; mockClickEvent.target = { tagName: 'A', href: 'https://foobar.com' }; mockClickEvent.preventDefault = function () { executedActions.push('preventDefault'); }; mockOptions.props.follow = false; mockOptions.executeEvent = function () { expect(executedActions).toEqual(['preventDefault']); done(); }; (0, _clickHandler["default"])(mockClickEvent, mockOptions); }); it('should follow it while follow is set to true', function (done) { var executedActions = []; mockClickEvent.target = { tagName: 'A', href: 'https://foobar.com' }; window.location.assign = function () { executedActions.push('assign'); expect(executedActions).toEqual(['preventDefault', 'assign']); done(); }; mockClickEvent.preventDefault = function () { executedActions.push('preventDefault'); }; mockOptions.props.follow = true; mockOptions.executeEvent = function (eventName, payload, callback) { callback(); }; (0, _clickHandler["default"])(mockClickEvent, mockOptions); }); it('should simply execute event without prevent default and redirection if the link is #', function (done) { var executedActions = []; mockClickEvent.target = { tagName: 'A' }; mockClickEvent.preventDefault = function () { executedActions.push('preventDefault'); }; mockOptions.props.href = '#'; mockOptions.executeEvent = function () { expect(executedActions).toEqual([]); done(); }; (0, _clickHandler["default"])(mockClickEvent, mockOptions); }); it('should simply execute event without prevent default and redirection is a modified click', function (done) { var executedActions = []; mockClickEvent.target = { tagName: 'A' }; mockClickEvent.metaKey = true; mockClickEvent.preventDefault = function () { executedActions.push('preventDefault'); }; mockOptions.props.href = '#'; mockOptions.executeEvent = function () { expect(executedActions).toEqual([]); done(); }; (0, _clickHandler["default"])(mockClickEvent, mockOptions); }); it('should simply execute event without prevent default and redirection if props.target=_blank', function (done) { var executedActions = []; mockClickEvent.target = { tagName: 'SPAN' }; mockClickEvent.preventDefault = function () { executedActions.push('preventDefault'); }; mockOptions.props.target = '_blank'; mockOptions.executeEvent = function () { expect(executedActions).toEqual([]); done(); }; (0, _clickHandler["default"])(mockClickEvent, mockOptions); }); it('should execute event with prevent default and redirection if props.target=_top', function (done) { var executedActions = []; window.location.assign = function () { executedActions.push('assign'); }; mockClickEvent.target = { tagName: 'A', href: 'foo' }; mockClickEvent.preventDefault = function () { executedActions.push('preventDefault'); }; mockOptions.props.target = '_top'; mockOptions.executeEvent = function (eventName, payload, callback) { callback(); expect(executedActions).toEqual(['preventDefault']); expect(global.window.top.location.href).toEqual('foo'); done(); }; (0, _clickHandler["default"])(mockClickEvent, mockOptions); }); it('should execute event with prevent default and redirection if props.target=_parent', function (done) { var executedActions = []; window.location.assign = function () { executedActions.push('assign'); }; mockClickEvent.target = { tagName: 'A', href: 'foo' }; mockClickEvent.preventDefault = function () { executedActions.push('preventDefault'); }; mockOptions.props.target = '_parent'; mockOptions.executeEvent = function (eventName, payload, callback) { callback(); expect(executedActions).toEqual(['preventDefault']); expect(global.window.parent.location.href).toEqual('foo'); done(); }; (0, _clickHandler["default"])(mockClickEvent, mockOptions); }); });