2025-01-15 22:15:58 +08:00
|
|
|
import {
|
|
|
|
createTestContext,
|
|
|
|
dispatchKeydownEventForNode, expectEditorStateJSONPropToEqual,
|
|
|
|
expectNodeShapeToMatch
|
|
|
|
} from "lexical/__tests__/utils";
|
2024-12-14 20:35:13 +08:00
|
|
|
import {
|
|
|
|
$getRoot,
|
|
|
|
ParagraphNode,
|
|
|
|
TextNode
|
|
|
|
} from "lexical";
|
|
|
|
import {registerAutoLinks} from "../auto-links";
|
|
|
|
|
|
|
|
describe('Auto-link service tests', () => {
|
2025-01-15 22:15:58 +08:00
|
|
|
test('space after link in text', async () => {
|
|
|
|
const {editor} = createTestContext();
|
|
|
|
registerAutoLinks(editor);
|
|
|
|
let pNode!: ParagraphNode;
|
|
|
|
|
|
|
|
editor.updateAndCommit(() => {
|
|
|
|
pNode = new ParagraphNode();
|
|
|
|
const text = new TextNode('Some https://example.com?test=true text');
|
|
|
|
pNode.append(text);
|
|
|
|
$getRoot().append(pNode);
|
|
|
|
|
|
|
|
text.select(34, 34);
|
|
|
|
});
|
2024-12-14 20:35:13 +08:00
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
dispatchKeydownEventForNode(pNode, editor, ' ');
|
2024-12-14 20:35:13 +08:00
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
expectEditorStateJSONPropToEqual(editor, '0.1.url', 'https://example.com?test=true');
|
|
|
|
expectEditorStateJSONPropToEqual(editor, '0.1.0.text', 'https://example.com?test=true');
|
|
|
|
});
|
2024-12-14 20:35:13 +08:00
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
test('space after link at end of line', async () => {
|
|
|
|
const {editor} = createTestContext();
|
|
|
|
registerAutoLinks(editor);
|
|
|
|
let pNode!: ParagraphNode;
|
2024-12-14 20:35:13 +08:00
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
editor.updateAndCommit(() => {
|
|
|
|
pNode = new ParagraphNode();
|
|
|
|
const text = new TextNode('Some https://example.com?test=true');
|
|
|
|
pNode.append(text);
|
|
|
|
$getRoot().append(pNode);
|
2024-12-14 20:35:13 +08:00
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
text.selectEnd();
|
2024-12-14 20:35:13 +08:00
|
|
|
});
|
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
dispatchKeydownEventForNode(pNode, editor, ' ');
|
2024-12-14 20:35:13 +08:00
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
expectNodeShapeToMatch(editor, [{type: 'paragraph', children: [
|
|
|
|
{text: 'Some '},
|
|
|
|
{type: 'link', children: [{text: 'https://example.com?test=true'}]}
|
|
|
|
]}]);
|
|
|
|
expectEditorStateJSONPropToEqual(editor, '0.1.url', 'https://example.com?test=true');
|
|
|
|
});
|
2024-12-14 20:35:13 +08:00
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
test('enter after link in text', async () => {
|
|
|
|
const {editor} = createTestContext();
|
|
|
|
registerAutoLinks(editor);
|
|
|
|
let pNode!: ParagraphNode;
|
2024-12-14 20:35:13 +08:00
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
editor.updateAndCommit(() => {
|
|
|
|
pNode = new ParagraphNode();
|
|
|
|
const text = new TextNode('Some https://example.com?test=true text');
|
|
|
|
pNode.append(text);
|
|
|
|
$getRoot().append(pNode);
|
2024-12-14 20:35:13 +08:00
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
text.select(34, 34);
|
|
|
|
});
|
2024-12-14 20:35:13 +08:00
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
dispatchKeydownEventForNode(pNode, editor, 'Enter');
|
2024-12-14 20:35:13 +08:00
|
|
|
|
2025-01-15 22:15:58 +08:00
|
|
|
expectEditorStateJSONPropToEqual(editor, '0.1.url', 'https://example.com?test=true');
|
|
|
|
expectEditorStateJSONPropToEqual(editor, '0.1.0.text', 'https://example.com?test=true');
|
2024-12-14 20:35:13 +08:00
|
|
|
});
|
|
|
|
});
|