flow-node-render-data.spec.ts 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /**
  2. * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates
  3. * SPDX-License-Identifier: MIT
  4. */
  5. import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
  6. import { baseMock } from '../flow.mock';
  7. import { createDocumentContainer } from '../flow-document-container.mock';
  8. import { FlowDocument } from '../../src/flow-document';
  9. import { FlowNodeRenderData } from '../../src/datas';
  10. describe('flow-node-render-data', () => {
  11. let container = createDocumentContainer();
  12. let document: FlowDocument;
  13. const originSetTimeout = setTimeout;
  14. beforeEach(() => {
  15. vi.stubGlobal('setTimeout', (fn: any) => {
  16. fn();
  17. return 1;
  18. });
  19. container = createDocumentContainer();
  20. document = container.get<FlowDocument>(FlowDocument);
  21. document.fromJSON(baseMock, true);
  22. document.transformer.refresh();
  23. });
  24. afterEach(() => {
  25. vi.stubGlobal('setTimeout', originSetTimeout);
  26. document.dispose();
  27. });
  28. it('expanded and adable', () => {
  29. const renderData = document.getNode('end_0')!.getData(FlowNodeRenderData)!;
  30. expect(!!renderData.addable).toEqual(false);
  31. expect(renderData.expandable).toEqual(true);
  32. renderData.toggleExpand();
  33. expect(renderData.expanded).toEqual(true);
  34. });
  35. it('get dom node', () => {
  36. const renderData = document.getNode('end_0')!.getData<FlowNodeRenderData>(FlowNodeRenderData)!;
  37. expect(renderData.node).toEqual(renderData.node);
  38. const parentDomNode = window.document.createElement('div');
  39. parentDomNode.appendChild(renderData.node);
  40. expect(renderData.node.parentElement).toEqual(parentDomNode);
  41. expect(typeof renderData.node.addEventListener).toEqual('function');
  42. renderData.dispose();
  43. expect(renderData.node.parentElement).toEqual(null);
  44. });
  45. it('hover node visible', () => {
  46. const renderData = document.getNode('end_0')!.getData(FlowNodeRenderData)!;
  47. renderData.toggleMouseEnter();
  48. expect(renderData.hovered).toEqual(true);
  49. expect(renderData.activated).toEqual(true);
  50. expect(document.renderState.getNodeHovered()).toEqual(renderData.entity);
  51. renderData.toggleMouseLeave();
  52. expect(renderData.hovered).toEqual(false);
  53. expect(renderData.activated).toEqual(false);
  54. expect(document.renderState.getNodeHovered()).toEqual(undefined);
  55. });
  56. it('hover node hidden', () => {
  57. const renderData = document
  58. .getNode('$inlineBlocks$dynamicSplit_0')!
  59. .getData(FlowNodeRenderData)!;
  60. renderData.toggleMouseEnter();
  61. expect(renderData.hovered).toEqual(false); // 是隐藏节点
  62. expect(document.renderState.getNodeHovered()).toEqual(renderData.entity);
  63. renderData.toggleMouseLeave();
  64. expect(document.renderState.getNodeHovered()).toEqual(undefined);
  65. });
  66. it('hover node silent', () => {
  67. const renderData = document.getNode('end_0')!.getData(FlowNodeRenderData)!;
  68. renderData.toggleMouseEnter(true);
  69. expect(renderData.hovered).toEqual(false);
  70. expect(document.renderState.getNodeHovered()).toEqual(renderData.entity);
  71. renderData.toggleMouseLeave(true);
  72. expect(renderData.hovered).toEqual(false);
  73. expect(document.renderState.getNodeHovered()).toEqual(undefined);
  74. });
  75. it('activated', () => {
  76. const renderData = document.getNode('$blockIcon$dynamicSplit_0')!.getData(FlowNodeRenderData)!;
  77. renderData.activated = true;
  78. expect(renderData.activated).toEqual(true);
  79. expect(renderData.entity.parent!.getData(FlowNodeRenderData)!.activated).toEqual(true);
  80. expect(renderData.lineActivated).toEqual(true);
  81. });
  82. });