@roderickhsiao/react-i13n
Version:
[Experiment] React I13n provides a performant and scalable solution to application instrumentation.
292 lines (242 loc) • 7.94 kB
JavaScript
;
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);
});
});