mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-03-01 13:40:41 +00:00
207 lines
6.6 KiB
TypeScript
207 lines
6.6 KiB
TypeScript
import '../../fixtures/window';
|
||
import { set } from '../../utils';
|
||
import { Editor } from '@ali/lowcode-editor-core';
|
||
import { Project } from '../../../src/project/project';
|
||
import { DocumentModel } from '../../../src/document/document-model';
|
||
import {
|
||
isRootNode,
|
||
Node,
|
||
isNode,
|
||
comparePosition,
|
||
contains,
|
||
insertChild,
|
||
insertChildren,
|
||
} from '../../../src/document/node/node';
|
||
import { Designer } from '../../../src/designer/designer';
|
||
import formSchema from '../../fixtures/schema/form';
|
||
import divMetadata from '../../fixtures/component-metadata/div';
|
||
import formMetadata from '../../fixtures/component-metadata/form';
|
||
import otherMeta from '../../fixtures/component-metadata/other';
|
||
import pageMetadata from '../../fixtures/component-metadata/page';
|
||
import rootHeaderMetadata from '../../fixtures/component-metadata/root-header';
|
||
import rootContentMetadata from '../../fixtures/component-metadata/root-content';
|
||
import rootFooterMetadata from '../../fixtures/component-metadata/root-footer';
|
||
|
||
describe('Node 方法测试', () => {
|
||
let editor: Editor;
|
||
let designer: Designer;
|
||
let project: Project;
|
||
let doc: DocumentModel;
|
||
|
||
beforeEach(() => {
|
||
editor = new Editor();
|
||
designer = new Designer({ editor });
|
||
project = designer.project;
|
||
doc = new DocumentModel(project, formSchema);
|
||
});
|
||
|
||
afterEach(() => {
|
||
project.unload();
|
||
designer.purge();
|
||
editor = null;
|
||
designer = null;
|
||
project = null;
|
||
});
|
||
|
||
it('condition / loop', () => {});
|
||
|
||
describe('getSuitablePlace', () => {
|
||
it('root,子节点中有容器节点', () => {
|
||
designer.createComponentMeta(pageMetadata);
|
||
designer.createComponentMeta(rootHeaderMetadata);
|
||
designer.createComponentMeta(rootContentMetadata);
|
||
designer.createComponentMeta(rootFooterMetadata);
|
||
|
||
const rootHeaderMeta = designer.getComponentMeta('RootHeader');
|
||
set(rootHeaderMeta, 'prototype.options.canDropIn', true);
|
||
|
||
let o = doc.rootNode?.getSuitablePlace(doc.getNode('form'), 1);
|
||
expect(o).toEqual({
|
||
container: doc.getNode('node_k1ow3cba'),
|
||
ref: 1,
|
||
});
|
||
|
||
set(rootHeaderMeta, 'prototype.options.canDropIn', () => true);
|
||
o = doc.rootNode?.getSuitablePlace(doc.getNode('form'), 1);
|
||
expect(o).toEqual({
|
||
container: doc.getNode('node_k1ow3cba'),
|
||
ref: 1,
|
||
});
|
||
});
|
||
|
||
it('root,直接子节点中无容器节点,自身支持放入子节点', () => {
|
||
designer.createComponentMeta(pageMetadata);
|
||
|
||
let o = doc.rootNode?.getSuitablePlace(doc.getNode('form'), 1);
|
||
|
||
const pageMeta = designer.getComponentMeta('Page');
|
||
set(pageMeta, 'prototype.options.canDropIn', () => true);
|
||
|
||
expect(o).toEqual({
|
||
container: doc.rootNode,
|
||
ref: 1,
|
||
});
|
||
|
||
set(pageMeta, 'prototype.options.canDropIn', undefined);
|
||
o = doc.rootNode?.getSuitablePlace(doc.getNode('form'), 1);
|
||
expect(o).toEqual({
|
||
container: doc.rootNode,
|
||
ref: 1,
|
||
});
|
||
|
||
set(pageMeta, 'prototype.options.canDropIn', true);
|
||
o = doc.rootNode?.getSuitablePlace(doc.getNode('form'), 1);
|
||
expect(o).toEqual({
|
||
container: doc.rootNode,
|
||
ref: 1,
|
||
});
|
||
});
|
||
|
||
it('root,子节点中无容器节点,自己也不支持放入子节点', () => {
|
||
designer.createComponentMeta(pageMetadata);
|
||
|
||
let pageMeta = designer.getComponentMeta('Page');
|
||
|
||
pageMeta = set(pageMeta, 'prototype.options.canDropIn', () => false);
|
||
let o = doc.rootNode?.getSuitablePlace(doc.getNode('form'), 1);
|
||
expect(o).toBeNull();
|
||
|
||
set(pageMeta, 'prototype.options.canDropIn', false);
|
||
o = doc.rootNode?.getSuitablePlace(doc.getNode('form'), 1);
|
||
expect(o).toBeNull();
|
||
});
|
||
|
||
it('非 root 节点,不能放入子节点', () => {
|
||
designer.createComponentMeta(formMetadata);
|
||
designer.createComponentMeta(pageMetadata);
|
||
|
||
// form 子节点以及自身都不能放入子节点
|
||
const formMeta = designer.getComponentMeta('Form');
|
||
set(formMeta, 'prototype.options.canDropIn', false);
|
||
|
||
const pageMeta = designer.getComponentMeta('Page');
|
||
set(pageMeta, 'prototype.options.canDropIn', () => true);
|
||
|
||
const o = doc.getNode('form')!.getSuitablePlace(doc.getNode('node_k1ow3cbj'), 1);
|
||
expect(o).toEqual({
|
||
container: doc.rootNode,
|
||
ref: 1,
|
||
});
|
||
});
|
||
|
||
it('非 root 节点,能放入子节点', () => {
|
||
designer.createComponentMeta(formMetadata);
|
||
designer.createComponentMeta(pageMetadata);
|
||
|
||
// form 子节点以及自身都不能放入子节点
|
||
const formMeta = designer.getComponentMeta('Form');
|
||
set(formMeta, 'prototype.options.canDropIn', true);
|
||
|
||
const o = doc.getNode('form')!.getSuitablePlace(doc.getNode('node_k1ow3cbj'), 1);
|
||
expect(o).toEqual({
|
||
container: doc.getNode('form'),
|
||
ref: 1,
|
||
});
|
||
});
|
||
|
||
it('null', () => {
|
||
expect(
|
||
doc.rootNode?.getSuitablePlace.call({ isContainer: () => false, isRoot: () => false }),
|
||
).toBeNull();
|
||
});
|
||
});
|
||
|
||
it('removeChild / replaceWith / replaceChild / insert / insertBefore / insertAfter / onChildrenChange / mergeChildren', () => {});
|
||
|
||
it('setVisible / getVisible / onVisibleChange', () => {});
|
||
|
||
it('setProps', () => {});
|
||
|
||
it('isValidComponent', () => {
|
||
designer.createComponentMeta(divMetadata);
|
||
expect(doc.getNode('node_k1ow3cbo')?.isValidComponent()).toBeTruthy();
|
||
expect(doc.getNode('form')?.isValidComponent()).toBeFalsy();
|
||
});
|
||
|
||
it('isEmpty / getIndex', () => {
|
||
const firstBtn = doc.getNode('node_k1ow3cbn')!;
|
||
expect(firstBtn.isEmpty()).toBeTruthy();
|
||
expect(firstBtn.index).toBe(0);
|
||
expect(firstBtn.getIndex()).toBe(0);
|
||
});
|
||
|
||
it('schema / toData / export', () => {});
|
||
|
||
it('prevSibling / nextSibling', () => {
|
||
const firstBtn = doc.getNode('node_k1ow3cbn');
|
||
const secondBtn = doc.getNode('node_k1ow3cbp');
|
||
expect(firstBtn?.nextSibling).toBe(secondBtn);
|
||
expect(secondBtn?.prevSibling).toBe(firstBtn);
|
||
expect(secondBtn?.nextSibling).toBeNull();
|
||
});
|
||
|
||
it('toString', () => {
|
||
expect(doc.rootNode.toString()).toBe('page');
|
||
});
|
||
|
||
it('isRootNode / isRoot / isNode', () => {
|
||
expect(isRootNode(doc.rootNode)).toBeTruthy();
|
||
expect(isNode(doc.rootNode)).toBeTruthy();
|
||
});
|
||
|
||
it('contains / comparePosition', () => {});
|
||
|
||
it('getZLevelTop', () => {});
|
||
|
||
describe.skip('deprecated methods', () => {
|
||
it('setStatus / getStatus', () => {});
|
||
|
||
it('getPage', () => {
|
||
expect(doc.rootNode?.getPage()).toBe(doc);
|
||
});
|
||
it('getDOMNode', () => {});
|
||
it('registerAddon / getAddonData', () => {});
|
||
it('getPrototype / setPrototype', () => {});
|
||
});
|
||
});
|