From c30e56a09a5925d21db7d77afdb353e6d1ebbdea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8A=9B=E7=9A=93?= Date: Thu, 26 Nov 2020 15:20:26 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E9=87=8D=E6=9E=84=E9=83=A8=E5=88=86?= =?UTF-8?q?=20reducer=20chore(test):=20=E5=A2=9E=E5=8A=A0=20bus=20/=20env?= =?UTF-8?q?=20/=20reducer=20=E9=83=A8=E5=88=86=E5=8D=95=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/editor-preset-vision/src/editor.ts | 4 +- .../downgrade-schema-reducer.ts | 15 --- .../src/props-reducers/upgrade-reducer.ts | 17 ++- .../props-reducer/upgrade-schema.test.ts | 107 ++++++++++++++++++ .../tests/vision-api/api-export.test.ts | 2 - .../tests/vision-api/pages.test.ts | 2 +- 6 files changed, 126 insertions(+), 21 deletions(-) create mode 100644 packages/editor-preset-vision/tests/props-reducer/upgrade-schema.test.ts diff --git a/packages/editor-preset-vision/src/editor.ts b/packages/editor-preset-vision/src/editor.ts index 889cd8d91..a04b21496 100644 --- a/packages/editor-preset-vision/src/editor.ts +++ b/packages/editor-preset-vision/src/editor.ts @@ -13,7 +13,7 @@ import { deepValueParser } from './deep-value-parser'; import { liveEditingRule, liveEditingSaveHander } from './vc-live-editing'; import { compatibleReducer, - compatiblePageReducer, + upgradePageLifeCyclesReducer, stylePropsReducer, upgradePropsReducer, filterReducer, @@ -54,7 +54,7 @@ designer.addPropsReducer(filterReducer, TransformStage.Render); // FIXME: Dirty fix, will remove this reducer designer.addPropsReducer(compatibleReducer, TransformStage.Save); // 兼容历史版本的 Page 组件 -designer.addPropsReducer(compatiblePageReducer, TransformStage.Save); +designer.addPropsReducer(upgradePageLifeCyclesReducer, TransformStage.Save); // 设计器组件样式处理 designer.addPropsReducer(stylePropsReducer, TransformStage.Render); diff --git a/packages/editor-preset-vision/src/props-reducers/downgrade-schema-reducer.ts b/packages/editor-preset-vision/src/props-reducers/downgrade-schema-reducer.ts index 709d4390c..65186ea81 100644 --- a/packages/editor-preset-vision/src/props-reducers/downgrade-schema-reducer.ts +++ b/packages/editor-preset-vision/src/props-reducers/downgrade-schema-reducer.ts @@ -1,4 +1,3 @@ -import { getConvertedExtraKey } from '@ali/lowcode-designer'; import { isPlainObject, } from '@ali/lowcode-utils'; @@ -35,17 +34,3 @@ export function compatibleReducer(props: any) { }); return newProps; } - -export function compatiblePageReducer(props: any, node: Node) { - const lifeCycleNames = ['didMount', 'willUnmount']; - if (node.isRoot()) { - lifeCycleNames.forEach(key => { - if (props[key]) { - const lifeCycles = node.props.getPropValue(getConvertedExtraKey('lifeCycles')) || {}; - lifeCycles[key] = props[key]; - node.props.setPropValue(getConvertedExtraKey('lifeCycles'), lifeCycles); - } - }); - } - return props; -} diff --git a/packages/editor-preset-vision/src/props-reducers/upgrade-reducer.ts b/packages/editor-preset-vision/src/props-reducers/upgrade-reducer.ts index 38bbca7ff..abe93a454 100644 --- a/packages/editor-preset-vision/src/props-reducers/upgrade-reducer.ts +++ b/packages/editor-preset-vision/src/props-reducers/upgrade-reducer.ts @@ -1,3 +1,4 @@ +import { getConvertedExtraKey } from '@ali/lowcode-designer'; import { isPlainObject, } from '@ali/lowcode-utils'; @@ -35,4 +36,18 @@ export function upgradePropsReducer(props: any) { newProps[key] = upgradePropsReducer(props[key]); }); return newProps; -} \ No newline at end of file +} + +export function upgradePageLifeCyclesReducer(props: any, node: Node) { + const lifeCycleNames = ['didMount', 'willUnmount']; + if (node.isRoot()) { + lifeCycleNames.forEach(key => { + if (props[key]) { + const lifeCycles = node.props.getPropValue(getConvertedExtraKey('lifeCycles')) || {}; + lifeCycles[key] = props[key]; + node.props.setPropValue(getConvertedExtraKey('lifeCycles'), lifeCycles); + } + }); + } + return props; +} diff --git a/packages/editor-preset-vision/tests/props-reducer/upgrade-schema.test.ts b/packages/editor-preset-vision/tests/props-reducer/upgrade-schema.test.ts new file mode 100644 index 000000000..b16c9b127 --- /dev/null +++ b/packages/editor-preset-vision/tests/props-reducer/upgrade-schema.test.ts @@ -0,0 +1,107 @@ +import '../fixtures/window'; +import { Node, Designer, getConvertedExtraKey } from '@ali/lowcode-designer'; +import { Editor } from '@ali/lowcode-editor-core'; +import { + upgradePropsReducer, + upgradePageLifeCyclesReducer, +} from '../../src/props-reducers/upgrade-reducer'; +import formSchema from '../fixtures/schema/form'; + +describe('upgradePropsReducer 测试', () => { + it('upgradePropsReducer 测试', () => { + const props = { + a: { + type: 'JSBlock', + value: { + componentName: 'Slot', + props: { + slotTitle: '标题', + slotName: 'title', + }, + children: [], + }, + }, + b: { + type: 'JSBlock', + value: { + componentName: 'Div', + props: {}, + }, + }, + c: { + c1: { + type: 'JSBlock', + value: { + componentName: 'Slot', + props: { + slotTitle: '标题', + slotName: 'title', + }, + }, + }, + }, + d: { + type: 'variable', + variable: 'state.a', + value: '111', + }, + __slot__haha: true, + }; + + expect(upgradePropsReducer(props)).toEqual({ + a: { + type: 'JSSlot', + title: '标题', + name: 'title', + value: [], + }, + b: { + componentName: 'Div', + props: {}, + }, + c: { + c1: { + type: 'JSSlot', + title: '标题', + name: 'title', + value: undefined, + }, + }, + d: { + type: 'JSExpression', + value: 'state.a', + mock: '111', + }, + }); + }); + + it('空值', () => { + expect(upgradePropsReducer(null)).toBeNull; + expect(upgradePropsReducer(undefined)).toBeUndefined; + }); +}); + +const editor = new Editor(); +const designer = new Designer({ editor }); +designer.project.open(formSchema); + +it('upgradePageLifeCyclesReducer 测试', () => { + const rootNode = designer.currentDocument?.rootNode; + const mockDidMount = jest.fn(); + const mockWillUnmount = jest.fn(); + upgradePageLifeCyclesReducer({ + didMount: mockDidMount, + willUnmount: mockWillUnmount, + }, rootNode); + + const lifeCycles = rootNode?.getPropValue(getConvertedExtraKey('lifeCycles')); + + expect(typeof lifeCycles.didMount).toBe('function'); + expect(typeof lifeCycles.willUnmount).toBe('function'); + + lifeCycles.didMount(); + lifeCycles.willUnmount(); + + expect(mockDidMount).toHaveBeenCalled(); + expect(mockWillUnmount).toHaveBeenCalled(); +}); diff --git a/packages/editor-preset-vision/tests/vision-api/api-export.test.ts b/packages/editor-preset-vision/tests/vision-api/api-export.test.ts index 50278dc72..8da131447 100644 --- a/packages/editor-preset-vision/tests/vision-api/api-export.test.ts +++ b/packages/editor-preset-vision/tests/vision-api/api-export.test.ts @@ -2,8 +2,6 @@ import set from 'lodash/set'; import cloneDeep from 'lodash/clonedeep'; import '../fixtures/window'; // import { Project } from '../../src/project/project'; -// import { Node } from '../../src/document/node/node'; -// import { Designer } from '../../src/designer/designer'; import formSchema from '../fixtures/schema/form'; import VisualEngine, { designer, diff --git a/packages/editor-preset-vision/tests/vision-api/pages.test.ts b/packages/editor-preset-vision/tests/vision-api/pages.test.ts index a6567bd24..87b04db0a 100644 --- a/packages/editor-preset-vision/tests/vision-api/pages.test.ts +++ b/packages/editor-preset-vision/tests/vision-api/pages.test.ts @@ -63,7 +63,7 @@ describe('VisualEngine.Pages 相关 API 测试', () => { // slot 会多出(1 + N)个节点 expect(doc.nodesMap.size).toBe(expectedNodeCnt + 2); }); - it.only('基本的节点模型初始化,初始化传入 schema,构造 prototype', () => { + it('基本的节点模型初始化,初始化传入 schema,构造 prototype', () => { const proto = new Prototype(divPrototypeConfig); const doc = VisualEngine.Pages.addPage(pageSchema)!; expect(doc).toBeTruthy();