Initial TrueGrowth source import

This commit is contained in:
2026-07-07 09:36:36 +08:00
commit 3b6781d695
2283 changed files with 691996 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
import { render, waitFor } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { Text } from './text';
import type { ParagraphElement } from '@plait/common';
import type { CustomEditor } from './custom-types';
describe('Text', () => {
it('should render successfully', () => {
const ele: ParagraphElement = {
children: [{ text: '' }],
type: 'paragraph',
};
const { baseElement } = render(<Text text={ele} />);
expect(baseElement).toBeTruthy();
});
it('clears stale selection paths when text changes', async () => {
let editor: CustomEditor | undefined;
const longText: ParagraphElement = {
children: Array.from({ length: 14 }, (_, index) => ({
text: `line-${index}`,
})),
type: 'paragraph',
};
const shortText: ParagraphElement = {
children: [{ text: 'short' }],
type: 'paragraph',
};
const { rerender } = render(
<Text
text={longText}
afterInit={(initializedEditor) => {
editor = initializedEditor as CustomEditor;
}}
/>
);
await waitFor(() => {
expect(editor).toBeDefined();
});
editor!.selection = {
anchor: { path: [0, 13], offset: 0 },
focus: { path: [0, 13], offset: 0 },
};
editor!.history.undos.push([
{
type: 'remove_node',
path: [0, 13],
node: { text: 'line-13' },
},
]);
rerender(<Text text={shortText} />);
await waitFor(() => {
expect(editor!.selection).toBeNull();
});
expect(editor!.history.undos).toHaveLength(0);
expect(() => editor!.undo()).not.toThrow();
});
});