import { describe, it, expect, vi, beforeEach } from 'vitest'; import { transformSourceCode } from '../../packages/plugin/src/core/astTransformer'; import type { DesignModeOptions } from '../../packages/plugin/src/types'; describe('astTransformer', () => { const mockOptions: Required = { enabled: true, enableInProduction: false, attributePrefix: 'data-source', verbose: false, exclude: ['node_modules'], include: ['**/*.{js,jsx,ts,tsx}'], }; beforeEach(() => { vi.clearAllMocks(); }); describe('transformSourceCode', () => { it('应该转换简单的JSX代码', () => { const code = ` function App() { return
Hello World
; } `; const result = transformSourceCode(code, 'test.tsx', mockOptions); expect(result).toBeDefined(); expect(result).toContain('data-source'); expect(result).toContain('div'); }); it('应该为JSX元素添加源码映射属性', () => { const code = ` function App() { return (

Title

); } `; const result = transformSourceCode(code, 'test.tsx', mockOptions); expect(result).toContain('data-source-element-id'); expect(result).toContain('data-source-position'); expect(result).toContain('data-source-info'); }); it('应该处理TypeScript代码', () => { const code = ` interface Props { title: string; } function App(props: Props) { return
{props.title}
; } `; const result = transformSourceCode(code, 'test.tsx', mockOptions); expect(result).toBeDefined(); expect(result).toContain('data-source'); }); it('应该处理嵌套的JSX元素', () => { const code = ` function App() { return (

Content

); } `; const result = transformSourceCode(code, 'test.tsx', mockOptions); // 应该为多个元素添加属性 const matches = result.match(/data-source-element-id/g); expect(matches?.length).toBeGreaterThan(1); }); it('应该处理带属性的JSX元素', () => { const code = ` function App() { return (
); } `; const result = transformSourceCode(code, 'test.tsx', mockOptions); expect(result).toContain('data-source'); expect(result).toContain('container'); }); it('应该处理函数组件', () => { const code = ` const Button = ({ label }: { label: string }) => { return ; }; function App() { return