UNPKG

@ray-core/runtime

Version:

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

331 lines (330 loc) 13.6 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; 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 React = __importStar(require("react")); require("./helpers/setupGlobals"); var View_1 = __importDefault(require("./helpers/View")); var render_1 = __importDefault(require("../render")); var instanceId_1 = require("../instanceId"); var Container_1 = __importDefault(require("../Container")); var hooks_1 = require("../hooks"); var framework_shared_1 = require("@ray-core/framework-shared"); var p = { setData: function (state, callback) { setTimeout(function () { if (typeof callback === 'function') { callback(); } }); }, }; describe('remax render', function () { beforeAll(function () { framework_shared_1.RuntimeOptions.apply({ platform: 'toutiao' }); }); afterEach(function () { framework_shared_1.RuntimeOptions.reset(); (0, instanceId_1.reset)(); }); it('render correctly', function () { var Page = function () { return React.createElement(View_1.default, { className: "foo" }, "hello"); }; var container = new Container_1.default(p); (0, render_1.default)(React.createElement(Page, null), container); expect(container.root).toMatchSnapshot(); }); it('insert new element', function () { var Page = /** @class */ (function (_super) { __extends(Page, _super); function Page() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.state = { list: [1, 3], }; return _this; } Page.prototype.update = function () { this.setState({ list: [1, 2, 3], }); }; Page.prototype.render = function () { var list = this.state.list; return (React.createElement(View_1.default, null, list.map(function (i) { return (React.createElement(View_1.default, { key: i }, i)); }))); }; return Page; }(React.Component)); var container = new Container_1.default(p); var page = React.createRef(); (0, render_1.default)(React.createElement(Page, { ref: page }), container); expect(container.root).toMatchSnapshot(); page.current.update(); expect(container.root).toMatchSnapshot(); }); it("change elements' order", function () { var Page = /** @class */ (function (_super) { __extends(Page, _super); function Page() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.state = { list: [1, 2, 3], }; return _this; } Page.prototype.updateA = function () { this.setState({ list: [2, 1, 3], }); }; Page.prototype.updateB = function () { this.setState({ list: [2, 3, 1], }); }; Page.prototype.render = function () { var list = this.state.list; return (React.createElement(View_1.default, null, list.map(function (i) { return (React.createElement(View_1.default, { key: i }, i)); }))); }; return Page; }(React.Component)); var container = new Container_1.default(p); var page = React.createRef(); (0, render_1.default)(React.createElement(Page, { ref: page }), container); expect(container.root).toMatchSnapshot(); page.current.updateA(); expect(container.root).toMatchSnapshot(); page.current.updateB(); expect(container.root).toMatchSnapshot(); }); it('umount component', function () { var Page = /** @class */ (function (_super) { __extends(Page, _super); function Page() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.state = { show: true, }; return _this; } Page.prototype.hide = function () { this.setState({ show: false }); }; Page.prototype.render = function () { return React.createElement(View_1.default, null, this.state.show && React.createElement(View_1.default, null, "foo")); }; return Page; }(React.Component)); var container = new Container_1.default(p); var page = React.createRef(); (0, render_1.default)(React.createElement(Page, { ref: page }), container); expect(container.root).toMatchSnapshot(); page.current.hide(); expect(container.root).toMatchSnapshot(); }); it('renders style', function () { var Page = function () { return React.createElement(View_1.default, { style: { width: '100px', height: '100px' } }, "hello"); }; var container = new Container_1.default(p); (0, render_1.default)(React.createElement(Page, null), container); expect(container.root).toMatchSnapshot(); }); it('renders vendor prefix style', function () { var Page = function () { return React.createElement(View_1.default, { style: { WebkitLineClamp: 2, height: '100px' } }, "hello"); }; var container = new Container_1.default(p); (0, render_1.default)(React.createElement(Page, null), container); expect(container.root).toMatchSnapshot(); }); it('renders empty style', function () { var Page = function () { return React.createElement(View_1.default, { style: undefined }, "hello"); }; var container = new Container_1.default(p); (0, render_1.default)(React.createElement(Page, null), container); expect(container.root).toMatchSnapshot(); }); it('renders conditional fragment correctly', function () { var Page = /** @class */ (function (_super) { __extends(Page, _super); function Page() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.state = { show: false, }; return _this; } Page.prototype.show = function () { this.setState({ show: true }); }; Page.prototype.render = function () { if (this.state.show) { return React.createElement(View_1.default, null, "foo"); } return (React.createElement(React.Fragment, null, React.createElement(View_1.default, null, "one"), React.createElement(View_1.default, null, "two"))); }; return Page; }(React.Component)); var container = new Container_1.default(p); var page = React.createRef(); (0, render_1.default)(React.createElement(Page, { ref: page }), container); expect(container.root).toMatchSnapshot(); page.current.show(); expect(container.root).toMatchSnapshot(); }); it('render native component correctly', function () { var NativeComponent = function (_a) { var fooBar = _a.fooBar, onClick = _a.onClick, className = _a.className; return React.createElement('native-component', { fooBar: fooBar, className: className, onClick: onClick, }); }; var actions = []; var p = { setData: function (data) { return actions.push(data); }, }; var container = new Container_1.default(p); (0, render_1.default)(React.createElement(NativeComponent, { fooBar: "fooBar", onClick: function () { return void 0; }, className: "class" }), container); expect(actions).toMatchSnapshot(); }); }); it('create proxy for onClick callback', function () { var view = React.createRef(); var handleClick = function (event) { expect(event.stopPropagation).not.toBeUndefined(); }; var handleAnimationStart = function (event) { expect(event.stopPropagation).toBeUndefined(); }; var Page = /** @class */ (function (_super) { __extends(Page, _super); function Page() { return _super !== null && _super.apply(this, arguments) || this; } Page.prototype.render = function () { return React.createElement(View_1.default, { ref: view, onClick: handleClick, onAnimationStart: handleAnimationStart }); }; return Page; }(React.Component)); var container = new Container_1.default(p); (0, render_1.default)(React.createElement(Page, null), container); function findFn(name) { var fnKeys = Object.keys(view.current.container.context); var fnKey = fnKeys.find(function (key) { return key.indexOf(name) !== -1; }) || ''; return view.current.container.context[fnKey]; } var newHandleClick = findFn('onClick'); var newHandleAnimationStart = findFn('onAnimationStart'); newHandleClick({}); newHandleAnimationStart({}); }); it('useEffect works', function (done) { var Page = function () { React.useEffect(function () { done(); }); return React.createElement(View_1.default, null, "app"); }; var container = new Container_1.default(p); (0, render_1.default)(React.createElement(Page, null), container); }); it('useNativeEffect once works', function (done) { var count = 0; var Page = function () { var _a = __read(React.useState(0), 2), width = _a[0], setWidth = _a[1]; (0, hooks_1.useNativeEffect)(function () { count += 1; setTimeout(function () { if (count === 1) { done(); } }, 500); }, []); React.useEffect(function () { setTimeout(function () { setWidth(100); }, 100); }, []); return React.createElement(View_1.default, null, width); }; var container = new Container_1.default(p); (0, render_1.default)(React.createElement(Page, null), container); }); it('useNativeEffect deps works', function (done) { var count = 0; var Page = function () { var _a = __read(React.useState(0), 2), width = _a[0], setWidth = _a[1]; var _b = __read(React.useState(0), 2), height = _b[0], setheight = _b[1]; (0, hooks_1.useNativeEffect)(function () { count += 1; if (count === 2) { done(); } }, [width]); React.useEffect(function () { setheight(100); setTimeout(function () { setWidth(100); }, 1000); }, []); return (React.createElement(View_1.default, null, width, height)); }; var container = new Container_1.default(p); (0, render_1.default)(React.createElement(Page, null), container); });