flow-transform-layer.test.tsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import { beforeEach, describe, expect, it, vi } from 'vitest';
  6. import { Container, decorate, injectable, type interfaces } from 'inversify';
  7. import {
  8. FlowDocument,
  9. FlowDocumentContainerModule,
  10. FlowDocumentContribution,
  11. } from '@flowgram.ai/document';
  12. import {
  13. createDefaultPlaygroundConfig,
  14. PlaygroundConfig,
  15. PlaygroundContainerModule,
  16. } from '@flowgram.ai/core';
  17. import { FlowRendererRegistry } from '../../src/flow-renderer-registry';
  18. import { FlowRendererContribution } from '../../src/flow-renderer-contribution';
  19. import { FlowRendererContainerModule } from '../../src/flow-renderer-container-module';
  20. import { FlowNodesTransformLayer } from '../../src';
  21. import { flowJson } from '../../__mocks__/flow-json.mock';
  22. import { FlowDocumentMockRegister } from '../../__mocks__/flow-document-container.mock';
  23. class FlowRenderMockRegister implements FlowRendererContribution {
  24. registerRenderer(registry: FlowRendererRegistry): void {
  25. registry.registerLayers(FlowNodesTransformLayer);
  26. }
  27. }
  28. decorate(injectable(), FlowRenderMockRegister);
  29. function createDocumentContainer(): interfaces.Container {
  30. const container = new Container();
  31. container.load(FlowDocumentContainerModule);
  32. container.bind(FlowDocumentContribution).to(FlowDocumentMockRegister);
  33. return container;
  34. }
  35. // layer 层 drag entity 单测
  36. describe('flow-transform-layer', () => {
  37. let container = createDocumentContainer();
  38. let document: FlowDocument;
  39. let registry: FlowRendererRegistry;
  40. beforeEach(() => {
  41. container = createDocumentContainer();
  42. container.load(FlowRendererContainerModule);
  43. container.load(PlaygroundContainerModule);
  44. container.bind(FlowRendererContribution).to(FlowRenderMockRegister);
  45. container.bind(PlaygroundConfig).toConstantValue(createDefaultPlaygroundConfig());
  46. document = container.get<FlowDocument>(FlowDocument);
  47. document.init();
  48. document.fromJSON(flowJson);
  49. registry = container.get<FlowRendererRegistry>(FlowRendererRegistry);
  50. registry.init();
  51. // Mock the ResizeObserver
  52. const ResizeObserverMock = vi.fn(() => ({
  53. observe: vi.fn(),
  54. unobserve: vi.fn(),
  55. disconnect: vi.fn(),
  56. }));
  57. // Stub the global ResizeObserver
  58. vi.stubGlobal('ResizeObserver', ResizeObserverMock);
  59. });
  60. // 测试初始化
  61. it('test ready', () => {
  62. registry.pipeline.renderer.layers.forEach(layer => {
  63. (layer as FlowNodesTransformLayer).onReady();
  64. expect(layer.node.style.zIndex).toEqual('10');
  65. });
  66. });
  67. // 缩放
  68. it('test zoom', () => {
  69. registry.pipeline.renderer.layers.forEach(layer => {
  70. (layer as FlowNodesTransformLayer).onZoom(2);
  71. expect(layer.node!.style.transform).toEqual('scale(2)');
  72. });
  73. });
  74. // FIXME: render 单测目前不全
  75. // 渲染
  76. it('test render', () => {
  77. registry.pipeline.renderer.layers.forEach(layer => {
  78. // const autorun = registry.pipeline.renderer.layerAutorunMap.get(layer);
  79. // autorun?.();
  80. (layer as FlowNodesTransformLayer).updateNodesBounds();
  81. });
  82. });
  83. });