UNPKG

@ray-core/runtime

Version:

Ray 是一个全新的基于 React 的小程序开发框架

203 lines (202 loc) 7.41 kB
"use strict"; var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var createCallbackProxy_1 = require("../SyntheticEvent/createCallbackProxy"); var VNode_1 = __importDefault(require("../VNode")); var Container_1 = __importDefault(require("../Container")); var SyntheticEventTester = /** @class */ (function () { function SyntheticEventTester(params) { var _this = this; this.callbacks = []; var container = new Container_1.default({}); var root = new VNode_1.default({ type: 'view', container: container, }); params.reverse().reduce(function (parent, _a, index) { var _b = __read(_a, 2), cb = _b[0], event = _b[1]; var node = new VNode_1.default({ type: 'view', container: container, props: {}, }); var callback = (0, createCallbackProxy_1.createCallbackProxy)(event, node, cb || (function () { return void 0; })); if (cb) { node.props[event] = callback; } _this.callbacks.unshift(cb ? callback : null); node.parent = parent; return node; }, root); } SyntheticEventTester.prototype.trigger = function () { this.callbacks.forEach(function (cb) { return cb && cb({}); }); }; return SyntheticEventTester; }()); describe('synthetic event', function () { describe('stop propagation', function () { it('only accept valid type', function () { var onTap = function () { return void 0; }; var node = new VNode_1.default({ type: 'view', container: new Container_1.default({}), props: {}, }); var newOnTap = (0, createCallbackProxy_1.createCallbackProxy)('onClick', node, onTap); expect(onTap).not.toBe(newOnTap); var catchTap = function () { return void 0; }; var newCatchTap = (0, createCallbackProxy_1.createCallbackProxy)('catchClick', node, catchTap); expect(catchTap).toBe(newCatchTap); }); it('normal', function () { var first = jest.fn(); var second = jest.fn(); var third = jest.fn(); var callbacks = [ [first, 'onClick'], [second, 'onClick'], [third, 'onClick'], ]; var tester = new SyntheticEventTester(callbacks); tester.trigger(); expect(first).toBeCalled(); expect(second).toBeCalled(); expect(third).toBeCalled(); }); it('works if no event param', function () { var onTap = function () { return void 0; }; var node = new VNode_1.default({ type: 'view', container: new Container_1.default({}), props: {}, }); var newOnTap = (0, createCallbackProxy_1.createCallbackProxy)('onClick', node, onTap); expect(function () { return newOnTap(); }).not.toThrow(); }); it('each type works independent', function () { var first = jest.fn(); var second = jest.fn(); var third = jest.fn(); var callbacks = [ [ function (e) { e.stopPropagation(); first(); }, 'onClick', ], [third, 'onClick'], [second, 'onTouchStart'], ]; var tester = new SyntheticEventTester(callbacks); tester.trigger(); expect(first).toBeCalled(); expect(second).toBeCalled(); expect(third).not.toBeCalled(); tester.trigger(); expect(first).toBeCalled(); expect(second).toBeCalled(); expect(third).not.toBeCalled(); }); it('stop at first', function () { var first = jest.fn(); var second = jest.fn(); var third = jest.fn(); var callbacks = [ [ function (e) { e.stopPropagation(); first(); }, 'onClick', ], [second, 'onClick'], [third, 'onClick'], ]; var tester = new SyntheticEventTester(callbacks); tester.trigger(); expect(first).toBeCalled(); expect(second).not.toBeCalled(); expect(third).not.toBeCalled(); tester.trigger(); expect(first).toBeCalled(); expect(second).not.toBeCalled(); expect(third).not.toBeCalled(); }); it('stop at middle', function () { var first = jest.fn(); var second = jest.fn(); var third = jest.fn(); var callbacks = [ [first, 'onClick'], [null, 'onClick'], [ function (e) { e.stopPropagation(); second(); }, 'onClick', ], [null, 'onClick'], [third, 'onClick'], [null, 'onClick'], ]; var tester = new SyntheticEventTester(callbacks); tester.trigger(); expect(first).toBeCalled(); expect(second).toBeCalled(); expect(third).not.toBeCalled(); tester.trigger(); expect(first).toBeCalled(); expect(second).toBeCalled(); expect(third).not.toBeCalled(); }); it('stop at last', function () { var first = jest.fn(); var second = jest.fn(); var third = jest.fn(); var callbacks = [ [first, 'onClick'], [null, 'onClick'], [second, 'onClick'], [null, 'onClick'], [ function (e) { e.stopPropagation(); third(); }, 'onClick', ], [null, 'onClick'], ]; var tester = new SyntheticEventTester(callbacks); tester.trigger(); expect(first).toBeCalled(); expect(second).toBeCalled(); expect(third).toBeCalled(); tester.trigger(); expect(first).toBeCalled(); expect(second).toBeCalled(); expect(third).toBeCalled(); }); }); });