mirror of
https://gitee.com/ByteDance/flowgram.ai.git
synced 2025-07-07 17:43:29 +08:00
117 lines
3.4 KiB
TypeScript
117 lines
3.4 KiB
TypeScript
import { beforeEach, describe, expect, it } from 'vitest';
|
|
|
|
import { createDocumentContainer } from './flow-document-container.mock';
|
|
import { FlowDocument, FlowNodeRegistry } from '../src';
|
|
|
|
function registerNode(doc: FlowDocument, newRegistry: FlowNodeRegistry): FlowNodeRegistry {
|
|
doc.registerFlowNodes(newRegistry);
|
|
return doc.getNodeRegistry(newRegistry.type);
|
|
}
|
|
const mockRegistries: FlowNodeRegistry[] = [
|
|
{
|
|
type: 'dynamicSplit',
|
|
meta: {},
|
|
onCreate(node, json) {
|
|
return node.document.addInlineBlocks(node, json.blocks || []);
|
|
},
|
|
extendChildRegistries: [
|
|
{
|
|
type: 'blockIcon',
|
|
customKey: 'blockIcon_base',
|
|
},
|
|
{
|
|
type: 'inlineBlocks',
|
|
customKey: 'inlineBlocks_base',
|
|
},
|
|
],
|
|
onAdd: () => {},
|
|
},
|
|
{
|
|
type: 'a',
|
|
extend: 'dynamicSplit',
|
|
},
|
|
{
|
|
type: 'b',
|
|
extend: 'a',
|
|
extendChildRegistries: [
|
|
{
|
|
type: 'blockIcon',
|
|
customKey: 'blockIcon_from_b',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
type: 'c',
|
|
extend: 'b',
|
|
extendChildRegistries: [
|
|
{
|
|
type: 'blockIcon',
|
|
customKey: 'blockIcon_from_c',
|
|
},
|
|
{
|
|
type: 'inlineBlocks',
|
|
customKey: 'inlineBlocks_from_c',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
describe('flow-node-registry', () => {
|
|
let doc: FlowDocument;
|
|
beforeEach(() => {
|
|
const container = createDocumentContainer();
|
|
doc = container.get<FlowDocument>(FlowDocument);
|
|
doc.registerFlowNodes(...mockRegistries);
|
|
});
|
|
it('extend check', () => {
|
|
expect(doc.getNodeRegistry('dynamicSplit').__extends__).toEqual(undefined);
|
|
expect(doc.getNodeRegistry('a').__extends__).toEqual(['dynamicSplit']);
|
|
expect(doc.getNodeRegistry('b').__extends__).toEqual(['a', 'dynamicSplit']);
|
|
expect(doc.getNodeRegistry('c').__extends__).toEqual(['b', 'a', 'dynamicSplit']);
|
|
expect(doc.isExtend('dynamicSplit', 'dynamicSplit')).toBeFalsy();
|
|
expect(doc.isExtend('a', 'b')).toBeFalsy();
|
|
expect(doc.isExtend('a', 'dynamicSplit')).toBeTruthy();
|
|
expect(doc.isExtend('b', 'dynamicSplit')).toBeTruthy();
|
|
expect(doc.isExtend('b', 'a')).toBeTruthy();
|
|
expect(doc.isExtend('c', 'dynamicSplit')).toBeTruthy();
|
|
expect(doc.isExtend('c', 'b')).toBeTruthy();
|
|
expect(doc.isExtend('c', 'a')).toBeTruthy();
|
|
});
|
|
it('base extend', () => {
|
|
expect(doc.getNodeRegistry('a').onAdd).toBeTypeOf('function');
|
|
doc.addNode({
|
|
id: 'a',
|
|
type: 'a',
|
|
parent: doc.root,
|
|
});
|
|
expect(doc.toString()).toEqual(`root
|
|
|-- a
|
|
|---- $blockIcon$a
|
|
|---- $inlineBlocks$a`);
|
|
expect(doc.getNode('$blockIcon$a').getNodeRegistry().customKey).toBe('blockIcon_base');
|
|
});
|
|
it('extend nested', () => {
|
|
expect(doc.getNodeRegistry('b').onAdd).toBeTypeOf('function');
|
|
doc.addNode({
|
|
id: 'b',
|
|
type: 'b',
|
|
parent: doc.root,
|
|
});
|
|
doc.addNode({
|
|
id: 'c',
|
|
type: 'c',
|
|
parent: doc.root,
|
|
});
|
|
expect(doc.toString()).toEqual(`root
|
|
|-- b
|
|
|---- $blockIcon$b
|
|
|---- $inlineBlocks$b
|
|
|-- c
|
|
|---- $blockIcon$c
|
|
|---- $inlineBlocks$c`);
|
|
expect(doc.getNode('$blockIcon$b').getNodeRegistry().customKey).toBe('blockIcon_from_b');
|
|
expect(doc.getNode('$inlineBlocks$b').getNodeRegistry().customKey).toBe('inlineBlocks_base');
|
|
expect(doc.getNode('$blockIcon$c').getNodeRegistry().customKey).toBe('blockIcon_from_c');
|
|
expect(doc.getNode('$inlineBlocks$c').getNodeRegistry().customKey).toBe('inlineBlocks_from_c');
|
|
});
|
|
});
|